Switch to mojang mappings

This commit is contained in:
Ryan 2023-02-18 12:04:33 -08:00
parent 50018a52bf
commit 0e31aef2a1
22 changed files with 5190 additions and 28539 deletions

1
extracted/biomes.json Normal file
View file

@ -0,0 +1 @@
[]

File diff suppressed because it is too large Load diff

View file

@ -6,11 +6,9 @@
"min_level": 1,
"max_level": 4,
"rarity_weight": 10,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -20,11 +18,9 @@
"min_level": 1,
"max_level": 4,
"rarity_weight": 5,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -34,11 +30,9 @@
"min_level": 1,
"max_level": 4,
"rarity_weight": 5,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -48,11 +42,9 @@
"min_level": 1,
"max_level": 4,
"rarity_weight": 2,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -62,11 +54,9 @@
"min_level": 1,
"max_level": 4,
"rarity_weight": 5,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -76,11 +66,9 @@
"min_level": 1,
"max_level": 3,
"rarity_weight": 2,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -90,11 +78,9 @@
"min_level": 1,
"max_level": 1,
"rarity_weight": 2,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -104,11 +90,9 @@
"min_level": 1,
"max_level": 3,
"rarity_weight": 1,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -118,11 +102,9 @@
"min_level": 1,
"max_level": 3,
"rarity_weight": 2,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -132,11 +114,9 @@
"min_level": 1,
"max_level": 2,
"rarity_weight": 2,
"cursed": false,
"curse": false,
"sources": {
"treasure": true,
"enchantment_table": true,
"random_selection": true
"treasure": true
}
},
{
@ -146,11 +126,9 @@
"min_level": 1,
"max_level": 1,
"rarity_weight": 1,
"cursed": true,
"curse": true,
"sources": {
"treasure": true,
"enchantment_table": true,
"random_selection": true
"treasure": true
}
},
{
@ -160,11 +138,9 @@
"min_level": 1,
"max_level": 3,
"rarity_weight": 1,
"cursed": false,
"curse": false,
"sources": {
"treasure": true,
"enchantment_table": false,
"random_selection": false
"treasure": true
}
},
{
@ -174,11 +150,9 @@
"min_level": 1,
"max_level": 3,
"rarity_weight": 1,
"cursed": false,
"curse": false,
"sources": {
"treasure": true,
"enchantment_table": false,
"random_selection": false
"treasure": true
}
},
{
@ -188,11 +162,9 @@
"min_level": 1,
"max_level": 5,
"rarity_weight": 10,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -202,11 +174,9 @@
"min_level": 1,
"max_level": 5,
"rarity_weight": 5,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -216,11 +186,9 @@
"min_level": 1,
"max_level": 5,
"rarity_weight": 5,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -230,11 +198,9 @@
"min_level": 1,
"max_level": 2,
"rarity_weight": 5,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -244,11 +210,9 @@
"min_level": 1,
"max_level": 2,
"rarity_weight": 2,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -258,11 +222,9 @@
"min_level": 1,
"max_level": 3,
"rarity_weight": 2,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -272,11 +234,9 @@
"min_level": 1,
"max_level": 3,
"rarity_weight": 2,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -286,11 +246,9 @@
"min_level": 1,
"max_level": 5,
"rarity_weight": 10,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -300,11 +258,9 @@
"min_level": 1,
"max_level": 1,
"rarity_weight": 1,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -314,11 +270,9 @@
"min_level": 1,
"max_level": 3,
"rarity_weight": 5,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -328,11 +282,9 @@
"min_level": 1,
"max_level": 3,
"rarity_weight": 2,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -342,11 +294,9 @@
"min_level": 1,
"max_level": 5,
"rarity_weight": 10,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -356,11 +306,9 @@
"min_level": 1,
"max_level": 2,
"rarity_weight": 2,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -370,11 +318,9 @@
"min_level": 1,
"max_level": 1,
"rarity_weight": 2,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -384,11 +330,9 @@
"min_level": 1,
"max_level": 1,
"rarity_weight": 1,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -398,11 +342,9 @@
"min_level": 1,
"max_level": 3,
"rarity_weight": 2,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -412,11 +354,9 @@
"min_level": 1,
"max_level": 3,
"rarity_weight": 2,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -426,11 +366,9 @@
"min_level": 1,
"max_level": 3,
"rarity_weight": 5,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -440,11 +378,9 @@
"min_level": 1,
"max_level": 5,
"rarity_weight": 2,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -454,11 +390,9 @@
"min_level": 1,
"max_level": 3,
"rarity_weight": 2,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -468,11 +402,9 @@
"min_level": 1,
"max_level": 1,
"rarity_weight": 1,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -482,11 +414,9 @@
"min_level": 1,
"max_level": 1,
"rarity_weight": 2,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -496,11 +426,9 @@
"min_level": 1,
"max_level": 3,
"rarity_weight": 5,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -510,11 +438,9 @@
"min_level": 1,
"max_level": 4,
"rarity_weight": 10,
"cursed": false,
"curse": false,
"sources": {
"treasure": false,
"enchantment_table": true,
"random_selection": true
"treasure": false
}
},
{
@ -524,11 +450,9 @@
"min_level": 1,
"max_level": 1,
"rarity_weight": 2,
"cursed": false,
"curse": false,
"sources": {
"treasure": true,
"enchantment_table": true,
"random_selection": true
"treasure": true
}
},
{
@ -538,11 +462,9 @@
"min_level": 1,
"max_level": 1,
"rarity_weight": 1,
"cursed": true,
"curse": true,
"sources": {
"treasure": true,
"enchantment_table": true,
"random_selection": true
"treasure": true
}
}
]

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

511
extracted/misc.json Normal file
View file

@ -0,0 +1,511 @@
{
"entity_type": {
"allay": 0,
"area_effect_cloud": 1,
"armor_stand": 2,
"arrow": 3,
"axolotl": 4,
"bat": 5,
"bee": 6,
"blaze": 7,
"boat": 8,
"chest_boat": 9,
"cat": 10,
"camel": 11,
"cave_spider": 12,
"chicken": 13,
"cod": 14,
"cow": 15,
"creeper": 16,
"dolphin": 17,
"donkey": 18,
"dragon_fireball": 19,
"drowned": 20,
"elder_guardian": 21,
"end_crystal": 22,
"ender_dragon": 23,
"enderman": 24,
"endermite": 25,
"evoker": 26,
"evoker_fangs": 27,
"experience_orb": 28,
"eye_of_ender": 29,
"falling_block": 30,
"firework_rocket": 31,
"fox": 32,
"frog": 33,
"ghast": 34,
"giant": 35,
"glow_item_frame": 36,
"glow_squid": 37,
"goat": 38,
"guardian": 39,
"hoglin": 40,
"horse": 41,
"husk": 42,
"illusioner": 43,
"iron_golem": 44,
"item": 45,
"item_frame": 46,
"fireball": 47,
"leash_knot": 48,
"lightning_bolt": 49,
"llama": 50,
"llama_spit": 51,
"magma_cube": 52,
"marker": 53,
"minecart": 54,
"chest_minecart": 55,
"command_block_minecart": 56,
"furnace_minecart": 57,
"hopper_minecart": 58,
"spawner_minecart": 59,
"tnt_minecart": 60,
"mule": 61,
"mooshroom": 62,
"ocelot": 63,
"painting": 64,
"panda": 65,
"parrot": 66,
"phantom": 67,
"pig": 68,
"piglin": 69,
"piglin_brute": 70,
"pillager": 71,
"polar_bear": 72,
"tnt": 73,
"pufferfish": 74,
"rabbit": 75,
"ravager": 76,
"salmon": 77,
"sheep": 78,
"shulker": 79,
"shulker_bullet": 80,
"silverfish": 81,
"skeleton": 82,
"skeleton_horse": 83,
"slime": 84,
"small_fireball": 85,
"snow_golem": 86,
"snowball": 87,
"spectral_arrow": 88,
"spider": 89,
"squid": 90,
"stray": 91,
"strider": 92,
"tadpole": 93,
"egg": 94,
"ender_pearl": 95,
"experience_bottle": 96,
"potion": 97,
"trident": 98,
"trader_llama": 99,
"tropical_fish": 100,
"turtle": 101,
"vex": 102,
"villager": 103,
"vindicator": 104,
"wandering_trader": 105,
"warden": 106,
"witch": 107,
"wither": 108,
"wither_skeleton": 109,
"wither_skull": 110,
"wolf": 111,
"zoglin": 112,
"zombie": 113,
"zombie_horse": 114,
"zombie_villager": 115,
"zombified_piglin": 116,
"player": 117,
"fishing_bobber": 118
},
"entity_event": {
"jump": 1,
"hurt": 2,
"death": 3,
"start_attacking": 4,
"stop_attacking": 5,
"taming_failed": 6,
"taming_succeeded": 7,
"shake_wetness": 8,
"use_item_complete": 9,
"eat_grass": 10,
"offer_flower": 11,
"love_hearts": 12,
"villager_angry": 13,
"villager_happy": 14,
"witch_hat_magic": 15,
"zombie_converting": 16,
"fireworks_explode": 17,
"in_love_hearts": 18,
"squid_anim_synch": 19,
"silverfish_merge_anim": 20,
"guardian_attack_sound": 21,
"reduced_debug_info": 22,
"full_debug_info": 23,
"permission_level_all": 24,
"permission_level_moderators": 25,
"permission_level_gamemasters": 26,
"permission_level_admins": 27,
"permission_level_owners": 28,
"attack_blocked": 29,
"shield_disabled": 30,
"fishing_rod_reel_in": 31,
"armorstand_wobble": 32,
"thorned": 33,
"stop_offer_flower": 34,
"talisman_activate": 35,
"drowned": 36,
"burned": 37,
"dolphin_looking_for_treasure": 38,
"ravager_stunned": 39,
"trusting_failed": 40,
"trusting_succeeded": 41,
"villager_sweat": 42,
"bad_omen_triggered": 43,
"poked": 44,
"fox_eat": 45,
"teleport": 46,
"mainhand_break": 47,
"offhand_break": 48,
"head_break": 49,
"chest_break": 50,
"legs_break": 51,
"feet_break": 52,
"honey_slide": 53,
"honey_jump": 54,
"swap_hands": 55,
"cancel_shake_wetness": 56,
"frozen": 57,
"start_ram": 58,
"end_ram": 59,
"poof": 60,
"tendrils_shiver": 61,
"sonic_charge": 62
},
"entity_animation": {
"swing_main_hand": 0,
"hurt": 1,
"wake_up": 2,
"swing_off_hand": 3,
"critical_hit": 4,
"magic_critical_hit": 5
},
"villager_type": {
"desert": 0,
"jungle": 1,
"plains": 2,
"savanna": 3,
"snow": 4,
"swamp": 5,
"taiga": 6
},
"villager_profession": {
"none": 0,
"armorer": 1,
"butcher": 2,
"cartographer": 3,
"cleric": 4,
"farmer": 5,
"fisherman": 6,
"fletcher": 7,
"leatherworker": 8,
"librarian": 9,
"mason": 10,
"nitwit": 11,
"shepherd": 12,
"toolsmith": 13,
"weaponsmith": 14
},
"cat_variant": {
"tabby": 0,
"black": 1,
"red": 2,
"siamese": 3,
"british_shorthair": 4,
"calico": 5,
"persian": 6,
"ragdoll": 7,
"white": 8,
"jellie": 9,
"all_black": 10
},
"frog_variant": {
"temperate": 0,
"warm": 1,
"cold": 2
},
"painting_variant": {
"kebab": {
"id": 0,
"width": 16,
"height": 16
},
"aztec": {
"id": 1,
"width": 16,
"height": 16
},
"alban": {
"id": 2,
"width": 16,
"height": 16
},
"aztec2": {
"id": 3,
"width": 16,
"height": 16
},
"bomb": {
"id": 4,
"width": 16,
"height": 16
},
"plant": {
"id": 5,
"width": 16,
"height": 16
},
"wasteland": {
"id": 6,
"width": 16,
"height": 16
},
"pool": {
"id": 7,
"width": 32,
"height": 16
},
"courbet": {
"id": 8,
"width": 32,
"height": 16
},
"sea": {
"id": 9,
"width": 32,
"height": 16
},
"sunset": {
"id": 10,
"width": 32,
"height": 16
},
"creebet": {
"id": 11,
"width": 32,
"height": 16
},
"wanderer": {
"id": 12,
"width": 16,
"height": 32
},
"graham": {
"id": 13,
"width": 16,
"height": 32
},
"match": {
"id": 14,
"width": 32,
"height": 32
},
"bust": {
"id": 15,
"width": 32,
"height": 32
},
"stage": {
"id": 16,
"width": 32,
"height": 32
},
"void": {
"id": 17,
"width": 32,
"height": 32
},
"skull_and_roses": {
"id": 18,
"width": 32,
"height": 32
},
"wither": {
"id": 19,
"width": 32,
"height": 32
},
"fighters": {
"id": 20,
"width": 64,
"height": 32
},
"pointer": {
"id": 21,
"width": 64,
"height": 64
},
"pigscene": {
"id": 22,
"width": 64,
"height": 64
},
"burning_skull": {
"id": 23,
"width": 64,
"height": 64
},
"skeleton": {
"id": 24,
"width": 64,
"height": 48
},
"earth": {
"id": 25,
"width": 32,
"height": 32
},
"wind": {
"id": 26,
"width": 32,
"height": 32
},
"water": {
"id": 27,
"width": 32,
"height": 32
},
"fire": {
"id": 28,
"width": 32,
"height": 32
},
"donkey_kong": {
"id": 29,
"width": 64,
"height": 48
}
},
"direction": {
"down": 0,
"up": 1,
"north": 2,
"south": 3,
"west": 4,
"east": 5
},
"pose": {
"standing": 0,
"fall_flying": 1,
"sleeping": 2,
"swimming": 3,
"spin_attack": 4,
"crouching": 5,
"long_jumping": 6,
"dying": 7,
"croaking": 8,
"using_tongue": 9,
"sitting": 10,
"roaring": 11,
"sniffing": 12,
"emerging": 13,
"digging": 14
},
"particle_type": {
"ambient_entity_effect": 0,
"angry_villager": 1,
"block": 2,
"block_marker": 3,
"bubble": 4,
"cloud": 5,
"crit": 6,
"damage_indicator": 7,
"dragon_breath": 8,
"dripping_lava": 9,
"falling_lava": 10,
"landing_lava": 11,
"dripping_water": 12,
"falling_water": 13,
"dust": 14,
"dust_color_transition": 15,
"effect": 16,
"elder_guardian": 17,
"enchanted_hit": 18,
"enchant": 19,
"end_rod": 20,
"entity_effect": 21,
"explosion_emitter": 22,
"explosion": 23,
"sonic_boom": 24,
"falling_dust": 25,
"firework": 26,
"fishing": 27,
"flame": 28,
"sculk_soul": 29,
"sculk_charge": 30,
"sculk_charge_pop": 31,
"soul_fire_flame": 32,
"soul": 33,
"flash": 34,
"happy_villager": 35,
"composter": 36,
"heart": 37,
"instant_effect": 38,
"item": 39,
"vibration": 40,
"item_slime": 41,
"item_snowball": 42,
"large_smoke": 43,
"lava": 44,
"mycelium": 45,
"note": 46,
"poof": 47,
"portal": 48,
"rain": 49,
"smoke": 50,
"sneeze": 51,
"spit": 52,
"squid_ink": 53,
"sweep_attack": 54,
"totem_of_undying": 55,
"underwater": 56,
"splash": 57,
"witch": 58,
"bubble_pop": 59,
"current_down": 60,
"bubble_column_up": 61,
"nautilus": 62,
"dolphin": 63,
"campfire_cosy_smoke": 64,
"campfire_signal_smoke": 65,
"dripping_honey": 66,
"falling_honey": 67,
"landing_honey": 68,
"falling_nectar": 69,
"falling_spore_blossom": 70,
"ash": 71,
"crimson_spore": 72,
"warped_spore": 73,
"spore_blossom_air": 74,
"dripping_obsidian_tear": 75,
"falling_obsidian_tear": 76,
"landing_obsidian_tear": 77,
"reverse_portal": 78,
"white_ash": 79,
"small_flame": 80,
"snowflake": 81,
"dripping_dripstone_lava": 82,
"falling_dripstone_lava": 83,
"dripping_dripstone_water": 84,
"falling_dripstone_water": 85,
"glow_squid_ink": 86,
"glow": 87,
"wax_on": 88,
"wax_off": 89,
"electric_spark": 90,
"scrape": 91,
"shriek": 92
}
}

View file

@ -2,237 +2,237 @@
"serverbound": {
"handshaking": [
{
"name": "HandshakeC2SPacket",
"name": "ClientIntentionPacket",
"id": 0
}
],
"play": [
{
"name": "TeleportConfirmC2SPacket",
"name": "ServerboundAcceptTeleportationPacket",
"id": 0
},
{
"name": "QueryBlockNbtC2SPacket",
"name": "ServerboundBlockEntityTagQuery",
"id": 1
},
{
"name": "UpdateDifficultyC2SPacket",
"name": "ServerboundChangeDifficultyPacket",
"id": 2
},
{
"name": "MessageAcknowledgmentC2SPacket",
"name": "ServerboundChatAckPacket",
"id": 3
},
{
"name": "CommandExecutionC2SPacket",
"name": "ServerboundChatCommandPacket",
"id": 4
},
{
"name": "ChatMessageC2SPacket",
"name": "ServerboundChatPacket",
"id": 5
},
{
"name": "ClientStatusC2SPacket",
"name": "ServerboundClientCommandPacket",
"id": 6
},
{
"name": "ClientSettingsC2SPacket",
"name": "ServerboundClientInformationPacket",
"id": 7
},
{
"name": "RequestCommandCompletionsC2SPacket",
"name": "ServerboundCommandSuggestionPacket",
"id": 8
},
{
"name": "ButtonClickC2SPacket",
"name": "ServerboundContainerButtonClickPacket",
"id": 9
},
{
"name": "ClickSlotC2SPacket",
"name": "ServerboundContainerClickPacket",
"id": 10
},
{
"name": "CloseHandledScreenC2SPacket",
"name": "ServerboundContainerClosePacket",
"id": 11
},
{
"name": "CustomPayloadC2SPacket",
"name": "ServerboundCustomPayloadPacket",
"id": 12
},
{
"name": "BookUpdateC2SPacket",
"name": "ServerboundEditBookPacket",
"id": 13
},
{
"name": "QueryEntityNbtC2SPacket",
"name": "ServerboundEntityTagQuery",
"id": 14
},
{
"name": "PlayerInteractEntityC2SPacket",
"name": "ServerboundInteractPacket",
"id": 15
},
{
"name": "JigsawGeneratingC2SPacket",
"name": "ServerboundJigsawGeneratePacket",
"id": 16
},
{
"name": "KeepAliveC2SPacket",
"name": "ServerboundKeepAlivePacket",
"id": 17
},
{
"name": "UpdateDifficultyLockC2SPacket",
"name": "ServerboundLockDifficultyPacket",
"id": 18
},
{
"name": "PositionAndOnGround",
"name": "Pos",
"id": 19
},
{
"name": "Full",
"name": "PosRot",
"id": 20
},
{
"name": "LookAndOnGround",
"name": "Rot",
"id": 21
},
{
"name": "OnGroundOnly",
"name": "StatusOnly",
"id": 22
},
{
"name": "VehicleMoveC2SPacket",
"name": "ServerboundMoveVehiclePacket",
"id": 23
},
{
"name": "BoatPaddleStateC2SPacket",
"name": "ServerboundPaddleBoatPacket",
"id": 24
},
{
"name": "PickFromInventoryC2SPacket",
"name": "ServerboundPickItemPacket",
"id": 25
},
{
"name": "CraftRequestC2SPacket",
"name": "ServerboundPlaceRecipePacket",
"id": 26
},
{
"name": "UpdatePlayerAbilitiesC2SPacket",
"name": "ServerboundPlayerAbilitiesPacket",
"id": 27
},
{
"name": "PlayerActionC2SPacket",
"name": "ServerboundPlayerActionPacket",
"id": 28
},
{
"name": "ClientCommandC2SPacket",
"name": "ServerboundPlayerCommandPacket",
"id": 29
},
{
"name": "PlayerInputC2SPacket",
"name": "ServerboundPlayerInputPacket",
"id": 30
},
{
"name": "PlayPongC2SPacket",
"name": "ServerboundPongPacket",
"id": 31
},
{
"name": "PlayerSessionC2SPacket",
"name": "ServerboundChatSessionUpdatePacket",
"id": 32
},
{
"name": "RecipeCategoryOptionsC2SPacket",
"name": "ServerboundRecipeBookChangeSettingsPacket",
"id": 33
},
{
"name": "RecipeBookDataC2SPacket",
"name": "ServerboundRecipeBookSeenRecipePacket",
"id": 34
},
{
"name": "RenameItemC2SPacket",
"name": "ServerboundRenameItemPacket",
"id": 35
},
{
"name": "ResourcePackStatusC2SPacket",
"name": "ServerboundResourcePackPacket",
"id": 36
},
{
"name": "AdvancementTabC2SPacket",
"name": "ServerboundSeenAdvancementsPacket",
"id": 37
},
{
"name": "SelectMerchantTradeC2SPacket",
"name": "ServerboundSelectTradePacket",
"id": 38
},
{
"name": "UpdateBeaconC2SPacket",
"name": "ServerboundSetBeaconPacket",
"id": 39
},
{
"name": "UpdateSelectedSlotC2SPacket",
"name": "ServerboundSetCarriedItemPacket",
"id": 40
},
{
"name": "UpdateCommandBlockC2SPacket",
"name": "ServerboundSetCommandBlockPacket",
"id": 41
},
{
"name": "UpdateCommandBlockMinecartC2SPacket",
"name": "ServerboundSetCommandMinecartPacket",
"id": 42
},
{
"name": "CreativeInventoryActionC2SPacket",
"name": "ServerboundSetCreativeModeSlotPacket",
"id": 43
},
{
"name": "UpdateJigsawC2SPacket",
"name": "ServerboundSetJigsawBlockPacket",
"id": 44
},
{
"name": "UpdateStructureBlockC2SPacket",
"name": "ServerboundSetStructureBlockPacket",
"id": 45
},
{
"name": "UpdateSignC2SPacket",
"name": "ServerboundSignUpdatePacket",
"id": 46
},
{
"name": "HandSwingC2SPacket",
"name": "ServerboundSwingPacket",
"id": 47
},
{
"name": "SpectatorTeleportC2SPacket",
"name": "ServerboundTeleportToEntityPacket",
"id": 48
},
{
"name": "PlayerInteractBlockC2SPacket",
"name": "ServerboundUseItemOnPacket",
"id": 49
},
{
"name": "PlayerInteractItemC2SPacket",
"name": "ServerboundUseItemPacket",
"id": 50
}
],
"status": [
{
"name": "QueryRequestC2SPacket",
"name": "ServerboundStatusRequestPacket",
"id": 0
},
{
"name": "QueryPingC2SPacket",
"name": "ServerboundPingRequestPacket",
"id": 1
}
],
"login": [
{
"name": "LoginHelloC2SPacket",
"name": "ServerboundHelloPacket",
"id": 0
},
{
"name": "LoginKeyC2SPacket",
"name": "ServerboundKeyPacket",
"id": 1
},
{
"name": "LoginQueryResponseC2SPacket",
"name": "ServerboundCustomQueryPacket",
"id": 2
}
]
@ -241,463 +241,463 @@
"handshaking": [],
"play": [
{
"name": "EntitySpawnS2CPacket",
"name": "ClientboundAddEntityPacket",
"id": 0
},
{
"name": "ExperienceOrbSpawnS2CPacket",
"name": "ClientboundAddExperienceOrbPacket",
"id": 1
},
{
"name": "PlayerSpawnS2CPacket",
"name": "ClientboundAddPlayerPacket",
"id": 2
},
{
"name": "EntityAnimationS2CPacket",
"name": "ClientboundAnimatePacket",
"id": 3
},
{
"name": "StatisticsS2CPacket",
"name": "ClientboundAwardStatsPacket",
"id": 4
},
{
"name": "PlayerActionResponseS2CPacket",
"name": "ClientboundBlockChangedAckPacket",
"id": 5
},
{
"name": "BlockBreakingProgressS2CPacket",
"name": "ClientboundBlockDestructionPacket",
"id": 6
},
{
"name": "BlockEntityUpdateS2CPacket",
"name": "ClientboundBlockEntityDataPacket",
"id": 7
},
{
"name": "BlockEventS2CPacket",
"name": "ClientboundBlockEventPacket",
"id": 8
},
{
"name": "BlockUpdateS2CPacket",
"name": "ClientboundBlockUpdatePacket",
"id": 9
},
{
"name": "BossBarS2CPacket",
"name": "ClientboundBossEventPacket",
"id": 10
},
{
"name": "DifficultyS2CPacket",
"name": "ClientboundChangeDifficultyPacket",
"id": 11
},
{
"name": "ClearTitleS2CPacket",
"name": "ClientboundClearTitlesPacket",
"id": 12
},
{
"name": "CommandSuggestionsS2CPacket",
"name": "ClientboundCommandSuggestionsPacket",
"id": 13
},
{
"name": "CommandTreeS2CPacket",
"name": "ClientboundCommandsPacket",
"id": 14
},
{
"name": "CloseScreenS2CPacket",
"name": "ClientboundContainerClosePacket",
"id": 15
},
{
"name": "InventoryS2CPacket",
"name": "ClientboundContainerSetContentPacket",
"id": 16
},
{
"name": "ScreenHandlerPropertyUpdateS2CPacket",
"name": "ClientboundContainerSetDataPacket",
"id": 17
},
{
"name": "ScreenHandlerSlotUpdateS2CPacket",
"name": "ClientboundContainerSetSlotPacket",
"id": 18
},
{
"name": "CooldownUpdateS2CPacket",
"name": "ClientboundCooldownPacket",
"id": 19
},
{
"name": "ChatSuggestionsS2CPacket",
"name": "ClientboundCustomChatCompletionsPacket",
"id": 20
},
{
"name": "CustomPayloadS2CPacket",
"name": "ClientboundCustomPayloadPacket",
"id": 21
},
{
"name": "RemoveMessageS2CPacket",
"name": "ClientboundDeleteChatPacket",
"id": 22
},
{
"name": "DisconnectS2CPacket",
"name": "ClientboundDisconnectPacket",
"id": 23
},
{
"name": "ProfilelessChatMessageS2CPacket",
"name": "ClientboundDisguisedChatPacket",
"id": 24
},
{
"name": "EntityStatusS2CPacket",
"name": "ClientboundEntityEventPacket",
"id": 25
},
{
"name": "ExplosionS2CPacket",
"name": "ClientboundExplodePacket",
"id": 26
},
{
"name": "UnloadChunkS2CPacket",
"name": "ClientboundForgetLevelChunkPacket",
"id": 27
},
{
"name": "GameStateChangeS2CPacket",
"name": "ClientboundGameEventPacket",
"id": 28
},
{
"name": "OpenHorseScreenS2CPacket",
"name": "ClientboundHorseScreenOpenPacket",
"id": 29
},
{
"name": "WorldBorderInitializeS2CPacket",
"name": "ClientboundInitializeBorderPacket",
"id": 30
},
{
"name": "KeepAliveS2CPacket",
"name": "ClientboundKeepAlivePacket",
"id": 31
},
{
"name": "ChunkDataS2CPacket",
"name": "ClientboundLevelChunkWithLightPacket",
"id": 32
},
{
"name": "WorldEventS2CPacket",
"name": "ClientboundLevelEventPacket",
"id": 33
},
{
"name": "ParticleS2CPacket",
"name": "ClientboundLevelParticlesPacket",
"id": 34
},
{
"name": "LightUpdateS2CPacket",
"name": "ClientboundLightUpdatePacket",
"id": 35
},
{
"name": "GameJoinS2CPacket",
"name": "ClientboundLoginPacket",
"id": 36
},
{
"name": "MapUpdateS2CPacket",
"name": "ClientboundMapItemDataPacket",
"id": 37
},
{
"name": "SetTradeOffersS2CPacket",
"name": "ClientboundMerchantOffersPacket",
"id": 38
},
{
"name": "MoveRelative",
"name": "Pos",
"id": 39
},
{
"name": "RotateAndMoveRelative",
"name": "PosRot",
"id": 40
},
{
"name": "Rotate",
"name": "Rot",
"id": 41
},
{
"name": "VehicleMoveS2CPacket",
"name": "ClientboundMoveVehiclePacket",
"id": 42
},
{
"name": "OpenWrittenBookS2CPacket",
"name": "ClientboundOpenBookPacket",
"id": 43
},
{
"name": "OpenScreenS2CPacket",
"name": "ClientboundOpenScreenPacket",
"id": 44
},
{
"name": "SignEditorOpenS2CPacket",
"name": "ClientboundOpenSignEditorPacket",
"id": 45
},
{
"name": "PlayPingS2CPacket",
"name": "ClientboundPingPacket",
"id": 46
},
{
"name": "CraftFailedResponseS2CPacket",
"name": "ClientboundPlaceGhostRecipePacket",
"id": 47
},
{
"name": "PlayerAbilitiesS2CPacket",
"name": "ClientboundPlayerAbilitiesPacket",
"id": 48
},
{
"name": "ChatMessageS2CPacket",
"name": "ClientboundPlayerChatPacket",
"id": 49
},
{
"name": "EndCombatS2CPacket",
"name": "ClientboundPlayerCombatEndPacket",
"id": 50
},
{
"name": "EnterCombatS2CPacket",
"name": "ClientboundPlayerCombatEnterPacket",
"id": 51
},
{
"name": "DeathMessageS2CPacket",
"name": "ClientboundPlayerCombatKillPacket",
"id": 52
},
{
"name": "PlayerRemoveS2CPacket",
"name": "ClientboundPlayerInfoRemovePacket",
"id": 53
},
{
"name": "PlayerListS2CPacket",
"name": "ClientboundPlayerInfoUpdatePacket",
"id": 54
},
{
"name": "LookAtS2CPacket",
"name": "ClientboundPlayerLookAtPacket",
"id": 55
},
{
"name": "PlayerPositionLookS2CPacket",
"name": "ClientboundPlayerPositionPacket",
"id": 56
},
{
"name": "UnlockRecipesS2CPacket",
"name": "ClientboundRecipePacket",
"id": 57
},
{
"name": "EntitiesDestroyS2CPacket",
"name": "ClientboundRemoveEntitiesPacket",
"id": 58
},
{
"name": "RemoveEntityStatusEffectS2CPacket",
"name": "ClientboundRemoveMobEffectPacket",
"id": 59
},
{
"name": "ResourcePackSendS2CPacket",
"name": "ClientboundResourcePackPacket",
"id": 60
},
{
"name": "PlayerRespawnS2CPacket",
"name": "ClientboundRespawnPacket",
"id": 61
},
{
"name": "EntitySetHeadYawS2CPacket",
"name": "ClientboundRotateHeadPacket",
"id": 62
},
{
"name": "ChunkDeltaUpdateS2CPacket",
"name": "ClientboundSectionBlocksUpdatePacket",
"id": 63
},
{
"name": "SelectAdvancementTabS2CPacket",
"name": "ClientboundSelectAdvancementsTabPacket",
"id": 64
},
{
"name": "ServerMetadataS2CPacket",
"name": "ClientboundServerDataPacket",
"id": 65
},
{
"name": "OverlayMessageS2CPacket",
"name": "ClientboundSetActionBarTextPacket",
"id": 66
},
{
"name": "WorldBorderCenterChangedS2CPacket",
"name": "ClientboundSetBorderCenterPacket",
"id": 67
},
{
"name": "WorldBorderInterpolateSizeS2CPacket",
"name": "ClientboundSetBorderLerpSizePacket",
"id": 68
},
{
"name": "WorldBorderSizeChangedS2CPacket",
"name": "ClientboundSetBorderSizePacket",
"id": 69
},
{
"name": "WorldBorderWarningTimeChangedS2CPacket",
"name": "ClientboundSetBorderWarningDelayPacket",
"id": 70
},
{
"name": "WorldBorderWarningBlocksChangedS2CPacket",
"name": "ClientboundSetBorderWarningDistancePacket",
"id": 71
},
{
"name": "SetCameraEntityS2CPacket",
"name": "ClientboundSetCameraPacket",
"id": 72
},
{
"name": "UpdateSelectedSlotS2CPacket",
"name": "ClientboundSetCarriedItemPacket",
"id": 73
},
{
"name": "ChunkRenderDistanceCenterS2CPacket",
"name": "ClientboundSetChunkCacheCenterPacket",
"id": 74
},
{
"name": "ChunkLoadDistanceS2CPacket",
"name": "ClientboundSetChunkCacheRadiusPacket",
"id": 75
},
{
"name": "PlayerSpawnPositionS2CPacket",
"name": "ClientboundSetDefaultSpawnPositionPacket",
"id": 76
},
{
"name": "ScoreboardDisplayS2CPacket",
"name": "ClientboundSetDisplayObjectivePacket",
"id": 77
},
{
"name": "EntityTrackerUpdateS2CPacket",
"name": "ClientboundSetEntityDataPacket",
"id": 78
},
{
"name": "EntityAttachS2CPacket",
"name": "ClientboundSetEntityLinkPacket",
"id": 79
},
{
"name": "EntityVelocityUpdateS2CPacket",
"name": "ClientboundSetEntityMotionPacket",
"id": 80
},
{
"name": "EntityEquipmentUpdateS2CPacket",
"name": "ClientboundSetEquipmentPacket",
"id": 81
},
{
"name": "ExperienceBarUpdateS2CPacket",
"name": "ClientboundSetExperiencePacket",
"id": 82
},
{
"name": "HealthUpdateS2CPacket",
"name": "ClientboundSetHealthPacket",
"id": 83
},
{
"name": "ScoreboardObjectiveUpdateS2CPacket",
"name": "ClientboundSetObjectivePacket",
"id": 84
},
{
"name": "EntityPassengersSetS2CPacket",
"name": "ClientboundSetPassengersPacket",
"id": 85
},
{
"name": "TeamS2CPacket",
"name": "ClientboundSetPlayerTeamPacket",
"id": 86
},
{
"name": "ScoreboardPlayerUpdateS2CPacket",
"name": "ClientboundSetScorePacket",
"id": 87
},
{
"name": "SimulationDistanceS2CPacket",
"name": "ClientboundSetSimulationDistancePacket",
"id": 88
},
{
"name": "SubtitleS2CPacket",
"name": "ClientboundSetSubtitleTextPacket",
"id": 89
},
{
"name": "WorldTimeUpdateS2CPacket",
"name": "ClientboundSetTimePacket",
"id": 90
},
{
"name": "TitleS2CPacket",
"name": "ClientboundSetTitleTextPacket",
"id": 91
},
{
"name": "TitleFadeS2CPacket",
"name": "ClientboundSetTitlesAnimationPacket",
"id": 92
},
{
"name": "PlaySoundFromEntityS2CPacket",
"name": "ClientboundSoundEntityPacket",
"id": 93
},
{
"name": "PlaySoundS2CPacket",
"name": "ClientboundSoundPacket",
"id": 94
},
{
"name": "StopSoundS2CPacket",
"name": "ClientboundStopSoundPacket",
"id": 95
},
{
"name": "GameMessageS2CPacket",
"name": "ClientboundSystemChatPacket",
"id": 96
},
{
"name": "PlayerListHeaderS2CPacket",
"name": "ClientboundTabListPacket",
"id": 97
},
{
"name": "NbtQueryResponseS2CPacket",
"name": "ClientboundTagQueryPacket",
"id": 98
},
{
"name": "ItemPickupAnimationS2CPacket",
"name": "ClientboundTakeItemEntityPacket",
"id": 99
},
{
"name": "EntityPositionS2CPacket",
"name": "ClientboundTeleportEntityPacket",
"id": 100
},
{
"name": "AdvancementUpdateS2CPacket",
"name": "ClientboundUpdateAdvancementsPacket",
"id": 101
},
{
"name": "EntityAttributesS2CPacket",
"name": "ClientboundUpdateAttributesPacket",
"id": 102
},
{
"name": "FeaturesS2CPacket",
"name": "ClientboundUpdateEnabledFeaturesPacket",
"id": 103
},
{
"name": "EntityStatusEffectS2CPacket",
"name": "ClientboundUpdateMobEffectPacket",
"id": 104
},
{
"name": "SynchronizeRecipesS2CPacket",
"name": "ClientboundUpdateRecipesPacket",
"id": 105
},
{
"name": "SynchronizeTagsS2CPacket",
"name": "ClientboundUpdateTagsPacket",
"id": 106
}
],
"status": [
{
"name": "QueryResponseS2CPacket",
"name": "ClientboundStatusResponsePacket",
"id": 0
},
{
"name": "QueryPongS2CPacket",
"name": "ClientboundPongResponsePacket",
"id": 1
}
],
"login": [
{
"name": "LoginDisconnectS2CPacket",
"name": "ClientboundLoginDisconnectPacket",
"id": 0
},
{
"name": "LoginHelloS2CPacket",
"name": "ClientboundHelloPacket",
"id": 1
},
{
"name": "LoginSuccessS2CPacket",
"name": "ClientboundGameProfilePacket",
"id": 2
},
{
"name": "LoginCompressionS2CPacket",
"name": "ClientboundLoginCompressionPacket",
"id": 3
},
{
"name": "LoginQueryRequestS2CPacket",
"name": "ClientboundCustomQueryPacket",
"id": 4
}
]

View file

@ -14,7 +14,7 @@ dependencies {
// To change the versions see the gradle.properties file
minecraft "com.mojang:minecraft:${project.minecraft_version}"
mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
mappings loom.officialMojangMappings()
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
// modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"

View file

@ -1,42 +0,0 @@
package rs.valence.extractor;
import com.mojang.authlib.GameProfile;
import net.minecraft.entity.Entity;
import net.minecraft.entity.data.DataTracker;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.network.encryption.PlayerPublicKey;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import org.jetbrains.annotations.Nullable;
public class DummyPlayerEntity extends PlayerEntity {
public static final DummyPlayerEntity INSTANCE;
static {
INSTANCE = Main.magicallyInstantiate(DummyPlayerEntity.class);
try {
var dataTrackerField = Entity.class.getDeclaredField("dataTracker");
dataTrackerField.setAccessible(true);
dataTrackerField.set(INSTANCE, new DataTracker(INSTANCE));
INSTANCE.initDataTracker();
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new RuntimeException(e);
}
}
private DummyPlayerEntity(World world, BlockPos pos, float yaw, GameProfile gameProfile, @Nullable PlayerPublicKey publicKey) {
super(world, pos, yaw, gameProfile);
}
@Override
public boolean isSpectator() {
return false;
}
@Override
public boolean isCreative() {
return false;
}
}

View file

@ -1,267 +0,0 @@
package rs.valence.extractor;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.fluid.Fluid;
import net.minecraft.item.map.MapState;
import net.minecraft.recipe.RecipeManager;
import net.minecraft.registry.DynamicRegistryManager;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.entry.RegistryEntry;
import net.minecraft.resource.featuretoggle.FeatureFlags;
import net.minecraft.resource.featuretoggle.FeatureSet;
import net.minecraft.scoreboard.Scoreboard;
import net.minecraft.sound.SoundCategory;
import net.minecraft.sound.SoundEvent;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.util.math.Vec3d;
import net.minecraft.util.math.random.Random;
import net.minecraft.util.profiler.Profiler;
import net.minecraft.world.Difficulty;
import net.minecraft.world.GameRules;
import net.minecraft.world.MutableWorldProperties;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.chunk.ChunkManager;
import net.minecraft.world.dimension.DimensionType;
import net.minecraft.world.entity.EntityLookup;
import net.minecraft.world.event.GameEvent;
import net.minecraft.world.tick.QueryableTickScheduler;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.function.Supplier;
public class DummyWorld extends World {
public static final DummyWorld INSTANCE;
static {
INSTANCE = Main.magicallyInstantiate(DummyWorld.class);
try {
var randomField = World.class.getDeclaredField("random");
randomField.setAccessible(true);
randomField.set(INSTANCE, Random.create());
var propertiesField = World.class.getDeclaredField("properties");
propertiesField.setAccessible(true);
propertiesField.set(INSTANCE, new DummyMutableWorldProperties());
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new RuntimeException(e);
}
}
private DummyWorld(MutableWorldProperties properties, RegistryKey<World> registryRef, RegistryEntry<DimensionType> dimension, Supplier<Profiler> profiler, boolean isClient, boolean debugWorld, long seed, int maxChainedNeighborUpdates) {
super(properties, registryRef, dimension, profiler, isClient, debugWorld, seed, maxChainedNeighborUpdates);
}
@Override
public void updateListeners(BlockPos pos, BlockState oldState, BlockState newState, int flags) {
}
@Override
public void playSound(@Nullable PlayerEntity except, double x, double y, double z, RegistryEntry<SoundEvent> sound, SoundCategory category, float volume, float pitch, long seed) {
}
@Override
public void playSound(@Nullable PlayerEntity except, double x, double y, double z, SoundEvent sound, SoundCategory category, float volume, float pitch, long seed) {
}
@Override
public void playSoundFromEntity(@Nullable PlayerEntity except, Entity entity, RegistryEntry<SoundEvent> sound, SoundCategory category, float volume, float pitch, long seed) {
}
@Override
public String asString() {
return "";
}
@Nullable
@Override
public Entity getEntityById(int id) {
return null;
}
@Nullable
@Override
public MapState getMapState(String id) {
return null;
}
@Override
public void putMapState(String id, MapState state) {
}
@Override
public int getNextMapId() {
return 0;
}
@Override
public void setBlockBreakingInfo(int entityId, BlockPos pos, int progress) {
}
@Override
public Scoreboard getScoreboard() {
return new Scoreboard();
}
@Override
public RecipeManager getRecipeManager() {
return new RecipeManager();
}
@Override
protected EntityLookup<Entity> getEntityLookup() {
return null;
}
@Override
public QueryableTickScheduler<Block> getBlockTickScheduler() {
return null;
}
@Override
public QueryableTickScheduler<Fluid> getFluidTickScheduler() {
return null;
}
@Override
public ChunkManager getChunkManager() {
return null;
}
@Override
public void syncWorldEvent(@Nullable PlayerEntity player, int eventId, BlockPos pos, int data) {
}
@Override
public void emitGameEvent(GameEvent event, Vec3d emitterPos, GameEvent.Emitter emitter) {
}
@Override
public DynamicRegistryManager getRegistryManager() {
return null;
}
@Override
public FeatureSet getEnabledFeatures() {
return FeatureSet.of(FeatureFlags.VANILLA, FeatureFlags.BUNDLE, FeatureFlags.UPDATE_1_20);
}
@Override
public float getBrightness(Direction direction, boolean shaded) {
return 0;
}
@Override
public List<? extends PlayerEntity> getPlayers() {
return List.of();
}
@Override
public RegistryEntry<Biome> getGeneratorStoredBiome(int biomeX, int biomeY, int biomeZ) {
return null;
}
private static class DummyMutableWorldProperties implements MutableWorldProperties {
@Override
public int getSpawnX() {
return 0;
}
@Override
public void setSpawnX(int spawnX) {
}
@Override
public int getSpawnY() {
return 0;
}
@Override
public void setSpawnY(int spawnY) {
}
@Override
public int getSpawnZ() {
return 0;
}
@Override
public void setSpawnZ(int spawnZ) {
}
@Override
public float getSpawnAngle() {
return 0;
}
@Override
public void setSpawnAngle(float spawnAngle) {
}
@Override
public long getTime() {
return 0;
}
@Override
public long getTimeOfDay() {
return 0;
}
@Override
public boolean isThundering() {
return false;
}
@Override
public boolean isRaining() {
return false;
}
@Override
public void setRaining(boolean raining) {
}
@Override
public boolean isHardcore() {
return false;
}
@Override
public GameRules getGameRules() {
return null;
}
@Override
public Difficulty getDifficulty() {
return null;
}
@Override
public boolean isDifficultyLocked() {
return false;
}
}
}

View file

@ -41,7 +41,7 @@ public class Main implements ModInitializer {
new Blocks(),
new Enchants(),
new Entities(),
new EntityData(),
new Misc(),
new Items(),
new Packets(),
new Sounds(),

View file

@ -0,0 +1,261 @@
package rs.valence.extractor;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.Holder;
import net.minecraft.core.RegistryAccess;
import net.minecraft.resources.ResourceKey;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.RandomSource;
import net.minecraft.util.profiling.ProfilerFiller;
import net.minecraft.world.Difficulty;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.flag.FeatureFlagSet;
import net.minecraft.world.flag.FeatureFlags;
import net.minecraft.world.item.crafting.RecipeManager;
import net.minecraft.world.level.GameRules;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.chunk.ChunkSource;
import net.minecraft.world.level.dimension.DimensionType;
import net.minecraft.world.level.entity.LevelEntityGetter;
import net.minecraft.world.level.gameevent.GameEvent;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.saveddata.maps.MapItemSavedData;
import net.minecraft.world.level.storage.WritableLevelData;
import net.minecraft.world.phys.Vec3;
import net.minecraft.world.scores.Scoreboard;
import net.minecraft.world.ticks.LevelTickAccess;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.function.Supplier;
public class MockLevel extends Level {
public static final MockLevel INSTANCE;
static {
INSTANCE = Main.magicallyInstantiate(MockLevel.class);
try {
var randomField = Level.class.getDeclaredField("random");
randomField.setAccessible(true);
randomField.set(INSTANCE, RandomSource.create());
var levelDataField = Level.class.getDeclaredField("levelData");
levelDataField.setAccessible(true);
levelDataField.set(INSTANCE, new MockWritableLevelData());
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new RuntimeException(e);
}
}
private MockLevel(WritableLevelData writableLevelData, ResourceKey<Level> resourceKey, Holder<DimensionType> holder, Supplier<ProfilerFiller> supplier, boolean bl, boolean bl2, long l, int i) {
super(writableLevelData, resourceKey, holder, supplier, bl, bl2, l, i);
}
@Override
public void sendBlockUpdated(BlockPos blockPos, BlockState blockState, BlockState blockState2, int i) {
}
@Override
public void playSeededSound(@Nullable Player player, double d, double e, double f, Holder<SoundEvent> holder, SoundSource soundSource, float g, float h, long l) {
}
@Override
public void playSeededSound(@Nullable Player player, Entity entity, Holder<SoundEvent> holder, SoundSource soundSource, float f, float g, long l) {
}
@Override
public String gatherChunkSourceStats() {
return "";
}
@Nullable
@Override
public Entity getEntity(int i) {
return null;
}
@Nullable
@Override
public MapItemSavedData getMapData(String string) {
return null;
}
@Override
public void setMapData(String string, MapItemSavedData mapItemSavedData) {
}
@Override
public int getFreeMapId() {
return 0;
}
@Override
public void destroyBlockProgress(int i, BlockPos blockPos, int j) {
}
@Override
public Scoreboard getScoreboard() {
return new Scoreboard();
}
@Override
public RecipeManager getRecipeManager() {
return new RecipeManager();
}
@Override
protected LevelEntityGetter<Entity> getEntities() {
return null;
}
@Override
public LevelTickAccess<Block> getBlockTicks() {
return null;
}
@Override
public LevelTickAccess<Fluid> getFluidTicks() {
return null;
}
@Override
public ChunkSource getChunkSource() {
return null;
}
@Override
public void levelEvent(@Nullable Player player, int i, BlockPos blockPos, int j) {
}
@Override
public void gameEvent(GameEvent gameEvent, Vec3 vec3, GameEvent.Context context) {
}
@Override
public float getShade(Direction direction, boolean bl) {
return 0;
}
@Override
public List<? extends Player> players() {
return List.of();
}
@Override
public Holder<Biome> getUncachedNoiseBiome(int i, int j, int k) {
return null;
}
@Override
public RegistryAccess registryAccess() {
return null;
}
@Override
public FeatureFlagSet enabledFeatures() {
return FeatureFlagSet.of(FeatureFlags.VANILLA, FeatureFlags.BUNDLE, FeatureFlags.UPDATE_1_20);
}
private static class MockWritableLevelData implements WritableLevelData {
@Override
public void setXSpawn(int i) {
}
@Override
public void setYSpawn(int i) {
}
@Override
public void setZSpawn(int i) {
}
@Override
public void setSpawnAngle(float f) {
}
@Override
public int getXSpawn() {
return 0;
}
@Override
public int getYSpawn() {
return 0;
}
@Override
public int getZSpawn() {
return 0;
}
@Override
public float getSpawnAngle() {
return 0;
}
@Override
public long getGameTime() {
return 0;
}
@Override
public long getDayTime() {
return 0;
}
@Override
public boolean isThundering() {
return false;
}
@Override
public boolean isRaining() {
return false;
}
@Override
public void setRaining(boolean bl) {
}
@Override
public boolean isHardcore() {
return false;
}
@Override
public GameRules getGameRules() {
return null;
}
@Override
public Difficulty getDifficulty() {
return null;
}
@Override
public boolean isDifficultyLocked() {
return false;
}
}
}

View file

@ -0,0 +1,40 @@
package rs.valence.extractor;
import com.mojang.authlib.GameProfile;
import net.minecraft.core.BlockPos;
import net.minecraft.network.syncher.SynchedEntityData;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
public class MockPlayerEntity extends Player {
public static final MockPlayerEntity INSTANCE;
static {
INSTANCE = Main.magicallyInstantiate(MockPlayerEntity.class);
try {
var entityDataField = Entity.class.getDeclaredField("entityData");
entityDataField.setAccessible(true);
entityDataField.set(INSTANCE, new SynchedEntityData(INSTANCE));
INSTANCE.defineSynchedData();
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new RuntimeException(e);
}
}
public MockPlayerEntity(Level level, BlockPos blockPos, float f, GameProfile gameProfile) {
super(level, blockPos, f, gameProfile);
}
@Override
public boolean isSpectator() {
return false;
}
@Override
public boolean isCreative() {
return false;
}
}

View file

@ -3,9 +3,9 @@ package rs.valence.extractor.extractors;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import net.minecraft.registry.Registries;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.EmptyBlockView;
import net.minecraft.core.BlockPos;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.world.level.EmptyBlockGetter;
import rs.valence.extractor.Main;
import java.util.LinkedHashMap;
@ -28,23 +28,24 @@ public class Blocks implements Main.Extractor {
var blocksJson = new JsonArray();
var stateIdCounter = 0;
var shapes = new LinkedHashMap<Shape, Integer>();
var aabbs = new LinkedHashMap<AABB, Integer>();
for (var block : Registries.BLOCK) {
for (var block : BuiltInRegistries.BLOCK) {
var blockJson = new JsonObject();
blockJson.addProperty("id", Registries.BLOCK.getRawId(block));
blockJson.addProperty("name", Registries.BLOCK.getId(block).getPath());
blockJson.addProperty("translation_key", block.getTranslationKey());
blockJson.addProperty("item_id", Registries.ITEM.getRawId(block.asItem()));
blockJson.addProperty("id", BuiltInRegistries.BLOCK.getId(block));
blockJson.addProperty("name", BuiltInRegistries.BLOCK.getKey(block).getPath());
blockJson.addProperty("translation_key", block.getDescriptionId());
blockJson.addProperty("item_id", BuiltInRegistries.ITEM.getId(block.asItem()));
var propsJson = new JsonArray();
for (var prop : block.getStateManager().getProperties()) {
for (var prop : block.getStateDefinition().getProperties()) {
var propJson = new JsonObject();
propJson.addProperty("name", prop.getName());
var valuesJson = new JsonArray();
for (var value : prop.getValues()) {
for (var value : prop.getPossibleValues()) {
valuesJson.add(value.toString().toLowerCase(Locale.ROOT));
}
propJson.add("values", valuesJson);
@ -54,24 +55,24 @@ public class Blocks implements Main.Extractor {
blockJson.add("properties", propsJson);
var statesJson = new JsonArray();
for (var state : block.getStateManager().getStates()) {
for (var state : block.getStateDefinition().getPossibleStates()) {
var stateJson = new JsonObject();
var id = stateIdCounter++;
stateJson.addProperty("id", id);
stateJson.addProperty("luminance", state.getLuminance());
stateJson.addProperty("opaque", state.isOpaque());
stateJson.addProperty("luminance", state.getLightEmission());
// stateJson.addProperty("opaque", state.isOpaque());
stateJson.addProperty("replaceable", state.getMaterial().isReplaceable());
if (block.getDefaultState().equals(state)) {
if (block.defaultBlockState().equals(state)) {
blockJson.addProperty("default_state_id", id);
}
var collisionShapeIdxsJson = new JsonArray();
for (var box : state.getCollisionShape(EmptyBlockView.INSTANCE, BlockPos.ORIGIN).getBoundingBoxes()) {
var collisionShape = new Shape(box.minX, box.minY, box.minZ, box.maxX, box.maxY, box.maxZ);
for (var aabb : state.getCollisionShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO).toAabbs()) {
var collisionAABB = new AABB(aabb.minX, aabb.minY, aabb.minZ, aabb.maxX, aabb.maxY, aabb.maxZ);
var idx = shapes.putIfAbsent(collisionShape, shapes.size());
collisionShapeIdxsJson.add(Objects.requireNonNullElseGet(idx, () -> shapes.size() - 1));
var idx = aabbs.putIfAbsent(collisionAABB, aabbs.size());
collisionShapeIdxsJson.add(Objects.requireNonNullElseGet(idx, () -> aabbs.size() - 1));
}
stateJson.add("collision_shapes", collisionShapeIdxsJson);
@ -84,7 +85,7 @@ public class Blocks implements Main.Extractor {
}
var shapesJson = new JsonArray();
for (var shape : shapes.keySet()) {
for (var shape : aabbs.keySet()) {
var shapeJson = new JsonObject();
shapeJson.addProperty("min_x", shape.minX);
shapeJson.addProperty("min_y", shape.minY);
@ -95,12 +96,12 @@ public class Blocks implements Main.Extractor {
shapesJson.add(shapeJson);
}
topLevelJson.add("shapes", shapesJson);
topLevelJson.add("aabbs", shapesJson);
topLevelJson.add("blocks", blocksJson);
return topLevelJson;
}
private record Shape(double minX, double minY, double minZ, double maxX, double maxY, double maxZ) {
private record AABB(double minX, double minY, double minZ, double maxX, double maxY, double maxZ) {
}
}

View file

@ -3,7 +3,7 @@ package rs.valence.extractor.extractors;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import net.minecraft.registry.Registries;
import net.minecraft.core.registries.BuiltInRegistries;
import rs.valence.extractor.Main;
public class Enchants implements Main.Extractor {
@ -19,23 +19,23 @@ public class Enchants implements Main.Extractor {
public JsonElement extract() {
var enchantsJson = new JsonArray();
for (var enchant : Registries.ENCHANTMENT) {
for (var enchant : BuiltInRegistries.ENCHANTMENT) {
var enchantJson = new JsonObject();
enchantJson.addProperty("id", Registries.ENCHANTMENT.getRawId(enchant));
enchantJson.addProperty("name", Registries.ENCHANTMENT.getId(enchant).getPath());
enchantJson.addProperty("translation_key", enchant.getTranslationKey());
enchantJson.addProperty("id", BuiltInRegistries.ENCHANTMENT.getId(enchant));
enchantJson.addProperty("name", BuiltInRegistries.ENCHANTMENT.getKey(enchant).getPath());
enchantJson.addProperty("translation_key", enchant.getDescriptionId());
enchantJson.addProperty("min_level", enchant.getMinLevel());
enchantJson.addProperty("max_level", enchant.getMaxLevel());
enchantJson.addProperty("rarity_weight", enchant.getRarity().getWeight());
enchantJson.addProperty("cursed", enchant.isCursed());
enchantJson.addProperty("curse", enchant.isCurse());
var enchantmentSources = new JsonObject();
enchantmentSources.addProperty("treasure", enchant.isTreasure());
enchantmentSources.addProperty("enchantment_table", enchant.isAvailableForEnchantedBookOffer());
// All enchants except for 'Soul speed' and 'Swift sneak' are available for random selection and are only obtainable from loot chests.
enchantmentSources.addProperty("random_selection", enchant.isAvailableForRandomSelection());
enchantmentSources.addProperty("treasure", enchant.isTreasureOnly());
// enchantmentSources.addProperty("enchantment_table", enchant.isAvailableForEnchantedBookOffer());
// // All enchants except for 'Soul speed' and 'Swift sneak' are available for random selection and are only obtainable from loot chests.
// enchantmentSources.addProperty("random_selection", enchant.isAvailableForRandomSelection());
enchantJson.add("sources", enchantmentSources);

View file

@ -1,27 +1,27 @@
package rs.valence.extractor.extractors;
import com.google.gson.*;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityPose;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.data.DataTracker;
import net.minecraft.entity.data.TrackedData;
import net.minecraft.entity.data.TrackedDataHandlerRegistry;
import net.minecraft.entity.passive.CatVariant;
import net.minecraft.entity.passive.FrogVariant;
import net.minecraft.item.ItemStack;
import net.minecraft.particle.ParticleEffect;
import net.minecraft.registry.Registries;
import net.minecraft.registry.entry.RegistryEntry;
import net.minecraft.text.Text;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.EulerAngle;
import net.minecraft.util.math.GlobalPos;
import net.minecraft.village.VillagerData;
import net.minecraft.core.BlockPos;
import net.minecraft.core.GlobalPos;
import net.minecraft.core.Holder;
import net.minecraft.core.Rotations;
import net.minecraft.core.particles.ParticleOptions;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.network.chat.Component;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.network.syncher.EntityDataSerializers;
import net.minecraft.network.syncher.SynchedEntityData;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.Pose;
import net.minecraft.world.entity.animal.CatVariant;
import net.minecraft.world.entity.animal.FrogVariant;
import net.minecraft.world.entity.npc.VillagerData;
import net.minecraft.world.item.ItemStack;
import org.jetbrains.annotations.Nullable;
import rs.valence.extractor.ClassComparator;
import rs.valence.extractor.DummyPlayerEntity;
import rs.valence.extractor.DummyWorld;
import rs.valence.extractor.MockLevel;
import rs.valence.extractor.MockPlayerEntity;
import rs.valence.extractor.Main;
import rs.valence.extractor.Main.Pair;
@ -29,159 +29,49 @@ import java.lang.reflect.ParameterizedType;
import java.util.*;
public class Entities implements Main.Extractor {
private final static Map<String, Bit[]> BIT_FIELDS = Map.ofEntries(
// @formatter:off
bits(
"flags",
bit("on_fire", 0),
bit("sneaking", 1),
bit("sprinting", 3),
bit("swimming", 4),
bit("invisible", 5),
bit("glowing", 6),
bit("fall_flying", 7)
),
bits(
"projectile_flags",
bit("critical", 0),
bit("no_clip", 1)
),
bits(
"living_flags",
bit("using_item", 0),
bit("off_hand_active", 1),
bit("using_riptide", 2)
),
bits(
"player_model_parts",
bit("cape", 0),
bit("jacket", 1),
bit("left_sleeve", 2),
bit("right_sleeve", 3),
bit("left_pants_leg", 4),
bit("right_pants_leg", 5),
bit("hat", 6)
),
bits(
"armor_stand_flags",
bit("small", 0),
bit("show_arms", 1),
bit("hide_base_plate", 2),
bit("marker", 3)
),
bits(
"mob_flags",
bit("ai_disabled", 0),
bit("left_handed", 1),
bit("attacking", 2)
),
bits(
"bat_flags",
bit("hanging", 0)
),
bits(
"horse_flags",
bit("tamed", 1),
bit("saddled", 2),
bit("bred", 3),
bit("eating_grass", 4),
bit("angry", 5),
bit("eating", 6)
),
bits(
"bee_flags",
bit("near_target", 1),
bit("has_stung", 2),
bit("has_nectar", 3)
),
bits(
"fox_flags",
bit("sitting", 0),
bit("crouching", 2),
bit("rolling_head", 3),
bit("chasing", 4),
bit("sleeping", 5),
bit("walking", 6),
bit("aggressive", 7)
),
bits(
"panda_flags",
bit("sneezing", 1),
bit("playing", 2),
bit("sitting", 3),
bit("lying_on_back", 4)
),
bits(
"tameable_flags",
bit("sitting_pose", 0),
bit("tamed", 2)
),
bits(
"iron_golem_flags",
bit("player_created", 0)
),
bits(
"snow_golem_flags",
bit("has_pumpkin", 4)
),
bits(
"blaze_flags",
bit("fire_active", 0)
),
bits(
"vex_flags",
bit("charging", 0)
),
bits(
"spider_flags",
bit("climbing_wall", 0)
)
// @formatter:on
);
public Entities() {
}
private static Pair<String, JsonElement> trackedDataToJson(TrackedData<?> data, DataTracker tracker) {
final var handler = data.getType();
final var val = tracker.get(data);
private static Pair<String, JsonElement> synchedDataToJson(EntityDataAccessor<?> accessor, SynchedEntityData data) {
final var ser = accessor.getSerializer();
final var val = data.get(accessor);
if (handler == TrackedDataHandlerRegistry.BYTE) {
if (ser == EntityDataSerializers.BYTE) {
return new Pair<>("byte", new JsonPrimitive((Byte) val));
} else if (handler == TrackedDataHandlerRegistry.INTEGER) {
} else if (ser == EntityDataSerializers.INT) {
return new Pair<>("integer", new JsonPrimitive((Integer) val));
} else if (handler == TrackedDataHandlerRegistry.LONG) {
} else if (ser == EntityDataSerializers.LONG) {
return new Pair<>("long", new JsonPrimitive((Long) val));
} else if (handler == TrackedDataHandlerRegistry.FLOAT) {
} else if (ser == EntityDataSerializers.FLOAT) {
return new Pair<>("float", new JsonPrimitive((Float) val));
} else if (handler == TrackedDataHandlerRegistry.STRING) {
} else if (ser == EntityDataSerializers.STRING) {
return new Pair<>("string", new JsonPrimitive((String) val));
} else if (handler == TrackedDataHandlerRegistry.TEXT_COMPONENT) {
} else if (ser == EntityDataSerializers.COMPONENT) {
// TODO: return text as json element.
return new Pair<>("text_component", new JsonPrimitive(((Text) val).getString()));
} else if (handler == TrackedDataHandlerRegistry.OPTIONAL_TEXT_COMPONENT) {
var res = ((Optional<?>) val).map(o -> (JsonElement) new JsonPrimitive(((Text) o).getString())).orElse(JsonNull.INSTANCE);
return new Pair<>("optional_text_component", res);
} else if (handler == TrackedDataHandlerRegistry.ITEM_STACK) {
return new Pair<>("component", new JsonPrimitive(((Component) val).getString()));
} else if (ser == EntityDataSerializers.OPTIONAL_COMPONENT) {
var res = ((Optional<?>) val).map(o -> (JsonElement) new JsonPrimitive(((Component) o).getString())).orElse(JsonNull.INSTANCE);
return new Pair<>("optional_component", res);
} else if (ser == EntityDataSerializers.ITEM_STACK) {
// TODO
return new Pair<>("item_stack", new JsonPrimitive(((ItemStack) val).toString()));
} else if (handler == TrackedDataHandlerRegistry.BOOLEAN) {
} else if (ser == EntityDataSerializers.BOOLEAN) {
return new Pair<>("boolean", new JsonPrimitive((Boolean) val));
} else if (handler == TrackedDataHandlerRegistry.ROTATION) {
} else if (ser == EntityDataSerializers.ROTATIONS) {
var json = new JsonObject();
var ea = (EulerAngle) val;
json.addProperty("pitch", ea.getPitch());
json.addProperty("yaw", ea.getYaw());
json.addProperty("roll", ea.getRoll());
var rot = (Rotations) val;
json.addProperty("pitch", rot.getX());
json.addProperty("yaw", rot.getY());
json.addProperty("roll", rot.getZ());
return new Pair<>("rotation", json);
} else if (handler == TrackedDataHandlerRegistry.BLOCK_POS) {
} else if (ser == EntityDataSerializers.BLOCK_POS) {
var bp = (BlockPos) val;
var json = new JsonObject();
json.addProperty("x", bp.getX());
json.addProperty("y", bp.getY());
json.addProperty("z", bp.getZ());
return new Pair<>("block_pos", json);
} else if (handler == TrackedDataHandlerRegistry.OPTIONAL_BLOCK_POS) {
} else if (ser == EntityDataSerializers.OPTIONAL_BLOCK_POS) {
return new Pair<>("optional_block_pos", ((Optional<?>) val).map(o -> {
var bp = (BlockPos) o;
var json = new JsonObject();
@ -190,69 +80,61 @@ public class Entities implements Main.Extractor {
json.addProperty("z", bp.getZ());
return (JsonElement) json;
}).orElse(JsonNull.INSTANCE));
} else if (handler == TrackedDataHandlerRegistry.FACING) {
return new Pair<>("facing", new JsonPrimitive(val.toString()));
} else if (handler == TrackedDataHandlerRegistry.OPTIONAL_UUID) {
} else if (ser == EntityDataSerializers.DIRECTION) {
return new Pair<>("direction", new JsonPrimitive(val.toString()));
} else if (ser == EntityDataSerializers.OPTIONAL_UUID) {
var res = ((Optional<?>) val).map(o -> (JsonElement) new JsonPrimitive(o.toString())).orElse(JsonNull.INSTANCE);
return new Pair<>("optional_uuid", res);
} else if (handler == TrackedDataHandlerRegistry.OPTIONAL_BLOCK_STATE) {
} else if (ser == EntityDataSerializers.BLOCK_STATE) {
// TODO: get raw block state ID.
var res = ((Optional<?>) val).map(o -> (JsonElement) new JsonPrimitive(o.toString())).orElse(JsonNull.INSTANCE);
return new Pair<>("optional_block_state", res);
} else if (handler == TrackedDataHandlerRegistry.NBT_COMPOUND) {
return new Pair<>("block_state", res);
} else if (ser == EntityDataSerializers.COMPOUND_TAG) {
// TODO: base64 binary representation or SNBT?
return new Pair<>("nbt_compound", new JsonPrimitive(val.toString()));
} else if (handler == TrackedDataHandlerRegistry.PARTICLE) {
var id = Registries.PARTICLE_TYPE.getId(((ParticleEffect) val).getType());
return new Pair<>("particle", new JsonPrimitive(id.getPath()));
} else if (handler == TrackedDataHandlerRegistry.VILLAGER_DATA) {
return new Pair<>("compound_tag", new JsonPrimitive(val.toString()));
} else if (ser == EntityDataSerializers.PARTICLE) {
var key = BuiltInRegistries.PARTICLE_TYPE.getKey(((ParticleOptions) val).getType());
return new Pair<>("particle", new JsonPrimitive(key.getPath()));
} else if (ser == EntityDataSerializers.VILLAGER_DATA) {
var vd = (VillagerData) val;
var json = new JsonObject();
var type = Registries.VILLAGER_TYPE.getId(vd.getType()).getPath();
var profession = Registries.VILLAGER_PROFESSION.getId(vd.getProfession()).getPath();
var type = BuiltInRegistries.VILLAGER_TYPE.getKey(vd.getType()).getPath();
var profession = BuiltInRegistries.VILLAGER_PROFESSION.getKey(vd.getProfession()).getPath();
json.addProperty("type", type);
json.addProperty("profession", profession);
json.addProperty("level", vd.getLevel());
return new Pair<>("villager_data", json);
} else if (handler == TrackedDataHandlerRegistry.OPTIONAL_INT) {
} else if (ser == EntityDataSerializers.OPTIONAL_UNSIGNED_INT) {
var opt = (OptionalInt) val;
return new Pair<>("optional_int", opt.isPresent() ? new JsonPrimitive(opt.getAsInt()) : JsonNull.INSTANCE);
} else if (handler == TrackedDataHandlerRegistry.ENTITY_POSE) {
return new Pair<>("entity_pose", new JsonPrimitive(((EntityPose) val).name().toLowerCase(Locale.ROOT)));
} else if (handler == TrackedDataHandlerRegistry.CAT_VARIANT) {
return new Pair<>("cat_variant", new JsonPrimitive(Registries.CAT_VARIANT.getId((CatVariant) val).getPath()));
} else if (handler == TrackedDataHandlerRegistry.FROG_VARIANT) {
return new Pair<>("frog_variant", new JsonPrimitive(Registries.FROG_VARIANT.getId((FrogVariant) val).getPath()));
} else if (handler == TrackedDataHandlerRegistry.OPTIONAL_GLOBAL_POS) {
return new Pair<>("optional_unsigned_int", opt.isPresent() ? new JsonPrimitive(opt.getAsInt()) : JsonNull.INSTANCE);
} else if (ser == EntityDataSerializers.POSE) {
return new Pair<>("entity_pose", new JsonPrimitive(((Pose) val).name().toLowerCase(Locale.ROOT)));
} else if (ser == EntityDataSerializers.CAT_VARIANT) {
return new Pair<>("cat_variant", new JsonPrimitive(BuiltInRegistries.CAT_VARIANT.getKey((CatVariant) val).getPath()));
} else if (ser == EntityDataSerializers.FROG_VARIANT) {
return new Pair<>("frog_variant", new JsonPrimitive(BuiltInRegistries.FROG_VARIANT.getKey((FrogVariant) val).getPath()));
} else if (ser == EntityDataSerializers.OPTIONAL_GLOBAL_POS) {
return new Pair<>("optional_global_pos", ((Optional<?>) val).map(o -> {
var gp = (GlobalPos) o;
var json = new JsonObject();
json.addProperty("dimension", gp.getDimension().getValue().toString());
json.addProperty("dimension", gp.dimension().location().toString());
var posJson = new JsonObject();
posJson.addProperty("x", gp.getPos().getX());
posJson.addProperty("y", gp.getPos().getY());
posJson.addProperty("z", gp.getPos().getZ());
posJson.addProperty("x", gp.pos().getX());
posJson.addProperty("y", gp.pos().getY());
posJson.addProperty("z", gp.pos().getZ());
json.add("position", posJson);
return (JsonElement) json;
}).orElse(JsonNull.INSTANCE));
} else if (handler == TrackedDataHandlerRegistry.PAINTING_VARIANT) {
var variant = ((RegistryEntry<?>) val).getKey().map(k -> k.getValue().getPath()).orElse("");
} else if (ser == EntityDataSerializers.PAINTING_VARIANT) {
var variant = ((Holder<?>) val).unwrapKey().map(k -> k.location().getPath()).orElse("");
return new Pair<>("painting_variant", new JsonPrimitive(variant));
} else {
throw new IllegalArgumentException("Unexpected tracked data type");
}
}
private static Bit bit(String name, int index) {
return new Bit(name, index);
}
private static Map.Entry<String, Bit[]> bits(String fieldName, Bit... bits) {
return Map.entry(fieldName, bits);
}
@Override
public String fileName() {
return "entities.json";
@ -272,8 +154,8 @@ public class Entities implements Main.Extractor {
}
}
final var dataTrackerField = Entity.class.getDeclaredField("dataTracker");
dataTrackerField.setAccessible(true);
final var synchedDataField = Entity.class.getDeclaredField("entityData");
synchedDataField.setAccessible(true);
var entitiesMap = new TreeMap<Class<? extends Entity>, JsonElement>(new ClassComparator());
@ -282,12 +164,12 @@ public class Entities implements Main.Extractor {
@Nullable var entityType = entry.getValue();
assert entityType != null;
// While we can use the tracked data registry and reflection to get the tracked fields on entities, we won't know what their default values are because they are assigned in the entity's constructor.
// To obtain this, we create a dummy world to spawn the entities into and read the data tracker field from the base entity class.
// While we can use reflection to get the synched data fields on entities, we won't know what their default values are because they are assigned in the entity's constructor.
// To obtain this, we create a dummy world to spawn the entities into and read the synched entity data field from the base entity class.
// We also handle player entities specially since they cannot be spawned with EntityType#create.
final var entityInstance = entityType.equals(EntityType.PLAYER) ? DummyPlayerEntity.INSTANCE : entityType.create(DummyWorld.INSTANCE);
final Entity entityInstance = entityType.equals(EntityType.PLAYER) ? MockPlayerEntity.INSTANCE : entityType.create(MockLevel.INSTANCE);
final var dataTracker = (DataTracker) dataTrackerField.get(entityInstance);
final var synchedData = (SynchedEntityData) synchedDataField.get(entityInstance);
while (entitiesMap.get(entityClass) == null) {
var entityJson = new JsonObject();
@ -300,36 +182,27 @@ public class Entities implements Main.Extractor {
}
if (entityType != null) {
entityJson.addProperty("type", Registries.ENTITY_TYPE.getId(entityType).getPath());
entityJson.addProperty("type", BuiltInRegistries.ENTITY_TYPE.getKey(entityType).getPath());
entityJson.add("translation_key", new JsonPrimitive(entityType.getTranslationKey()));
entityJson.add("translation_key", new JsonPrimitive(entityType.getDescriptionId()));
}
var fieldsJson = new JsonArray();
for (var entityField : entityClass.getDeclaredFields()) {
if (entityField.getType().equals(TrackedData.class)) {
if (entityField.getType().equals(EntityDataAccessor.class)) {
entityField.setAccessible(true);
var trackedData = (TrackedData<?>) entityField.get(null);
var trackedData = (EntityDataAccessor<?>) entityField.get(null);
var fieldJson = new JsonObject();
var fieldName = entityField.getName().toLowerCase(Locale.ROOT);
fieldJson.addProperty("name", fieldName);
fieldJson.addProperty("index", trackedData.getId());
var data = Entities.trackedDataToJson(trackedData, dataTracker);
var data = Entities.synchedDataToJson(trackedData, synchedData);
fieldJson.addProperty("type", data.left());
fieldJson.add("default_value", data.right());
var bitsJson = new JsonArray();
for (var bit : BIT_FIELDS.getOrDefault(fieldName, new Bit[]{})) {
var bitJson = new JsonObject();
bitJson.addProperty("name", bit.name);
bitJson.addProperty("index", bit.index);
bitsJson.add(bitJson);
}
fieldJson.add("bits", bitsJson);
fieldsJson.add(fieldJson);
}
}
@ -339,9 +212,9 @@ public class Entities implements Main.Extractor {
if (bb != null) {
var boundingBoxJson = new JsonObject();
boundingBoxJson.addProperty("size_x", bb.getXLength());
boundingBoxJson.addProperty("size_y", bb.getYLength());
boundingBoxJson.addProperty("size_z", bb.getZLength());
boundingBoxJson.addProperty("size_x", bb.getXsize());
boundingBoxJson.addProperty("size_y", bb.getYsize());
boundingBoxJson.addProperty("size_z", bb.getZsize());
entityJson.add("default_bounding_box", boundingBoxJson);
}

View file

@ -1,107 +0,0 @@
package rs.valence.extractor.extractors;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import net.minecraft.entity.EntityPose;
import net.minecraft.entity.EntityStatuses;
import net.minecraft.network.packet.s2c.play.EntityAnimationS2CPacket;
import net.minecraft.registry.Registries;
import net.minecraft.util.math.Direction;
import rs.valence.extractor.Main;
import java.lang.reflect.Modifier;
import java.util.Locale;
public class EntityData implements Main.Extractor {
@Override
public String fileName() {
return "entity_data.json";
}
@Override
public JsonElement extract() throws Exception {
var dataJson = new JsonObject();
var typesJson = new JsonObject();
for (var type : Registries.ENTITY_TYPE) {
typesJson.addProperty(Registries.ENTITY_TYPE.getId(type).getPath(), Registries.ENTITY_TYPE.getRawId(type));
}
dataJson.add("types", typesJson);
var statusesJson = new JsonObject();
for (var field : EntityStatuses.class.getDeclaredFields()) {
if (field.canAccess(null) && field.get(null) instanceof Byte code) {
if (field.getName().equals("field_30030")) {
statusesJson.addProperty("stop_attack", code);
} else {
statusesJson.addProperty(field.getName().toLowerCase(Locale.ROOT), code);
}
}
}
dataJson.add("statuses", statusesJson);
var animationsJson = new JsonObject();
for (var field : EntityAnimationS2CPacket.class.getDeclaredFields()) {
field.setAccessible(true);
if (Modifier.isStatic(field.getModifiers()) && field.canAccess(null) && field.get(null) instanceof Integer i) {
animationsJson.addProperty(field.getName().toLowerCase(Locale.ROOT), i);
}
}
dataJson.add("animations", animationsJson);
var villagerTypesJson = new JsonObject();
for (var type : Registries.VILLAGER_TYPE) {
villagerTypesJson.addProperty(Registries.VILLAGER_TYPE.getId(type).getPath(), Registries.VILLAGER_TYPE.getRawId(type));
}
dataJson.add("villager_types", villagerTypesJson);
var villagerProfessionsJson = new JsonObject();
for (var profession : Registries.VILLAGER_PROFESSION) {
villagerProfessionsJson.addProperty(profession.id(), Registries.VILLAGER_PROFESSION.getRawId(profession));
}
dataJson.add("villager_professions", villagerProfessionsJson);
var catVariantsJson = new JsonObject();
for (var variant : Registries.CAT_VARIANT) {
catVariantsJson.addProperty(Registries.CAT_VARIANT.getId(variant).getPath(), Registries.CAT_VARIANT.getRawId(variant));
}
dataJson.add("cat_variants", catVariantsJson);
var frogVariantsJson = new JsonObject();
for (var variant : Registries.FROG_VARIANT) {
frogVariantsJson.addProperty(Registries.FROG_VARIANT.getId(variant).getPath(), Registries.FROG_VARIANT.getRawId(variant));
}
dataJson.add("frog_variants", frogVariantsJson);
var paintingVariantsJson = new JsonObject();
for (var variant : Registries.PAINTING_VARIANT) {
var variantJson = new JsonObject();
variantJson.addProperty("id", Registries.PAINTING_VARIANT.getRawId(variant));
variantJson.addProperty("width", variant.getWidth());
variantJson.addProperty("height", variant.getHeight());
paintingVariantsJson.add(Registries.PAINTING_VARIANT.getId(variant).getPath(), variantJson);
}
dataJson.add("painting_variants", paintingVariantsJson);
var facingJson = new JsonObject();
for (var dir : Direction.values()) {
facingJson.addProperty(dir.getName(), dir.getId());
}
dataJson.add("facing", facingJson);
var posesJson = new JsonObject();
var poses = EntityPose.values();
for (int i = 0; i < poses.length; i++) {
posesJson.addProperty(poses[i].name().toLowerCase(Locale.ROOT), i);
}
dataJson.add("poses", posesJson);
var particleTypesJson = new JsonObject();
for (var type : Registries.PARTICLE_TYPE) {
particleTypesJson.addProperty(Registries.PARTICLE_TYPE.getId(type).getPath(), Registries.PARTICLE_TYPE.getRawId(type));
}
dataJson.add("particle_types", particleTypesJson);
return dataJson;
}
}

View file

@ -3,7 +3,7 @@ package rs.valence.extractor.extractors;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import net.minecraft.registry.Registries;
import net.minecraft.core.registries.BuiltInRegistries;
import rs.valence.extractor.Main;
public class Items implements Main.Extractor {
@ -19,37 +19,37 @@ public class Items implements Main.Extractor {
public JsonElement extract() throws Exception {
var itemsJson = new JsonArray();
for (var item : Registries.ITEM) {
for (var item : BuiltInRegistries.ITEM) {
var itemJson = new JsonObject();
itemJson.addProperty("id", Registries.ITEM.getRawId(item));
itemJson.addProperty("name", Registries.ITEM.getId(item).getPath());
itemJson.addProperty("translation_key", item.getTranslationKey());
itemJson.addProperty("max_stack", item.getMaxCount());
itemJson.addProperty("id", BuiltInRegistries.ITEM.getId(item));
itemJson.addProperty("name", BuiltInRegistries.ITEM.getKey(item).getPath());
itemJson.addProperty("translation_key", item.getDescriptionId());
itemJson.addProperty("max_stack_size", item.getMaxStackSize());
itemJson.addProperty("max_durability", item.getMaxDamage());
itemJson.addProperty("enchantability", item.getEnchantability());
itemJson.addProperty("fireproof", item.isFireproof());
itemJson.addProperty("enchantment_value", item.getEnchantmentValue());
itemJson.addProperty("fireproof", item.isFireResistant());
if (item.getFoodComponent() != null) {
if (item.getFoodProperties() != null) {
var foodJson = new JsonObject();
var foodComp = item.getFoodComponent();
var foodProps = item.getFoodProperties();
foodJson.addProperty("hunger", foodComp.getHunger());
foodJson.addProperty("saturation", foodComp.getSaturationModifier());
foodJson.addProperty("always_edible", foodComp.isAlwaysEdible());
foodJson.addProperty("meat", foodComp.isMeat());
foodJson.addProperty("snack", foodComp.isSnack());
foodJson.addProperty("nutrition", foodProps.getNutrition());
foodJson.addProperty("saturation", foodProps.getSaturationModifier());
foodJson.addProperty("always_edible", foodProps.canAlwaysEat());
foodJson.addProperty("meat", foodProps.isMeat());
foodJson.addProperty("fast_food", foodProps.isFastFood());
itemJson.add("food", foodJson);
var effectsJson = new JsonArray();
for (var pair : foodComp.getStatusEffects()) {
for (var pair : foodProps.getEffects()) {
var effectJson = new JsonObject();
var effect = pair.getFirst();
var chance = pair.getSecond();
effectJson.addProperty("chance", chance);
effectJson.addProperty("translation_key", effect.getEffectType().getTranslationKey());
effectJson.addProperty("translation_key", effect.getDescriptionId());
// TODO: more effect information.
effectsJson.add(effectJson);

View file

@ -0,0 +1,103 @@
package rs.valence.extractor.extractors;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import net.minecraft.core.Direction;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.network.protocol.game.ClientboundAnimatePacket;
import net.minecraft.world.entity.EntityEvent;
import net.minecraft.world.entity.Pose;
import rs.valence.extractor.Main;
import java.lang.reflect.Modifier;
import java.util.Locale;
public class Misc implements Main.Extractor {
@Override
public String fileName() {
return "misc.json";
}
@Override
public JsonElement extract() throws Exception {
var dataJson = new JsonObject();
var entityTypeJson = new JsonObject();
for (var type : BuiltInRegistries.ENTITY_TYPE) {
entityTypeJson.addProperty(BuiltInRegistries.ENTITY_TYPE.getKey(type).getPath(), BuiltInRegistries.ENTITY_TYPE.getId(type));
}
dataJson.add("entity_type", entityTypeJson);
var entityEventJson = new JsonObject();
for (var field : EntityEvent.class.getDeclaredFields()) {
if (field.canAccess(null) && field.get(null) instanceof Byte code) {
entityEventJson.addProperty(field.getName().toLowerCase(Locale.ROOT), code);
}
}
dataJson.add("entity_event", entityEventJson);
var entityAnimationJson = new JsonObject();
for (var field : ClientboundAnimatePacket.class.getDeclaredFields()) {
field.setAccessible(true);
if (Modifier.isStatic(field.getModifiers()) && field.canAccess(null) && field.get(null) instanceof Integer i) {
entityAnimationJson.addProperty(field.getName().toLowerCase(Locale.ROOT), i);
}
}
dataJson.add("entity_animation", entityAnimationJson);
var villagerTypeJson = new JsonObject();
for (var type : BuiltInRegistries.VILLAGER_TYPE) {
villagerTypeJson.addProperty(BuiltInRegistries.VILLAGER_TYPE.getKey(type).getPath(), BuiltInRegistries.VILLAGER_TYPE.getId(type));
}
dataJson.add("villager_type", villagerTypeJson);
var villagerProfessionJson = new JsonObject();
for (var profession : BuiltInRegistries.VILLAGER_PROFESSION) {
villagerProfessionJson.addProperty(profession.name(), BuiltInRegistries.VILLAGER_PROFESSION.getId(profession));
}
dataJson.add("villager_profession", villagerProfessionJson);
var catVariantJson = new JsonObject();
for (var variant : BuiltInRegistries.CAT_VARIANT) {
catVariantJson.addProperty(BuiltInRegistries.CAT_VARIANT.getKey(variant).getPath(), BuiltInRegistries.CAT_VARIANT.getId(variant));
}
dataJson.add("cat_variant", catVariantJson);
var frogVariantJson = new JsonObject();
for (var variant : BuiltInRegistries.FROG_VARIANT) {
frogVariantJson.addProperty(BuiltInRegistries.FROG_VARIANT.getKey(variant).getPath(), BuiltInRegistries.FROG_VARIANT.getId(variant));
}
dataJson.add("frog_variant", frogVariantJson);
var paintingVariantJson = new JsonObject();
for (var variant : BuiltInRegistries.PAINTING_VARIANT) {
var variantJson = new JsonObject();
variantJson.addProperty("id", BuiltInRegistries.PAINTING_VARIANT.getId(variant));
variantJson.addProperty("width", variant.getWidth());
variantJson.addProperty("height", variant.getHeight());
paintingVariantJson.add(BuiltInRegistries.PAINTING_VARIANT.getKey(variant).getPath(), variantJson);
}
dataJson.add("painting_variant", paintingVariantJson);
var directionJson = new JsonObject();
for (var dir : Direction.values()) {
directionJson.addProperty(dir.getName(), dir.get3DDataValue());
}
dataJson.add("direction", directionJson);
var poseJson = new JsonObject();
var poses = Pose.values();
for (int i = 0; i < poses.length; i++) {
poseJson.addProperty(poses[i].name().toLowerCase(Locale.ROOT), i);
}
dataJson.add("pose", poseJson);
var particleTypeJson = new JsonObject();
for (var type : BuiltInRegistries.PARTICLE_TYPE) {
particleTypeJson.addProperty(BuiltInRegistries.PARTICLE_TYPE.getKey(type).getPath(), BuiltInRegistries.PARTICLE_TYPE.getId(type));
}
dataJson.add("particle_type", particleTypeJson);
return dataJson;
}
}

View file

@ -3,8 +3,8 @@ package rs.valence.extractor.extractors;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import net.minecraft.network.NetworkSide;
import net.minecraft.network.NetworkState;
import net.minecraft.network.ConnectionProtocol;
import net.minecraft.network.protocol.PacketFlow;
import rs.valence.extractor.Main;
import java.util.Locale;
@ -20,13 +20,13 @@ public class Packets implements Main.Extractor {
public JsonElement extract() {
var packetsJson = new JsonObject();
for (var side : NetworkSide.values()) {
var sideJson = new JsonObject();
for (var flow : PacketFlow.values()) {
var flowJson = new JsonObject();
for (var state : NetworkState.values()) {
var stateJson = new JsonArray();
for (var proto : ConnectionProtocol.values()) {
var protoJson = new JsonArray();
var map = state.getPacketIdToPacketMap(side);
var map = proto.getPacketsByIds(flow);
for (var id : new TreeSet<>(map.keySet())) {
var packetJson = new JsonObject();
@ -34,13 +34,13 @@ public class Packets implements Main.Extractor {
packetJson.addProperty("name", map.get(id.intValue()).getSimpleName());
packetJson.addProperty("id", id);
stateJson.add(packetJson);
protoJson.add(packetJson);
}
sideJson.add(state.name().toLowerCase(Locale.ROOT), stateJson);
flowJson.add(proto.name().toLowerCase(Locale.ROOT), protoJson);
}
packetsJson.add(side.name().toLowerCase(Locale.ROOT), sideJson);
packetsJson.add(flow.name().toLowerCase(Locale.ROOT), flowJson);
}
return packetsJson;

View file

@ -3,7 +3,7 @@ package rs.valence.extractor.extractors;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import net.minecraft.registry.Registries;
import net.minecraft.core.registries.BuiltInRegistries;
import rs.valence.extractor.Main;
public class Sounds implements Main.Extractor {
@ -19,10 +19,10 @@ public class Sounds implements Main.Extractor {
public JsonElement extract() throws Exception {
var itemsJson = new JsonArray();
for (var sound : Registries.SOUND_EVENT) {
for (var sound : BuiltInRegistries.SOUND_EVENT) {
var itemJson = new JsonObject();
itemJson.addProperty("id", Registries.SOUND_EVENT.getRawId(sound));
itemJson.addProperty("name", Registries.SOUND_EVENT.getId(sound).getPath());
itemJson.addProperty("id", BuiltInRegistries.SOUND_EVENT.getId(sound));
itemJson.addProperty("name", BuiltInRegistries.SOUND_EVENT.getKey(sound).getPath());
itemsJson.add(itemJson);
}

View file

@ -3,7 +3,7 @@ package rs.valence.extractor.extractors;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import net.minecraft.util.Language;
import net.minecraft.locale.Language;
import rs.valence.extractor.Main;
import java.lang.reflect.Field;