diff --git a/README.md b/README.md index 013e33e..9d7889f 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,16 @@ A gophertunnel protocol interface implementation to support older Minecraft Bedr | 748 | 1.21.40 | ✅ | | 729 | 1.21.30 | ✅ | | 712 | 1.21.20 | ✅ | -| 686 | 1.21.2 | 🚧 | -| 685 | 1.21.0 | 🚧 | +| 686 | 1.21.2 | ✅ | +| 685 | 1.21.0 | ✅ | +| 671 | 1.20.80 | 🚧 | +| 662 | 1.20.70 | 🚧 | +| 649 | 1.20.60 | 🚧 | +| 630 | 1.20.50 | 🚧 | +| 622 | 1.20.40 | 🚧 | +| 618 | 1.20.30 | 🚧 | +| 594 | 1.20.10 | 🚧 | +| 589 | 1.20.0 | 🚧 | ## Credits - [Flonja/multiversion](https://github.com/Flonja/multiversion) diff --git a/legacyver/data/block_states_686.nbt b/legacyver/data/block_states_686.nbt new file mode 100644 index 0000000..d4ba1bd Binary files /dev/null and b/legacyver/data/block_states_686.nbt differ diff --git a/legacyver/data/item_runtime_ids_686.nbt b/legacyver/data/item_runtime_ids_686.nbt new file mode 100644 index 0000000..51ae9a8 Binary files /dev/null and b/legacyver/data/item_runtime_ids_686.nbt differ diff --git a/legacyver/data/required_item_list_686.json b/legacyver/data/required_item_list_686.json new file mode 100644 index 0000000..1533da5 --- /dev/null +++ b/legacyver/data/required_item_list_686.json @@ -0,0 +1,6398 @@ +{ + "minecraft:acacia_boat": { + "runtime_id": 387, + "component_based": false + }, + "minecraft:acacia_button": { + "runtime_id": -140, + "component_based": false + }, + "minecraft:acacia_chest_boat": { + "runtime_id": 661, + "component_based": false + }, + "minecraft:acacia_door": { + "runtime_id": 572, + "component_based": false + }, + "minecraft:acacia_double_slab": { + "runtime_id": -812, + "component_based": false + }, + "minecraft:acacia_fence": { + "runtime_id": -575, + "component_based": false + }, + "minecraft:acacia_fence_gate": { + "runtime_id": 187, + "component_based": false + }, + "minecraft:acacia_hanging_sign": { + "runtime_id": -504, + "component_based": false + }, + "minecraft:acacia_leaves": { + "runtime_id": 161, + "component_based": false + }, + "minecraft:acacia_log": { + "runtime_id": 162, + "component_based": false + }, + "minecraft:acacia_planks": { + "runtime_id": -742, + "component_based": false + }, + "minecraft:acacia_pressure_plate": { + "runtime_id": -150, + "component_based": false + }, + "minecraft:acacia_sapling": { + "runtime_id": -828, + "component_based": false + }, + "minecraft:acacia_sign": { + "runtime_id": 595, + "component_based": false + }, + "minecraft:acacia_slab": { + "runtime_id": -807, + "component_based": false + }, + "minecraft:acacia_stairs": { + "runtime_id": 163, + "component_based": false + }, + "minecraft:acacia_standing_sign": { + "runtime_id": -190, + "component_based": false + }, + "minecraft:acacia_trapdoor": { + "runtime_id": -145, + "component_based": false + }, + "minecraft:acacia_wall_sign": { + "runtime_id": -191, + "component_based": false + }, + "minecraft:acacia_wood": { + "runtime_id": -817, + "component_based": false + }, + "minecraft:activator_rail": { + "runtime_id": 126, + "component_based": false + }, + "minecraft:agent_spawn_egg": { + "runtime_id": 497, + "component_based": false + }, + "minecraft:air": { + "runtime_id": -158, + "component_based": false + }, + "minecraft:allay_spawn_egg": { + "runtime_id": 650, + "component_based": false + }, + "minecraft:allium": { + "runtime_id": -831, + "component_based": false + }, + "minecraft:allow": { + "runtime_id": 210, + "component_based": false + }, + "minecraft:amethyst_block": { + "runtime_id": -327, + "component_based": false + }, + "minecraft:amethyst_cluster": { + "runtime_id": -329, + "component_based": false + }, + "minecraft:amethyst_shard": { + "runtime_id": 643, + "component_based": false + }, + "minecraft:ancient_debris": { + "runtime_id": -271, + "component_based": false + }, + "minecraft:andesite": { + "runtime_id": -594, + "component_based": false + }, + "minecraft:andesite_stairs": { + "runtime_id": -171, + "component_based": false + }, + "minecraft:angler_pottery_sherd": { + "runtime_id": 675, + "component_based": false + }, + "minecraft:anvil": { + "runtime_id": 145, + "component_based": false + }, + "minecraft:apple": { + "runtime_id": 257, + "component_based": true + }, + "minecraft:archer_pottery_sherd": { + "runtime_id": 676, + "component_based": false + }, + "minecraft:armadillo_scute": { + "runtime_id": 721, + "component_based": false + }, + "minecraft:armadillo_spawn_egg": { + "runtime_id": 720, + "component_based": false + }, + "minecraft:armor_stand": { + "runtime_id": 568, + "component_based": false + }, + "minecraft:arms_up_pottery_sherd": { + "runtime_id": 677, + "component_based": false + }, + "minecraft:arrow": { + "runtime_id": 307, + "component_based": true + }, + "minecraft:axolotl_bucket": { + "runtime_id": 376, + "component_based": false + }, + "minecraft:axolotl_spawn_egg": { + "runtime_id": 512, + "component_based": false + }, + "minecraft:azalea": { + "runtime_id": -337, + "component_based": false + }, + "minecraft:azalea_leaves": { + "runtime_id": -324, + "component_based": false + }, + "minecraft:azalea_leaves_flowered": { + "runtime_id": -325, + "component_based": false + }, + "minecraft:azure_bluet": { + "runtime_id": -832, + "component_based": false + }, + "minecraft:baked_potato": { + "runtime_id": 285, + "component_based": false + }, + "minecraft:balloon": { + "runtime_id": 617, + "component_based": false + }, + "minecraft:bamboo": { + "runtime_id": -163, + "component_based": false + }, + "minecraft:bamboo_block": { + "runtime_id": -527, + "component_based": false + }, + "minecraft:bamboo_button": { + "runtime_id": -511, + "component_based": false + }, + "minecraft:bamboo_chest_raft": { + "runtime_id": 673, + "component_based": false + }, + "minecraft:bamboo_door": { + "runtime_id": -517, + "component_based": false + }, + "minecraft:bamboo_double_slab": { + "runtime_id": -521, + "component_based": false + }, + "minecraft:bamboo_fence": { + "runtime_id": -515, + "component_based": false + }, + "minecraft:bamboo_fence_gate": { + "runtime_id": -516, + "component_based": false + }, + "minecraft:bamboo_hanging_sign": { + "runtime_id": -522, + "component_based": false + }, + "minecraft:bamboo_mosaic": { + "runtime_id": -509, + "component_based": false + }, + "minecraft:bamboo_mosaic_double_slab": { + "runtime_id": -525, + "component_based": false + }, + "minecraft:bamboo_mosaic_slab": { + "runtime_id": -524, + "component_based": false + }, + "minecraft:bamboo_mosaic_stairs": { + "runtime_id": -523, + "component_based": false + }, + "minecraft:bamboo_planks": { + "runtime_id": -510, + "component_based": false + }, + "minecraft:bamboo_pressure_plate": { + "runtime_id": -514, + "component_based": false + }, + "minecraft:bamboo_raft": { + "runtime_id": 672, + "component_based": false + }, + "minecraft:bamboo_sapling": { + "runtime_id": -164, + "component_based": false + }, + "minecraft:bamboo_sign": { + "runtime_id": 671, + "component_based": false + }, + "minecraft:bamboo_slab": { + "runtime_id": -513, + "component_based": false + }, + "minecraft:bamboo_stairs": { + "runtime_id": -512, + "component_based": false + }, + "minecraft:bamboo_standing_sign": { + "runtime_id": -518, + "component_based": false + }, + "minecraft:bamboo_trapdoor": { + "runtime_id": -520, + "component_based": false + }, + "minecraft:bamboo_wall_sign": { + "runtime_id": -519, + "component_based": false + }, + "minecraft:banner": { + "runtime_id": 583, + "component_based": false + }, + "minecraft:banner_pattern": { + "runtime_id": 756, + "component_based": false + }, + "minecraft:barrel": { + "runtime_id": -203, + "component_based": false + }, + "minecraft:barrier": { + "runtime_id": -161, + "component_based": false + }, + "minecraft:basalt": { + "runtime_id": -234, + "component_based": false + }, + "minecraft:bat_spawn_egg": { + "runtime_id": 462, + "component_based": false + }, + "minecraft:beacon": { + "runtime_id": 138, + "component_based": false + }, + "minecraft:bed": { + "runtime_id": 426, + "component_based": false + }, + "minecraft:bedrock": { + "runtime_id": 7, + "component_based": false + }, + "minecraft:bee_nest": { + "runtime_id": -218, + "component_based": false + }, + "minecraft:bee_spawn_egg": { + "runtime_id": 504, + "component_based": false + }, + "minecraft:beef": { + "runtime_id": 277, + "component_based": false + }, + "minecraft:beehive": { + "runtime_id": -219, + "component_based": false + }, + "minecraft:beetroot": { + "runtime_id": 289, + "component_based": false + }, + "minecraft:beetroot_seeds": { + "runtime_id": 299, + "component_based": false + }, + "minecraft:beetroot_soup": { + "runtime_id": 290, + "component_based": false + }, + "minecraft:bell": { + "runtime_id": -206, + "component_based": false + }, + "minecraft:big_dripleaf": { + "runtime_id": -323, + "component_based": false + }, + "minecraft:birch_boat": { + "runtime_id": 384, + "component_based": false + }, + "minecraft:birch_button": { + "runtime_id": -141, + "component_based": false + }, + "minecraft:birch_chest_boat": { + "runtime_id": 658, + "component_based": false + }, + "minecraft:birch_door": { + "runtime_id": 570, + "component_based": false + }, + "minecraft:birch_double_slab": { + "runtime_id": -810, + "component_based": false + }, + "minecraft:birch_fence": { + "runtime_id": -576, + "component_based": false + }, + "minecraft:birch_fence_gate": { + "runtime_id": 184, + "component_based": false + }, + "minecraft:birch_hanging_sign": { + "runtime_id": -502, + "component_based": false + }, + "minecraft:birch_leaves": { + "runtime_id": -801, + "component_based": false + }, + "minecraft:birch_log": { + "runtime_id": -570, + "component_based": false + }, + "minecraft:birch_planks": { + "runtime_id": -740, + "component_based": false + }, + "minecraft:birch_pressure_plate": { + "runtime_id": -151, + "component_based": false + }, + "minecraft:birch_sapling": { + "runtime_id": -826, + "component_based": false + }, + "minecraft:birch_sign": { + "runtime_id": 593, + "component_based": false + }, + "minecraft:birch_slab": { + "runtime_id": -805, + "component_based": false + }, + "minecraft:birch_stairs": { + "runtime_id": 135, + "component_based": false + }, + "minecraft:birch_standing_sign": { + "runtime_id": -186, + "component_based": false + }, + "minecraft:birch_trapdoor": { + "runtime_id": -146, + "component_based": false + }, + "minecraft:birch_wall_sign": { + "runtime_id": -187, + "component_based": false + }, + "minecraft:birch_wood": { + "runtime_id": -815, + "component_based": false + }, + "minecraft:black_candle": { + "runtime_id": -428, + "component_based": false + }, + "minecraft:black_candle_cake": { + "runtime_id": -445, + "component_based": false + }, + "minecraft:black_carpet": { + "runtime_id": -611, + "component_based": false + }, + "minecraft:black_concrete": { + "runtime_id": -642, + "component_based": false + }, + "minecraft:black_concrete_powder": { + "runtime_id": -723, + "component_based": false + }, + "minecraft:black_dye": { + "runtime_id": 403, + "component_based": false + }, + "minecraft:black_glazed_terracotta": { + "runtime_id": 235, + "component_based": false + }, + "minecraft:black_shulker_box": { + "runtime_id": -627, + "component_based": false + }, + "minecraft:black_stained_glass": { + "runtime_id": -687, + "component_based": false + }, + "minecraft:black_stained_glass_pane": { + "runtime_id": -657, + "component_based": false + }, + "minecraft:black_terracotta": { + "runtime_id": -738, + "component_based": false + }, + "minecraft:black_wool": { + "runtime_id": -554, + "component_based": false + }, + "minecraft:blackstone": { + "runtime_id": -273, + "component_based": false + }, + "minecraft:blackstone_double_slab": { + "runtime_id": -283, + "component_based": false + }, + "minecraft:blackstone_slab": { + "runtime_id": -282, + "component_based": false + }, + "minecraft:blackstone_stairs": { + "runtime_id": -276, + "component_based": false + }, + "minecraft:blackstone_wall": { + "runtime_id": -277, + "component_based": false + }, + "minecraft:blade_pottery_sherd": { + "runtime_id": 678, + "component_based": false + }, + "minecraft:blast_furnace": { + "runtime_id": -196, + "component_based": false + }, + "minecraft:blaze_powder": { + "runtime_id": 438, + "component_based": false + }, + "minecraft:blaze_rod": { + "runtime_id": 431, + "component_based": false + }, + "minecraft:blaze_spawn_egg": { + "runtime_id": 465, + "component_based": false + }, + "minecraft:bleach": { + "runtime_id": 615, + "component_based": false + }, + "minecraft:blue_candle": { + "runtime_id": -424, + "component_based": false + }, + "minecraft:blue_candle_cake": { + "runtime_id": -441, + "component_based": false + }, + "minecraft:blue_carpet": { + "runtime_id": -607, + "component_based": false + }, + "minecraft:blue_concrete": { + "runtime_id": -638, + "component_based": false + }, + "minecraft:blue_concrete_powder": { + "runtime_id": -719, + "component_based": false + }, + "minecraft:blue_dye": { + "runtime_id": 407, + "component_based": false + }, + "minecraft:blue_glazed_terracotta": { + "runtime_id": 231, + "component_based": false + }, + "minecraft:blue_ice": { + "runtime_id": -11, + "component_based": false + }, + "minecraft:blue_orchid": { + "runtime_id": -830, + "component_based": false + }, + "minecraft:blue_shulker_box": { + "runtime_id": -623, + "component_based": false + }, + "minecraft:blue_stained_glass": { + "runtime_id": -683, + "component_based": false + }, + "minecraft:blue_stained_glass_pane": { + "runtime_id": -653, + "component_based": false + }, + "minecraft:blue_terracotta": { + "runtime_id": -734, + "component_based": false + }, + "minecraft:blue_wool": { + "runtime_id": -563, + "component_based": false + }, + "minecraft:boat": { + "runtime_id": 754, + "component_based": false + }, + "minecraft:bogged_spawn_egg": { + "runtime_id": 472, + "component_based": false + }, + "minecraft:bolt_armor_trim_smithing_template": { + "runtime_id": 717, + "component_based": false + }, + "minecraft:bone": { + "runtime_id": 423, + "component_based": false + }, + "minecraft:bone_block": { + "runtime_id": 216, + "component_based": false + }, + "minecraft:bone_meal": { + "runtime_id": 419, + "component_based": false + }, + "minecraft:book": { + "runtime_id": 395, + "component_based": false + }, + "minecraft:bookshelf": { + "runtime_id": 47, + "component_based": false + }, + "minecraft:border_block": { + "runtime_id": 212, + "component_based": false + }, + "minecraft:bordure_indented_banner_pattern": { + "runtime_id": 602, + "component_based": false + }, + "minecraft:bow": { + "runtime_id": 306, + "component_based": false + }, + "minecraft:bowl": { + "runtime_id": 328, + "component_based": false + }, + "minecraft:brain_coral": { + "runtime_id": -581, + "component_based": false + }, + "minecraft:brain_coral_block": { + "runtime_id": -849, + "component_based": false + }, + "minecraft:brain_coral_fan": { + "runtime_id": -840, + "component_based": false + }, + "minecraft:bread": { + "runtime_id": 265, + "component_based": false + }, + "minecraft:breeze_rod": { + "runtime_id": 432, + "component_based": false + }, + "minecraft:breeze_spawn_egg": { + "runtime_id": 511, + "component_based": false + }, + "minecraft:brewer_pottery_sherd": { + "runtime_id": 679, + "component_based": false + }, + "minecraft:brewing_stand": { + "runtime_id": 440, + "component_based": true + }, + "minecraft:brick": { + "runtime_id": 391, + "component_based": false + }, + "minecraft:brick_block": { + "runtime_id": 45, + "component_based": false + }, + "minecraft:brick_slab": { + "runtime_id": -874, + "component_based": false + }, + "minecraft:brick_stairs": { + "runtime_id": 108, + "component_based": false + }, + "minecraft:brown_candle": { + "runtime_id": -425, + "component_based": false + }, + "minecraft:brown_candle_cake": { + "runtime_id": -442, + "component_based": false + }, + "minecraft:brown_carpet": { + "runtime_id": -608, + "component_based": false + }, + "minecraft:brown_concrete": { + "runtime_id": -639, + "component_based": false + }, + "minecraft:brown_concrete_powder": { + "runtime_id": -720, + "component_based": false + }, + "minecraft:brown_dye": { + "runtime_id": 406, + "component_based": false + }, + "minecraft:brown_glazed_terracotta": { + "runtime_id": 232, + "component_based": false + }, + "minecraft:brown_mushroom": { + "runtime_id": 39, + "component_based": false + }, + "minecraft:brown_mushroom_block": { + "runtime_id": 99, + "component_based": false + }, + "minecraft:brown_shulker_box": { + "runtime_id": -624, + "component_based": false + }, + "minecraft:brown_stained_glass": { + "runtime_id": -684, + "component_based": false + }, + "minecraft:brown_stained_glass_pane": { + "runtime_id": -654, + "component_based": false + }, + "minecraft:brown_terracotta": { + "runtime_id": -735, + "component_based": false + }, + "minecraft:brown_wool": { + "runtime_id": -555, + "component_based": false + }, + "minecraft:brush": { + "runtime_id": 698, + "component_based": false + }, + "minecraft:bubble_column": { + "runtime_id": -160, + "component_based": false + }, + "minecraft:bubble_coral": { + "runtime_id": -582, + "component_based": false + }, + "minecraft:bubble_coral_block": { + "runtime_id": -850, + "component_based": false + }, + "minecraft:bubble_coral_fan": { + "runtime_id": -841, + "component_based": false + }, + "minecraft:bucket": { + "runtime_id": 367, + "component_based": false + }, + "minecraft:budding_amethyst": { + "runtime_id": -328, + "component_based": false + }, + "minecraft:burn_pottery_sherd": { + "runtime_id": 680, + "component_based": false + }, + "minecraft:cactus": { + "runtime_id": 81, + "component_based": false + }, + "minecraft:cake": { + "runtime_id": 425, + "component_based": true + }, + "minecraft:calcite": { + "runtime_id": -326, + "component_based": false + }, + "minecraft:calibrated_sculk_sensor": { + "runtime_id": -580, + "component_based": false + }, + "minecraft:camel_spawn_egg": { + "runtime_id": 674, + "component_based": false + }, + "minecraft:camera": { + "runtime_id": 612, + "component_based": false + }, + "minecraft:campfire": { + "runtime_id": 607, + "component_based": true + }, + "minecraft:candle": { + "runtime_id": -412, + "component_based": false + }, + "minecraft:candle_cake": { + "runtime_id": -429, + "component_based": false + }, + "minecraft:carpet": { + "runtime_id": 726, + "component_based": false + }, + "minecraft:carrot": { + "runtime_id": 283, + "component_based": false + }, + "minecraft:carrot_on_a_stick": { + "runtime_id": 533, + "component_based": false + }, + "minecraft:carrots": { + "runtime_id": 141, + "component_based": false + }, + "minecraft:cartography_table": { + "runtime_id": -200, + "component_based": false + }, + "minecraft:carved_pumpkin": { + "runtime_id": -155, + "component_based": false + }, + "minecraft:cat_spawn_egg": { + "runtime_id": 498, + "component_based": false + }, + "minecraft:cauldron": { + "runtime_id": 441, + "component_based": true + }, + "minecraft:cave_spider_spawn_egg": { + "runtime_id": 466, + "component_based": false + }, + "minecraft:cave_vines": { + "runtime_id": -322, + "component_based": false + }, + "minecraft:cave_vines_body_with_berries": { + "runtime_id": -375, + "component_based": false + }, + "minecraft:cave_vines_head_with_berries": { + "runtime_id": -376, + "component_based": false + }, + "minecraft:chain": { + "runtime_id": 638, + "component_based": true + }, + "minecraft:chain_command_block": { + "runtime_id": 189, + "component_based": false + }, + "minecraft:chainmail_boots": { + "runtime_id": 349, + "component_based": false + }, + "minecraft:chainmail_chestplate": { + "runtime_id": 347, + "component_based": false + }, + "minecraft:chainmail_helmet": { + "runtime_id": 346, + "component_based": false + }, + "minecraft:chainmail_leggings": { + "runtime_id": 348, + "component_based": false + }, + "minecraft:charcoal": { + "runtime_id": 309, + "component_based": true + }, + "minecraft:chemical_heat": { + "runtime_id": 192, + "component_based": false + }, + "minecraft:chemistry_table": { + "runtime_id": 238, + "component_based": false + }, + "minecraft:cherry_boat": { + "runtime_id": 668, + "component_based": false + }, + "minecraft:cherry_button": { + "runtime_id": -530, + "component_based": false + }, + "minecraft:cherry_chest_boat": { + "runtime_id": 669, + "component_based": false + }, + "minecraft:cherry_door": { + "runtime_id": -531, + "component_based": false + }, + "minecraft:cherry_double_slab": { + "runtime_id": -540, + "component_based": false + }, + "minecraft:cherry_fence": { + "runtime_id": -532, + "component_based": false + }, + "minecraft:cherry_fence_gate": { + "runtime_id": -533, + "component_based": false + }, + "minecraft:cherry_hanging_sign": { + "runtime_id": -534, + "component_based": false + }, + "minecraft:cherry_leaves": { + "runtime_id": -548, + "component_based": false + }, + "minecraft:cherry_log": { + "runtime_id": -536, + "component_based": false + }, + "minecraft:cherry_planks": { + "runtime_id": -537, + "component_based": false + }, + "minecraft:cherry_pressure_plate": { + "runtime_id": -538, + "component_based": false + }, + "minecraft:cherry_sapling": { + "runtime_id": -547, + "component_based": false + }, + "minecraft:cherry_sign": { + "runtime_id": 670, + "component_based": false + }, + "minecraft:cherry_slab": { + "runtime_id": -539, + "component_based": false + }, + "minecraft:cherry_stairs": { + "runtime_id": -541, + "component_based": false + }, + "minecraft:cherry_standing_sign": { + "runtime_id": -542, + "component_based": false + }, + "minecraft:cherry_trapdoor": { + "runtime_id": -543, + "component_based": false + }, + "minecraft:cherry_wall_sign": { + "runtime_id": -544, + "component_based": false + }, + "minecraft:cherry_wood": { + "runtime_id": -546, + "component_based": false + }, + "minecraft:chest": { + "runtime_id": 54, + "component_based": false + }, + "minecraft:chest_boat": { + "runtime_id": 664, + "component_based": false + }, + "minecraft:chest_minecart": { + "runtime_id": 397, + "component_based": false + }, + "minecraft:chicken": { + "runtime_id": 279, + "component_based": false + }, + "minecraft:chicken_spawn_egg": { + "runtime_id": 444, + "component_based": false + }, + "minecraft:chiseled_bookshelf": { + "runtime_id": -526, + "component_based": false + }, + "minecraft:chiseled_copper": { + "runtime_id": -760, + "component_based": false + }, + "minecraft:chiseled_deepslate": { + "runtime_id": -395, + "component_based": false + }, + "minecraft:chiseled_nether_bricks": { + "runtime_id": -302, + "component_based": false + }, + "minecraft:chiseled_polished_blackstone": { + "runtime_id": -279, + "component_based": false + }, + "minecraft:chiseled_tuff": { + "runtime_id": -753, + "component_based": false + }, + "minecraft:chiseled_tuff_bricks": { + "runtime_id": -759, + "component_based": false + }, + "minecraft:chorus_flower": { + "runtime_id": 200, + "component_based": false + }, + "minecraft:chorus_fruit": { + "runtime_id": 574, + "component_based": false + }, + "minecraft:chorus_plant": { + "runtime_id": 240, + "component_based": false + }, + "minecraft:clay": { + "runtime_id": 82, + "component_based": false + }, + "minecraft:clay_ball": { + "runtime_id": 392, + "component_based": false + }, + "minecraft:client_request_placeholder_block": { + "runtime_id": -465, + "component_based": false + }, + "minecraft:clock": { + "runtime_id": 401, + "component_based": false + }, + "minecraft:coal": { + "runtime_id": 308, + "component_based": true + }, + "minecraft:coal_block": { + "runtime_id": 173, + "component_based": false + }, + "minecraft:coal_ore": { + "runtime_id": 16, + "component_based": false + }, + "minecraft:coast_armor_trim_smithing_template": { + "runtime_id": 702, + "component_based": false + }, + "minecraft:cobbled_deepslate": { + "runtime_id": -379, + "component_based": false + }, + "minecraft:cobbled_deepslate_double_slab": { + "runtime_id": -396, + "component_based": false + }, + "minecraft:cobbled_deepslate_slab": { + "runtime_id": -380, + "component_based": false + }, + "minecraft:cobbled_deepslate_stairs": { + "runtime_id": -381, + "component_based": false + }, + "minecraft:cobbled_deepslate_wall": { + "runtime_id": -382, + "component_based": false + }, + "minecraft:cobblestone": { + "runtime_id": 4, + "component_based": false + }, + "minecraft:cobblestone_slab": { + "runtime_id": -873, + "component_based": false + }, + "minecraft:cobblestone_wall": { + "runtime_id": 139, + "component_based": false + }, + "minecraft:cocoa": { + "runtime_id": 127, + "component_based": false + }, + "minecraft:cocoa_beans": { + "runtime_id": 420, + "component_based": false + }, + "minecraft:cod": { + "runtime_id": 268, + "component_based": false + }, + "minecraft:cod_bucket": { + "runtime_id": 371, + "component_based": false + }, + "minecraft:cod_spawn_egg": { + "runtime_id": 490, + "component_based": false + }, + "minecraft:colored_torch_bp": { + "runtime_id": 204, + "component_based": false + }, + "minecraft:colored_torch_rg": { + "runtime_id": 202, + "component_based": false + }, + "minecraft:command_block": { + "runtime_id": 137, + "component_based": false + }, + "minecraft:command_block_minecart": { + "runtime_id": 579, + "component_based": false + }, + "minecraft:comparator": { + "runtime_id": 538, + "component_based": true + }, + "minecraft:compass": { + "runtime_id": 399, + "component_based": false + }, + "minecraft:composter": { + "runtime_id": -213, + "component_based": false + }, + "minecraft:compound": { + "runtime_id": 613, + "component_based": false + }, + "minecraft:concrete": { + "runtime_id": 743, + "component_based": false + }, + "minecraft:concrete_powder": { + "runtime_id": 744, + "component_based": false + }, + "minecraft:conduit": { + "runtime_id": -157, + "component_based": false + }, + "minecraft:cooked_beef": { + "runtime_id": 278, + "component_based": false + }, + "minecraft:cooked_chicken": { + "runtime_id": 280, + "component_based": false + }, + "minecraft:cooked_cod": { + "runtime_id": 272, + "component_based": false + }, + "minecraft:cooked_mutton": { + "runtime_id": 567, + "component_based": false + }, + "minecraft:cooked_porkchop": { + "runtime_id": 267, + "component_based": false + }, + "minecraft:cooked_rabbit": { + "runtime_id": 293, + "component_based": false + }, + "minecraft:cooked_salmon": { + "runtime_id": 273, + "component_based": false + }, + "minecraft:cookie": { + "runtime_id": 275, + "component_based": false + }, + "minecraft:copper_block": { + "runtime_id": -340, + "component_based": false + }, + "minecraft:copper_bulb": { + "runtime_id": -776, + "component_based": false + }, + "minecraft:copper_door": { + "runtime_id": -784, + "component_based": false + }, + "minecraft:copper_grate": { + "runtime_id": -768, + "component_based": false + }, + "minecraft:copper_ingot": { + "runtime_id": 520, + "component_based": false + }, + "minecraft:copper_ore": { + "runtime_id": -311, + "component_based": false + }, + "minecraft:copper_trapdoor": { + "runtime_id": -792, + "component_based": false + }, + "minecraft:coral": { + "runtime_id": 740, + "component_based": false + }, + "minecraft:coral_block": { + "runtime_id": 729, + "component_based": false + }, + "minecraft:coral_fan": { + "runtime_id": 730, + "component_based": false + }, + "minecraft:coral_fan_dead": { + "runtime_id": 731, + "component_based": false + }, + "minecraft:coral_fan_hang": { + "runtime_id": -135, + "component_based": false + }, + "minecraft:coral_fan_hang2": { + "runtime_id": -136, + "component_based": false + }, + "minecraft:coral_fan_hang3": { + "runtime_id": -137, + "component_based": false + }, + "minecraft:cornflower": { + "runtime_id": -838, + "component_based": false + }, + "minecraft:cow_spawn_egg": { + "runtime_id": 445, + "component_based": false + }, + "minecraft:cracked_deepslate_bricks": { + "runtime_id": -410, + "component_based": false + }, + "minecraft:cracked_deepslate_tiles": { + "runtime_id": -409, + "component_based": false + }, + "minecraft:cracked_nether_bricks": { + "runtime_id": -303, + "component_based": false + }, + "minecraft:cracked_polished_blackstone_bricks": { + "runtime_id": -280, + "component_based": false + }, + "minecraft:crafter": { + "runtime_id": -313, + "component_based": false + }, + "minecraft:crafting_table": { + "runtime_id": 58, + "component_based": false + }, + "minecraft:creeper_banner_pattern": { + "runtime_id": 598, + "component_based": false + }, + "minecraft:creeper_spawn_egg": { + "runtime_id": 450, + "component_based": false + }, + "minecraft:crimson_button": { + "runtime_id": -260, + "component_based": false + }, + "minecraft:crimson_door": { + "runtime_id": 635, + "component_based": false + }, + "minecraft:crimson_double_slab": { + "runtime_id": -266, + "component_based": false + }, + "minecraft:crimson_fence": { + "runtime_id": -256, + "component_based": false + }, + "minecraft:crimson_fence_gate": { + "runtime_id": -258, + "component_based": false + }, + "minecraft:crimson_fungus": { + "runtime_id": -228, + "component_based": false + }, + "minecraft:crimson_hanging_sign": { + "runtime_id": -506, + "component_based": false + }, + "minecraft:crimson_hyphae": { + "runtime_id": -299, + "component_based": false + }, + "minecraft:crimson_nylium": { + "runtime_id": -232, + "component_based": false + }, + "minecraft:crimson_planks": { + "runtime_id": -242, + "component_based": false + }, + "minecraft:crimson_pressure_plate": { + "runtime_id": -262, + "component_based": false + }, + "minecraft:crimson_roots": { + "runtime_id": -223, + "component_based": false + }, + "minecraft:crimson_sign": { + "runtime_id": 633, + "component_based": false + }, + "minecraft:crimson_slab": { + "runtime_id": -264, + "component_based": false + }, + "minecraft:crimson_stairs": { + "runtime_id": -254, + "component_based": false + }, + "minecraft:crimson_standing_sign": { + "runtime_id": -250, + "component_based": false + }, + "minecraft:crimson_stem": { + "runtime_id": -225, + "component_based": false + }, + "minecraft:crimson_trapdoor": { + "runtime_id": -246, + "component_based": false + }, + "minecraft:crimson_wall_sign": { + "runtime_id": -252, + "component_based": false + }, + "minecraft:crossbow": { + "runtime_id": 591, + "component_based": false + }, + "minecraft:crying_obsidian": { + "runtime_id": -289, + "component_based": false + }, + "minecraft:cut_copper": { + "runtime_id": -347, + "component_based": false + }, + "minecraft:cut_copper_slab": { + "runtime_id": -361, + "component_based": false + }, + "minecraft:cut_copper_stairs": { + "runtime_id": -354, + "component_based": false + }, + "minecraft:cyan_candle": { + "runtime_id": -422, + "component_based": false + }, + "minecraft:cyan_candle_cake": { + "runtime_id": -439, + "component_based": false + }, + "minecraft:cyan_carpet": { + "runtime_id": -605, + "component_based": false + }, + "minecraft:cyan_concrete": { + "runtime_id": -636, + "component_based": false + }, + "minecraft:cyan_concrete_powder": { + "runtime_id": -717, + "component_based": false + }, + "minecraft:cyan_dye": { + "runtime_id": 409, + "component_based": false + }, + "minecraft:cyan_glazed_terracotta": { + "runtime_id": 229, + "component_based": false + }, + "minecraft:cyan_shulker_box": { + "runtime_id": -621, + "component_based": false + }, + "minecraft:cyan_stained_glass": { + "runtime_id": -681, + "component_based": false + }, + "minecraft:cyan_stained_glass_pane": { + "runtime_id": -651, + "component_based": false + }, + "minecraft:cyan_terracotta": { + "runtime_id": -732, + "component_based": false + }, + "minecraft:cyan_wool": { + "runtime_id": -561, + "component_based": false + }, + "minecraft:danger_pottery_sherd": { + "runtime_id": 681, + "component_based": false + }, + "minecraft:dark_oak_boat": { + "runtime_id": 388, + "component_based": false + }, + "minecraft:dark_oak_button": { + "runtime_id": -142, + "component_based": false + }, + "minecraft:dark_oak_chest_boat": { + "runtime_id": 662, + "component_based": false + }, + "minecraft:dark_oak_door": { + "runtime_id": 573, + "component_based": false + }, + "minecraft:dark_oak_double_slab": { + "runtime_id": -813, + "component_based": false + }, + "minecraft:dark_oak_fence": { + "runtime_id": -577, + "component_based": false + }, + "minecraft:dark_oak_fence_gate": { + "runtime_id": 186, + "component_based": false + }, + "minecraft:dark_oak_hanging_sign": { + "runtime_id": -505, + "component_based": false + }, + "minecraft:dark_oak_leaves": { + "runtime_id": -803, + "component_based": false + }, + "minecraft:dark_oak_log": { + "runtime_id": -572, + "component_based": false + }, + "minecraft:dark_oak_planks": { + "runtime_id": -743, + "component_based": false + }, + "minecraft:dark_oak_pressure_plate": { + "runtime_id": -152, + "component_based": false + }, + "minecraft:dark_oak_sapling": { + "runtime_id": -829, + "component_based": false + }, + "minecraft:dark_oak_sign": { + "runtime_id": 596, + "component_based": false + }, + "minecraft:dark_oak_slab": { + "runtime_id": -808, + "component_based": false + }, + "minecraft:dark_oak_stairs": { + "runtime_id": 164, + "component_based": false + }, + "minecraft:dark_oak_trapdoor": { + "runtime_id": -147, + "component_based": false + }, + "minecraft:dark_oak_wood": { + "runtime_id": -818, + "component_based": false + }, + "minecraft:dark_prismarine_stairs": { + "runtime_id": -3, + "component_based": false + }, + "minecraft:darkoak_standing_sign": { + "runtime_id": -192, + "component_based": false + }, + "minecraft:darkoak_wall_sign": { + "runtime_id": -193, + "component_based": false + }, + "minecraft:daylight_detector": { + "runtime_id": 151, + "component_based": false + }, + "minecraft:daylight_detector_inverted": { + "runtime_id": 178, + "component_based": false + }, + "minecraft:dead_brain_coral": { + "runtime_id": -586, + "component_based": false + }, + "minecraft:dead_brain_coral_block": { + "runtime_id": -854, + "component_based": false + }, + "minecraft:dead_brain_coral_fan": { + "runtime_id": -844, + "component_based": false + }, + "minecraft:dead_bubble_coral": { + "runtime_id": -587, + "component_based": false + }, + "minecraft:dead_bubble_coral_block": { + "runtime_id": -855, + "component_based": false + }, + "minecraft:dead_bubble_coral_fan": { + "runtime_id": -845, + "component_based": false + }, + "minecraft:dead_fire_coral": { + "runtime_id": -588, + "component_based": false + }, + "minecraft:dead_fire_coral_block": { + "runtime_id": -856, + "component_based": false + }, + "minecraft:dead_fire_coral_fan": { + "runtime_id": -846, + "component_based": false + }, + "minecraft:dead_horn_coral": { + "runtime_id": -589, + "component_based": false + }, + "minecraft:dead_horn_coral_block": { + "runtime_id": -857, + "component_based": false + }, + "minecraft:dead_horn_coral_fan": { + "runtime_id": -847, + "component_based": false + }, + "minecraft:dead_tube_coral": { + "runtime_id": -585, + "component_based": false + }, + "minecraft:dead_tube_coral_block": { + "runtime_id": -853, + "component_based": false + }, + "minecraft:dead_tube_coral_fan": { + "runtime_id": -134, + "component_based": false + }, + "minecraft:deadbush": { + "runtime_id": 32, + "component_based": false + }, + "minecraft:decorated_pot": { + "runtime_id": -551, + "component_based": false + }, + "minecraft:deepslate": { + "runtime_id": -378, + "component_based": false + }, + "minecraft:deepslate_brick_double_slab": { + "runtime_id": -399, + "component_based": false + }, + "minecraft:deepslate_brick_slab": { + "runtime_id": -392, + "component_based": false + }, + "minecraft:deepslate_brick_stairs": { + "runtime_id": -393, + "component_based": false + }, + "minecraft:deepslate_brick_wall": { + "runtime_id": -394, + "component_based": false + }, + "minecraft:deepslate_bricks": { + "runtime_id": -391, + "component_based": false + }, + "minecraft:deepslate_coal_ore": { + "runtime_id": -406, + "component_based": false + }, + "minecraft:deepslate_copper_ore": { + "runtime_id": -408, + "component_based": false + }, + "minecraft:deepslate_diamond_ore": { + "runtime_id": -405, + "component_based": false + }, + "minecraft:deepslate_emerald_ore": { + "runtime_id": -407, + "component_based": false + }, + "minecraft:deepslate_gold_ore": { + "runtime_id": -402, + "component_based": false + }, + "minecraft:deepslate_iron_ore": { + "runtime_id": -401, + "component_based": false + }, + "minecraft:deepslate_lapis_ore": { + "runtime_id": -400, + "component_based": false + }, + "minecraft:deepslate_redstone_ore": { + "runtime_id": -403, + "component_based": false + }, + "minecraft:deepslate_tile_double_slab": { + "runtime_id": -398, + "component_based": false + }, + "minecraft:deepslate_tile_slab": { + "runtime_id": -388, + "component_based": false + }, + "minecraft:deepslate_tile_stairs": { + "runtime_id": -389, + "component_based": false + }, + "minecraft:deepslate_tile_wall": { + "runtime_id": -390, + "component_based": false + }, + "minecraft:deepslate_tiles": { + "runtime_id": -387, + "component_based": false + }, + "minecraft:deny": { + "runtime_id": 211, + "component_based": false + }, + "minecraft:detector_rail": { + "runtime_id": 28, + "component_based": false + }, + "minecraft:diamond": { + "runtime_id": 310, + "component_based": false + }, + "minecraft:diamond_axe": { + "runtime_id": 325, + "component_based": false + }, + "minecraft:diamond_block": { + "runtime_id": 57, + "component_based": false + }, + "minecraft:diamond_boots": { + "runtime_id": 357, + "component_based": false + }, + "minecraft:diamond_chestplate": { + "runtime_id": 355, + "component_based": false + }, + "minecraft:diamond_helmet": { + "runtime_id": 354, + "component_based": false + }, + "minecraft:diamond_hoe": { + "runtime_id": 339, + "component_based": false + }, + "minecraft:diamond_horse_armor": { + "runtime_id": 549, + "component_based": false + }, + "minecraft:diamond_leggings": { + "runtime_id": 356, + "component_based": false + }, + "minecraft:diamond_ore": { + "runtime_id": 56, + "component_based": false + }, + "minecraft:diamond_pickaxe": { + "runtime_id": 324, + "component_based": false + }, + "minecraft:diamond_shovel": { + "runtime_id": 323, + "component_based": false + }, + "minecraft:diamond_sword": { + "runtime_id": 322, + "component_based": false + }, + "minecraft:diorite": { + "runtime_id": -592, + "component_based": false + }, + "minecraft:diorite_stairs": { + "runtime_id": -170, + "component_based": false + }, + "minecraft:dirt": { + "runtime_id": 3, + "component_based": false + }, + "minecraft:dirt_with_roots": { + "runtime_id": -318, + "component_based": false + }, + "minecraft:disc_fragment_5": { + "runtime_id": 656, + "component_based": false + }, + "minecraft:dispenser": { + "runtime_id": 23, + "component_based": false + }, + "minecraft:dolphin_spawn_egg": { + "runtime_id": 494, + "component_based": false + }, + "minecraft:donkey_spawn_egg": { + "runtime_id": 475, + "component_based": false + }, + "minecraft:double_cut_copper_slab": { + "runtime_id": -368, + "component_based": false + }, + "minecraft:double_plant": { + "runtime_id": 738, + "component_based": false + }, + "minecraft:double_stone_block_slab": { + "runtime_id": 43, + "component_based": false + }, + "minecraft:double_stone_block_slab2": { + "runtime_id": 181, + "component_based": false + }, + "minecraft:double_stone_block_slab3": { + "runtime_id": -167, + "component_based": false + }, + "minecraft:double_stone_block_slab4": { + "runtime_id": -168, + "component_based": false + }, + "minecraft:dragon_breath": { + "runtime_id": 576, + "component_based": false + }, + "minecraft:dragon_egg": { + "runtime_id": 122, + "component_based": false + }, + "minecraft:dried_kelp": { + "runtime_id": 274, + "component_based": false + }, + "minecraft:dried_kelp_block": { + "runtime_id": -139, + "component_based": false + }, + "minecraft:dripstone_block": { + "runtime_id": -317, + "component_based": false + }, + "minecraft:dropper": { + "runtime_id": 125, + "component_based": false + }, + "minecraft:drowned_spawn_egg": { + "runtime_id": 493, + "component_based": false + }, + "minecraft:dune_armor_trim_smithing_template": { + "runtime_id": 701, + "component_based": false + }, + "minecraft:dye": { + "runtime_id": 755, + "component_based": false + }, + "minecraft:echo_shard": { + "runtime_id": 666, + "component_based": false + }, + "minecraft:egg": { + "runtime_id": 398, + "component_based": false + }, + "minecraft:elder_guardian_spawn_egg": { + "runtime_id": 481, + "component_based": false + }, + "minecraft:element_0": { + "runtime_id": 36, + "component_based": false + }, + "minecraft:element_1": { + "runtime_id": -12, + "component_based": false + }, + "minecraft:element_10": { + "runtime_id": -21, + "component_based": false + }, + "minecraft:element_100": { + "runtime_id": -111, + "component_based": false + }, + "minecraft:element_101": { + "runtime_id": -112, + "component_based": false + }, + "minecraft:element_102": { + "runtime_id": -113, + "component_based": false + }, + "minecraft:element_103": { + "runtime_id": -114, + "component_based": false + }, + "minecraft:element_104": { + "runtime_id": -115, + "component_based": false + }, + "minecraft:element_105": { + "runtime_id": -116, + "component_based": false + }, + "minecraft:element_106": { + "runtime_id": -117, + "component_based": false + }, + "minecraft:element_107": { + "runtime_id": -118, + "component_based": false + }, + "minecraft:element_108": { + "runtime_id": -119, + "component_based": false + }, + "minecraft:element_109": { + "runtime_id": -120, + "component_based": false + }, + "minecraft:element_11": { + "runtime_id": -22, + "component_based": false + }, + "minecraft:element_110": { + "runtime_id": -121, + "component_based": false + }, + "minecraft:element_111": { + "runtime_id": -122, + "component_based": false + }, + "minecraft:element_112": { + "runtime_id": -123, + "component_based": false + }, + "minecraft:element_113": { + "runtime_id": -124, + "component_based": false + }, + "minecraft:element_114": { + "runtime_id": -125, + "component_based": false + }, + "minecraft:element_115": { + "runtime_id": -126, + "component_based": false + }, + "minecraft:element_116": { + "runtime_id": -127, + "component_based": false + }, + "minecraft:element_117": { + "runtime_id": -128, + "component_based": false + }, + "minecraft:element_118": { + "runtime_id": -129, + "component_based": false + }, + "minecraft:element_12": { + "runtime_id": -23, + "component_based": false + }, + "minecraft:element_13": { + "runtime_id": -24, + "component_based": false + }, + "minecraft:element_14": { + "runtime_id": -25, + "component_based": false + }, + "minecraft:element_15": { + "runtime_id": -26, + "component_based": false + }, + "minecraft:element_16": { + "runtime_id": -27, + "component_based": false + }, + "minecraft:element_17": { + "runtime_id": -28, + "component_based": false + }, + "minecraft:element_18": { + "runtime_id": -29, + "component_based": false + }, + "minecraft:element_19": { + "runtime_id": -30, + "component_based": false + }, + "minecraft:element_2": { + "runtime_id": -13, + "component_based": false + }, + "minecraft:element_20": { + "runtime_id": -31, + "component_based": false + }, + "minecraft:element_21": { + "runtime_id": -32, + "component_based": false + }, + "minecraft:element_22": { + "runtime_id": -33, + "component_based": false + }, + "minecraft:element_23": { + "runtime_id": -34, + "component_based": false + }, + "minecraft:element_24": { + "runtime_id": -35, + "component_based": false + }, + "minecraft:element_25": { + "runtime_id": -36, + "component_based": false + }, + "minecraft:element_26": { + "runtime_id": -37, + "component_based": false + }, + "minecraft:element_27": { + "runtime_id": -38, + "component_based": false + }, + "minecraft:element_28": { + "runtime_id": -39, + "component_based": false + }, + "minecraft:element_29": { + "runtime_id": -40, + "component_based": false + }, + "minecraft:element_3": { + "runtime_id": -14, + "component_based": false + }, + "minecraft:element_30": { + "runtime_id": -41, + "component_based": false + }, + "minecraft:element_31": { + "runtime_id": -42, + "component_based": false + }, + "minecraft:element_32": { + "runtime_id": -43, + "component_based": false + }, + "minecraft:element_33": { + "runtime_id": -44, + "component_based": false + }, + "minecraft:element_34": { + "runtime_id": -45, + "component_based": false + }, + "minecraft:element_35": { + "runtime_id": -46, + "component_based": false + }, + "minecraft:element_36": { + "runtime_id": -47, + "component_based": false + }, + "minecraft:element_37": { + "runtime_id": -48, + "component_based": false + }, + "minecraft:element_38": { + "runtime_id": -49, + "component_based": false + }, + "minecraft:element_39": { + "runtime_id": -50, + "component_based": false + }, + "minecraft:element_4": { + "runtime_id": -15, + "component_based": false + }, + "minecraft:element_40": { + "runtime_id": -51, + "component_based": false + }, + "minecraft:element_41": { + "runtime_id": -52, + "component_based": false + }, + "minecraft:element_42": { + "runtime_id": -53, + "component_based": false + }, + "minecraft:element_43": { + "runtime_id": -54, + "component_based": false + }, + "minecraft:element_44": { + "runtime_id": -55, + "component_based": false + }, + "minecraft:element_45": { + "runtime_id": -56, + "component_based": false + }, + "minecraft:element_46": { + "runtime_id": -57, + "component_based": false + }, + "minecraft:element_47": { + "runtime_id": -58, + "component_based": false + }, + "minecraft:element_48": { + "runtime_id": -59, + "component_based": false + }, + "minecraft:element_49": { + "runtime_id": -60, + "component_based": false + }, + "minecraft:element_5": { + "runtime_id": -16, + "component_based": false + }, + "minecraft:element_50": { + "runtime_id": -61, + "component_based": false + }, + "minecraft:element_51": { + "runtime_id": -62, + "component_based": false + }, + "minecraft:element_52": { + "runtime_id": -63, + "component_based": false + }, + "minecraft:element_53": { + "runtime_id": -64, + "component_based": false + }, + "minecraft:element_54": { + "runtime_id": -65, + "component_based": false + }, + "minecraft:element_55": { + "runtime_id": -66, + "component_based": false + }, + "minecraft:element_56": { + "runtime_id": -67, + "component_based": false + }, + "minecraft:element_57": { + "runtime_id": -68, + "component_based": false + }, + "minecraft:element_58": { + "runtime_id": -69, + "component_based": false + }, + "minecraft:element_59": { + "runtime_id": -70, + "component_based": false + }, + "minecraft:element_6": { + "runtime_id": -17, + "component_based": false + }, + "minecraft:element_60": { + "runtime_id": -71, + "component_based": false + }, + "minecraft:element_61": { + "runtime_id": -72, + "component_based": false + }, + "minecraft:element_62": { + "runtime_id": -73, + "component_based": false + }, + "minecraft:element_63": { + "runtime_id": -74, + "component_based": false + }, + "minecraft:element_64": { + "runtime_id": -75, + "component_based": false + }, + "minecraft:element_65": { + "runtime_id": -76, + "component_based": false + }, + "minecraft:element_66": { + "runtime_id": -77, + "component_based": false + }, + "minecraft:element_67": { + "runtime_id": -78, + "component_based": false + }, + "minecraft:element_68": { + "runtime_id": -79, + "component_based": false + }, + "minecraft:element_69": { + "runtime_id": -80, + "component_based": false + }, + "minecraft:element_7": { + "runtime_id": -18, + "component_based": false + }, + "minecraft:element_70": { + "runtime_id": -81, + "component_based": false + }, + "minecraft:element_71": { + "runtime_id": -82, + "component_based": false + }, + "minecraft:element_72": { + "runtime_id": -83, + "component_based": false + }, + "minecraft:element_73": { + "runtime_id": -84, + "component_based": false + }, + "minecraft:element_74": { + "runtime_id": -85, + "component_based": false + }, + "minecraft:element_75": { + "runtime_id": -86, + "component_based": false + }, + "minecraft:element_76": { + "runtime_id": -87, + "component_based": false + }, + "minecraft:element_77": { + "runtime_id": -88, + "component_based": false + }, + "minecraft:element_78": { + "runtime_id": -89, + "component_based": false + }, + "minecraft:element_79": { + "runtime_id": -90, + "component_based": false + }, + "minecraft:element_8": { + "runtime_id": -19, + "component_based": false + }, + "minecraft:element_80": { + "runtime_id": -91, + "component_based": false + }, + "minecraft:element_81": { + "runtime_id": -92, + "component_based": false + }, + "minecraft:element_82": { + "runtime_id": -93, + "component_based": false + }, + "minecraft:element_83": { + "runtime_id": -94, + "component_based": false + }, + "minecraft:element_84": { + "runtime_id": -95, + "component_based": false + }, + "minecraft:element_85": { + "runtime_id": -96, + "component_based": false + }, + "minecraft:element_86": { + "runtime_id": -97, + "component_based": false + }, + "minecraft:element_87": { + "runtime_id": -98, + "component_based": false + }, + "minecraft:element_88": { + "runtime_id": -99, + "component_based": false + }, + "minecraft:element_89": { + "runtime_id": -100, + "component_based": false + }, + "minecraft:element_9": { + "runtime_id": -20, + "component_based": false + }, + "minecraft:element_90": { + "runtime_id": -101, + "component_based": false + }, + "minecraft:element_91": { + "runtime_id": -102, + "component_based": false + }, + "minecraft:element_92": { + "runtime_id": -103, + "component_based": false + }, + "minecraft:element_93": { + "runtime_id": -104, + "component_based": false + }, + "minecraft:element_94": { + "runtime_id": -105, + "component_based": false + }, + "minecraft:element_95": { + "runtime_id": -106, + "component_based": false + }, + "minecraft:element_96": { + "runtime_id": -107, + "component_based": false + }, + "minecraft:element_97": { + "runtime_id": -108, + "component_based": false + }, + "minecraft:element_98": { + "runtime_id": -109, + "component_based": false + }, + "minecraft:element_99": { + "runtime_id": -110, + "component_based": false + }, + "minecraft:elytra": { + "runtime_id": 580, + "component_based": false + }, + "minecraft:emerald": { + "runtime_id": 528, + "component_based": false + }, + "minecraft:emerald_block": { + "runtime_id": 133, + "component_based": false + }, + "minecraft:emerald_ore": { + "runtime_id": 129, + "component_based": false + }, + "minecraft:empty_map": { + "runtime_id": 531, + "component_based": false + }, + "minecraft:enchanted_book": { + "runtime_id": 537, + "component_based": false + }, + "minecraft:enchanted_golden_apple": { + "runtime_id": 263, + "component_based": false + }, + "minecraft:enchanting_table": { + "runtime_id": 116, + "component_based": false + }, + "minecraft:end_brick_stairs": { + "runtime_id": -178, + "component_based": false + }, + "minecraft:end_bricks": { + "runtime_id": 206, + "component_based": false + }, + "minecraft:end_crystal": { + "runtime_id": 758, + "component_based": false + }, + "minecraft:end_gateway": { + "runtime_id": 209, + "component_based": false + }, + "minecraft:end_portal": { + "runtime_id": 119, + "component_based": false + }, + "minecraft:end_portal_frame": { + "runtime_id": 120, + "component_based": false + }, + "minecraft:end_rod": { + "runtime_id": 208, + "component_based": false + }, + "minecraft:end_stone": { + "runtime_id": 121, + "component_based": false + }, + "minecraft:ender_chest": { + "runtime_id": 130, + "component_based": false + }, + "minecraft:ender_dragon_spawn_egg": { + "runtime_id": 517, + "component_based": false + }, + "minecraft:ender_eye": { + "runtime_id": 442, + "component_based": false + }, + "minecraft:ender_pearl": { + "runtime_id": 430, + "component_based": false + }, + "minecraft:enderman_spawn_egg": { + "runtime_id": 451, + "component_based": false + }, + "minecraft:endermite_spawn_egg": { + "runtime_id": 469, + "component_based": false + }, + "minecraft:evoker_spawn_egg": { + "runtime_id": 485, + "component_based": false + }, + "minecraft:experience_bottle": { + "runtime_id": 524, + "component_based": false + }, + "minecraft:explorer_pottery_sherd": { + "runtime_id": 682, + "component_based": false + }, + "minecraft:exposed_chiseled_copper": { + "runtime_id": -761, + "component_based": false + }, + "minecraft:exposed_copper": { + "runtime_id": -341, + "component_based": false + }, + "minecraft:exposed_copper_bulb": { + "runtime_id": -777, + "component_based": false + }, + "minecraft:exposed_copper_door": { + "runtime_id": -785, + "component_based": false + }, + "minecraft:exposed_copper_grate": { + "runtime_id": -769, + "component_based": false + }, + "minecraft:exposed_copper_trapdoor": { + "runtime_id": -793, + "component_based": false + }, + "minecraft:exposed_cut_copper": { + "runtime_id": -348, + "component_based": false + }, + "minecraft:exposed_cut_copper_slab": { + "runtime_id": -362, + "component_based": false + }, + "minecraft:exposed_cut_copper_stairs": { + "runtime_id": -355, + "component_based": false + }, + "minecraft:exposed_double_cut_copper_slab": { + "runtime_id": -369, + "component_based": false + }, + "minecraft:eye_armor_trim_smithing_template": { + "runtime_id": 705, + "component_based": false + }, + "minecraft:farmland": { + "runtime_id": 60, + "component_based": false + }, + "minecraft:feather": { + "runtime_id": 334, + "component_based": false + }, + "minecraft:fence": { + "runtime_id": 728, + "component_based": false + }, + "minecraft:fence_gate": { + "runtime_id": 107, + "component_based": false + }, + "minecraft:fermented_spider_eye": { + "runtime_id": 437, + "component_based": false + }, + "minecraft:fern": { + "runtime_id": -848, + "component_based": false + }, + "minecraft:field_masoned_banner_pattern": { + "runtime_id": 601, + "component_based": false + }, + "minecraft:filled_map": { + "runtime_id": 428, + "component_based": false + }, + "minecraft:fire": { + "runtime_id": 51, + "component_based": false + }, + "minecraft:fire_charge": { + "runtime_id": 525, + "component_based": false + }, + "minecraft:fire_coral": { + "runtime_id": -583, + "component_based": false + }, + "minecraft:fire_coral_block": { + "runtime_id": -851, + "component_based": false + }, + "minecraft:fire_coral_fan": { + "runtime_id": -842, + "component_based": false + }, + "minecraft:firework_rocket": { + "runtime_id": 535, + "component_based": false + }, + "minecraft:firework_star": { + "runtime_id": 536, + "component_based": false + }, + "minecraft:fishing_rod": { + "runtime_id": 400, + "component_based": true + }, + "minecraft:fletching_table": { + "runtime_id": -201, + "component_based": false + }, + "minecraft:flint": { + "runtime_id": 363, + "component_based": false + }, + "minecraft:flint_and_steel": { + "runtime_id": 305, + "component_based": false + }, + "minecraft:flow_armor_trim_smithing_template": { + "runtime_id": 716, + "component_based": false + }, + "minecraft:flow_banner_pattern": { + "runtime_id": 605, + "component_based": false + }, + "minecraft:flow_pottery_sherd": { + "runtime_id": 683, + "component_based": false + }, + "minecraft:flower_banner_pattern": { + "runtime_id": 597, + "component_based": false + }, + "minecraft:flower_pot": { + "runtime_id": 530, + "component_based": true + }, + "minecraft:flowering_azalea": { + "runtime_id": -338, + "component_based": false + }, + "minecraft:flowing_lava": { + "runtime_id": 10, + "component_based": false + }, + "minecraft:flowing_water": { + "runtime_id": 8, + "component_based": false + }, + "minecraft:fox_spawn_egg": { + "runtime_id": 500, + "component_based": false + }, + "minecraft:frame": { + "runtime_id": 529, + "component_based": true + }, + "minecraft:friend_pottery_sherd": { + "runtime_id": 684, + "component_based": false + }, + "minecraft:frog_spawn": { + "runtime_id": -468, + "component_based": false + }, + "minecraft:frog_spawn_egg": { + "runtime_id": 647, + "component_based": false + }, + "minecraft:frosted_ice": { + "runtime_id": 207, + "component_based": false + }, + "minecraft:furnace": { + "runtime_id": 61, + "component_based": false + }, + "minecraft:ghast_spawn_egg": { + "runtime_id": 463, + "component_based": false + }, + "minecraft:ghast_tear": { + "runtime_id": 433, + "component_based": false + }, + "minecraft:gilded_blackstone": { + "runtime_id": -281, + "component_based": false + }, + "minecraft:glass": { + "runtime_id": 20, + "component_based": false + }, + "minecraft:glass_bottle": { + "runtime_id": 436, + "component_based": false + }, + "minecraft:glass_pane": { + "runtime_id": 102, + "component_based": false + }, + "minecraft:glistering_melon_slice": { + "runtime_id": 443, + "component_based": false + }, + "minecraft:globe_banner_pattern": { + "runtime_id": 604, + "component_based": false + }, + "minecraft:glow_berries": { + "runtime_id": 759, + "component_based": false + }, + "minecraft:glow_frame": { + "runtime_id": 642, + "component_based": true + }, + "minecraft:glow_ink_sac": { + "runtime_id": 519, + "component_based": false + }, + "minecraft:glow_lichen": { + "runtime_id": -411, + "component_based": false + }, + "minecraft:glow_squid_spawn_egg": { + "runtime_id": 514, + "component_based": false + }, + "minecraft:glow_stick": { + "runtime_id": 620, + "component_based": false + }, + "minecraft:glowingobsidian": { + "runtime_id": 246, + "component_based": false + }, + "minecraft:glowstone": { + "runtime_id": 89, + "component_based": false + }, + "minecraft:glowstone_dust": { + "runtime_id": 402, + "component_based": false + }, + "minecraft:goat_horn": { + "runtime_id": 646, + "component_based": false + }, + "minecraft:goat_spawn_egg": { + "runtime_id": 513, + "component_based": false + }, + "minecraft:gold_block": { + "runtime_id": 41, + "component_based": false + }, + "minecraft:gold_ingot": { + "runtime_id": 312, + "component_based": false + }, + "minecraft:gold_nugget": { + "runtime_id": 434, + "component_based": false + }, + "minecraft:gold_ore": { + "runtime_id": 14, + "component_based": false + }, + "minecraft:golden_apple": { + "runtime_id": 262, + "component_based": false + }, + "minecraft:golden_axe": { + "runtime_id": 332, + "component_based": false + }, + "minecraft:golden_boots": { + "runtime_id": 361, + "component_based": false + }, + "minecraft:golden_carrot": { + "runtime_id": 287, + "component_based": false + }, + "minecraft:golden_chestplate": { + "runtime_id": 359, + "component_based": false + }, + "minecraft:golden_helmet": { + "runtime_id": 358, + "component_based": false + }, + "minecraft:golden_hoe": { + "runtime_id": 340, + "component_based": false + }, + "minecraft:golden_horse_armor": { + "runtime_id": 548, + "component_based": false + }, + "minecraft:golden_leggings": { + "runtime_id": 360, + "component_based": false + }, + "minecraft:golden_pickaxe": { + "runtime_id": 331, + "component_based": false + }, + "minecraft:golden_rail": { + "runtime_id": 27, + "component_based": false + }, + "minecraft:golden_shovel": { + "runtime_id": 330, + "component_based": false + }, + "minecraft:golden_sword": { + "runtime_id": 329, + "component_based": false + }, + "minecraft:granite": { + "runtime_id": -590, + "component_based": false + }, + "minecraft:granite_stairs": { + "runtime_id": -169, + "component_based": false + }, + "minecraft:grass_block": { + "runtime_id": 2, + "component_based": false + }, + "minecraft:grass_path": { + "runtime_id": 198, + "component_based": false + }, + "minecraft:gravel": { + "runtime_id": 13, + "component_based": false + }, + "minecraft:gray_candle": { + "runtime_id": -420, + "component_based": false + }, + "minecraft:gray_candle_cake": { + "runtime_id": -437, + "component_based": false + }, + "minecraft:gray_carpet": { + "runtime_id": -603, + "component_based": false + }, + "minecraft:gray_concrete": { + "runtime_id": -634, + "component_based": false + }, + "minecraft:gray_concrete_powder": { + "runtime_id": -715, + "component_based": false + }, + "minecraft:gray_dye": { + "runtime_id": 411, + "component_based": false + }, + "minecraft:gray_glazed_terracotta": { + "runtime_id": 227, + "component_based": false + }, + "minecraft:gray_shulker_box": { + "runtime_id": -619, + "component_based": false + }, + "minecraft:gray_stained_glass": { + "runtime_id": -679, + "component_based": false + }, + "minecraft:gray_stained_glass_pane": { + "runtime_id": -649, + "component_based": false + }, + "minecraft:gray_terracotta": { + "runtime_id": -730, + "component_based": false + }, + "minecraft:gray_wool": { + "runtime_id": -553, + "component_based": false + }, + "minecraft:green_candle": { + "runtime_id": -426, + "component_based": false + }, + "minecraft:green_candle_cake": { + "runtime_id": -443, + "component_based": false + }, + "minecraft:green_carpet": { + "runtime_id": -609, + "component_based": false + }, + "minecraft:green_concrete": { + "runtime_id": -640, + "component_based": false + }, + "minecraft:green_concrete_powder": { + "runtime_id": -721, + "component_based": false + }, + "minecraft:green_dye": { + "runtime_id": 405, + "component_based": false + }, + "minecraft:green_glazed_terracotta": { + "runtime_id": 233, + "component_based": false + }, + "minecraft:green_shulker_box": { + "runtime_id": -625, + "component_based": false + }, + "minecraft:green_stained_glass": { + "runtime_id": -685, + "component_based": false + }, + "minecraft:green_stained_glass_pane": { + "runtime_id": -655, + "component_based": false + }, + "minecraft:green_terracotta": { + "runtime_id": -736, + "component_based": false + }, + "minecraft:green_wool": { + "runtime_id": -560, + "component_based": false + }, + "minecraft:grindstone": { + "runtime_id": -195, + "component_based": false + }, + "minecraft:guardian_spawn_egg": { + "runtime_id": 470, + "component_based": false + }, + "minecraft:gunpowder": { + "runtime_id": 335, + "component_based": false + }, + "minecraft:guster_banner_pattern": { + "runtime_id": 606, + "component_based": false + }, + "minecraft:guster_pottery_sherd": { + "runtime_id": 685, + "component_based": false + }, + "minecraft:hanging_roots": { + "runtime_id": -319, + "component_based": false + }, + "minecraft:hard_black_stained_glass": { + "runtime_id": -702, + "component_based": false + }, + "minecraft:hard_black_stained_glass_pane": { + "runtime_id": -672, + "component_based": false + }, + "minecraft:hard_blue_stained_glass": { + "runtime_id": -698, + "component_based": false + }, + "minecraft:hard_blue_stained_glass_pane": { + "runtime_id": -668, + "component_based": false + }, + "minecraft:hard_brown_stained_glass": { + "runtime_id": -699, + "component_based": false + }, + "minecraft:hard_brown_stained_glass_pane": { + "runtime_id": -669, + "component_based": false + }, + "minecraft:hard_cyan_stained_glass": { + "runtime_id": -696, + "component_based": false + }, + "minecraft:hard_cyan_stained_glass_pane": { + "runtime_id": -666, + "component_based": false + }, + "minecraft:hard_glass": { + "runtime_id": 253, + "component_based": false + }, + "minecraft:hard_glass_pane": { + "runtime_id": 190, + "component_based": false + }, + "minecraft:hard_gray_stained_glass": { + "runtime_id": -694, + "component_based": false + }, + "minecraft:hard_gray_stained_glass_pane": { + "runtime_id": -664, + "component_based": false + }, + "minecraft:hard_green_stained_glass": { + "runtime_id": -700, + "component_based": false + }, + "minecraft:hard_green_stained_glass_pane": { + "runtime_id": -670, + "component_based": false + }, + "minecraft:hard_light_blue_stained_glass": { + "runtime_id": -690, + "component_based": false + }, + "minecraft:hard_light_blue_stained_glass_pane": { + "runtime_id": -660, + "component_based": false + }, + "minecraft:hard_light_gray_stained_glass": { + "runtime_id": -695, + "component_based": false + }, + "minecraft:hard_light_gray_stained_glass_pane": { + "runtime_id": -665, + "component_based": false + }, + "minecraft:hard_lime_stained_glass": { + "runtime_id": -692, + "component_based": false + }, + "minecraft:hard_lime_stained_glass_pane": { + "runtime_id": -662, + "component_based": false + }, + "minecraft:hard_magenta_stained_glass": { + "runtime_id": -689, + "component_based": false + }, + "minecraft:hard_magenta_stained_glass_pane": { + "runtime_id": -659, + "component_based": false + }, + "minecraft:hard_orange_stained_glass": { + "runtime_id": -688, + "component_based": false + }, + "minecraft:hard_orange_stained_glass_pane": { + "runtime_id": -658, + "component_based": false + }, + "minecraft:hard_pink_stained_glass": { + "runtime_id": -693, + "component_based": false + }, + "minecraft:hard_pink_stained_glass_pane": { + "runtime_id": -663, + "component_based": false + }, + "minecraft:hard_purple_stained_glass": { + "runtime_id": -697, + "component_based": false + }, + "minecraft:hard_purple_stained_glass_pane": { + "runtime_id": -667, + "component_based": false + }, + "minecraft:hard_red_stained_glass": { + "runtime_id": -701, + "component_based": false + }, + "minecraft:hard_red_stained_glass_pane": { + "runtime_id": -671, + "component_based": false + }, + "minecraft:hard_stained_glass": { + "runtime_id": 752, + "component_based": false + }, + "minecraft:hard_stained_glass_pane": { + "runtime_id": 753, + "component_based": false + }, + "minecraft:hard_white_stained_glass": { + "runtime_id": 254, + "component_based": false + }, + "minecraft:hard_white_stained_glass_pane": { + "runtime_id": 191, + "component_based": false + }, + "minecraft:hard_yellow_stained_glass": { + "runtime_id": -691, + "component_based": false + }, + "minecraft:hard_yellow_stained_glass_pane": { + "runtime_id": -661, + "component_based": false + }, + "minecraft:hardened_clay": { + "runtime_id": 172, + "component_based": false + }, + "minecraft:hay_block": { + "runtime_id": 170, + "component_based": false + }, + "minecraft:heart_of_the_sea": { + "runtime_id": 587, + "component_based": false + }, + "minecraft:heart_pottery_sherd": { + "runtime_id": 686, + "component_based": false + }, + "minecraft:heartbreak_pottery_sherd": { + "runtime_id": 687, + "component_based": false + }, + "minecraft:heavy_core": { + "runtime_id": -316, + "component_based": false + }, + "minecraft:heavy_weighted_pressure_plate": { + "runtime_id": 148, + "component_based": false + }, + "minecraft:hoglin_spawn_egg": { + "runtime_id": 506, + "component_based": false + }, + "minecraft:honey_block": { + "runtime_id": -220, + "component_based": false + }, + "minecraft:honey_bottle": { + "runtime_id": 610, + "component_based": false + }, + "minecraft:honeycomb": { + "runtime_id": 609, + "component_based": false + }, + "minecraft:honeycomb_block": { + "runtime_id": -221, + "component_based": false + }, + "minecraft:hopper": { + "runtime_id": 543, + "component_based": true + }, + "minecraft:hopper_minecart": { + "runtime_id": 542, + "component_based": false + }, + "minecraft:horn_coral": { + "runtime_id": -584, + "component_based": false + }, + "minecraft:horn_coral_block": { + "runtime_id": -852, + "component_based": false + }, + "minecraft:horn_coral_fan": { + "runtime_id": -843, + "component_based": false + }, + "minecraft:horse_spawn_egg": { + "runtime_id": 467, + "component_based": false + }, + "minecraft:host_armor_trim_smithing_template": { + "runtime_id": 715, + "component_based": false + }, + "minecraft:howl_pottery_sherd": { + "runtime_id": 688, + "component_based": false + }, + "minecraft:husk_spawn_egg": { + "runtime_id": 473, + "component_based": false + }, + "minecraft:ice": { + "runtime_id": 79, + "component_based": false + }, + "minecraft:ice_bomb": { + "runtime_id": 614, + "component_based": false + }, + "minecraft:infested_deepslate": { + "runtime_id": -454, + "component_based": false + }, + "minecraft:info_update": { + "runtime_id": 248, + "component_based": false + }, + "minecraft:info_update2": { + "runtime_id": 249, + "component_based": false + }, + "minecraft:ink_sac": { + "runtime_id": 421, + "component_based": false + }, + "minecraft:invisible_bedrock": { + "runtime_id": 95, + "component_based": false + }, + "minecraft:iron_axe": { + "runtime_id": 304, + "component_based": false + }, + "minecraft:iron_bars": { + "runtime_id": 101, + "component_based": false + }, + "minecraft:iron_block": { + "runtime_id": 42, + "component_based": false + }, + "minecraft:iron_boots": { + "runtime_id": 353, + "component_based": false + }, + "minecraft:iron_chestplate": { + "runtime_id": 351, + "component_based": false + }, + "minecraft:iron_door": { + "runtime_id": 379, + "component_based": false + }, + "minecraft:iron_golem_spawn_egg": { + "runtime_id": 515, + "component_based": false + }, + "minecraft:iron_helmet": { + "runtime_id": 350, + "component_based": false + }, + "minecraft:iron_hoe": { + "runtime_id": 338, + "component_based": false + }, + "minecraft:iron_horse_armor": { + "runtime_id": 547, + "component_based": false + }, + "minecraft:iron_ingot": { + "runtime_id": 311, + "component_based": false + }, + "minecraft:iron_leggings": { + "runtime_id": 352, + "component_based": false + }, + "minecraft:iron_nugget": { + "runtime_id": 585, + "component_based": false + }, + "minecraft:iron_ore": { + "runtime_id": 15, + "component_based": false + }, + "minecraft:iron_pickaxe": { + "runtime_id": 303, + "component_based": false + }, + "minecraft:iron_shovel": { + "runtime_id": 302, + "component_based": false + }, + "minecraft:iron_sword": { + "runtime_id": 313, + "component_based": false + }, + "minecraft:iron_trapdoor": { + "runtime_id": 167, + "component_based": false + }, + "minecraft:item.acacia_door": { + "runtime_id": 196, + "component_based": false + }, + "minecraft:item.bed": { + "runtime_id": 26, + "component_based": false + }, + "minecraft:item.beetroot": { + "runtime_id": 244, + "component_based": false + }, + "minecraft:item.birch_door": { + "runtime_id": 194, + "component_based": false + }, + "minecraft:item.brewing_stand": { + "runtime_id": 117, + "component_based": false + }, + "minecraft:item.cake": { + "runtime_id": 92, + "component_based": false + }, + "minecraft:item.camera": { + "runtime_id": 242, + "component_based": false + }, + "minecraft:item.campfire": { + "runtime_id": -209, + "component_based": false + }, + "minecraft:item.cauldron": { + "runtime_id": 118, + "component_based": false + }, + "minecraft:item.chain": { + "runtime_id": -286, + "component_based": false + }, + "minecraft:item.crimson_door": { + "runtime_id": -244, + "component_based": false + }, + "minecraft:item.dark_oak_door": { + "runtime_id": 197, + "component_based": false + }, + "minecraft:item.flower_pot": { + "runtime_id": 140, + "component_based": false + }, + "minecraft:item.frame": { + "runtime_id": 199, + "component_based": false + }, + "minecraft:item.glow_frame": { + "runtime_id": -339, + "component_based": false + }, + "minecraft:item.hopper": { + "runtime_id": 154, + "component_based": false + }, + "minecraft:item.iron_door": { + "runtime_id": 71, + "component_based": false + }, + "minecraft:item.jungle_door": { + "runtime_id": 195, + "component_based": false + }, + "minecraft:item.kelp": { + "runtime_id": -138, + "component_based": false + }, + "minecraft:item.mangrove_door": { + "runtime_id": -493, + "component_based": false + }, + "minecraft:item.nether_sprouts": { + "runtime_id": -238, + "component_based": false + }, + "minecraft:item.nether_wart": { + "runtime_id": 115, + "component_based": false + }, + "minecraft:item.reeds": { + "runtime_id": 83, + "component_based": false + }, + "minecraft:item.skull": { + "runtime_id": 144, + "component_based": false + }, + "minecraft:item.soul_campfire": { + "runtime_id": -290, + "component_based": false + }, + "minecraft:item.spruce_door": { + "runtime_id": 193, + "component_based": false + }, + "minecraft:item.warped_door": { + "runtime_id": -245, + "component_based": false + }, + "minecraft:item.wheat": { + "runtime_id": 59, + "component_based": false + }, + "minecraft:item.wooden_door": { + "runtime_id": 64, + "component_based": false + }, + "minecraft:jigsaw": { + "runtime_id": -211, + "component_based": false + }, + "minecraft:jukebox": { + "runtime_id": 84, + "component_based": false + }, + "minecraft:jungle_boat": { + "runtime_id": 385, + "component_based": false + }, + "minecraft:jungle_button": { + "runtime_id": -143, + "component_based": false + }, + "minecraft:jungle_chest_boat": { + "runtime_id": 659, + "component_based": false + }, + "minecraft:jungle_door": { + "runtime_id": 571, + "component_based": false + }, + "minecraft:jungle_double_slab": { + "runtime_id": -811, + "component_based": false + }, + "minecraft:jungle_fence": { + "runtime_id": -578, + "component_based": false + }, + "minecraft:jungle_fence_gate": { + "runtime_id": 185, + "component_based": false + }, + "minecraft:jungle_hanging_sign": { + "runtime_id": -503, + "component_based": false + }, + "minecraft:jungle_leaves": { + "runtime_id": -802, + "component_based": false + }, + "minecraft:jungle_log": { + "runtime_id": -571, + "component_based": false + }, + "minecraft:jungle_planks": { + "runtime_id": -741, + "component_based": false + }, + "minecraft:jungle_pressure_plate": { + "runtime_id": -153, + "component_based": false + }, + "minecraft:jungle_sapling": { + "runtime_id": -827, + "component_based": false + }, + "minecraft:jungle_sign": { + "runtime_id": 594, + "component_based": false + }, + "minecraft:jungle_slab": { + "runtime_id": -806, + "component_based": false + }, + "minecraft:jungle_stairs": { + "runtime_id": 136, + "component_based": false + }, + "minecraft:jungle_standing_sign": { + "runtime_id": -188, + "component_based": false + }, + "minecraft:jungle_trapdoor": { + "runtime_id": -148, + "component_based": false + }, + "minecraft:jungle_wall_sign": { + "runtime_id": -189, + "component_based": false + }, + "minecraft:jungle_wood": { + "runtime_id": -816, + "component_based": false + }, + "minecraft:kelp": { + "runtime_id": 390, + "component_based": true + }, + "minecraft:ladder": { + "runtime_id": 65, + "component_based": false + }, + "minecraft:lantern": { + "runtime_id": -208, + "component_based": false + }, + "minecraft:lapis_block": { + "runtime_id": 22, + "component_based": false + }, + "minecraft:lapis_lazuli": { + "runtime_id": 422, + "component_based": false + }, + "minecraft:lapis_ore": { + "runtime_id": 21, + "component_based": false + }, + "minecraft:large_amethyst_bud": { + "runtime_id": -330, + "component_based": false + }, + "minecraft:large_fern": { + "runtime_id": -865, + "component_based": false + }, + "minecraft:lava": { + "runtime_id": 11, + "component_based": false + }, + "minecraft:lava_bucket": { + "runtime_id": 370, + "component_based": false + }, + "minecraft:lead": { + "runtime_id": 563, + "component_based": false + }, + "minecraft:leather": { + "runtime_id": 389, + "component_based": false + }, + "minecraft:leather_boots": { + "runtime_id": 345, + "component_based": false + }, + "minecraft:leather_chestplate": { + "runtime_id": 343, + "component_based": false + }, + "minecraft:leather_helmet": { + "runtime_id": 342, + "component_based": false + }, + "minecraft:leather_horse_armor": { + "runtime_id": 546, + "component_based": false + }, + "minecraft:leather_leggings": { + "runtime_id": 344, + "component_based": false + }, + "minecraft:leaves": { + "runtime_id": 733, + "component_based": false + }, + "minecraft:leaves2": { + "runtime_id": 734, + "component_based": false + }, + "minecraft:lectern": { + "runtime_id": -194, + "component_based": false + }, + "minecraft:lever": { + "runtime_id": 69, + "component_based": false + }, + "minecraft:light_block": { + "runtime_id": -215, + "component_based": false + }, + "minecraft:light_blue_candle": { + "runtime_id": -416, + "component_based": false + }, + "minecraft:light_blue_candle_cake": { + "runtime_id": -433, + "component_based": false + }, + "minecraft:light_blue_carpet": { + "runtime_id": -599, + "component_based": false + }, + "minecraft:light_blue_concrete": { + "runtime_id": -630, + "component_based": false + }, + "minecraft:light_blue_concrete_powder": { + "runtime_id": -711, + "component_based": false + }, + "minecraft:light_blue_dye": { + "runtime_id": 415, + "component_based": false + }, + "minecraft:light_blue_glazed_terracotta": { + "runtime_id": 223, + "component_based": false + }, + "minecraft:light_blue_shulker_box": { + "runtime_id": -615, + "component_based": false + }, + "minecraft:light_blue_stained_glass": { + "runtime_id": -675, + "component_based": false + }, + "minecraft:light_blue_stained_glass_pane": { + "runtime_id": -645, + "component_based": false + }, + "minecraft:light_blue_terracotta": { + "runtime_id": -726, + "component_based": false + }, + "minecraft:light_blue_wool": { + "runtime_id": -562, + "component_based": false + }, + "minecraft:light_gray_candle": { + "runtime_id": -421, + "component_based": false + }, + "minecraft:light_gray_candle_cake": { + "runtime_id": -438, + "component_based": false + }, + "minecraft:light_gray_carpet": { + "runtime_id": -604, + "component_based": false + }, + "minecraft:light_gray_concrete": { + "runtime_id": -635, + "component_based": false + }, + "minecraft:light_gray_concrete_powder": { + "runtime_id": -716, + "component_based": false + }, + "minecraft:light_gray_dye": { + "runtime_id": 410, + "component_based": false + }, + "minecraft:light_gray_shulker_box": { + "runtime_id": -620, + "component_based": false + }, + "minecraft:light_gray_stained_glass": { + "runtime_id": -680, + "component_based": false + }, + "minecraft:light_gray_stained_glass_pane": { + "runtime_id": -650, + "component_based": false + }, + "minecraft:light_gray_terracotta": { + "runtime_id": -731, + "component_based": false + }, + "minecraft:light_gray_wool": { + "runtime_id": -552, + "component_based": false + }, + "minecraft:light_weighted_pressure_plate": { + "runtime_id": 147, + "component_based": false + }, + "minecraft:lightning_rod": { + "runtime_id": -312, + "component_based": false + }, + "minecraft:lilac": { + "runtime_id": -863, + "component_based": false + }, + "minecraft:lily_of_the_valley": { + "runtime_id": -839, + "component_based": false + }, + "minecraft:lime_candle": { + "runtime_id": -418, + "component_based": false + }, + "minecraft:lime_candle_cake": { + "runtime_id": -435, + "component_based": false + }, + "minecraft:lime_carpet": { + "runtime_id": -601, + "component_based": false + }, + "minecraft:lime_concrete": { + "runtime_id": -632, + "component_based": false + }, + "minecraft:lime_concrete_powder": { + "runtime_id": -713, + "component_based": false + }, + "minecraft:lime_dye": { + "runtime_id": 413, + "component_based": false + }, + "minecraft:lime_glazed_terracotta": { + "runtime_id": 225, + "component_based": false + }, + "minecraft:lime_shulker_box": { + "runtime_id": -617, + "component_based": false + }, + "minecraft:lime_stained_glass": { + "runtime_id": -677, + "component_based": false + }, + "minecraft:lime_stained_glass_pane": { + "runtime_id": -647, + "component_based": false + }, + "minecraft:lime_terracotta": { + "runtime_id": -728, + "component_based": false + }, + "minecraft:lime_wool": { + "runtime_id": -559, + "component_based": false + }, + "minecraft:lingering_potion": { + "runtime_id": 578, + "component_based": false + }, + "minecraft:lit_blast_furnace": { + "runtime_id": -214, + "component_based": false + }, + "minecraft:lit_deepslate_redstone_ore": { + "runtime_id": -404, + "component_based": false + }, + "minecraft:lit_furnace": { + "runtime_id": 62, + "component_based": false + }, + "minecraft:lit_pumpkin": { + "runtime_id": 91, + "component_based": false + }, + "minecraft:lit_redstone_lamp": { + "runtime_id": 124, + "component_based": false + }, + "minecraft:lit_redstone_ore": { + "runtime_id": 74, + "component_based": false + }, + "minecraft:lit_smoker": { + "runtime_id": -199, + "component_based": false + }, + "minecraft:llama_spawn_egg": { + "runtime_id": 483, + "component_based": false + }, + "minecraft:lodestone": { + "runtime_id": -222, + "component_based": false + }, + "minecraft:lodestone_compass": { + "runtime_id": 621, + "component_based": false + }, + "minecraft:log": { + "runtime_id": 727, + "component_based": false + }, + "minecraft:log2": { + "runtime_id": 742, + "component_based": false + }, + "minecraft:loom": { + "runtime_id": -204, + "component_based": false + }, + "minecraft:mace": { + "runtime_id": 326, + "component_based": false + }, + "minecraft:magenta_candle": { + "runtime_id": -415, + "component_based": false + }, + "minecraft:magenta_candle_cake": { + "runtime_id": -432, + "component_based": false + }, + "minecraft:magenta_carpet": { + "runtime_id": -598, + "component_based": false + }, + "minecraft:magenta_concrete": { + "runtime_id": -629, + "component_based": false + }, + "minecraft:magenta_concrete_powder": { + "runtime_id": -710, + "component_based": false + }, + "minecraft:magenta_dye": { + "runtime_id": 416, + "component_based": false + }, + "minecraft:magenta_glazed_terracotta": { + "runtime_id": 222, + "component_based": false + }, + "minecraft:magenta_shulker_box": { + "runtime_id": -614, + "component_based": false + }, + "minecraft:magenta_stained_glass": { + "runtime_id": -674, + "component_based": false + }, + "minecraft:magenta_stained_glass_pane": { + "runtime_id": -644, + "component_based": false + }, + "minecraft:magenta_terracotta": { + "runtime_id": -725, + "component_based": false + }, + "minecraft:magenta_wool": { + "runtime_id": -565, + "component_based": false + }, + "minecraft:magma": { + "runtime_id": 213, + "component_based": false + }, + "minecraft:magma_cream": { + "runtime_id": 439, + "component_based": false + }, + "minecraft:magma_cube_spawn_egg": { + "runtime_id": 464, + "component_based": false + }, + "minecraft:mangrove_boat": { + "runtime_id": 654, + "component_based": false + }, + "minecraft:mangrove_button": { + "runtime_id": -487, + "component_based": false + }, + "minecraft:mangrove_chest_boat": { + "runtime_id": 663, + "component_based": false + }, + "minecraft:mangrove_door": { + "runtime_id": 652, + "component_based": false + }, + "minecraft:mangrove_double_slab": { + "runtime_id": -499, + "component_based": false + }, + "minecraft:mangrove_fence": { + "runtime_id": -491, + "component_based": false + }, + "minecraft:mangrove_fence_gate": { + "runtime_id": -492, + "component_based": false + }, + "minecraft:mangrove_hanging_sign": { + "runtime_id": -508, + "component_based": false + }, + "minecraft:mangrove_leaves": { + "runtime_id": -472, + "component_based": false + }, + "minecraft:mangrove_log": { + "runtime_id": -484, + "component_based": false + }, + "minecraft:mangrove_planks": { + "runtime_id": -486, + "component_based": false + }, + "minecraft:mangrove_pressure_plate": { + "runtime_id": -490, + "component_based": false + }, + "minecraft:mangrove_propagule": { + "runtime_id": -474, + "component_based": false + }, + "minecraft:mangrove_roots": { + "runtime_id": -482, + "component_based": false + }, + "minecraft:mangrove_sign": { + "runtime_id": 653, + "component_based": false + }, + "minecraft:mangrove_slab": { + "runtime_id": -489, + "component_based": false + }, + "minecraft:mangrove_stairs": { + "runtime_id": -488, + "component_based": false + }, + "minecraft:mangrove_standing_sign": { + "runtime_id": -494, + "component_based": false + }, + "minecraft:mangrove_trapdoor": { + "runtime_id": -496, + "component_based": false + }, + "minecraft:mangrove_wall_sign": { + "runtime_id": -495, + "component_based": false + }, + "minecraft:mangrove_wood": { + "runtime_id": -497, + "component_based": false + }, + "minecraft:medicine": { + "runtime_id": 618, + "component_based": false + }, + "minecraft:medium_amethyst_bud": { + "runtime_id": -331, + "component_based": false + }, + "minecraft:melon_block": { + "runtime_id": 103, + "component_based": false + }, + "minecraft:melon_seeds": { + "runtime_id": 297, + "component_based": false + }, + "minecraft:melon_slice": { + "runtime_id": 276, + "component_based": false + }, + "minecraft:melon_stem": { + "runtime_id": 105, + "component_based": false + }, + "minecraft:milk_bucket": { + "runtime_id": 368, + "component_based": false + }, + "minecraft:minecart": { + "runtime_id": 377, + "component_based": false + }, + "minecraft:miner_pottery_sherd": { + "runtime_id": 689, + "component_based": false + }, + "minecraft:mob_spawner": { + "runtime_id": 52, + "component_based": false + }, + "minecraft:mojang_banner_pattern": { + "runtime_id": 600, + "component_based": false + }, + "minecraft:monster_egg": { + "runtime_id": 97, + "component_based": false + }, + "minecraft:mooshroom_spawn_egg": { + "runtime_id": 449, + "component_based": false + }, + "minecraft:moss_block": { + "runtime_id": -320, + "component_based": false + }, + "minecraft:moss_carpet": { + "runtime_id": -335, + "component_based": false + }, + "minecraft:mossy_cobblestone": { + "runtime_id": 48, + "component_based": false + }, + "minecraft:mossy_cobblestone_stairs": { + "runtime_id": -179, + "component_based": false + }, + "minecraft:mossy_stone_brick_stairs": { + "runtime_id": -175, + "component_based": false + }, + "minecraft:mourner_pottery_sherd": { + "runtime_id": 690, + "component_based": false + }, + "minecraft:moving_block": { + "runtime_id": 250, + "component_based": false + }, + "minecraft:mud": { + "runtime_id": -473, + "component_based": false + }, + "minecraft:mud_brick_double_slab": { + "runtime_id": -479, + "component_based": false + }, + "minecraft:mud_brick_slab": { + "runtime_id": -478, + "component_based": false + }, + "minecraft:mud_brick_stairs": { + "runtime_id": -480, + "component_based": false + }, + "minecraft:mud_brick_wall": { + "runtime_id": -481, + "component_based": false + }, + "minecraft:mud_bricks": { + "runtime_id": -475, + "component_based": false + }, + "minecraft:muddy_mangrove_roots": { + "runtime_id": -483, + "component_based": false + }, + "minecraft:mule_spawn_egg": { + "runtime_id": 476, + "component_based": false + }, + "minecraft:mushroom_stew": { + "runtime_id": 264, + "component_based": false + }, + "minecraft:music_disc_11": { + "runtime_id": 560, + "component_based": true + }, + "minecraft:music_disc_13": { + "runtime_id": 550, + "component_based": true + }, + "minecraft:music_disc_5": { + "runtime_id": 655, + "component_based": true + }, + "minecraft:music_disc_blocks": { + "runtime_id": 552, + "component_based": true + }, + "minecraft:music_disc_cat": { + "runtime_id": 551, + "component_based": true + }, + "minecraft:music_disc_chirp": { + "runtime_id": 553, + "component_based": true + }, + "minecraft:music_disc_creator": { + "runtime_id": 749, + "component_based": true + }, + "minecraft:music_disc_creator_music_box": { + "runtime_id": 750, + "component_based": true + }, + "minecraft:music_disc_far": { + "runtime_id": 554, + "component_based": true + }, + "minecraft:music_disc_mall": { + "runtime_id": 555, + "component_based": true + }, + "minecraft:music_disc_mellohi": { + "runtime_id": 556, + "component_based": true + }, + "minecraft:music_disc_otherside": { + "runtime_id": 645, + "component_based": true + }, + "minecraft:music_disc_pigstep": { + "runtime_id": 639, + "component_based": true + }, + "minecraft:music_disc_precipice": { + "runtime_id": 751, + "component_based": true + }, + "minecraft:music_disc_relic": { + "runtime_id": 718, + "component_based": true + }, + "minecraft:music_disc_stal": { + "runtime_id": 557, + "component_based": true + }, + "minecraft:music_disc_strad": { + "runtime_id": 558, + "component_based": true + }, + "minecraft:music_disc_wait": { + "runtime_id": 561, + "component_based": true + }, + "minecraft:music_disc_ward": { + "runtime_id": 559, + "component_based": true + }, + "minecraft:mutton": { + "runtime_id": 566, + "component_based": false + }, + "minecraft:mycelium": { + "runtime_id": 110, + "component_based": false + }, + "minecraft:name_tag": { + "runtime_id": 564, + "component_based": false + }, + "minecraft:nautilus_shell": { + "runtime_id": 586, + "component_based": false + }, + "minecraft:nether_brick": { + "runtime_id": 112, + "component_based": false + }, + "minecraft:nether_brick_fence": { + "runtime_id": 113, + "component_based": false + }, + "minecraft:nether_brick_slab": { + "runtime_id": -877, + "component_based": false + }, + "minecraft:nether_brick_stairs": { + "runtime_id": 114, + "component_based": false + }, + "minecraft:nether_gold_ore": { + "runtime_id": -288, + "component_based": false + }, + "minecraft:nether_sprouts": { + "runtime_id": 640, + "component_based": true + }, + "minecraft:nether_star": { + "runtime_id": 534, + "component_based": false + }, + "minecraft:nether_wart": { + "runtime_id": 298, + "component_based": false + }, + "minecraft:nether_wart_block": { + "runtime_id": 214, + "component_based": false + }, + "minecraft:netherbrick": { + "runtime_id": 539, + "component_based": false + }, + "minecraft:netherite_axe": { + "runtime_id": 625, + "component_based": false + }, + "minecraft:netherite_block": { + "runtime_id": -270, + "component_based": false + }, + "minecraft:netherite_boots": { + "runtime_id": 631, + "component_based": false + }, + "minecraft:netherite_chestplate": { + "runtime_id": 629, + "component_based": false + }, + "minecraft:netherite_helmet": { + "runtime_id": 628, + "component_based": false + }, + "minecraft:netherite_hoe": { + "runtime_id": 626, + "component_based": false + }, + "minecraft:netherite_ingot": { + "runtime_id": 627, + "component_based": false + }, + "minecraft:netherite_leggings": { + "runtime_id": 630, + "component_based": false + }, + "minecraft:netherite_pickaxe": { + "runtime_id": 624, + "component_based": false + }, + "minecraft:netherite_scrap": { + "runtime_id": 632, + "component_based": false + }, + "minecraft:netherite_shovel": { + "runtime_id": 623, + "component_based": false + }, + "minecraft:netherite_sword": { + "runtime_id": 622, + "component_based": false + }, + "minecraft:netherite_upgrade_smithing_template": { + "runtime_id": 699, + "component_based": false + }, + "minecraft:netherrack": { + "runtime_id": 87, + "component_based": false + }, + "minecraft:netherreactor": { + "runtime_id": 247, + "component_based": false + }, + "minecraft:normal_stone_stairs": { + "runtime_id": -180, + "component_based": false + }, + "minecraft:noteblock": { + "runtime_id": 25, + "component_based": false + }, + "minecraft:npc_spawn_egg": { + "runtime_id": 480, + "component_based": false + }, + "minecraft:oak_boat": { + "runtime_id": 383, + "component_based": false + }, + "minecraft:oak_chest_boat": { + "runtime_id": 657, + "component_based": false + }, + "minecraft:oak_double_slab": { + "runtime_id": 157, + "component_based": false + }, + "minecraft:oak_fence": { + "runtime_id": 85, + "component_based": false + }, + "minecraft:oak_hanging_sign": { + "runtime_id": -500, + "component_based": false + }, + "minecraft:oak_leaves": { + "runtime_id": 18, + "component_based": false + }, + "minecraft:oak_log": { + "runtime_id": 17, + "component_based": false + }, + "minecraft:oak_planks": { + "runtime_id": 5, + "component_based": false + }, + "minecraft:oak_sapling": { + "runtime_id": 6, + "component_based": false + }, + "minecraft:oak_sign": { + "runtime_id": 365, + "component_based": false + }, + "minecraft:oak_slab": { + "runtime_id": 158, + "component_based": false + }, + "minecraft:oak_stairs": { + "runtime_id": 53, + "component_based": false + }, + "minecraft:oak_wood": { + "runtime_id": -212, + "component_based": false + }, + "minecraft:observer": { + "runtime_id": 251, + "component_based": false + }, + "minecraft:obsidian": { + "runtime_id": 49, + "component_based": false + }, + "minecraft:ocelot_spawn_egg": { + "runtime_id": 460, + "component_based": false + }, + "minecraft:ochre_froglight": { + "runtime_id": -471, + "component_based": false + }, + "minecraft:ominous_bottle": { + "runtime_id": 611, + "component_based": false + }, + "minecraft:ominous_trial_key": { + "runtime_id": 259, + "component_based": true + }, + "minecraft:orange_candle": { + "runtime_id": -414, + "component_based": false + }, + "minecraft:orange_candle_cake": { + "runtime_id": -431, + "component_based": false + }, + "minecraft:orange_carpet": { + "runtime_id": -597, + "component_based": false + }, + "minecraft:orange_concrete": { + "runtime_id": -628, + "component_based": false + }, + "minecraft:orange_concrete_powder": { + "runtime_id": -709, + "component_based": false + }, + "minecraft:orange_dye": { + "runtime_id": 417, + "component_based": false + }, + "minecraft:orange_glazed_terracotta": { + "runtime_id": 221, + "component_based": false + }, + "minecraft:orange_shulker_box": { + "runtime_id": -613, + "component_based": false + }, + "minecraft:orange_stained_glass": { + "runtime_id": -673, + "component_based": false + }, + "minecraft:orange_stained_glass_pane": { + "runtime_id": -643, + "component_based": false + }, + "minecraft:orange_terracotta": { + "runtime_id": -724, + "component_based": false + }, + "minecraft:orange_tulip": { + "runtime_id": -834, + "component_based": false + }, + "minecraft:orange_wool": { + "runtime_id": -557, + "component_based": false + }, + "minecraft:oxeye_daisy": { + "runtime_id": -837, + "component_based": false + }, + "minecraft:oxidized_chiseled_copper": { + "runtime_id": -763, + "component_based": false + }, + "minecraft:oxidized_copper": { + "runtime_id": -343, + "component_based": false + }, + "minecraft:oxidized_copper_bulb": { + "runtime_id": -779, + "component_based": false + }, + "minecraft:oxidized_copper_door": { + "runtime_id": -787, + "component_based": false + }, + "minecraft:oxidized_copper_grate": { + "runtime_id": -771, + "component_based": false + }, + "minecraft:oxidized_copper_trapdoor": { + "runtime_id": -795, + "component_based": false + }, + "minecraft:oxidized_cut_copper": { + "runtime_id": -350, + "component_based": false + }, + "minecraft:oxidized_cut_copper_slab": { + "runtime_id": -364, + "component_based": false + }, + "minecraft:oxidized_cut_copper_stairs": { + "runtime_id": -357, + "component_based": false + }, + "minecraft:oxidized_double_cut_copper_slab": { + "runtime_id": -371, + "component_based": false + }, + "minecraft:packed_ice": { + "runtime_id": 174, + "component_based": false + }, + "minecraft:packed_mud": { + "runtime_id": -477, + "component_based": false + }, + "minecraft:painting": { + "runtime_id": 364, + "component_based": false + }, + "minecraft:panda_spawn_egg": { + "runtime_id": 499, + "component_based": false + }, + "minecraft:paper": { + "runtime_id": 394, + "component_based": false + }, + "minecraft:parrot_spawn_egg": { + "runtime_id": 488, + "component_based": false + }, + "minecraft:pearlescent_froglight": { + "runtime_id": -469, + "component_based": false + }, + "minecraft:peony": { + "runtime_id": -867, + "component_based": false + }, + "minecraft:petrified_oak_slab": { + "runtime_id": -902, + "component_based": false + }, + "minecraft:phantom_membrane": { + "runtime_id": 590, + "component_based": false + }, + "minecraft:phantom_spawn_egg": { + "runtime_id": 496, + "component_based": false + }, + "minecraft:pig_spawn_egg": { + "runtime_id": 446, + "component_based": false + }, + "minecraft:piglin_banner_pattern": { + "runtime_id": 603, + "component_based": false + }, + "minecraft:piglin_brute_spawn_egg": { + "runtime_id": 509, + "component_based": false + }, + "minecraft:piglin_spawn_egg": { + "runtime_id": 507, + "component_based": false + }, + "minecraft:pillager_spawn_egg": { + "runtime_id": 501, + "component_based": false + }, + "minecraft:pink_candle": { + "runtime_id": -419, + "component_based": false + }, + "minecraft:pink_candle_cake": { + "runtime_id": -436, + "component_based": false + }, + "minecraft:pink_carpet": { + "runtime_id": -602, + "component_based": false + }, + "minecraft:pink_concrete": { + "runtime_id": -633, + "component_based": false + }, + "minecraft:pink_concrete_powder": { + "runtime_id": -714, + "component_based": false + }, + "minecraft:pink_dye": { + "runtime_id": 412, + "component_based": false + }, + "minecraft:pink_glazed_terracotta": { + "runtime_id": 226, + "component_based": false + }, + "minecraft:pink_petals": { + "runtime_id": -549, + "component_based": false + }, + "minecraft:pink_shulker_box": { + "runtime_id": -618, + "component_based": false + }, + "minecraft:pink_stained_glass": { + "runtime_id": -678, + "component_based": false + }, + "minecraft:pink_stained_glass_pane": { + "runtime_id": -648, + "component_based": false + }, + "minecraft:pink_terracotta": { + "runtime_id": -729, + "component_based": false + }, + "minecraft:pink_tulip": { + "runtime_id": -836, + "component_based": false + }, + "minecraft:pink_wool": { + "runtime_id": -566, + "component_based": false + }, + "minecraft:piston": { + "runtime_id": 33, + "component_based": false + }, + "minecraft:piston_arm_collision": { + "runtime_id": 34, + "component_based": false + }, + "minecraft:pitcher_crop": { + "runtime_id": -574, + "component_based": false + }, + "minecraft:pitcher_plant": { + "runtime_id": -612, + "component_based": false + }, + "minecraft:pitcher_pod": { + "runtime_id": 301, + "component_based": false + }, + "minecraft:planks": { + "runtime_id": 739, + "component_based": false + }, + "minecraft:plenty_pottery_sherd": { + "runtime_id": 691, + "component_based": false + }, + "minecraft:podzol": { + "runtime_id": 243, + "component_based": false + }, + "minecraft:pointed_dripstone": { + "runtime_id": -308, + "component_based": false + }, + "minecraft:poisonous_potato": { + "runtime_id": 286, + "component_based": false + }, + "minecraft:polar_bear_spawn_egg": { + "runtime_id": 482, + "component_based": false + }, + "minecraft:polished_andesite": { + "runtime_id": -595, + "component_based": false + }, + "minecraft:polished_andesite_stairs": { + "runtime_id": -174, + "component_based": false + }, + "minecraft:polished_basalt": { + "runtime_id": -235, + "component_based": false + }, + "minecraft:polished_blackstone": { + "runtime_id": -291, + "component_based": false + }, + "minecraft:polished_blackstone_brick_double_slab": { + "runtime_id": -285, + "component_based": false + }, + "minecraft:polished_blackstone_brick_slab": { + "runtime_id": -284, + "component_based": false + }, + "minecraft:polished_blackstone_brick_stairs": { + "runtime_id": -275, + "component_based": false + }, + "minecraft:polished_blackstone_brick_wall": { + "runtime_id": -278, + "component_based": false + }, + "minecraft:polished_blackstone_bricks": { + "runtime_id": -274, + "component_based": false + }, + "minecraft:polished_blackstone_button": { + "runtime_id": -296, + "component_based": false + }, + "minecraft:polished_blackstone_double_slab": { + "runtime_id": -294, + "component_based": false + }, + "minecraft:polished_blackstone_pressure_plate": { + "runtime_id": -295, + "component_based": false + }, + "minecraft:polished_blackstone_slab": { + "runtime_id": -293, + "component_based": false + }, + "minecraft:polished_blackstone_stairs": { + "runtime_id": -292, + "component_based": false + }, + "minecraft:polished_blackstone_wall": { + "runtime_id": -297, + "component_based": false + }, + "minecraft:polished_deepslate": { + "runtime_id": -383, + "component_based": false + }, + "minecraft:polished_deepslate_double_slab": { + "runtime_id": -397, + "component_based": false + }, + "minecraft:polished_deepslate_slab": { + "runtime_id": -384, + "component_based": false + }, + "minecraft:polished_deepslate_stairs": { + "runtime_id": -385, + "component_based": false + }, + "minecraft:polished_deepslate_wall": { + "runtime_id": -386, + "component_based": false + }, + "minecraft:polished_diorite": { + "runtime_id": -593, + "component_based": false + }, + "minecraft:polished_diorite_stairs": { + "runtime_id": -173, + "component_based": false + }, + "minecraft:polished_granite": { + "runtime_id": -591, + "component_based": false + }, + "minecraft:polished_granite_stairs": { + "runtime_id": -172, + "component_based": false + }, + "minecraft:polished_tuff": { + "runtime_id": -748, + "component_based": false + }, + "minecraft:polished_tuff_double_slab": { + "runtime_id": -750, + "component_based": false + }, + "minecraft:polished_tuff_slab": { + "runtime_id": -749, + "component_based": false + }, + "minecraft:polished_tuff_stairs": { + "runtime_id": -751, + "component_based": false + }, + "minecraft:polished_tuff_wall": { + "runtime_id": -752, + "component_based": false + }, + "minecraft:popped_chorus_fruit": { + "runtime_id": 575, + "component_based": false + }, + "minecraft:poppy": { + "runtime_id": 38, + "component_based": false + }, + "minecraft:porkchop": { + "runtime_id": 266, + "component_based": false + }, + "minecraft:portal": { + "runtime_id": 90, + "component_based": false + }, + "minecraft:potato": { + "runtime_id": 284, + "component_based": false + }, + "minecraft:potatoes": { + "runtime_id": 142, + "component_based": false + }, + "minecraft:potion": { + "runtime_id": 435, + "component_based": false + }, + "minecraft:powder_snow": { + "runtime_id": -306, + "component_based": false + }, + "minecraft:powder_snow_bucket": { + "runtime_id": 375, + "component_based": false + }, + "minecraft:powered_comparator": { + "runtime_id": 150, + "component_based": false + }, + "minecraft:powered_repeater": { + "runtime_id": 94, + "component_based": false + }, + "minecraft:prismarine": { + "runtime_id": 168, + "component_based": false + }, + "minecraft:prismarine_bricks_stairs": { + "runtime_id": -4, + "component_based": false + }, + "minecraft:prismarine_crystals": { + "runtime_id": 565, + "component_based": false + }, + "minecraft:prismarine_shard": { + "runtime_id": 581, + "component_based": false + }, + "minecraft:prismarine_stairs": { + "runtime_id": -2, + "component_based": false + }, + "minecraft:prize_pottery_sherd": { + "runtime_id": 692, + "component_based": false + }, + "minecraft:pufferfish": { + "runtime_id": 271, + "component_based": false + }, + "minecraft:pufferfish_bucket": { + "runtime_id": 374, + "component_based": false + }, + "minecraft:pufferfish_spawn_egg": { + "runtime_id": 491, + "component_based": false + }, + "minecraft:pumpkin": { + "runtime_id": 86, + "component_based": false + }, + "minecraft:pumpkin_pie": { + "runtime_id": 288, + "component_based": false + }, + "minecraft:pumpkin_seeds": { + "runtime_id": 296, + "component_based": false + }, + "minecraft:pumpkin_stem": { + "runtime_id": 104, + "component_based": false + }, + "minecraft:purple_candle": { + "runtime_id": -423, + "component_based": false + }, + "minecraft:purple_candle_cake": { + "runtime_id": -440, + "component_based": false + }, + "minecraft:purple_carpet": { + "runtime_id": -606, + "component_based": false + }, + "minecraft:purple_concrete": { + "runtime_id": -637, + "component_based": false + }, + "minecraft:purple_concrete_powder": { + "runtime_id": -718, + "component_based": false + }, + "minecraft:purple_dye": { + "runtime_id": 408, + "component_based": false + }, + "minecraft:purple_glazed_terracotta": { + "runtime_id": 219, + "component_based": false + }, + "minecraft:purple_shulker_box": { + "runtime_id": -622, + "component_based": false + }, + "minecraft:purple_stained_glass": { + "runtime_id": -682, + "component_based": false + }, + "minecraft:purple_stained_glass_pane": { + "runtime_id": -652, + "component_based": false + }, + "minecraft:purple_terracotta": { + "runtime_id": -733, + "component_based": false + }, + "minecraft:purple_wool": { + "runtime_id": -564, + "component_based": false + }, + "minecraft:purpur_block": { + "runtime_id": 201, + "component_based": false + }, + "minecraft:purpur_stairs": { + "runtime_id": 203, + "component_based": false + }, + "minecraft:quartz": { + "runtime_id": 540, + "component_based": false + }, + "minecraft:quartz_block": { + "runtime_id": 155, + "component_based": false + }, + "minecraft:quartz_bricks": { + "runtime_id": -304, + "component_based": false + }, + "minecraft:quartz_ore": { + "runtime_id": 153, + "component_based": false + }, + "minecraft:quartz_slab": { + "runtime_id": -876, + "component_based": false + }, + "minecraft:quartz_stairs": { + "runtime_id": 156, + "component_based": false + }, + "minecraft:rabbit": { + "runtime_id": 292, + "component_based": false + }, + "minecraft:rabbit_foot": { + "runtime_id": 544, + "component_based": false + }, + "minecraft:rabbit_hide": { + "runtime_id": 545, + "component_based": false + }, + "minecraft:rabbit_spawn_egg": { + "runtime_id": 468, + "component_based": false + }, + "minecraft:rabbit_stew": { + "runtime_id": 294, + "component_based": false + }, + "minecraft:rail": { + "runtime_id": 66, + "component_based": false + }, + "minecraft:raiser_armor_trim_smithing_template": { + "runtime_id": 713, + "component_based": false + }, + "minecraft:rapid_fertilizer": { + "runtime_id": 616, + "component_based": false + }, + "minecraft:ravager_spawn_egg": { + "runtime_id": 503, + "component_based": false + }, + "minecraft:raw_copper": { + "runtime_id": 523, + "component_based": false + }, + "minecraft:raw_copper_block": { + "runtime_id": -452, + "component_based": false + }, + "minecraft:raw_gold": { + "runtime_id": 522, + "component_based": false + }, + "minecraft:raw_gold_block": { + "runtime_id": -453, + "component_based": false + }, + "minecraft:raw_iron": { + "runtime_id": 521, + "component_based": false + }, + "minecraft:raw_iron_block": { + "runtime_id": -451, + "component_based": false + }, + "minecraft:recovery_compass": { + "runtime_id": 665, + "component_based": false + }, + "minecraft:red_candle": { + "runtime_id": -427, + "component_based": false + }, + "minecraft:red_candle_cake": { + "runtime_id": -444, + "component_based": false + }, + "minecraft:red_carpet": { + "runtime_id": -610, + "component_based": false + }, + "minecraft:red_concrete": { + "runtime_id": -641, + "component_based": false + }, + "minecraft:red_concrete_powder": { + "runtime_id": -722, + "component_based": false + }, + "minecraft:red_dye": { + "runtime_id": 404, + "component_based": false + }, + "minecraft:red_flower": { + "runtime_id": 737, + "component_based": false + }, + "minecraft:red_glazed_terracotta": { + "runtime_id": 234, + "component_based": false + }, + "minecraft:red_mushroom": { + "runtime_id": 40, + "component_based": false + }, + "minecraft:red_mushroom_block": { + "runtime_id": 100, + "component_based": false + }, + "minecraft:red_nether_brick": { + "runtime_id": 215, + "component_based": false + }, + "minecraft:red_nether_brick_stairs": { + "runtime_id": -184, + "component_based": false + }, + "minecraft:red_sandstone": { + "runtime_id": 179, + "component_based": false + }, + "minecraft:red_sandstone_stairs": { + "runtime_id": 180, + "component_based": false + }, + "minecraft:red_shulker_box": { + "runtime_id": -626, + "component_based": false + }, + "minecraft:red_stained_glass": { + "runtime_id": -686, + "component_based": false + }, + "minecraft:red_stained_glass_pane": { + "runtime_id": -656, + "component_based": false + }, + "minecraft:red_terracotta": { + "runtime_id": -737, + "component_based": false + }, + "minecraft:red_tulip": { + "runtime_id": -833, + "component_based": false + }, + "minecraft:red_wool": { + "runtime_id": -556, + "component_based": false + }, + "minecraft:redstone": { + "runtime_id": 380, + "component_based": false + }, + "minecraft:redstone_block": { + "runtime_id": 152, + "component_based": false + }, + "minecraft:redstone_lamp": { + "runtime_id": 123, + "component_based": false + }, + "minecraft:redstone_ore": { + "runtime_id": 73, + "component_based": false + }, + "minecraft:redstone_torch": { + "runtime_id": 76, + "component_based": false + }, + "minecraft:redstone_wire": { + "runtime_id": 55, + "component_based": false + }, + "minecraft:reinforced_deepslate": { + "runtime_id": -466, + "component_based": false + }, + "minecraft:repeater": { + "runtime_id": 427, + "component_based": true + }, + "minecraft:repeating_command_block": { + "runtime_id": 188, + "component_based": false + }, + "minecraft:reserved6": { + "runtime_id": 255, + "component_based": false + }, + "minecraft:respawn_anchor": { + "runtime_id": -272, + "component_based": false + }, + "minecraft:rib_armor_trim_smithing_template": { + "runtime_id": 709, + "component_based": false + }, + "minecraft:rose_bush": { + "runtime_id": -866, + "component_based": false + }, + "minecraft:rotten_flesh": { + "runtime_id": 281, + "component_based": false + }, + "minecraft:saddle": { + "runtime_id": 378, + "component_based": false + }, + "minecraft:salmon": { + "runtime_id": 269, + "component_based": false + }, + "minecraft:salmon_bucket": { + "runtime_id": 372, + "component_based": false + }, + "minecraft:salmon_spawn_egg": { + "runtime_id": 492, + "component_based": false + }, + "minecraft:sand": { + "runtime_id": 12, + "component_based": false + }, + "minecraft:sandstone": { + "runtime_id": 24, + "component_based": false + }, + "minecraft:sandstone_slab": { + "runtime_id": -872, + "component_based": false + }, + "minecraft:sandstone_stairs": { + "runtime_id": 128, + "component_based": false + }, + "minecraft:sapling": { + "runtime_id": 732, + "component_based": false + }, + "minecraft:scaffolding": { + "runtime_id": -165, + "component_based": false + }, + "minecraft:scrape_pottery_sherd": { + "runtime_id": 693, + "component_based": false + }, + "minecraft:sculk": { + "runtime_id": -458, + "component_based": false + }, + "minecraft:sculk_catalyst": { + "runtime_id": -460, + "component_based": false + }, + "minecraft:sculk_sensor": { + "runtime_id": -307, + "component_based": false + }, + "minecraft:sculk_shrieker": { + "runtime_id": -461, + "component_based": false + }, + "minecraft:sculk_vein": { + "runtime_id": -459, + "component_based": false + }, + "minecraft:sea_lantern": { + "runtime_id": 169, + "component_based": false + }, + "minecraft:sea_pickle": { + "runtime_id": -156, + "component_based": false + }, + "minecraft:seagrass": { + "runtime_id": -130, + "component_based": false + }, + "minecraft:sentry_armor_trim_smithing_template": { + "runtime_id": 700, + "component_based": false + }, + "minecraft:shaper_armor_trim_smithing_template": { + "runtime_id": 714, + "component_based": false + }, + "minecraft:sheaf_pottery_sherd": { + "runtime_id": 694, + "component_based": false + }, + "minecraft:shears": { + "runtime_id": 429, + "component_based": false + }, + "minecraft:sheep_spawn_egg": { + "runtime_id": 447, + "component_based": false + }, + "minecraft:shelter_pottery_sherd": { + "runtime_id": 695, + "component_based": false + }, + "minecraft:shield": { + "runtime_id": 362, + "component_based": false + }, + "minecraft:short_grass": { + "runtime_id": 31, + "component_based": false + }, + "minecraft:shroomlight": { + "runtime_id": -230, + "component_based": false + }, + "minecraft:shulker_box": { + "runtime_id": 747, + "component_based": false + }, + "minecraft:shulker_shell": { + "runtime_id": 582, + "component_based": false + }, + "minecraft:shulker_spawn_egg": { + "runtime_id": 479, + "component_based": false + }, + "minecraft:silence_armor_trim_smithing_template": { + "runtime_id": 711, + "component_based": false + }, + "minecraft:silver_glazed_terracotta": { + "runtime_id": 228, + "component_based": false + }, + "minecraft:silverfish_spawn_egg": { + "runtime_id": 452, + "component_based": false + }, + "minecraft:skeleton_horse_spawn_egg": { + "runtime_id": 477, + "component_based": false + }, + "minecraft:skeleton_spawn_egg": { + "runtime_id": 453, + "component_based": false + }, + "minecraft:skull": { + "runtime_id": 532, + "component_based": false + }, + "minecraft:skull_banner_pattern": { + "runtime_id": 599, + "component_based": false + }, + "minecraft:skull_pottery_sherd": { + "runtime_id": 696, + "component_based": false + }, + "minecraft:slime": { + "runtime_id": 165, + "component_based": false + }, + "minecraft:slime_ball": { + "runtime_id": 396, + "component_based": false + }, + "minecraft:slime_spawn_egg": { + "runtime_id": 454, + "component_based": false + }, + "minecraft:small_amethyst_bud": { + "runtime_id": -332, + "component_based": false + }, + "minecraft:small_dripleaf_block": { + "runtime_id": -336, + "component_based": false + }, + "minecraft:smithing_table": { + "runtime_id": -202, + "component_based": false + }, + "minecraft:smoker": { + "runtime_id": -198, + "component_based": false + }, + "minecraft:smooth_basalt": { + "runtime_id": -377, + "component_based": false + }, + "minecraft:smooth_quartz_stairs": { + "runtime_id": -185, + "component_based": false + }, + "minecraft:smooth_red_sandstone_stairs": { + "runtime_id": -176, + "component_based": false + }, + "minecraft:smooth_sandstone_stairs": { + "runtime_id": -177, + "component_based": false + }, + "minecraft:smooth_stone": { + "runtime_id": -183, + "component_based": false + }, + "minecraft:smooth_stone_slab": { + "runtime_id": 44, + "component_based": false + }, + "minecraft:sniffer_egg": { + "runtime_id": -596, + "component_based": false + }, + "minecraft:sniffer_spawn_egg": { + "runtime_id": 510, + "component_based": false + }, + "minecraft:snort_pottery_sherd": { + "runtime_id": 697, + "component_based": false + }, + "minecraft:snout_armor_trim_smithing_template": { + "runtime_id": 708, + "component_based": false + }, + "minecraft:snow": { + "runtime_id": 80, + "component_based": false + }, + "minecraft:snow_golem_spawn_egg": { + "runtime_id": 516, + "component_based": false + }, + "minecraft:snow_layer": { + "runtime_id": 78, + "component_based": false + }, + "minecraft:snowball": { + "runtime_id": 381, + "component_based": true + }, + "minecraft:soul_campfire": { + "runtime_id": 641, + "component_based": true + }, + "minecraft:soul_fire": { + "runtime_id": -237, + "component_based": false + }, + "minecraft:soul_lantern": { + "runtime_id": -269, + "component_based": false + }, + "minecraft:soul_sand": { + "runtime_id": 88, + "component_based": false + }, + "minecraft:soul_soil": { + "runtime_id": -236, + "component_based": false + }, + "minecraft:soul_torch": { + "runtime_id": -268, + "component_based": false + }, + "minecraft:sparkler": { + "runtime_id": 619, + "component_based": false + }, + "minecraft:spawn_egg": { + "runtime_id": 757, + "component_based": false + }, + "minecraft:spider_eye": { + "runtime_id": 282, + "component_based": false + }, + "minecraft:spider_spawn_egg": { + "runtime_id": 455, + "component_based": false + }, + "minecraft:spire_armor_trim_smithing_template": { + "runtime_id": 710, + "component_based": false + }, + "minecraft:splash_potion": { + "runtime_id": 577, + "component_based": false + }, + "minecraft:sponge": { + "runtime_id": 19, + "component_based": false + }, + "minecraft:spore_blossom": { + "runtime_id": -321, + "component_based": false + }, + "minecraft:spruce_boat": { + "runtime_id": 386, + "component_based": false + }, + "minecraft:spruce_button": { + "runtime_id": -144, + "component_based": false + }, + "minecraft:spruce_chest_boat": { + "runtime_id": 660, + "component_based": false + }, + "minecraft:spruce_door": { + "runtime_id": 569, + "component_based": false + }, + "minecraft:spruce_double_slab": { + "runtime_id": -809, + "component_based": false + }, + "minecraft:spruce_fence": { + "runtime_id": -579, + "component_based": false + }, + "minecraft:spruce_fence_gate": { + "runtime_id": 183, + "component_based": false + }, + "minecraft:spruce_hanging_sign": { + "runtime_id": -501, + "component_based": false + }, + "minecraft:spruce_leaves": { + "runtime_id": -800, + "component_based": false + }, + "minecraft:spruce_log": { + "runtime_id": -569, + "component_based": false + }, + "minecraft:spruce_planks": { + "runtime_id": -739, + "component_based": false + }, + "minecraft:spruce_pressure_plate": { + "runtime_id": -154, + "component_based": false + }, + "minecraft:spruce_sapling": { + "runtime_id": -825, + "component_based": false + }, + "minecraft:spruce_sign": { + "runtime_id": 592, + "component_based": false + }, + "minecraft:spruce_slab": { + "runtime_id": -804, + "component_based": false + }, + "minecraft:spruce_stairs": { + "runtime_id": 134, + "component_based": false + }, + "minecraft:spruce_standing_sign": { + "runtime_id": -181, + "component_based": false + }, + "minecraft:spruce_trapdoor": { + "runtime_id": -149, + "component_based": false + }, + "minecraft:spruce_wall_sign": { + "runtime_id": -182, + "component_based": false + }, + "minecraft:spruce_wood": { + "runtime_id": -814, + "component_based": false + }, + "minecraft:spyglass": { + "runtime_id": 644, + "component_based": false + }, + "minecraft:squid_spawn_egg": { + "runtime_id": 459, + "component_based": false + }, + "minecraft:stained_glass": { + "runtime_id": 745, + "component_based": false + }, + "minecraft:stained_glass_pane": { + "runtime_id": 746, + "component_based": false + }, + "minecraft:stained_hardened_clay": { + "runtime_id": 719, + "component_based": false + }, + "minecraft:standing_banner": { + "runtime_id": 176, + "component_based": false + }, + "minecraft:standing_sign": { + "runtime_id": 63, + "component_based": false + }, + "minecraft:stick": { + "runtime_id": 327, + "component_based": false + }, + "minecraft:sticky_piston": { + "runtime_id": 29, + "component_based": false + }, + "minecraft:sticky_piston_arm_collision": { + "runtime_id": -217, + "component_based": false + }, + "minecraft:stone": { + "runtime_id": 1, + "component_based": false + }, + "minecraft:stone_axe": { + "runtime_id": 321, + "component_based": false + }, + "minecraft:stone_block_slab": { + "runtime_id": 736, + "component_based": false + }, + "minecraft:stone_block_slab2": { + "runtime_id": 182, + "component_based": false + }, + "minecraft:stone_block_slab3": { + "runtime_id": -162, + "component_based": false + }, + "minecraft:stone_block_slab4": { + "runtime_id": -166, + "component_based": false + }, + "minecraft:stone_brick_slab": { + "runtime_id": -875, + "component_based": false + }, + "minecraft:stone_brick_stairs": { + "runtime_id": 109, + "component_based": false + }, + "minecraft:stone_button": { + "runtime_id": 77, + "component_based": false + }, + "minecraft:stone_hoe": { + "runtime_id": 337, + "component_based": false + }, + "minecraft:stone_pickaxe": { + "runtime_id": 320, + "component_based": false + }, + "minecraft:stone_pressure_plate": { + "runtime_id": 70, + "component_based": false + }, + "minecraft:stone_shovel": { + "runtime_id": 319, + "component_based": false + }, + "minecraft:stone_stairs": { + "runtime_id": 67, + "component_based": false + }, + "minecraft:stone_sword": { + "runtime_id": 318, + "component_based": false + }, + "minecraft:stonebrick": { + "runtime_id": 98, + "component_based": false + }, + "minecraft:stonecutter": { + "runtime_id": 245, + "component_based": false + }, + "minecraft:stonecutter_block": { + "runtime_id": -197, + "component_based": false + }, + "minecraft:stray_spawn_egg": { + "runtime_id": 471, + "component_based": false + }, + "minecraft:strider_spawn_egg": { + "runtime_id": 505, + "component_based": false + }, + "minecraft:string": { + "runtime_id": 333, + "component_based": true + }, + "minecraft:stripped_acacia_log": { + "runtime_id": -8, + "component_based": false + }, + "minecraft:stripped_acacia_wood": { + "runtime_id": -823, + "component_based": false + }, + "minecraft:stripped_bamboo_block": { + "runtime_id": -528, + "component_based": false + }, + "minecraft:stripped_birch_log": { + "runtime_id": -6, + "component_based": false + }, + "minecraft:stripped_birch_wood": { + "runtime_id": -821, + "component_based": false + }, + "minecraft:stripped_cherry_log": { + "runtime_id": -535, + "component_based": false + }, + "minecraft:stripped_cherry_wood": { + "runtime_id": -545, + "component_based": false + }, + "minecraft:stripped_crimson_hyphae": { + "runtime_id": -300, + "component_based": false + }, + "minecraft:stripped_crimson_stem": { + "runtime_id": -240, + "component_based": false + }, + "minecraft:stripped_dark_oak_log": { + "runtime_id": -9, + "component_based": false + }, + "minecraft:stripped_dark_oak_wood": { + "runtime_id": -824, + "component_based": false + }, + "minecraft:stripped_jungle_log": { + "runtime_id": -7, + "component_based": false + }, + "minecraft:stripped_jungle_wood": { + "runtime_id": -822, + "component_based": false + }, + "minecraft:stripped_mangrove_log": { + "runtime_id": -485, + "component_based": false + }, + "minecraft:stripped_mangrove_wood": { + "runtime_id": -498, + "component_based": false + }, + "minecraft:stripped_oak_log": { + "runtime_id": -10, + "component_based": false + }, + "minecraft:stripped_oak_wood": { + "runtime_id": -819, + "component_based": false + }, + "minecraft:stripped_spruce_log": { + "runtime_id": -5, + "component_based": false + }, + "minecraft:stripped_spruce_wood": { + "runtime_id": -820, + "component_based": false + }, + "minecraft:stripped_warped_hyphae": { + "runtime_id": -301, + "component_based": false + }, + "minecraft:stripped_warped_stem": { + "runtime_id": -241, + "component_based": false + }, + "minecraft:structure_block": { + "runtime_id": 252, + "component_based": false + }, + "minecraft:structure_void": { + "runtime_id": 217, + "component_based": false + }, + "minecraft:sugar": { + "runtime_id": 424, + "component_based": false + }, + "minecraft:sugar_cane": { + "runtime_id": 393, + "component_based": true + }, + "minecraft:sunflower": { + "runtime_id": 175, + "component_based": false + }, + "minecraft:suspicious_gravel": { + "runtime_id": -573, + "component_based": false + }, + "minecraft:suspicious_sand": { + "runtime_id": -529, + "component_based": false + }, + "minecraft:suspicious_stew": { + "runtime_id": 608, + "component_based": false + }, + "minecraft:sweet_berries": { + "runtime_id": 291, + "component_based": false + }, + "minecraft:sweet_berry_bush": { + "runtime_id": -207, + "component_based": false + }, + "minecraft:tadpole_bucket": { + "runtime_id": 649, + "component_based": false + }, + "minecraft:tadpole_spawn_egg": { + "runtime_id": 648, + "component_based": false + }, + "minecraft:tall_grass": { + "runtime_id": -864, + "component_based": false + }, + "minecraft:tallgrass": { + "runtime_id": 741, + "component_based": false + }, + "minecraft:target": { + "runtime_id": -239, + "component_based": false + }, + "minecraft:tide_armor_trim_smithing_template": { + "runtime_id": 707, + "component_based": false + }, + "minecraft:tinted_glass": { + "runtime_id": -334, + "component_based": false + }, + "minecraft:tnt": { + "runtime_id": 46, + "component_based": false + }, + "minecraft:tnt_minecart": { + "runtime_id": 541, + "component_based": false + }, + "minecraft:torch": { + "runtime_id": 50, + "component_based": false + }, + "minecraft:torchflower": { + "runtime_id": -568, + "component_based": false + }, + "minecraft:torchflower_crop": { + "runtime_id": -567, + "component_based": false + }, + "minecraft:torchflower_seeds": { + "runtime_id": 300, + "component_based": false + }, + "minecraft:totem_of_undying": { + "runtime_id": 584, + "component_based": false + }, + "minecraft:trader_llama_spawn_egg": { + "runtime_id": 667, + "component_based": false + }, + "minecraft:trapdoor": { + "runtime_id": 96, + "component_based": false + }, + "minecraft:trapped_chest": { + "runtime_id": 146, + "component_based": false + }, + "minecraft:trial_key": { + "runtime_id": 258, + "component_based": true + }, + "minecraft:trial_spawner": { + "runtime_id": -315, + "component_based": false + }, + "minecraft:trident": { + "runtime_id": 562, + "component_based": false + }, + "minecraft:trip_wire": { + "runtime_id": 132, + "component_based": false + }, + "minecraft:tripwire_hook": { + "runtime_id": 131, + "component_based": false + }, + "minecraft:tropical_fish": { + "runtime_id": 270, + "component_based": false + }, + "minecraft:tropical_fish_bucket": { + "runtime_id": 373, + "component_based": false + }, + "minecraft:tropical_fish_spawn_egg": { + "runtime_id": 489, + "component_based": false + }, + "minecraft:tube_coral": { + "runtime_id": -131, + "component_based": false + }, + "minecraft:tube_coral_block": { + "runtime_id": -132, + "component_based": false + }, + "minecraft:tube_coral_fan": { + "runtime_id": -133, + "component_based": false + }, + "minecraft:tuff": { + "runtime_id": -333, + "component_based": false + }, + "minecraft:tuff_brick_double_slab": { + "runtime_id": -756, + "component_based": false + }, + "minecraft:tuff_brick_slab": { + "runtime_id": -755, + "component_based": false + }, + "minecraft:tuff_brick_stairs": { + "runtime_id": -757, + "component_based": false + }, + "minecraft:tuff_brick_wall": { + "runtime_id": -758, + "component_based": false + }, + "minecraft:tuff_bricks": { + "runtime_id": -754, + "component_based": false + }, + "minecraft:tuff_double_slab": { + "runtime_id": -745, + "component_based": false + }, + "minecraft:tuff_slab": { + "runtime_id": -744, + "component_based": false + }, + "minecraft:tuff_stairs": { + "runtime_id": -746, + "component_based": false + }, + "minecraft:tuff_wall": { + "runtime_id": -747, + "component_based": false + }, + "minecraft:turtle_egg": { + "runtime_id": -159, + "component_based": false + }, + "minecraft:turtle_helmet": { + "runtime_id": 589, + "component_based": false + }, + "minecraft:turtle_scute": { + "runtime_id": 588, + "component_based": false + }, + "minecraft:turtle_spawn_egg": { + "runtime_id": 495, + "component_based": false + }, + "minecraft:twisting_vines": { + "runtime_id": -287, + "component_based": false + }, + "minecraft:underwater_torch": { + "runtime_id": 239, + "component_based": false + }, + "minecraft:undyed_shulker_box": { + "runtime_id": 205, + "component_based": false + }, + "minecraft:unknown": { + "runtime_id": -305, + "component_based": false + }, + "minecraft:unlit_redstone_torch": { + "runtime_id": 75, + "component_based": false + }, + "minecraft:unpowered_comparator": { + "runtime_id": 149, + "component_based": false + }, + "minecraft:unpowered_repeater": { + "runtime_id": 93, + "component_based": false + }, + "minecraft:vault": { + "runtime_id": -314, + "component_based": false + }, + "minecraft:verdant_froglight": { + "runtime_id": -470, + "component_based": false + }, + "minecraft:vex_armor_trim_smithing_template": { + "runtime_id": 706, + "component_based": false + }, + "minecraft:vex_spawn_egg": { + "runtime_id": 486, + "component_based": false + }, + "minecraft:villager_spawn_egg": { + "runtime_id": 458, + "component_based": false + }, + "minecraft:vindicator_spawn_egg": { + "runtime_id": 484, + "component_based": false + }, + "minecraft:vine": { + "runtime_id": 106, + "component_based": false + }, + "minecraft:wall_banner": { + "runtime_id": 177, + "component_based": false + }, + "minecraft:wall_sign": { + "runtime_id": 68, + "component_based": false + }, + "minecraft:wandering_trader_spawn_egg": { + "runtime_id": 502, + "component_based": false + }, + "minecraft:ward_armor_trim_smithing_template": { + "runtime_id": 704, + "component_based": false + }, + "minecraft:warden_spawn_egg": { + "runtime_id": 651, + "component_based": false + }, + "minecraft:warped_button": { + "runtime_id": -261, + "component_based": false + }, + "minecraft:warped_door": { + "runtime_id": 636, + "component_based": false + }, + "minecraft:warped_double_slab": { + "runtime_id": -267, + "component_based": false + }, + "minecraft:warped_fence": { + "runtime_id": -257, + "component_based": false + }, + "minecraft:warped_fence_gate": { + "runtime_id": -259, + "component_based": false + }, + "minecraft:warped_fungus": { + "runtime_id": -229, + "component_based": false + }, + "minecraft:warped_fungus_on_a_stick": { + "runtime_id": 637, + "component_based": true + }, + "minecraft:warped_hanging_sign": { + "runtime_id": -507, + "component_based": false + }, + "minecraft:warped_hyphae": { + "runtime_id": -298, + "component_based": false + }, + "minecraft:warped_nylium": { + "runtime_id": -233, + "component_based": false + }, + "minecraft:warped_planks": { + "runtime_id": -243, + "component_based": false + }, + "minecraft:warped_pressure_plate": { + "runtime_id": -263, + "component_based": false + }, + "minecraft:warped_roots": { + "runtime_id": -224, + "component_based": false + }, + "minecraft:warped_sign": { + "runtime_id": 634, + "component_based": false + }, + "minecraft:warped_slab": { + "runtime_id": -265, + "component_based": false + }, + "minecraft:warped_stairs": { + "runtime_id": -255, + "component_based": false + }, + "minecraft:warped_standing_sign": { + "runtime_id": -251, + "component_based": false + }, + "minecraft:warped_stem": { + "runtime_id": -226, + "component_based": false + }, + "minecraft:warped_trapdoor": { + "runtime_id": -247, + "component_based": false + }, + "minecraft:warped_wall_sign": { + "runtime_id": -253, + "component_based": false + }, + "minecraft:warped_wart_block": { + "runtime_id": -227, + "component_based": false + }, + "minecraft:water": { + "runtime_id": 9, + "component_based": false + }, + "minecraft:water_bucket": { + "runtime_id": 369, + "component_based": false + }, + "minecraft:waterlily": { + "runtime_id": 111, + "component_based": false + }, + "minecraft:waxed_chiseled_copper": { + "runtime_id": -764, + "component_based": false + }, + "minecraft:waxed_copper": { + "runtime_id": -344, + "component_based": false + }, + "minecraft:waxed_copper_bulb": { + "runtime_id": -780, + "component_based": false + }, + "minecraft:waxed_copper_door": { + "runtime_id": -788, + "component_based": false + }, + "minecraft:waxed_copper_grate": { + "runtime_id": -772, + "component_based": false + }, + "minecraft:waxed_copper_trapdoor": { + "runtime_id": -796, + "component_based": false + }, + "minecraft:waxed_cut_copper": { + "runtime_id": -351, + "component_based": false + }, + "minecraft:waxed_cut_copper_slab": { + "runtime_id": -365, + "component_based": false + }, + "minecraft:waxed_cut_copper_stairs": { + "runtime_id": -358, + "component_based": false + }, + "minecraft:waxed_double_cut_copper_slab": { + "runtime_id": -372, + "component_based": false + }, + "minecraft:waxed_exposed_chiseled_copper": { + "runtime_id": -765, + "component_based": false + }, + "minecraft:waxed_exposed_copper": { + "runtime_id": -345, + "component_based": false + }, + "minecraft:waxed_exposed_copper_bulb": { + "runtime_id": -781, + "component_based": false + }, + "minecraft:waxed_exposed_copper_door": { + "runtime_id": -789, + "component_based": false + }, + "minecraft:waxed_exposed_copper_grate": { + "runtime_id": -773, + "component_based": false + }, + "minecraft:waxed_exposed_copper_trapdoor": { + "runtime_id": -797, + "component_based": false + }, + "minecraft:waxed_exposed_cut_copper": { + "runtime_id": -352, + "component_based": false + }, + "minecraft:waxed_exposed_cut_copper_slab": { + "runtime_id": -366, + "component_based": false + }, + "minecraft:waxed_exposed_cut_copper_stairs": { + "runtime_id": -359, + "component_based": false + }, + "minecraft:waxed_exposed_double_cut_copper_slab": { + "runtime_id": -373, + "component_based": false + }, + "minecraft:waxed_oxidized_chiseled_copper": { + "runtime_id": -766, + "component_based": false + }, + "minecraft:waxed_oxidized_copper": { + "runtime_id": -446, + "component_based": false + }, + "minecraft:waxed_oxidized_copper_bulb": { + "runtime_id": -783, + "component_based": false + }, + "minecraft:waxed_oxidized_copper_door": { + "runtime_id": -791, + "component_based": false + }, + "minecraft:waxed_oxidized_copper_grate": { + "runtime_id": -775, + "component_based": false + }, + "minecraft:waxed_oxidized_copper_trapdoor": { + "runtime_id": -799, + "component_based": false + }, + "minecraft:waxed_oxidized_cut_copper": { + "runtime_id": -447, + "component_based": false + }, + "minecraft:waxed_oxidized_cut_copper_slab": { + "runtime_id": -449, + "component_based": false + }, + "minecraft:waxed_oxidized_cut_copper_stairs": { + "runtime_id": -448, + "component_based": false + }, + "minecraft:waxed_oxidized_double_cut_copper_slab": { + "runtime_id": -450, + "component_based": false + }, + "minecraft:waxed_weathered_chiseled_copper": { + "runtime_id": -767, + "component_based": false + }, + "minecraft:waxed_weathered_copper": { + "runtime_id": -346, + "component_based": false + }, + "minecraft:waxed_weathered_copper_bulb": { + "runtime_id": -782, + "component_based": false + }, + "minecraft:waxed_weathered_copper_door": { + "runtime_id": -790, + "component_based": false + }, + "minecraft:waxed_weathered_copper_grate": { + "runtime_id": -774, + "component_based": false + }, + "minecraft:waxed_weathered_copper_trapdoor": { + "runtime_id": -798, + "component_based": false + }, + "minecraft:waxed_weathered_cut_copper": { + "runtime_id": -353, + "component_based": false + }, + "minecraft:waxed_weathered_cut_copper_slab": { + "runtime_id": -367, + "component_based": false + }, + "minecraft:waxed_weathered_cut_copper_stairs": { + "runtime_id": -360, + "component_based": false + }, + "minecraft:waxed_weathered_double_cut_copper_slab": { + "runtime_id": -374, + "component_based": false + }, + "minecraft:wayfinder_armor_trim_smithing_template": { + "runtime_id": 712, + "component_based": false + }, + "minecraft:weathered_chiseled_copper": { + "runtime_id": -762, + "component_based": false + }, + "minecraft:weathered_copper": { + "runtime_id": -342, + "component_based": false + }, + "minecraft:weathered_copper_bulb": { + "runtime_id": -778, + "component_based": false + }, + "minecraft:weathered_copper_door": { + "runtime_id": -786, + "component_based": false + }, + "minecraft:weathered_copper_grate": { + "runtime_id": -770, + "component_based": false + }, + "minecraft:weathered_copper_trapdoor": { + "runtime_id": -794, + "component_based": false + }, + "minecraft:weathered_cut_copper": { + "runtime_id": -349, + "component_based": false + }, + "minecraft:weathered_cut_copper_slab": { + "runtime_id": -363, + "component_based": false + }, + "minecraft:weathered_cut_copper_stairs": { + "runtime_id": -356, + "component_based": false + }, + "minecraft:weathered_double_cut_copper_slab": { + "runtime_id": -370, + "component_based": false + }, + "minecraft:web": { + "runtime_id": 30, + "component_based": false + }, + "minecraft:weeping_vines": { + "runtime_id": -231, + "component_based": false + }, + "minecraft:wheat": { + "runtime_id": 341, + "component_based": false + }, + "minecraft:wheat_seeds": { + "runtime_id": 295, + "component_based": false + }, + "minecraft:white_candle": { + "runtime_id": -413, + "component_based": false + }, + "minecraft:white_candle_cake": { + "runtime_id": -430, + "component_based": false + }, + "minecraft:white_carpet": { + "runtime_id": 171, + "component_based": false + }, + "minecraft:white_concrete": { + "runtime_id": 236, + "component_based": false + }, + "minecraft:white_concrete_powder": { + "runtime_id": 237, + "component_based": false + }, + "minecraft:white_dye": { + "runtime_id": 418, + "component_based": false + }, + "minecraft:white_glazed_terracotta": { + "runtime_id": 220, + "component_based": false + }, + "minecraft:white_shulker_box": { + "runtime_id": 218, + "component_based": false + }, + "minecraft:white_stained_glass": { + "runtime_id": 241, + "component_based": false + }, + "minecraft:white_stained_glass_pane": { + "runtime_id": 160, + "component_based": false + }, + "minecraft:white_terracotta": { + "runtime_id": 159, + "component_based": false + }, + "minecraft:white_tulip": { + "runtime_id": -835, + "component_based": false + }, + "minecraft:white_wool": { + "runtime_id": 35, + "component_based": false + }, + "minecraft:wild_armor_trim_smithing_template": { + "runtime_id": 703, + "component_based": false + }, + "minecraft:wind_charge": { + "runtime_id": 260, + "component_based": true + }, + "minecraft:witch_spawn_egg": { + "runtime_id": 461, + "component_based": false + }, + "minecraft:wither_rose": { + "runtime_id": -216, + "component_based": false + }, + "minecraft:wither_skeleton_spawn_egg": { + "runtime_id": 474, + "component_based": false + }, + "minecraft:wither_spawn_egg": { + "runtime_id": 518, + "component_based": false + }, + "minecraft:wolf_armor": { + "runtime_id": 722, + "component_based": true + }, + "minecraft:wolf_spawn_egg": { + "runtime_id": 448, + "component_based": false + }, + "minecraft:wood": { + "runtime_id": 748, + "component_based": false + }, + "minecraft:wooden_axe": { + "runtime_id": 317, + "component_based": false + }, + "minecraft:wooden_button": { + "runtime_id": 143, + "component_based": false + }, + "minecraft:wooden_door": { + "runtime_id": 366, + "component_based": false + }, + "minecraft:wooden_hoe": { + "runtime_id": 336, + "component_based": false + }, + "minecraft:wooden_pickaxe": { + "runtime_id": 316, + "component_based": false + }, + "minecraft:wooden_pressure_plate": { + "runtime_id": 72, + "component_based": false + }, + "minecraft:wooden_shovel": { + "runtime_id": 315, + "component_based": false + }, + "minecraft:wooden_slab": { + "runtime_id": 735, + "component_based": false + }, + "minecraft:wooden_sword": { + "runtime_id": 314, + "component_based": false + }, + "minecraft:wool": { + "runtime_id": 725, + "component_based": false + }, + "minecraft:writable_book": { + "runtime_id": 526, + "component_based": false + }, + "minecraft:written_book": { + "runtime_id": 527, + "component_based": false + }, + "minecraft:yellow_candle": { + "runtime_id": -417, + "component_based": false + }, + "minecraft:yellow_candle_cake": { + "runtime_id": -434, + "component_based": false + }, + "minecraft:yellow_carpet": { + "runtime_id": -600, + "component_based": false + }, + "minecraft:yellow_concrete": { + "runtime_id": -631, + "component_based": false + }, + "minecraft:yellow_concrete_powder": { + "runtime_id": -712, + "component_based": false + }, + "minecraft:yellow_dye": { + "runtime_id": 414, + "component_based": false + }, + "minecraft:yellow_flower": { + "runtime_id": 37, + "component_based": false + }, + "minecraft:yellow_glazed_terracotta": { + "runtime_id": 224, + "component_based": false + }, + "minecraft:yellow_shulker_box": { + "runtime_id": -616, + "component_based": false + }, + "minecraft:yellow_stained_glass": { + "runtime_id": -676, + "component_based": false + }, + "minecraft:yellow_stained_glass_pane": { + "runtime_id": -646, + "component_based": false + }, + "minecraft:yellow_terracotta": { + "runtime_id": -727, + "component_based": false + }, + "minecraft:yellow_wool": { + "runtime_id": -558, + "component_based": false + }, + "minecraft:zoglin_spawn_egg": { + "runtime_id": 508, + "component_based": false + }, + "minecraft:zombie_horse_spawn_egg": { + "runtime_id": 478, + "component_based": false + }, + "minecraft:zombie_pigman_spawn_egg": { + "runtime_id": 457, + "component_based": false + }, + "minecraft:zombie_spawn_egg": { + "runtime_id": 456, + "component_based": false + }, + "minecraft:zombie_villager_spawn_egg": { + "runtime_id": 487, + "component_based": false + } +} diff --git a/legacyver/legacypacket/add_actor.go b/legacyver/legacypacket/add_actor.go new file mode 100644 index 0000000..a8782f1 --- /dev/null +++ b/legacyver/legacypacket/add_actor.go @@ -0,0 +1,76 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/go-gl/mathgl/mgl32" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// AddActor is sent by the server to the client to spawn an entity to the player. It is used for every entity +// except other players, for which the AddPlayer packet is used. +type AddActor struct { + // EntityUniqueID is the unique ID of the entity. The unique ID is a value that remains consistent across + // different sessions of the same world, but most servers simply fill the runtime ID of the entity out for + // this field. + EntityUniqueID int64 + // EntityRuntimeID is the runtime ID of the entity. The runtime ID is unique for each world session, and + // entities are generally identified in packets using this runtime ID. + EntityRuntimeID uint64 + // EntityType is the string entity type of the entity, for example 'minecraft:skeleton'. A list of these + // entities may be found online. + EntityType string + // Position is the position to spawn the entity on. If the entity is on a distance that the player cannot + // see it, the entity will still show up if the player moves closer. + Position mgl32.Vec3 + // Velocity is the initial velocity the entity spawns with. This velocity will initiate client side + // movement of the entity. + Velocity mgl32.Vec3 + // Pitch is the vertical rotation of the entity. Facing straight forward yields a pitch of 0. Pitch is + // measured in degrees. + Pitch float32 + // Yaw is the horizontal rotation of the entity. Yaw is also measured in degrees. + Yaw float32 + // HeadYaw is the same as Yaw, except that it applies specifically to the head of the entity. A different value for + // HeadYaw than Yaw means that the entity will have its head turned. + HeadYaw float32 + // BodyYaw is the same as Yaw, except that it applies specifically to the body of the entity. A different value for + // BodyYaw than HeadYaw means that the entity will have its body turned, although it is unclear what the difference + // between BodyYaw and Yaw is. + BodyYaw float32 + // Attributes is a slice of attributes that the entity has. It includes attributes such as its health, + // movement speed, etc. + Attributes []protocol.AttributeValue + // EntityMetadata is a map of entity metadata, which includes flags and data properties that alter in + // particular the way the entity looks. Flags include ones such as 'on fire' and 'sprinting'. + // The metadata values are indexed by their property key. + EntityMetadata map[uint32]any + // EntityProperties is a list of properties that the entity inhibits. These properties define and alter specific + // attributes of the entity. + EntityProperties protocol.EntityProperties + // EntityLinks is a list of entity links that are currently active on the entity. These links alter the + // way the entity shows up when first spawned in terms of it shown as riding an entity. Setting these + // links is important for new viewers to see the entity is riding another entity. + EntityLinks []proto.EntityLink +} + +// ID ... +func (*AddActor) ID() uint32 { + return packet.IDAddActor +} + +func (pk *AddActor) Marshal(io protocol.IO) { + io.Varint64(&pk.EntityUniqueID) + io.Varuint64(&pk.EntityRuntimeID) + io.String(&pk.EntityType) + io.Vec3(&pk.Position) + io.Vec3(&pk.Velocity) + io.Float32(&pk.Pitch) + io.Float32(&pk.Yaw) + io.Float32(&pk.HeadYaw) + io.Float32(&pk.BodyYaw) + protocol.Slice(io, &pk.Attributes) + io.EntityMetadata(&pk.EntityMetadata) + protocol.Single(io, &pk.EntityProperties) + protocol.Slice(io, &pk.EntityLinks) +} diff --git a/legacyver/legacypacket/add_player.go b/legacyver/legacypacket/add_player.go new file mode 100644 index 0000000..c14875c --- /dev/null +++ b/legacyver/legacypacket/add_player.go @@ -0,0 +1,92 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/go-gl/mathgl/mgl32" + "github.com/google/uuid" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// AddPlayer is sent by the server to the client to make a player entity show up client-side. It is one of the +// few entities that cannot be sent using the AddActor packet. +type AddPlayer struct { + // UUID is the UUID of the player. It is the same UUID that the client sent in the Login packet at the + // start of the session. A player with this UUID must exist in the player list (built up using the + // PlayerList packet), for it to show up in-game. + UUID uuid.UUID + // Username is the name of the player. This username is the username that will be set as the initial + // name tag of the player. + Username string + // EntityRuntimeID is the runtime ID of the player. The runtime ID is unique for each world session, and + // entities are generally identified in packets using this runtime ID. + EntityRuntimeID uint64 + // PlatformChatID is an identifier only set for particular platforms when chatting (presumably only for + // Nintendo Switch). It is otherwise an empty string, and is used to decide which players are able to + // chat with each other. + PlatformChatID string + // Position is the position to spawn the player on. If the player is on a distance that the viewer cannot + // see it, the player will still show up if the viewer moves closer. + Position mgl32.Vec3 + // Velocity is the initial velocity the player spawns with. This velocity will initiate client side + // movement of the player. + Velocity mgl32.Vec3 + // Pitch is the vertical rotation of the player. Facing straight forward yields a pitch of 0. Pitch is + // measured in degrees. + Pitch float32 + // Yaw is the horizontal rotation of the player. Yaw is also measured in degrees. + Yaw float32 + // HeadYaw is the same as Yaw, except that it applies specifically to the head of the player. A different + // value for HeadYaw than Yaw means that the player will have its head turned. + HeadYaw float32 + // HeldItem is the item that the player is holding. The item is shown to the viewer as soon as the player + // itself shows up. Needless to say that this field is rather pointless, as additional packets still must + // be sent for armour to show up. + HeldItem protocol.ItemInstance + // GameType is the game type of the player. If set to GameTypeSpectator, the player will not be shown to viewers. + GameType int32 + // EntityMetadata is a map of entity metadata, which includes flags and data properties that alter in + // particular the way the player looks. Flags include ones such as 'on fire' and 'sprinting'. + // The metadata values are indexed by their property key. + EntityMetadata map[uint32]any + // EntityProperties is a list of properties that the entity inhibits. These properties define and alter specific + // attributes of the entity. + EntityProperties protocol.EntityProperties + // AbilityData represents various data about the abilities of a player, such as ability layers or permissions. + AbilityData protocol.AbilityData + // EntityLinks is a list of entity links that are currently active on the player. These links alter the + // way the player shows up when first spawned in terms of it shown as riding an entity. Setting these + // links is important for new viewers to see the player is riding another entity. + EntityLinks []proto.EntityLink + // DeviceID is the device ID set in one of the files found in the storage of the device of the player. It + // may be changed freely, so it should not be relied on for anything. + DeviceID string + // BuildPlatform is the build platform/device OS of the player that is about to be added, as it sent in + // the Login packet when joining. + BuildPlatform int32 +} + +// ID ... +func (*AddPlayer) ID() uint32 { + return packet.IDAddPlayer +} + +func (pk *AddPlayer) Marshal(io protocol.IO) { + io.UUID(&pk.UUID) + io.String(&pk.Username) + io.Varuint64(&pk.EntityRuntimeID) + io.String(&pk.PlatformChatID) + io.Vec3(&pk.Position) + io.Vec3(&pk.Velocity) + io.Float32(&pk.Pitch) + io.Float32(&pk.Yaw) + io.Float32(&pk.HeadYaw) + io.ItemInstance(&pk.HeldItem) + io.Varint32(&pk.GameType) + io.EntityMetadata(&pk.EntityMetadata) + protocol.Single(io, &pk.EntityProperties) + protocol.Single(io, &pk.AbilityData) + protocol.Slice(io, &pk.EntityLinks) + io.String(&pk.DeviceID) + io.Int32(&pk.BuildPlatform) +} diff --git a/legacyver/legacypacket/camera_instruction.go b/legacyver/legacypacket/camera_instruction.go new file mode 100644 index 0000000..3ecc363 --- /dev/null +++ b/legacyver/legacypacket/camera_instruction.go @@ -0,0 +1,36 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// CameraInstruction gives a custom camera specific instructions to operate. +type CameraInstruction struct { + // Set is a camera instruction that sets the camera to a specified preset. + Set protocol.Optional[protocol.CameraInstructionSet] + // Clear can be set to true to clear all the current camera instructions. + Clear protocol.Optional[bool] + // Fade is a camera instruction that fades the screen to a specified colour. + Fade protocol.Optional[protocol.CameraInstructionFade] + // Target is a camera instruction that targets a specific entity. + Target protocol.Optional[protocol.CameraInstructionTarget] + // RemoveTarget can be set to true to remove the current aim assist target. + RemoveTarget protocol.Optional[bool] +} + +// ID ... +func (*CameraInstruction) ID() uint32 { + return packet.IDCameraInstruction +} + +func (pk *CameraInstruction) Marshal(io protocol.IO) { + protocol.OptionalMarshaler(io, &pk.Set) + protocol.OptionalFunc(io, &pk.Clear, io.Bool) + protocol.OptionalMarshaler(io, &pk.Fade) + if proto.IsProtoGTE(io, proto.ID712) { + protocol.OptionalMarshaler(io, &pk.Target) + protocol.OptionalFunc(io, &pk.RemoveTarget, io.Bool) + } +} diff --git a/legacyver/legacypacket/change_dimension.go b/legacyver/legacypacket/change_dimension.go new file mode 100644 index 0000000..c758a1a --- /dev/null +++ b/legacyver/legacypacket/change_dimension.go @@ -0,0 +1,46 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/go-gl/mathgl/mgl32" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// ChangeDimension is sent by the server to the client to send a dimension change screen client-side. Once the +// screen is cleared client-side, the client will send a PlayerAction packet with +// PlayerActionDimensionChangeDone. +type ChangeDimension struct { + // Dimension is the dimension that the client should be changed to. The fog colour will change depending + // on the type of dimension, which is one of the constants above. + // Note that Dimension MUST be a different dimension than the one that the player is currently in. Sending + // a ChangeDimension packet with a Dimension that the player is currently in will result in a never-ending + // dimension change screen. + Dimension int32 + // Position is the position in the new dimension that the player is spawned in. + Position mgl32.Vec3 + // Respawn specifies if the dimension change was respawn based, meaning that the player died in one + // dimension and got respawned into another. The client will send a PlayerAction packet with + // PlayerActionDimensionChangeRequest if it dies in another dimension, indicating that it needs a + // DimensionChange packet with Respawn set to true. + Respawn bool + // LoadingScreenID is a unique ID for the loading screen that the player is currently in. The client will + // update the server on its state through the ServerBoundLoadingScreen packet, and it can be used to not + // send specific packets to the client if it is changing dimensions. This field should be unique for every + //ChangeDimension packet sent. + LoadingScreenID protocol.Optional[uint32] +} + +// ID ... +func (*ChangeDimension) ID() uint32 { + return packet.IDChangeDimension +} + +func (pk *ChangeDimension) Marshal(io protocol.IO) { + io.Varint32(&pk.Dimension) + io.Vec3(&pk.Position) + io.Bool(&pk.Respawn) + if proto.IsProtoGTE(io, proto.ID712) { + protocol.OptionalFunc(io, &pk.LoadingScreenID, io.Uint32) + } +} diff --git a/legacyver/legacypacket/correct_player_move_prediction.go b/legacyver/legacypacket/correct_player_move_prediction.go new file mode 100644 index 0000000..1c31715 --- /dev/null +++ b/legacyver/legacypacket/correct_player_move_prediction.go @@ -0,0 +1,50 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/go-gl/mathgl/mgl32" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// CorrectPlayerMovePrediction is sent by the server if and only if StartGame.ServerAuthoritativeMovementMode +// is set to AuthoritativeMovementModeServerWithRewind. The packet is used to correct movement at a specific +// point in time. +type CorrectPlayerMovePrediction struct { + // PredictionType is the type of prediction that was corrected. It is one of the constants above. + PredictionType byte + // Position is the position that the player is supposed to be at the tick written in the field below. + // The client will change its current position based on movement after that tick starting from the + // Position. + Position mgl32.Vec3 + // Delta is the change in position compared to what the client sent as its position at that specific tick. + Delta mgl32.Vec3 + // Rotation is the rotation of the player at the tick written in the field below. It is only included if + // PredictionType is PredictionTypeVehicle. + Rotation mgl32.Vec2 + // VehicleAngularVelocity is the angular velocity of the vehicle that the rider is riding. + VehicleAngularVelocity protocol.Optional[float32] + // OnGround specifies if the player was on the ground at the time of the tick below. + OnGround bool + // Tick is the tick of the movement which was corrected by this packet. + Tick uint64 +} + +// ID ... +func (*CorrectPlayerMovePrediction) ID() uint32 { + return packet.IDCorrectPlayerMovePrediction +} + +func (pk *CorrectPlayerMovePrediction) Marshal(io protocol.IO) { + io.Uint8(&pk.PredictionType) + io.Vec3(&pk.Position) + io.Vec3(&pk.Delta) + if pk.PredictionType == packet.PredictionTypeVehicle { + io.Vec2(&pk.Rotation) + if proto.IsProtoGTE(io, proto.ID712) { + protocol.OptionalFunc(io, &pk.VehicleAngularVelocity, io.Float32) + } + } + io.Bool(&pk.OnGround) + io.Varuint64(&pk.Tick) +} diff --git a/legacyver/legacypacket/disconnect.go b/legacyver/legacypacket/disconnect.go new file mode 100644 index 0000000..29ce872 --- /dev/null +++ b/legacyver/legacypacket/disconnect.go @@ -0,0 +1,40 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// Disconnect may be sent by the server to disconnect the client using an optional message to send as the +// disconnect screen. +type Disconnect struct { + // Reason is the reason for the disconnection. It seems as if this field has no use other than for + // telemetry reasons as it does not affect the message that gets displayed on the disconnect screen. + Reason int32 + // HideDisconnectionScreen specifies if the disconnection screen should be hidden when the client is + // disconnected, meaning it will be sent directly to the main menu. + HideDisconnectionScreen bool + // Message is an optional message to show when disconnected. This message is only written if the + // HideDisconnectionScreen field is set to true. + Message string + // FilteredMessage is a filtered version of Message with all the profanity removed. The client will use + // this over Message if this field is not empty and they have the "Filter Profanity" setting enabled. + FilteredMessage string +} + +// ID ... +func (*Disconnect) ID() uint32 { + return packet.IDDisconnect +} + +func (pk *Disconnect) Marshal(io protocol.IO) { + io.Varint32(&pk.Reason) + io.Bool(&pk.HideDisconnectionScreen) + if !pk.HideDisconnectionScreen { + io.String(&pk.Message) + if proto.IsProtoGTE(io, proto.ID712) { + io.String(&pk.FilteredMessage) + } + } +} diff --git a/legacyver/legacypacket/editor_network.go b/legacyver/legacypacket/editor_network.go new file mode 100644 index 0000000..5286709 --- /dev/null +++ b/legacyver/legacypacket/editor_network.go @@ -0,0 +1,29 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/sandertv/gophertunnel/minecraft/nbt" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// EditorNetwork is a packet sent from the server to the client and vise-versa to communicate editor-mode related +// information. It carries a single compound tag containing the relevant information. +type EditorNetwork struct { + // RouteToManager ... + RouteToManager bool + // Payload is a network little endian compound tag holding data relevant to the editor. + Payload map[string]any +} + +// ID ... +func (*EditorNetwork) ID() uint32 { + return packet.IDEditorNetwork +} + +func (pk *EditorNetwork) Marshal(io protocol.IO) { + if proto.IsProtoGTE(io, proto.ID712) { + io.Bool(&pk.RouteToManager) + } + io.NBT(&pk.Payload, nbt.NetworkLittleEndian) +} diff --git a/legacyver/legacypacket/inventory_content.go b/legacyver/legacypacket/inventory_content.go index 5bc8330..a351657 100644 --- a/legacyver/legacypacket/inventory_content.go +++ b/legacyver/legacypacket/inventory_content.go @@ -40,6 +40,8 @@ func (pk *InventoryContent) Marshal(io protocol.IO) { if proto.IsProtoGTE(io, proto.ID748) { io.ItemInstance(&pk.StorageItem) } else { - io.Varuint32(&pk.DynamicContainerSize) + if proto.IsProtoGTE(io, proto.ID712) { + io.Varuint32(&pk.DynamicContainerSize) + } } } diff --git a/legacyver/legacypacket/inventory_slot.go b/legacyver/legacypacket/inventory_slot.go index 531b1d9..2af0a63 100644 --- a/legacyver/legacypacket/inventory_slot.go +++ b/legacyver/legacypacket/inventory_slot.go @@ -43,7 +43,9 @@ func (pk *InventorySlot) Marshal(io protocol.IO) { if proto.IsProtoGTE(io, proto.ID748) { io.ItemInstance(&pk.StorageItem) } else { - io.Varuint32(&pk.DynamicContainerSize) + if proto.IsProtoGTE(io, proto.ID712) { + io.Varuint32(&pk.DynamicContainerSize) + } } io.ItemInstance(&pk.NewItem) } diff --git a/legacyver/legacypacket/inventory_transaction.go b/legacyver/legacypacket/inventory_transaction.go new file mode 100644 index 0000000..f138bff --- /dev/null +++ b/legacyver/legacypacket/inventory_transaction.go @@ -0,0 +1,50 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// InventoryTransaction is a packet sent by the client. It essentially exists out of multiple sub-packets, +// each of which have something to do with the inventory in one way or another. Some of these sub-packets +// directly relate to the inventory, others relate to interaction with the world, that could potentially +// result in a change in the inventory. +type InventoryTransaction struct { + // LegacyRequestID is an ID that is only non-zero at times when sent by the client. The server should + // always send 0 for this. When this field is not 0, the LegacySetItemSlots slice below will have values + // in it. + // LegacyRequestID ties in with the ItemStackResponse packet. If this field is non-0, the server should + // respond with an ItemStackResponse packet. Some inventory actions such as dropping an item out of the + // hotbar are still one using this packet, and the ItemStackResponse packet needs to tie in with it. + LegacyRequestID int32 + // LegacySetItemSlots are only present if the LegacyRequestID is non-zero. These item slots inform the + // server of the slots that were changed during the inventory transaction, and the server should send + // back an ItemStackResponse packet with these slots present in it. (Or false with no slots, if rejected.) + LegacySetItemSlots []protocol.LegacySetItemSlot + // Actions is a list of actions that took place, that form the inventory transaction together. Each of + // these actions hold one slot in which one item was changed to another. In general, the combination of + // all of these actions results in a balanced inventory transaction. This should be checked to ensure that + // no items are cheated into the inventory. + Actions []protocol.InventoryAction + // TransactionData is a data object that holds data specific to the type of transaction that the + // TransactionPacket held. Its concrete type must be one of NormalTransactionData, MismatchTransactionData + // UseItemTransactionData, UseItemOnEntityTransactionData or ReleaseItemTransactionData. If nil is set, + // the transaction will be assumed to of type InventoryTransactionTypeNormal. + TransactionData proto.InventoryTransactionData +} + +// ID ... +func (*InventoryTransaction) ID() uint32 { + return packet.IDInventoryTransaction +} + +func (pk *InventoryTransaction) Marshal(io protocol.IO) { + io.Varint32(&pk.LegacyRequestID) + if pk.LegacyRequestID != 0 { + protocol.Slice(io, &pk.LegacySetItemSlots) + } + proto.TransactionDataType(io, &pk.TransactionData) + protocol.Slice(io, &pk.Actions) + pk.TransactionData.Marshal(io) +} diff --git a/legacyver/legacypacket/mob_armour_equipment.go b/legacyver/legacypacket/mob_armour_equipment.go new file mode 100644 index 0000000..c6bdd9e --- /dev/null +++ b/legacyver/legacypacket/mob_armour_equipment.go @@ -0,0 +1,44 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// MobArmourEquipment is sent by the server to the client to update the armour an entity is wearing. It is +// sent for both players and other entities, such as zombies. +type MobArmourEquipment struct { + // EntityRuntimeID is the runtime ID of the entity. The runtime ID is unique for each world session, and + // entities are generally identified in packets using this runtime ID. + EntityRuntimeID uint64 + // Helmet is the equipped helmet of the entity. Items that are not wearable on the head will not be + // rendered by the client. Unlike in Java Edition, blocks cannot be worn. + Helmet protocol.ItemInstance + // Chestplate is the chestplate of the entity. Items that are not wearable as chestplate will not be + // rendered. + Chestplate protocol.ItemInstance + // Leggings is the item worn as leggings by the entity. Items not wearable as leggings will not be + // rendered client-side. + Leggings protocol.ItemInstance + // Boots is the item worn as boots by the entity. Items not wearable as boots will not be rendered. + Boots protocol.ItemInstance + // Body is the item worn on the body of the entity. Items not wearable on the body will not be rendered. + Body protocol.ItemInstance +} + +// ID ... +func (*MobArmourEquipment) ID() uint32 { + return packet.IDMobArmourEquipment +} + +func (pk *MobArmourEquipment) Marshal(io protocol.IO) { + io.Varuint64(&pk.EntityRuntimeID) + io.ItemInstance(&pk.Helmet) + io.ItemInstance(&pk.Chestplate) + io.ItemInstance(&pk.Leggings) + io.ItemInstance(&pk.Boots) + if proto.IsProtoGTE(io, proto.ID712) { + io.ItemInstance(&pk.Body) + } +} diff --git a/legacyver/legacypacket/player_armour_damage.go b/legacyver/legacypacket/player_armour_damage.go new file mode 100644 index 0000000..32b943f --- /dev/null +++ b/legacyver/legacypacket/player_armour_damage.go @@ -0,0 +1,63 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// PlayerArmourDamage is sent by the server to damage the armour of a player. It is a very efficient packet, +// but generally it's much easier to just send a slot update for the damaged armour. +type PlayerArmourDamage struct { + // Bitset holds a bitset of 4 bits that indicate which pieces of armour need to have damage dealt to them. + // The first bit, when toggled, is for a helmet, the second for the chestplate, the third for the leggings + // and the fourth for boots. + Bitset uint8 + // HelmetDamage is the amount of damage that should be dealt to the helmet. + HelmetDamage int32 + // ChestplateDamage is the amount of damage that should be dealt to the chestplate. + ChestplateDamage int32 + // LeggingsDamage is the amount of damage that should be dealt to the leggings. + LeggingsDamage int32 + // BootsDamage is the amount of damage that should be dealt to the boots. + BootsDamage int32 + // BodyDamage is the amount of damage that should be dealt to the body. + BodyDamage int32 +} + +// ID ... +func (pk *PlayerArmourDamage) ID() uint32 { + return packet.IDPlayerArmourDamage +} + +func (pk *PlayerArmourDamage) Marshal(io protocol.IO) { + io.Uint8(&pk.Bitset) + if pk.Bitset&packet.PlayerArmourDamageFlagHelmet != 0 { + io.Varint32(&pk.HelmetDamage) + } else { + pk.HelmetDamage = 0 + } + if pk.Bitset&packet.PlayerArmourDamageFlagChestplate != 0 { + io.Varint32(&pk.ChestplateDamage) + } else { + pk.ChestplateDamage = 0 + } + if pk.Bitset&packet.PlayerArmourDamageFlagLeggings != 0 { + io.Varint32(&pk.LeggingsDamage) + } else { + pk.LeggingsDamage = 0 + } + if pk.Bitset&packet.PlayerArmourDamageFlagBoots != 0 { + io.Varint32(&pk.BootsDamage) + } else { + pk.BootsDamage = 0 + } + + if proto.IsProtoGTE(io, proto.ID712) { + if pk.Bitset&packet.PlayerArmourDamageFlagBody != 0 { + io.Varint32(&pk.BodyDamage) + } else { + pk.BodyDamage = 0 + } + } +} diff --git a/legacyver/legacypacket/player_auth_input.go b/legacyver/legacypacket/player_auth_input.go index 60a0ea7..a52a4ef 100644 --- a/legacyver/legacypacket/player_auth_input.go +++ b/legacyver/legacypacket/player_auth_input.go @@ -91,7 +91,7 @@ func (pk *PlayerAuthInput) Marshal(io protocol.IO) { io.Vec3(&pk.Delta) if pk.InputData.Load(packet.InputFlagPerformItemInteraction) { - io.PlayerInventoryAction(&pk.ItemInteractionData) + proto.PlayerInventoryAction(io, &pk.ItemInteractionData) } if pk.InputData.Load(packet.InputFlagPerformItemStackRequest) { diff --git a/legacyver/legacypacket/set_actor_link.go b/legacyver/legacypacket/set_actor_link.go new file mode 100644 index 0000000..a89d034 --- /dev/null +++ b/legacyver/legacypacket/set_actor_link.go @@ -0,0 +1,25 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// SetActorLink is sent by the server to initiate an entity link client-side, meaning one entity will start +// riding another. +type SetActorLink struct { + // EntityLink is the link to be set client-side. It links two entities together, so that one entity rides + // another. Note that players that see those entities later will not see the link, unless it is also sent + // in the AddActor and AddPlayer packets. + EntityLink proto.EntityLink +} + +// ID ... +func (*SetActorLink) ID() uint32 { + return packet.IDSetActorLink +} + +func (pk *SetActorLink) Marshal(io protocol.IO) { + protocol.Single(io, &pk.EntityLink) +} diff --git a/legacyver/legacypacket/set_title.go b/legacyver/legacypacket/set_title.go new file mode 100644 index 0000000..285994d --- /dev/null +++ b/legacyver/legacypacket/set_title.go @@ -0,0 +1,53 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// SetTitle is sent by the server to make a title, subtitle or action bar shown to a player. It has several +// fields that allow setting the duration of the titles. +type SetTitle struct { + // ActionType is the type of the action that should be executed upon the title of a player. It is one of + // the constants above and specifies the response of the client to the packet. + ActionType int32 + // Text is the text of the title, which has a different meaning depending on the ActionType that the + // packet has. The text is the text of a title, subtitle or action bar, depending on the type set. + Text string + // FadeInDuration is the duration that the title takes to fade in on the screen of the player. It is + // measured in 20ths of a second (AKA in ticks). + FadeInDuration int32 + // RemainDuration is the duration that the title remains on the screen of the player. It is measured in + // 20ths of a second (AKA in ticks). + RemainDuration int32 + // FadeOutDuration is the duration that the title takes to fade out of the screen of the player. It is + // measured in 20ths of a second (AKA in ticks). + FadeOutDuration int32 + // XUID is the XBOX Live user ID of the player, which will remain consistent as long as the player is + // logged in with the XBOX Live account. It is empty if the user is not logged into its XBL account. + XUID string + // PlatformOnlineID is either a uint64 or an empty string. + PlatformOnlineID string + // FilteredMessage is a filtered version of Message with all the profanity removed. The client will use + // this over Message if this field is not empty and they have the "Filter Profanity" setting enabled. + FilteredMessage string +} + +// ID ... +func (*SetTitle) ID() uint32 { + return packet.IDSetTitle +} + +func (pk *SetTitle) Marshal(io protocol.IO) { + io.Varint32(&pk.ActionType) + io.String(&pk.Text) + io.Varint32(&pk.FadeInDuration) + io.Varint32(&pk.RemainDuration) + io.Varint32(&pk.FadeOutDuration) + io.String(&pk.XUID) + io.String(&pk.PlatformOnlineID) + if proto.IsProtoGTE(io, proto.ID712) { + io.String(&pk.FilteredMessage) + } +} diff --git a/legacyver/legacypacket/stop_sound.go b/legacyver/legacypacket/stop_sound.go new file mode 100644 index 0000000..79e1612 --- /dev/null +++ b/legacyver/legacypacket/stop_sound.go @@ -0,0 +1,33 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// StopSound is sent by the server to stop a sound playing to the player, such as a playing music disk track +// or other long-lasting sounds. +type StopSound struct { + // SoundName is the name of the sound that should be stopped from playing. If no sound with this name is + // currently active, the packet is ignored. + SoundName string + // StopAll specifies if all sounds currently playing to the player should be stopped. If set to true, the + // SoundName field may be left empty. + StopAll bool + // StopMusicLegacy is currently unknown. + StopMusicLegacy bool +} + +// ID ... +func (*StopSound) ID() uint32 { + return packet.IDStopSound +} + +func (pk *StopSound) Marshal(io protocol.IO) { + io.String(&pk.SoundName) + io.Bool(&pk.StopAll) + if proto.IsProtoGTE(io, proto.ID712) { + io.Bool(&pk.StopMusicLegacy) + } +} diff --git a/legacyver/proto/entity_link.go b/legacyver/proto/entity_link.go new file mode 100644 index 0000000..eef7de0 --- /dev/null +++ b/legacyver/proto/entity_link.go @@ -0,0 +1,56 @@ +package proto + +import "github.com/sandertv/gophertunnel/minecraft/protocol" + +// EntityLink is a link between two entities, typically being one entity riding another. +type EntityLink struct { + // RiddenEntityUniqueID is the entity unique ID of the entity that is being ridden. For a player sitting + // in a boat, this is the unique ID of the boat. + RiddenEntityUniqueID int64 + // RiderEntityUniqueID is the entity unique ID of the entity that is riding. For a player sitting in a + // boat, this is the unique ID of the player. + RiderEntityUniqueID int64 + // Type is one of the types above. It specifies the way the entity is linked to another entity. + Type byte + // Immediate is set to immediately dismount an entity from another. This should be set when the mount of + // an entity is killed. + Immediate bool + // RiderInitiated specifies if the link was created by the rider, for example the player starting to ride + // a horse by itself. This is generally true in vanilla environment for players. + RiderInitiated bool + // VehicleAngularVelocity is the angular velocity of the vehicle that the rider is riding. + VehicleAngularVelocity float32 +} + +func (x *EntityLink) FromLatest(link protocol.EntityLink) EntityLink { + x.RiddenEntityUniqueID = link.RiddenEntityUniqueID + x.RiderEntityUniqueID = link.RiderEntityUniqueID + x.Type = link.Type + x.Immediate = link.Immediate + x.RiderInitiated = link.RiderInitiated + x.VehicleAngularVelocity = link.VehicleAngularVelocity + return *x +} + +func (x *EntityLink) ToLatest() protocol.EntityLink { + return protocol.EntityLink{ + RiddenEntityUniqueID: x.RiddenEntityUniqueID, + RiderEntityUniqueID: x.RiderEntityUniqueID, + Type: x.Type, + Immediate: x.Immediate, + RiderInitiated: x.RiderInitiated, + VehicleAngularVelocity: x.VehicleAngularVelocity, + } +} + +// Marshal encodes/decodes a single entity link. +func (x *EntityLink) Marshal(r protocol.IO) { + r.Varint64(&x.RiddenEntityUniqueID) + r.Varint64(&x.RiderEntityUniqueID) + r.Uint8(&x.Type) + r.Bool(&x.Immediate) + r.Bool(&x.RiderInitiated) + if IsProtoGTE(r, ID712) { + r.Float32(&x.VehicleAngularVelocity) + } +} diff --git a/legacyver/proto/inventory.go b/legacyver/proto/inventory.go new file mode 100644 index 0000000..fec9911 --- /dev/null +++ b/legacyver/proto/inventory.go @@ -0,0 +1,158 @@ +package proto + +import ( + "github.com/go-gl/mathgl/mgl32" + "github.com/sandertv/gophertunnel/minecraft/protocol" +) + +// InventoryTransactionData represents an object that holds data specific to an inventory transaction type. +// The data it holds depends on the type. +type InventoryTransactionData interface { + // Marshal encodes/decodes a serialised inventory transaction data object. + Marshal(r protocol.IO) +} + +// lookupTransactionData looks up inventory transaction data for the ID passed. +func lookupTransactionData(id uint32, x *InventoryTransactionData) bool { + switch id { + case protocol.InventoryTransactionTypeNormal: + *x = &protocol.NormalTransactionData{} + case protocol.InventoryTransactionTypeMismatch: + *x = &protocol.MismatchTransactionData{} + case protocol.InventoryTransactionTypeUseItem: + *x = &UseItemTransactionData{} + case protocol.InventoryTransactionTypeUseItemOnEntity: + *x = &protocol.UseItemOnEntityTransactionData{} + case protocol.InventoryTransactionTypeReleaseItem: + *x = &protocol.ReleaseItemTransactionData{} + default: + return false + } + return true +} + +// lookupTransactionDataType looks up an ID for a specific transaction data. +func lookupTransactionDataType(x InventoryTransactionData, id *uint32) bool { + switch x.(type) { + case *protocol.NormalTransactionData: + *id = protocol.InventoryTransactionTypeNormal + case *protocol.MismatchTransactionData: + *id = protocol.InventoryTransactionTypeMismatch + case *UseItemTransactionData: + *id = protocol.InventoryTransactionTypeUseItem + case *protocol.UseItemOnEntityTransactionData: + *id = protocol.InventoryTransactionTypeUseItemOnEntity + case *protocol.ReleaseItemTransactionData: + *id = protocol.InventoryTransactionTypeReleaseItem + default: + return false + } + return true +} + +// UseItemTransactionData represents an inventory transaction data object sent when the client uses an item on +// a block. +type UseItemTransactionData struct { + // LegacyRequestID is an ID that is only non-zero at times when sent by the client. The server should + // always send 0 for this. When this field is not 0, the LegacySetItemSlots slice below will have values + // in it. + // LegacyRequestID ties in with the ItemStackResponse packet. If this field is non-0, the server should + // respond with an ItemStackResponse packet. Some inventory actions such as dropping an item out of the + // hotbar are still one using this packet, and the ItemStackResponse packet needs to tie in with it. + LegacyRequestID int32 + // LegacySetItemSlots are only present if the LegacyRequestID is non-zero. These item slots inform the + // server of the slots that were changed during the inventory transaction, and the server should send + // back an ItemStackResponse packet with these slots present in it. (Or false with no slots, if rejected.) + LegacySetItemSlots []protocol.LegacySetItemSlot + // Actions is a list of actions that took place, that form the inventory transaction together. Each of + // these actions hold one slot in which one item was changed to another. In general, the combination of + // all of these actions results in a balanced inventory transaction. This should be checked to ensure that + // no items are cheated into the inventory. + Actions []protocol.InventoryAction + // ActionType is the type of the UseItem inventory transaction. It is one of the action types found above, + // and specifies the way the player interacted with the block. + ActionType uint32 + // TriggerType is the type of the trigger that caused the inventory transaction. It is one of the trigger + // types found in the constants above. If TriggerType is TriggerTypePlayerInput, the transaction is from + // the initial input of the player. If it is TriggerTypeSimulationTick, the transaction is from a simulation + // tick when the player is holding down the input. + TriggerType uint32 + // BlockPosition is the position of the block that was interacted with. This is only really a correct + // block position if ActionType is not UseItemActionClickAir. + BlockPosition protocol.BlockPos + // BlockFace is the face of the block that was interacted with. When clicking the block, it is the face + // clicked. When breaking the block, it is the face that was last being hit until the block broke. + BlockFace int32 + // HotBarSlot is the hot bar slot that the player was holding while clicking the block. It should be used + // to ensure that the hot bar slot and held item are correctly synchronised with the server. + HotBarSlot int32 + // HeldItem is the item that was held to interact with the block. The server should check if this item + // is actually present in the HotBarSlot. + HeldItem protocol.ItemInstance + // Position is the position of the player at the time of interaction. For clicking a block, this is the + // position at that time, whereas for breaking the block it is the position at the time of breaking. + Position mgl32.Vec3 + // ClickedPosition is the position that was clicked relative to the block's base coordinate. It can be + // used to find out exactly where a player clicked the block. + ClickedPosition mgl32.Vec3 + // BlockRuntimeID is the runtime ID of the block that was clicked. It may be used by the server to verify + // that the player's world client-side is synchronised with the server's. + BlockRuntimeID uint32 + // ClientPrediction is the client's prediction on the output of the transaction. It is one of the client + // prediction found in the constants above. + ClientPrediction uint32 +} + +func (x *UseItemTransactionData) FromLatest(l *protocol.UseItemTransactionData) *UseItemTransactionData { + return &UseItemTransactionData{ + LegacyRequestID: l.LegacyRequestID, + LegacySetItemSlots: l.LegacySetItemSlots, + Actions: l.Actions, + ActionType: l.ActionType, + TriggerType: l.TriggerType, + BlockPosition: l.BlockPosition, + BlockFace: l.BlockFace, + HotBarSlot: l.HotBarSlot, + HeldItem: l.HeldItem, + Position: l.Position, + ClickedPosition: l.ClickedPosition, + BlockRuntimeID: l.BlockRuntimeID, + ClientPrediction: l.ClientPrediction, + } +} + +func (x *UseItemTransactionData) ToLatest() *protocol.UseItemTransactionData { + return &protocol.UseItemTransactionData{ + LegacyRequestID: x.LegacyRequestID, + LegacySetItemSlots: x.LegacySetItemSlots, + Actions: x.Actions, + ActionType: x.ActionType, + TriggerType: x.TriggerType, + BlockPosition: x.BlockPosition, + BlockFace: x.BlockFace, + HotBarSlot: x.HotBarSlot, + HeldItem: x.HeldItem, + Position: x.Position, + ClickedPosition: x.ClickedPosition, + BlockRuntimeID: x.BlockRuntimeID, + ClientPrediction: x.ClientPrediction, + } +} + +// Marshal ... +func (x *UseItemTransactionData) Marshal(r protocol.IO) { + r.Varuint32(&x.ActionType) + if IsProtoGTE(r, ID712) { + r.Varuint32(&x.TriggerType) + } + r.UBlockPos(&x.BlockPosition) + r.Varint32(&x.BlockFace) + r.Varint32(&x.HotBarSlot) + r.ItemInstance(&x.HeldItem) + r.Vec3(&x.Position) + r.Vec3(&x.ClickedPosition) + r.Varuint32(&x.BlockRuntimeID) + if IsProtoGTE(r, ID712) { + r.Varuint32(&x.ClientPrediction) + } +} diff --git a/legacyver/proto/io.go b/legacyver/proto/io.go index 5a17aa2..ca37321 100644 --- a/legacyver/proto/io.go +++ b/legacyver/proto/io.go @@ -1,6 +1,7 @@ package proto import ( + "fmt" "github.com/sandertv/gophertunnel/minecraft/protocol" ) @@ -57,3 +58,41 @@ func EmptySlice[T any](io protocol.IO, slice *[]T) { *slice = make([]T, 0) } } + +func TransactionDataType(io protocol.IO, x *InventoryTransactionData) { + if IsReader(io) { + var transactionType uint32 + io.Varuint32(&transactionType) + if !lookupTransactionData(transactionType, x) { + io.UnknownEnumOption(transactionType, "inventory transaction data type") + } + } else { + var id uint32 + if !lookupTransactionDataType(*x, &id) { + io.UnknownEnumOption(fmt.Sprintf("%T", x), "inventory transaction data type") + } + io.Varuint32(&id) + } +} + +func PlayerInventoryAction(io protocol.IO, x *protocol.UseItemTransactionData) { + io.Varint32(&x.LegacyRequestID) + if x.LegacyRequestID < -1 && (x.LegacyRequestID&1) == 0 { + protocol.Slice(io, &x.LegacySetItemSlots) + } + protocol.Slice(io, &x.Actions) + io.Varuint32(&x.ActionType) + if IsProtoGTE(io, ID712) { + io.Varuint32(&x.TriggerType) + } + io.BlockPos(&x.BlockPosition) + io.Varint32(&x.BlockFace) + io.Varint32(&x.HotBarSlot) + io.ItemInstance(&x.HeldItem) + io.Vec3(&x.Position) + io.Vec3(&x.ClickedPosition) + io.Varuint32(&x.BlockRuntimeID) + if IsProtoGTE(io, ID712) { + io.Varuint32(&x.ClientPrediction) + } +} diff --git a/legacyver/proto/item_stack.go b/legacyver/proto/item_stack.go index 08d750a..e179f92 100644 --- a/legacyver/proto/item_stack.go +++ b/legacyver/proto/item_stack.go @@ -538,7 +538,9 @@ type CraftRecipeStackRequestAction struct { // Marshal ... func (a *CraftRecipeStackRequestAction) Marshal(r protocol.IO) { r.Varuint32(&a.RecipeNetworkID) - r.Uint8(&a.NumberOfCrafts) + if IsProtoGTE(r, ID712) { + r.Uint8(&a.NumberOfCrafts) + } } // AutoCraftRecipeStackRequestAction is sent by the client similarly to the CraftRecipeStackRequestAction. The diff --git a/legacyver/proto/resource_pack.go b/legacyver/proto/resource_pack.go index a0b4b7c..b6c9d41 100644 --- a/legacyver/proto/resource_pack.go +++ b/legacyver/proto/resource_pack.go @@ -87,7 +87,9 @@ func (x *TexturePackInfo) Marshal(r protocol.IO) { r.String(&x.SubPackName) r.String(&x.ContentIdentity) r.Bool(&x.HasScripts) - r.Bool(&x.AddonPack) + if IsProtoGTE(r, ID712) { + r.Bool(&x.AddonPack) + } r.Bool(&x.RTXEnabled) if IsProtoGTE(r, ID748) { r.String(&x.DownloadURL) diff --git a/legacyver/protocol.go b/legacyver/protocol.go index 876d9e5..13c6a6d 100644 --- a/legacyver/protocol.go +++ b/legacyver/protocol.go @@ -233,6 +233,137 @@ func (p *Protocol) downgradePackets(pks []packet.Packet, conn *minecraft.Conn) [ Port: pk.Port, ReloadWorld: pk.ReloadWorld, } + case *packet.AddActor: + links := make([]proto.EntityLink, len(pk.EntityLinks)) + for i, l := range pk.EntityLinks { + links[i] = (&proto.EntityLink{}).FromLatest(l) + } + pks[pkIndex] = &legacypacket.AddActor{ + EntityUniqueID: pk.EntityUniqueID, + EntityRuntimeID: pk.EntityRuntimeID, + EntityType: pk.EntityType, + Position: pk.Position, + Velocity: pk.Velocity, + Pitch: pk.Pitch, + Yaw: pk.Yaw, + HeadYaw: pk.HeadYaw, + BodyYaw: pk.BodyYaw, + Attributes: pk.Attributes, + EntityMetadata: pk.EntityMetadata, + EntityProperties: pk.EntityProperties, + EntityLinks: links, + } + case *packet.AddPlayer: + links := make([]proto.EntityLink, len(pk.EntityLinks)) + for i, l := range pk.EntityLinks { + links[i] = (&proto.EntityLink{}).FromLatest(l) + } + pks[pkIndex] = &legacypacket.AddPlayer{ + UUID: pk.UUID, + Username: pk.Username, + EntityRuntimeID: pk.EntityRuntimeID, + PlatformChatID: pk.PlatformChatID, + Position: pk.Position, + Velocity: pk.Velocity, + Pitch: pk.Pitch, + Yaw: pk.Yaw, + HeadYaw: pk.HeadYaw, + HeldItem: pk.HeldItem, + GameType: pk.GameType, + EntityMetadata: pk.EntityMetadata, + EntityProperties: pk.EntityProperties, + AbilityData: pk.AbilityData, + EntityLinks: links, + DeviceID: pk.DeviceID, + BuildPlatform: pk.BuildPlatform, + } + case *packet.SetActorLink: + pks[pkIndex] = &legacypacket.SetActorLink{ + EntityLink: (&proto.EntityLink{}).FromLatest(pk.EntityLink), + } + case *packet.CameraInstruction: + pks[pkIndex] = &legacypacket.CameraInstruction{ + Set: pk.Set, + Clear: pk.Clear, + Fade: pk.Fade, + Target: pk.Target, + RemoveTarget: pk.RemoveTarget, + } + case *packet.ChangeDimension: + pks[pkIndex] = &legacypacket.ChangeDimension{ + Dimension: pk.Dimension, + Position: pk.Position, + Respawn: pk.Respawn, + LoadingScreenID: pk.LoadingScreenID, + } + case *packet.CorrectPlayerMovePrediction: + pks[pkIndex] = &legacypacket.CorrectPlayerMovePrediction{ + PredictionType: pk.PredictionType, + Position: pk.Position, + Delta: pk.Delta, + Rotation: pk.Rotation, + VehicleAngularVelocity: pk.VehicleAngularVelocity, + OnGround: pk.OnGround, + Tick: pk.Tick, + } + case *packet.Disconnect: + pks[pkIndex] = &legacypacket.Disconnect{ + Reason: pk.Reason, + HideDisconnectionScreen: pk.HideDisconnectionScreen, + Message: pk.Message, + FilteredMessage: pk.FilteredMessage, + } + case *packet.EditorNetwork: + pks[pkIndex] = &legacypacket.EditorNetwork{ + RouteToManager: pk.RouteToManager, + Payload: pk.Payload, + } + case *packet.MobArmourEquipment: + pks[pkIndex] = &legacypacket.MobArmourEquipment{ + EntityRuntimeID: pk.EntityRuntimeID, + Helmet: pk.Helmet, + Chestplate: pk.Chestplate, + Leggings: pk.Leggings, + Boots: pk.Boots, + Body: pk.Body, + } + case *packet.PlayerArmourDamage: + pks[pkIndex] = &legacypacket.PlayerArmourDamage{ + Bitset: pk.Bitset, + HelmetDamage: pk.HelmetDamage, + ChestplateDamage: pk.ChestplateDamage, + LeggingsDamage: pk.LeggingsDamage, + BootsDamage: pk.BootsDamage, + BodyDamage: pk.BodyDamage, + } + case *packet.SetTitle: + pks[pkIndex] = &legacypacket.SetTitle{ + ActionType: pk.ActionType, + Text: pk.Text, + FadeInDuration: pk.FadeInDuration, + RemainDuration: pk.RemainDuration, + FadeOutDuration: pk.FadeOutDuration, + XUID: pk.XUID, + PlatformOnlineID: pk.PlatformOnlineID, + FilteredMessage: pk.FilteredMessage, + } + case *packet.StopSound: + pks[pkIndex] = &legacypacket.StopSound{ + SoundName: pk.SoundName, + StopAll: pk.StopAll, + StopMusicLegacy: pk.StopMusicLegacy, + } + case *packet.InventoryTransaction: + trData := pk.TransactionData + if x, ok := trData.(*protocol.UseItemTransactionData); ok { + trData = (&proto.UseItemTransactionData{}).FromLatest(x) + } + pks[pkIndex] = &legacypacket.InventoryTransaction{ + LegacyRequestID: pk.LegacyRequestID, + LegacySetItemSlots: pk.LegacySetItemSlots, + Actions: pk.Actions, + TransactionData: trData, + } } } @@ -372,6 +503,137 @@ func (p *Protocol) upgradePackets(pks []packet.Packet, conn *minecraft.Conn) []p Port: pk.Port, ReloadWorld: pk.ReloadWorld, } + case *legacypacket.AddActor: + links := make([]protocol.EntityLink, len(pk.EntityLinks)) + for i, l := range pk.EntityLinks { + links[i] = l.ToLatest() + } + pks[pkIndex] = &packet.AddActor{ + EntityUniqueID: pk.EntityUniqueID, + EntityRuntimeID: pk.EntityRuntimeID, + EntityType: pk.EntityType, + Position: pk.Position, + Velocity: pk.Velocity, + Pitch: pk.Pitch, + Yaw: pk.Yaw, + HeadYaw: pk.HeadYaw, + BodyYaw: pk.BodyYaw, + Attributes: pk.Attributes, + EntityMetadata: pk.EntityMetadata, + EntityProperties: pk.EntityProperties, + EntityLinks: links, + } + case *legacypacket.AddPlayer: + links := make([]protocol.EntityLink, len(pk.EntityLinks)) + for i, l := range pk.EntityLinks { + links[i] = l.ToLatest() + } + pks[pkIndex] = &packet.AddPlayer{ + UUID: pk.UUID, + Username: pk.Username, + EntityRuntimeID: pk.EntityRuntimeID, + PlatformChatID: pk.PlatformChatID, + Position: pk.Position, + Velocity: pk.Velocity, + Pitch: pk.Pitch, + Yaw: pk.Yaw, + HeadYaw: pk.HeadYaw, + HeldItem: pk.HeldItem, + GameType: pk.GameType, + EntityMetadata: pk.EntityMetadata, + EntityProperties: pk.EntityProperties, + AbilityData: pk.AbilityData, + EntityLinks: links, + DeviceID: pk.DeviceID, + BuildPlatform: pk.BuildPlatform, + } + case *legacypacket.SetActorLink: + pks[pkIndex] = &packet.SetActorLink{ + EntityLink: pk.EntityLink.ToLatest(), + } + case *legacypacket.CameraInstruction: + pks[pkIndex] = &packet.CameraInstruction{ + Set: pk.Set, + Clear: pk.Clear, + Fade: pk.Fade, + Target: pk.Target, + RemoveTarget: pk.RemoveTarget, + } + case *legacypacket.ChangeDimension: + pks[pkIndex] = &packet.ChangeDimension{ + Dimension: pk.Dimension, + Position: pk.Position, + Respawn: pk.Respawn, + LoadingScreenID: pk.LoadingScreenID, + } + case *legacypacket.CorrectPlayerMovePrediction: + pks[pkIndex] = &packet.CorrectPlayerMovePrediction{ + PredictionType: pk.PredictionType, + Position: pk.Position, + Delta: pk.Delta, + Rotation: pk.Rotation, + VehicleAngularVelocity: pk.VehicleAngularVelocity, + OnGround: pk.OnGround, + Tick: pk.Tick, + } + case *legacypacket.Disconnect: + pks[pkIndex] = &packet.Disconnect{ + Reason: pk.Reason, + HideDisconnectionScreen: pk.HideDisconnectionScreen, + Message: pk.Message, + FilteredMessage: pk.FilteredMessage, + } + case *legacypacket.EditorNetwork: + pks[pkIndex] = &packet.EditorNetwork{ + RouteToManager: pk.RouteToManager, + Payload: pk.Payload, + } + case *legacypacket.MobArmourEquipment: + pks[pkIndex] = &packet.MobArmourEquipment{ + EntityRuntimeID: pk.EntityRuntimeID, + Helmet: pk.Helmet, + Chestplate: pk.Chestplate, + Leggings: pk.Leggings, + Boots: pk.Boots, + Body: pk.Body, + } + case *legacypacket.PlayerArmourDamage: + pks[pkIndex] = &packet.PlayerArmourDamage{ + Bitset: pk.Bitset, + HelmetDamage: pk.HelmetDamage, + ChestplateDamage: pk.ChestplateDamage, + LeggingsDamage: pk.LeggingsDamage, + BootsDamage: pk.BootsDamage, + BodyDamage: pk.BodyDamage, + } + case *legacypacket.SetTitle: + pks[pkIndex] = &packet.SetTitle{ + ActionType: pk.ActionType, + Text: pk.Text, + FadeInDuration: pk.FadeInDuration, + RemainDuration: pk.RemainDuration, + FadeOutDuration: pk.FadeOutDuration, + XUID: pk.XUID, + PlatformOnlineID: pk.PlatformOnlineID, + FilteredMessage: pk.FilteredMessage, + } + case *legacypacket.StopSound: + pks[pkIndex] = &packet.StopSound{ + SoundName: pk.SoundName, + StopAll: pk.StopAll, + StopMusicLegacy: pk.StopMusicLegacy, + } + case *legacypacket.InventoryTransaction: + trData := pk.TransactionData + if x, ok := trData.(*proto.UseItemTransactionData); ok { + trData = x.ToLatest() + } + pks[pkIndex] = &packet.InventoryTransaction{ + LegacyRequestID: pk.LegacyRequestID, + LegacySetItemSlots: pk.LegacySetItemSlots, + Actions: pk.Actions, + TransactionData: trData, + } } } return pks diff --git a/legacyver/v685.go b/legacyver/v685.go new file mode 100644 index 0000000..ae901bb --- /dev/null +++ b/legacyver/v685.go @@ -0,0 +1,28 @@ +package legacyver + +import ( + _ "embed" + "github.com/akmalfairuz/legacy-version/internal/chunk" + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/akmalfairuz/legacy-version/mapping" +) + +const ( + // ItemVersion685 ... + ItemVersion685 = 191 + // BlockVersion685 ... + BlockVersion685 int32 = (1 << 24) | (21 << 16) | (0 << 8) +) + +// New685 uses same data as 686 +func New685(direct bool) *Protocol { + itemMapping := mapping.NewItemMapping(itemRuntimeIDData686, requiredItemList686, ItemVersion685, false) + blockMapping := mapping.NewBlockMapping(blockStateData686) + + return &Protocol{ + ver: "1.21.0", + id: proto.ID685, + blockTranslator: NewBlockTranslator(blockMapping, latestBlockMapping, chunk.NewNetworkPersistentEncoding(blockMapping, BlockVersion685), chunk.NewBlockPaletteEncoding(blockMapping, BlockVersion685), false), + itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest, blockMapping, blockMappingLatest), + } +} diff --git a/legacyver/v686.go b/legacyver/v686.go new file mode 100644 index 0000000..0970632 --- /dev/null +++ b/legacyver/v686.go @@ -0,0 +1,36 @@ +package legacyver + +import ( + _ "embed" + "github.com/akmalfairuz/legacy-version/internal/chunk" + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/akmalfairuz/legacy-version/mapping" +) + +const ( + // ItemVersion686 ... + ItemVersion686 = 191 + // BlockVersion686 ... + BlockVersion686 int32 = (1 << 24) | (21 << 16) | (2 << 8) +) + +var ( + //go:embed data/item_runtime_ids_686.nbt + itemRuntimeIDData686 []byte + //go:embed data/required_item_list_686.json + requiredItemList686 []byte + //go:embed data/block_states_686.nbt + blockStateData686 []byte +) + +func New686(direct bool) *Protocol { + itemMapping := mapping.NewItemMapping(itemRuntimeIDData686, requiredItemList686, ItemVersion686, false) + blockMapping := mapping.NewBlockMapping(blockStateData686) + + return &Protocol{ + ver: "1.21.2", + id: proto.ID686, + blockTranslator: NewBlockTranslator(blockMapping, latestBlockMapping, chunk.NewNetworkPersistentEncoding(blockMapping, BlockVersion686), chunk.NewBlockPaletteEncoding(blockMapping, BlockVersion686), false), + itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest, blockMapping, blockMappingLatest), + } +} diff --git a/main.go b/main.go index ab714ec..4d87d92 100644 --- a/main.go +++ b/main.go @@ -29,6 +29,10 @@ func main() { StatusProvider: p, AcceptedProtocols: []minecraft.Protocol{ legacyver.New748(false), + legacyver.New729(false), + legacyver.New712(false), + legacyver.New686(false), + legacyver.New685(false), }, }.Listen("raknet", config.Connection.LocalAddress) if err != nil {