diff --git a/.cursor/skills/mcc-version-adaptation/SKILL.md b/.cursor/skills/mcc-version-adaptation/SKILL.md index b7f26464..44023b06 100644 --- a/.cursor/skills/mcc-version-adaptation/SKILL.md +++ b/.cursor/skills/mcc-version-adaptation/SKILL.md @@ -16,6 +16,38 @@ Systematic workflow for updating Minecraft Console Client to support a new Minec java -jar MinecraftDecompiler.jar --version --side SERVER \ --decompile --output -remapped.jar --decompiled-output -decompiled ``` +- 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/-Vanilla/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 @@ -33,18 +65,50 @@ This compares five registries and reports which need palette updates: | 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 @@ -55,9 +119,6 @@ python3 $MCC_REPO/tools/gen_entity_metadata_palette.py 2. MCC's `EntityMetaDataType.cs` enum 3. `DataTypes.cs` read logic (add a `case` to consume the correct bytes) -### Entity/Block Palettes -No generator script yet — these change rarely. When needed, manually create by following the pattern of existing palette files, using `register("name", ...)` call order from the decompiled source. - ### DataComponents / StructuredComponents Compare `DataComponents.java` registration order. If new components appear, update `StructuredComponentsRegistryXXX.cs`. For new component types, implement corresponding reader in `StructuredComponents/Components/`. @@ -72,10 +133,31 @@ After creating palette files, update version selection logic: | 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. -## Step 4: Check Variant Encoding Changes +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 + +## 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: @@ -85,18 +167,26 @@ For entity types that use variant serializers (Cat, Wolf, Frog, Painting), check - `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 5: Handle New EntityDataSerializer Types +## 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 - - Examples: VarInt read, list of particles, etc. + - 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 6: Compile and Verify +## 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: Compile and Verify ```bash dotnet build $MCC_REPO/MinecraftClient.sln -c Release @@ -104,27 +194,53 @@ 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 -- Summon entities (especially variant types) → no metadata parse errors -- Particle effects → no crashes +- `/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) | +| `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) | +| `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 -- **ID order matters**: IDs are determined by declaration/registration order, not alphabetical. Always use the decompiled source as ground truth. +- **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 | diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1219.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette1219.cs new file mode 100644 index 00000000..db6985f7 --- /dev/null +++ b/MinecraftClient/Inventory/ItemPalettes/ItemPalette1219.cs @@ -0,0 +1,1506 @@ +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/ItemType.cs b/MinecraftClient/Inventory/ItemType.cs index e739e36a..16859e0c 100644 --- a/MinecraftClient/Inventory/ItemType.cs +++ b/MinecraftClient/Inventory/ItemType.cs @@ -26,6 +26,7 @@ namespace MinecraftClient.Inventory AcaciaPlanks, AcaciaPressurePlate, AcaciaSapling, + AcaciaShelf, AcaciaSign, AcaciaSlab, AcaciaStairs, @@ -72,6 +73,7 @@ namespace MinecraftClient.Inventory BambooPlanks, BambooPressurePlate, BambooRaft, + BambooShelf, BambooSign, BambooSlab, BambooStairs, @@ -103,6 +105,7 @@ namespace MinecraftClient.Inventory BirchPlanks, BirchPressurePlate, BirchSapling, + BirchShelf, BirchSign, BirchSlab, BirchStairs, @@ -110,19 +113,19 @@ namespace MinecraftClient.Inventory BirchWood, BlackBanner, BlackBed, + BlackBundle, BlackCandle, BlackCarpet, BlackConcrete, BlackConcretePowder, BlackDye, BlackGlazedTerracotta, + BlackHarness, BlackShulkerBox, BlackStainedGlass, BlackStainedGlassPane, BlackTerracotta, BlackWool, - BlackBundle, - BlackHarness, Blackstone, BlackstoneSlab, BlackstoneStairs, @@ -134,13 +137,15 @@ namespace MinecraftClient.Inventory BlazeSpawnEgg, BlueBanner, BlueBed, + BlueBundle, BlueCandle, BlueCarpet, BlueConcrete, BlueConcretePowder, BlueDye, - BlueEgg, // blue egg + BlueEgg, BlueGlazedTerracotta, + BlueHarness, BlueIce, BlueOrchid, BlueShulkerBox, @@ -148,8 +153,6 @@ namespace MinecraftClient.Inventory BlueStainedGlassPane, BlueTerracotta, BlueWool, - BlueBundle, - BlueHarness, BoggedSpawnEgg, BoltArmorTrimSmithingTemplate, Bone, @@ -175,13 +178,15 @@ namespace MinecraftClient.Inventory Bricks, BrownBanner, BrownBed, + BrownBundle, BrownCandle, BrownCarpet, BrownConcrete, BrownConcretePowder, BrownDye, - BrownEgg, // brown egg + BrownEgg, BrownGlazedTerracotta, + BrownHarness, BrownMushroom, BrownMushroomBlock, BrownShulkerBox, @@ -189,8 +194,6 @@ namespace MinecraftClient.Inventory BrownStainedGlassPane, BrownTerracotta, BrownWool, - BrownBundle, - BrownHarness, Brush, BubbleCoral, BubbleCoralBlock, @@ -199,9 +202,9 @@ namespace MinecraftClient.Inventory BuddingAmethyst, Bundle, BurnPotterySherd, - Bush, // bush + Bush, Cactus, - CactusFlower, // cactus flower + CactusFlower, Cake, Calcite, CalibratedSculkSensor, @@ -234,6 +237,7 @@ namespace MinecraftClient.Inventory CherryPlanks, CherryPressurePlate, CherrySapling, + CherryShelf, CherrySign, CherrySlab, CherryStairs, @@ -295,12 +299,30 @@ namespace MinecraftClient.Inventory CookedRabbit, CookedSalmon, Cookie, + CopperAxe, + CopperBars, CopperBlock, + CopperBoots, CopperBulb, + CopperChain, + CopperChest, + CopperChestplate, CopperDoor, + CopperGolemSpawnEgg, + CopperGolemStatue, CopperGrate, + CopperHelmet, + CopperHoe, + CopperHorseArmor, CopperIngot, + CopperLantern, + CopperLeggings, + CopperNugget, CopperOre, + CopperPickaxe, + CopperShovel, + CopperSword, + CopperTorch, CopperTrapdoor, Cornflower, CowSpawnEgg, @@ -327,6 +349,7 @@ namespace MinecraftClient.Inventory CrimsonPlanks, CrimsonPressurePlate, CrimsonRoots, + CrimsonShelf, CrimsonSign, CrimsonSlab, CrimsonStairs, @@ -343,19 +366,19 @@ namespace MinecraftClient.Inventory CutSandstoneSlab, CyanBanner, CyanBed, + CyanBundle, CyanCandle, CyanCarpet, CyanConcrete, CyanConcretePowder, CyanDye, CyanGlazedTerracotta, + CyanHarness, CyanShulkerBox, CyanStainedGlass, CyanStainedGlassPane, CyanTerracotta, CyanWool, - CyanBundle, - CyanHarness, DamagedAnvil, Dandelion, DangerPotterySherd, @@ -371,6 +394,7 @@ namespace MinecraftClient.Inventory DarkOakPlanks, DarkOakPressurePlate, DarkOakSapling, + DarkOakShelf, DarkOakSign, DarkOakSlab, DarkOakStairs, @@ -448,8 +472,8 @@ namespace MinecraftClient.Inventory DripstoneBlock, Dropper, DrownedSpawnEgg, - DryShortGrass, // dry short grass - DryTallGrass, // dry tall grass + DryShortGrass, + DryTallGrass, DuneArmorTrimSmithingTemplate, EchoShard, Egg, @@ -480,13 +504,19 @@ namespace MinecraftClient.Inventory ExplorerPotterySherd, ExposedChiseledCopper, ExposedCopper, + ExposedCopperBars, ExposedCopperBulb, + ExposedCopperChain, + ExposedCopperChest, ExposedCopperDoor, + ExposedCopperGolemStatue, ExposedCopperGrate, + ExposedCopperLantern, ExposedCopperTrapdoor, ExposedCutCopper, ExposedCutCopperSlab, ExposedCutCopperStairs, + ExposedLightningRod, EyeArmorTrimSmithingTemplate, Farmland, Feather, @@ -498,7 +528,7 @@ namespace MinecraftClient.Inventory FireCoral, FireCoralBlock, FireCoralFan, - FireflyBush, // firefly bush + FireflyBush, FireworkRocket, FireworkStar, FishingRod, @@ -559,34 +589,34 @@ namespace MinecraftClient.Inventory Gravel, GrayBanner, GrayBed, + GrayBundle, GrayCandle, GrayCarpet, GrayConcrete, GrayConcretePowder, GrayDye, GrayGlazedTerracotta, + GrayHarness, GrayShulkerBox, GrayStainedGlass, GrayStainedGlassPane, GrayTerracotta, GrayWool, - GrayBundle, - GrayHarness, GreenBanner, GreenBed, + GreenBundle, GreenCandle, GreenCarpet, GreenConcrete, GreenConcretePowder, GreenDye, GreenGlazedTerracotta, + GreenHarness, GreenShulkerBox, GreenStainedGlass, GreenStainedGlassPane, GreenTerracotta, GreenWool, - GreenBundle, - GreenHarness, Grindstone, GuardianSpawnEgg, Gunpowder, @@ -627,6 +657,7 @@ namespace MinecraftClient.Inventory IronBars, IronBlock, IronBoots, + IronChain, IronChestplate, IronDoor, IronGolemSpawnEgg, @@ -657,6 +688,7 @@ namespace MinecraftClient.Inventory JunglePlanks, JunglePressurePlate, JungleSapling, + JungleShelf, JungleSign, JungleSlab, JungleStairs, @@ -673,7 +705,7 @@ namespace MinecraftClient.Inventory LargeFern, LavaBucket, Lead, - LeafLitter, // leaf litter + LeafLitter, Leather, LeatherBoots, LeatherChestplate, @@ -685,34 +717,34 @@ namespace MinecraftClient.Inventory Light, LightBlueBanner, LightBlueBed, + LightBlueBundle, LightBlueCandle, LightBlueCarpet, LightBlueConcrete, LightBlueConcretePowder, LightBlueDye, LightBlueGlazedTerracotta, + LightBlueHarness, LightBlueShulkerBox, LightBlueStainedGlass, LightBlueStainedGlassPane, LightBlueTerracotta, LightBlueWool, - LightBlueBundle, - LightBlueHarness, LightGrayBanner, LightGrayBed, + LightGrayBundle, LightGrayCandle, LightGrayCarpet, LightGrayConcrete, LightGrayConcretePowder, LightGrayDye, LightGrayGlazedTerracotta, + LightGrayHarness, LightGrayShulkerBox, LightGrayStainedGlass, LightGrayStainedGlassPane, LightGrayTerracotta, LightGrayWool, - LightGrayBundle, - LightGrayHarness, LightWeightedPressurePlate, LightningRod, Lilac, @@ -720,19 +752,19 @@ namespace MinecraftClient.Inventory LilyPad, LimeBanner, LimeBed, + LimeBundle, LimeCandle, LimeCarpet, LimeConcrete, LimeConcretePowder, LimeDye, LimeGlazedTerracotta, + LimeHarness, LimeShulkerBox, LimeStainedGlass, LimeStainedGlassPane, LimeTerracotta, LimeWool, - LimeBundle, - LimeHarness, LingeringPotion, LlamaSpawnEgg, Lodestone, @@ -740,19 +772,19 @@ namespace MinecraftClient.Inventory Mace, MagentaBanner, MagentaBed, + MagentaBundle, MagentaCandle, MagentaCarpet, MagentaConcrete, MagentaConcretePowder, MagentaDye, MagentaGlazedTerracotta, + MagentaHarness, MagentaShulkerBox, MagentaStainedGlass, MagentaStainedGlassPane, MagentaTerracotta, MagentaWool, - MagentaBundle, - MagentaHarness, MagmaBlock, MagmaCream, MagmaCubeSpawnEgg, @@ -769,6 +801,7 @@ namespace MinecraftClient.Inventory MangrovePressurePlate, MangrovePropagule, MangroveRoots, + MangroveShelf, MangroveSign, MangroveSlab, MangroveStairs, @@ -868,6 +901,7 @@ namespace MinecraftClient.Inventory OakPlanks, OakPressurePlate, OakSapling, + OakShelf, OakSign, OakSlab, OakStairs, @@ -882,30 +916,36 @@ namespace MinecraftClient.Inventory OpenEyeblossom, OrangeBanner, OrangeBed, + OrangeBundle, OrangeCandle, OrangeCarpet, OrangeConcrete, OrangeConcretePowder, OrangeDye, OrangeGlazedTerracotta, + OrangeHarness, OrangeShulkerBox, OrangeStainedGlass, OrangeStainedGlassPane, OrangeTerracotta, OrangeTulip, OrangeWool, - OrangeBundle, - OrangeHarness, OxeyeDaisy, OxidizedChiseledCopper, OxidizedCopper, + OxidizedCopperBars, OxidizedCopperBulb, + OxidizedCopperChain, + OxidizedCopperChest, OxidizedCopperDoor, + OxidizedCopperGolemStatue, OxidizedCopperGrate, + OxidizedCopperLantern, OxidizedCopperTrapdoor, OxidizedCutCopper, OxidizedCutCopperSlab, OxidizedCutCopperStairs, + OxidizedLightningRod, PackedIce, PackedMud, Painting, @@ -924,6 +964,7 @@ namespace MinecraftClient.Inventory PaleOakPlanks, PaleOakPressurePlate, PaleOakSapling, + PaleOakShelf, PaleOakSign, PaleOakSlab, PaleOakStairs, @@ -945,12 +986,14 @@ namespace MinecraftClient.Inventory PillagerSpawnEgg, PinkBanner, PinkBed, + PinkBundle, PinkCandle, PinkCarpet, PinkConcrete, PinkConcretePowder, PinkDye, PinkGlazedTerracotta, + PinkHarness, PinkPetals, PinkShulkerBox, PinkStainedGlass, @@ -958,8 +1001,6 @@ namespace MinecraftClient.Inventory PinkTerracotta, PinkTulip, PinkWool, - PinkBundle, - PinkHarness, Piston, PitcherPlant, PitcherPod, @@ -1022,19 +1063,19 @@ namespace MinecraftClient.Inventory PumpkinSeeds, PurpleBanner, PurpleBed, + PurpleBundle, PurpleCandle, PurpleCarpet, PurpleConcrete, PurpleConcretePowder, PurpleDye, PurpleGlazedTerracotta, + PurpleHarness, PurpleShulkerBox, PurpleStainedGlass, PurpleStainedGlassPane, PurpleTerracotta, PurpleWool, - PurpleBundle, - PurpleHarness, PurpurBlock, PurpurPillar, PurpurSlab, @@ -1062,12 +1103,14 @@ namespace MinecraftClient.Inventory RecoveryCompass, RedBanner, RedBed, + RedBundle, RedCandle, RedCarpet, RedConcrete, RedConcretePowder, RedDye, RedGlazedTerracotta, + RedHarness, RedMushroom, RedMushroomBlock, RedNetherBrickSlab, @@ -1085,8 +1128,6 @@ namespace MinecraftClient.Inventory RedTerracotta, RedTulip, RedWool, - RedBundle, - RedHarness, Redstone, RedstoneBlock, RedstoneLamp, @@ -1097,10 +1138,10 @@ namespace MinecraftClient.Inventory RepeatingCommandBlock, ResinBlock, ResinBrick, - ResinBricks, ResinBrickSlab, ResinBrickStairs, ResinBrickWall, + ResinBricks, ResinClump, RespawnAnchor, RibArmorTrimSmithingTemplate, @@ -1133,6 +1174,7 @@ namespace MinecraftClient.Inventory SheepSpawnEgg, ShelterPotterySherd, Shield, + ShortDryGrass, ShortGrass, Shroomlight, ShulkerBox, @@ -1197,6 +1239,7 @@ namespace MinecraftClient.Inventory SprucePlanks, SprucePressurePlate, SpruceSapling, + SpruceShelf, SpruceSign, SpruceSlab, SpruceStairs, @@ -1258,11 +1301,12 @@ namespace MinecraftClient.Inventory SweetBerries, TadpoleBucket, TadpoleSpawnEgg, + TallDryGrass, TallGrass, Target, Terracotta, - TestBlock, // test block - TestInstanceBlock, // test instance block + TestBlock, + TestInstanceBlock, TideArmorTrimSmithingTemplate, TintedGlass, TippedArrow, @@ -1319,6 +1363,7 @@ namespace MinecraftClient.Inventory WarpedPlanks, WarpedPressurePlate, WarpedRoots, + WarpedShelf, WarpedSign, WarpedSlab, WarpedStairs, @@ -1327,73 +1372,103 @@ namespace MinecraftClient.Inventory 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, - WhiteBundle, - WhiteHarness, WildArmorTrimSmithingTemplate, - Wildflowers, // wildflowers + Wildflowers, WindCharge, WitchSpawnEgg, WitherRose, @@ -1411,19 +1486,19 @@ namespace MinecraftClient.Inventory WrittenBook, YellowBanner, YellowBed, + YellowBundle, YellowCandle, YellowCarpet, YellowConcrete, YellowConcretePowder, YellowDye, YellowGlazedTerracotta, + YellowHarness, YellowShulkerBox, YellowStainedGlass, YellowStainedGlassPane, YellowTerracotta, YellowWool, - YellowBundle, - YellowHarness, ZoglinSpawnEgg, ZombieHead, ZombieHorseSpawnEgg, @@ -1431,4 +1506,4 @@ namespace MinecraftClient.Inventory ZombieVillagerSpawnEgg, ZombifiedPiglinSpawnEgg, } -} \ No newline at end of file +} diff --git a/MinecraftClient/Mapping/BlockPalettes/Palette1219.cs b/MinecraftClient/Mapping/BlockPalettes/Palette1219.cs new file mode 100644 index 00000000..9994f3c3 --- /dev/null +++ b/MinecraftClient/Mapping/BlockPalettes/Palette1219.cs @@ -0,0 +1,2350 @@ +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; + } + + protected override Dictionary GetDict() + { + return materials; + } + } +} diff --git a/MinecraftClient/Mapping/EntityMetaDataType.cs b/MinecraftClient/Mapping/EntityMetaDataType.cs index 075bb52d..a9204a8e 100644 --- a/MinecraftClient/Mapping/EntityMetaDataType.cs +++ b/MinecraftClient/Mapping/EntityMetaDataType.cs @@ -98,11 +98,23 @@ public enum EntityMetaDataType /// ArmadilloState, /// + /// VarInt (1.21.9+) + /// + CopperGolemState, + /// + /// VarInt (1.21.9+) + /// + WeatheringCopperState, + /// /// Float x3 /// Vector3, /// /// Float x4 /// - Quaternion + Quaternion, + /// + /// Either<GameProfile, Partial> + PlayerSkin.Patch (1.21.9+) + /// + ResolvableProfile } \ No newline at end of file diff --git a/MinecraftClient/Mapping/EntityMetadataPalette.cs b/MinecraftClient/Mapping/EntityMetadataPalette.cs index 7cdb194a..60acef8c 100644 --- a/MinecraftClient/Mapping/EntityMetadataPalette.cs +++ b/MinecraftClient/Mapping/EntityMetadataPalette.cs @@ -24,7 +24,8 @@ public abstract class EntityMetadataPalette <= 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.7 + <= 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 _ => throw new NotImplementedException() }; } diff --git a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1219.cs b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1219.cs new file mode 100644 index 00000000..2fa5d35e --- /dev/null +++ b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1219.cs @@ -0,0 +1,52 @@ +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/EntityPalettes/EntityPalette1219.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette1219.cs new file mode 100644 index 00000000..448bdbcc --- /dev/null +++ b/MinecraftClient/Mapping/EntityPalettes/EntityPalette1219.cs @@ -0,0 +1,171 @@ +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/EntityType.cs b/MinecraftClient/Mapping/EntityType.cs index 6e75efce..4dca83f7 100644 --- a/MinecraftClient/Mapping/EntityType.cs +++ b/MinecraftClient/Mapping/EntityType.cs @@ -44,6 +44,7 @@ namespace MinecraftClient.Mapping Chicken, Cod, CommandBlockMinecart, + CopperGolem, Cow, Creaking, CreakingTransient, @@ -99,6 +100,7 @@ namespace MinecraftClient.Mapping MagmaCube, MangroveBoat, MangroveChestBoat, + Mannequin, Marker, Minecart, Mooshroom, diff --git a/MinecraftClient/Mapping/Material.cs b/MinecraftClient/Mapping/Material.cs index d0c71840..35454a6e 100644 --- a/MinecraftClient/Mapping/Material.cs +++ b/MinecraftClient/Mapping/Material.cs @@ -24,6 +24,7 @@ namespace MinecraftClient.Mapping AcaciaPlanks, AcaciaPressurePlate, AcaciaSapling, + AcaciaShelf, AcaciaSign, AcaciaSlab, AcaciaStairs, @@ -60,6 +61,7 @@ namespace MinecraftClient.Mapping BambooPlanks, BambooPressurePlate, BambooSapling, + BambooShelf, BambooSign, BambooSlab, BambooStairs, @@ -87,6 +89,7 @@ namespace MinecraftClient.Mapping BirchPlanks, BirchPressurePlate, BirchSapling, + BirchShelf, BirchSign, BirchSlab, BirchStairs, @@ -162,9 +165,9 @@ namespace MinecraftClient.Mapping BubbleCoralFan, BubbleCoralWallFan, BuddingAmethyst, - Bush, // bush + Bush, Cactus, - CactusFlower, // cactus_flower + CactusFlower, Cake, Calcite, CalibratedSculkSensor, @@ -190,6 +193,7 @@ namespace MinecraftClient.Mapping CherryPlanks, CherryPressurePlate, CherrySapling, + CherryShelf, CherrySign, CherrySlab, CherryStairs, @@ -232,12 +236,19 @@ namespace MinecraftClient.Mapping Comparator, Composter, Conduit, + CopperBars, CopperBlock, CopperBulb, + CopperChain, + CopperChest, CopperDoor, + CopperGolemStatue, CopperGrate, + CopperLantern, CopperOre, + CopperTorch, CopperTrapdoor, + CopperWallTorch, Cornflower, CrackedDeepslateBricks, CrackedDeepslateTiles, @@ -260,6 +271,7 @@ namespace MinecraftClient.Mapping CrimsonPlanks, CrimsonPressurePlate, CrimsonRoots, + CrimsonShelf, CrimsonSign, CrimsonSlab, CrimsonStairs, @@ -301,6 +313,7 @@ namespace MinecraftClient.Mapping DarkOakPlanks, DarkOakPressurePlate, DarkOakSapling, + DarkOakShelf, DarkOakSign, DarkOakSlab, DarkOakStairs, @@ -383,13 +396,19 @@ namespace MinecraftClient.Mapping EnderChest, ExposedChiseledCopper, ExposedCopper, + ExposedCopperBars, ExposedCopperBulb, + ExposedCopperChain, + ExposedCopperChest, ExposedCopperDoor, + ExposedCopperGolemStatue, ExposedCopperGrate, + ExposedCopperLantern, ExposedCopperTrapdoor, ExposedCutCopper, ExposedCutCopperSlab, ExposedCutCopperStairs, + ExposedLightningRod, Farmland, Fern, Fire, @@ -397,7 +416,7 @@ namespace MinecraftClient.Mapping FireCoralBlock, FireCoralFan, FireCoralWallFan, - FireflyBush, // firefly_bush + FireflyBush, FletchingTable, FlowerPot, FloweringAzalea, @@ -468,6 +487,7 @@ namespace MinecraftClient.Mapping InfestedStoneBricks, IronBars, IronBlock, + IronChain, IronDoor, IronOre, IronTrapdoor, @@ -484,6 +504,7 @@ namespace MinecraftClient.Mapping JunglePlanks, JunglePressurePlate, JungleSapling, + JungleShelf, JungleSign, JungleSlab, JungleStairs, @@ -501,7 +522,7 @@ namespace MinecraftClient.Mapping LargeFern, Lava, LavaCauldron, - LeafLitter, // leaf_litter + LeafLitter, Lectern, Lever, Light, @@ -580,6 +601,7 @@ namespace MinecraftClient.Mapping MangrovePressurePlate, MangrovePropagule, MangroveRoots, + MangroveShelf, MangroveSign, MangroveSlab, MangroveStairs, @@ -633,6 +655,7 @@ namespace MinecraftClient.Mapping OakPlanks, OakPressurePlate, OakSapling, + OakShelf, OakSign, OakSlab, OakStairs, @@ -662,13 +685,19 @@ namespace MinecraftClient.Mapping OxeyeDaisy, OxidizedChiseledCopper, OxidizedCopper, + OxidizedCopperBars, OxidizedCopperBulb, + OxidizedCopperChain, + OxidizedCopperChest, OxidizedCopperDoor, + OxidizedCopperGolemStatue, OxidizedCopperGrate, + OxidizedCopperLantern, OxidizedCopperTrapdoor, OxidizedCutCopper, OxidizedCutCopperSlab, OxidizedCutCopperStairs, + OxidizedLightningRod, PackedIce, PackedMud, PaleHangingMoss, @@ -684,6 +713,7 @@ namespace MinecraftClient.Mapping PaleOakPlanks, PaleOakPressurePlate, PaleOakSapling, + PaleOakShelf, PaleOakSign, PaleOakSlab, PaleOakStairs, @@ -884,7 +914,7 @@ namespace MinecraftClient.Mapping SeaLantern, SeaPickle, Seagrass, - ShortDryGrass, // short_dry_grass + ShortDryGrass, ShortGrass, Shroomlight, ShulkerBox, @@ -930,6 +960,7 @@ namespace MinecraftClient.Mapping SprucePlanks, SprucePressurePlate, SpruceSapling, + SpruceShelf, SpruceSign, SpruceSlab, SpruceStairs, @@ -978,13 +1009,13 @@ namespace MinecraftClient.Mapping SuspiciousGravel, SuspiciousSand, SweetBerryBush, - TallDryGrass, // tall_dry_grass + TallDryGrass, TallGrass, TallSeagrass, Target, Terracotta, - TestBlock, // test_block - TestInstanceBlock, // test_instance_block + TestBlock, + TestInstanceBlock, TintedGlass, Tnt, Torch, @@ -1025,6 +1056,7 @@ namespace MinecraftClient.Mapping WarpedPlanks, WarpedPressurePlate, WarpedRoots, + WarpedShelf, WarpedSign, WarpedSlab, WarpedStairs, @@ -1036,50 +1068,80 @@ namespace MinecraftClient.Mapping 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, @@ -1099,7 +1161,7 @@ namespace MinecraftClient.Mapping WhiteTulip, WhiteWallBanner, WhiteWool, - Wildflowers, // wildflowers + Wildflowers, WitherRose, WitherSkeletonSkull, WitherSkeletonWallSkull, @@ -1120,4 +1182,4 @@ namespace MinecraftClient.Mapping ZombieHead, ZombieWallHead, } -} +} \ No newline at end of file diff --git a/MinecraftClient/Program.cs b/MinecraftClient/Program.cs index 9d97d03b..ee448708 100644 --- a/MinecraftClient/Program.cs +++ b/MinecraftClient/Program.cs @@ -46,7 +46,7 @@ namespace MinecraftClient public const string Version = MCHighestVersion; public const string MCLowestVersion = "1.4.6"; - public const string MCHighestVersion = "1.21.8"; + public const string MCHighestVersion = "1.21.10"; public static readonly string? BuildInfo = null; private static Tuple? offlinePrompt = null; diff --git a/MinecraftClient/Protocol/Handlers/ConfigurationPacketTypesIn.cs b/MinecraftClient/Protocol/Handlers/ConfigurationPacketTypesIn.cs index edc48e82..f3b4be23 100644 --- a/MinecraftClient/Protocol/Handlers/ConfigurationPacketTypesIn.cs +++ b/MinecraftClient/Protocol/Handlers/ConfigurationPacketTypesIn.cs @@ -21,6 +21,7 @@ public enum ConfigurationPacketTypesIn 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 index d3f7dd0b..30b7c909 100644 --- a/MinecraftClient/Protocol/Handlers/ConfigurationPacketTypesOut.cs +++ b/MinecraftClient/Protocol/Handlers/ConfigurationPacketTypesOut.cs @@ -11,6 +11,7 @@ public enum ConfigurationPacketTypesOut 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 index ab46dca7..d669fc68 100644 --- a/MinecraftClient/Protocol/Handlers/DataTypes.cs +++ b/MinecraftClient/Protocol/Handlers/DataTypes.cs @@ -559,11 +559,32 @@ namespace MinecraftClient.Protocol.Handlers int data = -1; byte entityPitch, entityYaw; - if (living) + 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 { @@ -577,24 +598,24 @@ namespace MinecraftClient.Protocol.Handlers data = protocolversion >= Protocol18Handler.MC_1_19_Version ? ReadNextVarInt(cache) : ReadNextInt(cache); - } - // In 1.8 those 3 fields for Velocity are optional - if (protocolversion < Protocol18Handler.MC_1_9_Version) - { - if (data != 0) + // 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); } } - else - { - ReadNextShort(cache); - ReadNextShort(cache); - ReadNextShort(cache); - } return new Entity(entityID, entityType, new Location(entityX, entityY, entityZ), entityYaw, entityPitch, data); @@ -907,6 +928,13 @@ namespace MinecraftClient.Protocol.Handlers 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.ResolvableProfile: // ResolvableProfile (1.21.9+) + ReadNextResolvableProfile(cache); + break; case EntityMetaDataType.Vector3: // Vector 3f value = new List { @@ -938,6 +966,76 @@ namespace MinecraftClient.Protocol.Handlers } } + /// + /// Read an LpVec3 (low-precision vec3) from the cache (1.21.9+). + /// Variable-length encoding: first byte 0 = zero vector; otherwise + /// 2 bytes + 4 bytes (6 total), plus an optional VarInt continuation. + /// + public void ReadNextLpVec3(Queue cache) + { + int first = ReadNextByte(cache); + if (first == 0) + return; + ReadNextByte(cache); // second byte + ReadData(4, cache); // uint32 + if ((first & 4) == 4) // continuation bit set + ReadNextVarInt(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 /// diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1219.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1219.cs new file mode 100644 index 00000000..0f4bfe90 --- /dev/null +++ b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1219.cs @@ -0,0 +1,262 @@ +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/PacketType18Handler.cs b/MinecraftClient/Protocol/Handlers/PacketType18Handler.cs index bcb3f466..6a608dba 100644 --- a/MinecraftClient/Protocol/Handlers/PacketType18Handler.cs +++ b/MinecraftClient/Protocol/Handlers/PacketType18Handler.cs @@ -48,8 +48,9 @@ namespace MinecraftClient.Protocol.Handlers { PacketTypePalette p = protocol switch { - > Protocol18Handler.MC_1_21_7_Version => throw new NotImplementedException(Translations + > Protocol18Handler.MC_1_21_9_Version => throw new NotImplementedException(Translations .exception_palette_packet), + <= Protocol18Handler.MC_1_21_9_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(), diff --git a/MinecraftClient/Protocol/Handlers/PacketTypesIn.cs b/MinecraftClient/Protocol/Handlers/PacketTypesIn.cs index 7e257b27..5ff6ad2e 100644 --- a/MinecraftClient/Protocol/Handlers/PacketTypesIn.cs +++ b/MinecraftClient/Protocol/Handlers/PacketTypesIn.cs @@ -164,5 +164,10 @@ namespace MinecraftClient.Protocol.Handlers 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 } } diff --git a/MinecraftClient/Protocol/Handlers/Protocol18.cs b/MinecraftClient/Protocol/Handlers/Protocol18.cs index f10ee1ed..6d102808 100644 --- a/MinecraftClient/Protocol/Handlers/Protocol18.cs +++ b/MinecraftClient/Protocol/Handlers/Protocol18.cs @@ -78,6 +78,7 @@ namespace MinecraftClient.Protocol.Handlers 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; private int compression_treshold = -1; private int autocomplete_transaction_id = 0; @@ -129,21 +130,21 @@ namespace MinecraftClient.Protocol.Handlers lastSeenMessagesCollector = protocolVersion >= MC_1_19_3_Version ? new(20) : new(5); chunkBatchStartTime = GetNanos(); - if (handler.GetTerrainEnabled() && protocolVersion > MC_1_21_7_Version) + if (handler.GetTerrainEnabled() && protocolVersion > MC_1_21_9_Version) { log.Error($"§c{Translations.extra_terrainandmovement_disabled}"); handler.SetTerrainEnabled(false); } if (handler.GetInventoryEnabled() && - protocolVersion is < MC_1_8_Version or > MC_1_21_7_Version) + protocolVersion is < MC_1_8_Version or > MC_1_21_9_Version) { log.Error($"§c{Translations.extra_inventory_disabled}"); handler.SetInventoryEnabled(false); } if (handler.GetEntityHandlingEnabled() && - protocolVersion is < MC_1_8_Version or > MC_1_21_7_Version) + protocolVersion is < MC_1_8_Version or > MC_1_21_9_Version) { log.Error($"§c{Translations.extra_entity_disabled}"); handler.SetEntityHandlingEnabled(false); @@ -152,9 +153,10 @@ namespace MinecraftClient.Protocol.Handlers Block.Palette = protocolVersion switch { // Block palette - > MC_1_21_7_Version when handler.GetTerrainEnabled() => + > MC_1_21_9_Version when handler.GetTerrainEnabled() => throw new NotImplementedException(Translations.exception_palette_block), - >= MC_1_21_6_Version => new Palette1216(), // 1.21.7 blocks unchanged, reuse 1216 + >= 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(), @@ -175,9 +177,10 @@ namespace MinecraftClient.Protocol.Handlers entityPalette = protocolVersion switch { // Entity palette - > MC_1_21_7_Version when handler.GetEntityHandlingEnabled() => + > MC_1_21_9_Version when handler.GetEntityHandlingEnabled() => throw new NotImplementedException(Translations.exception_palette_entity), - >= MC_1_21_6_Version => new EntityPalette1216(), // 1.21.7 entities unchanged, reuse 1216 + >= 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(), @@ -202,8 +205,9 @@ namespace MinecraftClient.Protocol.Handlers itemPalette = protocolVersion switch { // Item palette - > MC_1_21_7_Version when handler.GetInventoryEnabled() => + > MC_1_21_9_Version when handler.GetInventoryEnabled() => throw new NotImplementedException(Translations.exception_palette_item), + >= 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(), @@ -2661,7 +2665,7 @@ namespace MinecraftClient.Protocol.Handlers // Also make a palette for field? Will be a lot of work var healthField = protocolVersion switch { - > MC_1_21_7_Version => throw new NotImplementedException(Translations + > MC_1_21_9_Version => throw new NotImplementedException(Translations .exception_palette_healthfield), // 1.17 and above >= MC_1_17_Version => 9, diff --git a/MinecraftClient/Protocol/ProtocolHandler.cs b/MinecraftClient/Protocol/ProtocolHandler.cs index 28ea07b3..a71b9122 100644 --- a/MinecraftClient/Protocol/ProtocolHandler.cs +++ b/MinecraftClient/Protocol/ProtocolHandler.cs @@ -154,7 +154,7 @@ namespace MinecraftClient.Protocol { 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 + 769, 770, 771, 772, 773 }; if (Array.IndexOf(suppoertedVersionsProtocol18, protocolVersion) > -1) @@ -365,6 +365,9 @@ namespace MinecraftClient.Protocol case "1.21.7": case "1.21.8": return 772; + case "1.21.9": + case "1.21.10": + return 773; default: return 0; } @@ -451,6 +454,7 @@ namespace MinecraftClient.Protocol 770 => "1.21.5", 771 => "1.21.6", 772 => "1.21.7", + 773 => "1.21.9", _ => "0.0" }; } diff --git a/tools/README.md b/tools/README.md index cce914df..17df9676 100644 --- a/tools/README.md +++ b/tools/README.md @@ -2,46 +2,115 @@ Scripts for analyzing Minecraft version differences and generating MCC palette files. -Requires: Python 3.10+, decompiled MC server source in `MinecraftOfficial/-decompiled/`. +Requires: Python 3.10+ -## Decompiling a new MC version +## Data Sources + +Two types of data can be used as input: + +| Source | How to Get | Authoritative? | +|--------|-----------|---------------| +| Decompiled Java source | `MinecraftDecompiler.jar` → `MinecraftOfficial/-decompiled/` | Mostly (see caveat below) | +| Server data reports | `java -DbundlerMainClass=net.minecraft.data.Main -jar server.jar --reports` | **Yes** | + +**Important since MC 1.21.9**: Some items and blocks are registered outside `Items.java`/`Blocks.java` field declarations (via block registration callbacks). In these cases, the decompiled source undercounts entries. **Always use server data reports** for item and block palettes when available. + +### Decompiling a new MC version ```bash cd MinecraftOfficial -java -jar MinecraftDecompiler.jar --version 1.21.4 --side SERVER \ - --decompile --output 1.21.4-remapped.jar --decompiled-output 1.21.4-decompiled +java -jar MinecraftDecompiler.jar --version 1.21.9 --side SERVER \ + --decompile --output 1.21.9-remapped.jar --decompiled-output 1.21.9-decompiled ``` +### Generating server data reports + +```bash +cd /tmp +java -DbundlerMainClass=net.minecraft.data.Main \ + -jar /path/to/server.jar \ + --reports --output /tmp/mc_reports +``` + +This generates: +- `/tmp/mc_reports/reports/registries.json` — all registries with protocol IDs +- `/tmp/mc_reports/reports/blocks.json` — all blocks with block state IDs +- `/tmp/mc_reports/reports/packets.json` — packet protocol definitions + ## diff_registries.py — Compare registries between versions Compares Items, EntityTypes, Blocks, DataComponents, and EntityDataSerializers between two MC versions. Reports whether each palette needs updating, lists added/removed entries, and shows ID shift statistics. ```bash -python3 tools/diff_registries.py 1.20.6 1.21.1 +# Basic comparison (decompiled source only) +python3 tools/diff_registries.py 1.21.8 1.21.9 + +# With cross-validation against server registries.json (recommended) +python3 tools/diff_registries.py 1.21.8 1.21.9 --registry /tmp/mc_reports/reports/registries.json ``` +The `--registry` flag enables cross-validation: compares the count and set of entries found in decompiled Java source against the server's authoritative registry. Any mismatches indicate that palette generation must use server data instead of Java source. + Output indicates for each registry: - **IDENTICAL** → reuse existing palette - **PALETTE UPDATE NEEDED** → create new palette file + update version routing +- **Count MISMATCH** (with --registry) → server has entries not in Java source ## gen_item_palette.py — Generate ItemPalette C# file -Reads `Items.java` field declaration order to generate a complete `ItemPaletteXXX.cs`. +Two modes: ```bash +# Preferred: from server registries.json (accurate since 1.21.9) +python3 tools/gen_item_palette.py --from-registry /tmp/mc_reports/reports/registries.json 1219 + +# Legacy: from decompiled Items.java python3 tools/gen_item_palette.py 1.21.1 121 -# → MinecraftClient/Inventory/ItemPalettes/ItemPalette121.cs ``` -Also validates each item name against `ItemType.cs` and warns about missing enum values. +Output: `MinecraftClient/Inventory/ItemPalettes/ItemPalette.cs` + +Validates each item name against `ItemType.cs` and warns about missing enum values. Add missing values to `ItemType.cs` in alphabetical order before compiling. + +## gen_block_palette.py — Generate BlockPalette C# file + +```bash +python3 tools/gen_block_palette.py /tmp/mc_reports/reports/blocks.json 1219 +# → MinecraftClient/Mapping/BlockPalettes/Palette1219.cs +``` + +Generates a complete block palette with block state ID ranges from the server's `blocks.json`. Validates against `Material.cs` and warns about missing enum values. + +## gen_entity_palette.py — Generate EntityPalette C# file + +```bash +python3 tools/gen_entity_palette.py /tmp/mc_reports/reports/registries.json 1219 +# → MinecraftClient/Mapping/EntityPalettes/EntityPalette1219.cs +``` + +Generates entity type palette from server's `registries.json`. Validates against `EntityType.cs` and warns about missing enum values. ## gen_entity_metadata_palette.py — Generate EntityMetadataPalette C# file -Reads `EntityDataSerializers.java` static block registration order to generate `EntityMetadataPaletteXXX.cs`. - ```bash -python3 tools/gen_entity_metadata_palette.py 1.20.6 1206 -# → MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1206.cs +python3 tools/gen_entity_metadata_palette.py 1.21.9 1219 +# → MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1219.cs ``` -The script maps Java field names to MCC's `EntityMetaDataType` enum. If a new serializer type appears that isn't in the mapping table, it will warn you to update both the script's `FIELD_TO_ENUM` dict and MCC's `EntityMetaDataType.cs` enum. +Reads `EntityDataSerializers.java` static block registration order. Maps Java field names to MCC's `EntityMetaDataType` enum. If a new serializer type appears that isn't in the mapping table, it will warn you to update: +1. The script's `FIELD_TO_ENUM` dict +2. MCC's `EntityMetaDataType.cs` enum +3. `DataTypes.cs` ReadNextMetadata() read logic + +## Recommended workflow + +1. Generate server reports (Step 0) +2. Run `diff_registries.py --registry` to identify changes and validate source completeness +3. For each registry needing update: + - Items: `gen_item_palette.py --from-registry` + - Blocks: `gen_block_palette.py` + - Entities: `gen_entity_palette.py` + - Metadata: `gen_entity_metadata_palette.py` +4. Add any missing enum values to `ItemType.cs`, `Material.cs`, `EntityType.cs`, `EntityMetaDataType.cs` +5. Update version routing (see SKILL.md) +6. Build and test diff --git a/tools/diff_registries.py b/tools/diff_registries.py index cc26c31f..aba04dff 100644 --- a/tools/diff_registries.py +++ b/tools/diff_registries.py @@ -6,12 +6,19 @@ Compares Items, EntityTypes, Blocks, DataComponents, and EntityDataSerializers to determine which MCC palettes need updating for a new MC version. Usage: - python3 tools/diff_registries.py + python3 tools/diff_registries.py [--registry ] -Example: +Examples: python3 tools/diff_registries.py 1.20.6 1.21.1 + python3 tools/diff_registries.py 1.21.8 1.21.9 --registry /tmp/mc_reports/reports/registries.json + +The optional --registry flag cross-validates decompiled source counts against +the server's authoritative registries.json (generated via --reports). +Since MC 1.21.9, some items/blocks are registered outside Items.java/Blocks.java, +making this cross-validation essential for detecting hidden entries. """ +import json import re import sys import os @@ -65,7 +72,7 @@ def extract_static_register_order(filepath: Path) -> list[str]: return results -def compare_lists(old: list[str], new: list[str], label: str): +def compare_lists(old: list[str], new: list[str], label: str) -> bool: """Compare two ordered lists and report differences.""" set_old, set_new = set(old), set(new) added = sorted(set_new - set_old) @@ -117,7 +124,46 @@ def compare_lists(old: list[str], new: list[str], label: str): return True -def diff_items(old_dir: Path, new_dir: Path): +def cross_validate(registry_data: dict, java_entries: list[str], registry_key: str, + label: str, convert_fn=None): + """Cross-validate Java source entries against server registries.json.""" + reg = registry_data.get(registry_key, {}).get("entries", {}) + server_names = set() + for key in reg: + name = key.removeprefix("minecraft:") + server_names.add(name) + + if convert_fn: + java_names = set(convert_fn(n) for n in java_entries) + else: + java_names = set(n.lower() for n in java_entries) + + server_count = len(server_names) + java_count = len(java_names) + + print(f"\n --- Cross-validation: {label} ---") + print(f" Java source: {java_count} entries, Server registry: {server_count} entries") + + if server_count == java_count: + print(f" ✓ Counts match — Java source is complete") + else: + diff = server_count - java_count + print(f" ⚠ Count MISMATCH: server has {diff:+d} entries vs Java source") + extra_in_server = server_names - java_names + extra_in_java = java_names - server_names + if extra_in_server: + print(f" In server but NOT in Java source ({len(extra_in_server)}):") + for n in sorted(extra_in_server): + pid = reg[f"minecraft:{n}"]["protocol_id"] + print(f" [{pid}] {n}") + print(f" ⚠ MUST use --from-registry / server data to generate palette!") + if extra_in_java: + print(f" In Java source but NOT in server ({len(extra_in_java)}):") + for n in sorted(extra_in_java): + print(f" {n}") + + +def diff_items(old_dir: Path, new_dir: Path, registry_data: dict | None = None): old_f = find_java_file(old_dir, "net/minecraft/world/item/Items.java") new_f = find_java_file(new_dir, "net/minecraft/world/item/Items.java") if not old_f or not new_f: @@ -128,8 +174,12 @@ def diff_items(old_dir: Path, new_dir: Path): new = extract_field_names(new_f, pattern) compare_lists(old, new, "Items.java (Item registry)") + if registry_data: + cross_validate(registry_data, new, "minecraft:item", "Items", + convert_fn=lambda n: n.lower()) -def diff_entity_types(old_dir: Path, new_dir: Path): + +def diff_entity_types(old_dir: Path, new_dir: Path, registry_data: dict | None = None): old_f = find_java_file(old_dir, "net/minecraft/world/entity/EntityType.java") new_f = find_java_file(new_dir, "net/minecraft/world/entity/EntityType.java") if not old_f or not new_f: @@ -139,8 +189,12 @@ def diff_entity_types(old_dir: Path, new_dir: Path): new = extract_register_multiline(new_f) compare_lists(old, new, "EntityType.java (Entity registry)") + if registry_data: + cross_validate(registry_data, new, "minecraft:entity_type", "EntityType", + convert_fn=lambda n: n) -def diff_blocks(old_dir: Path, new_dir: Path): + +def diff_blocks(old_dir: Path, new_dir: Path, registry_data: dict | None = None): old_f = find_java_file(old_dir, "net/minecraft/world/level/block/Blocks.java") new_f = find_java_file(new_dir, "net/minecraft/world/level/block/Blocks.java") if not old_f or not new_f: @@ -150,6 +204,10 @@ def diff_blocks(old_dir: Path, new_dir: Path): new = extract_register_multiline(new_f) compare_lists(old, new, "Blocks.java (Block registry)") + if registry_data: + cross_validate(registry_data, new, "minecraft:block", "Blocks", + convert_fn=lambda n: n) + def diff_data_components(old_dir: Path, new_dir: Path): old_f = find_java_file(old_dir, "net/minecraft/core/component/DataComponents.java") @@ -183,11 +241,23 @@ def diff_entity_data_serializers(old_dir: Path, new_dir: Path): def main(): - if len(sys.argv) != 3: + # Parse arguments + args = sys.argv[1:] + registry_path = None + + if "--registry" in args: + idx = args.index("--registry") + if idx + 1 >= len(args): + print("Error: --registry requires a path argument") + sys.exit(1) + registry_path = Path(args[idx + 1]) + args = args[:idx] + args[idx + 2:] + + if len(args) != 2: print(__doc__) sys.exit(1) - old_ver, new_ver = sys.argv[1], sys.argv[2] + old_ver, new_ver = args[0], args[1] old_dir = DECOMPILED_ROOT / f"{old_ver}-decompiled" new_dir = DECOMPILED_ROOT / f"{new_ver}-decompiled" @@ -199,13 +269,22 @@ def main(): f"--output {v}-remapped.jar --decompiled-output {v}-decompiled") sys.exit(1) + registry_data = None + if registry_path: + if not registry_path.exists(): + print(f"Error: {registry_path} not found") + sys.exit(1) + with open(registry_path) as f: + registry_data = json.load(f) + print(f"Loaded server registries.json for cross-validation") + print(f"Comparing MC {old_ver} → {new_ver}") print(f"Old: {old_dir}") print(f"New: {new_dir}") - diff_items(old_dir, new_dir) - diff_entity_types(old_dir, new_dir) - diff_blocks(old_dir, new_dir) + diff_items(old_dir, new_dir, registry_data) + diff_entity_types(old_dir, new_dir, registry_data) + diff_blocks(old_dir, new_dir, registry_data) diff_data_components(old_dir, new_dir) diff_entity_data_serializers(old_dir, new_dir) @@ -215,6 +294,10 @@ def main(): print(" Review each section above. For any marked 'PALETTE UPDATE NEEDED',") print(" create a new palette file in MCC and update the version routing.") print(" For 'IDENTICAL' sections, the existing palette can be reused.") + if registry_data: + print("\n Cross-validation was performed against server registries.json.") + print(" If any count mismatches were found, use server data generator output") + print(" (--from-registry) instead of decompiled Java source for palette generation.") if __name__ == "__main__": diff --git a/tools/gen_block_palette.py b/tools/gen_block_palette.py new file mode 100644 index 00000000..03c48eca --- /dev/null +++ b/tools/gen_block_palette.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python3 +""" +Generate an MCC BlockPalette C# file from server-generated blocks.json. + +The blocks.json file is generated by running: + java -DbundlerMainClass=net.minecraft.data.Main -jar server.jar --reports + +Usage: + python3 tools/gen_block_palette.py + +Example: + python3 tools/gen_block_palette.py /tmp/mc_reports/reports/blocks.json 1219 + # Generates Palette1219.cs +""" + +import json +import re +import sys +from pathlib import Path + +OUTPUT_DIR = (Path(__file__).resolve().parent.parent / + "MinecraftClient" / "Mapping" / "BlockPalettes") +MATERIAL_CS = OUTPUT_DIR.parent / "Material.cs" + + +def mc_name_to_csharp(mc_name: str) -> str: + """Convert minecraft:snake_case to PascalCase C# enum name.""" + name = mc_name.removeprefix("minecraft:") + return "".join(word.capitalize() for word in name.split("_")) + + +def load_known_materials() -> set[str]: + known = set() + if MATERIAL_CS.exists(): + with open(MATERIAL_CS) as f: + for line in f: + m = re.match(r'\s+(\w+),?\s*$', line) + if m: + known.add(m.group(1)) + return known + + +def main(): + if len(sys.argv) != 3: + print(__doc__) + sys.exit(1) + + blocks_json = Path(sys.argv[1]) + class_suffix = sys.argv[2] + + if not blocks_json.exists(): + print(f"Error: {blocks_json} not found") + sys.exit(1) + + with open(blocks_json) as f: + data = json.load(f) + + # Build (min_state, max_state, cs_name) for each block, sorted by min_state + block_ranges = [] + for block_key, block_info in data.items(): + cs_name = mc_name_to_csharp(block_key) + states = block_info.get("states", []) + state_ids = [s["id"] for s in states] + if state_ids: + block_ranges.append((min(state_ids), max(state_ids), cs_name)) + + block_ranges.sort(key=lambda x: x[0]) + print(f"Loaded {len(block_ranges)} blocks from {blocks_json}") + + max_state = max(r[1] for r in block_ranges) + print(f"State ID range: 0 - {max_state}") + + known_materials = load_known_materials() + missing = [cs for _, _, cs in block_ranges if known_materials and cs not in known_materials] + if missing: + print(f"\nWARNING: {len(missing)} blocks not found in Material.cs enum:") + for cs_name in missing: + print(f" {cs_name}") + print("\nYou need to add these to Material.cs before the palette will compile.") + print("Insert them in alphabetical order within the enum.") + + class_name = f"Palette{class_suffix}" + output_path = OUTPUT_DIR / f"{class_name}.cs" + + lines = [ + "using System.Collections.Generic;", + "", + "namespace MinecraftClient.Mapping.BlockPalettes", + "{", + f" public class {class_name} : BlockPalette", + " {", + " private static readonly Dictionary materials = new();", + "", + f" static {class_name}()", + " {", + ] + + for min_s, max_s, cs_name in block_ranges: + lines.append(f" for (int i = {min_s}; i <= {max_s}; i++)") + lines.append(f" materials[i] = Material.{cs_name};") + + lines += [ + " }", + "", + " protected override Dictionary GetDict()", + " {", + " return materials;", + " }", + " }", + "}", + "", + ] + + output_path.write_text("\n".join(lines)) + print(f"Generated {output_path} with {len(block_ranges)} blocks ({max_state + 1} total states)") + + +if __name__ == "__main__": + main() diff --git a/tools/gen_entity_metadata_palette.py b/tools/gen_entity_metadata_palette.py index 260fe722..74932bc2 100644 --- a/tools/gen_entity_metadata_palette.py +++ b/tools/gen_entity_metadata_palette.py @@ -57,8 +57,11 @@ FIELD_TO_ENUM = { "PAINTING_VARIANT": "PaintingVariant", "SNIFFER_STATE": "SnifferState", "ARMADILLO_STATE": "ArmadilloState", + "COPPER_GOLEM_STATE": "CopperGolemState", + "WEATHERING_COPPER_STATE": "WeatheringCopperState", "VECTOR3": "Vector3", "QUATERNION": "Quaternion", + "RESOLVABLE_PROFILE": "ResolvableProfile", } diff --git a/tools/gen_entity_palette.py b/tools/gen_entity_palette.py new file mode 100644 index 00000000..a932d591 --- /dev/null +++ b/tools/gen_entity_palette.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python3 +""" +Generate an MCC EntityPalette C# file from server-generated registries.json. + +The registries.json file is generated by running: + java -DbundlerMainClass=net.minecraft.data.Main -jar server.jar --reports + +Usage: + python3 tools/gen_entity_palette.py + +Example: + python3 tools/gen_entity_palette.py /tmp/mc_reports/reports/registries.json 1219 + # Generates EntityPalette1219.cs +""" + +import json +import re +import sys +from pathlib import Path + +OUTPUT_DIR = (Path(__file__).resolve().parent.parent / + "MinecraftClient" / "Mapping" / "EntityPalettes") +ENTITY_TYPE_CS = OUTPUT_DIR.parent / "EntityType.cs" + + +def mc_name_to_csharp(mc_name: str) -> str: + """Convert minecraft:snake_case to PascalCase C# enum name.""" + name = mc_name.removeprefix("minecraft:") + return "".join(word.capitalize() for word in name.split("_")) + + +def load_known_entity_types() -> set[str]: + known = set() + if ENTITY_TYPE_CS.exists(): + with open(ENTITY_TYPE_CS) as f: + for line in f: + m = re.match(r'\s+(\w+),?\s*$', line) + if m: + known.add(m.group(1)) + return known + + +def main(): + if len(sys.argv) != 3: + print(__doc__) + sys.exit(1) + + registry_path = Path(sys.argv[1]) + class_suffix = sys.argv[2] + + if not registry_path.exists(): + print(f"Error: {registry_path} not found") + sys.exit(1) + + with open(registry_path) as f: + data = json.load(f) + + entities_reg = data.get("minecraft:entity_type", {}).get("entries", {}) + mappings = [] + for entity_key, info in entities_reg.items(): + pid = info["protocol_id"] + cs_name = mc_name_to_csharp(entity_key) + mappings.append((pid, cs_name)) + + mappings.sort(key=lambda x: x[0]) + print(f"Loaded {len(mappings)} entity types from {registry_path}") + + known = load_known_entity_types() + missing = [cs for _, cs in mappings if known and cs not in known] + if missing: + print(f"\nWARNING: {len(missing)} entity types not found in EntityType.cs enum:") + for cs_name in missing: + print(f" {cs_name}") + print("\nYou need to add these to EntityType.cs before the palette will compile.") + print("Insert them in alphabetical order within the enum.") + + class_name = f"EntityPalette{class_suffix}" + output_path = OUTPUT_DIR / f"{class_name}.cs" + + lines = [ + "using System.Collections.Generic;", + "", + "namespace MinecraftClient.Mapping.EntityPalettes", + "{", + f" public class {class_name} : EntityPalette", + " {", + " private static readonly Dictionary mappings = new();", + "", + f" static {class_name}()", + " {", + ] + for pid, cs_name in mappings: + lines.append(f" mappings[{pid}] = EntityType.{cs_name};") + lines += [ + " }", + "", + " protected override Dictionary GetDict()", + " {", + " return mappings;", + " }", + " }", + "}", + "", + ] + + output_path.write_text("\n".join(lines)) + print(f"Generated {output_path} with {len(mappings)} entity types") + + +if __name__ == "__main__": + main() diff --git a/tools/gen_item_palette.py b/tools/gen_item_palette.py index 92643977..5a85963b 100644 --- a/tools/gen_item_palette.py +++ b/tools/gen_item_palette.py @@ -1,36 +1,43 @@ #!/usr/bin/env python3 """ -Generate an MCC ItemPalette C# file from decompiled Items.java. +Generate an MCC ItemPalette C# file. -Reads public static final Item field declarations (which define item IDs -by declaration order) and generates a complete C# palette class. +Supports two input modes: + 1. Server registry (preferred since 1.21.9): + python3 tools/gen_item_palette.py --from-registry /tmp/mc_reports/reports/registries.json -Usage: - python3 tools/gen_item_palette.py + 2. Decompiled Items.java (legacy): + python3 tools/gen_item_palette.py -Example: - python3 tools/gen_item_palette.py 1.21.1 121 - # Generates ItemPalette121.cs +The --from-registry mode uses the server's authoritative protocol_id assignments, +which is required since MC 1.21.9 where some items are registered outside Items.java. -The determines the class name (ItemPalette) and -should match MCC's naming convention (e.g., 121 for 1.21, 1206 for 1.20.6). +The determines the class name (ItemPalette) and should match MCC's +naming convention (e.g., 121 for 1.21, 1219 for 1.21.9). """ +import json import re import sys from pathlib import Path DECOMPILED_ROOT = Path(__file__).resolve().parent.parent / "MinecraftOfficial" OUTPUT_DIR = Path(__file__).resolve().parent.parent / "MinecraftClient" / "Inventory" / "ItemPalettes" +ITEM_TYPE_CS = OUTPUT_DIR.parent / "ItemType.cs" -# Java field name → C# ItemType enum name -# Most conversions are automatic (SCREAMING_SNAKE → PascalCase). -# Add manual overrides here for irregular names. OVERRIDES = { "CUT_STANDSTONE_SLAB": "CutSandstoneSlab", # Mojang typo in source } +def mc_name_to_csharp(mc_name: str) -> str: + """Convert minecraft:snake_case to PascalCase C# enum name.""" + name = mc_name.removeprefix("minecraft:") + if name.upper() in OVERRIDES: + return OVERRIDES[name.upper()] + return "".join(word.capitalize() for word in name.split("_")) + + def java_to_csharp_name(java_name: str) -> str: """Convert SCREAMING_SNAKE_CASE Java field name to PascalCase C# enum name.""" if java_name in OVERRIDES: @@ -38,52 +45,81 @@ def java_to_csharp_name(java_name: str) -> str: return "".join(word.capitalize() for word in java_name.lower().split("_")) -def main(): - if len(sys.argv) != 3: - print(__doc__) - sys.exit(1) +def load_known_enums() -> set[str]: + known = set() + if ITEM_TYPE_CS.exists(): + with open(ITEM_TYPE_CS) as f: + for line in f: + m = re.match(r'\s+(\w+),?\s*$', line) + if m and m.group(1) not in ("Null", "Unknown"): + known.add(m.group(1)) + return known - mc_version = sys.argv[1] - class_suffix = sys.argv[2] + +def items_from_registry(registry_path: Path) -> list[tuple[int, str]]: + """Load items from server registries.json, returns sorted (protocol_id, cs_name) pairs.""" + with open(registry_path) as f: + data = json.load(f) + items_reg = data.get("minecraft:item", {}).get("entries", {}) + result = [] + for item_key, info in items_reg.items(): + pid = info["protocol_id"] + cs_name = mc_name_to_csharp(item_key) + result.append((pid, cs_name)) + result.sort(key=lambda x: x[0]) + return result + + +def items_from_java(mc_version: str) -> list[tuple[int, str]]: + """Load items from decompiled Items.java field declaration order.""" version_dir = DECOMPILED_ROOT / f"{mc_version}-decompiled" items_java = version_dir / "net" / "minecraft" / "world" / "item" / "Items.java" - if not items_java.exists(): print(f"Error: {items_java} not found") sys.exit(1) pattern = re.compile(r'\s+public static final Item (\w+)\s*=') - field_names = [] + result = [] with open(items_java) as f: for line in f: m = pattern.match(line) if m: - field_names.append(m.group(1)) + idx = len(result) + cs_name = java_to_csharp_name(m.group(1)) + result.append((idx, cs_name)) + return result - print(f"Found {len(field_names)} items in MC {mc_version}") - # Verify enum name conversion against existing ItemType.cs - item_type_cs = OUTPUT_DIR.parent / "ItemType.cs" - known_enums = set() - if item_type_cs.exists(): - with open(item_type_cs) as f: - for line in f: - m = re.match(r'\s+(\w+),?\s*$', line) - if m and m.group(1) not in ("Null", "Unknown"): - known_enums.add(m.group(1)) +def main(): + if len(sys.argv) < 3: + print(__doc__) + sys.exit(1) - missing = [] - mappings = [] - for i, name in enumerate(field_names): - cs_name = java_to_csharp_name(name) - mappings.append((i, cs_name)) - if known_enums and cs_name not in known_enums: - missing.append((i, name, cs_name)) + from_registry = sys.argv[1] == "--from-registry" + if from_registry: + if len(sys.argv) != 4: + print("Usage: gen_item_palette.py --from-registry ") + sys.exit(1) + registry_path = Path(sys.argv[2]) + class_suffix = sys.argv[3] + if not registry_path.exists(): + print(f"Error: {registry_path} not found") + sys.exit(1) + mappings = items_from_registry(registry_path) + print(f"Loaded {len(mappings)} items from {registry_path}") + else: + mc_version = sys.argv[1] + class_suffix = sys.argv[2] + mappings = items_from_java(mc_version) + print(f"Found {len(mappings)} items in MC {mc_version} Items.java") + + known_enums = load_known_enums() + missing = [(pid, cs) for pid, cs in mappings if known_enums and cs not in known_enums] if missing: print(f"\nWARNING: {len(missing)} items not found in ItemType.cs enum:") - for idx, java_name, cs_name in missing: - print(f" [{idx}] {java_name} -> {cs_name}") + for pid, cs_name in missing: + print(f" [{pid}] {cs_name}") print("\nYou need to add these to ItemType.cs before the palette will compile.") print("Insert them in alphabetical order within the enum.") @@ -102,8 +138,8 @@ def main(): f" static {class_name}()", " {", ] - for idx, cs_name in mappings: - lines.append(f" mappings[{idx}] = ItemType.{cs_name};") + for pid, cs_name in mappings: + lines.append(f" mappings[{pid}] = ItemType.{cs_name};") lines += [ " }", "",