From 759c1d98573eea697f337d351d698ad6030c9a2c Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Sun, 21 Apr 2024 17:03:51 +0200 Subject: [PATCH] Add items to identifiers and compact identifier files Instead of adding all string identifier for every single version, they're now collected in a global index file whose ids are then referenced in the individual identifier files --- .gitignore | 1 + README.md | 28 +- build.gradle.kts | 2 +- mappings/identifier-table.json | 1751 +++++++++++++++++ output/backwards/mappings-1.20.5to1.20.3.nbt | Bin 9552 -> 10411 bytes output/identifiers-1.10.nbt | Bin 4 -> 0 bytes output/identifiers-1.11.nbt | Bin 4 -> 0 bytes output/identifiers-1.12.nbt | Bin 4 -> 0 bytes output/identifiers-1.13.2.nbt | Bin 582 -> 192 bytes output/identifiers-1.13.nbt | Bin 582 -> 94 bytes output/identifiers-1.14.nbt | Bin 695 -> 570 bytes output/identifiers-1.15.nbt | Bin 757 -> 594 bytes output/identifiers-1.16.2.nbt | Bin 911 -> 1394 bytes output/identifiers-1.16.nbt | Bin 911 -> 1210 bytes output/identifiers-1.17.nbt | Bin 1181 -> 2594 bytes output/identifiers-1.18.nbt | Bin 3006 -> 2707 bytes output/identifiers-1.19.3.nbt | Bin 3155 -> 3583 bytes output/identifiers-1.19.4.nbt | Bin 3301 -> 4215 bytes output/identifiers-1.19.nbt | Bin 3148 -> 3444 bytes output/identifiers-1.20.2.nbt | Bin 3257 -> 4287 bytes output/identifiers-1.20.3.nbt | Bin 4838 -> 4568 bytes output/identifiers-1.20.5.nbt | Bin 5086 -> 4840 bytes output/identifiers-1.20.nbt | Bin 3257 -> 4287 bytes output/identifiers-1.9.4.nbt | Bin 4 -> 0 bytes output/special/identifiers-20w14infinite.nbt | Bin 2602 -> 1522 bytes output/special/identifiers-3D_Shareware.nbt | Bin 2335 -> 972 bytes output_hashes.json | 3 + .../mappingsgenerator/MappingsOptimizer.java | 94 +- .../extra/ItemsAndBlocks1_20_3.java | 1 - 29 files changed, 1850 insertions(+), 30 deletions(-) create mode 100644 mappings/identifier-table.json delete mode 100644 output/identifiers-1.10.nbt delete mode 100644 output/identifiers-1.11.nbt delete mode 100644 output/identifiers-1.12.nbt delete mode 100644 output/identifiers-1.9.4.nbt create mode 100644 output_hashes.json diff --git a/.gitignore b/.gitignore index 2b92534..3408caf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ libraries/ logs/ generated/ +output/ ### Java files ### *.class diff --git a/README.md b/README.md index 1a6bc95..9f96ad0 100644 --- a/README.md +++ b/README.md @@ -55,8 +55,10 @@ own [ViaNBT](https://github.com/ViaVersion/ViaNBT) as the NBT reader/writer. Com ### Identifier files -Next to a standardized compact format, there are extra files per version to store the identifier arrays of certain -registries, as their full keys might be required. These files simply contain any number of json arrays. +Next to a standardized compact format for int id mappings, the full identifiers of some registries are also required. +For this, we generate a list of *all* identifiers in the registry across all versions, so that their names only need to +be stored once, as opposed to storing them again in every new version they are still in. Wherever needed, these +identifiers are then referred to via their index in the global list. ### Mapping files @@ -81,26 +83,26 @@ The direct storage simply stores an array of ints exactly as they can be used in * `id` (byte tag) is `0` * `val` (int array tag) contains the mapped ids, where their array index corresponds to the unmapped id -### Changed value storage - -The changed value storage stores two int arrays: One containing the changed unmapped ids, and one their corresponding -mapped ids in a simple int→int mapping over the two arrays. - -* `id` (byte tag) is `1` -* `at` (int array tag) contains the unmapped ids that have been changed -* `val` (int array tag) contains the mapped ids, indexed by the same index as the unmapped id in `at` -* Optional: `nofill` (byte tag): Unless present, all ids between the ones found in `at` are mapped to their identity - ### Shifted value storage The shifted value storage stores two int arrays: One containing the unmapped ids that end a sequence of mapped ids. For an index `i`, all unmapped ids between `at[i] + sequence` (inclusive) and `at[i + 1]` (exclusive) are mapped to `to[i] + sequence`. -* `id` (byte tag) is `2` +* `id` (byte tag) is `1` * `at` (int array tag) contains the unmapped ids, where their mapped is is *not* simply the last mapped id + 1 * `to` (int array tag) contains the mapped ids, indexed by the same index as the unmapped id in `at` +### Changed value storage + +The changed value storage stores two int arrays: One containing the changed unmapped ids, and one their corresponding +mapped ids in a simple int→int mapping over the two arrays. + +* `id` (byte tag) is `2` +* `at` (int array tag) contains the unmapped ids that have been changed +* `val` (int array tag) contains the mapped ids, indexed by the same index as the unmapped id in `at` +* Optional: `nofill` (byte tag): Unless present, all ids between the ones found in `at` are mapped to their identity + ### Identity storage The identity storage signifies that every id between `0` and `size` is mapped to itself. This is sometimes used over diff --git a/build.gradle.kts b/build.gradle.kts index 030f877..8ef578a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -22,7 +22,7 @@ dependencies { } group = "com.viaversion" -version = "3.4.0" +version = "4.0.0" description = "MappingsGenerator" java.sourceCompatibility = JavaVersion.VERSION_21 diff --git a/mappings/identifier-table.json b/mappings/identifier-table.json new file mode 100644 index 0000000..cd4f9c0 --- /dev/null +++ b/mappings/identifier-table.json @@ -0,0 +1,1751 @@ +{ + "items": [ + "air", + "stone", + "granite", + "polished_granite", + "diorite", + "polished_diorite", + "andesite", + "polished_andesite", + "grass_block", + "dirt", + "coarse_dirt", + "podzol", + "cobblestone", + "oak_planks", + "spruce_planks", + "birch_planks", + "jungle_planks", + "acacia_planks", + "dark_oak_planks", + "oak_sapling", + "spruce_sapling", + "birch_sapling", + "jungle_sapling", + "acacia_sapling", + "dark_oak_sapling", + "bedrock", + "sand", + "red_sand", + "gravel", + "gold_ore", + "iron_ore", + "coal_ore", + "oak_log", + "spruce_log", + "birch_log", + "jungle_log", + "acacia_log", + "dark_oak_log", + "stripped_oak_log", + "stripped_spruce_log", + "stripped_birch_log", + "stripped_jungle_log", + "stripped_acacia_log", + "stripped_dark_oak_log", + "stripped_oak_wood", + "stripped_spruce_wood", + "stripped_birch_wood", + "stripped_jungle_wood", + "stripped_acacia_wood", + "stripped_dark_oak_wood", + "oak_wood", + "spruce_wood", + "birch_wood", + "jungle_wood", + "acacia_wood", + "dark_oak_wood", + "oak_leaves", + "spruce_leaves", + "birch_leaves", + "jungle_leaves", + "acacia_leaves", + "dark_oak_leaves", + "sponge", + "wet_sponge", + "glass", + "lapis_ore", + "lapis_block", + "dispenser", + "sandstone", + "chiseled_sandstone", + "cut_sandstone", + "note_block", + "powered_rail", + "detector_rail", + "sticky_piston", + "cobweb", + "grass", + "fern", + "dead_bush", + "seagrass", + "sea_pickle", + "piston", + "white_wool", + "orange_wool", + "magenta_wool", + "light_blue_wool", + "yellow_wool", + "lime_wool", + "pink_wool", + "gray_wool", + "light_gray_wool", + "cyan_wool", + "purple_wool", + "blue_wool", + "brown_wool", + "green_wool", + "red_wool", + "black_wool", + "dandelion", + "poppy", + "blue_orchid", + "allium", + "azure_bluet", + "red_tulip", + "orange_tulip", + "white_tulip", + "pink_tulip", + "oxeye_daisy", + "brown_mushroom", + "red_mushroom", + "gold_block", + "iron_block", + "oak_slab", + "spruce_slab", + "birch_slab", + "jungle_slab", + "acacia_slab", + "dark_oak_slab", + "stone_slab", + "sandstone_slab", + "petrified_oak_slab", + "cobblestone_slab", + "brick_slab", + "stone_brick_slab", + "nether_brick_slab", + "quartz_slab", + "red_sandstone_slab", + "purpur_slab", + "prismarine_slab", + "prismarine_brick_slab", + "dark_prismarine_slab", + "smooth_quartz", + "smooth_red_sandstone", + "smooth_sandstone", + "smooth_stone", + "bricks", + "tnt", + "bookshelf", + "mossy_cobblestone", + "obsidian", + "torch", + "end_rod", + "chorus_plant", + "chorus_flower", + "purpur_block", + "purpur_pillar", + "purpur_stairs", + "spawner", + "oak_stairs", + "chest", + "diamond_ore", + "diamond_block", + "crafting_table", + "farmland", + "furnace", + "ladder", + "rail", + "cobblestone_stairs", + "lever", + "stone_pressure_plate", + "oak_pressure_plate", + "spruce_pressure_plate", + "birch_pressure_plate", + "jungle_pressure_plate", + "acacia_pressure_plate", + "dark_oak_pressure_plate", + "redstone_ore", + "redstone_torch", + "stone_button", + "snow", + "ice", + "snow_block", + "cactus", + "clay", + "jukebox", + "oak_fence", + "spruce_fence", + "birch_fence", + "jungle_fence", + "acacia_fence", + "dark_oak_fence", + "pumpkin", + "carved_pumpkin", + "netherrack", + "soul_sand", + "glowstone", + "jack_o_lantern", + "oak_trapdoor", + "spruce_trapdoor", + "birch_trapdoor", + "jungle_trapdoor", + "acacia_trapdoor", + "dark_oak_trapdoor", + "infested_stone", + "infested_cobblestone", + "infested_stone_bricks", + "infested_mossy_stone_bricks", + "infested_cracked_stone_bricks", + "infested_chiseled_stone_bricks", + "stone_bricks", + "mossy_stone_bricks", + "cracked_stone_bricks", + "chiseled_stone_bricks", + "brown_mushroom_block", + "red_mushroom_block", + "mushroom_stem", + "iron_bars", + "glass_pane", + "melon", + "vine", + "oak_fence_gate", + "spruce_fence_gate", + "birch_fence_gate", + "jungle_fence_gate", + "acacia_fence_gate", + "dark_oak_fence_gate", + "brick_stairs", + "stone_brick_stairs", + "mycelium", + "lily_pad", + "nether_bricks", + "nether_brick_fence", + "nether_brick_stairs", + "enchanting_table", + "end_portal_frame", + "end_stone", + "end_stone_bricks", + "dragon_egg", + "redstone_lamp", + "sandstone_stairs", + "emerald_ore", + "ender_chest", + "tripwire_hook", + "emerald_block", + "spruce_stairs", + "birch_stairs", + "jungle_stairs", + "command_block", + "beacon", + "cobblestone_wall", + "mossy_cobblestone_wall", + "oak_button", + "spruce_button", + "birch_button", + "jungle_button", + "acacia_button", + "dark_oak_button", + "anvil", + "chipped_anvil", + "damaged_anvil", + "trapped_chest", + "light_weighted_pressure_plate", + "heavy_weighted_pressure_plate", + "daylight_detector", + "redstone_block", + "nether_quartz_ore", + "hopper", + "chiseled_quartz_block", + "quartz_block", + "quartz_pillar", + "quartz_stairs", + "activator_rail", + "dropper", + "white_terracotta", + "orange_terracotta", + "magenta_terracotta", + "light_blue_terracotta", + "yellow_terracotta", + "lime_terracotta", + "pink_terracotta", + "gray_terracotta", + "light_gray_terracotta", + "cyan_terracotta", + "purple_terracotta", + "blue_terracotta", + "brown_terracotta", + "green_terracotta", + "red_terracotta", + "black_terracotta", + "barrier", + "iron_trapdoor", + "hay_block", + "white_carpet", + "orange_carpet", + "magenta_carpet", + "light_blue_carpet", + "yellow_carpet", + "lime_carpet", + "pink_carpet", + "gray_carpet", + "light_gray_carpet", + "cyan_carpet", + "purple_carpet", + "blue_carpet", + "brown_carpet", + "green_carpet", + "red_carpet", + "black_carpet", + "terracotta", + "coal_block", + "packed_ice", + "acacia_stairs", + "dark_oak_stairs", + "slime_block", + "grass_path", + "sunflower", + "lilac", + "rose_bush", + "peony", + "tall_grass", + "large_fern", + "white_stained_glass", + "orange_stained_glass", + "magenta_stained_glass", + "light_blue_stained_glass", + "yellow_stained_glass", + "lime_stained_glass", + "pink_stained_glass", + "gray_stained_glass", + "light_gray_stained_glass", + "cyan_stained_glass", + "purple_stained_glass", + "blue_stained_glass", + "brown_stained_glass", + "green_stained_glass", + "red_stained_glass", + "black_stained_glass", + "white_stained_glass_pane", + "orange_stained_glass_pane", + "magenta_stained_glass_pane", + "light_blue_stained_glass_pane", + "yellow_stained_glass_pane", + "lime_stained_glass_pane", + "pink_stained_glass_pane", + "gray_stained_glass_pane", + "light_gray_stained_glass_pane", + "cyan_stained_glass_pane", + "purple_stained_glass_pane", + "blue_stained_glass_pane", + "brown_stained_glass_pane", + "green_stained_glass_pane", + "red_stained_glass_pane", + "black_stained_glass_pane", + "prismarine", + "prismarine_bricks", + "dark_prismarine", + "prismarine_stairs", + "prismarine_brick_stairs", + "dark_prismarine_stairs", + "sea_lantern", + "red_sandstone", + "chiseled_red_sandstone", + "cut_red_sandstone", + "red_sandstone_stairs", + "repeating_command_block", + "chain_command_block", + "magma_block", + "nether_wart_block", + "red_nether_bricks", + "bone_block", + "structure_void", + "observer", + "shulker_box", + "white_shulker_box", + "orange_shulker_box", + "magenta_shulker_box", + "light_blue_shulker_box", + "yellow_shulker_box", + "lime_shulker_box", + "pink_shulker_box", + "gray_shulker_box", + "light_gray_shulker_box", + "cyan_shulker_box", + "purple_shulker_box", + "blue_shulker_box", + "brown_shulker_box", + "green_shulker_box", + "red_shulker_box", + "black_shulker_box", + "white_glazed_terracotta", + "orange_glazed_terracotta", + "magenta_glazed_terracotta", + "light_blue_glazed_terracotta", + "yellow_glazed_terracotta", + "lime_glazed_terracotta", + "pink_glazed_terracotta", + "gray_glazed_terracotta", + "light_gray_glazed_terracotta", + "cyan_glazed_terracotta", + "purple_glazed_terracotta", + "blue_glazed_terracotta", + "brown_glazed_terracotta", + "green_glazed_terracotta", + "red_glazed_terracotta", + "black_glazed_terracotta", + "white_concrete", + "orange_concrete", + "magenta_concrete", + "light_blue_concrete", + "yellow_concrete", + "lime_concrete", + "pink_concrete", + "gray_concrete", + "light_gray_concrete", + "cyan_concrete", + "purple_concrete", + "blue_concrete", + "brown_concrete", + "green_concrete", + "red_concrete", + "black_concrete", + "white_concrete_powder", + "orange_concrete_powder", + "magenta_concrete_powder", + "light_blue_concrete_powder", + "yellow_concrete_powder", + "lime_concrete_powder", + "pink_concrete_powder", + "gray_concrete_powder", + "light_gray_concrete_powder", + "cyan_concrete_powder", + "purple_concrete_powder", + "blue_concrete_powder", + "brown_concrete_powder", + "green_concrete_powder", + "red_concrete_powder", + "black_concrete_powder", + "turtle_egg", + "dead_tube_coral_block", + "dead_brain_coral_block", + "dead_bubble_coral_block", + "dead_fire_coral_block", + "dead_horn_coral_block", + "tube_coral_block", + "brain_coral_block", + "bubble_coral_block", + "fire_coral_block", + "horn_coral_block", + "tube_coral", + "brain_coral", + "bubble_coral", + "fire_coral", + "horn_coral", + "tube_coral_fan", + "brain_coral_fan", + "bubble_coral_fan", + "fire_coral_fan", + "horn_coral_fan", + "dead_tube_coral_fan", + "dead_brain_coral_fan", + "dead_bubble_coral_fan", + "dead_fire_coral_fan", + "dead_horn_coral_fan", + "blue_ice", + "conduit", + "iron_door", + "oak_door", + "spruce_door", + "birch_door", + "jungle_door", + "acacia_door", + "dark_oak_door", + "repeater", + "comparator", + "structure_block", + "turtle_helmet", + "scute", + "iron_shovel", + "iron_pickaxe", + "iron_axe", + "flint_and_steel", + "apple", + "bow", + "arrow", + "coal", + "charcoal", + "diamond", + "iron_ingot", + "gold_ingot", + "iron_sword", + "wooden_sword", + "wooden_shovel", + "wooden_pickaxe", + "wooden_axe", + "stone_sword", + "stone_shovel", + "stone_pickaxe", + "stone_axe", + "diamond_sword", + "diamond_shovel", + "diamond_pickaxe", + "diamond_axe", + "stick", + "bowl", + "mushroom_stew", + "golden_sword", + "golden_shovel", + "golden_pickaxe", + "golden_axe", + "string", + "feather", + "gunpowder", + "wooden_hoe", + "stone_hoe", + "iron_hoe", + "diamond_hoe", + "golden_hoe", + "wheat_seeds", + "wheat", + "bread", + "leather_helmet", + "leather_chestplate", + "leather_leggings", + "leather_boots", + "chainmail_helmet", + "chainmail_chestplate", + "chainmail_leggings", + "chainmail_boots", + "iron_helmet", + "iron_chestplate", + "iron_leggings", + "iron_boots", + "diamond_helmet", + "diamond_chestplate", + "diamond_leggings", + "diamond_boots", + "golden_helmet", + "golden_chestplate", + "golden_leggings", + "golden_boots", + "flint", + "porkchop", + "cooked_porkchop", + "painting", + "golden_apple", + "enchanted_golden_apple", + "sign", + "bucket", + "water_bucket", + "lava_bucket", + "minecart", + "saddle", + "redstone", + "snowball", + "oak_boat", + "leather", + "milk_bucket", + "pufferfish_bucket", + "salmon_bucket", + "cod_bucket", + "tropical_fish_bucket", + "brick", + "clay_ball", + "sugar_cane", + "kelp", + "dried_kelp_block", + "paper", + "book", + "slime_ball", + "chest_minecart", + "furnace_minecart", + "egg", + "compass", + "fishing_rod", + "clock", + "glowstone_dust", + "cod", + "salmon", + "tropical_fish", + "pufferfish", + "cooked_cod", + "cooked_salmon", + "ink_sac", + "rose_red", + "cactus_green", + "cocoa_beans", + "lapis_lazuli", + "purple_dye", + "cyan_dye", + "light_gray_dye", + "gray_dye", + "pink_dye", + "lime_dye", + "dandelion_yellow", + "light_blue_dye", + "magenta_dye", + "orange_dye", + "bone_meal", + "bone", + "sugar", + "cake", + "white_bed", + "orange_bed", + "magenta_bed", + "light_blue_bed", + "yellow_bed", + "lime_bed", + "pink_bed", + "gray_bed", + "light_gray_bed", + "cyan_bed", + "purple_bed", + "blue_bed", + "brown_bed", + "green_bed", + "red_bed", + "black_bed", + "cookie", + "filled_map", + "shears", + "melon_slice", + "dried_kelp", + "pumpkin_seeds", + "melon_seeds", + "beef", + "cooked_beef", + "chicken", + "cooked_chicken", + "rotten_flesh", + "ender_pearl", + "blaze_rod", + "ghast_tear", + "gold_nugget", + "nether_wart", + "potion", + "glass_bottle", + "spider_eye", + "fermented_spider_eye", + "blaze_powder", + "magma_cream", + "brewing_stand", + "cauldron", + "ender_eye", + "glistering_melon_slice", + "bat_spawn_egg", + "blaze_spawn_egg", + "cave_spider_spawn_egg", + "chicken_spawn_egg", + "cod_spawn_egg", + "cow_spawn_egg", + "creeper_spawn_egg", + "dolphin_spawn_egg", + "donkey_spawn_egg", + "drowned_spawn_egg", + "elder_guardian_spawn_egg", + "enderman_spawn_egg", + "endermite_spawn_egg", + "evoker_spawn_egg", + "ghast_spawn_egg", + "guardian_spawn_egg", + "horse_spawn_egg", + "husk_spawn_egg", + "llama_spawn_egg", + "magma_cube_spawn_egg", + "mooshroom_spawn_egg", + "mule_spawn_egg", + "ocelot_spawn_egg", + "parrot_spawn_egg", + "phantom_spawn_egg", + "pig_spawn_egg", + "polar_bear_spawn_egg", + "pufferfish_spawn_egg", + "rabbit_spawn_egg", + "salmon_spawn_egg", + "sheep_spawn_egg", + "shulker_spawn_egg", + "silverfish_spawn_egg", + "skeleton_spawn_egg", + "skeleton_horse_spawn_egg", + "slime_spawn_egg", + "spider_spawn_egg", + "squid_spawn_egg", + "stray_spawn_egg", + "tropical_fish_spawn_egg", + "turtle_spawn_egg", + "vex_spawn_egg", + "villager_spawn_egg", + "vindicator_spawn_egg", + "witch_spawn_egg", + "wither_skeleton_spawn_egg", + "wolf_spawn_egg", + "zombie_spawn_egg", + "zombie_horse_spawn_egg", + "zombie_pigman_spawn_egg", + "zombie_villager_spawn_egg", + "experience_bottle", + "fire_charge", + "writable_book", + "written_book", + "emerald", + "item_frame", + "flower_pot", + "carrot", + "potato", + "baked_potato", + "poisonous_potato", + "map", + "golden_carrot", + "skeleton_skull", + "wither_skeleton_skull", + "player_head", + "zombie_head", + "creeper_head", + "dragon_head", + "carrot_on_a_stick", + "nether_star", + "pumpkin_pie", + "firework_rocket", + "firework_star", + "enchanted_book", + "nether_brick", + "quartz", + "tnt_minecart", + "hopper_minecart", + "prismarine_shard", + "prismarine_crystals", + "rabbit", + "cooked_rabbit", + "rabbit_stew", + "rabbit_foot", + "rabbit_hide", + "armor_stand", + "iron_horse_armor", + "golden_horse_armor", + "diamond_horse_armor", + "lead", + "name_tag", + "command_block_minecart", + "mutton", + "cooked_mutton", + "white_banner", + "orange_banner", + "magenta_banner", + "light_blue_banner", + "yellow_banner", + "lime_banner", + "pink_banner", + "gray_banner", + "light_gray_banner", + "cyan_banner", + "purple_banner", + "blue_banner", + "brown_banner", + "green_banner", + "red_banner", + "black_banner", + "end_crystal", + "chorus_fruit", + "popped_chorus_fruit", + "beetroot", + "beetroot_seeds", + "beetroot_soup", + "dragon_breath", + "splash_potion", + "spectral_arrow", + "tipped_arrow", + "lingering_potion", + "shield", + "elytra", + "spruce_boat", + "birch_boat", + "jungle_boat", + "acacia_boat", + "dark_oak_boat", + "totem_of_undying", + "shulker_shell", + "iron_nugget", + "knowledge_book", + "debug_stick", + "music_disc_13", + "music_disc_cat", + "music_disc_blocks", + "music_disc_chirp", + "music_disc_far", + "music_disc_mall", + "music_disc_mellohi", + "music_disc_stal", + "music_disc_strad", + "music_disc_ward", + "music_disc_11", + "music_disc_wait", + "trident", + "phantom_membrane", + "nautilus_shell", + "heart_of_the_sea", + "smooth_stone_slab", + "dead_brain_coral", + "dead_bubble_coral", + "dead_fire_coral", + "dead_horn_coral", + "dead_tube_coral", + "oak_sign", + "red_dye", + "green_dye", + "yellow_dye", + "cornflower", + "lily_of_the_valley", + "wither_rose", + "cut_sandstone_slab", + "cut_red_sandstone_slab", + "brick_wall", + "prismarine_wall", + "red_sandstone_wall", + "mossy_stone_brick_wall", + "granite_wall", + "stone_brick_wall", + "nether_brick_wall", + "andesite_wall", + "red_nether_brick_wall", + "sandstone_wall", + "end_stone_brick_wall", + "diorite_wall", + "polished_granite_stairs", + "smooth_red_sandstone_stairs", + "mossy_stone_brick_stairs", + "polished_diorite_stairs", + "mossy_cobblestone_stairs", + "end_stone_brick_stairs", + "stone_stairs", + "smooth_sandstone_stairs", + "smooth_quartz_stairs", + "granite_stairs", + "andesite_stairs", + "red_nether_brick_stairs", + "polished_andesite_stairs", + "diorite_stairs", + "polished_granite_slab", + "smooth_red_sandstone_slab", + "mossy_stone_brick_slab", + "polished_diorite_slab", + "mossy_cobblestone_slab", + "end_stone_brick_slab", + "smooth_sandstone_slab", + "smooth_quartz_slab", + "granite_slab", + "andesite_slab", + "red_nether_brick_slab", + "polished_andesite_slab", + "diorite_slab", + "scaffolding", + "jigsaw", + "composter", + "spruce_sign", + "birch_sign", + "jungle_sign", + "acacia_sign", + "dark_oak_sign", + "bamboo", + "blue_dye", + "brown_dye", + "black_dye", + "white_dye", + "cat_spawn_egg", + "fox_spawn_egg", + "panda_spawn_egg", + "pillager_spawn_egg", + "ravager_spawn_egg", + "trader_llama_spawn_egg", + "wandering_trader_spawn_egg", + "leather_horse_armor", + "crossbow", + "suspicious_stew", + "loom", + "flower_banner_pattern", + "creeper_banner_pattern", + "skull_banner_pattern", + "mojang_banner_pattern", + "globe_banner_pattern", + "barrel", + "smoker", + "blast_furnace", + "cartography_table", + "fletching_table", + "grindstone", + "lectern", + "smithing_table", + "stonecutter", + "bell", + "lantern", + "sweet_berries", + "campfire", + "bee_spawn_egg", + "honeycomb", + "bee_nest", + "beehive", + "honey_bottle", + "honey_block", + "honeycomb_block", + "crimson_nylium", + "warped_nylium", + "crimson_planks", + "warped_planks", + "nether_gold_ore", + "crimson_stem", + "warped_stem", + "stripped_crimson_stem", + "stripped_warped_stem", + "stripped_crimson_hyphae", + "stripped_warped_hyphae", + "crimson_hyphae", + "warped_hyphae", + "crimson_fungus", + "warped_fungus", + "crimson_roots", + "warped_roots", + "nether_sprouts", + "weeping_vines", + "twisting_vines", + "crimson_slab", + "warped_slab", + "crimson_pressure_plate", + "warped_pressure_plate", + "polished_blackstone_pressure_plate", + "crimson_fence", + "warped_fence", + "soul_soil", + "basalt", + "polished_basalt", + "soul_torch", + "crimson_trapdoor", + "warped_trapdoor", + "chain", + "crimson_fence_gate", + "warped_fence_gate", + "cracked_nether_bricks", + "chiseled_nether_bricks", + "crimson_stairs", + "warped_stairs", + "blackstone_wall", + "polished_blackstone_wall", + "polished_blackstone_brick_wall", + "crimson_button", + "warped_button", + "polished_blackstone_button", + "quartz_bricks", + "warped_wart_block", + "crimson_door", + "warped_door", + "netherite_ingot", + "netherite_scrap", + "netherite_sword", + "netherite_shovel", + "netherite_pickaxe", + "netherite_axe", + "netherite_hoe", + "netherite_helmet", + "netherite_chestplate", + "netherite_leggings", + "netherite_boots", + "crimson_sign", + "warped_sign", + "hoglin_spawn_egg", + "piglin_spawn_egg", + "strider_spawn_egg", + "zoglin_spawn_egg", + "zombified_piglin_spawn_egg", + "warped_fungus_on_a_stick", + "music_disc_pigstep", + "piglin_banner_pattern", + "soul_lantern", + "soul_campfire", + "shroomlight", + "lodestone", + "netherite_block", + "ancient_debris", + "target", + "crying_obsidian", + "blackstone", + "blackstone_slab", + "blackstone_stairs", + "gilded_blackstone", + "polished_blackstone", + "polished_blackstone_slab", + "polished_blackstone_stairs", + "chiseled_polished_blackstone", + "polished_blackstone_bricks", + "polished_blackstone_brick_slab", + "polished_blackstone_brick_stairs", + "cracked_polished_blackstone_bricks", + "respawn_anchor", + "piglin_brute_spawn_egg", + "deepslate", + "cobbled_deepslate", + "polished_deepslate", + "calcite", + "tuff", + "dripstone_block", + "rooted_dirt", + "deepslate_coal_ore", + "deepslate_iron_ore", + "copper_ore", + "deepslate_copper_ore", + "deepslate_gold_ore", + "deepslate_redstone_ore", + "deepslate_emerald_ore", + "deepslate_lapis_ore", + "deepslate_diamond_ore", + "raw_iron_block", + "raw_copper_block", + "raw_gold_block", + "amethyst_block", + "budding_amethyst", + "copper_block", + "exposed_copper", + "weathered_copper", + "oxidized_copper", + "cut_copper", + "exposed_cut_copper", + "weathered_cut_copper", + "oxidized_cut_copper", + "cut_copper_stairs", + "exposed_cut_copper_stairs", + "weathered_cut_copper_stairs", + "oxidized_cut_copper_stairs", + "cut_copper_slab", + "exposed_cut_copper_slab", + "weathered_cut_copper_slab", + "oxidized_cut_copper_slab", + "waxed_copper_block", + "waxed_exposed_copper", + "waxed_weathered_copper", + "waxed_oxidized_copper", + "waxed_cut_copper", + "waxed_exposed_cut_copper", + "waxed_weathered_cut_copper", + "waxed_oxidized_cut_copper", + "waxed_cut_copper_stairs", + "waxed_exposed_cut_copper_stairs", + "waxed_weathered_cut_copper_stairs", + "waxed_oxidized_cut_copper_stairs", + "waxed_cut_copper_slab", + "waxed_exposed_cut_copper_slab", + "waxed_weathered_cut_copper_slab", + "waxed_oxidized_cut_copper_slab", + "azalea_leaves", + "flowering_azalea_leaves", + "tinted_glass", + "azalea", + "flowering_azalea", + "spore_blossom", + "moss_carpet", + "moss_block", + "hanging_roots", + "big_dripleaf", + "small_dripleaf", + "smooth_basalt", + "infested_deepslate", + "deepslate_bricks", + "cracked_deepslate_bricks", + "deepslate_tiles", + "cracked_deepslate_tiles", + "chiseled_deepslate", + "glow_lichen", + "cobbled_deepslate_wall", + "polished_deepslate_wall", + "deepslate_brick_wall", + "deepslate_tile_wall", + "light", + "dirt_path", + "cobbled_deepslate_stairs", + "polished_deepslate_stairs", + "deepslate_brick_stairs", + "deepslate_tile_stairs", + "cobbled_deepslate_slab", + "polished_deepslate_slab", + "deepslate_brick_slab", + "deepslate_tile_slab", + "lightning_rod", + "sculk_sensor", + "amethyst_shard", + "raw_iron", + "raw_copper", + "copper_ingot", + "raw_gold", + "powder_snow_bucket", + "axolotl_bucket", + "bundle", + "spyglass", + "glow_ink_sac", + "axolotl_spawn_egg", + "glow_squid_spawn_egg", + "goat_spawn_egg", + "glow_item_frame", + "glow_berries", + "candle", + "white_candle", + "orange_candle", + "magenta_candle", + "light_blue_candle", + "yellow_candle", + "lime_candle", + "pink_candle", + "gray_candle", + "light_gray_candle", + "cyan_candle", + "purple_candle", + "blue_candle", + "brown_candle", + "green_candle", + "red_candle", + "black_candle", + "small_amethyst_bud", + "medium_amethyst_bud", + "large_amethyst_bud", + "amethyst_cluster", + "pointed_dripstone", + "music_disc_otherside", + "mud", + "mangrove_planks", + "mangrove_propagule", + "mangrove_log", + "mangrove_roots", + "muddy_mangrove_roots", + "stripped_mangrove_log", + "stripped_mangrove_wood", + "mangrove_wood", + "mangrove_leaves", + "mangrove_slab", + "mud_brick_slab", + "mangrove_fence", + "packed_mud", + "mud_bricks", + "reinforced_deepslate", + "mud_brick_stairs", + "sculk", + "sculk_vein", + "sculk_catalyst", + "sculk_shrieker", + "mangrove_stairs", + "mud_brick_wall", + "mangrove_button", + "mangrove_pressure_plate", + "mangrove_door", + "mangrove_trapdoor", + "mangrove_fence_gate", + "oak_chest_boat", + "spruce_chest_boat", + "birch_chest_boat", + "jungle_chest_boat", + "acacia_chest_boat", + "dark_oak_chest_boat", + "mangrove_boat", + "mangrove_chest_boat", + "mangrove_sign", + "tadpole_bucket", + "recovery_compass", + "allay_spawn_egg", + "frog_spawn_egg", + "tadpole_spawn_egg", + "warden_spawn_egg", + "music_disc_5", + "disc_fragment_5", + "goat_horn", + "ochre_froglight", + "verdant_froglight", + "pearlescent_froglight", + "frogspawn", + "echo_shard", + "bamboo_planks", + "bamboo_mosaic", + "bamboo_block", + "stripped_bamboo_block", + "bamboo_slab", + "bamboo_mosaic_slab", + "chiseled_bookshelf", + "bamboo_fence", + "bamboo_stairs", + "bamboo_mosaic_stairs", + "bamboo_button", + "bamboo_pressure_plate", + "bamboo_door", + "bamboo_trapdoor", + "bamboo_fence_gate", + "bamboo_raft", + "bamboo_chest_raft", + "bamboo_sign", + "oak_hanging_sign", + "spruce_hanging_sign", + "birch_hanging_sign", + "jungle_hanging_sign", + "acacia_hanging_sign", + "dark_oak_hanging_sign", + "mangrove_hanging_sign", + "bamboo_hanging_sign", + "crimson_hanging_sign", + "warped_hanging_sign", + "camel_spawn_egg", + "ender_dragon_spawn_egg", + "iron_golem_spawn_egg", + "snow_golem_spawn_egg", + "wither_spawn_egg", + "piglin_head", + "cherry_planks", + "cherry_sapling", + "suspicious_sand", + "cherry_log", + "stripped_cherry_log", + "stripped_cherry_wood", + "cherry_wood", + "cherry_leaves", + "torchflower", + "pink_petals", + "cherry_slab", + "decorated_pot", + "cherry_fence", + "cherry_stairs", + "cherry_button", + "cherry_pressure_plate", + "cherry_door", + "cherry_trapdoor", + "cherry_fence_gate", + "cherry_boat", + "cherry_chest_boat", + "cherry_sign", + "cherry_hanging_sign", + "sniffer_spawn_egg", + "torchflower_seeds", + "brush", + "netherite_upgrade_smithing_template", + "sentry_armor_trim_smithing_template", + "dune_armor_trim_smithing_template", + "coast_armor_trim_smithing_template", + "wild_armor_trim_smithing_template", + "ward_armor_trim_smithing_template", + "eye_armor_trim_smithing_template", + "vex_armor_trim_smithing_template", + "tide_armor_trim_smithing_template", + "snout_armor_trim_smithing_template", + "rib_armor_trim_smithing_template", + "spire_armor_trim_smithing_template", + "pottery_shard_archer", + "pottery_shard_prize", + "pottery_shard_arms_up", + "pottery_shard_skull", + "suspicious_gravel", + "pitcher_plant", + "sniffer_egg", + "calibrated_sculk_sensor", + "pitcher_pod", + "music_disc_relic", + "wayfinder_armor_trim_smithing_template", + "shaper_armor_trim_smithing_template", + "silence_armor_trim_smithing_template", + "raiser_armor_trim_smithing_template", + "host_armor_trim_smithing_template", + "angler_pottery_sherd", + "archer_pottery_sherd", + "arms_up_pottery_sherd", + "blade_pottery_sherd", + "brewer_pottery_sherd", + "burn_pottery_sherd", + "danger_pottery_sherd", + "explorer_pottery_sherd", + "friend_pottery_sherd", + "heart_pottery_sherd", + "heartbreak_pottery_sherd", + "howl_pottery_sherd", + "miner_pottery_sherd", + "mourner_pottery_sherd", + "plenty_pottery_sherd", + "prize_pottery_sherd", + "sheaf_pottery_sherd", + "shelter_pottery_sherd", + "skull_pottery_sherd", + "snort_pottery_sherd", + "tuff_slab", + "tuff_stairs", + "tuff_wall", + "chiseled_tuff", + "polished_tuff", + "polished_tuff_slab", + "polished_tuff_stairs", + "polished_tuff_wall", + "tuff_bricks", + "tuff_brick_slab", + "tuff_brick_stairs", + "tuff_brick_wall", + "chiseled_tuff_bricks", + "chiseled_copper", + "exposed_chiseled_copper", + "weathered_chiseled_copper", + "oxidized_chiseled_copper", + "waxed_chiseled_copper", + "waxed_exposed_chiseled_copper", + "waxed_weathered_chiseled_copper", + "waxed_oxidized_chiseled_copper", + "short_grass", + "copper_door", + "exposed_copper_door", + "weathered_copper_door", + "oxidized_copper_door", + "waxed_copper_door", + "waxed_exposed_copper_door", + "waxed_weathered_copper_door", + "waxed_oxidized_copper_door", + "copper_trapdoor", + "exposed_copper_trapdoor", + "weathered_copper_trapdoor", + "oxidized_copper_trapdoor", + "waxed_copper_trapdoor", + "waxed_exposed_copper_trapdoor", + "waxed_weathered_copper_trapdoor", + "waxed_oxidized_copper_trapdoor", + "crafter", + "breeze_spawn_egg", + "copper_grate", + "exposed_copper_grate", + "weathered_copper_grate", + "oxidized_copper_grate", + "waxed_copper_grate", + "waxed_exposed_copper_grate", + "waxed_weathered_copper_grate", + "waxed_oxidized_copper_grate", + "copper_bulb", + "exposed_copper_bulb", + "weathered_copper_bulb", + "oxidized_copper_bulb", + "waxed_copper_bulb", + "waxed_exposed_copper_bulb", + "waxed_weathered_copper_bulb", + "waxed_oxidized_copper_bulb", + "trial_spawner", + "trial_key", + "heavy_core", + "turtle_scute", + "armadillo_scute", + "wolf_armor", + "armadillo_spawn_egg", + "bogged_spawn_egg", + "wind_charge", + "mace", + "flow_banner_pattern", + "guster_banner_pattern", + "flow_armor_trim_smithing_template", + "bolt_armor_trim_smithing_template", + "flow_pottery_sherd", + "guster_pottery_sherd", + "scrape_pottery_sherd", + "ominous_trial_key", + "vault", + "ominous_bottle", + "breeze_rod", + "soul_fire_torch", + "soul_fire_lantern", + "netherite_stairs", + "book_box", + "footprint", + "cursor", + "fine_item", + "red_key", + "blue_key", + "yellow_key", + "3d" + ], + "particles": [ + "ambient_entity_effect", + "angry_villager", + "barrier", + "block", + "bubble", + "cloud", + "crit", + "damage_indicator", + "dragon_breath", + "dripping_lava", + "dripping_water", + "dust", + "effect", + "elder_guardian", + "enchanted_hit", + "enchant", + "end_rod", + "entity_effect", + "explosion_emitter", + "explosion", + "falling_dust", + "firework", + "fishing", + "flame", + "happy_villager", + "heart", + "instant_effect", + "item", + "item_slime", + "item_snowball", + "large_smoke", + "lava", + "mycelium", + "note", + "poof", + "portal", + "rain", + "smoke", + "spit", + "squid_ink", + "sweep_attack", + "totem_of_undying", + "underwater", + "splash", + "witch", + "bubble_pop", + "current_down", + "bubble_column_up", + "nautilus", + "dolphin", + "falling_lava", + "landing_lava", + "falling_water", + "flash", + "composter", + "sneeze", + "campfire_cosy_smoke", + "campfire_signal_smoke", + "dripping_honey", + "falling_honey", + "landing_honey", + "falling_nectar", + "soul_fire_flame", + "soul", + "ash", + "crimson_spore", + "warped_spore", + "dripping_obsidian_tear", + "falling_obsidian_tear", + "landing_obsidian_tear", + "reverse_portal", + "white_ash", + "light", + "dust_color_transition", + "vibration", + "falling_spore_blossom", + "spore_blossom_air", + "small_flame", + "snowflake", + "dripping_dripstone_lava", + "falling_dripstone_lava", + "dripping_dripstone_water", + "falling_dripstone_water", + "glow_squid_ink", + "glow", + "wax_on", + "wax_off", + "electric_spark", + "scrape", + "block_marker", + "sonic_boom", + "sculk_soul", + "sculk_charge", + "sculk_charge_pop", + "shriek", + "dripping_cherry_leaves", + "falling_cherry_leaves", + "landing_cherry_leaves", + "cherry_leaves", + "egg_crack", + "gust", + "gust_emitter", + "white_smoke", + "dust_plume", + "gust_dust", + "trial_spawner_detection", + "small_gust", + "gust_emitter_large", + "gust_emitter_small", + "infested", + "item_cobweb", + "trial_spawner_detection_ominous", + "vault_connection", + "dust_pillar", + "ominous_spawning", + "raid_omen", + "trial_omen" + ], + "entities": [ + "area_effect_cloud", + "armor_stand", + "arrow", + "axolotl", + "bat", + "bee", + "blaze", + "boat", + "cat", + "cave_spider", + "chicken", + "cod", + "cow", + "creeper", + "dolphin", + "donkey", + "dragon_fireball", + "drowned", + "elder_guardian", + "end_crystal", + "ender_dragon", + "enderman", + "endermite", + "evoker", + "evoker_fangs", + "experience_orb", + "eye_of_ender", + "falling_block", + "firework_rocket", + "fox", + "ghast", + "giant", + "glow_item_frame", + "glow_squid", + "goat", + "guardian", + "hoglin", + "horse", + "husk", + "illusioner", + "iron_golem", + "item", + "item_frame", + "fireball", + "leash_knot", + "lightning_bolt", + "llama", + "llama_spit", + "magma_cube", + "marker", + "minecart", + "chest_minecart", + "command_block_minecart", + "furnace_minecart", + "hopper_minecart", + "spawner_minecart", + "tnt_minecart", + "mule", + "mooshroom", + "ocelot", + "painting", + "panda", + "parrot", + "phantom", + "pig", + "piglin", + "piglin_brute", + "pillager", + "polar_bear", + "tnt", + "pufferfish", + "rabbit", + "ravager", + "salmon", + "sheep", + "shulker", + "shulker_bullet", + "silverfish", + "skeleton", + "skeleton_horse", + "slime", + "small_fireball", + "snow_golem", + "snowball", + "spectral_arrow", + "spider", + "squid", + "stray", + "strider", + "egg", + "ender_pearl", + "experience_bottle", + "potion", + "trident", + "trader_llama", + "tropical_fish", + "turtle", + "vex", + "villager", + "vindicator", + "wandering_trader", + "witch", + "wither", + "wither_skeleton", + "wither_skull", + "wolf", + "zoglin", + "zombie", + "zombie_horse", + "zombie_villager", + "zombified_piglin", + "player", + "fishing_bobber", + "allay", + "chest_boat", + "frog", + "tadpole", + "warden", + "camel", + "block_display", + "interaction", + "item_display", + "sniffer", + "text_display", + "breeze", + "wind_charge", + "armadillo", + "bogged", + "breeze_wind_charge", + "ominous_item_spawner", + "zombie_pigman" + ], + "argumenttypes": [ + "brigadier:bool", + "brigadier:float", + "brigadier:double", + "brigadier:integer", + "brigadier:long", + "brigadier:string", + "entity", + "game_profile", + "block_pos", + "column_pos", + "vec3", + "vec2", + "block_state", + "block_predicate", + "item_stack", + "item_predicate", + "color", + "component", + "message", + "nbt_compound_tag", + "nbt_tag", + "nbt_path", + "objective", + "objective_criteria", + "operation", + "particle", + "angle", + "rotation", + "scoreboard_slot", + "score_holder", + "swizzle", + "team", + "item_slot", + "resource_location", + "mob_effect", + "function", + "entity_anchor", + "int_range", + "float_range", + "item_enchantment", + "entity_summon", + "dimension", + "time", + "uuid", + "resource", + "resource_or_tag", + "template_mirror", + "template_rotation", + "gamemode", + "resource_or_tag_key", + "resource_key", + "heightmap", + "style", + "item_slots", + "loot_table", + "loot_predicate", + "loot_modifier" + ], + "recipe_serializers": [ + "crafting_shaped", + "crafting_shapeless", + "crafting_special_armordye", + "crafting_special_bookcloning", + "crafting_special_mapcloning", + "crafting_special_mapextending", + "crafting_special_firework_rocket", + "crafting_special_firework_star", + "crafting_special_firework_star_fade", + "crafting_special_tippedarrow", + "crafting_special_bannerduplicate", + "crafting_special_shielddecoration", + "crafting_special_shulkerboxcoloring", + "crafting_special_suspiciousstew", + "crafting_special_repairitem", + "smelting", + "blasting", + "smoking", + "campfire_cooking", + "stonecutting", + "smithing_transform", + "smithing_trim", + "crafting_decorated_pot" + ], + "data_component_type": [ + "custom_data", + "max_stack_size", + "max_damage", + "damage", + "unbreakable", + "custom_name", + "item_name", + "lore", + "rarity", + "enchantments", + "can_place_on", + "can_break", + "attribute_modifiers", + "custom_model_data", + "hide_additional_tooltip", + "hide_tooltip", + "repair_cost", + "creative_slot_lock", + "enchantment_glint_override", + "intangible_projectile", + "food", + "fire_resistant", + "tool", + "stored_enchantments", + "dyed_color", + "map_color", + "map_id", + "map_decorations", + "map_post_processing", + "charged_projectiles", + "bundle_contents", + "potion_contents", + "suspicious_stew_effects", + "writable_book_content", + "written_book_content", + "trim", + "debug_stick_state", + "entity_data", + "bucket_entity_data", + "block_entity_data", + "instrument", + "ominous_bottle_amplifier", + "recipes", + "lodestone_tracker", + "firework_explosion", + "fireworks", + "profile", + "note_block_sound", + "banner_patterns", + "base_color", + "pot_decorations", + "container", + "block_state", + "bees", + "lock", + "container_loot" + ] +} \ No newline at end of file diff --git a/output/backwards/mappings-1.20.5to1.20.3.nbt b/output/backwards/mappings-1.20.5to1.20.3.nbt index 9cf244d32407b9927852be8bebe091cf07564da5..d977aac535b976f11958e344d2908de93bc07be0 100644 GIT binary patch delta 1725 zcmZ`(O^6&t6n=5DFgYc&JF~kpv+J%qBX~#(G&ux9HVG<(D1;pRyV%ss)J(Ti)77c2 znau>k+=F=OYcBo-L=PGS3FH*aMZD-qJSd0<&w>Xp62I=M?%j4L10U1%-uGU;-}>>| zmp8utwRW6{-b{Y4ZQ$eh-^stV%^E(w1s(#AfqTGr$(j1*IZ)pM-UHqR-T~ewI`$IL zb6?>9Bj6%%1-J}c0``(S_0Aj~TEG_21o1Q}Z7{~s=_s8Ho zdFp;R-v>T}?p1L1QZde-0-wOg$ex$sgI>q^5o~{Qrr=Q(Q7!)f-wzz|{x>hLRZq;< zMQ8#uWBitq%19RUrSN#5D^%-B)f=%XpGd=a&jeF$1QmQK`HTfdjJ;tn6=8)|OZ;&+ zfM;5H)K3SXT=^qL!6~!uUeNt!K}fGP%3G)!1->23m#QP)RXn+!)>) zC7*9!n>QDm54e;SI(cxPVSZq!v6u~2h1L&~gD@7_cxjrnW)(dZMM8Uhr8HAfn)qf{ zo;|44Aro)F14-+tHRE~=195W_M4p*wBSrGs&MR*`Bkf4?o~Y2N!?DChMD&b2Q(f}m z&TehhRVfaG!9Zx1DZbkIe!i0TS!=b=VqYobT6e;(8V*H2Z&1%LlKJI@onmN<8;jBUUx2YMxGn<0 zNkqsUvV$A@DjbO!`(QGTsOp0Am5xOwLJyp5JdsvJ)uXgzZ};3vF3$RG2RGim-fAA{ ze=+1qwOwo2`FD$Ar_1g{^4o6Xg4-1*xAW{a6M0N$UQc1Q(xG<4;+T-YdvmqyH=C>E zbh~l2>^H3}x|>Bh#^|wl%ws=&2k3d1KTKyBD7$lP6k_7L>Gr+fZf>_0a$+XxLdl%fQ^4nYr?g3K~yYf6}*XJA7q^!2tl)Yt{=Zjya zmzS-lvfI;&x~HJb&K`-pdL2tn+d>ONNj1rd&Y!KO%R9zxsBEN6fW@*?@>geTBY#(8 feoXo$Z&{jqOABIVc0-KVUKc z1wukXVt|#U?b59*Rn`BZOGTgKBeAUvz2V;Zd*A!+d+&Vp;d}e$r}F9|49pG_GNsO@kf^Tzh^>9y|lh`C*wn* zwu~-I-?HHCZnZquA+tm=TyFMgpGB^q%oI+a2_TqQ%q2X-0be9|Ig1+suwH_$WKq-Q zA?TqU2>}5i@tW3Fk@Gssu^m*4ueG%)693XP+?Q&5Rb(w>S)qUvq+QnDBH?T8OB)F) z8gayc8ob*Di?Xq`#eBvBChWvqC6C)tklek!QAN>D8`?Xh6iP!I7&;%9THNo!fPRiV z^n)g)q8GU!!FayjLcQbq5$^Z()fUp!v=y2|m?;Jl9L%WT)@)pw*90sq4i_HxJZ=s- znUAh+jJz&FaOKHA9c252)R&3TYuba22c$*hYrtJRAbE*5qzkbW8?hA!ag-1*onXUG kuu&)3M1>jHRJm5pl{>xehvFLjxpM!5xV3}qH;5H{0KerNlmGw# literal 582 zcmYjO+j8SD2<5@fZIev)VSi+QNP{J8Gr^LIP~H4}sox|Y-aD-z!_hdBH@IS)^x@uF1SeA152(rw^n)aShuu(zK?r&;sRro0vcWCj z(yATDz#c6rT!P}1q8pUZ<}Ku$IZjUS9pU;Du4wJ=F4SVM`<6fwNZnLX17m~>ML%OS z3T|#>`&YPu;53D;;P(iB=_5-j+~{dx+X#+7DL9WPvMKrEJdCWgCcVRcuq SCg-H0D`zN0Q_f(-zyJW>xfF*0 literal 582 zcmYjO+j8SD2<5@fZIev)VSi+QNP{J8Gr^LIP~H4}sox|Y-aD-z!_hdBH@IS)^x@uF1SeA152(rw^n)aShuu(zK?r&;sRro0vcWCj z(yATDz#c6rT!P}1q8pUZ<}Ku$IZjUS9pU;Du4wJ=F4SVM`<6fwNZnLX17m~>ML%OS z3T|#>`&YPu;53D;;P(iB=_5-j+~{dx+X#+7DL9WPvMKrEJdCWgCcVRc{eLi- znA}t-sU1sLMjjj3#1{6jj~|Jla&B>tH~dO&1SJ^82ohMpBG$ot?hbZwfFoSs64$r^ z^SKXr!ZTj*ig$eA6JL_4M+1^g?`g2Hq63?G0qk3 zr+2g(gDg->N2#5&hW61q%Kyw59iroui!l@QkWSKLIz>-tlAh9OdPZmHIi01CbdJX< z&8AkuV1CIjeju$DJ&<|}4;14J9?DRT3fOaV8ES+*a~s&Z;)TnxgF0XbcEbMd0*6yK LIIw!qin#O#nTSR? literal 695 zcmYk4+mhQb2!^?^b83=Fr?W59m(gGe+e{>(>acG5^u;;tUf2eN;OD~!fIaLJ=E~Mn z*#W?B_`onQ#cK57dNVYRWGkF8PWfg&*?XKQ!*;-&S&e@1Vz00n+Aw&6-g;>cI-9w| z#bMBF!_l$DDj7~L<0R1xnXt~Q%PDc3jK@!euN>+JkaU9f83(<}GkcCM8Q zo0nShj*Z(uI%=T zXIdm*VLNh}RWS6U$Dl0qQ)W2Nn9?_Ndn+MHS&Q~FDSbF|ELG*bV0T<8z+rux;#o_b z9(I&vP(<*jJ`EGEBH~dPL9|ah|Ai|i#JXXQ)S)16xF7|PX zGo0fBSGdMK9`J-`yxnNKr^>l+a&~IAC z=GlO0rkAvb-qLdP@h6pZi1NLupxv~J@}3!{{d9?D=?LYp%qZQXWAuQI(?dEzk0_h9 zj_DLVq0{t{&LG956(%DoH#Qr0@-I%yc^9Xy+{Fc%$3_u~Q3CG_I3RIA^5$;>b10NM YC~r|KyoGJ>p4-8o>Hx#56O9N-f0>s_s{jB1 literal 757 zcmYjPS(4*02<5}hHc2W|Q+=JeiV92ErlM`Mw8wq=#&MkVhh;zr9*=hdIKnYvDy%K# z0|5Mm4|E-qFG@Zxv!cEyUEqp-NVEE6YjL0i`wmlLG1|@seTQ9FyUr4{+JI6H!!H3d%}vMd~;edR4udm$^=2P+AG!<@lJcow(=`PV4?v3=z({rnE@N zgvrD0d831^&Z`>X;IS6AHN)Nn8-+6XqtV5MNToxbpM!n8f|&=8_8ERFVGN$;w-TQ2 PCY#m0ZaVQIV@&W3Q_Te} diff --git a/output/identifiers-1.16.2.nbt b/output/identifiers-1.16.2.nbt index df5f7f47e93dc8b4e0bc70cb78a45f31334a96da..b9126757924618948f2d92ca58996ad8d7d9cec3 100644 GIT binary patch literal 1394 zcmZA1U98u090%~v@B8VDPPECWgpQ45DWoTPib!D#QIw4{=WoswM;%WI!=hQtDKrgZ zOnJI6N|H*Z%!P-cxnR0*(TthdC~myI$GYj_wfFD;@caFLpNIdiJ)%9@x_euTmSnUq z>g?%hb3<`?8Wg3oHzN8tjKLhmP)_6|#xRyMnaJ6k%XBX0 zUY79y%Xy3yJjE(j^EA)!EHCgPpYj=>vzzbvfj#Wy7xu9~qA3huAcGjeah!mAYfk43 zCNq^8T*4c?8R7IOZ5)B`mkCVbEPTJ5gIbDn%4J;66~K8xu$-k{-yd;{i(j}huTtYxz#fD z-X8tSl=nyrl}ly4sb#W5-Y-YV2j!{qAz5$Y5jjN~Y%G+^6*mj7$&dsULEiq@;-UB zG@GnTzCyk)AD44wpWMW^%=6kZ=e2T;tbM)C@yl|))T7)i^}nbk^{2cox5(Q21@b#- z;q!2=$Kt2^&n~uMcXB(6+2J8Ju%~lzZ}&|LTL(YL;?9E}WHIx=gUq#^`TxVL9uH;& r{s2*TW+WYqWgJtPc3^Sq3FE03n1Fv(oX12oFD79KF_}?JVOqq0!04!p literal 911 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%0DfWRr$AN;_}TEn$d-PGLw@ZP~j;0l26z# Gg#Q2rfFtk# literal 1181 zcmZuw+j5&Q5Z#%AZ5*2>({a*Y>yu^?3uvrcC1K)zeOF-YB<%yR7cIMc&e0yAg34n^ zN@|Kb0QdzbG>syg1V1WW1$7*_=N1hY31wR)F}VQ8Hem0pXaZpxva7sTwig;N2!{@}es~(WZq3#AqZ1}> ze_YQlZqbf0!70CmblL@x0@|pOauzo0E~Hxuq8~A|3N0MT$^mVnRt!Au_U2}z6~VRn zz(*`z=-q1<`Imx>N_mXx9(qhakFx7jpvi?ZY&#VP-UG@`qapYn-Ka%QizQIxz?_W( z)B}3|0q;sW<6X?X%7K_NsFjV0r(PK6@QPaWpdAOh!c?) zm=dxUo)iDa2-k_xw%5G*o(&2MQ=8~D@}lLWk{n>a2uFD5;ULElvIJWn9k8y zF?!fp9Fx*xgl+4zXHemXMB`^HrHj|wVyAmBs@|f$g&z_coTckSLN|BS+v3)%z${+_ z3~*Zg$k32r*~jP%e9OBWS?(sXEan^>CJdfMwRkU|3IwVEuXi!KCaSDOk(k>@k1yeM zvd`f<(1k)I#%|`Snpnjo@<30~Fx@wORgvjusWIhm_r}?XiE&u2-s`&Em-x^B6f8Wx r{adjl>R!7^Jj79CA2t)d3%-ln`P+3+lV)Ipk_;2_HQ7WN&=dRx5K*A_ diff --git a/output/identifiers-1.18.nbt b/output/identifiers-1.18.nbt index d40bb7ce48ccb7cec19a44a59964a594a9419362..26eeb3a801e249b4b499d2d80d008a7b3227e455 100644 GIT binary patch literal 2707 zcmZYBX|R@400;2%obyE8iX=j*Ys;Ec(rPJ^NGOusRhPLc-RdUFIt|JmQ6Vz+ZR}Io z3RyFVO2$(5eGFzo*57#2(fNtN}-(a&x&#OZdBJ$J7)b|8x5@NTKuuHiana|3gk&l5b!(=6ddmhu{Jv78mG&PQeHFXW5&aapDSD%WVsG?N=%5(DP=;|VCvXxca|*gB8n~G0 zT*@LA^Lz-=`Qw)CKv(o0^%@UiAO~{@gBZ+V9L^C8!MWp+9EEF$M>Cvba6R!jj>mPy z6LD?PwZ$4-UmQUlqZp0xi(@f!XBKm~k(-#y&D_H6 z+`*mP&4WC|!#u)cJkA0Z@+5kSdWuVUfme7Hb0NOY8@$bO-sOE(WBjA>Pl19BXpA|K z%z@OLO=-pE82{9kt!Ym+=0MsR&rI4Cb0L`v$+MF>;n_)@F*j0I_M{ueFZG}&z0hqs z9sMT#CjF)}n9LN;LC5KQ^qh2@rg0gUa|KtT?{p1%O?pjwO}C-fbQd~J_i`WiquZq0 zq}!y&q`&kg%lI*bQaNQwBbu-YEzwK4CAuivp^s7@NPaFqmVMgDC~OsTNo0ZHyDxZgZ+LO$8sOgZz1cVXX`k2S5ghDuC);&U z)L~WrF(@{$E+6j&%dV|7Uf~bvxZz9IF%9Dy96Q`?-#g?F@-}&kyjuRoJfBVa;w5Rn zVhii?HO`W6$s6QB=%r}nI^BEJRdikPWft4#DY=$vaxZ!E`%bZpmDWAXemF zzF&N3zkB5xe7|tLMgIQxxQAjjZ}SUZ@~i#tm*4Ueu0KC`QLm{r`bx$>zvRm<(maXA zr0gnpL{G7^WiOEY15kF8lzYj2eRrsIjLMIJ>(4K%cp&{Tf1~bWKl<8sIL?#wm4;ZC z=XQ5F+449!MII^7kw?jCw)c?cY??1GmBZu=xq#&yZF!~~E@#Pw9OLt?@>qGNd_tP* zQ4h&D#RquAv3to!d6rjgJ5H|PciUWFdK%AOI-X}3$Vf)9h_UwTE%S4?nDI>FIbO7_ zPpAq_>TAX~)QuSZ|NmAK*Zad1hX4DADd;Ce5+zkM!?jfYL~Sfv(3W->vrx@8Y|jpu zE0sS`eWd;?e~64rWo{4p_r+K_Q9g;nDkth9^T`Z$Xo?%IoOmB;&@1~J_+Sw8gI2kK q?y>_0D!;74ehk9EheI8$dCmCKCXVq3v*GOe|Ci8n{XdwyhwwLnW;{&* literal 3006 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 By~O|k literal 3155 zcmZuz?ULgr5S*&DWy$Ncy-D3AkC96L zJyAuanxc+cg_4MFw3WulJH1PYV zwbr;nPgJyax~MyyS}%J$iB5Y}!&l6JBa>?Bs0?-!{VaW}tB0ihk{aG||6W)9j;aCxsiLeg8KM%wVEuspXe*I4b1l3@^+$woRF-4Ag}&RYY= zkoQs2KK(c~$lfUXQHo}+5uH(bj!rr1Nj1`AgPhy7|Fy9rLfYn7h}C}XWk!nZ;T)Vq4nJ8Aaf;9J%{UuH)o5)PytN}0wo$+xl}>8FcS3j_j+Rt724MotU5kgB4=|Oj7I*CVFZ+(u-=CW0LdvW zxt+j%3=V|!(umBzVxiDB17{mBc85pNXJ$p&;%bUsRNp5;AjS^2H1z%n*R_oilL}`e z@I})#u*BK(s+X(!pz^wg@~Wp6v!eBMz9AstAWDu5>H#$*lri@r!c002zVcwc0Yjt~TY7wZX7Iwt)g{lvnLqMqv- zVcBNU+%z80Ik%uzuf#JnZ;Oo8kl8p8y4pGR$pB<@c*sib8H8~iJFZi2GU7I?1m*6g zouM*c_$wM{v**xH0Sb@I7Fp2$Bb9HEH|7gsH89ebE;m|8SxcCJBC$q-!DB3ok5HqI z>_)YkfO|XX2BHu8tv5+-B_(2gq}`GO+IEl~$X{qcA`$Eit~;wpbz2F6BjY0H%~KmiPe z8>B?Y7$p#Oj@W19Dl<>*9hs*+8p`JkgY)U43y1a@a49l}X7-+e+oB}Wc^Lr==5Z3U zqjHjS)F>Ozy81H;vf}~)w1oR|u`jDJ=zap@v-?lz4JbSJC-j!?1E;xre1I7BB0^Zd zJo*8lQCuZLV1eeOy@4hpV1v4YG0yqWHv$A*Wy*ei-0lbaum7_k=kb^S zuE+z&=TjhoW5a!x&JV%roc>+MB<5NGrlER*QblOIbdYh>NUbgvy#cE82sp&M%hL86 z9c!<9*=ptg1V0U(p8d}7tKPO^GEvrPOo_i2ns5lmib<#k^-5?Y)mXUrnXzhwn^?N^L@hk zv>R0j&|NxDHLD?X06Y>=_OxRQH%e|e*5Jz4e#?HbxR18wllXaYTDRwlfP4S^ kgF*1)x_lVv@MtCb333F{0XIgC=ar}T)v(@tGxO8+Uy#{I5dZ)H diff --git a/output/identifiers-1.19.4.nbt b/output/identifiers-1.19.4.nbt index 6dc8ff5bafc16308aa0c358e48db7cec4564ba04..7ddba93dbacd2f3719a0ebb503bbe0d2d1251da4 100644 GIT binary patch literal 4215 zcmZYC2b31o6#(Fwc@Kd_>?kCnC;~yTfW4z&12rmGC<@3fxC%&Fl%{BuBogc>VxnSH z>_)+EqG+&dENCjQJhs4RbzdbiahCmJ7%;gsu4|&^dSC9TG5(1+R&D@SetcO zkM?w6V>+@Ko70US(Vgw+$qwwu&g{ZI>`NaG;ZO!Mgkw35k<=5T9>r)*pplaqZ{SU_ z5d)t<{GCcmP9Y{Sk?o0z#30sW5HW%1upQB9Ok@%<$W7RZE=(aNGnFmbja}KDq3q8z zjvyvCkVxiq_9G@6lZirhM#mUcnTb%N8zl-@q5n}A?vjH2@ zT!0w&rgS0-(U}-~6e7mH6KIWf%!oT>G&-jwB+&61r?Um|O zwq|`cpgkSf0&A-5N;lM|RF|>`>QZitdX(F<1J+`x2BjL5y>Y{o2XG+rT*`BK7>6@} zfgH^shA@nJ8W_cBPT(ZQpg!d|+(V`Nr<{Zum8Wq!YEu3T^(fV%ynqY2m}|L?d$^bT zkf-wR$Whe?ACMs*9Ityc{X7N*urTRJ6 zNoAc>##PPXT#T=>Rw`qxjIp|id0fVP+&|SXxdLmavUV!#rdr7L+`x_8#4RjhF?Vto zcVnKFc~%ed5KDNNM_9^}JjK&I!?Qfc3%tlOUgBk5;ZMBA>-?GJtl$ma#};A zcX*fg`G8f(c_rtS^;t#UKjU-0z`Cry=D$UeDiSSdO&x2oHtVwi?PyO2I~>jB=t0K5@WFL(#cF>GN)i&q^V3p?bBJD%`DVDseMxW zbPlso`!ol&PimjeN8Qs!T+Cd4&r%-cF&^g$o;2nAn}E3~2%o%DCJ z*hM_b{?kO0F1m`hh<=|3*+0{E58JnjJ;lNHoheFA(M!Bd+*yo8Y$3)&JpV@AQyfa2 z?Y%^~sJ+GX75i(q6%{F729i1F+fm$NjP@)yVt4H*^c}2gpJEo{Z7&ihi^rlkv9RL> zCOIb_nsFn>i%33Bl#e8rwFhVv)46%Ew%^qrl9!2Bpbq&?kvxoZ{q92TySSfwv@f>5 zohaAEeLSqaq4>BsoQ*hM`)TLQ7oXGKSbS9+DZXa^uf*lr_2L^uecs~(=AusVaLf8F zw-Ha^Jioirv5&+~+Kr+br3JP-+W#Ntmf8!&L`(ZO6RoGRhwaV9o{nEHj^aey)?@jA z7{@z{yNTVz1LQsO=iK6J=lnrDoPM^qbzGiH{p+swHX0A{6xVxH+ZeMo6A$<7y2bl^ zPOK?wvvBQr*+|!kA3Nu6@!z7~$IX?l(Y{KwU3|d;`{liGe(lCpkND?RKCXSQ_^ddF zi|lvZcyTDqDMxLVh+|Q+G*A0Q+fm0?#Bs=Vx?KA})TC@--f~%~S7n~n6D)DgZ$)FQ zI{D4XqFiTdu=-S-AbuuJ6wNbFLjUnF$xU41y3f0YKFSyPqhoi_o0x+-m$4S~SFUj0 zP2!vAuavJ+U$qwm*DkGXm;d9x9&7Jlob(zKjRC z!nxK*?j>%D^^&(|itTQwW7Si8Dm&PYV>^n(Ki6t+*Bc<}r#c98Og|9!XFvMVhke<{ zvBS_`?SXlOeR2O!V`tl9njlUW2io^*+cQM#Azo(UAsPRm<7FoABA#R4J>qQbYsER* zM~N4T_wo`)YtI#r5zRe6gmn}zGwD9tuAc^JUo8&SKF#(*k$AyL_lq|o$LRs_Ru(zF zo48nXPVHspDaVJ{e%Zby;zxXG+Z^-hj;TSODYj)Ok^3`5IZO4Ngt5f~KJPACTgi3O zL{8-q9&>CD&g9{uu4p}e#Kfk?kz>C9wK{pV529jt^Ve#}!oWym>R1!w`u~^eI=0)R zPPH%8PGV=e&=u>V_JI`lcn_?D_`hHKDm9rq`1g8APxR6 literal 3301 zcmZuz+mhoZ5bdh*O}5AOWNUWw8%f^sGXzOUB1VD$vd3Hb_?!k=_Ri)-g67tj)2Dk& zRM18ZQAe%9hKT;9r8Gv~=uLVhg=!jAMNt_$*0htpw_b!OhZ@_ww^v%r4{K~R^is-* zk5aTOjr^|YwKTRmi&_WA_bp0`4a-XQ3Y#m8ca^*-5uC1-r)|}#5JlQ_$m3oQs**m^ zy6SXwRs)XNn!Z-H@1cRn_s_eq2z4s2l*4`N+8WpCfmXF0&gw?T+RN4sqS0QJFcCYT z|DbAmQEf{HWuS&=N9k)V2ihsTQ285-HMGYBi}{AMgqc&)8+IO+pbr&!q@$vhy4W+6 z*yq1!O*9Gi32w!Y$MWD^x8mAJ+#?UI(9c&u?pU9 z><29xZ(BMwqaP$Lp53u*I~m~c7S=>Mw#Hrsbn8Xq5dzvKLHK9XH7!~W&1SZJ)!7#B z(y_A+8b96HSsxTFx-pz-tBo0hwgU{^=^-jFtB5HUJp9~Rqk3BKleA9{-;uC=Qe!iR zV{4QQoj4CR(!uDqi$gNq8W;gY_L8>g$B2ov?Pc3bQH>?s-Am8z-ps}qy|tn9)JLwI$C*Ime6wTZ2BI8|K}fejo6B^` zCY%*yICZ#>L=M0*7>yVnLJxpEAvz42RlqF+qMakK;c)`|DL4thKgIJ99J1R>BXTmY zres`ZTr30DZcsM*l%wk?YZ$I*AJs>kGy5e1V0(NXK-uFUXH1UUI-SR+*XXU&72eBU zilgT&c)6$#+FWMmUi467SG1l^S40U(gCxjT(&~x~1s5!@I#%#BejQ9c=D)amiuSVr zo~6arnub>2GqCaROAR~nfAZ>an$3!wlAzJ5784#;Ol2H4)<46uER`>)0F0upOeWF4 z=w0#ya7p6U+r*=E01^0`m|p-@B9&=BQCWuZsvOG_Zdqp5T~r=OI@QR4R*8peUME5; z!PBuLOto{YlL6*vf9H-oGjQX)c9^$bCDQi6GkLnGM-az5e?%ai8fOrE)iLm=DGzG!RZZA{Dl>b6$A0l;?96<87pIa`v{N`%2A zNb4yEv~0i*ioVWPp?r9F8H93Cf!^<)_$0o&#H38vIoV$m zYtG5M1OEUHp+}*iMGEq!zk%fR2+jkELh7sq=AHFi!xkRQ2mVP1R$)*IHF}Y_v`Fa= zXaR}g3VsqYMhRS=BJSzAAdN$P1Ab_Wf$|wAV2fnvl!@C6+vJ&jHG0qRuTf&@G_3$k zV?T(|(Pofi)F>a1I{gKmf#Yfb%!S)z*!wIDx*fn9S^WoqJCvW>1HjYt9@;!T+yQ`g zB7(4IKm@o3r5G>_O#B?QS0q~x@S(_H4J0DH1Ellp?S}(GYX1Z}TL#UYgNR%d<~Kfx z@0$H6K6nMv4+_3Zu_~^}AthL$-Nf+;;su8v=t9W9&1mOAK$TEA@xR`!{UrbOe-7k0 ze*5`EUN}5@ganQS&zXQf1ejo*{!PPFz*PkKiUNbgT!qR@hnkBDtkt=oS3q^_0f%^V znIM0oL+N!ZYpwjB$Z|u+$GkDzj+`EX+K$YJZx0E#8(fECNCXB1puR+_CPOpJ|HtjduO@NMNPlz@85A^0l4;5WOI1mn^#~l zk5&?;X?ms^huqrTNnC>LQJo9KL7+CkvR#VWG%0GdC#V=e$%g&j+nQhEp5-`S&vgZM tfB7U3+^lczLfYR)Nqz(!fpm}?y++&S>1`IwmKUAk?y;AS79+Q}{{ce>ebfK| diff --git a/output/identifiers-1.19.nbt b/output/identifiers-1.19.nbt index 3127b9f4e274ed9909f390e748ece743c65cb6f4..9167274f8aff0b6f3dd169c15d26a5cc963b76cb 100644 GIT binary patch literal 3444 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 diff --git a/output/identifiers-1.20.2.nbt b/output/identifiers-1.20.2.nbt index f59871f274e684aea1a326ac29cc09c92c11c3d5..5c47b3c843dca4499ca55cb85a197815e072632f 100644 GIT binary patch literal 4287 zcmZYD3*1-Z9RToi&hwDoBqBnnjEX`ol`zR=a>~vLFh_C}Ll}y_D@Wl0D#tR8299Su6PQRNC!$v66!d#}Dzo_sXQ3XYT9g-XAq!Z7 zoR{}-FUygq@+0J^GXBc=s{_y<)zQ>r4An_Y=M-izlUcZDr7tRdQR$27$IQhzsxvqf z@iy=9E`LRzR;!WwN{?0_6Z!v?FZl|+nY3uCu#wiL1ubdKdbDLjHlaP6(t$1L zL}$9N9X-&C=|Bde57S_d;7E=_z0(jzFp@EhWgL1S>Alp5-b<62$~5#v(idqavrzkV z24|x7N$r!`C$&%KFdwx~=b`pV?bC&*d%Bo~_}xg4^8~-)NuJ`jJdHY~m8eHji}Xj- zBdJGHi=-AwEs{DUbx87_-s1y4MDEi^$b0&PFOd5r_qjygv%KewoaZ`Pu`cqT+ps=r zkkue>gc@Wu$eSVWxhp%cJAE01oM$=D!D99L_w)&$fS(=$v@*N%9s8Y#t%XNs`YZ=3&gWLf>KA_iBsj zCE_B~Bi|{KN1_?x0V;mUz1(g8LdV;Q@?G4+gZ4KTJxuwBY{IejpK{L6#Aobx5Lbz# z#os%AnfQwRG2&}Pjo#*6E<&x!9zJ*9SP1htG-bNnXRF1I_8UZXN>|$6!tsAPx3s@R zOtf&klc=v^LCu}To<6@;JdWcXdr`d6v9{uJG0xjs>??K=zbF5ZN8gDBy<8z4&Ox?! z^tpW37Ep)c?X_InG1pCx+Bep$e~K@~xb91~-{CW&$KJs8;{_#MBYxzZyTnh$7@LPL zU1k3Y(RS^n;!4NWpm2Wv5o!}ZcID%?mx)h{Cvbt|u3NTuu6gCC(*xpo)GvMj;#O+s0UR^qq;KyvGkr^)K;6@!#Sk(L8HE zHtt`2Zo7#EuKTQOxJUUMFZ=8^`Vn(b^D_Fv{mNIJw^V!`_bcVAbg%M5T)WgarDvsd z-|`*YH>qX$J|E+rDXy)ywFOMg^8L04ic?u=TYuGl)P5x{a;{#~lI@9TG zTZ~08UWQ@;&5Lc%5cNa6{KSHqeHJf2xsQ03V|R=5>|ZUOZT~3od~q2saQ$CB%%NlfJ-9`o6r z%)!0$s-muF**I!aQ^V*JzWvwklr{dKDn>T{wYz0ufFv??tV?UwqYdlR9yN=#sP>0p zCvj`O!!~S7H?~8M6nZ1pr`mI_AO818(c!j-Gotyg))+wCTmfnW*jbE0#6?;mDYXG9 zOzkhdV?{}>{UsJRiGgXt+TacnJJ6dLP#-i`(T_vemqQuBXm@EnYSP###2Nv`hYBZX7VDjbC&KtY>5im zs3Gd8RoD>GzqFLb$UD7DucS~-qpBz>W5=3y()ZSj5am!~nfLZaYx!x7jfUPz8Szny zmZg#36dg)qtBa_0aD3jPv{J*5+yezX1}JOZl_?Z$r6 zqVcw+b2Iuu;@~+P%eIpN0dL_=q*H6`O~AHZG#)9SZ5jywjJl>p%cEZ_xwl8LE=5%b0 zlA#lq!A3e7-F9(Eu3G~qfXH6bHvJeek+!{Tdnu~1M7VqDIozAs`J%TrblzH6(2of8 z%2o<6rHzv?6$jJO0Yj2jj&Tf(xejr{`ZuRrjOrADeg2Emk4Wpr!DZRvrmeF^dQk!b zSZlM}ZUk9;qeDk4FUt~EuD!gb4XYqckJv0j2Yk{xbfaODk5faGqcKS7HfVF54%vi@ z!WecPA1#p+una~chsV$ZATNjxgJu(O%7AR=3~aca0Dlfn0`M>SJO&4Lduc=_^J*gF zGUH+yFn5Qs(I<|sqpab$qJ31Kac1^g1i<$AJb|*uMrKUT+dA#XqC@o7=?eGdD8D70XC)3HLN@$2C7DgVVIQna535LsH> ztZ8WVEdv|>zSQs||EH*)rrvDGISn*g)ndZKilvOx#`b4;mZkCq6@XFHmB}J1=tJ@a z2uae``=q0Egb?_le>$0gm8TDS5y#p&!HazN(7*|$`#=!y*xnH zm_dkD$H1Su+^C^fHDLj&%p3_8Lt|M!gz9x`5{!2?mQGt*0E& zvVl6F-k@rD1Q$ATRRKp-pqL1Dgns8X4D_v{^J`By>*&O*5|2baYmv6`!65Uolg_;) ztv~^CHn7Rd4hjIh(gPPoWIL71N%e}WF1?&2k(D>I_K@UnX5|h-g1m+v6@wNjTbuq4 zwbCQR3u=f_XDz_%tmk61@Q^SFN!qXqgHkBAizJFg;w>-&NQE1OM#vZ?0CtWzr{~Ht z4)q;Cpe-88=Y)gy$ynSC{S&p578E9pGV02O0Dh|$qzkYm)S1J8o{1ts3G ztOGpZJ~{R=4+h;15P)p{6Nw$_$o+}Lsr!I!?j9eQ#=9Uwc|RWgfY6|(0#AVzoRf9{ zYkHsv)dF)+1L+;GnS1ZwZ4gp>`Z{yMmO=9qKtxve`HmlkAC`STeDn(H9TZ}ha#h?w z1|`^_-6Ylts|BYY=t9bWoiFA_fZVIh;I9wwei;Ale>UVi{`&KdJaK#$`vi^!_gP6l z1t`5v|E6J1b2$L4Z# zmH!LOHFSFR8^ceG^K+oKBWv9IbA+D|Tw7mGF&0RD*~EniBdaVWv~R(C;k<1$jw-T< zf|+H7!m@)B?rtU68Wy-LLfPohlBM3`f0yLoPzgpe}z2i#BVUWEWf zrt?s;PC^nuDG_B$YaZdoh8vF6xv=Hmh^@XV`ekk+mbk`iiD|sEvQ*%Ok}C;b*h34y zHh7-osZ*$cWjv8RfXuHM=o$mRv;1~NoxbUB->_o=3trUJuf=NFT!3rT8#W;{SOUuY%>4= diff --git a/output/identifiers-1.20.3.nbt b/output/identifiers-1.20.3.nbt index 2d65b5b2b1e293795599c616f394870aafc9c998..cee36b36bf136f9732fd86742f6e28c26e062bcd 100644 GIT binary patch literal 4568 zcmZYD2b2}n835p!xwE1Rh=K@MSBVV~r6`CE#Rk~H0w}QVuDD8Bmqlr63~Gefm7pdn zHpH$N6gyax7`sMeVl)~f#t@@Mli1?-Ki!;@bB-h?LofQ$j~&^GLF~+43}tT);$X&dG~*agJu&Lzn8@)oaso}9 zM6(IBOx1`9L`VFcLObSgGBKfM`V*5HKul^hF_|%RB?b_annnybCKZF;f*HibW)c${ zOiW}KV$l0Ci^CYmC?c`5*@u{TOzaq9a??4L1|zC!Y-yO>wpdle+7zp*=DT9$cRDZT z)R8E_hHOd=n-N85Ex@+gz1fcK*@4z##5iMIF_)OfuI$bp3}H{AKr#N9-+t`RForXN z12~Y@A|9fBD3OOFIf}^h7{(I0iuulyFk6iBak;s28_xU*FJg=jki5$-foX8ZKXy#;QGY9K4KaJD*5py|{vp5?y z%ja`Gm!ekr&$tS8$<-vkktN*B1IT^;EYIBPEprYqg(P7gL@b9(Xv zwqPr^W?OpGhko>DAcNQy>oo1op6tcG?8gBd%waS#nQ62zgPF`?Hgiz(G?z1($GM!x z`B-a7-IKbf%TVW}#z~En8mDWy4mC`-avQgE2WpzsG%ZCbI!5AYxl z@ggs=n!ocQ|KKA&<`dK^sa1-a{5Q)=H7V7kRFhIoO7$q!qg0PlEy@naf7u!NFV{y6 z%I?U2xe@YT%6}>UrQDa>&vOJ?;l87W=!lr;2|Sryw!u zF+OmuD7FPrrPxvUtVZ80VifEMeW!}&*xpjK5VI)UX#J;a_tv&B;|Zx8qwfrHp6w{; z?P3&itp2&$gR~_(+f6(gU+B0|$0DjcN$o9;Fpf3E1NCi(_mls~qjR#a9rLVs zD8se4w_m<<<8ax^Q*yqBKA)SOux+gI1CV_s#^=7Gy^7C?wPp=h9@LgN{s!%j9CMHO znHXccQ2%wduNJlA;U!z7Ukx(HmnWh&@k5(GrM+ByMx4aO`h9LyJAK_9Z*K8r&sK<& zQNy&*{#a)(+K$@3Do#QE(-pS&N1fsUsgU174GVKFe#r{QJSZA#QRAGcqWqWEW!wPE zlf?gs&7%31(=dj(DV8lP@VU?X4A;nC;J5bO#SmgHYM;mYaJ~GGj=NcW3)jo#EqAT_ zLwt5_{p2sG8h`Qe_Sy%lO&^wl?$0owh=9Yx}Yz1YL&jTBv{7=}5f4a9xfhrJofUhHY#A-G=U zrhb^d5$e)SoZ$0jF;H7fCyBG|Q_nO?|FyQ~h}KAPmcGNa?Jv#|2Z{6a-7C(weZ6?D z?IXmC#O1uqk+v@tj}jL;?h&l5co0kXY5V*%+V(Z#7~7|6FBXXhvA6+O9>nB3Zp6iH zEVX~Ic(>@7$^+N0?H{ZCioO*@y;t+4wmFxta++h*r955i$k9YSekjUgs>hm7#+a

%_ z1ASX3A1B8|;{)R4I4KT@6XOKm$Vz4-DRHuIr4OvmIyX1eH8wSjpVrXaSUbr-Q<~ep szh~VlBlck4`p=eb&g)WN+fqBeZtCQwsZ&gKe9X1&e`yA_JyG_)0b+3`U;qFB literal 4838 zcmaJ_*>dB$5$&qcMoE@rJ09QcN#zf2UQ+oP6i9+3B9LGJP_pJB-=5O|NomHDyolJ* z%jwe%ZHY44s4nQBmERE2e`qOohs>zs%ttZ12IHBNLOmv(N5up!rh>>p*=d7Oee%C^m-+oVIyJ+ z@=%sqIw)GHi#IwxtLof=r-iNHqvEinKtwcPEo+`+xyEECRZiaIkZ2jcRGZ zSJFOSJRxHHAjW2P$JQw68*%Pzpo7tM6S}CnHBbV`Y$a{uhY=HK+se9?q8M_RyOoa3 zy_uEIT5Emdtc3*a07I{Ap#WFf^b(@tU|ROTkfc@5cm~G$26n>wFTJiYs-p$==__(K zz^$7eD$5!-ZF_5^6FDG&wKl2U4+t7pY2VPw$vlUYYbP&p!^%t3!Zu6a0H3t>&0tvM z!`Kk{U<_Qk_1avEP|;fep7K;7`7n z0Q`eL557l~J847;>eU#G%Y=)i$J`CV1{Y&=9b^f`743ui2y=vg2>{q0KX;()v5_Mt z`E4EdW6@J^w$}yjOI8Yl<0$xYQ6IFq%*MUwuEeTf9i6W55`qRnkdCC)6%h(9*j=$o z6peH>XyvLy0kh-NK>uU#6CcOkEY&FvR9cl{ z1jmZ`jeW?3@&&L@B;4Cbu5!t^R1 z@*Fl=CMsSO4zN0v2!~pUyPcj!b_31I&=9)1?^z}T0MdRUlGHP>={$FsmtG}e_)a>h zyC?^+$Q%EP0*vq251mKe04`T4O?)EHCvY5x6KvIR6pUSNlpwE?umGuNwgfYyvCJhx zwK}jE**pY#ViETIJ5O)D?Q{VeMa0h9MNuQ8FiX;U^b0L3&<7F|(u#w@K{OZT5hMj- zP8wTE#s?$X4~^{m2S;YeP`&l6#_Z z_{ti-vLu5g>`E z^%!&81kh-veK9!4KrfM5=`_v&HbdKqp{GqJhoF%)?&OFtAK}hZB>l`#T_nHd^5jYpjclkHF0s3xFE@ z|2|*L4UgoYQiy+@wEJQFm!E7%etiGDBTXFcr9lM8g8R(79|AGIj^C={py%X)C`4XC zxUGEQWRFyf#H-aA5nR`(pcqiwNFP05peT!R97FXTyV<#8S}Ik*fgpj5o&b3)?n1cr ziA8^UK;g{&aEh@&_QNJla~N4AZUW(e zG(_)grEyf2SQ%lBQZ)gZ+lz}T{vLmSrCnNrKu1U($MsIdREB~pMRg3YLu~i++%hsN zCEn<8KcY9>aO=8N-h=7s)aA^-pcO=-2(qR%k8oqdjhvhA!2F6X8oF2Bh^2?hwc$&}*#TmUgRp=h< z$@Vk)8-kVJO7C<8t}8Ahg$MWJ4e|2*08+oF-`>YiW--#^JF2`X`opIwK>Can&owXo z{?jaEnkN7Fvq_X=NUgm0FQ2A=d^P;(f3E;^9sTY9&*L!zpL|vzpx{ttsv|!Ok;@L1 zXF2qS3p+)B{d5URC_KSR1+XRXe3oOZm2>+M%!i4c@Lkw$_|$_~_G|gbMhENA{6#iy_2?FCL{ztovd`R9V;3)5Dl<@l>5) zGU~;}qYW9omNMY+!tu=EE|}&RS^vPJ7-f!a1uvjO3(kd8@SOHQA3u6NFvGPU-nHqw z8#*rf&XNgl+TC%zlVUSA7bx7Y#YyOWU@q+9HUcyKI-ZALul?S+%<68?vHRIql)rs)sEQtr+VUcOr zuE+E)ybrwl8Jcjax{k%5r?)HI!v5oW_B?H%-|#Tb`hIi)pS1K`s(b+Z;F$qz#EgS~ zEMiR^k@J!d{1?IW;)r9PfW2p0{{CVO+b^OZ)X##&F9TO*T>Oy|%kXLhwS}6I3jrW}+kQ;#j b{3C=v8y@rQ0{=WA4MzYS<~0BmGSYtmd1bT) diff --git a/output/identifiers-1.20.5.nbt b/output/identifiers-1.20.5.nbt index 6b044311f9a1a174778f897d30fd60f7167f3198..0a8f5c0048ae58af7352e97bcc45bb8b71bafb2d 100644 GIT binary patch literal 4840 zcmZYD2b5LC835pW@5~bcQ3M4P)J21hBB*p!P%MBI#DXZSu)-?KF3SQ6C}1x{#fA;V z0ygZip;5$oOzib&OzcskCdSxXzInJF&${P)=bxE(-@P;cKkwc9wndh;$kwi!+ECq4 zT{S&qEov(3>Z&G=s-9hyW!Xu2R#Z>SLl&p6891?JR#Y~4Wk=FqPC=kKEojL)v|?S> zV}07tmJMk~CpMvi&U9f*y3&pAr0eviAN?7~Aa-JB_Fzx;VkDy&$9Rrp0+XrcXpUhD zHB2R~Wd<`Xtf5vTU2q!d?*!5UXVHv#%w;|^S(|!xAT2z-H!b{7(qhMu7JC>QF`cxS zP3c2g@Ud*oacs*1QUV6hxZttcX`!=8i|osRq{+`=cT$3m;BZm`(xQ&1%FIgD4OKNw zi(4Ajq`0N+e<^Oh+WXSlQUN!nBb!k{D%2KiLz?ezi?yA8PtqFG`qDhpywX}43zv$v z3xgTLP}2N=TgYMh!x_Qe?8Cn7$Nn5Z%EM?5;t*2K$B=TJ@|E&1o{6M9r97X^8Jx*k zoXxo`;vyDvF_&-|OSy`xxrSvd=O$KgGq-RXcX2oOa4#$QGY|3*DW{L{D39?3Pw^iA zBrfHODXopRarxJ_q?M z=36HK<8`JvVR@4y_D69k_DEqK#S*T-e2S&mGsV@ITX8MR zFvsFL%(F1h;zrE1Si$Yw!JYgGd#SLG3j3(IkNa80!>r~J9_4ZV%F{f9^%mA!yujfsNRhj%-R7wqz@|W?Q<_gYD==Z~8ERf$YLyhA@=f8OCt-Vb)gr1zREyY}^=U_Y{=1xSS$aj?Icr)@G7zZ(t5~INp4CV=tPfS9tzS8F%>4g zIlP{gZ;s&&{ZabI>Ze3sFSZd6e#Sg@H#3ACl;zix`eAE|Q`mnrj!YO`eyjJ{JoXTSDNBEa(T6p-( zafPUzRT#TT>>?^m`cTBv^|usPh|U)eH9k+fo3;XEy~Hub7Kmr)Z!aoJy4lCWjGv_4 zPuqtfJ*Ab4Z8N5)wX`9#T^Y&<^H@vV$G9StZ}20%Urx#eeo<7E^t2XE@gHq<`45-s?}a+$B{`7aLJbRRE}mqSV;&IAwW#o(T2cO^eOY`XP7}Ws>qYC0 z(=ms1gN+Sb=)BK4hil}|n}_`5uXz1-29wsK{(0IXu9^Scu{Vlu;hMSJ<*t|i8|TmM zq5MT$JO2>Z4lBe@_yX5WH>X0KLwnROeQ}0;#aS%Yw%6jtJjfEq+Bb1~aWm|rxC6&( zZ-u%Rz4VV`NA2`lZ;^DPD0XqaQKIV&vALrCQk-IJw6Bb$MKOCxml{iNKcwd=>}iiY<_Z7 z+$yF#-r?8*;+>-7%MW!=IrcE^myN9=?SW7EL0cZ;tDN8%wTkn^R*XfBN-5{_wdFTV z#OI;>Fi~rKptijjoHNuji`6{twLvW4VP12dRI@k5zT*3$e8msM{-U{*)TK1QkICkB zmGuqP6Q=zBzXdaz{GiNg8vk3cb++a&7YYK+X~{ZR&#(U}Xs_LYj&!1e&TLK>?7Q+0 z=554n=}r&qkIY^u|7e!q%-YM}EBlD{_pd)157wT5T={XFWk)fo@z;NvXqsf2pdx1x zMYHTRzwXn7CAvK6bb_O?39=2S;YbuR-Rv?6Eic3eq5SKAxR@5?%O&09%NLgHbhAx2 z%<`|@!Q$TRMw<8$q{&XAnp!hyRarl2MvZ^jG#pp=`y%vjT7*80MQH8)ZD>nM<`(>c zwC2WScGd32ZI-q&_wWkcn-3AHtKwNs^FT*^Vy M|628H`bOFPKW(=?vH$=8 literal 5086 zcmaJ_*>dZ+5$!5#qjuZl>&ZHq${!?EsZ@Rj1(G0%h$I*Qlq^5y%X1naDf#M7UPPd= zHF`Oxp*2xLE7f}KwQ?&W`Y+98UCS#yORJ<%MWHe;vfA`HCDJxB*L7`ZgQl^G7i!&C^BA9_Yw$S%Ul_l*}4K+mBOPg!i z(nhh;_6md4v_%JlafdL3UZK9t0k_KFtjY)(*O8^5BEZRzM)eLyp<+Dze| z-q#AJ-bBWxSa4Os6e4Uzy8?RZwv0EW1FL>9_9QHfui%lwe9)}0rle!h+g4)Z$sF^t zlFrk-#BDqs%Gz86bZbOm;R0F*f%{LdbDEXxzSVU1MP*8yONYvI(D-i8%2=mpR`u>g zYs5|Ov}tkCjc&cNGV|zSz{1X@sZ~QWK9aWK;4xa(cWV4(ps?v(RLyk~9H0iu zvT`Q{8CLDbmWXbdyIRAud)FXr?&93FnpMCqEn*=0WyS4~2FJnZH!ts92Z*q;77+#( zLyFF0w9FmGu29z7khx1Qb6i}})~gRcVZxI~*lqE1+jxtGoJY}b%dj4kcHWv!XE-lf z$@i9XM8CMOxE#fVCLBi?mNu7-Jp*dzM+m&oM{bmrC3WvKzn+h%0?X=<2TH z!)rtuZATo5y&A@w#`e?Hi$n_FFei3rc@GeI<6n`13@jVGbzm0+;3AUA19t8Jahx|W zO2y$mbh(iOyK=$=5Y%-bqX3MxVJH!*(Vo>v0E|%tbYd0OF{(rRg@4DXxFQqFS6P^h zHKx@WuoekC*&tjf01QJZEeAKzya1XYn{``&h(HTFu#km=fIw&Euvv!W6wdVEgV-K8 z?Rei4o$2VnvqA=nxa%w|<0AkA`$~4*o#PV_T4!*krFjMH0MhA}i5PbbY(1c8a@MJp z1H>|t$9&%eIL%CYQ7P?0XG-o(Fph8y=!j;){j25*(9=CI5TFWaXAHu=GnScdW`Tsj zqp)Cef&0MFp|fypVD(u5+9Y5BA`k)VE&wkfy_X2zqsOKVb6DTzSA-d@(NH#q6QCrR zU>-Ab9iuzgY@7AgA}&M@R;J@Hf|%=@R`eaMTG@LI#<@}ZD~gGZsRE(tu7jR$lhEn1 z1*k;zZ*g9Mv97l`AG%{w#O{8~7*rr0X#O_#9qa`5Mrb-_1$O5SIoTl6z(5!Ss7Tu( z@?-D$%K{;_rEgQlnbc`6HiT!!n9lf4JZkn;ytfLB;1p~Z9G662u|k`H075(`91Dm$ z`2T%6m>Uihq9Q(g8*lfW{O2Dmh<<#3ToDKMx3VGx$Bg@o&L0ARu?*j$V8mdGL2`n9 zkcA7ES=oV*LC;#9kp5+f>Wc$v9k8cE7~lq2!XAxfg2DXKZJ@#3BBokM77;dSTLP&>XHB88RT2pU2!bLy zrVF=cXO;au{QiwLaSAX634a*oTNUUOrC`L2kiPrS?xwMM0DX!O)#7|$gTLa`Wuu$} z3DL1l*{(n^b#W2duh-@guB1_^C(v~=A zg*q$_9bAS4!wbP8ySQuv40ASChD&!8Bp3bpi4`-XQ$tC-70(+kh$f0~tANE8l``0N zII`&57!xBeN$?lSj0CO`pgY`h6C62ok{opwNDxu9VplXK=To`(I!xO$Rl)|Z-w6c2 zMOLGbwqq;E4}eYpBrvzps6Q<|PlCw`Nu{_9Ze)kb*BG`m2h={aZ;soAJ~Y!PPAtuO z6#5ChSe5Axkj`eW^(PR7--z#YK(ZBF0SgCq0{gvu6`*Qy^t+o36(VP1cr@l$MSpx4 zLMEJ0v~amje|Q*$`s3iAel&pDDSR(Pnp&{{G9^47%01yWKIEm}1<$HyPjgWaB%3OrG2dX0+Xd4E`-Xie_VT?#s%~fi?P>N=?p$;=s8zu5A?wc z39%7~3V*?bS3-!Km$c{qJaGA&>^U;oy=cvqvke4IKaZpy|7;N`7VC(H%Ls#Tehsh3 zN(eEJ11!Bv@N#>CB%=()=SaIpuAYbgpui~j*X$56ff*09)`E^xi2^P9hK={d5uj8= b0RG~_zbE(fJj35?VDAt>`)LjW3Pkol`JWFH diff --git a/output/identifiers-1.20.nbt b/output/identifiers-1.20.nbt index f59871f274e684aea1a326ac29cc09c92c11c3d5..5c47b3c843dca4499ca55cb85a197815e072632f 100644 GIT binary patch literal 4287 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 diff --git a/output/identifiers-1.9.4.nbt b/output/identifiers-1.9.4.nbt deleted file mode 100644 index 3e6fd1adc81bd1136cf207bd0a151411a2b21ff3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4 Lcmd;LU|;|M04x9t diff --git a/output/special/identifiers-20w14infinite.nbt b/output/special/identifiers-20w14infinite.nbt index 431d3bbe4343fc361d1a1b29608074ffc43d23e9..647fa72373ec84807589ee5f28f1bc3e46cfca03 100644 GIT binary patch literal 1522 zcmZY9TZmOv7zgmR_j1U_G&OBBGpFpLd7+DznboM38bX2Pr6N7eoa)r5HYSr$Xnpal3x~d(EYHO=0r42zK(bZeSs|b0>>g!cvy8ocn2~gQ)5O9^@g#G*-KaVg?XJL@`5&BBGel zL=l%Tk*Qoo8@IBGo0-P~?js&tVFK~sxx~XC;U?yDF|&z6r?6Tdn`({f%KlAkTF|eF z`FLLw*SPO2qUMoAz45m=fTuVy;e6U~ZRZsAGR^E4aT#Add#otJo-9qeQ`d-#$Q ze8)+?=Lde|Cw@+;D9GqxaUK_70gEfpyJ9b|bBe!HDhHzOQq85BOTR0xWDyp#w20*j z9%miT@*HX|pXXKH@F8l*CvgcdVDp@C7vT6vCKFI(kP z@>2PXoGdjUhA?lCGo(UOr?ik|6c@X}VCEO)W75kc&C3=dc}5;5{a4;1_sMNi z@?z;D*Sq9r@-=x$-<7x!{u?QzT$-R;>A~TzWiDqkbg>zDE^X% z)astx!fnLDjm8k#@bvPt)d|&5tpS8&^cn2GzX}0`E&asKl z?5flowf4@_Ps2z1ZR9ksZzCHzclK`PxE{h73|@*gi}h+{3R9U$Ti@Ws4ThoT52i_z zoMI8Dqmk(vG`8pXG(3pvDKYCJ2PsREF^Ls=}{{j93 Bvqb;^ literal 2602 zcmaJ@*^=8f5S*%&sAIK~?8L50<*s~8J_7}UAc+W908m=_>(d}8YS*&!LSkk>V2++1 zZizOumNu!RWLy)`KlFhI$(d|hDH0Rf4Glf>U|e7^aof<6hu|*sRP%&~l(eih{~~Eo zyQ~p-JPUr7EPB<*Kr7KJagr7$*W||qsvxC@t!kV-$t$fIr+u$19h$&9XIZO)thv^( z;4&*4+DnboSU2#{C~oOl+J=d6g;Sb#5MV4H=YSv?Y}%BSN)lVn?u0!pw_T*FNI3Ns zekf^$WG>X$b;Y7(<9GDZ!UbhJR%<6tbjV&^TsW}+Q6kvZz0$Jlc}#f0t3>PB!Da74 zL|XbGo@lGI9-?vK;FObj(X zGRjK9L!!OtWlU_AKMQ9NeN)`N>yPaaEJvjC&O`4!;=e17(Q~Bxjb@kZo1+(I(2_RB zx!4Ei3{_4@4QJP$E5OKhwDh=|Q{^*GkRz`;+WG-_3ayGg9ltnJt5(T|!G!d}>NF3m zmORiCuA?gOx<qfX@qeqOIKDk9v!TDHx{#+in>CE#{S=H)%D4aZR9kH>NUUSBIYC&ZC%T- zp$!m|l+cBU{-#eHI6*4VjNqs1L`k$q1BWZSyHcY<3I~FRa+g;1P}j)lvT)Zz1R&|y zpp`nw?umPun5G8XrJf)v@3T7^0nzT(`9;!5?QGl6TQ5A}-kBwexM&8@K~)I!fwo>i zH92)ae-FP_lb9C`Xr&=+cpGhoiguYfm^3Qo`!=)c?&f&sNF$k_Xf@@QmMu6$(jmH` zK%N!FA}dBKI&$B0@84u}1OD(X=DU_X01JjuHj_U}F^+|I6jr+GWu&vYeV)z0q5JE;)gV{pI$s(K{jAetTwdF%n zAnf~K`ay8xGfgw$;&lq_)2xiDv*`Qc{v9Aa2>*Hq$Rys-RK)!aYGCt}88AEj0@Rv_ zqDSNh-FV@_12RSWJOj|xQRQjKQs&N2x0Ak7-|l;_-UkWJj1n2i71+?nAcgWM8c2j| z^##WKNAM#ZMBr`ab{2sY%;Jyl73kPVKizd;P81@bcyyxX7BjRNyv{5w z>CcBtz7S^*wP>MHfP=S-s0&3BSCg|d=xQs5`!Yq1l8@v4Bp}$=COc(BJ^9F zuh_yb?28!oY1pTE02*azlo`WIOo8_q_G9L-h-G}lCw#^i@ILbmKd_A*{KPJP;}8Ba z*E-aL=G#ozY>L+lx&eEfd_(GlS={O%-jfaF9$87zEN(B78zfD0Hc5tJ@3IJkv5!cu zTZUz5tUX0?pY0>>lLI8pv7838L~c8B$T! z%>{lkee`rsMg}FX$^=Abm(rmp*s}`u!@{;K8xi s)7Xw?B)F?G=Oz8D_dM_Ad^gSiD;GUVQWLGPDy-1qC1v5t`i1lVAKwFVEdT%j literal 2335 zcmaJ@+mhlo5bde~10G=5-P%;8aXPvYomDT+1YuVXbiWU>hV+1%v4+6SYMXyq3%lrr7EwYzW*mwJ>9irpNbXob*`+)rKhEob0aDTAuv-@!L$__@+&U&Bv z=)I-N3uO@OHgF9FxsKKWS97XDp$ISvx}!P_pi*pg>gn+2ZKD-~y_Bd9-tfp8#Unl8 zE~+AL8su6fZmf5-PCdv%o74{m1*GFVV9j6*iclwQF7w&jbXKro*YSPCrZTLP(Lnl` zEJ}K(SDl={vd$Y+WLw4~>5eIY_mLYm(Y%_eyiR`)8sty#-Dr>B!n&zUha7#-0(-_R zt31REsGd~UjaC4_>q5Wb2jI_FX(^55+hW2xbCg@(~ z*%Hns^q@M5zlr=Z26!~O>$4kM#T(Qv7=A0YDp*X`rcrT6JFp^aVJ4mVi@x&01u$%s zpWCcBbVQTJ8@u1wpb#1dLTgGVR?W~f0B$`=(@I1T<|NTBonm)<4zrpx5VH*C$*4mp z;TXhC`}gjiW(Ei@zT>j=$}{d=lwg{!2G6XftC=>lQizEbu{l9eW7%{4(Qhh_Z{!zx5s|k=@>l}qc%nXkYXHd;{dl)QQ*Zzz1<$CwDf;=r)p&mf zqe~yrPY+(p!@KjB?>W_L2EoeS-yhunez|`A?-k%iq(A@Pk5^QFFM*8yQgRZ_#~>Q+ z@U+Mwn4({b{&=_qVu5E~D&Zp^74b2SS^XRTiW2*xc=X%jIRnThv>y_Pe}%GJWyZ&8 di~lNV9BoQ@%kI-scLDf|WuNeZC^6)5;XfRSGd=(S diff --git a/output_hashes.json b/output_hashes.json new file mode 100644 index 0000000..0e0dcd2 --- /dev/null +++ b/output_hashes.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/src/main/java/com/viaversion/mappingsgenerator/MappingsOptimizer.java b/src/main/java/com/viaversion/mappingsgenerator/MappingsOptimizer.java index f6b92c2..069b7c9 100644 --- a/src/main/java/com/viaversion/mappingsgenerator/MappingsOptimizer.java +++ b/src/main/java/com/viaversion/mappingsgenerator/MappingsOptimizer.java @@ -20,8 +20,6 @@ package com.viaversion.mappingsgenerator; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.IntArrayTag; -import com.github.steveice10.opennbt.tag.builtin.ListTag; -import com.github.steveice10.opennbt.tag.builtin.StringTag; import com.github.steveice10.opennbt.tag.builtin.Tag; import com.github.steveice10.opennbt.tag.io.NBTIO; import com.github.steveice10.opennbt.tag.io.TagWriter; @@ -33,7 +31,8 @@ import com.viaversion.mappingsgenerator.util.JsonConverter; import com.viaversion.mappingsgenerator.util.Version; import it.unimi.dsi.fastutil.ints.Int2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntMap; - +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import java.io.BufferedWriter; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -41,7 +40,6 @@ import java.util.Arrays; import java.util.HashSet; import java.util.Map; import java.util.Set; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -58,10 +56,12 @@ public final class MappingsOptimizer { public static final Path MAPPINGS_DIR = Path.of("mappings"); public static final Path OUTPUT_DIR = Path.of("output"); public static final Path OUTPUT_BACKWARDS_DIR = OUTPUT_DIR.resolve("backwards"); + public static final String GLOBAL_IDENTIFIERS_FILE = "identifier-table.json"; public static final String DIFF_FILE_FORMAT = "mapping-%sto%s.json"; public static final String MAPPING_FILE_FORMAT = "mapping-%s.json"; public static final String OUTPUT_FILE_FORMAT = "mappings-%sto%s.nbt"; public static final String OUTPUT_IDENTIFIERS_FILE_FORMAT = "identifiers-%s.nbt"; + public static final String OUTPUT_GLOBAL_IDENTIFIERS_FILE = "identifier-table.nbt"; private static final Logger LOGGER = LoggerFactory.getLogger(MappingsOptimizer.class.getSimpleName()); private static final TagWriter TAG_WRITER = NBTIO.writer().named(); @@ -81,7 +81,8 @@ public final class MappingsOptimizer { "tags", "attributes" ); - private static final Set SAVED_IDENTIFIER_FILES = new HashSet<>(); + private static final Set savedIdentifierFiles = new HashSet<>(); + private static JsonObject globalIdentifiersObject; private final Set ignoreMissing = new HashSet<>(Arrays.asList("blocks", "statistics")); private final CompoundTag output = new CompoundTag(); @@ -94,6 +95,7 @@ public final class MappingsOptimizer { private ErrorStrategy errorStrategy = ErrorStrategy.WARN; private JsonObject diffObject; private boolean keepUnknownFields; + private boolean updatedGlobalIdentifiers; public static void main(final String[] args) throws IOException { if (args.length < 2) { @@ -118,6 +120,18 @@ public final class MappingsOptimizer { optimizer.optimizeAndWrite(); } + private JsonObject loadGlobalIdentifiers() { + // Load and reuse identifiers file, being a global table across all versions + if (globalIdentifiersObject == null) { + try { + return MappingsLoader.load(MAPPINGS_DIR, GLOBAL_IDENTIFIERS_FILE); + } catch (final IOException e) { + throw new RuntimeException("Failed to load global identifiers", e); + } + } + return globalIdentifiersObject; + } + public MappingsOptimizer(final String from, final String to) throws IOException { this(from, to, false); } @@ -157,6 +171,8 @@ public final class MappingsOptimizer { } diffObject = MappingsLoader.load(getDiffDir(), DIFF_FILE_FORMAT.formatted(from, to)); + + globalIdentifiersObject = loadGlobalIdentifiers(); } /** @@ -189,8 +205,8 @@ public final class MappingsOptimizer { names("items", "itemnames"); names("enchantments", "enchantmentnames"); fullNames("entitynames", "entitynames"); - if (backwards) { + // No need to put sounds into the identifier files, so just use full names fullNames("sounds", "soundnames"); } @@ -252,14 +268,27 @@ public final class MappingsOptimizer { public void saveIdentifierFiles(final String version, final JsonObject object) throws IOException { final CompoundTag identifiers = new CompoundTag(); storeIdentifiers(identifiers, object, "entities"); + storeIdentifiers(identifiers, object, "items"); storeIdentifiers(identifiers, object, "particles"); storeIdentifiers(identifiers, object, "argumenttypes"); storeIdentifiers(identifiers, object, "recipe_serializers"); storeIdentifiers(identifiers, object, "data_component_type"); - if (SAVED_IDENTIFIER_FILES.add(version)) { + + // No need to save the same identifiers multiple times if one version appears in multiple runs + if (savedIdentifierFiles.add(version) && !identifiers.isEmpty()) { final Path outputDir = special ? OUTPUT_DIR.resolve("special") : OUTPUT_DIR; write(identifiers, outputDir.resolve(OUTPUT_IDENTIFIERS_FILE_FORMAT.formatted(version))); } + + // Update global identifiers file if necessary + if (updatedGlobalIdentifiers) { + try (final BufferedWriter writer = Files.newBufferedWriter(MAPPINGS_DIR.resolve(GLOBAL_IDENTIFIERS_FILE))) { + MappingsGenerator.GSON.toJson(globalIdentifiersObject, writer); + } + write((CompoundTag) JsonConverter.toTag(globalIdentifiersObject), OUTPUT_DIR.resolve(OUTPUT_GLOBAL_IDENTIFIERS_FILE)); + updatedGlobalIdentifiers = false; + LOGGER.info("Updated global identifiers file"); + } } /** @@ -434,28 +463,63 @@ public final class MappingsOptimizer { } /** - * Stores a list of string identifiers in the given tag. + * Stores a list of global identifier indexes in the given tag. * * @param tag tag to write to * @param object object to read identifiers from * @param key to read from and write to */ - private static void storeIdentifiers( + private void storeIdentifiers( final CompoundTag tag, final JsonObject object, final String key ) { - final JsonArray identifiers = object.getAsJsonArray(key); - if (identifiers == null) { + final JsonElement identifiersElement = object.get(key); + if (identifiersElement == null) { return; } - final ListTag list = new ListTag<>(StringTag.class); - for (final JsonElement identifier : identifiers) { - list.add(new StringTag(identifier.getAsString())); + if (identifiersElement.isJsonObject()) { + // Pre 1.13 + LOGGER.debug("Identifiers for {} are not an array", key); + return; } - tag.put(key, list); + // Add to global identifiers if not already present + final JsonArray identifiers = identifiersElement.getAsJsonArray(); + JsonArray globalIdentifiersArray = globalIdentifiersObject.getAsJsonArray(key); + if (globalIdentifiersArray == null) { + globalIdentifiersArray = new JsonArray(); + globalIdentifiersObject.add(key, globalIdentifiersArray); + } + + final Object2IntMap globalIdentifiers = new Object2IntOpenHashMap<>(globalIdentifiersArray.size()); + globalIdentifiers.defaultReturnValue(-1); + for (int globalId = 0; globalId < globalIdentifiersArray.size(); globalId++) { + final String identifier = globalIdentifiersArray.get(globalId).getAsString(); + globalIdentifiers.put(identifier, globalId); + } + + for (int id = 0; id < identifiers.size(); id++) { + final JsonElement entry = identifiers.get(id); + if (entry.isJsonNull()) { + continue; + } + + final String identifier = entry.getAsString(); + if (globalIdentifiers.containsKey(identifier)) { + continue; + } + + final int addedGlobalIndex = globalIdentifiersArray.size(); + globalIdentifiersArray.add(identifier); + globalIdentifiers.put(identifier, addedGlobalIndex); + updatedGlobalIdentifiers = true; + } + + // Use the same compact storage on the identifier->global identifier files, just about halves the size + final MappingsResult result = MappingsLoader.map(identifiers, globalIdentifiersArray, null, errorStrategy); + serialize(result, tag, key, true); } /** diff --git a/src/main/java/com/viaversion/mappingsgenerator/extra/ItemsAndBlocks1_20_3.java b/src/main/java/com/viaversion/mappingsgenerator/extra/ItemsAndBlocks1_20_3.java index 5384040..e628bc7 100644 --- a/src/main/java/com/viaversion/mappingsgenerator/extra/ItemsAndBlocks1_20_3.java +++ b/src/main/java/com/viaversion/mappingsgenerator/extra/ItemsAndBlocks1_20_3.java @@ -36,7 +36,6 @@ public final class ItemsAndBlocks1_20_3 { public static void main(final String[] args) throws IOException { final JsonObject mappings = MappingsLoader.load("mapping-1.20.3.json"); final CompoundTag tag = new CompoundTag(); - tag.put("items", collectStringList(mappings.getAsJsonArray("items"))); tag.put("blocks", collectStringList(mappings.getAsJsonArray("blocks"))); tag.put("sounds", collectStringList(mappings.getAsJsonArray("sounds"))); MappingsOptimizer.write(tag, MappingsOptimizer.OUTPUT_DIR.resolve("extra/extra-identifiers-1.20.3.nbt"));