Extractor: minimize everything
- blocks.json 8.3MB -> 4.1MB - items.json 988KB -> 548KB - packets.json 6.9kb -> 4.2kb - particles.json 3.5kb -> 1.6kb - recipies.json 376kb -> 264kb - screens.json 731b -> 315b - sounds.json 72.2kb -> 42.2kb - synced_registeries.json 143.3kb -> 87.6kb - tags.json 335.4kb -> 165.8kb
This commit is contained in:
parent
0cc693e4b2
commit
796341be05
367219
assets/blocks.json
367219
assets/blocks.json
File diff suppressed because one or more lines are too long
33130
assets/items.json
33130
assets/items.json
File diff suppressed because one or more lines are too long
@ -1,256 +1 @@
|
|||||||
{
|
{"serverbound":{"handshake":["intention"],"status":["status_request","ping_request"],"login":["hello","key","custom_query_answer","login_acknowledged","cookie_response"],"config":["client_information","cookie_response","custom_payload","finish_configuration","keep_alive","pong","resource_pack","select_known_packs"],"play":["accept_teleportation","block_entity_tag_query","bundle_item_selected","change_difficulty","chat_ack","chat_command","chat_command_signed","chat","chat_session_update","chunk_batch_received","client_command","client_tick_end","client_information","command_suggestion","configuration_acknowledged","container_button_click","container_click","container_close","container_slot_state_changed","cookie_response","custom_payload","debug_sample_subscription","edit_book","entity_tag_query","interact","jigsaw_generate","keep_alive","lock_difficulty","move_player_pos","move_player_pos_rot","move_player_rot","move_player_status_only","move_vehicle","paddle_boat","pick_item","ping_request","place_recipe","player_abilities","player_action","player_command","player_input","pong","recipe_book_change_settings","recipe_book_seen_recipe","rename_item","resource_pack","seen_advancements","select_trade","set_beacon","set_carried_item","set_command_block","set_command_minecart","set_creative_mode_slot","set_jigsaw_block","set_structure_block","sign_update","swing","teleport_to_entity","use_item_on","use_item"]},"clientbound":{"status":["status_response","pong_response"],"login":["login_disconnect","hello","login_finished","login_compression","custom_query","cookie_request"],"config":["cookie_request","custom_payload","disconnect","finish_configuration","keep_alive","ping","reset_chat","registry_data","resource_pack_pop","resource_pack_push","store_cookie","transfer","update_enabled_features","update_tags","select_known_packs","custom_report_details","server_links"],"play":["bundle_delimiter","add_entity","add_experience_orb","animate","award_stats","block_changed_ack","block_destruction","block_entity_data","block_event","block_update","boss_event","change_difficulty","chunk_batch_finished","chunk_batch_start","chunks_biomes","clear_titles","command_suggestions","commands","container_close","container_set_content","container_set_data","container_set_slot","cookie_request","cooldown","custom_chat_completions","custom_payload","damage_event","debug_sample","delete_chat","disconnect","disguised_chat","entity_event","entity_position_sync","explode","forget_level_chunk","game_event","horse_screen_open","hurt_animation","initialize_border","keep_alive","level_chunk_with_light","level_event","level_particles","light_update","login","map_item_data","merchant_offers","move_entity_pos","move_entity_pos_rot","move_minecart_along_track","move_entity_rot","move_vehicle","open_book","open_screen","open_sign_editor","ping","pong_response","place_ghost_recipe","player_abilities","player_chat","player_combat_end","player_combat_enter","player_combat_kill","player_info_remove","player_info_update","player_look_at","player_position","player_rotation","recipe_book_add","recipe_book_remove","recipe_book_settings","remove_entities","remove_mob_effect","reset_score","resource_pack_pop","resource_pack_push","respawn","rotate_head","section_blocks_update","select_advancements_tab","server_data","set_action_bar_text","set_border_center","set_border_lerp_size","set_border_size","set_border_warning_delay","set_border_warning_distance","set_camera","set_chunk_cache_center","set_chunk_cache_radius","set_cursor_item","set_default_spawn_position","set_display_objective","set_entity_data","set_entity_link","set_entity_motion","set_equipment","set_experience","set_health","set_held_slot","set_objective","set_passengers","set_player_inventory","set_player_team","set_score","set_simulation_distance","set_subtitle_text","set_time","set_title_text","set_titles_animation","sound_entity","sound","start_configuration","stop_sound","store_cookie","system_chat","tab_list","tag_query","take_item_entity","teleport_entity","ticking_state","ticking_step","transfer","update_advancements","update_attributes","update_mob_effect","update_recipes","update_tags","projectile_power","custom_report_details","server_links"]}}
|
||||||
"serverbound": {
|
|
||||||
"handshake": {
|
|
||||||
"intention": 0
|
|
||||||
},
|
|
||||||
"status": {
|
|
||||||
"status_request": 0,
|
|
||||||
"ping_request": 1
|
|
||||||
},
|
|
||||||
"login": {
|
|
||||||
"hello": 0,
|
|
||||||
"key": 1,
|
|
||||||
"custom_query_answer": 2,
|
|
||||||
"login_acknowledged": 3,
|
|
||||||
"cookie_response": 4
|
|
||||||
},
|
|
||||||
"config": {
|
|
||||||
"client_information": 0,
|
|
||||||
"cookie_response": 1,
|
|
||||||
"custom_payload": 2,
|
|
||||||
"finish_configuration": 3,
|
|
||||||
"keep_alive": 4,
|
|
||||||
"pong": 5,
|
|
||||||
"resource_pack": 6,
|
|
||||||
"select_known_packs": 7
|
|
||||||
},
|
|
||||||
"play": {
|
|
||||||
"accept_teleportation": 0,
|
|
||||||
"block_entity_tag_query": 1,
|
|
||||||
"bundle_item_selected": 2,
|
|
||||||
"change_difficulty": 3,
|
|
||||||
"chat_ack": 4,
|
|
||||||
"chat_command": 5,
|
|
||||||
"chat_command_signed": 6,
|
|
||||||
"chat": 7,
|
|
||||||
"chat_session_update": 8,
|
|
||||||
"chunk_batch_received": 9,
|
|
||||||
"client_command": 10,
|
|
||||||
"client_tick_end": 11,
|
|
||||||
"client_information": 12,
|
|
||||||
"command_suggestion": 13,
|
|
||||||
"configuration_acknowledged": 14,
|
|
||||||
"container_button_click": 15,
|
|
||||||
"container_click": 16,
|
|
||||||
"container_close": 17,
|
|
||||||
"container_slot_state_changed": 18,
|
|
||||||
"cookie_response": 19,
|
|
||||||
"custom_payload": 20,
|
|
||||||
"debug_sample_subscription": 21,
|
|
||||||
"edit_book": 22,
|
|
||||||
"entity_tag_query": 23,
|
|
||||||
"interact": 24,
|
|
||||||
"jigsaw_generate": 25,
|
|
||||||
"keep_alive": 26,
|
|
||||||
"lock_difficulty": 27,
|
|
||||||
"move_player_pos": 28,
|
|
||||||
"move_player_pos_rot": 29,
|
|
||||||
"move_player_rot": 30,
|
|
||||||
"move_player_status_only": 31,
|
|
||||||
"move_vehicle": 32,
|
|
||||||
"paddle_boat": 33,
|
|
||||||
"pick_item": 34,
|
|
||||||
"ping_request": 35,
|
|
||||||
"place_recipe": 36,
|
|
||||||
"player_abilities": 37,
|
|
||||||
"player_action": 38,
|
|
||||||
"player_command": 39,
|
|
||||||
"player_input": 40,
|
|
||||||
"pong": 41,
|
|
||||||
"recipe_book_change_settings": 42,
|
|
||||||
"recipe_book_seen_recipe": 43,
|
|
||||||
"rename_item": 44,
|
|
||||||
"resource_pack": 45,
|
|
||||||
"seen_advancements": 46,
|
|
||||||
"select_trade": 47,
|
|
||||||
"set_beacon": 48,
|
|
||||||
"set_carried_item": 49,
|
|
||||||
"set_command_block": 50,
|
|
||||||
"set_command_minecart": 51,
|
|
||||||
"set_creative_mode_slot": 52,
|
|
||||||
"set_jigsaw_block": 53,
|
|
||||||
"set_structure_block": 54,
|
|
||||||
"sign_update": 55,
|
|
||||||
"swing": 56,
|
|
||||||
"teleport_to_entity": 57,
|
|
||||||
"use_item_on": 58,
|
|
||||||
"use_item": 59
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"clientbound": {
|
|
||||||
"status": {
|
|
||||||
"status_response": 0,
|
|
||||||
"pong_response": 1
|
|
||||||
},
|
|
||||||
"login": {
|
|
||||||
"login_disconnect": 0,
|
|
||||||
"hello": 1,
|
|
||||||
"login_finished": 2,
|
|
||||||
"login_compression": 3,
|
|
||||||
"custom_query": 4,
|
|
||||||
"cookie_request": 5
|
|
||||||
},
|
|
||||||
"config": {
|
|
||||||
"cookie_request": 0,
|
|
||||||
"custom_payload": 1,
|
|
||||||
"disconnect": 2,
|
|
||||||
"finish_configuration": 3,
|
|
||||||
"keep_alive": 4,
|
|
||||||
"ping": 5,
|
|
||||||
"reset_chat": 6,
|
|
||||||
"registry_data": 7,
|
|
||||||
"resource_pack_pop": 8,
|
|
||||||
"resource_pack_push": 9,
|
|
||||||
"store_cookie": 10,
|
|
||||||
"transfer": 11,
|
|
||||||
"update_enabled_features": 12,
|
|
||||||
"update_tags": 13,
|
|
||||||
"select_known_packs": 14,
|
|
||||||
"custom_report_details": 15,
|
|
||||||
"server_links": 16
|
|
||||||
},
|
|
||||||
"play": {
|
|
||||||
"bundle_delimiter": 0,
|
|
||||||
"add_entity": 1,
|
|
||||||
"add_experience_orb": 2,
|
|
||||||
"animate": 3,
|
|
||||||
"award_stats": 4,
|
|
||||||
"block_changed_ack": 5,
|
|
||||||
"block_destruction": 6,
|
|
||||||
"block_entity_data": 7,
|
|
||||||
"block_event": 8,
|
|
||||||
"block_update": 9,
|
|
||||||
"boss_event": 10,
|
|
||||||
"change_difficulty": 11,
|
|
||||||
"chunk_batch_finished": 12,
|
|
||||||
"chunk_batch_start": 13,
|
|
||||||
"chunks_biomes": 14,
|
|
||||||
"clear_titles": 15,
|
|
||||||
"command_suggestions": 16,
|
|
||||||
"commands": 17,
|
|
||||||
"container_close": 18,
|
|
||||||
"container_set_content": 19,
|
|
||||||
"container_set_data": 20,
|
|
||||||
"container_set_slot": 21,
|
|
||||||
"cookie_request": 22,
|
|
||||||
"cooldown": 23,
|
|
||||||
"custom_chat_completions": 24,
|
|
||||||
"custom_payload": 25,
|
|
||||||
"damage_event": 26,
|
|
||||||
"debug_sample": 27,
|
|
||||||
"delete_chat": 28,
|
|
||||||
"disconnect": 29,
|
|
||||||
"disguised_chat": 30,
|
|
||||||
"entity_event": 31,
|
|
||||||
"entity_position_sync": 32,
|
|
||||||
"explode": 33,
|
|
||||||
"forget_level_chunk": 34,
|
|
||||||
"game_event": 35,
|
|
||||||
"horse_screen_open": 36,
|
|
||||||
"hurt_animation": 37,
|
|
||||||
"initialize_border": 38,
|
|
||||||
"keep_alive": 39,
|
|
||||||
"level_chunk_with_light": 40,
|
|
||||||
"level_event": 41,
|
|
||||||
"level_particles": 42,
|
|
||||||
"light_update": 43,
|
|
||||||
"login": 44,
|
|
||||||
"map_item_data": 45,
|
|
||||||
"merchant_offers": 46,
|
|
||||||
"move_entity_pos": 47,
|
|
||||||
"move_entity_pos_rot": 48,
|
|
||||||
"move_minecart_along_track": 49,
|
|
||||||
"move_entity_rot": 50,
|
|
||||||
"move_vehicle": 51,
|
|
||||||
"open_book": 52,
|
|
||||||
"open_screen": 53,
|
|
||||||
"open_sign_editor": 54,
|
|
||||||
"ping": 55,
|
|
||||||
"pong_response": 56,
|
|
||||||
"place_ghost_recipe": 57,
|
|
||||||
"player_abilities": 58,
|
|
||||||
"player_chat": 59,
|
|
||||||
"player_combat_end": 60,
|
|
||||||
"player_combat_enter": 61,
|
|
||||||
"player_combat_kill": 62,
|
|
||||||
"player_info_remove": 63,
|
|
||||||
"player_info_update": 64,
|
|
||||||
"player_look_at": 65,
|
|
||||||
"player_position": 66,
|
|
||||||
"player_rotation": 67,
|
|
||||||
"recipe_book_add": 68,
|
|
||||||
"recipe_book_remove": 69,
|
|
||||||
"recipe_book_settings": 70,
|
|
||||||
"remove_entities": 71,
|
|
||||||
"remove_mob_effect": 72,
|
|
||||||
"reset_score": 73,
|
|
||||||
"resource_pack_pop": 74,
|
|
||||||
"resource_pack_push": 75,
|
|
||||||
"respawn": 76,
|
|
||||||
"rotate_head": 77,
|
|
||||||
"section_blocks_update": 78,
|
|
||||||
"select_advancements_tab": 79,
|
|
||||||
"server_data": 80,
|
|
||||||
"set_action_bar_text": 81,
|
|
||||||
"set_border_center": 82,
|
|
||||||
"set_border_lerp_size": 83,
|
|
||||||
"set_border_size": 84,
|
|
||||||
"set_border_warning_delay": 85,
|
|
||||||
"set_border_warning_distance": 86,
|
|
||||||
"set_camera": 87,
|
|
||||||
"set_chunk_cache_center": 88,
|
|
||||||
"set_chunk_cache_radius": 89,
|
|
||||||
"set_cursor_item": 90,
|
|
||||||
"set_default_spawn_position": 91,
|
|
||||||
"set_display_objective": 92,
|
|
||||||
"set_entity_data": 93,
|
|
||||||
"set_entity_link": 94,
|
|
||||||
"set_entity_motion": 95,
|
|
||||||
"set_equipment": 96,
|
|
||||||
"set_experience": 97,
|
|
||||||
"set_health": 98,
|
|
||||||
"set_held_slot": 99,
|
|
||||||
"set_objective": 100,
|
|
||||||
"set_passengers": 101,
|
|
||||||
"set_player_inventory": 102,
|
|
||||||
"set_player_team": 103,
|
|
||||||
"set_score": 104,
|
|
||||||
"set_simulation_distance": 105,
|
|
||||||
"set_subtitle_text": 106,
|
|
||||||
"set_time": 107,
|
|
||||||
"set_title_text": 108,
|
|
||||||
"set_titles_animation": 109,
|
|
||||||
"sound_entity": 110,
|
|
||||||
"sound": 111,
|
|
||||||
"start_configuration": 112,
|
|
||||||
"stop_sound": 113,
|
|
||||||
"store_cookie": 114,
|
|
||||||
"system_chat": 115,
|
|
||||||
"tab_list": 116,
|
|
||||||
"tag_query": 117,
|
|
||||||
"take_item_entity": 118,
|
|
||||||
"teleport_entity": 119,
|
|
||||||
"ticking_state": 120,
|
|
||||||
"ticking_step": 121,
|
|
||||||
"transfer": 122,
|
|
||||||
"update_advancements": 123,
|
|
||||||
"update_attributes": 124,
|
|
||||||
"update_mob_effect": 125,
|
|
||||||
"update_recipes": 126,
|
|
||||||
"update_tags": 127,
|
|
||||||
"projectile_power": 128,
|
|
||||||
"custom_report_details": 129,
|
|
||||||
"server_links": 130
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,113 +1 @@
|
|||||||
{
|
["angry_villager","block","block_marker","bubble","cloud","crit","damage_indicator","dragon_breath","dripping_lava","falling_lava","landing_lava","dripping_water","falling_water","dust","dust_color_transition","effect","elder_guardian","enchanted_hit","enchant","end_rod","entity_effect","explosion_emitter","explosion","gust","small_gust","gust_emitter_large","gust_emitter_small","sonic_boom","falling_dust","firework","fishing","flame","infested","cherry_leaves","sculk_soul","sculk_charge","sculk_charge_pop","soul_fire_flame","soul","flash","happy_villager","composter","heart","instant_effect","item","vibration","trail","item_slime","item_cobweb","item_snowball","large_smoke","lava","mycelium","note","poof","portal","rain","smoke","white_smoke","sneeze","spit","squid_ink","sweep_attack","totem_of_undying","underwater","splash","witch","bubble_pop","current_down","bubble_column_up","nautilus","dolphin","campfire_cosy_smoke","campfire_signal_smoke","dripping_honey","falling_honey","landing_honey","falling_nectar","falling_spore_blossom","ash","crimson_spore","warped_spore","spore_blossom_air","dripping_obsidian_tear","falling_obsidian_tear","landing_obsidian_tear","reverse_portal","white_ash","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","shriek","egg_crack","dust_plume","trial_spawner_detection","trial_spawner_detection_ominous","vault_connection","dust_pillar","ominous_spawning","raid_omen","trial_omen","block_crumble"]
|
||||||
"minecraft:angry_villager": 0,
|
|
||||||
"minecraft:block": 1,
|
|
||||||
"minecraft:block_marker": 2,
|
|
||||||
"minecraft:bubble": 3,
|
|
||||||
"minecraft:cloud": 4,
|
|
||||||
"minecraft:crit": 5,
|
|
||||||
"minecraft:damage_indicator": 6,
|
|
||||||
"minecraft:dragon_breath": 7,
|
|
||||||
"minecraft:dripping_lava": 8,
|
|
||||||
"minecraft:falling_lava": 9,
|
|
||||||
"minecraft:landing_lava": 10,
|
|
||||||
"minecraft:dripping_water": 11,
|
|
||||||
"minecraft:falling_water": 12,
|
|
||||||
"minecraft:dust": 13,
|
|
||||||
"minecraft:dust_color_transition": 14,
|
|
||||||
"minecraft:effect": 15,
|
|
||||||
"minecraft:elder_guardian": 16,
|
|
||||||
"minecraft:enchanted_hit": 17,
|
|
||||||
"minecraft:enchant": 18,
|
|
||||||
"minecraft:end_rod": 19,
|
|
||||||
"minecraft:entity_effect": 20,
|
|
||||||
"minecraft:explosion_emitter": 21,
|
|
||||||
"minecraft:explosion": 22,
|
|
||||||
"minecraft:gust": 23,
|
|
||||||
"minecraft:small_gust": 24,
|
|
||||||
"minecraft:gust_emitter_large": 25,
|
|
||||||
"minecraft:gust_emitter_small": 26,
|
|
||||||
"minecraft:sonic_boom": 27,
|
|
||||||
"minecraft:falling_dust": 28,
|
|
||||||
"minecraft:firework": 29,
|
|
||||||
"minecraft:fishing": 30,
|
|
||||||
"minecraft:flame": 31,
|
|
||||||
"minecraft:infested": 32,
|
|
||||||
"minecraft:cherry_leaves": 33,
|
|
||||||
"minecraft:sculk_soul": 34,
|
|
||||||
"minecraft:sculk_charge": 35,
|
|
||||||
"minecraft:sculk_charge_pop": 36,
|
|
||||||
"minecraft:soul_fire_flame": 37,
|
|
||||||
"minecraft:soul": 38,
|
|
||||||
"minecraft:flash": 39,
|
|
||||||
"minecraft:happy_villager": 40,
|
|
||||||
"minecraft:composter": 41,
|
|
||||||
"minecraft:heart": 42,
|
|
||||||
"minecraft:instant_effect": 43,
|
|
||||||
"minecraft:item": 44,
|
|
||||||
"minecraft:vibration": 45,
|
|
||||||
"minecraft:trail": 46,
|
|
||||||
"minecraft:item_slime": 47,
|
|
||||||
"minecraft:item_cobweb": 48,
|
|
||||||
"minecraft:item_snowball": 49,
|
|
||||||
"minecraft:large_smoke": 50,
|
|
||||||
"minecraft:lava": 51,
|
|
||||||
"minecraft:mycelium": 52,
|
|
||||||
"minecraft:note": 53,
|
|
||||||
"minecraft:poof": 54,
|
|
||||||
"minecraft:portal": 55,
|
|
||||||
"minecraft:rain": 56,
|
|
||||||
"minecraft:smoke": 57,
|
|
||||||
"minecraft:white_smoke": 58,
|
|
||||||
"minecraft:sneeze": 59,
|
|
||||||
"minecraft:spit": 60,
|
|
||||||
"minecraft:squid_ink": 61,
|
|
||||||
"minecraft:sweep_attack": 62,
|
|
||||||
"minecraft:totem_of_undying": 63,
|
|
||||||
"minecraft:underwater": 64,
|
|
||||||
"minecraft:splash": 65,
|
|
||||||
"minecraft:witch": 66,
|
|
||||||
"minecraft:bubble_pop": 67,
|
|
||||||
"minecraft:current_down": 68,
|
|
||||||
"minecraft:bubble_column_up": 69,
|
|
||||||
"minecraft:nautilus": 70,
|
|
||||||
"minecraft:dolphin": 71,
|
|
||||||
"minecraft:campfire_cosy_smoke": 72,
|
|
||||||
"minecraft:campfire_signal_smoke": 73,
|
|
||||||
"minecraft:dripping_honey": 74,
|
|
||||||
"minecraft:falling_honey": 75,
|
|
||||||
"minecraft:landing_honey": 76,
|
|
||||||
"minecraft:falling_nectar": 77,
|
|
||||||
"minecraft:falling_spore_blossom": 78,
|
|
||||||
"minecraft:ash": 79,
|
|
||||||
"minecraft:crimson_spore": 80,
|
|
||||||
"minecraft:warped_spore": 81,
|
|
||||||
"minecraft:spore_blossom_air": 82,
|
|
||||||
"minecraft:dripping_obsidian_tear": 83,
|
|
||||||
"minecraft:falling_obsidian_tear": 84,
|
|
||||||
"minecraft:landing_obsidian_tear": 85,
|
|
||||||
"minecraft:reverse_portal": 86,
|
|
||||||
"minecraft:white_ash": 87,
|
|
||||||
"minecraft:small_flame": 88,
|
|
||||||
"minecraft:snowflake": 89,
|
|
||||||
"minecraft:dripping_dripstone_lava": 90,
|
|
||||||
"minecraft:falling_dripstone_lava": 91,
|
|
||||||
"minecraft:dripping_dripstone_water": 92,
|
|
||||||
"minecraft:falling_dripstone_water": 93,
|
|
||||||
"minecraft:glow_squid_ink": 94,
|
|
||||||
"minecraft:glow": 95,
|
|
||||||
"minecraft:wax_on": 96,
|
|
||||||
"minecraft:wax_off": 97,
|
|
||||||
"minecraft:electric_spark": 98,
|
|
||||||
"minecraft:scrape": 99,
|
|
||||||
"minecraft:shriek": 100,
|
|
||||||
"minecraft:egg_crack": 101,
|
|
||||||
"minecraft:dust_plume": 102,
|
|
||||||
"minecraft:trial_spawner_detection": 103,
|
|
||||||
"minecraft:trial_spawner_detection_ominous": 104,
|
|
||||||
"minecraft:vault_connection": 105,
|
|
||||||
"minecraft:dust_pillar": 106,
|
|
||||||
"minecraft:ominous_spawning": 107,
|
|
||||||
"minecraft:raid_omen": 108,
|
|
||||||
"minecraft:trial_omen": 109,
|
|
||||||
"minecraft:block_crumble": 110
|
|
||||||
}
|
|
||||||
18555
assets/recipes.json
18555
assets/recipes.json
File diff suppressed because one or more lines are too long
@ -1,27 +1 @@
|
|||||||
{
|
["generic_9x1","generic_9x2","generic_9x3","generic_9x4","generic_9x5","generic_9x6","generic_3x3","crafter_3x3","anvil","beacon","blast_furnace","brewing_stand","crafting","enchantment","furnace","grindstone","hopper","lectern","loom","merchant","shulker_box","smithing","smoker","cartography_table","stonecutter"]
|
||||||
"minecraft:generic_9x1": 0,
|
|
||||||
"minecraft:generic_9x2": 1,
|
|
||||||
"minecraft:generic_9x3": 2,
|
|
||||||
"minecraft:generic_9x4": 3,
|
|
||||||
"minecraft:generic_9x5": 4,
|
|
||||||
"minecraft:generic_9x6": 5,
|
|
||||||
"minecraft:generic_3x3": 6,
|
|
||||||
"minecraft:crafter_3x3": 7,
|
|
||||||
"minecraft:anvil": 8,
|
|
||||||
"minecraft:beacon": 9,
|
|
||||||
"minecraft:blast_furnace": 10,
|
|
||||||
"minecraft:brewing_stand": 11,
|
|
||||||
"minecraft:crafting": 12,
|
|
||||||
"minecraft:enchantment": 13,
|
|
||||||
"minecraft:furnace": 14,
|
|
||||||
"minecraft:grindstone": 15,
|
|
||||||
"minecraft:hopper": 16,
|
|
||||||
"minecraft:lectern": 17,
|
|
||||||
"minecraft:loom": 18,
|
|
||||||
"minecraft:merchant": 19,
|
|
||||||
"minecraft:shulker_box": 20,
|
|
||||||
"minecraft:smithing": 21,
|
|
||||||
"minecraft:smoker": 22,
|
|
||||||
"minecraft:cartography_table": 23,
|
|
||||||
"minecraft:stonecutter": 24
|
|
||||||
}
|
|
||||||
1639
assets/sounds.json
1639
assets/sounds.json
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
10732
assets/tags.json
10732
assets/tags.json
File diff suppressed because one or more lines are too long
@ -42,7 +42,7 @@ class Extractor : ModInitializer {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
val gson = GsonBuilder().setPrettyPrinting().disableHtmlEscaping().serializeNulls().create()
|
val gson = GsonBuilder().disableHtmlEscaping().create()
|
||||||
|
|
||||||
ServerLifecycleEvents.SERVER_STARTED.register(ServerLifecycleEvents.ServerStarted { server: MinecraftServer ->
|
ServerLifecycleEvents.SERVER_STARTED.register(ServerLifecycleEvents.ServerStarted { server: MinecraftServer ->
|
||||||
for (ext in extractors) {
|
for (ext in extractors) {
|
||||||
|
|||||||
@ -27,7 +27,7 @@ class Blocks : Extractor.Extractor {
|
|||||||
for (block in Registries.BLOCK) {
|
for (block in Registries.BLOCK) {
|
||||||
val blockJson = JsonObject()
|
val blockJson = JsonObject()
|
||||||
blockJson.addProperty("id", Registries.BLOCK.getRawId(block))
|
blockJson.addProperty("id", Registries.BLOCK.getRawId(block))
|
||||||
blockJson.addProperty("name", Registries.BLOCK.getId(block).toString())
|
blockJson.addProperty("name", Registries.BLOCK.getId(block).path)
|
||||||
blockJson.addProperty("translation_key", block.translationKey)
|
blockJson.addProperty("translation_key", block.translationKey)
|
||||||
blockJson.addProperty("hardness", block.hardness)
|
blockJson.addProperty("hardness", block.hardness)
|
||||||
blockJson.addProperty("item_id", Registries.ITEM.getRawId(block.asItem()))
|
blockJson.addProperty("item_id", Registries.ITEM.getRawId(block.asItem()))
|
||||||
@ -88,23 +88,22 @@ class Blocks : Extractor.Extractor {
|
|||||||
|
|
||||||
val blockEntitiesJson = JsonArray()
|
val blockEntitiesJson = JsonArray()
|
||||||
for (blockEntity in Registries.BLOCK_ENTITY_TYPE) {
|
for (blockEntity in Registries.BLOCK_ENTITY_TYPE) {
|
||||||
val blockEntityJson = JsonObject()
|
blockEntitiesJson.add(Registries.BLOCK_ENTITY_TYPE.getId(blockEntity)!!.path)
|
||||||
blockEntityJson.addProperty("id", Registries.BLOCK_ENTITY_TYPE.getRawId(blockEntity))
|
|
||||||
blockEntityJson.addProperty("ident", Registries.BLOCK_ENTITY_TYPE.getId(blockEntity).toString())
|
|
||||||
blockEntityJson.addProperty("name", Registries.BLOCK_ENTITY_TYPE.getId(blockEntity)!!.path)
|
|
||||||
|
|
||||||
blockEntitiesJson.add(blockEntityJson)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val shapesJson = JsonArray()
|
val shapesJson = JsonArray()
|
||||||
for (shape in shapes.keys) {
|
for (shape in shapes.keys) {
|
||||||
val shapeJson = JsonObject()
|
val shapeJson = JsonObject()
|
||||||
shapeJson.addProperty("min_x", shape.minX)
|
val min = JsonArray()
|
||||||
shapeJson.addProperty("min_y", shape.minY)
|
min.add(shape.minX)
|
||||||
shapeJson.addProperty("min_z", shape.minZ)
|
min.add(shape.minY)
|
||||||
shapeJson.addProperty("max_x", shape.maxX)
|
min.add(shape.minZ)
|
||||||
shapeJson.addProperty("max_y", shape.maxY)
|
val max = JsonArray()
|
||||||
shapeJson.addProperty("max_z", shape.maxZ)
|
max.add(shape.maxX)
|
||||||
|
max.add(shape.maxY)
|
||||||
|
max.add(shape.maxZ)
|
||||||
|
shapeJson.add("min", min)
|
||||||
|
shapeJson.add("max", max)
|
||||||
shapesJson.add(shapeJson)
|
shapesJson.add(shapeJson)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -34,7 +34,7 @@ class Items : Extractor.Extractor {
|
|||||||
).getOrThrow()
|
).getOrThrow()
|
||||||
)
|
)
|
||||||
|
|
||||||
itemsJson.add(Registries.ITEM.getId(realItem).toString(), itemJson)
|
itemsJson.add(Registries.ITEM.getId(realItem).path, itemJson)
|
||||||
}
|
}
|
||||||
return itemsJson
|
return itemsJson
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package de.snowii.extractor.extractors
|
package de.snowii.extractor.extractors
|
||||||
|
|
||||||
|
import com.google.gson.JsonArray
|
||||||
import com.google.gson.JsonElement
|
import com.google.gson.JsonElement
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
import de.snowii.extractor.Extractor
|
import de.snowii.extractor.Extractor
|
||||||
@ -49,20 +50,20 @@ class Packets : Extractor.Extractor {
|
|||||||
private fun serializeServerBound(
|
private fun serializeServerBound(
|
||||||
packets: Array<NetworkState.Factory<out ServerCrashSafePacketListener, out ByteBuf>>
|
packets: Array<NetworkState.Factory<out ServerCrashSafePacketListener, out ByteBuf>>
|
||||||
): JsonObject {
|
): JsonObject {
|
||||||
val handshakeArray = JsonObject()
|
val handshakeArray = JsonArray()
|
||||||
val statusArray = JsonObject()
|
val statusArray = JsonArray()
|
||||||
val loginArray = JsonObject()
|
val loginArray = JsonArray()
|
||||||
val configArray = JsonObject()
|
val configArray = JsonArray()
|
||||||
val playArray = JsonObject()
|
val playArray = JsonArray()
|
||||||
|
|
||||||
for (factory in packets) {
|
for (factory in packets) {
|
||||||
factory.forEachPacketType { type: PacketType<*>, i: Int ->
|
factory.forEachPacketType { type: PacketType<*>, _: Int ->
|
||||||
when (factory.phase()!!) {
|
when (factory.phase()!!) {
|
||||||
NetworkPhase.HANDSHAKING -> handshakeArray.addProperty(type.id().path, i)
|
NetworkPhase.HANDSHAKING -> handshakeArray.add(type.id().path)
|
||||||
NetworkPhase.PLAY -> playArray.addProperty(type.id().path, i)
|
NetworkPhase.PLAY -> playArray.add(type.id().path)
|
||||||
NetworkPhase.STATUS -> statusArray.addProperty(type.id().path, i)
|
NetworkPhase.STATUS -> statusArray.add(type.id().path)
|
||||||
NetworkPhase.LOGIN -> loginArray.addProperty(type.id().path, i)
|
NetworkPhase.LOGIN -> loginArray.add(type.id().path)
|
||||||
NetworkPhase.CONFIGURATION -> configArray.addProperty(type.id().path, i)
|
NetworkPhase.CONFIGURATION -> configArray.add(type.id().path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -78,19 +79,19 @@ class Packets : Extractor.Extractor {
|
|||||||
private fun serializeClientBound(
|
private fun serializeClientBound(
|
||||||
packets: Array<NetworkState.Factory<out ClientPacketListener, out PacketByteBuf>>
|
packets: Array<NetworkState.Factory<out ClientPacketListener, out PacketByteBuf>>
|
||||||
): JsonObject {
|
): JsonObject {
|
||||||
val statusArray = JsonObject()
|
val statusArray = JsonArray()
|
||||||
val loginArray = JsonObject()
|
val loginArray = JsonArray()
|
||||||
val configArray = JsonObject()
|
val configArray = JsonArray()
|
||||||
val playArray = JsonObject()
|
val playArray = JsonArray()
|
||||||
|
|
||||||
for (factory in packets) {
|
for (factory in packets) {
|
||||||
factory.forEachPacketType { type: PacketType<*>, i: Int ->
|
factory.forEachPacketType { type: PacketType<*>, _: Int ->
|
||||||
when (factory.phase()!!) {
|
when (factory.phase()!!) {
|
||||||
NetworkPhase.HANDSHAKING -> error("Client bound Packet should have no handshake")
|
NetworkPhase.HANDSHAKING -> error("Client bound Packet should have no handshake")
|
||||||
NetworkPhase.PLAY -> playArray.addProperty(type.id().path, i)
|
NetworkPhase.PLAY -> playArray.add(type.id().path)
|
||||||
NetworkPhase.STATUS -> statusArray.addProperty(type.id().path, i)
|
NetworkPhase.STATUS -> statusArray.add(type.id().path)
|
||||||
NetworkPhase.LOGIN -> loginArray.addProperty(type.id().path, i)
|
NetworkPhase.LOGIN -> loginArray.add(type.id().path)
|
||||||
NetworkPhase.CONFIGURATION -> configArray.addProperty(type.id().path, i)
|
NetworkPhase.CONFIGURATION -> configArray.add(type.id().path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package de.snowii.extractor.extractors
|
package de.snowii.extractor.extractors
|
||||||
|
|
||||||
|
import com.google.gson.JsonArray
|
||||||
import com.google.gson.JsonElement
|
import com.google.gson.JsonElement
|
||||||
import com.google.gson.JsonObject
|
|
||||||
import de.snowii.extractor.Extractor
|
import de.snowii.extractor.Extractor
|
||||||
import net.minecraft.registry.Registries
|
import net.minecraft.registry.Registries
|
||||||
import net.minecraft.server.MinecraftServer
|
import net.minecraft.server.MinecraftServer
|
||||||
@ -13,11 +13,10 @@ class Particles : Extractor.Extractor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun extract(server: MinecraftServer): JsonElement {
|
override fun extract(server: MinecraftServer): JsonElement {
|
||||||
val particlesJson = JsonObject()
|
val particlesJson = JsonArray()
|
||||||
for (particle in Registries.PARTICLE_TYPE) {
|
for (particle in Registries.PARTICLE_TYPE) {
|
||||||
particlesJson.addProperty(
|
particlesJson.add(
|
||||||
Registries.PARTICLE_TYPE.getId(particle)!!.toString(),
|
Registries.PARTICLE_TYPE.getId(particle)!!.path,
|
||||||
Registries.PARTICLE_TYPE.getRawId(particle)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package de.snowii.extractor.extractors
|
package de.snowii.extractor.extractors
|
||||||
|
|
||||||
|
import com.google.gson.JsonArray
|
||||||
import com.google.gson.JsonElement
|
import com.google.gson.JsonElement
|
||||||
import com.google.gson.JsonObject
|
|
||||||
import de.snowii.extractor.Extractor
|
import de.snowii.extractor.Extractor
|
||||||
import net.minecraft.registry.Registries
|
import net.minecraft.registry.Registries
|
||||||
import net.minecraft.server.MinecraftServer
|
import net.minecraft.server.MinecraftServer
|
||||||
@ -12,11 +12,10 @@ class Screens : Extractor.Extractor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun extract(server: MinecraftServer): JsonElement {
|
override fun extract(server: MinecraftServer): JsonElement {
|
||||||
val screensJson = JsonObject()
|
val screensJson = JsonArray()
|
||||||
for (screen in Registries.SCREEN_HANDLER) {
|
for (screen in Registries.SCREEN_HANDLER) {
|
||||||
screensJson.addProperty(
|
screensJson.add(
|
||||||
Registries.SCREEN_HANDLER.getId(screen)!!.toString(),
|
Registries.SCREEN_HANDLER.getId(screen)!!.path,
|
||||||
Registries.SCREEN_HANDLER.getRawId(screen)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package de.snowii.extractor.extractors
|
package de.snowii.extractor.extractors
|
||||||
|
|
||||||
|
import com.google.gson.JsonArray
|
||||||
import com.google.gson.JsonElement
|
import com.google.gson.JsonElement
|
||||||
import com.google.gson.JsonObject
|
|
||||||
import de.snowii.extractor.Extractor
|
import de.snowii.extractor.Extractor
|
||||||
import net.minecraft.registry.Registries
|
import net.minecraft.registry.Registries
|
||||||
import net.minecraft.server.MinecraftServer
|
import net.minecraft.server.MinecraftServer
|
||||||
@ -13,11 +13,10 @@ class Sounds : Extractor.Extractor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun extract(server: MinecraftServer): JsonElement {
|
override fun extract(server: MinecraftServer): JsonElement {
|
||||||
val soundJson = JsonObject()
|
val soundJson = JsonArray()
|
||||||
for (sound in Registries.SOUND_EVENT) {
|
for (sound in Registries.SOUND_EVENT) {
|
||||||
soundJson.addProperty(
|
soundJson.add(
|
||||||
Registries.SOUND_EVENT.getId(sound)!!.toString(),
|
Registries.SOUND_EVENT.getId(sound)!!.path,
|
||||||
Registries.SOUND_EVENT.getRawId(sound)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -20,7 +20,7 @@ class SyncedRegistries : Extractor.Extractor {
|
|||||||
val json = JsonObject()
|
val json = JsonObject()
|
||||||
registries.forEach { entry ->
|
registries.forEach { entry ->
|
||||||
json.add(
|
json.add(
|
||||||
entry.key().value.toString(),
|
entry.key().value.path,
|
||||||
mapJson(entry, server.registryManager, server.combinedDynamicRegistries)
|
mapJson(entry, server.registryManager, server.combinedDynamicRegistries)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -37,7 +37,7 @@ class SyncedRegistries : Extractor.Extractor {
|
|||||||
val json = JsonObject()
|
val json = JsonObject()
|
||||||
registry.streamEntries().forEach { entry ->
|
registry.streamEntries().forEach { entry ->
|
||||||
json.add(
|
json.add(
|
||||||
entry.key.orElseThrow().value.toString(),
|
entry.key.orElseThrow().value.path,
|
||||||
codec.encodeStart(
|
codec.encodeStart(
|
||||||
combinedRegistries.combinedRegistryManager.getOps(JsonOps.INSTANCE),
|
combinedRegistries.combinedRegistryManager.getOps(JsonOps.INSTANCE),
|
||||||
entry.value()
|
entry.value()
|
||||||
|
|||||||
@ -20,15 +20,15 @@ class Tags : Extractor.Extractor {
|
|||||||
|
|
||||||
for (tag in tags.entries) {
|
for (tag in tags.entries) {
|
||||||
val tagGroupTagsJson = JsonObject()
|
val tagGroupTagsJson = JsonObject()
|
||||||
tagGroupTagsJson.addProperty("name", tag.key.value.toString())
|
tagGroupTagsJson.addProperty("name", tag.key.value.path)
|
||||||
val tagValues =
|
val tagValues =
|
||||||
tag.value.toRegistryTags(server.combinedDynamicRegistries.combinedRegistryManager.getOrThrow(tag.key))
|
tag.value.toRegistryTags(server.combinedDynamicRegistries.combinedRegistryManager.getOrThrow(tag.key))
|
||||||
for (value in tagValues.tags) {
|
for (value in tagValues.tags) {
|
||||||
val tagGroupTagsJsonArray = JsonArray()
|
val tagGroupTagsJsonArray = JsonArray()
|
||||||
for (tagVal in value.value) {
|
for (tagVal in value.value) {
|
||||||
tagGroupTagsJsonArray.add(tagVal.key.orElseThrow().value.toString())
|
tagGroupTagsJsonArray.add(tagVal.key.orElseThrow().value.path)
|
||||||
}
|
}
|
||||||
tagGroupTagsJson.add(value.key.id.toString(), tagGroupTagsJsonArray)
|
tagGroupTagsJson.add(value.key.id.path, tagGroupTagsJsonArray)
|
||||||
}
|
}
|
||||||
tagsJson.add(tagGroupTagsJson)
|
tagsJson.add(tagGroupTagsJson)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,40 +20,40 @@ pub use open_container::*;
|
|||||||
#[repr(u8)]
|
#[repr(u8)]
|
||||||
pub enum WindowType {
|
pub enum WindowType {
|
||||||
// not used
|
// not used
|
||||||
Generic9x1 = screen!("minecraft:generic_9x1"),
|
Generic9x1 = screen!("generic_9x1"),
|
||||||
// not used
|
// not used
|
||||||
Generic9x2 = screen!("minecraft:generic_9x2"),
|
Generic9x2 = screen!("generic_9x2"),
|
||||||
// General-purpose 3-row inventory. Used by Chest, minecart with chest, ender chest, and barrel
|
// General-purpose 3-row inventory. Used by Chest, minecart with chest, ender chest, and barrel
|
||||||
Generic9x3 = screen!("minecraft:generic_9x3"),
|
Generic9x3 = screen!("generic_9x3"),
|
||||||
// not used
|
// not used
|
||||||
Generic9x4 = screen!("minecraft:generic_9x4"),
|
Generic9x4 = screen!("generic_9x4"),
|
||||||
// not used
|
// not used
|
||||||
Generic9x5 = screen!("minecraft:generic_9x5"),
|
Generic9x5 = screen!("generic_9x5"),
|
||||||
// Used by large chests
|
// Used by large chests
|
||||||
Generic9x6 = screen!("minecraft:generic_9x6"),
|
Generic9x6 = screen!("generic_9x6"),
|
||||||
// General-purpose 3-by-3 square inventory, used by Dispenser and Dropper
|
// General-purpose 3-by-3 square inventory, used by Dispenser and Dropper
|
||||||
Generic3x3 = screen!("minecraft:generic_3x3"),
|
Generic3x3 = screen!("generic_3x3"),
|
||||||
// General-purpose 3-by-3 square inventory, used by the Crafter
|
// General-purpose 3-by-3 square inventory, used by the Crafter
|
||||||
Craft3x3 = screen!("minecraft:crafter_3x3"),
|
Craft3x3 = screen!("crafter_3x3"),
|
||||||
Anvil = screen!("minecraft:anvil"),
|
Anvil = screen!("anvil"),
|
||||||
Beacon = screen!("minecraft:beacon"),
|
Beacon = screen!("beacon"),
|
||||||
BlastFurnace = screen!("minecraft:blast_furnace"),
|
BlastFurnace = screen!("blast_furnace"),
|
||||||
BrewingStand = screen!("minecraft:brewing_stand"),
|
BrewingStand = screen!("brewing_stand"),
|
||||||
CraftingTable = screen!("minecraft:crafting"),
|
CraftingTable = screen!("crafting"),
|
||||||
EnchantmentTable = screen!("minecraft:enchantment"),
|
EnchantmentTable = screen!("enchantment"),
|
||||||
Furnace = screen!("minecraft:furnace"),
|
Furnace = screen!("furnace"),
|
||||||
Grindstone = screen!("minecraft:grindstone"),
|
Grindstone = screen!("grindstone"),
|
||||||
// Hopper or minecart with hopper
|
// Hopper or minecart with hopper
|
||||||
Hopper = screen!("minecraft:hopper"),
|
Hopper = screen!("hopper"),
|
||||||
Lectern = screen!("minecraft:lectern"),
|
Lectern = screen!("lectern"),
|
||||||
Loom = screen!("minecraft:loom"),
|
Loom = screen!("loom"),
|
||||||
// Villager, Wandering Trader
|
// Villager, Wandering Trader
|
||||||
Merchant = screen!("minecraft:merchant"),
|
Merchant = screen!("merchant"),
|
||||||
ShulkerBox = screen!("minecraft:shulker_box"),
|
ShulkerBox = screen!("shulker_box"),
|
||||||
SmithingTable = screen!("minecraft:smithing"),
|
SmithingTable = screen!("smithing"),
|
||||||
Smoker = screen!("minecraft:smoker"),
|
Smoker = screen!("smoker"),
|
||||||
CartographyTable = screen!("minecraft:cartography_table"),
|
CartographyTable = screen!("cartography_table"),
|
||||||
Stonecutter = screen!("minecraft:stonecutter"),
|
Stonecutter = screen!("stonecutter"),
|
||||||
}
|
}
|
||||||
pub struct ContainerStruct<const SLOTS: usize>([Option<ItemStack>; SLOTS]);
|
pub struct ContainerStruct<const SLOTS: usize>([Option<ItemStack>; SLOTS]);
|
||||||
|
|
||||||
|
|||||||
@ -6,8 +6,8 @@ use serde::Deserialize;
|
|||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
pub struct Packets {
|
pub struct Packets {
|
||||||
serverbound: HashMap<String, HashMap<String, u8>>,
|
serverbound: HashMap<String, Vec<String>>,
|
||||||
clientbound: HashMap<String, HashMap<String, u8>>,
|
clientbound: HashMap<String, Vec<String>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
static PACKETS: LazyLock<Packets> = LazyLock::new(|| {
|
static PACKETS: LazyLock<Packets> = LazyLock::new(|| {
|
||||||
@ -24,7 +24,10 @@ pub(crate) fn packet_clientbound(item: TokenStream) -> proc_macro2::TokenStream
|
|||||||
.get(packet_name_split[0])
|
.get(packet_name_split[0])
|
||||||
.expect("Invalid Phase");
|
.expect("Invalid Phase");
|
||||||
let id = phase
|
let id = phase
|
||||||
.get(packet_name_split[1])
|
.iter()
|
||||||
|
.enumerate()
|
||||||
|
.find(|s| s.1 == packet_name_split[1])
|
||||||
|
.map(|(i, _)| i)
|
||||||
.expect("Invalid Packet name");
|
.expect("Invalid Packet name");
|
||||||
quote! { #id }
|
quote! { #id }
|
||||||
}
|
}
|
||||||
@ -39,7 +42,10 @@ pub(crate) fn packet_serverbound(item: TokenStream) -> proc_macro2::TokenStream
|
|||||||
.get(packet_name_split[0])
|
.get(packet_name_split[0])
|
||||||
.expect("Invalid Phase");
|
.expect("Invalid Phase");
|
||||||
let id = phase
|
let id = phase
|
||||||
.get(packet_name_split[1])
|
.iter()
|
||||||
|
.enumerate()
|
||||||
|
.find(|s| s.1 == packet_name_split[1])
|
||||||
|
.map(|(i, _)| i)
|
||||||
.expect("Invalid Packet name");
|
.expect("Invalid Packet name");
|
||||||
quote! { #id }
|
quote! { #id }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,15 +3,19 @@ use std::{collections::HashMap, sync::LazyLock};
|
|||||||
use proc_macro::TokenStream;
|
use proc_macro::TokenStream;
|
||||||
use quote::quote;
|
use quote::quote;
|
||||||
|
|
||||||
static SOUNDS: LazyLock<HashMap<String, u16>> = LazyLock::new(|| {
|
static PARTICLES: LazyLock<HashMap<String, u16>> = LazyLock::new(|| {
|
||||||
serde_json::from_str(include_str!("../../assets/particles.json"))
|
serde_json::from_str::<Vec<String>>(include_str!("../../assets/particles.json"))
|
||||||
.expect("Could not parse particles.json registry.")
|
.expect("Could not parse particles.json registry")
|
||||||
|
.into_iter()
|
||||||
|
.enumerate()
|
||||||
|
.map(|(i, s)| (s, i as u16))
|
||||||
|
.collect()
|
||||||
});
|
});
|
||||||
|
|
||||||
pub(crate) fn particle_impl(item: TokenStream) -> TokenStream {
|
pub(crate) fn particle_impl(item: TokenStream) -> TokenStream {
|
||||||
let input_string = item.to_string();
|
let input_string = item.to_string();
|
||||||
let sound_name = input_string.trim_matches('"');
|
let particle_name = input_string.trim_matches('"');
|
||||||
|
|
||||||
let id = SOUNDS.get(sound_name).expect("Invalid particle");
|
let id = *PARTICLES.get(particle_name).expect("Invalid Particle");
|
||||||
quote! { #id }.into()
|
quote! { #id }.into()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,14 +4,18 @@ use proc_macro::TokenStream;
|
|||||||
use quote::quote;
|
use quote::quote;
|
||||||
|
|
||||||
static SCREENS: LazyLock<HashMap<String, u8>> = LazyLock::new(|| {
|
static SCREENS: LazyLock<HashMap<String, u8>> = LazyLock::new(|| {
|
||||||
serde_json::from_str(include_str!("../../assets/screens.json"))
|
serde_json::from_str::<Vec<String>>(include_str!("../../assets/screens.json"))
|
||||||
.expect("Could not parse screens.json registry.")
|
.expect("Could not parse screens.json registry.")
|
||||||
|
.into_iter()
|
||||||
|
.enumerate()
|
||||||
|
.map(|(i, s)| (s, i as u8))
|
||||||
|
.collect()
|
||||||
});
|
});
|
||||||
|
|
||||||
pub(crate) fn screen_impl(item: TokenStream) -> TokenStream {
|
pub(crate) fn screen_impl(item: TokenStream) -> TokenStream {
|
||||||
let input_string = item.to_string();
|
let input_string = item.to_string();
|
||||||
let screen_name = input_string.trim_matches('"');
|
let screen_name = input_string.trim_matches('"');
|
||||||
|
|
||||||
let id = SCREENS.get(screen_name).expect("Invalid screen");
|
let id = *SCREENS.get(screen_name).expect("Invalid Screen");
|
||||||
quote! { #id }.into()
|
quote! { #id }.into()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,14 +4,18 @@ use proc_macro::TokenStream;
|
|||||||
use quote::quote;
|
use quote::quote;
|
||||||
|
|
||||||
static SOUNDS: LazyLock<HashMap<String, u16>> = LazyLock::new(|| {
|
static SOUNDS: LazyLock<HashMap<String, u16>> = LazyLock::new(|| {
|
||||||
serde_json::from_str(include_str!("../../assets/sounds.json"))
|
serde_json::from_str::<Vec<String>>(include_str!("../../assets/sounds.json"))
|
||||||
.expect("Could not parse sounds.json registry.")
|
.expect("Could not parse sounds.json registry.")
|
||||||
|
.into_iter()
|
||||||
|
.enumerate()
|
||||||
|
.map(|(i, s)| (s, i as u16))
|
||||||
|
.collect()
|
||||||
});
|
});
|
||||||
|
|
||||||
pub(crate) fn sound_impl(item: TokenStream) -> TokenStream {
|
pub(crate) fn sound_impl(item: TokenStream) -> TokenStream {
|
||||||
let input_string = item.to_string();
|
let input_string = item.to_string();
|
||||||
let sound_name = input_string.trim_matches('"');
|
let sound_name = input_string.trim_matches('"');
|
||||||
|
|
||||||
let id = SOUNDS.get(sound_name).expect("Invalid sound");
|
let id = *SOUNDS.get(sound_name).expect("Invalid sound");
|
||||||
quote! { #id }.into()
|
quote! { #id }.into()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -47,29 +47,18 @@ pub struct Registry {
|
|||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
pub struct SyncedRegistry {
|
pub struct SyncedRegistry {
|
||||||
#[serde(rename = "minecraft:worldgen/biome")]
|
#[serde(rename = "worldgen/biome")]
|
||||||
biome: IndexMap<String, Biome>,
|
biome: IndexMap<String, Biome>,
|
||||||
#[serde(rename = "minecraft:chat_type")]
|
|
||||||
chat_type: IndexMap<String, ChatType>,
|
chat_type: IndexMap<String, ChatType>,
|
||||||
#[serde(rename = "minecraft:trim_pattern")]
|
|
||||||
trim_pattern: IndexMap<String, TrimPattern>,
|
trim_pattern: IndexMap<String, TrimPattern>,
|
||||||
#[serde(rename = "minecraft:trim_material")]
|
|
||||||
trim_material: IndexMap<String, TrimMaterial>,
|
trim_material: IndexMap<String, TrimMaterial>,
|
||||||
#[serde(rename = "minecraft:wolf_variant")]
|
|
||||||
wolf_variant: IndexMap<String, WolfVariant>,
|
wolf_variant: IndexMap<String, WolfVariant>,
|
||||||
#[serde(rename = "minecraft:painting_variant")]
|
|
||||||
painting_variant: IndexMap<String, Painting>,
|
painting_variant: IndexMap<String, Painting>,
|
||||||
#[serde(rename = "minecraft:dimension_type")]
|
|
||||||
dimension_type: IndexMap<String, Dimension>,
|
dimension_type: IndexMap<String, Dimension>,
|
||||||
#[serde(rename = "minecraft:damage_type")]
|
|
||||||
damage_type: IndexMap<String, DamageType>,
|
damage_type: IndexMap<String, DamageType>,
|
||||||
#[serde(rename = "minecraft:banner_pattern")]
|
|
||||||
banner_pattern: IndexMap<String, BannerPattern>,
|
banner_pattern: IndexMap<String, BannerPattern>,
|
||||||
#[serde(rename = "minecraft:enchantment")]
|
|
||||||
enchantment: IndexMap<String, Enchantment>,
|
enchantment: IndexMap<String, Enchantment>,
|
||||||
#[serde(rename = "minecraft:jukebox_song")]
|
|
||||||
jukebox_song: IndexMap<String, JukeboxSong>,
|
jukebox_song: IndexMap<String, JukeboxSong>,
|
||||||
#[serde(rename = "minecraft:instrument")]
|
|
||||||
instrument: IndexMap<String, Instrument>,
|
instrument: IndexMap<String, Instrument>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -8,31 +8,31 @@ use crate::IngredientType;
|
|||||||
|
|
||||||
#[derive(Deserialize, Eq, PartialEq, Hash)]
|
#[derive(Deserialize, Eq, PartialEq, Hash)]
|
||||||
pub enum TagCategory {
|
pub enum TagCategory {
|
||||||
#[serde(rename = "minecraft:instrument")]
|
#[serde(rename = "instrument")]
|
||||||
Instrument,
|
Instrument,
|
||||||
#[serde(rename = "minecraft:worldgen/biome")]
|
#[serde(rename = "worldgen/biome")]
|
||||||
WorldGenBiome,
|
WorldGenBiome,
|
||||||
#[serde(rename = "minecraft:point_of_interest_type")]
|
#[serde(rename = "point_of_interest_type")]
|
||||||
PointOfInterest,
|
PointOfInterest,
|
||||||
#[serde(rename = "minecraft:entity_type")]
|
#[serde(rename = "entity_type")]
|
||||||
Entity,
|
Entity,
|
||||||
#[serde(rename = "minecraft:damage_type")]
|
#[serde(rename = "damage_type")]
|
||||||
DamageType,
|
DamageType,
|
||||||
#[serde(rename = "minecraft:banner_pattern")]
|
#[serde(rename = "banner_pattern")]
|
||||||
BannerPattern,
|
BannerPattern,
|
||||||
#[serde(rename = "minecraft:block")]
|
#[serde(rename = "block")]
|
||||||
Block,
|
Block,
|
||||||
#[serde(rename = "minecraft:fluid")]
|
#[serde(rename = "fluid")]
|
||||||
Fluid,
|
Fluid,
|
||||||
#[serde(rename = "minecraft:enchantment")]
|
#[serde(rename = "enchantment")]
|
||||||
Enchantment,
|
Enchantment,
|
||||||
#[serde(rename = "minecraft:cat_variant")]
|
#[serde(rename = "cat_variant")]
|
||||||
Cat,
|
Cat,
|
||||||
#[serde(rename = "minecraft:painting_variant")]
|
#[serde(rename = "painting_variant")]
|
||||||
Painting,
|
Painting,
|
||||||
#[serde(rename = "minecraft:item")]
|
#[serde(rename = "item")]
|
||||||
Item,
|
Item,
|
||||||
#[serde(rename = "minecraft:game_event")]
|
#[serde(rename = "game_event")]
|
||||||
GameEvent,
|
GameEvent,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -85,9 +85,9 @@ pub fn get_block_by_item<'a>(item_id: u16) -> Option<&'a Block> {
|
|||||||
#[expect(dead_code)]
|
#[expect(dead_code)]
|
||||||
#[derive(Deserialize, Clone, Debug)]
|
#[derive(Deserialize, Clone, Debug)]
|
||||||
pub struct TopLevel {
|
pub struct TopLevel {
|
||||||
pub blocks: Vec<Block>,
|
block_entity_types: Vec<String>,
|
||||||
shapes: Vec<Shape>,
|
shapes: Vec<Shape>,
|
||||||
block_entity_types: Vec<BlockEntityKind>,
|
pub blocks: Vec<Block>,
|
||||||
}
|
}
|
||||||
#[derive(Deserialize, Clone, Debug)]
|
#[derive(Deserialize, Clone, Debug)]
|
||||||
pub struct Block {
|
pub struct Block {
|
||||||
@ -103,13 +103,6 @@ pub struct Block {
|
|||||||
}
|
}
|
||||||
#[expect(dead_code)]
|
#[expect(dead_code)]
|
||||||
#[derive(Deserialize, Clone, Debug)]
|
#[derive(Deserialize, Clone, Debug)]
|
||||||
struct BlockEntityKind {
|
|
||||||
id: u32,
|
|
||||||
ident: String,
|
|
||||||
name: String,
|
|
||||||
}
|
|
||||||
#[expect(dead_code)]
|
|
||||||
#[derive(Deserialize, Clone, Debug)]
|
|
||||||
pub struct Property {
|
pub struct Property {
|
||||||
name: String,
|
name: String,
|
||||||
values: Vec<String>,
|
values: Vec<String>,
|
||||||
@ -128,10 +121,6 @@ pub struct State {
|
|||||||
#[expect(dead_code)]
|
#[expect(dead_code)]
|
||||||
#[derive(Deserialize, Clone, Debug)]
|
#[derive(Deserialize, Clone, Debug)]
|
||||||
struct Shape {
|
struct Shape {
|
||||||
min_x: f64,
|
min: [f32; 3],
|
||||||
min_y: f64,
|
max: [f32; 3],
|
||||||
min_z: f64,
|
|
||||||
max_x: f64,
|
|
||||||
max_y: f64,
|
|
||||||
max_z: f64,
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -33,7 +33,7 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn does_exist() {
|
fn does_exist() {
|
||||||
let result = BlockState::new("minecraft:dirt");
|
let result = BlockState::new("dirt");
|
||||||
assert!(result.is_some());
|
assert!(result.is_some());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,7 +9,7 @@ pub static ITEMS: LazyLock<HashMap<String, Item>> = LazyLock::new(|| {
|
|||||||
});
|
});
|
||||||
|
|
||||||
pub fn get_item(name: &str) -> Option<&Item> {
|
pub fn get_item(name: &str) -> Option<&Item> {
|
||||||
ITEMS.get(name)
|
ITEMS.get(&name.replace("minecraft:", ""))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Clone, Debug)]
|
#[derive(Deserialize, Clone, Debug)]
|
||||||
|
|||||||
@ -25,10 +25,7 @@ pub fn generate_tree(
|
|||||||
y: (chunk_relative_coordinates.y.add(y as i16)).into(),
|
y: (chunk_relative_coordinates.y.add(y as i16)).into(),
|
||||||
z: z.add(dz as u8).into(),
|
z: z.add(dz as u8).into(),
|
||||||
};
|
};
|
||||||
tree_blocks.push((
|
tree_blocks.push((block_coordinates, BlockState::new("oak_log").unwrap()));
|
||||||
block_coordinates,
|
|
||||||
BlockState::new("minecraft:oak_log").unwrap(),
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -43,10 +40,7 @@ pub fn generate_tree(
|
|||||||
y: (chunk_relative_coordinates.y.add(y as i16)).into(),
|
y: (chunk_relative_coordinates.y.add(y as i16)).into(),
|
||||||
z: z.add(dz as u8).into(),
|
z: z.add(dz as u8).into(),
|
||||||
};
|
};
|
||||||
tree_blocks.push((
|
tree_blocks.push((block_coordinates, BlockState::new("oak_leaves").unwrap()));
|
||||||
block_coordinates,
|
|
||||||
BlockState::new("minecraft:oak_leaves").unwrap(),
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -55,24 +55,15 @@ impl PerlinTerrainGenerator for PlainsTerrainGenerator {
|
|||||||
|
|
||||||
let y = *at.y;
|
let y = *at.y;
|
||||||
if y == -64 {
|
if y == -64 {
|
||||||
blocks.set_block(
|
blocks.set_block(coordinates, BlockState::new("bedrock").unwrap().state_id);
|
||||||
coordinates,
|
|
||||||
BlockState::new("minecraft:bedrock").unwrap().state_id,
|
|
||||||
);
|
|
||||||
} else if y >= -63 && y <= begin_stone_height {
|
} else if y >= -63 && y <= begin_stone_height {
|
||||||
blocks.set_block(
|
blocks.set_block(coordinates, BlockState::new("stone").unwrap().state_id);
|
||||||
coordinates,
|
|
||||||
BlockState::new("minecraft:stone").unwrap().state_id,
|
|
||||||
);
|
|
||||||
} else if y >= begin_stone_height && y < begin_dirt_height {
|
} else if y >= begin_stone_height && y < begin_dirt_height {
|
||||||
blocks.set_block(
|
blocks.set_block(coordinates, BlockState::new("dirt").unwrap().state_id);
|
||||||
coordinates,
|
|
||||||
BlockState::new("minecraft:dirt").unwrap().state_id,
|
|
||||||
);
|
|
||||||
} else if y == chunk_height - 2 {
|
} else if y == chunk_height - 2 {
|
||||||
blocks.set_block(
|
blocks.set_block(
|
||||||
coordinates,
|
coordinates,
|
||||||
BlockState::new("minecraft:grass_block").unwrap().state_id,
|
BlockState::new("grass_block").unwrap().state_id,
|
||||||
);
|
);
|
||||||
} else if y == chunk_height - 1 {
|
} else if y == chunk_height - 1 {
|
||||||
// TODO: generate flowers and grass
|
// TODO: generate flowers and grass
|
||||||
@ -84,31 +75,29 @@ impl PerlinTerrainGenerator for PlainsTerrainGenerator {
|
|||||||
0 => {
|
0 => {
|
||||||
blocks.set_block(
|
blocks.set_block(
|
||||||
coordinates,
|
coordinates,
|
||||||
BlockState::new("minecraft:dandelion").unwrap().state_id,
|
BlockState::new("dandelion").unwrap().state_id,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
1 => {
|
1 => {
|
||||||
blocks.set_block(
|
blocks.set_block(
|
||||||
coordinates,
|
coordinates,
|
||||||
BlockState::new("minecraft:oxeye_daisy").unwrap().state_id,
|
BlockState::new("oxeye_daisy").unwrap().state_id,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
2 => {
|
2 => {
|
||||||
blocks.set_block(
|
blocks.set_block(
|
||||||
coordinates,
|
coordinates,
|
||||||
BlockState::new("minecraft:cornflower").unwrap().state_id,
|
BlockState::new("cornflower").unwrap().state_id,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
3 => {
|
3 => {
|
||||||
blocks.set_block(
|
blocks
|
||||||
coordinates,
|
.set_block(coordinates, BlockState::new("poppy").unwrap().state_id);
|
||||||
BlockState::new("minecraft:poppy").unwrap().state_id,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
blocks.set_block(
|
blocks.set_block(
|
||||||
coordinates,
|
coordinates,
|
||||||
BlockState::new("minecraft:azure_bluet").unwrap().state_id,
|
BlockState::new("azure_bluet").unwrap().state_id,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -116,7 +105,7 @@ impl PerlinTerrainGenerator for PlainsTerrainGenerator {
|
|||||||
// TODO: Tall grass, Tall grass data called `half`, There is `upper` and `lower`
|
// TODO: Tall grass, Tall grass data called `half`, There is `upper` and `lower`
|
||||||
blocks.set_block(
|
blocks.set_block(
|
||||||
coordinates,
|
coordinates,
|
||||||
BlockState::new("minecraft:short_grass").unwrap().state_id,
|
BlockState::new("short_grass").unwrap().state_id,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -42,9 +42,9 @@ impl TerrainGenerator for SuperflatTerrainGenerator {
|
|||||||
// TODO allow specifying which blocks should be at which height in the config.
|
// TODO allow specifying which blocks should be at which height in the config.
|
||||||
fn generate_block(&self, at: BlockCoordinates, _: Biome) -> BlockState {
|
fn generate_block(&self, at: BlockCoordinates, _: Biome) -> BlockState {
|
||||||
match *at.y {
|
match *at.y {
|
||||||
-64 => BlockState::new("minecraft:bedrock").unwrap(),
|
-64 => BlockState::new("bedrock").unwrap(),
|
||||||
-63..=-62 => BlockState::new("minecraft:dirt").unwrap(),
|
-63..=-62 => BlockState::new("dirt").unwrap(),
|
||||||
-61 => BlockState::new("minecraft:grass_block").unwrap(),
|
-61 => BlockState::new("grass_block").unwrap(),
|
||||||
_ => BlockState::AIR,
|
_ => BlockState::AIR,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -113,7 +113,7 @@ pub async fn spawn_sweep_particle(attacker_entity: &Entity, world: &World, pos:
|
|||||||
0.0,
|
0.0,
|
||||||
0.0,
|
0.0,
|
||||||
0,
|
0,
|
||||||
VarInt(i32::from(particle!("minecraft:sweep_attack"))), // sweep
|
VarInt(i32::from(particle!("sweep_attack"))), // sweep
|
||||||
&[],
|
&[],
|
||||||
))
|
))
|
||||||
.await;
|
.await;
|
||||||
@ -124,7 +124,7 @@ pub async fn player_attack_sound(pos: &Vector3<f64>, world: &World, attack_type:
|
|||||||
AttackType::Knockback => {
|
AttackType::Knockback => {
|
||||||
world
|
world
|
||||||
.play_sound(
|
.play_sound(
|
||||||
sound!("minecraft:entity.player.attack.knockback"),
|
sound!("entity.player.attack.knockback"),
|
||||||
SoundCategory::Players,
|
SoundCategory::Players,
|
||||||
pos,
|
pos,
|
||||||
)
|
)
|
||||||
@ -133,7 +133,7 @@ pub async fn player_attack_sound(pos: &Vector3<f64>, world: &World, attack_type:
|
|||||||
AttackType::Critical => {
|
AttackType::Critical => {
|
||||||
world
|
world
|
||||||
.play_sound(
|
.play_sound(
|
||||||
sound!("minecraft:entity.player.attack.crit"),
|
sound!("entity.player.attack.crit"),
|
||||||
SoundCategory::Players,
|
SoundCategory::Players,
|
||||||
pos,
|
pos,
|
||||||
)
|
)
|
||||||
@ -142,7 +142,7 @@ pub async fn player_attack_sound(pos: &Vector3<f64>, world: &World, attack_type:
|
|||||||
AttackType::Sweeping => {
|
AttackType::Sweeping => {
|
||||||
world
|
world
|
||||||
.play_sound(
|
.play_sound(
|
||||||
sound!("minecraft:entity.player.attack.sweep"),
|
sound!("entity.player.attack.sweep"),
|
||||||
SoundCategory::Players,
|
SoundCategory::Players,
|
||||||
pos,
|
pos,
|
||||||
)
|
)
|
||||||
@ -151,7 +151,7 @@ pub async fn player_attack_sound(pos: &Vector3<f64>, world: &World, attack_type:
|
|||||||
AttackType::Strong => {
|
AttackType::Strong => {
|
||||||
world
|
world
|
||||||
.play_sound(
|
.play_sound(
|
||||||
sound!("minecraft:entity.player.attack.strong"),
|
sound!("entity.player.attack.strong"),
|
||||||
SoundCategory::Players,
|
SoundCategory::Players,
|
||||||
pos,
|
pos,
|
||||||
)
|
)
|
||||||
@ -160,7 +160,7 @@ pub async fn player_attack_sound(pos: &Vector3<f64>, world: &World, attack_type:
|
|||||||
AttackType::Weak => {
|
AttackType::Weak => {
|
||||||
world
|
world
|
||||||
.play_sound(
|
.play_sound(
|
||||||
sound!("minecraft:entity.player.attack.weak"),
|
sound!("entity.player.attack.weak"),
|
||||||
SoundCategory::Players,
|
SoundCategory::Players,
|
||||||
pos,
|
pos,
|
||||||
)
|
)
|
||||||
|
|||||||
@ -368,7 +368,7 @@ impl Player {
|
|||||||
{
|
{
|
||||||
world
|
world
|
||||||
.play_sound(
|
.play_sound(
|
||||||
sound!("minecraft:entity.player.attack.nodamage"),
|
sound!("entity.player.attack.nodamage"),
|
||||||
SoundCategory::Players,
|
SoundCategory::Players,
|
||||||
&pos,
|
&pos,
|
||||||
)
|
)
|
||||||
@ -377,11 +377,7 @@ impl Player {
|
|||||||
}
|
}
|
||||||
|
|
||||||
world
|
world
|
||||||
.play_sound(
|
.play_sound(sound!("entity.player.hurt"), SoundCategory::Players, &pos)
|
||||||
sound!("minecraft:entity.player.hurt"),
|
|
||||||
SoundCategory::Players,
|
|
||||||
&pos,
|
|
||||||
)
|
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let attack_type = AttackType::new(self, attack_cooldown_progress).await;
|
let attack_type = AttackType::new(self, attack_cooldown_progress).await;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user