chore: much better tracked_data impl

This commit is contained in:
Alexander Medvedev 2026-08-18 18:49:48 +02:00
parent 5b833274d4
commit ab60adb239
63 changed files with 21465 additions and 5628 deletions

View File

@ -1,178 +0,0 @@
{
"LEFT_PADDLE_MOVING": 11,
"RIGHT_PADDLE_MOVING": 12,
"BUBBLE_WOBBLE_TICKS": 13,
"DAMAGE_WOBBLE_TICKS": 8,
"DAMAGE_WOBBLE_SIDE": 9,
"DAMAGE_WOBBLE_STRENGTH": 10,
"FLAGS": 0,
"AIR": 1,
"CUSTOM_NAME": 2,
"NAME_VISIBLE": 3,
"SILENT": 4,
"NO_GRAVITY": 5,
"POSE": 6,
"FROZEN_TICKS": 7,
"DANCING": 19,
"CAN_DUPLICATE": 17,
"MOB_FLAGS": 15,
"LIVING_FLAGS": 8,
"HEALTH": 9,
"POTION_SWIRLS": 10,
"POTION_SWIRLS_AMBIENT": 11,
"STUCK_ARROW_COUNT": 12,
"STINGER_COUNT": 13,
"SLEEPING_POSITION": 14,
"RADIUS": 8,
"WAITING": 9,
"PARTICLE": 10,
"STATE": 17,
"CHILD": 16,
"ARMOR_STAND_FLAGS": 15,
"TRACKER_HEAD_ROTATION": 16,
"TRACKER_BODY_ROTATION": 17,
"TRACKER_LEFT_ARM_ROTATION": 18,
"TRACKER_RIGHT_ARM_ROTATION": 19,
"TRACKER_LEFT_LEG_ROTATION": 20,
"TRACKER_RIGHT_LEG_ROTATION": 21,
"COLOR": 18,
"PROJECTILE_FLAGS": 8,
"PIERCE_LEVEL": 9,
"IN_GROUND": 10,
"VARIANT": 20,
"PLAYING_DEAD": 18,
"FROM_BUCKET": 16,
"BAT_FLAGS": 16,
"BEE_FLAGS": 17,
"ANGER_END_TIME": 21,
"BLAZE_FLAGS": 16,
"BLOCK_STATE": 9,
"START_INTERPOLATION": 8,
"INTERPOLATION_DURATION": 9,
"TELEPORT_DURATION": 10,
"TRANSLATION": 11,
"SCALE": 12,
"LEFT_ROTATION": 13,
"RIGHT_ROTATION": 14,
"BILLBOARD": 15,
"BRIGHTNESS": 16,
"VIEW_RANGE": 17,
"SHADOW_RADIUS": 18,
"SHADOW_STRENGTH": 19,
"WIDTH": 20,
"HEIGHT": 21,
"GLOW_COLOR_OVERRIDE": 22,
"SHEARED": 16,
"DASHING": 19,
"LAST_POSE_TICK": 19,
"HORSE_FLAGS": 17,
"CAT_VARIANT": 19,
"IN_SLEEPING_POSE": 20,
"HEAD_DOWN": 21,
"COLLAR_COLOR": 20,
"TAMEABLE_FLAGS": 17,
"OWNER_UUID": 18,
"SPIDER_FLAGS": 16,
"CUSTOM_BLOCK_STATE": 11,
"BLOCK_OFFSET": 12,
"OXIDATION_LEVEL": 16,
"COPPER_GOLEM_STATE": 17,
"COMMAND": 13,
"LAST_OUTPUT": 14,
"UNROOTED": 16,
"ACTIVE": 17,
"CRUMBLING": 18,
"HOME_POS": 19,
"FUSE_SPEED": 16,
"CHARGED": 8,
"IGNITED": 18,
"HAS_FISH": 17,
"MOISTNESS": 18,
"CHEST": 18,
"BABY": 16,
"ZOMBIE_TYPE": 17,
"CONVERTING_IN_WATER": 18,
"ITEM": 8,
"SPIKES_RETRACTED": 16,
"BEAM_TARGET_ID": 17,
"CARRIED_BLOCK": 16,
"ANGRY": 17,
"PROVOKED": 18,
"PHASE_TYPE": 16,
"BEAM_TARGET": 8,
"SHOW_BOTTOM": 9,
"SPELL": 17,
"CELEBRATING": 16,
"VALUE": 8,
"BLOCK_POS": 8,
"SHOOTER_ENTITY_ID": 9,
"SHOT_AT_ANGLE": 10,
"FOX_FLAGS": 18,
"OWNER": 19,
"OTHER_TRUSTED": 20,
"TARGET": 18,
"LIT": 13,
"SHOOTING": 16,
"HAS_ROPES": 17,
"STAYING_STILL": 18,
"ITEM_STACK": 9,
"ROTATION": 10,
"FACING": 8,
"DARK_TICKS_REMAINING": 17,
"SCREAMING": 17,
"LEFT_HORN": 18,
"RIGHT_HORN": 19,
"RESPONSE": 10,
"IRON_GOLEM_FLAGS": 16,
"STACK": 8,
"ITEM_DISPLAY": 24,
"STRENGTH": 19,
"SLIME_SIZE": 16,
"PROFILE": 17,
"IMMOVABLE": 18,
"DESCRIPTION": 19,
"MAIN_ARM_ID": 15,
"PLAYER_MODE_CUSTOMIZATION_ID": 16,
"TRUSTING": 17,
"ASK_FOR_BAMBOO_TICKS": 17,
"SNEEZE_PROGRESS": 18,
"EATING_TICKS": 19,
"MAIN_GENE": 20,
"HIDDEN_GENE": 21,
"PANDA_FLAGS": 22,
"SIZE": 16,
"BOOST_TIME": 17,
"CHARGING": 17,
"IMMUNE_TO_ZOMBIFICATION": 16,
"WARNING": 17,
"PUFF_STATE": 17,
"ATTACHED_FACE": 16,
"PEEK_AMOUNT": 17,
"CONVERTING": 19,
"FINISH_DIG_TIME": 18,
"SNOW_GOLEM_FLAGS": 16,
"COLD": 18,
"TEXT": 23,
"LINE_WIDTH": 24,
"BACKGROUND": 25,
"TEXT_OPACITY": 26,
"TEXT_DISPLAY_FLAGS": 27,
"FUSE": 8,
"LOYALTY": 11,
"ENCHANTED": 12,
"HAS_EGG": 17,
"DIGGING_SAND": 18,
"VEX_FLAGS": 16,
"VILLAGER_DATA": 20,
"HEAD_ROLLING_TIME_LEFT": 17,
"ANGER": 16,
"DRINKING": 17,
"TRACKED_ENTITY_ID_1": 16,
"TRACKED_ENTITY_ID_2": 17,
"TRACKED_ENTITY_ID_3": 18,
"INVUL_TIMER": 19,
"BEGGING": 19,
"SOUND_VARIANT": 23,
"HOOK_ENTITY_ID": 8,
"CAUGHT_FISH": 9
}

View File

@ -1 +0,0 @@
{"LEFT_PADDLE_MOVING":11,"RIGHT_PADDLE_MOVING":12,"BUBBLE_WOBBLE_TICKS":13,"DAMAGE_WOBBLE_TICKS":8,"DAMAGE_WOBBLE_SIDE":9,"DAMAGE_WOBBLE_STRENGTH":10,"FLAGS":0,"AIR":1,"CUSTOM_NAME":2,"NAME_VISIBLE":3,"SILENT":4,"NO_GRAVITY":5,"POSE":6,"FROZEN_TICKS":7,"DANCING":19,"CAN_DUPLICATE":17,"MOB_FLAGS":15,"LIVING_FLAGS":8,"HEALTH":9,"POTION_SWIRLS":10,"POTION_SWIRLS_AMBIENT":11,"STUCK_ARROW_COUNT":12,"STINGER_COUNT":13,"SLEEPING_POSITION":14,"RADIUS":8,"WAITING":9,"PARTICLE_ID":10,"STATE":17,"CHILD":16,"ARMOR_STAND_FLAGS":15,"TRACKER_HEAD_ROTATION":16,"TRACKER_BODY_ROTATION":17,"TRACKER_LEFT_ARM_ROTATION":18,"TRACKER_RIGHT_ARM_ROTATION":19,"TRACKER_LEFT_LEG_ROTATION":20,"TRACKER_RIGHT_LEG_ROTATION":21,"COLOR":18,"PROJECTILE_FLAGS":8,"PIERCE_LEVEL":9,"IN_GROUND":10,"VARIANT":22,"PLAYING_DEAD":18,"FROM_BUCKET":16,"BAT_FLAGS":16,"BEE_FLAGS":17,"ANGER":16,"BLAZE_FLAGS":16,"BLOCK_STATE":9,"START_INTERPOLATION":8,"INTERPOLATION_DURATION":9,"TELEPORT_DURATION":10,"TRANSLATION":11,"SCALE":12,"LEFT_ROTATION":13,"RIGHT_ROTATION":14,"BILLBOARD":15,"BRIGHTNESS":16,"VIEW_RANGE":17,"SHADOW_RADIUS":18,"SHADOW_STRENGTH":19,"WIDTH":20,"HEIGHT":21,"GLOW_COLOR_OVERRIDE":22,"SHEARED":16,"DASHING":18,"LAST_POSE_TICK":19,"HORSE_FLAGS":17,"CAT_VARIANT":19,"IN_SLEEPING_POSE":20,"HEAD_DOWN":21,"COLLAR_COLOR":20,"TAMEABLE_FLAGS":17,"OWNER_UUID":18,"SPIDER_FLAGS":16,"CUSTOM_BLOCK_ID":11,"CUSTOM_BLOCK_OFFSET":12,"CUSTOM_BLOCK_PRESENT":13,"COMMAND":14,"LAST_OUTPUT":15,"FUSE_SPEED":16,"CHARGED":8,"IGNITED":18,"TREASURE_POS":17,"HAS_FISH":18,"MOISTNESS":19,"CHEST":18,"BABY":16,"ZOMBIE_TYPE":17,"CONVERTING_IN_WATER":18,"ITEM":8,"SPIKES_RETRACTED":16,"BEAM_TARGET_ID":17,"CARRIED_BLOCK":16,"ANGRY":17,"PROVOKED":18,"PHASE_TYPE":16,"BEAM_TARGET":8,"SHOW_BOTTOM":9,"SPELL":17,"CELEBRATING":16,"BLOCK_POS":8,"SHOOTER_ENTITY_ID":9,"SHOT_AT_ANGLE":10,"TYPE":17,"FOX_FLAGS":18,"OWNER":19,"OTHER_TRUSTED":20,"TARGET":18,"LIT":14,"SHOOTING":16,"ITEM_STACK":8,"ROTATION":9,"DARK_TICKS_REMAINING":17,"SCREAMING":17,"LEFT_HORN":18,"RIGHT_HORN":19,"RESPONSE":10,"IRON_GOLEM_FLAGS":16,"STACK":8,"ITEM_DISPLAY":24,"STRENGTH":19,"SLIME_SIZE":16,"TRUSTING":17,"ASK_FOR_BAMBOO_TICKS":17,"SNEEZE_PROGRESS":18,"EATING_TICKS":19,"MAIN_GENE":20,"HIDDEN_GENE":21,"PANDA_FLAGS":22,"SIZE":16,"SADDLED":19,"BOOST_TIME":17,"CHARGING":17,"IMMUNE_TO_ZOMBIFICATION":16,"WARNING":17,"PUFF_STATE":17,"RABBIT_TYPE":17,"ATTACHED_FACE":16,"PEEK_AMOUNT":17,"CONVERTING":19,"FINISH_DIG_TIME":18,"SNOW_GOLEM_FLAGS":16,"COLD":18,"TEXT":23,"LINE_WIDTH":24,"BACKGROUND":25,"TEXT_OPACITY":26,"TEXT_DISPLAY_FLAGS":27,"FUSE":8,"LOYALTY":11,"ENCHANTED":12,"HOME_POS":17,"HAS_EGG":18,"DIGGING_SAND":19,"TRAVEL_POS":20,"LAND_BOUND":21,"ACTIVELY_TRAVELING":22,"VEX_FLAGS":16,"VILLAGER_DATA":20,"HEAD_ROLLING_TIME_LEFT":17,"DRINKING":17,"TRACKED_ENTITY_ID_1":16,"TRACKED_ENTITY_ID_2":17,"TRACKED_ENTITY_ID_3":18,"INVUL_TIMER":19,"BEGGING":19,"ANGER_TIME":21,"HOOK_ENTITY_ID":8,"CAUGHT_FISH":9,"PLAYER_MODE_CUSTOMIZATION_ID":17,"MAIN_ARM_ID":18}

View File

@ -1 +0,0 @@
{"LEFT_PADDLE_MOVING":11,"RIGHT_PADDLE_MOVING":12,"BUBBLE_WOBBLE_TICKS":13,"DAMAGE_WOBBLE_TICKS":8,"DAMAGE_WOBBLE_SIDE":9,"DAMAGE_WOBBLE_STRENGTH":10,"FLAGS":0,"AIR":1,"CUSTOM_NAME":2,"NAME_VISIBLE":3,"SILENT":4,"NO_GRAVITY":5,"POSE":6,"FROZEN_TICKS":7,"DANCING":19,"CAN_DUPLICATE":17,"MOB_FLAGS":15,"LIVING_FLAGS":8,"HEALTH":9,"POTION_SWIRLS":10,"POTION_SWIRLS_AMBIENT":11,"STUCK_ARROW_COUNT":12,"STINGER_COUNT":13,"SLEEPING_POSITION":14,"RADIUS":8,"WAITING":9,"PARTICLE_ID":10,"STATE":17,"CHILD":16,"ARMOR_STAND_FLAGS":15,"TRACKER_HEAD_ROTATION":16,"TRACKER_BODY_ROTATION":17,"TRACKER_LEFT_ARM_ROTATION":18,"TRACKER_RIGHT_ARM_ROTATION":19,"TRACKER_LEFT_LEG_ROTATION":20,"TRACKER_RIGHT_LEG_ROTATION":21,"COLOR":18,"PROJECTILE_FLAGS":8,"PIERCE_LEVEL":9,"IN_GROUND":10,"VARIANT":22,"PLAYING_DEAD":18,"FROM_BUCKET":16,"BAT_FLAGS":16,"BEE_FLAGS":17,"ANGER":16,"BLAZE_FLAGS":16,"BLOCK_STATE":9,"START_INTERPOLATION":8,"INTERPOLATION_DURATION":9,"TELEPORT_DURATION":10,"TRANSLATION":11,"SCALE":12,"LEFT_ROTATION":13,"RIGHT_ROTATION":14,"BILLBOARD":15,"BRIGHTNESS":16,"VIEW_RANGE":17,"SHADOW_RADIUS":18,"SHADOW_STRENGTH":19,"WIDTH":20,"HEIGHT":21,"GLOW_COLOR_OVERRIDE":22,"SHEARED":16,"DASHING":18,"LAST_POSE_TICK":19,"HORSE_FLAGS":17,"CAT_VARIANT":19,"IN_SLEEPING_POSE":20,"HEAD_DOWN":21,"COLLAR_COLOR":20,"TAMEABLE_FLAGS":17,"OWNER_UUID":18,"SPIDER_FLAGS":16,"CUSTOM_BLOCK_ID":11,"CUSTOM_BLOCK_OFFSET":12,"CUSTOM_BLOCK_PRESENT":13,"COMMAND":14,"LAST_OUTPUT":15,"UNROOTED":16,"ACTIVE":17,"CRUMBLING":18,"HOME_POS":17,"FUSE_SPEED":16,"CHARGED":8,"IGNITED":18,"TREASURE_POS":17,"HAS_FISH":18,"MOISTNESS":19,"CHEST":18,"BABY":16,"ZOMBIE_TYPE":17,"CONVERTING_IN_WATER":18,"ITEM":8,"SPIKES_RETRACTED":16,"BEAM_TARGET_ID":17,"CARRIED_BLOCK":16,"ANGRY":17,"PROVOKED":18,"PHASE_TYPE":16,"BEAM_TARGET":8,"SHOW_BOTTOM":9,"SPELL":17,"CELEBRATING":16,"BLOCK_POS":8,"SHOOTER_ENTITY_ID":9,"SHOT_AT_ANGLE":10,"TYPE":17,"FOX_FLAGS":18,"OWNER":19,"OTHER_TRUSTED":20,"TARGET":18,"LIT":14,"SHOOTING":16,"ITEM_STACK":8,"ROTATION":9,"DARK_TICKS_REMAINING":17,"SCREAMING":17,"LEFT_HORN":18,"RIGHT_HORN":19,"RESPONSE":10,"IRON_GOLEM_FLAGS":16,"STACK":8,"ITEM_DISPLAY":24,"STRENGTH":19,"SLIME_SIZE":16,"TRUSTING":17,"ASK_FOR_BAMBOO_TICKS":17,"SNEEZE_PROGRESS":18,"EATING_TICKS":19,"MAIN_GENE":20,"HIDDEN_GENE":21,"PANDA_FLAGS":22,"SIZE":16,"SADDLED":19,"BOOST_TIME":17,"CHARGING":17,"IMMUNE_TO_ZOMBIFICATION":16,"WARNING":17,"PUFF_STATE":17,"RABBIT_TYPE":17,"ATTACHED_FACE":16,"PEEK_AMOUNT":17,"CONVERTING":19,"FINISH_DIG_TIME":18,"SNOW_GOLEM_FLAGS":16,"COLD":18,"TEXT":23,"LINE_WIDTH":24,"BACKGROUND":25,"TEXT_OPACITY":26,"TEXT_DISPLAY_FLAGS":27,"FUSE":8,"LOYALTY":11,"ENCHANTED":12,"HAS_EGG":18,"DIGGING_SAND":19,"TRAVEL_POS":20,"LAND_BOUND":21,"ACTIVELY_TRAVELING":22,"VEX_FLAGS":16,"VILLAGER_DATA":20,"HEAD_ROLLING_TIME_LEFT":17,"DRINKING":17,"TRACKED_ENTITY_ID_1":16,"TRACKED_ENTITY_ID_2":17,"TRACKED_ENTITY_ID_3":18,"INVUL_TIMER":19,"BEGGING":19,"ANGER_TIME":21,"HOOK_ENTITY_ID":8,"CAUGHT_FISH":9,"PLAYER_MODE_CUSTOMIZATION_ID":17,"MAIN_ARM_ID":18}

View File

@ -1 +0,0 @@
{"LEFT_PADDLE_MOVING":11,"RIGHT_PADDLE_MOVING":12,"BUBBLE_WOBBLE_TICKS":13,"DAMAGE_WOBBLE_TICKS":8,"DAMAGE_WOBBLE_SIDE":9,"DAMAGE_WOBBLE_STRENGTH":10,"FLAGS":0,"AIR":1,"CUSTOM_NAME":2,"NAME_VISIBLE":3,"SILENT":4,"NO_GRAVITY":5,"POSE":6,"FROZEN_TICKS":7,"DANCING":19,"CAN_DUPLICATE":17,"MOB_FLAGS":15,"LIVING_FLAGS":8,"HEALTH":9,"POTION_SWIRLS":10,"POTION_SWIRLS_AMBIENT":11,"STUCK_ARROW_COUNT":12,"STINGER_COUNT":13,"SLEEPING_POSITION":14,"RADIUS":8,"WAITING":9,"PARTICLE":10,"STATE":17,"CHILD":16,"ARMOR_STAND_FLAGS":15,"TRACKER_HEAD_ROTATION":16,"TRACKER_BODY_ROTATION":17,"TRACKER_LEFT_ARM_ROTATION":18,"TRACKER_RIGHT_ARM_ROTATION":19,"TRACKER_LEFT_LEG_ROTATION":20,"TRACKER_RIGHT_LEG_ROTATION":21,"COLOR":18,"PROJECTILE_FLAGS":8,"PIERCE_LEVEL":9,"IN_GROUND":10,"VARIANT":22,"PLAYING_DEAD":18,"FROM_BUCKET":16,"BAT_FLAGS":16,"BEE_FLAGS":17,"ANGER":16,"BLAZE_FLAGS":16,"BLOCK_STATE":9,"START_INTERPOLATION":8,"INTERPOLATION_DURATION":9,"TELEPORT_DURATION":10,"TRANSLATION":11,"SCALE":12,"LEFT_ROTATION":13,"RIGHT_ROTATION":14,"BILLBOARD":15,"BRIGHTNESS":16,"VIEW_RANGE":17,"SHADOW_RADIUS":18,"SHADOW_STRENGTH":19,"WIDTH":20,"HEIGHT":21,"GLOW_COLOR_OVERRIDE":22,"SHEARED":16,"DASHING":18,"LAST_POSE_TICK":19,"HORSE_FLAGS":17,"CAT_VARIANT":19,"IN_SLEEPING_POSE":20,"HEAD_DOWN":21,"COLLAR_COLOR":20,"TAMEABLE_FLAGS":17,"OWNER_UUID":18,"SPIDER_FLAGS":16,"CUSTOM_BLOCK_STATE":11,"BLOCK_OFFSET":12,"COMMAND":13,"LAST_OUTPUT":14,"UNROOTED":16,"ACTIVE":17,"CRUMBLING":18,"HOME_POS":19,"FUSE_SPEED":16,"CHARGED":8,"IGNITED":18,"HAS_FISH":17,"MOISTNESS":18,"CHEST":18,"BABY":16,"ZOMBIE_TYPE":17,"CONVERTING_IN_WATER":18,"ITEM":8,"SPIKES_RETRACTED":16,"BEAM_TARGET_ID":17,"CARRIED_BLOCK":16,"ANGRY":17,"PROVOKED":18,"PHASE_TYPE":16,"BEAM_TARGET":8,"SHOW_BOTTOM":9,"SPELL":17,"CELEBRATING":16,"VALUE":8,"BLOCK_POS":8,"SHOOTER_ENTITY_ID":9,"SHOT_AT_ANGLE":10,"FOX_FLAGS":18,"OWNER":19,"OTHER_TRUSTED":20,"TARGET":18,"LIT":13,"SHOOTING":16,"ITEM_STACK":8,"ROTATION":9,"DARK_TICKS_REMAINING":17,"SCREAMING":17,"LEFT_HORN":18,"RIGHT_HORN":19,"RESPONSE":10,"IRON_GOLEM_FLAGS":16,"STACK":8,"ITEM_DISPLAY":24,"STRENGTH":19,"SLIME_SIZE":16,"TRUSTING":17,"ASK_FOR_BAMBOO_TICKS":17,"SNEEZE_PROGRESS":18,"EATING_TICKS":19,"MAIN_GENE":20,"HIDDEN_GENE":21,"PANDA_FLAGS":22,"SIZE":16,"BOOST_TIME":17,"CHARGING":17,"IMMUNE_TO_ZOMBIFICATION":16,"WARNING":17,"PUFF_STATE":17,"ATTACHED_FACE":16,"PEEK_AMOUNT":17,"CONVERTING":19,"FINISH_DIG_TIME":18,"SNOW_GOLEM_FLAGS":16,"COLD":18,"TEXT":23,"LINE_WIDTH":24,"BACKGROUND":25,"TEXT_OPACITY":26,"TEXT_DISPLAY_FLAGS":27,"FUSE":8,"LOYALTY":11,"ENCHANTED":12,"HAS_EGG":17,"DIGGING_SAND":18,"VEX_FLAGS":16,"VILLAGER_DATA":20,"HEAD_ROLLING_TIME_LEFT":17,"DRINKING":17,"TRACKED_ENTITY_ID_1":16,"TRACKED_ENTITY_ID_2":17,"TRACKED_ENTITY_ID_3":18,"INVUL_TIMER":19,"BEGGING":19,"ANGER_TIME":21,"SOUND_VARIANT":23,"HOOK_ENTITY_ID":8,"CAUGHT_FISH":9,"PLAYER_MODE_CUSTOMIZATION_ID":17,"MAIN_ARM_ID":18}

View File

@ -1,173 +0,0 @@
{
"LEFT_PADDLE_MOVING": 11,
"RIGHT_PADDLE_MOVING": 12,
"BUBBLE_WOBBLE_TICKS": 13,
"DAMAGE_WOBBLE_TICKS": 8,
"DAMAGE_WOBBLE_SIDE": 9,
"DAMAGE_WOBBLE_STRENGTH": 10,
"FLAGS": 0,
"AIR": 1,
"CUSTOM_NAME": 2,
"NAME_VISIBLE": 3,
"SILENT": 4,
"NO_GRAVITY": 5,
"POSE": 6,
"FROZEN_TICKS": 7,
"DANCING": 19,
"CAN_DUPLICATE": 17,
"MOB_FLAGS": 15,
"LIVING_FLAGS": 8,
"HEALTH": 9,
"POTION_SWIRLS": 10,
"POTION_SWIRLS_AMBIENT": 11,
"STUCK_ARROW_COUNT": 12,
"STINGER_COUNT": 13,
"SLEEPING_POSITION": 14,
"RADIUS": 8,
"WAITING": 9,
"PARTICLE": 10,
"STATE": 17,
"CHILD": 16,
"ARMOR_STAND_FLAGS": 15,
"TRACKER_HEAD_ROTATION": 16,
"TRACKER_BODY_ROTATION": 17,
"TRACKER_LEFT_ARM_ROTATION": 18,
"TRACKER_RIGHT_ARM_ROTATION": 19,
"TRACKER_LEFT_LEG_ROTATION": 20,
"TRACKER_RIGHT_LEG_ROTATION": 21,
"COLOR": 18,
"PROJECTILE_FLAGS": 8,
"PIERCE_LEVEL": 9,
"IN_GROUND": 10,
"VARIANT": 22,
"PLAYING_DEAD": 18,
"FROM_BUCKET": 16,
"BAT_FLAGS": 16,
"BEE_FLAGS": 17,
"ANGER": 16,
"BLAZE_FLAGS": 16,
"BLOCK_STATE": 9,
"START_INTERPOLATION": 8,
"INTERPOLATION_DURATION": 9,
"TELEPORT_DURATION": 10,
"TRANSLATION": 11,
"SCALE": 12,
"LEFT_ROTATION": 13,
"RIGHT_ROTATION": 14,
"BILLBOARD": 15,
"BRIGHTNESS": 16,
"VIEW_RANGE": 17,
"SHADOW_RADIUS": 18,
"SHADOW_STRENGTH": 19,
"WIDTH": 20,
"HEIGHT": 21,
"GLOW_COLOR_OVERRIDE": 22,
"SHEARED": 16,
"DASHING": 18,
"LAST_POSE_TICK": 19,
"HORSE_FLAGS": 17,
"CAT_VARIANT": 19,
"IN_SLEEPING_POSE": 20,
"HEAD_DOWN": 21,
"COLLAR_COLOR": 20,
"TAMEABLE_FLAGS": 17,
"OWNER_UUID": 18,
"SPIDER_FLAGS": 16,
"CUSTOM_BLOCK_STATE": 11,
"BLOCK_OFFSET": 12,
"COMMAND": 13,
"LAST_OUTPUT": 14,
"UNROOTED": 16,
"ACTIVE": 17,
"CRUMBLING": 18,
"HOME_POS": 19,
"FUSE_SPEED": 16,
"CHARGED": 8,
"IGNITED": 18,
"HAS_FISH": 17,
"MOISTNESS": 18,
"CHEST": 18,
"BABY": 16,
"ZOMBIE_TYPE": 17,
"CONVERTING_IN_WATER": 18,
"ITEM": 8,
"SPIKES_RETRACTED": 16,
"BEAM_TARGET_ID": 17,
"CARRIED_BLOCK": 16,
"ANGRY": 17,
"PROVOKED": 18,
"PHASE_TYPE": 16,
"BEAM_TARGET": 8,
"SHOW_BOTTOM": 9,
"SPELL": 17,
"CELEBRATING": 16,
"VALUE": 8,
"BLOCK_POS": 8,
"SHOOTER_ENTITY_ID": 9,
"SHOT_AT_ANGLE": 10,
"FOX_FLAGS": 18,
"OWNER": 19,
"OTHER_TRUSTED": 20,
"TARGET": 18,
"LIT": 13,
"SHOOTING": 16,
"HAS_ROPES": 17,
"STAYING_STILL": 18,
"ITEM_STACK": 9,
"ROTATION": 10,
"FACING": 8,
"DARK_TICKS_REMAINING": 17,
"SCREAMING": 17,
"LEFT_HORN": 18,
"RIGHT_HORN": 19,
"RESPONSE": 10,
"IRON_GOLEM_FLAGS": 16,
"STACK": 8,
"ITEM_DISPLAY": 24,
"STRENGTH": 19,
"SLIME_SIZE": 16,
"TRUSTING": 17,
"ASK_FOR_BAMBOO_TICKS": 17,
"SNEEZE_PROGRESS": 18,
"EATING_TICKS": 19,
"MAIN_GENE": 20,
"HIDDEN_GENE": 21,
"PANDA_FLAGS": 22,
"SIZE": 16,
"BOOST_TIME": 17,
"CHARGING": 17,
"IMMUNE_TO_ZOMBIFICATION": 16,
"WARNING": 17,
"PUFF_STATE": 17,
"ATTACHED_FACE": 16,
"PEEK_AMOUNT": 17,
"CONVERTING": 19,
"FINISH_DIG_TIME": 18,
"SNOW_GOLEM_FLAGS": 16,
"COLD": 18,
"TEXT": 23,
"LINE_WIDTH": 24,
"BACKGROUND": 25,
"TEXT_OPACITY": 26,
"TEXT_DISPLAY_FLAGS": 27,
"FUSE": 8,
"LOYALTY": 11,
"ENCHANTED": 12,
"HAS_EGG": 17,
"DIGGING_SAND": 18,
"VEX_FLAGS": 16,
"VILLAGER_DATA": 20,
"HEAD_ROLLING_TIME_LEFT": 17,
"DRINKING": 17,
"TRACKED_ENTITY_ID_1": 16,
"TRACKED_ENTITY_ID_2": 17,
"TRACKED_ENTITY_ID_3": 18,
"INVUL_TIMER": 19,
"BEGGING": 19,
"ANGER_TIME": 21,
"SOUND_VARIANT": 23,
"PLAYER_MODE_CUSTOMIZATION_ID": 17,
"MAIN_ARM_ID": 18,
"HOOK_ENTITY_ID": 8,
"CAUGHT_FISH": 9
}

View File

@ -1,96 +0,0 @@
{
"FLAGS": 0,
"AIR": 1,
"CUSTOM_NAME": 2,
"NAME_VISIBLE": 3,
"SILENT": 4,
"NO_GRAVITY": 5,
"POSE": 6,
"FROZEN_TICKS": 7,
"LIVING_FLAGS": 8,
"HEALTH": 9,
"POTION_SWIRLS": 10,
"POTION_SWIRLS_AMBIENT": 11,
"STUCK_ARROW_COUNT": 12,
"STINGER_COUNT": 13,
"SLEEPING_POSITION": 14,
"MOB_FLAGS": 15,
"ITEM_STACK": 8,
"ROTATION": 9,
"FUSE": 8,
"EXPLOSION_RADIUS": 9,
"FUSE_SPEED": 16,
"IGNITED": 18,
"CHARGED": 19,
"ARMOR_STAND_FLAGS": 15,
"TRACKER_HEAD_ROTATION": 16,
"TRACKER_BODY_ROTATION": 17,
"TRACKER_LEFT_ARM_ROTATION": 18,
"TRACKER_RIGHT_ARM_ROTATION": 19,
"TRACKER_LEFT_LEG_ROTATION": 20,
"TRACKER_RIGHT_LEG_ROTATION": 21,
"BLOCK_STATE": 8,
"START_INTERPOLATION": 8,
"INTERPOLATION_DURATION": 9,
"TELEPORT_DURATION": 10,
"TRANSLATION": 11,
"SCALE": 12,
"LEFT_ROTATION": 13,
"RIGHT_ROTATION": 14,
"BILLBOARD": 15,
"BRIGHTNESS": 16,
"VIEW_RANGE": 17,
"SHADOW_RADIUS": 18,
"SHADOW_STRENGTH": 19,
"WIDTH": 20,
"HEIGHT": 21,
"GLOW_COLOR_OVERRIDE": 22,
"TEXT": 23,
"LINE_WIDTH": 24,
"BACKGROUND": 25,
"TEXT_OPACITY": 26,
"TEXT_DISPLAY_FLAGS": 27,
"ITEM_DISPLAY": 24,
"PLAYER_MODE_CUSTOMIZATION_ID": 17,
"MAIN_ARM_ID": 18,
"LEFT_PADDLE_MOVING": 11,
"RIGHT_PADDLE_MOVING": 12,
"BUBBLE_WOBBLE_TICKS": 13,
"VILLAGER_DATA": 18,
"ANGER_END_TIME": 21,
"VARIANT": 20,
"BABY": 16,
"ZOMBIE_TYPE": 17,
"CONVERTING_IN_WATER": 18,
"VEX_FLAGS": 16,
"SHEARED": 16,
"PUFF_STATE": 17,
"FOX_FLAGS": 18,
"CAT_VARIANT": 19,
"COLLAR_COLOR": 20,
"TAMEABLE_FLAGS": 17,
"OWNER_UUID": 18,
"BEE_FLAGS": 17,
"ANGER": 16,
"ATTACHED_FACE": 16,
"PEEK_AMOUNT": 17,
"CONVERTING": 19,
"SNOW_GOLEM_FLAGS": 16,
"IRON_GOLEM_FLAGS": 16,
"SLIME_SIZE": 16,
"PANDA_FLAGS": 22,
"MAIN_GENE": 20,
"HIDDEN_GENE": 21,
"EATING_TICKS": 19,
"SNEEZE_PROGRESS": 18,
"STRENGTH": 19,
"HORSE_FLAGS": 17,
"CARRIED_BLOCK": 16,
"ANGRY": 17,
"PROVOKED": 18,
"SPIKES_RETRACTED": 16,
"BEAM_TARGET_ID": 17,
"PHASE_TYPE": 16,
"BEAM_TARGET": 8,
"SHOW_BOTTOM": 9
}

View File

@ -1,178 +0,0 @@
{
"LEFT_PADDLE_MOVING": 11,
"RIGHT_PADDLE_MOVING": 12,
"BUBBLE_WOBBLE_TICKS": 13,
"DAMAGE_WOBBLE_TICKS": 8,
"DAMAGE_WOBBLE_SIDE": 9,
"DAMAGE_WOBBLE_STRENGTH": 10,
"FLAGS": 0,
"AIR": 1,
"CUSTOM_NAME": 2,
"NAME_VISIBLE": 3,
"SILENT": 4,
"NO_GRAVITY": 5,
"POSE": 6,
"FROZEN_TICKS": 7,
"DANCING": 19,
"CAN_DUPLICATE": 17,
"MOB_FLAGS": 15,
"LIVING_FLAGS": 8,
"HEALTH": 9,
"POTION_SWIRLS": 10,
"POTION_SWIRLS_AMBIENT": 11,
"STUCK_ARROW_COUNT": 12,
"STINGER_COUNT": 13,
"SLEEPING_POSITION": 14,
"RADIUS": 8,
"WAITING": 9,
"PARTICLE": 10,
"STATE": 17,
"CHILD": 16,
"ARMOR_STAND_FLAGS": 15,
"TRACKER_HEAD_ROTATION": 16,
"TRACKER_BODY_ROTATION": 17,
"TRACKER_LEFT_ARM_ROTATION": 18,
"TRACKER_RIGHT_ARM_ROTATION": 19,
"TRACKER_LEFT_LEG_ROTATION": 20,
"TRACKER_RIGHT_LEG_ROTATION": 21,
"COLOR": 18,
"PROJECTILE_FLAGS": 8,
"PIERCE_LEVEL": 9,
"IN_GROUND": 10,
"VARIANT": 22,
"PLAYING_DEAD": 18,
"FROM_BUCKET": 16,
"BAT_FLAGS": 16,
"BEE_FLAGS": 17,
"ANGER": 16,
"BLAZE_FLAGS": 16,
"BLOCK_STATE": 9,
"START_INTERPOLATION": 8,
"INTERPOLATION_DURATION": 9,
"TELEPORT_DURATION": 10,
"TRANSLATION": 11,
"SCALE": 12,
"LEFT_ROTATION": 13,
"RIGHT_ROTATION": 14,
"BILLBOARD": 15,
"BRIGHTNESS": 16,
"VIEW_RANGE": 17,
"SHADOW_RADIUS": 18,
"SHADOW_STRENGTH": 19,
"WIDTH": 20,
"HEIGHT": 21,
"GLOW_COLOR_OVERRIDE": 22,
"SHEARED": 16,
"DASHING": 18,
"LAST_POSE_TICK": 19,
"HORSE_FLAGS": 17,
"CAT_VARIANT": 19,
"IN_SLEEPING_POSE": 20,
"HEAD_DOWN": 21,
"COLLAR_COLOR": 20,
"TAMEABLE_FLAGS": 17,
"OWNER_UUID": 18,
"SPIDER_FLAGS": 16,
"CUSTOM_BLOCK_STATE": 11,
"BLOCK_OFFSET": 12,
"OXIDATION_LEVEL": 16,
"COPPER_GOLEM_STATE": 17,
"COMMAND": 13,
"LAST_OUTPUT": 14,
"UNROOTED": 16,
"ACTIVE": 17,
"CRUMBLING": 18,
"HOME_POS": 19,
"FUSE_SPEED": 16,
"CHARGED": 8,
"IGNITED": 18,
"HAS_FISH": 17,
"MOISTNESS": 18,
"CHEST": 18,
"BABY": 16,
"ZOMBIE_TYPE": 17,
"CONVERTING_IN_WATER": 18,
"ITEM": 8,
"SPIKES_RETRACTED": 16,
"BEAM_TARGET_ID": 17,
"CARRIED_BLOCK": 16,
"ANGRY": 17,
"PROVOKED": 18,
"PHASE_TYPE": 16,
"BEAM_TARGET": 8,
"SHOW_BOTTOM": 9,
"SPELL": 17,
"CELEBRATING": 16,
"VALUE": 8,
"BLOCK_POS": 8,
"SHOOTER_ENTITY_ID": 9,
"SHOT_AT_ANGLE": 10,
"FOX_FLAGS": 18,
"OWNER": 19,
"OTHER_TRUSTED": 20,
"TARGET": 18,
"LIT": 13,
"SHOOTING": 16,
"HAS_ROPES": 17,
"STAYING_STILL": 18,
"ITEM_STACK": 9,
"ROTATION": 10,
"FACING": 8,
"DARK_TICKS_REMAINING": 17,
"SCREAMING": 17,
"LEFT_HORN": 18,
"RIGHT_HORN": 19,
"RESPONSE": 10,
"IRON_GOLEM_FLAGS": 16,
"STACK": 8,
"ITEM_DISPLAY": 24,
"STRENGTH": 19,
"SLIME_SIZE": 16,
"PROFILE": 17,
"IMMOVABLE": 18,
"DESCRIPTION": 19,
"MAIN_ARM_ID": 15,
"PLAYER_MODE_CUSTOMIZATION_ID": 16,
"TRUSTING": 17,
"ASK_FOR_BAMBOO_TICKS": 17,
"SNEEZE_PROGRESS": 18,
"EATING_TICKS": 19,
"MAIN_GENE": 20,
"HIDDEN_GENE": 21,
"PANDA_FLAGS": 22,
"SIZE": 16,
"BOOST_TIME": 17,
"CHARGING": 17,
"IMMUNE_TO_ZOMBIFICATION": 16,
"WARNING": 17,
"PUFF_STATE": 17,
"ATTACHED_FACE": 16,
"PEEK_AMOUNT": 17,
"CONVERTING": 19,
"FINISH_DIG_TIME": 18,
"SNOW_GOLEM_FLAGS": 16,
"COLD": 18,
"TEXT": 23,
"LINE_WIDTH": 24,
"BACKGROUND": 25,
"TEXT_OPACITY": 26,
"TEXT_DISPLAY_FLAGS": 27,
"FUSE": 8,
"LOYALTY": 11,
"ENCHANTED": 12,
"HAS_EGG": 17,
"DIGGING_SAND": 18,
"VEX_FLAGS": 16,
"VILLAGER_DATA": 20,
"HEAD_ROLLING_TIME_LEFT": 17,
"DRINKING": 17,
"TRACKED_ENTITY_ID_1": 16,
"TRACKED_ENTITY_ID_2": 17,
"TRACKED_ENTITY_ID_3": 18,
"INVUL_TIMER": 19,
"BEGGING": 19,
"ANGER_TIME": 21,
"SOUND_VARIANT": 23,
"HOOK_ENTITY_ID": 8,
"CAUGHT_FISH": 9
}

View File

@ -1 +0,0 @@
{"DANCING":19,"CAN_DUPLICATE":17,"MOB_FLAGS":15,"LIVING_FLAGS":8,"HEALTH":9,"POTION_SWIRLS":10,"POTION_SWIRLS_AMBIENT":11,"STUCK_ARROW_COUNT":12,"STINGER_COUNT":13,"SLEEPING_POSITION":14,"FLAGS":0,"AIR":1,"CUSTOM_NAME":2,"NAME_VISIBLE":3,"SILENT":4,"NO_GRAVITY":5,"POSE":6,"FROZEN_TICKS":7,"RADIUS":8,"WAITING":9,"PARTICLE_ID":10,"STATE":17,"CHILD":16,"ARMOR_STAND_FLAGS":15,"TRACKER_HEAD_ROTATION":16,"TRACKER_BODY_ROTATION":17,"TRACKER_LEFT_ARM_ROTATION":18,"TRACKER_RIGHT_ARM_ROTATION":19,"TRACKER_LEFT_LEG_ROTATION":20,"TRACKER_RIGHT_LEG_ROTATION":21,"COLOR":18,"PROJECTILE_FLAGS":8,"PIERCE_LEVEL":9,"VARIANT":22,"PLAYING_DEAD":18,"FROM_BUCKET":16,"BAT_FLAGS":16,"BEE_FLAGS":17,"ANGER":16,"BLAZE_FLAGS":16,"BLOCK_STATE":9,"START_INTERPOLATION":8,"INTERPOLATION_DURATION":9,"TELEPORT_DURATION":10,"TRANSLATION":11,"SCALE":12,"LEFT_ROTATION":13,"RIGHT_ROTATION":14,"BILLBOARD":15,"BRIGHTNESS":16,"VIEW_RANGE":17,"SHADOW_RADIUS":18,"SHADOW_STRENGTH":19,"WIDTH":20,"HEIGHT":21,"GLOW_COLOR_OVERRIDE":22,"BOAT_TYPE":11,"LEFT_PADDLE_MOVING":12,"RIGHT_PADDLE_MOVING":13,"BUBBLE_WOBBLE_TICKS":14,"DAMAGE_WOBBLE_TICKS":8,"DAMAGE_WOBBLE_SIDE":9,"DAMAGE_WOBBLE_STRENGTH":10,"SHEARED":16,"DASHING":18,"LAST_POSE_TICK":19,"HORSE_FLAGS":17,"CAT_VARIANT":19,"IN_SLEEPING_POSE":20,"HEAD_DOWN":21,"COLLAR_COLOR":20,"TAMEABLE_FLAGS":17,"OWNER_UUID":18,"SPIDER_FLAGS":16,"CUSTOM_BLOCK_ID":11,"CUSTOM_BLOCK_OFFSET":12,"CUSTOM_BLOCK_PRESENT":13,"COMMAND":14,"LAST_OUTPUT":15,"FUSE_SPEED":16,"CHARGED":8,"IGNITED":18,"TREASURE_POS":16,"HAS_FISH":17,"MOISTNESS":18,"CHEST":18,"BABY":16,"ZOMBIE_TYPE":17,"CONVERTING_IN_WATER":18,"ITEM":8,"SPIKES_RETRACTED":16,"BEAM_TARGET_ID":17,"BEAM_TARGET":8,"SHOW_BOTTOM":9,"PHASE_TYPE":16,"CARRIED_BLOCK":16,"ANGRY":17,"PROVOKED":18,"SPELL":17,"CELEBRATING":16,"BLOCK_POS":8,"SHOOTER_ENTITY_ID":9,"SHOT_AT_ANGLE":10,"TYPE":17,"FOX_FLAGS":18,"OWNER":19,"OTHER_TRUSTED":20,"TARGET":18,"LIT":14,"SHOOTING":16,"ITEM_STACK":8,"ROTATION":9,"DARK_TICKS_REMAINING":16,"SCREAMING":17,"LEFT_HORN":18,"RIGHT_HORN":19,"RESPONSE":10,"IRON_GOLEM_FLAGS":16,"STACK":8,"ITEM_DISPLAY":24,"STRENGTH":19,"SLIME_SIZE":16,"TRUSTING":17,"ASK_FOR_BAMBOO_TICKS":17,"SNEEZE_PROGRESS":18,"EATING_TICKS":19,"MAIN_GENE":20,"HIDDEN_GENE":21,"PANDA_FLAGS":22,"SIZE":16,"SADDLED":19,"BOOST_TIME":17,"CHARGING":17,"IMMUNE_TO_ZOMBIFICATION":16,"WARNING":17,"PUFF_STATE":17,"RABBIT_TYPE":17,"ATTACHED_FACE":16,"PEEK_AMOUNT":17,"CONVERTING":19,"FINISH_DIG_TIME":18,"SNOW_GOLEM_FLAGS":16,"COLD":18,"TEXT":23,"LINE_WIDTH":24,"BACKGROUND":25,"TEXT_OPACITY":26,"TEXT_DISPLAY_FLAGS":27,"FUSE":8,"LOYALTY":10,"ENCHANTED":11,"HOME_POS":17,"HAS_EGG":18,"DIGGING_SAND":19,"TRAVEL_POS":20,"LAND_BOUND":21,"ACTIVELY_TRAVELING":22,"VEX_FLAGS":16,"VILLAGER_DATA":20,"HEAD_ROLLING_TIME_LEFT":17,"DRINKING":17,"TRACKED_ENTITY_ID_1":16,"TRACKED_ENTITY_ID_2":17,"TRACKED_ENTITY_ID_3":18,"INVUL_TIMER":19,"BEGGING":19,"ANGER_TIME":21,"HOOK_ENTITY_ID":8,"CAUGHT_FISH":9,"PLAYER_MODE_CUSTOMIZATION_ID":17,"MAIN_ARM_ID":18}

View File

@ -1 +0,0 @@
{"DATA_ID_PADDLE_LEFT":11,"DATA_ID_PADDLE_RIGHT":12,"DATA_ID_BUBBLE_TIME":13,"DATA_ID_HURT":8,"DATA_ID_HURTDIR":9,"DATA_ID_DAMAGE":10,"DATA_SHARED_FLAGS_ID":0,"DATA_AIR_SUPPLY_ID":1,"DATA_CUSTOM_NAME":2,"DATA_CUSTOM_NAME_VISIBLE":3,"DATA_SILENT":4,"DATA_NO_GRAVITY":5,"DATA_POSE":6,"DATA_TICKS_FROZEN":7,"DATA_DANCING":16,"DATA_CAN_DUPLICATE":17,"DATA_MOB_FLAGS_ID":15,"DATA_LIVING_ENTITY_FLAGS":8,"DATA_HEALTH_ID":9,"DATA_EFFECT_PARTICLES":10,"DATA_EFFECT_AMBIENCE_ID":11,"DATA_ARROW_COUNT_ID":12,"DATA_STINGER_COUNT_ID":13,"SLEEPING_POS_ID":14,"DATA_RADIUS":8,"DATA_WAITING":9,"DATA_PARTICLE":10,"ARMADILLO_STATE":18,"DATA_BABY_ID":16,"AGE_LOCKED":17,"DATA_CLIENT_FLAGS":15,"DATA_HEAD_POSE":16,"DATA_BODY_POSE":17,"DATA_LEFT_ARM_POSE":18,"DATA_RIGHT_ARM_POSE":19,"DATA_LEFT_LEG_POSE":20,"DATA_RIGHT_LEG_POSE":21,"ID_EFFECT_COLOR":11,"ID_FLAGS":8,"PIERCE_LEVEL":9,"IN_GROUND":10,"DATA_VARIANT":18,"DATA_PLAYING_DEAD":19,"FROM_BUCKET":16,"DATA_ID_FLAGS":18,"DATA_FLAGS_ID":18,"DATA_ANGER_END_TIME":22,"DATA_BLOCK_STATE_ID":9,"DATA_TRANSFORMATION_INTERPOLATION_START_DELTA_TICKS_ID":8,"DATA_TRANSFORMATION_INTERPOLATION_DURATION_ID":9,"DATA_POS_ROT_INTERPOLATION_DURATION_ID":10,"DATA_TRANSLATION_ID":11,"DATA_SCALE_ID":12,"DATA_LEFT_ROTATION_ID":13,"DATA_RIGHT_ROTATION_ID":14,"DATA_BILLBOARD_RENDER_CONSTRAINTS_ID":15,"DATA_BRIGHTNESS_OVERRIDE_ID":16,"DATA_VIEW_RANGE_ID":17,"DATA_SHADOW_RADIUS_ID":18,"DATA_SHADOW_STRENGTH_ID":19,"DATA_WIDTH_ID":20,"DATA_HEIGHT_ID":21,"DATA_GLOW_COLOR_OVERRIDE_ID":22,"DATA_SHEARED":16,"DASH":20,"LAST_POSE_CHANGE_TICK":20,"DATA_VARIANT_ID":21,"IS_LYING":21,"RELAX_STATE_ONE":22,"DATA_COLLAR_COLOR":21,"DATA_SOUND_VARIANT_ID":24,"DATA_OWNERUUID_ID":19,"DATA_ID_CUSTOM_DISPLAY_BLOCK":11,"DATA_ID_DISPLAY_OFFSET":12,"DATA_WEATHER_STATE":16,"COPPER_GOLEM_STATE":17,"DATA_ID_COMMAND_NAME":13,"DATA_ID_LAST_OUTPUT":14,"CAN_MOVE":16,"IS_ACTIVE":17,"IS_TEARING_DOWN":18,"HOME_POS":19,"DATA_SWELL_DIR":16,"DATA_IS_POWERED":17,"DATA_IS_IGNITED":18,"GOT_FISH":18,"MOISTNESS_LEVEL":19,"DATA_ID_CHEST":19,"DATA_SPECIAL_TYPE_ID":17,"DATA_DROWNED_CONVERSION_ID":18,"DATA_ITEM_STACK":8,"DATA_ID_MOVING":16,"DATA_ID_ATTACK_TARGET":17,"DATA_CARRY_STATE":16,"DATA_CREEPY":17,"DATA_STARED_AT":18,"DATA_PHASE":16,"DATA_BEAM_TARGET":8,"DATA_SHOW_BOTTOM":9,"DATA_SPELL_CASTING_ID":17,"IS_CELEBRATING":16,"DATA_VALUE":8,"DATA_START_POS":8,"DATA_ID_FIREWORKS_ITEM":8,"DATA_ATTACHED_TO_TARGET":9,"DATA_SHOT_AT_ANGLE":10,"DATA_TYPE_ID":18,"DATA_TRUSTED_ID_0":20,"DATA_TRUSTED_ID_1":21,"DATA_TONGUE_TARGET_ID":19,"DATA_ID_FUEL":13,"DATA_IS_CHARGING":16,"IS_LEASH_HOLDER":18,"STAYS_STILL":19,"DATA_ITEM":8,"DATA_ROTATION":10,"DATA_DIRECTION":8,"DATA_DARK_TICKS_REMAINING":18,"DATA_IS_SCREAMING_GOAT":18,"DATA_HAS_LEFT_HORN":19,"DATA_HAS_RIGHT_HORN":20,"DATA_IMMUNE_TO_ZOMBIFICATION":16,"DATA_ID_TYPE_VARIANT":17,"DATA_RESPONSE_ID":10,"DATA_ITEM_STACK_ID":23,"DATA_ITEM_DISPLAY_ID":24,"DATA_STRENGTH_ID":20,"ID_SIZE":16,"DATA_PROFILE":17,"DATA_IMMOVABLE":18,"DATA_DESCRIPTION":19,"DATA_PLAYER_MAIN_HAND":15,"DATA_PLAYER_MODE_CUSTOMISATION":16,"DATA_TYPE":17,"DATA_TRUSTING":18,"DATA_PAINTING_VARIANT_ID":9,"UNHAPPY_COUNTER":18,"SNEEZE_COUNTER":19,"EAT_COUNTER":20,"MAIN_GENE_ID":21,"HIDDEN_GENE_ID":22,"DATA_BOOST_TIME":18,"DATA_IS_CHARGING_CROSSBOW":18,"DATA_IS_DANCING":19,"IS_CHARGING_CROSSBOW":17,"DATA_STANDING_ID":18,"PUFF_STATE":17,"DATA_WOOL_ID":18,"DATA_ATTACH_FACE_ID":16,"DATA_PEEK_ID":17,"DATA_COLOR_ID":18,"DATA_STRAY_CONVERSION_ID":16,"DATA_STATE":18,"DATA_DROP_SEED_AT_TICK":19,"DATA_PUMPKIN_ID":16,"DATA_SUFFOCATING":19,"DATA_TEXT_ID":23,"DATA_LINE_WIDTH_ID":24,"DATA_BACKGROUND_COLOR_ID":25,"DATA_TEXT_OPACITY_ID":26,"DATA_STYLE_FLAGS_ID":27,"DATA_FUSE_ID":8,"ID_LOYALTY":11,"ID_FOIL":12,"HAS_EGG":18,"LAYING_EGG":19,"DATA_VILLAGER_DATA":20,"DATA_VILLAGER_DATA_FINALIZED":21,"DATA_UNHAPPY_COUNTER":18,"CLIENT_ANGER_LEVEL":16,"DATA_USING_ITEM":17,"DATA_TARGET_A":16,"DATA_TARGET_B":17,"DATA_TARGET_C":18,"DATA_ID_INV":19,"DATA_DANGEROUS":8,"DATA_INTERESTED_ID":20,"DATA_CONVERTING_ID":19,"DATA_HOOKED_ENTITY":8,"DATA_BITING":9}

File diff suppressed because one or more lines are too long

View File

@ -13,18 +13,6 @@ pub struct MetaDataType {
v26_2: i32,
}
impl MetaDataType {
pub const ARM: MetaDataType = MetaDataType {
v1_21: -1i32,
v1_21_2: -1i32,
v1_21_4: -1i32,
v1_21_5: -1i32,
v1_21_6: -1i32,
v1_21_7: -1i32,
v1_21_9: -1i32,
v1_21_11: 38i32,
v26_1: -1i32,
v26_2: -1i32,
};
pub const ARMADILLO_STATE: MetaDataType = MetaDataType {
v1_21: 28i32,
v1_21_2: 28i32,
@ -134,29 +122,17 @@ impl MetaDataType {
v26_2: 30i32,
};
pub const COMPONENT: MetaDataType = MetaDataType {
v1_21: -1i32,
v1_21_2: -1i32,
v1_21_4: -1i32,
v1_21_5: -1i32,
v1_21_6: -1i32,
v1_21_7: -1i32,
v1_21_9: -1i32,
v1_21_11: -1i32,
v1_21: 5i32,
v1_21_2: 5i32,
v1_21_4: 5i32,
v1_21_5: 5i32,
v1_21_6: 5i32,
v1_21_7: 5i32,
v1_21_9: 5i32,
v1_21_11: 5i32,
v26_1: 5i32,
v26_2: 5i32,
};
pub const COPPER_GOLEM_STATE: MetaDataType = MetaDataType {
v1_21: -1i32,
v1_21_2: -1i32,
v1_21_4: -1i32,
v1_21_5: -1i32,
v1_21_6: -1i32,
v1_21_7: -1i32,
v1_21_9: 32i32,
v1_21_11: 33i32,
v26_1: 37i32,
v26_2: 37i32,
};
pub const COW_SOUND_VARIANT: MetaDataType = MetaDataType {
v1_21: -1i32,
v1_21_2: -1i32,
@ -182,30 +158,6 @@ impl MetaDataType {
v26_2: 23i32,
};
pub const DIRECTION: MetaDataType = MetaDataType {
v1_21: -1i32,
v1_21_2: -1i32,
v1_21_4: -1i32,
v1_21_5: -1i32,
v1_21_6: -1i32,
v1_21_7: -1i32,
v1_21_9: -1i32,
v1_21_11: -1i32,
v26_1: 12i32,
v26_2: 12i32,
};
pub const ENTITY_POSE: MetaDataType = MetaDataType {
v1_21: 21i32,
v1_21_2: 21i32,
v1_21_4: 21i32,
v1_21_5: 21i32,
v1_21_6: 21i32,
v1_21_7: 21i32,
v1_21_9: 20i32,
v1_21_11: 20i32,
v26_1: -1i32,
v26_2: -1i32,
};
pub const FACING: MetaDataType = MetaDataType {
v1_21: 12i32,
v1_21_2: 12i32,
v1_21_4: 12i32,
@ -214,8 +166,8 @@ impl MetaDataType {
v1_21_7: 12i32,
v1_21_9: 12i32,
v1_21_11: 12i32,
v26_1: -1i32,
v26_2: -1i32,
v26_1: 12i32,
v26_2: 12i32,
};
pub const FLOAT: MetaDataType = MetaDataType {
v1_21: 3i32,
@ -249,23 +201,11 @@ impl MetaDataType {
v1_21_6: -1i32,
v1_21_7: -1i32,
v1_21_9: -1i32,
v1_21_11: -1i32,
v1_21_11: 38i32,
v26_1: 42i32,
v26_2: 42i32,
};
pub const INT: MetaDataType = MetaDataType {
v1_21: -1i32,
v1_21_2: -1i32,
v1_21_4: -1i32,
v1_21_5: -1i32,
v1_21_6: -1i32,
v1_21_7: -1i32,
v1_21_9: -1i32,
v1_21_11: -1i32,
v26_1: 1i32,
v26_2: 1i32,
};
pub const INTEGER: MetaDataType = MetaDataType {
v1_21: 1i32,
v1_21_2: 1i32,
v1_21_4: 1i32,
@ -274,8 +214,8 @@ impl MetaDataType {
v1_21_7: 1i32,
v1_21_9: 1i32,
v1_21_11: 1i32,
v26_1: -1i32,
v26_2: -1i32,
v26_1: 1i32,
v26_2: 1i32,
};
pub const ITEM_STACK: MetaDataType = MetaDataType {
v1_21: 7i32,
@ -350,14 +290,14 @@ impl MetaDataType {
v26_2: 15i32,
};
pub const OPTIONAL_COMPONENT: MetaDataType = MetaDataType {
v1_21: -1i32,
v1_21_2: -1i32,
v1_21_4: -1i32,
v1_21_5: -1i32,
v1_21_6: -1i32,
v1_21_7: -1i32,
v1_21_9: -1i32,
v1_21_11: -1i32,
v1_21: 6i32,
v1_21_2: 6i32,
v1_21_4: 6i32,
v1_21_5: 6i32,
v1_21_6: 6i32,
v1_21_7: 6i32,
v1_21_9: 6i32,
v1_21_11: 6i32,
v26_1: 6i32,
v26_2: 6i32,
};
@ -373,18 +313,6 @@ impl MetaDataType {
v26_1: 33i32,
v26_2: 33i32,
};
pub const OPTIONAL_INT: MetaDataType = MetaDataType {
v1_21: 20i32,
v1_21_2: 20i32,
v1_21_4: 20i32,
v1_21_5: 20i32,
v1_21_6: 20i32,
v1_21_7: 20i32,
v1_21_9: 19i32,
v1_21_11: 19i32,
v26_1: -1i32,
v26_2: -1i32,
};
pub const OPTIONAL_LIVING_ENTITY_REFERENCE: MetaDataType = MetaDataType {
v1_21: -1i32,
v1_21_2: -1i32,
@ -397,27 +325,15 @@ impl MetaDataType {
v26_1: 13i32,
v26_2: 13i32,
};
pub const OPTIONAL_TEXT_COMPONENT: MetaDataType = MetaDataType {
v1_21: 6i32,
v1_21_2: 6i32,
v1_21_4: 6i32,
v1_21_5: 6i32,
v1_21_6: 6i32,
v1_21_7: 6i32,
v1_21_9: 6i32,
v1_21_11: 6i32,
v26_1: -1i32,
v26_2: -1i32,
};
pub const OPTIONAL_UNSIGNED_INT: MetaDataType = MetaDataType {
v1_21: -1i32,
v1_21_2: -1i32,
v1_21_4: -1i32,
v1_21_5: -1i32,
v1_21_6: -1i32,
v1_21_7: -1i32,
v1_21_9: -1i32,
v1_21_11: -1i32,
v1_21: 20i32,
v1_21_2: 20i32,
v1_21_4: 20i32,
v1_21_5: 20i32,
v1_21_6: 20i32,
v1_21_7: 20i32,
v1_21_9: 19i32,
v1_21_11: 19i32,
v26_1: 19i32,
v26_2: 19i32,
};
@ -469,7 +385,7 @@ impl MetaDataType {
v26_1: 16i32,
v26_2: 16i32,
};
pub const PARTICLE_LIST: MetaDataType = MetaDataType {
pub const PARTICLES: MetaDataType = MetaDataType {
v1_21: 18i32,
v1_21_2: 18i32,
v1_21_4: 18i32,
@ -478,18 +394,6 @@ impl MetaDataType {
v1_21_7: 18i32,
v1_21_9: 17i32,
v1_21_11: 17i32,
v26_1: -1i32,
v26_2: -1i32,
};
pub const PARTICLES: MetaDataType = MetaDataType {
v1_21: -1i32,
v1_21_2: -1i32,
v1_21_4: -1i32,
v1_21_5: -1i32,
v1_21_6: -1i32,
v1_21_7: -1i32,
v1_21_9: -1i32,
v1_21_11: -1i32,
v26_1: 17i32,
v26_2: 17i32,
};
@ -518,42 +422,18 @@ impl MetaDataType {
v26_2: 28i32,
};
pub const POSE: MetaDataType = MetaDataType {
v1_21: -1i32,
v1_21_2: -1i32,
v1_21_4: -1i32,
v1_21_5: -1i32,
v1_21_6: -1i32,
v1_21_7: -1i32,
v1_21_9: -1i32,
v1_21_11: -1i32,
v1_21: 21i32,
v1_21_2: 21i32,
v1_21_4: 21i32,
v1_21_5: 21i32,
v1_21_6: 21i32,
v1_21_7: 21i32,
v1_21_9: 20i32,
v1_21_11: 20i32,
v26_1: 20i32,
v26_2: 20i32,
};
pub const PROFILE: MetaDataType = MetaDataType {
v1_21: -1i32,
v1_21_2: -1i32,
v1_21_4: -1i32,
v1_21_5: -1i32,
v1_21_6: -1i32,
v1_21_7: -1i32,
v1_21_9: 36i32,
v1_21_11: 37i32,
v26_1: -1i32,
v26_2: -1i32,
};
pub const QUATERNION: MetaDataType = MetaDataType {
v1_21: -1i32,
v1_21_2: -1i32,
v1_21_4: -1i32,
v1_21_5: -1i32,
v1_21_6: -1i32,
v1_21_7: -1i32,
v1_21_9: -1i32,
v1_21_11: -1i32,
v26_1: 40i32,
v26_2: 40i32,
};
pub const QUATERNION_F: MetaDataType = MetaDataType {
v1_21: 30i32,
v1_21_2: 30i32,
v1_21_4: 30i32,
@ -562,8 +442,8 @@ impl MetaDataType {
v1_21_7: 34i32,
v1_21_9: 35i32,
v1_21_11: 36i32,
v26_1: -1i32,
v26_2: -1i32,
v26_1: 40i32,
v26_2: 40i32,
};
pub const RESOLVABLE_PROFILE: MetaDataType = MetaDataType {
v1_21: -1i32,
@ -572,12 +452,12 @@ impl MetaDataType {
v1_21_5: -1i32,
v1_21_6: -1i32,
v1_21_7: -1i32,
v1_21_9: -1i32,
v1_21_11: -1i32,
v1_21_9: 36i32,
v1_21_11: 37i32,
v26_1: 41i32,
v26_2: 41i32,
};
pub const ROTATION: MetaDataType = MetaDataType {
pub const ROTATIONS: MetaDataType = MetaDataType {
v1_21: 9i32,
v1_21_2: 9i32,
v1_21_4: 9i32,
@ -586,18 +466,6 @@ impl MetaDataType {
v1_21_7: 9i32,
v1_21_9: 9i32,
v1_21_11: 9i32,
v26_1: -1i32,
v26_2: -1i32,
};
pub const ROTATIONS: MetaDataType = MetaDataType {
v1_21: -1i32,
v1_21_2: -1i32,
v1_21_4: -1i32,
v1_21_5: -1i32,
v1_21_6: -1i32,
v1_21_7: -1i32,
v1_21_9: -1i32,
v1_21_11: -1i32,
v26_1: 9i32,
v26_2: 9i32,
};
@ -625,31 +493,7 @@ impl MetaDataType {
v26_1: 4i32,
v26_2: 4i32,
};
pub const TEXT_COMPONENT: MetaDataType = MetaDataType {
v1_21: 5i32,
v1_21_2: 5i32,
v1_21_4: 5i32,
v1_21_5: 5i32,
v1_21_6: 5i32,
v1_21_7: 5i32,
v1_21_9: 5i32,
v1_21_11: 5i32,
v26_1: -1i32,
v26_2: -1i32,
};
pub const VECTOR3: MetaDataType = MetaDataType {
v1_21: -1i32,
v1_21_2: -1i32,
v1_21_4: -1i32,
v1_21_5: -1i32,
v1_21_6: -1i32,
v1_21_7: -1i32,
v1_21_9: -1i32,
v1_21_11: -1i32,
v26_1: 39i32,
v26_2: 39i32,
};
pub const VECTOR_3F: MetaDataType = MetaDataType {
v1_21: 29i32,
v1_21_2: 29i32,
v1_21_4: 29i32,
@ -658,8 +502,8 @@ impl MetaDataType {
v1_21_7: 33i32,
v1_21_9: 34i32,
v1_21_11: 35i32,
v26_1: -1i32,
v26_2: -1i32,
v26_1: 39i32,
v26_2: 39i32,
};
pub const VILLAGER_DATA: MetaDataType = MetaDataType {
v1_21: 19i32,
@ -680,8 +524,8 @@ impl MetaDataType {
v1_21_5: -1i32,
v1_21_6: -1i32,
v1_21_7: -1i32,
v1_21_9: -1i32,
v1_21_11: -1i32,
v1_21_9: 32i32,
v1_21_11: 33i32,
v26_1: 38i32,
v26_2: 38i32,
};
@ -721,6 +565,19 @@ impl MetaDataType {
v26_1: 32i32,
v26_2: 32i32,
};
pub const INTEGER: MetaDataType = Self::INT;
pub const ENTITY_POSE: MetaDataType = Self::POSE;
pub const FACING: MetaDataType = Self::DIRECTION;
pub const TEXT_COMPONENT: MetaDataType = Self::COMPONENT;
pub const OPTIONAL_TEXT_COMPONENT: MetaDataType = Self::OPTIONAL_COMPONENT;
pub const OPTIONAL_INT: MetaDataType = Self::OPTIONAL_UNSIGNED_INT;
pub const VECTOR_3F: MetaDataType = Self::VECTOR3;
pub const QUATERNION_F: MetaDataType = Self::QUATERNION;
pub const ROTATION: MetaDataType = Self::ROTATIONS;
pub const PARTICLE_LIST: MetaDataType = Self::PARTICLES;
pub const COPPER_GOLEM_STATE: MetaDataType = Self::WEATHERING_COPPER_STATE;
pub const PROFILE: MetaDataType = Self::RESOLVABLE_PROFILE;
pub const ARM: MetaDataType = Self::HUMANOID_ARM;
pub const fn id(&self, version: pumpkin_util::version::JavaMinecraftVersion) -> i32 {
match version {
pumpkin_util::version::JavaMinecraftVersion::V_1_21 => self.v1_21,

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,11 @@
use std::io::{Cursor, Write};
use pumpkin_data::{
block_state_remap::remap_block_state_for_version, item_id_remap::remap_item_id_for_version,
meta_data_type::MetaDataType, packet::clientbound::PLAY_SET_ENTITY_DATA,
tracked_data::TrackedId,
block_state_remap::remap_block_state_for_version,
item_id_remap::remap_item_id_for_version,
meta_data_type::MetaDataType,
packet::clientbound::PLAY_SET_ENTITY_DATA,
tracked_data::{TrackedData, TrackedId},
};
use pumpkin_macros::java_packet;
use pumpkin_util::version::JavaMinecraftVersion;
@ -69,7 +71,15 @@ pub struct Metadata<T> {
}
impl<T> Metadata<T> {
pub const fn new(index: TrackedId, r#type: MetaDataType, value: T) -> Self {
pub const fn new(tracked: TrackedData, value: T) -> Self {
Self {
index: tracked.id,
r#type: tracked.r#type,
value,
}
}
pub const fn new_raw(index: TrackedId, r#type: MetaDataType, value: T) -> Self {
Self {
index,
r#type,
@ -305,9 +315,7 @@ impl MetadataSerializer for Option<uuid::Uuid> {
mod tests {
use std::io::{Cursor, Read};
use pumpkin_data::{
meta_data_type::MetaDataType, particle::Particle, tracked_data::TrackedData,
};
use pumpkin_data::{meta_data_type::MetaDataType, particle::Particle};
use pumpkin_util::version::JavaMinecraftVersion;
use crate::{VarInt, ser::NetworkWriteExt};
@ -332,8 +340,7 @@ mod tests {
fn encoded_particle(version: JavaMinecraftVersion) -> (VarInt, Vec<u8>) {
let particle_data = [0x12, 0x34, 0x56, 0x78];
let metadata = Metadata::new(
TrackedData::PARTICLE,
MetaDataType::PARTICLE,
pumpkin_data::tracked_data::area_effect_cloud::DATA_PARTICLE,
ParticleMetadata {
particle_id: VarInt(Particle::ExplosionEmitter as i32),
data: particle_data,
@ -342,7 +349,10 @@ mod tests {
let mut bytes = Vec::new();
metadata.write(&mut bytes, &version).unwrap();
assert_eq!(bytes[0], TrackedData::PARTICLE.get(&version));
assert_eq!(
bytes[0],
pumpkin_data::tracked_data::area_effect_cloud::DATA_PARTICLE.get(&version)
);
assert_eq!(bytes[1], MetaDataType::PARTICLE.id(version) as u8);
let mut cursor = Cursor::new(&bytes[2..]);

View File

@ -1,5 +1,4 @@
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_data::tracked_data;
use pumpkin_protocol::java::client::play::Metadata;
use std::sync::atomic::{AtomicBool, AtomicI32, Ordering::Relaxed};
@ -54,8 +53,7 @@ pub trait AgeableMob: Mob {
let is_baby = new_age < 0;
entity.send_meta_data(
&[Metadata::new(
TrackedData::BABY_ID,
MetaDataType::BOOLEAN,
tracked_data::ageable_mob::DATA_BABY_ID,
is_baby,
)],
None,

View File

@ -3,9 +3,7 @@ use crate::entity::EntityBase;
use crate::entity::mob::Mob;
use crate::entity::player::Player;
use pumpkin_data::item::Item;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::tag::{self, Taggable};
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_protocol::java::client::play::Metadata;
use rand::RngExt;
use std::sync::Arc;
@ -49,8 +47,7 @@ impl BegGoal {
fn set_is_interested(mob: &dyn Mob, value: bool) {
mob.get_mob_entity().living_entity.entity.send_meta_data(
&[Metadata::new(
TrackedData::INTERESTED_ID,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::wolf::INTERESTED_ID,
value,
)],
None,

View File

@ -175,8 +175,7 @@ impl EntityBase for AreaEffectCloudEntity {
// Send initial particle and radius
self.entity.send_meta_data(
&[pumpkin_protocol::java::client::play::Metadata::new(
pumpkin_data::tracked_data::TrackedData::PARTICLE,
pumpkin_data::meta_data_type::MetaDataType::PARTICLE,
pumpkin_data::tracked_data::area_effect_cloud::PARTICLE,
&meta,
)],
None,
@ -184,8 +183,7 @@ impl EntityBase for AreaEffectCloudEntity {
self.entity.send_meta_data(
&[pumpkin_protocol::java::client::play::Metadata::new(
pumpkin_data::tracked_data::TrackedData::RADIUS,
pumpkin_data::meta_data_type::MetaDataType::FLOAT,
pumpkin_data::tracked_data::area_effect_cloud::RADIUS,
radius,
)],
None,
@ -196,8 +194,7 @@ impl EntityBase for AreaEffectCloudEntity {
let is_waiting = 0 < wait_time;
self.entity.send_meta_data(
&[pumpkin_protocol::java::client::play::Metadata::new(
pumpkin_data::tracked_data::TrackedData::WAITING,
pumpkin_data::meta_data_type::MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::area_effect_cloud::WAITING,
is_waiting,
)],
None,
@ -233,8 +230,7 @@ impl EntityBase for AreaEffectCloudEntity {
if age == wait_time && wait_time > 0 {
self.entity.send_meta_data(
&[pumpkin_protocol::java::client::play::Metadata::new(
pumpkin_data::tracked_data::TrackedData::WAITING,
pumpkin_data::meta_data_type::MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::area_effect_cloud::WAITING,
false,
)],
None,
@ -261,8 +257,7 @@ impl EntityBase for AreaEffectCloudEntity {
drop(radius);
self.entity.send_meta_data(
&[pumpkin_protocol::java::client::play::Metadata::new(
pumpkin_data::tracked_data::TrackedData::RADIUS,
pumpkin_data::meta_data_type::MetaDataType::FLOAT,
pumpkin_data::tracked_data::area_effect_cloud::RADIUS,
current_radius,
)],
None,
@ -392,8 +387,7 @@ impl EntityBase for AreaEffectCloudEntity {
// Send updated radius to clients
self.entity.send_meta_data(
&[pumpkin_protocol::java::client::play::Metadata::new(
pumpkin_data::tracked_data::TrackedData::RADIUS,
pumpkin_data::meta_data_type::MetaDataType::FLOAT,
pumpkin_data::tracked_data::area_effect_cloud::RADIUS,
current_radius,
)],
None,

View File

@ -2,10 +2,8 @@ use crate::entity::EntityBase;
use crate::entity::player::Player;
use pumpkin_data::damage::DamageType;
use pumpkin_data::effect::StatusEffect;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::tag;
use pumpkin_data::tag::Taggable;
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_protocol::codec::var_int::VarInt;
use pumpkin_protocol::java::client::play::Metadata;
use pumpkin_util::GameMode;
@ -176,8 +174,7 @@ impl BreathManager {
player.get_entity().send_meta_data(
&[Metadata::new(
TrackedData::AIR_SUPPLY_ID,
MetaDataType::INT,
pumpkin_data::tracked_data::entity::DATA_AIR_SUPPLY_ID,
VarInt(air),
)],
Some(&bedrock_meta),

View File

@ -4,10 +4,7 @@ use std::sync::{
};
use tokio::sync::Mutex;
use pumpkin_data::{
damage::DamageType, item_stack::ItemStack, meta_data_type::MetaDataType,
tracked_data::TrackedData,
};
use pumpkin_data::{damage::DamageType, item_stack::ItemStack};
use pumpkin_nbt::{compound::NbtCompound, tag::NbtTag};
use pumpkin_protocol::{
codec::{item_stack_seralizer::ItemStackSerializer, var_int::VarInt},
@ -95,8 +92,7 @@ impl DisplayEntity {
.store(ticks, Ordering::Relaxed);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::START_INTERPOLATION,
MetaDataType::INT,
pumpkin_data::tracked_data::display::START_INTERPOLATION,
VarInt(ticks),
)],
None,
@ -112,8 +108,7 @@ impl DisplayEntity {
.store(duration, Ordering::Relaxed);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::INTERPOLATION_DURATION,
MetaDataType::INT,
pumpkin_data::tracked_data::display::INTERPOLATION_DURATION,
VarInt(duration),
)],
None,
@ -128,8 +123,7 @@ impl DisplayEntity {
self.teleport_duration.store(duration, Ordering::Relaxed);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::TELEPORT_DURATION,
MetaDataType::INT,
pumpkin_data::tracked_data::display::TELEPORT_DURATION,
VarInt(duration),
)],
None,
@ -144,8 +138,7 @@ impl DisplayEntity {
*self.translation.lock().await = translation;
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::TRANSLATION,
MetaDataType::VECTOR_3F,
pumpkin_data::tracked_data::display::TRANSLATION,
Vector3fSerializer(translation.x, translation.y, translation.z),
)],
None,
@ -160,8 +153,7 @@ impl DisplayEntity {
*self.scale.lock().await = scale;
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::SCALE,
MetaDataType::VECTOR_3F,
pumpkin_data::tracked_data::display::SCALE,
Vector3fSerializer(scale.x, scale.y, scale.z),
)],
None,
@ -176,8 +168,7 @@ impl DisplayEntity {
*self.left_rotation.lock().await = left_rotation;
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::LEFT_ROTATION,
MetaDataType::QUATERNION_F,
pumpkin_data::tracked_data::display::LEFT_ROTATION,
QuaternionfSerializer(
left_rotation[0],
left_rotation[1],
@ -197,8 +188,7 @@ impl DisplayEntity {
*self.right_rotation.lock().await = right_rotation;
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::RIGHT_ROTATION,
MetaDataType::QUATERNION_F,
pumpkin_data::tracked_data::display::RIGHT_ROTATION,
QuaternionfSerializer(
right_rotation[0],
right_rotation[1],
@ -218,8 +208,7 @@ impl DisplayEntity {
self.billboard.store(billboard, Ordering::Relaxed);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::BILLBOARD,
MetaDataType::BYTE,
pumpkin_data::tracked_data::display::BILLBOARD,
billboard,
)],
None,
@ -234,8 +223,7 @@ impl DisplayEntity {
self.brightness.store(brightness, Ordering::Relaxed);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::BRIGHTNESS,
MetaDataType::INT,
pumpkin_data::tracked_data::display::BRIGHTNESS,
VarInt(brightness),
)],
None,
@ -250,8 +238,7 @@ impl DisplayEntity {
*self.view_range.lock().await = view_range;
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::VIEW_RANGE,
MetaDataType::FLOAT,
pumpkin_data::tracked_data::display::VIEW_RANGE,
view_range,
)],
None,
@ -266,8 +253,7 @@ impl DisplayEntity {
*self.shadow_radius.lock().await = shadow_radius;
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::SHADOW_RADIUS,
MetaDataType::FLOAT,
pumpkin_data::tracked_data::display::SHADOW_RADIUS,
shadow_radius,
)],
None,
@ -282,8 +268,7 @@ impl DisplayEntity {
*self.shadow_strength.lock().await = shadow_strength;
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::SHADOW_STRENGTH,
MetaDataType::FLOAT,
pumpkin_data::tracked_data::display::SHADOW_STRENGTH,
shadow_strength,
)],
None,
@ -298,8 +283,7 @@ impl DisplayEntity {
*self.width.lock().await = width;
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::WIDTH,
MetaDataType::FLOAT,
pumpkin_data::tracked_data::display::WIDTH,
width,
)],
None,
@ -314,8 +298,7 @@ impl DisplayEntity {
*self.height.lock().await = height;
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::HEIGHT,
MetaDataType::FLOAT,
pumpkin_data::tracked_data::display::HEIGHT,
height,
)],
None,
@ -330,8 +313,7 @@ impl DisplayEntity {
self.glow_color_override.store(color, Ordering::Relaxed);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::GLOW_COLOR_OVERRIDE,
MetaDataType::INT,
pumpkin_data::tracked_data::display::GLOW_COLOR_OVERRIDE,
VarInt(color),
)],
None,
@ -352,40 +334,35 @@ impl DisplayEntity {
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::START_INTERPOLATION,
MetaDataType::INT,
pumpkin_data::tracked_data::display::START_INTERPOLATION,
VarInt(self.interpolation_start_delta_ticks.load(Ordering::Relaxed)),
)],
None,
);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::INTERPOLATION_DURATION,
MetaDataType::INT,
pumpkin_data::tracked_data::display::INTERPOLATION_DURATION,
VarInt(self.interpolation_duration.load(Ordering::Relaxed)),
)],
None,
);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::TRANSLATION,
MetaDataType::VECTOR_3F,
pumpkin_data::tracked_data::display::TRANSLATION,
Vector3fSerializer(translation.x, translation.y, translation.z),
)],
None,
);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::SCALE,
MetaDataType::VECTOR_3F,
pumpkin_data::tracked_data::display::SCALE,
Vector3fSerializer(scale.x, scale.y, scale.z),
)],
None,
);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::LEFT_ROTATION,
MetaDataType::QUATERNION_F,
pumpkin_data::tracked_data::display::LEFT_ROTATION,
QuaternionfSerializer(
left_rotation[0],
left_rotation[1],
@ -397,8 +374,7 @@ impl DisplayEntity {
);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::RIGHT_ROTATION,
MetaDataType::QUATERNION_F,
pumpkin_data::tracked_data::display::RIGHT_ROTATION,
QuaternionfSerializer(
right_rotation[0],
right_rotation[1],
@ -410,72 +386,63 @@ impl DisplayEntity {
);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::BILLBOARD,
MetaDataType::BYTE,
pumpkin_data::tracked_data::display::BILLBOARD,
self.billboard.load(Ordering::Relaxed),
)],
None,
);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::BRIGHTNESS,
MetaDataType::INT,
pumpkin_data::tracked_data::display::BRIGHTNESS,
VarInt(self.brightness.load(Ordering::Relaxed)),
)],
None,
);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::VIEW_RANGE,
MetaDataType::FLOAT,
pumpkin_data::tracked_data::display::VIEW_RANGE,
view_range,
)],
None,
);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::SHADOW_RADIUS,
MetaDataType::FLOAT,
pumpkin_data::tracked_data::display::SHADOW_RADIUS,
shadow_radius,
)],
None,
);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::SHADOW_STRENGTH,
MetaDataType::FLOAT,
pumpkin_data::tracked_data::display::SHADOW_STRENGTH,
shadow_strength,
)],
None,
);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::WIDTH,
MetaDataType::FLOAT,
pumpkin_data::tracked_data::display::WIDTH,
width,
)],
None,
);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::HEIGHT,
MetaDataType::FLOAT,
pumpkin_data::tracked_data::display::HEIGHT,
height,
)],
None,
);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::TELEPORT_DURATION,
MetaDataType::INT,
pumpkin_data::tracked_data::display::TELEPORT_DURATION,
VarInt(self.teleport_duration.load(Ordering::Relaxed)),
)],
None,
);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::GLOW_COLOR_OVERRIDE,
MetaDataType::INT,
pumpkin_data::tracked_data::display::GLOW_COLOR_OVERRIDE,
VarInt(self.glow_color_override.load(Ordering::Relaxed)),
)],
None,
@ -646,8 +613,7 @@ impl BlockDisplayEntity {
self.block_state.store(block_state, Ordering::Relaxed);
self.display.entity.send_meta_data(
&[Metadata::new(
TrackedData::BLOCK_STATE,
MetaDataType::BLOCK_STATE,
pumpkin_data::tracked_data::block_display::BLOCK_STATE,
VarInt(block_state),
)],
None,
@ -693,8 +659,7 @@ impl EntityBase for BlockDisplayEntity {
self.display.init_display_data_tracker().await;
self.display.entity.send_meta_data(
&[Metadata::new(
TrackedData::BLOCK_STATE,
MetaDataType::BLOCK_STATE,
pumpkin_data::tracked_data::block_display::BLOCK_STATE,
VarInt(self.block_state.load(Ordering::Relaxed)),
)],
None,
@ -770,8 +735,7 @@ impl ItemDisplayEntity {
*self.item_stack.lock().await = item.clone();
self.display.entity.send_meta_data(
&[Metadata::new(
TrackedData::ITEM,
MetaDataType::ITEM_STACK,
pumpkin_data::tracked_data::item_display::ITEM,
ItemStackSerializer::from(item),
)],
None,
@ -786,8 +750,7 @@ impl ItemDisplayEntity {
self.item_display.store(mode, Ordering::Relaxed);
self.display.entity.send_meta_data(
&[Metadata::new(
TrackedData::ITEM_DISPLAY,
MetaDataType::BYTE,
pumpkin_data::tracked_data::item_display::ITEM_DISPLAY,
mode,
)],
None,
@ -855,16 +818,14 @@ impl EntityBase for ItemDisplayEntity {
self.display.init_display_data_tracker().await;
self.display.entity.send_meta_data(
&[Metadata::new(
TrackedData::ITEM,
MetaDataType::ITEM_STACK,
pumpkin_data::tracked_data::item_display::ITEM,
ItemStackSerializer::from(self.item_stack.lock().await.clone()),
)],
None,
);
self.display.entity.send_meta_data(
&[Metadata::new(
TrackedData::ITEM_DISPLAY,
MetaDataType::BYTE,
pumpkin_data::tracked_data::item_display::ITEM_DISPLAY,
self.item_display.load(Ordering::Relaxed),
)],
None,
@ -946,8 +907,7 @@ impl TextDisplayEntity {
*self.text.lock().await = text.clone();
self.display.entity.send_meta_data(
&[Metadata::new(
TrackedData::TEXT,
MetaDataType::COMPONENT,
pumpkin_data::tracked_data::text_display::TEXT,
text,
)],
None,
@ -962,8 +922,7 @@ impl TextDisplayEntity {
self.line_width.store(width, Ordering::Relaxed);
self.display.entity.send_meta_data(
&[Metadata::new(
TrackedData::LINE_WIDTH,
MetaDataType::INT,
pumpkin_data::tracked_data::text_display::LINE_WIDTH,
VarInt(width),
)],
None,
@ -978,8 +937,7 @@ impl TextDisplayEntity {
self.background.store(color, Ordering::Relaxed);
self.display.entity.send_meta_data(
&[Metadata::new(
TrackedData::BACKGROUND,
MetaDataType::INT,
pumpkin_data::tracked_data::text_display::BACKGROUND,
VarInt(color),
)],
None,
@ -994,8 +952,7 @@ impl TextDisplayEntity {
self.text_opacity.store(opacity, Ordering::Relaxed);
self.display.entity.send_meta_data(
&[Metadata::new(
TrackedData::TEXT_OPACITY,
MetaDataType::BYTE,
pumpkin_data::tracked_data::text_display::TEXT_OPACITY,
opacity as u8,
)],
None,
@ -1016,8 +973,7 @@ impl TextDisplayEntity {
self.flags.store(flags, Ordering::Relaxed);
self.display.entity.send_meta_data(
&[Metadata::new(
TrackedData::TEXT_DISPLAY_FLAGS,
MetaDataType::BYTE,
pumpkin_data::tracked_data::text_display::TEXT_DISPLAY_FLAGS,
flags,
)],
None,
@ -1038,8 +994,7 @@ impl TextDisplayEntity {
self.flags.store(flags, Ordering::Relaxed);
self.display.entity.send_meta_data(
&[Metadata::new(
TrackedData::TEXT_DISPLAY_FLAGS,
MetaDataType::BYTE,
pumpkin_data::tracked_data::text_display::TEXT_DISPLAY_FLAGS,
flags,
)],
None,
@ -1060,8 +1015,7 @@ impl TextDisplayEntity {
self.flags.store(flags, Ordering::Relaxed);
self.display.entity.send_meta_data(
&[Metadata::new(
TrackedData::TEXT_DISPLAY_FLAGS,
MetaDataType::BYTE,
pumpkin_data::tracked_data::text_display::TEXT_DISPLAY_FLAGS,
flags,
)],
None,
@ -1089,8 +1043,7 @@ impl TextDisplayEntity {
self.flags.store(flags, Ordering::Relaxed);
self.display.entity.send_meta_data(
&[Metadata::new(
TrackedData::TEXT_DISPLAY_FLAGS,
MetaDataType::BYTE,
pumpkin_data::tracked_data::text_display::TEXT_DISPLAY_FLAGS,
flags,
)],
None,
@ -1186,40 +1139,35 @@ impl EntityBase for TextDisplayEntity {
let text = self.text.lock().await.clone();
self.display.entity.send_meta_data(
&[Metadata::new(
TrackedData::TEXT,
MetaDataType::COMPONENT,
pumpkin_data::tracked_data::text_display::TEXT,
text,
)],
None,
);
self.display.entity.send_meta_data(
&[Metadata::new(
TrackedData::LINE_WIDTH,
MetaDataType::INT,
pumpkin_data::tracked_data::text_display::LINE_WIDTH,
VarInt(self.line_width.load(Ordering::Relaxed)),
)],
None,
);
self.display.entity.send_meta_data(
&[Metadata::new(
TrackedData::BACKGROUND,
MetaDataType::INT,
pumpkin_data::tracked_data::text_display::BACKGROUND,
VarInt(self.background.load(Ordering::Relaxed)),
)],
None,
);
self.display.entity.send_meta_data(
&[Metadata::new(
TrackedData::TEXT_OPACITY,
MetaDataType::BYTE,
pumpkin_data::tracked_data::text_display::TEXT_OPACITY,
self.text_opacity.load(Ordering::Relaxed) as u8,
)],
None,
);
self.display.entity.send_meta_data(
&[Metadata::new(
TrackedData::TEXT_DISPLAY_FLAGS,
MetaDataType::BYTE,
pumpkin_data::tracked_data::text_display::TEXT_DISPLAY_FLAGS,
self.flags.load(Ordering::Relaxed),
)],
None,

View File

@ -3,9 +3,7 @@ use core::f32;
use crate::entity::{Entity, EntityBase, EntityBaseFuture, NBTStorage, living::LivingEntity};
use pumpkin_data::{
damage::DamageType,
meta_data_type::MetaDataType,
tag::{self, Taggable},
tracked_data::TrackedData,
};
use pumpkin_protocol::java::client::play::Metadata;
use pumpkin_util::math::vector3::Vector3;
@ -24,8 +22,7 @@ impl EndCrystalEntity {
pub fn set_show_bottom(&self, show_bottom: bool) {
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::SHOW_BOTTOM,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::end_crystal::SHOW_BOTTOM,
show_bottom,
)],
None,

View File

@ -11,9 +11,7 @@ use pumpkin_data::damage::DamageType;
use pumpkin_data::entity::EntityType;
use pumpkin_data::item::Item;
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::sound::Sound;
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_protocol::codec::item_stack_seralizer::ItemStackSerializer;
use pumpkin_protocol::java::client::play::{CSetEntityMetadata, Metadata};
@ -129,8 +127,7 @@ impl ItemFrameEntity {
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::ITEM,
MetaDataType::ITEM_STACK,
pumpkin_data::tracked_data::item_frame::ITEM,
&item_serializer,
)],
None,
@ -157,8 +154,7 @@ impl ItemFrameEntity {
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::ROTATION,
MetaDataType::INT,
pumpkin_data::tracked_data::item_frame::ROTATION,
rot as i32,
)],
None,
@ -331,16 +327,14 @@ impl EntityBase for ItemFrameEntity {
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::ITEM,
MetaDataType::ITEM_STACK,
pumpkin_data::tracked_data::item_frame::ITEM,
&item_serializer,
)],
None,
);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::ROTATION,
MetaDataType::INT,
pumpkin_data::tracked_data::item_frame::ROTATION,
rotation,
)],
None,
@ -361,9 +355,12 @@ impl EntityBase for ItemFrameEntity {
let rotation = self.get_rotation() as i32;
let mut data = Vec::new();
let meta_item =
Metadata::new(TrackedData::ITEM, MetaDataType::ITEM_STACK, item_serializer);
let meta_rot = Metadata::new(TrackedData::ROTATION, MetaDataType::INT, rotation);
let meta_item = Metadata::new(
pumpkin_data::tracked_data::item_frame::ITEM,
item_serializer,
);
let meta_rot =
Metadata::new(pumpkin_data::tracked_data::item_frame::ROTATION, rotation);
let ver = client.version.load();
if meta_item.write(&mut data, &ver).is_ok() && meta_rot.write(&mut data, &ver).is_ok() {

View File

@ -1,8 +1,7 @@
use pumpkin_data::Block;
use pumpkin_data::BlockStateId;
use pumpkin_data::damage::DamageType;
use pumpkin_data::entity::EntityType;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::{Block, tracked_data::TrackedData};
use pumpkin_protocol::java::client::play::Metadata;
use pumpkin_util::math::position::BlockPos;
use pumpkin_world::world::BlockFlags;
@ -95,8 +94,7 @@ impl EntityBase for FallingEntity {
Box::pin(async move {
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::START_POS,
MetaDataType::BLOCK_POS,
pumpkin_data::tracked_data::falling_block::START_POS,
self.entity.block_pos.load(),
)],
None,

View File

@ -5,10 +5,7 @@ use std::sync::{
use tokio::sync::Mutex;
use uuid::Uuid;
use pumpkin_data::{
damage::DamageType, item_stack::ItemStack, meta_data_type::MetaDataType,
tracked_data::TrackedData,
};
use pumpkin_data::{damage::DamageType, item_stack::ItemStack};
use pumpkin_nbt::{compound::NbtCompound, tag::NbtTag};
use pumpkin_protocol::java::client::play::Metadata;
use pumpkin_util::math::{
@ -85,8 +82,7 @@ impl InteractionEntity {
self.update_dimensions().await;
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::WIDTH,
MetaDataType::FLOAT,
pumpkin_data::tracked_data::interaction::WIDTH,
width,
)],
None,
@ -102,8 +98,7 @@ impl InteractionEntity {
self.update_dimensions().await;
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::HEIGHT,
MetaDataType::FLOAT,
pumpkin_data::tracked_data::interaction::HEIGHT,
height,
)],
None,
@ -118,8 +113,7 @@ impl InteractionEntity {
self.response.store(response, Ordering::Relaxed);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::RESPONSE,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::interaction::RESPONSE,
response,
)],
None,
@ -215,24 +209,21 @@ impl EntityBase for InteractionEntity {
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::WIDTH,
MetaDataType::FLOAT,
pumpkin_data::tracked_data::interaction::WIDTH,
width,
)],
None,
);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::HEIGHT,
MetaDataType::FLOAT,
pumpkin_data::tracked_data::interaction::HEIGHT,
height,
)],
None,
);
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::RESPONSE,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::interaction::RESPONSE,
response,
)],
None,

View File

@ -1,10 +1,10 @@
use crate::entity::player::statistics::StatisticCategory;
use crate::{entity::EntityBaseFuture, server::Server};
use core::f32;
use pumpkin_data::damage::DamageType;
use pumpkin_data::data_component_impl::DamageResistantImpl;
use pumpkin_data::data_component_impl::DamageResistantType;
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::{damage::DamageType, meta_data_type::MetaDataType, tracked_data::TrackedData};
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_protocol::bedrock::client::CAddItemActor;
use pumpkin_protocol::bedrock::network_item::ItemStackWrapper;
@ -508,8 +508,7 @@ impl EntityBase for ItemEntity {
Box::pin(async {
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::ITEM,
MetaDataType::ITEM_STACK,
pumpkin_data::tracked_data::item::ITEM,
&ItemStackSerializer::from(self.item_stack.lock().await.clone()),
)],
None,
@ -670,8 +669,7 @@ impl EntityBase for ItemEntity {
.await;
let metadata = Metadata::new(
TrackedData::ITEM,
MetaDataType::ITEM_STACK,
pumpkin_data::tracked_data::item::ITEM,
ItemStackSerializer::from(self.item_stack.lock().await.clone()),
);
let mut data = Vec::new();

View File

@ -1,8 +1,7 @@
use pumpkin_data::item::Item;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::potion::Effect;
use pumpkin_data::tag::{self, Taggable};
use pumpkin_data::tracked_data::{TrackedData, TrackedId};
use pumpkin_data::tracked_data;
use pumpkin_inventory::build_equipment_slots;
use pumpkin_inventory::player::player_inventory::PlayerInventory;
use pumpkin_inventory::screen_handler::InventoryPlayer;
@ -318,8 +317,7 @@ impl LivingEntity {
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::LIVING_ENTITY_FLAGS,
MetaDataType::BYTE,
tracked_data::living_entity::DATA_LIVING_ENTITY_FLAGS,
b,
)],
bedrock_meta.as_ref(),
@ -389,8 +387,7 @@ impl LivingEntity {
// tell everyone entities health changed
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::HEALTH_ID,
MetaDataType::FLOAT,
tracked_data::living_entity::DATA_HEALTH_ID,
clamped,
)],
None,
@ -443,31 +440,17 @@ impl LivingEntity {
.await;
// Send absorption metadata for players (visual yellow hearts)
if let Some(tracked_id) = self.player_absorption_id() {
if self.entity.entity_type == &EntityType::PLAYER {
self.entity.send_meta_data(
&[Metadata::new(tracked_id, MetaDataType::FLOAT, new_abs)],
&[Metadata::new(
tracked_data::player::DATA_PLAYER_ABSORPTION_ID,
new_abs,
)],
None,
);
}
}
/// Returns the absorption ID for this (player) entity
/// TODO: don't hardcode these here?
fn player_absorption_id(&self) -> Option<TrackedId> {
(self.entity.entity_type == &EntityType::PLAYER).then_some(TrackedId {
v1_21: 17u8,
v1_21_2: 17u8,
v1_21_4: 17u8,
v1_21_5: 17u8,
v1_21_6: 17u8,
v1_21_7: 17u8,
v1_21_9: 17u8,
v1_21_11: 17u8,
v26_1: 17u8, // ?
v26_2: 17u8,
})
}
/// Convenience helper to mutate an attribute instance. Automatically inserts
/// a new instance populated from the registry base if needed.
pub fn update_attribute<F: FnOnce(&mut AttributeInstance)>(
@ -2052,8 +2035,7 @@ impl LivingEntity {
// Send health metadata
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::HEALTH_ID,
MetaDataType::FLOAT,
tracked_data::living_entity::DATA_HEALTH_ID,
max_health,
)],
None,

View File

@ -80,7 +80,7 @@ impl BatEntity {
// .living_entity
// .entity
// .send_meta_data(&[Metadata::new(
// TrackedData::ID_FLAGS,
// pumpkin_data::tracked_data::bat::ID_FLAGS,
// MetaDataType::BYTE,
// flags,
// )])

View File

@ -76,7 +76,7 @@ impl BlazeEntity {
// .living_entity
// .entity
// .send_meta_data(&[Metadata::new(
// TrackedData::FLAGS_ID,
// pumpkin_data::tracked_data::blaze::FLAGS_ID,
// MetaDataType::BYTE,
// new_je_flags,
// )])

View File

@ -9,10 +9,8 @@ use pumpkin_data::damage::DamageType;
use pumpkin_data::data_component_impl::EquipmentSlot;
use pumpkin_data::entity::EntityType;
use pumpkin_data::item::Item;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::particle::Particle;
use pumpkin_data::sound::{Sound, SoundCategory};
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_protocol::java::client::play::{CEntityStatus, Metadata};
use pumpkin_util::math::position::BlockPos;
@ -159,8 +157,7 @@ impl CreakingEntity {
self.can_move.store(can_move, Ordering::Relaxed);
self.mob_entity.living_entity.entity.send_meta_data(
&[Metadata::new(
TrackedData::CAN_MOVE,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::creaking::CAN_MOVE,
can_move,
)],
None,
@ -175,8 +172,7 @@ impl CreakingEntity {
self.is_active.store(active, Ordering::Relaxed);
self.mob_entity.living_entity.entity.send_meta_data(
&[Metadata::new(
TrackedData::IS_ACTIVE,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::creaking::IS_ACTIVE,
active,
)],
None,
@ -191,8 +187,7 @@ impl CreakingEntity {
self.is_tearing_down.store(true, Ordering::Relaxed);
self.mob_entity.living_entity.entity.send_meta_data(
&[Metadata::new(
TrackedData::IS_TEARING_DOWN,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::creaking::IS_TEARING_DOWN,
true,
)],
None,
@ -217,8 +212,7 @@ impl CreakingEntity {
}
self.mob_entity.living_entity.entity.send_meta_data(
&[Metadata::new(
TrackedData::HOME_POS,
MetaDataType::OPTIONAL_BLOCK_POS,
pumpkin_data::tracked_data::creaking::HOME_POS,
pos,
)],
None,

View File

@ -7,9 +7,7 @@ use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::{
entity::EntityType,
item::Item,
meta_data_type::MetaDataType,
sound::{Sound, SoundCategory},
tracked_data::TrackedData,
};
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_protocol::{codec::var_int::VarInt, java::client::play::Metadata};
@ -96,8 +94,7 @@ impl CreeperEntity {
self.fuse_speed.store(speed, Ordering::Relaxed);
self.mob_entity.living_entity.entity.send_meta_data(
&[Metadata::new(
TrackedData::FUSE_ID,
MetaDataType::INTEGER,
pumpkin_data::tracked_data::creeper::FUSE_ID,
VarInt(speed),
)],
None,
@ -172,8 +169,7 @@ impl Mob for CreeperEntity {
self.charged.store(true, Ordering::Relaxed);
self.mob_entity.living_entity.entity.send_meta_data(
&[Metadata::new(
TrackedData::CHARGED,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::creeper::CHARGED,
true,
)],
None,
@ -251,8 +247,7 @@ impl Mob for CreeperEntity {
self.ignited.store(true, Ordering::Relaxed);
entity.send_meta_data(
&[Metadata::new(
TrackedData::IS_IGNITED,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::creeper::IS_IGNITED,
true,
)],
None,

View File

@ -13,12 +13,10 @@ use pumpkin_data::{
data_component_impl::EquipmentSlot,
entity::EntityType,
item::Item,
meta_data_type::MetaDataType,
particle::Particle,
sound::{Sound, SoundCategory},
tag,
tag::Taggable,
tracked_data::TrackedData,
};
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_protocol::{
@ -316,8 +314,7 @@ impl EndermanEntity {
self.angry.store(angry, Ordering::Relaxed);
self.mob_entity.living_entity.entity.send_meta_data(
&[Metadata::new(
TrackedData::CREEPY,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::enderman::CREEPY,
angry,
)],
None,
@ -332,8 +329,7 @@ impl EndermanEntity {
self.provoked.store(provoked, Ordering::Relaxed);
self.mob_entity.living_entity.entity.send_meta_data(
&[Metadata::new(
TrackedData::STARED_AT,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::enderman::STARED_AT,
provoked,
)],
None,
@ -345,8 +341,7 @@ impl EndermanEntity {
let value = block_state.map_or(VarInt(0), |id| VarInt(id.as_u16() as i32));
self.mob_entity.living_entity.entity.send_meta_data(
&[Metadata::new(
TrackedData::CARRY_STATE,
MetaDataType::OPTIONAL_BLOCK_STATE,
pumpkin_data::tracked_data::enderman::CARRY_STATE,
value,
)],
None,

View File

@ -4,9 +4,7 @@ use tokio::sync::Mutex;
use uuid::Uuid;
use pumpkin_data::entity::EntityType;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::sound::Sound;
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_protocol::java::client::play::Metadata;
use pumpkin_util::math::vector3::Vector3;
@ -121,8 +119,7 @@ impl EvokerEntity {
let entity = &self.mob_entity.living_entity.entity;
entity.send_meta_data(
&[Metadata::new(
TrackedData::SPELL_CASTING_ID,
MetaDataType::BYTE,
pumpkin_data::tracked_data::evoker::SPELL_CASTING_ID,
spell as u8 as i8,
)],
None,

View File

@ -11,9 +11,8 @@ use crossbeam::atomic::AtomicCell;
use pumpkin_data::attributes::Attributes;
use pumpkin_data::damage::DamageType;
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::tag::{self, Taggable};
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_data::tracked_data;
use pumpkin_protocol::java::client::play::{CHeadRot, CUpdateEntityRot, Metadata};
use pumpkin_util::Difficulty;
use pumpkin_util::math::boundingbox::BoundingBox;
@ -223,11 +222,7 @@ impl MobEntity {
self.mob_flags.store(new_b, Ordering::Relaxed);
self.living_entity.entity.send_meta_data(
&[Metadata::new(
TrackedData::MOB_FLAGS_ID,
MetaDataType::BYTE,
new_b,
)],
&[Metadata::new(tracked_data::mob::DATA_MOB_FLAGS_ID, new_b)],
None,
);
}
@ -752,11 +747,7 @@ pub trait Mob: EntityBase + Send + Sync {
let is_baby = entity.age.load(std::sync::atomic::Ordering::Relaxed) < 0;
if is_baby {
entity.send_meta_data(
&[Metadata::new(
TrackedData::BABY_ID,
MetaDataType::BOOLEAN,
true,
)],
&[Metadata::new(tracked_data::ageable_mob::DATA_BABY_ID, true)],
None,
);
}

View File

@ -5,9 +5,7 @@ use crossbeam::atomic::AtomicCell;
use pumpkin_data::BlockDirection;
use pumpkin_data::damage::DamageType;
use pumpkin_data::entity::EntityType;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::sound::{Sound, SoundCategory};
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_protocol::codec::var_int::VarInt;
use pumpkin_protocol::java::client::play::{CEntityPositionSync, Metadata};
@ -120,8 +118,7 @@ impl ShulkerEntity {
let entity = &self.mob_entity.living_entity.entity;
entity.send_meta_data(
&[Metadata::new(
TrackedData::ATTACH_FACE_ID,
MetaDataType::DIRECTION,
pumpkin_data::tracked_data::shulker::ATTACH_FACE_ID,
VarInt(face as i32),
)],
None,
@ -161,8 +158,7 @@ impl ShulkerEntity {
entity.send_meta_data(
&[Metadata::new(
TrackedData::PEEK_ID,
MetaDataType::BYTE,
pumpkin_data::tracked_data::shulker::PEEK_ID,
amount,
)],
None,

View File

@ -21,9 +21,8 @@ use pumpkin_data::dimension::Dimension;
use pumpkin_data::entity::EntityStatus;
use pumpkin_data::fluid::Fluid;
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::tag::{self, Taggable};
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_data::tracked_data;
use pumpkin_data::{Block, BlockDirection};
use pumpkin_data::{
block_properties::{Facing, HorizontalFacing},
@ -195,11 +194,7 @@ pub trait EntityBase: Send + Sync + NBTStorage + std::any::Any {
let mut bedrock_meta = EntityMetadata::new();
bedrock_meta.set_flag(entity_data_key::FLAGS, entity_data_flag::BABY as u8, true);
entity.send_meta_data(
&[Metadata::new(
TrackedData::BABY_ID,
MetaDataType::BOOLEAN,
true,
)],
&[Metadata::new(tracked_data::ageable_mob::DATA_BABY_ID, true)],
Some(&bedrock_meta),
);
}
@ -1130,8 +1125,7 @@ impl Entity {
);
self.send_meta_data(
&[Metadata::new(
TrackedData::CUSTOM_NAME,
MetaDataType::OPTIONAL_TEXT_COMPONENT,
tracked_data::entity::DATA_CUSTOM_NAME,
Some(name),
)],
Some(&bedrock_meta),
@ -1159,8 +1153,7 @@ impl Entity {
);
self.send_meta_data(
&[Metadata::new(
TrackedData::CUSTOM_NAME_VISIBLE,
MetaDataType::BOOLEAN,
tracked_data::entity::DATA_CUSTOM_NAME_VISIBLE,
visible,
)],
Some(&bedrock_meta),
@ -1174,11 +1167,7 @@ impl Entity {
pub fn set_silent(&self, silent: bool) {
self.silent.store(silent, Ordering::Relaxed);
self.send_meta_data(
&[Metadata::new(
TrackedData::SILENT,
MetaDataType::BOOLEAN,
silent,
)],
&[Metadata::new(tracked_data::entity::DATA_SILENT, silent)],
None,
);
}
@ -1191,8 +1180,7 @@ impl Entity {
self.has_no_gravity.store(no_gravity, Ordering::Relaxed);
self.send_meta_data(
&[Metadata::new(
TrackedData::NO_GRAVITY,
MetaDataType::BOOLEAN,
tracked_data::entity::DATA_NO_GRAVITY,
no_gravity,
)],
None,
@ -2595,8 +2583,7 @@ impl Entity {
);
self.send_meta_data(
&[Metadata::new(
TrackedData::TICKS_FROZEN,
MetaDataType::INTEGER,
tracked_data::entity::DATA_TICKS_FROZEN,
VarInt(new_frozen_ticks),
)],
Some(&bedrock_meta),
@ -2865,8 +2852,7 @@ impl Entity {
self.send_meta_data(
&[Metadata::new(
TrackedData::SHARED_FLAGS_ID,
MetaDataType::BYTE,
tracked_data::entity::DATA_SHARED_FLAGS_ID,
new_je_flags,
)],
None,
@ -3025,11 +3011,7 @@ impl Entity {
MetadataValue::Float(dimension.height),
);
self.send_meta_data(
&[Metadata::new(
TrackedData::POSE,
MetaDataType::ENTITY_POSE,
VarInt(pose),
)],
&[Metadata::new(tracked_data::entity::DATA_POSE, VarInt(pose))],
Some(&bedrock_meta),
);
}

View File

@ -7,10 +7,8 @@ use pumpkin_data::damage::DamageType;
use pumpkin_data::entity::EntityType;
use pumpkin_data::item::Item;
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::sound::{Sound, SoundCategory};
use pumpkin_data::tag::{self, Taggable};
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_protocol::codec::var_int::VarInt;
use pumpkin_protocol::java::client::play::Metadata;
@ -175,8 +173,7 @@ impl ArmadilloEntity {
let entity = self.get_entity();
entity.send_meta_data(
&[Metadata::new(
TrackedData::ARMADILLO_STATE,
MetaDataType::ARMADILLO_STATE,
pumpkin_data::tracked_data::armadillo::ARMADILLO_STATE,
VarInt(state.id()),
)],
None,
@ -431,8 +428,7 @@ impl Mob for ArmadilloEntity {
if is_baby {
entity.send_meta_data(
&[Metadata::new(
TrackedData::BABY_ID,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::armadillo::BABY_ID,
true,
)],
None,
@ -440,8 +436,7 @@ impl Mob for ArmadilloEntity {
}
entity.send_meta_data(
&[Metadata::new(
TrackedData::ARMADILLO_STATE,
MetaDataType::ARMADILLO_STATE,
pumpkin_data::tracked_data::armadillo::ARMADILLO_STATE,
VarInt(self.get_state().id()),
)],
None,

View File

@ -7,9 +7,7 @@ use crossbeam::atomic::AtomicCell;
use pumpkin_data::entity::{EntityStatus, EntityType};
use pumpkin_data::item::Item;
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::tag::{self, Taggable};
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_protocol::bedrock::server::actor_event::ActorEventType;
use pumpkin_protocol::codec::var_int::VarInt;
@ -196,8 +194,7 @@ impl CatEntity {
let entity = self.get_entity();
entity.send_meta_data(
&[Metadata::new(
TrackedData::CAT_COLLAR_COLOR,
MetaDataType::INT,
pumpkin_data::tracked_data::cat::CAT_COLLAR_COLOR,
VarInt(color as i32),
)],
None,
@ -209,8 +206,7 @@ impl CatEntity {
let entity = self.get_entity();
entity.send_meta_data(
&[Metadata::new(
TrackedData::TAMEABLE_FLAGS,
MetaDataType::BYTE,
pumpkin_data::tracked_data::cat::TAMEABLE_FLAGS,
self.get_tame_flags(),
)],
None,
@ -223,16 +219,14 @@ impl CatEntity {
let entity = self.get_entity();
entity.send_meta_data(
&[Metadata::new(
TrackedData::TAMEABLE_FLAGS,
MetaDataType::BYTE,
pumpkin_data::tracked_data::cat::TAMEABLE_FLAGS,
self.get_tame_flags(),
)],
None,
);
entity.send_meta_data(
&[Metadata::new(
TrackedData::OWNER_UUID,
MetaDataType::OPTIONAL_UUID,
pumpkin_data::tracked_data::cat::OWNER_UUID,
owner,
)],
None,
@ -244,8 +238,7 @@ impl CatEntity {
let entity = self.get_entity();
entity.send_meta_data(
&[Metadata::new(
TrackedData::IS_LYING,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::cat::IS_LYING,
lying,
)],
None,
@ -257,8 +250,7 @@ impl CatEntity {
let entity = self.get_entity();
entity.send_meta_data(
&[Metadata::new(
TrackedData::RELAX_STATE_ONE,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::cat::RELAX_STATE_ONE,
relax,
)],
None,
@ -394,8 +386,7 @@ impl Mob for CatEntity {
if is_baby {
entity.send_meta_data(
&[Metadata::new(
TrackedData::BABY_ID,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::cat::BABY_ID,
true,
)],
None,
@ -403,56 +394,49 @@ impl Mob for CatEntity {
}
entity.send_meta_data(
&[Metadata::new(
TrackedData::TAMEABLE_FLAGS,
MetaDataType::BYTE,
pumpkin_data::tracked_data::cat::TAMEABLE_FLAGS,
self.get_tame_flags(),
)],
None,
);
entity.send_meta_data(
&[Metadata::new(
TrackedData::OWNER_UUID,
MetaDataType::OPTIONAL_UUID,
pumpkin_data::tracked_data::cat::OWNER_UUID,
self.owner.load(),
)],
None,
);
entity.send_meta_data(
&[Metadata::new(
TrackedData::CAT_VARIANT,
MetaDataType::CAT_VARIANT,
pumpkin_data::tracked_data::cat::CAT_VARIANT,
VarInt(self.variant.load(Ordering::Relaxed) as i32),
)],
None,
);
entity.send_meta_data(
&[Metadata::new(
TrackedData::IS_LYING,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::cat::IS_LYING,
self.is_lying.load(Ordering::Relaxed),
)],
None,
);
entity.send_meta_data(
&[Metadata::new(
TrackedData::RELAX_STATE_ONE,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::cat::RELAX_STATE_ONE,
self.relax_state_one.load(Ordering::Relaxed),
)],
None,
);
entity.send_meta_data(
&[Metadata::new(
TrackedData::CAT_COLLAR_COLOR,
MetaDataType::INT,
pumpkin_data::tracked_data::cat::CAT_COLLAR_COLOR,
VarInt(self.collar_color.load(Ordering::Relaxed) as i32),
)],
None,
);
entity.send_meta_data(
&[Metadata::new(
TrackedData::SOUND_VARIANT,
MetaDataType::CAT_SOUND_VARIANT,
pumpkin_data::tracked_data::cat::SOUND_VARIANT,
VarInt(self.sound_variant.load(Ordering::Relaxed) as i32),
)],
None,

View File

@ -4,9 +4,7 @@ use std::sync::{
};
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::sound::Sound;
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_data::{entity::EntityType, item::Item};
use pumpkin_protocol::codec::var_int::VarInt;
use rand::RngExt;
@ -159,8 +157,7 @@ impl Mob for ChickenEntity {
if is_baby {
entity.send_meta_data(
&[pumpkin_protocol::java::client::play::Metadata::new(
TrackedData::BABY_ID,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::chicken::BABY_ID,
true,
)],
None,
@ -168,8 +165,7 @@ impl Mob for ChickenEntity {
}
entity.send_meta_data(
&[pumpkin_protocol::java::client::play::Metadata::new(
TrackedData::VARIANT,
MetaDataType::CHICKEN_VARIANT,
pumpkin_data::tracked_data::chicken::VARIANT,
VarInt(self.variant.load(Ordering::Relaxed) as i32),
)],
None,

View File

@ -6,10 +6,8 @@ use std::sync::{
use pumpkin_data::entity::EntityType;
use pumpkin_data::item::Item;
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::sound::{Sound, SoundCategory};
use pumpkin_data::tag::{self, Taggable};
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_protocol::codec::var_int::VarInt;
use pumpkin_protocol::java::client::play::Metadata;
@ -152,8 +150,7 @@ impl CopperGolemEntity {
let entity = self.get_entity();
entity.send_meta_data(
&[Metadata::new(
TrackedData::WEATHER_STATE,
MetaDataType::WEATHERING_COPPER_STATE,
pumpkin_data::tracked_data::copper_golem::WEATHER_STATE,
VarInt(state.id()),
)],
None,
@ -170,8 +167,7 @@ impl CopperGolemEntity {
let entity = self.get_entity();
entity.send_meta_data(
&[Metadata::new(
TrackedData::COPPER_GOLEM_STATE,
MetaDataType::COPPER_GOLEM_STATE,
pumpkin_data::tracked_data::copper_golem::COPPER_GOLEM_STATE,
VarInt(state.id()),
)],
None,
@ -256,13 +252,11 @@ impl Mob for CopperGolemEntity {
entity.send_meta_data(
&[
Metadata::new(
TrackedData::WEATHER_STATE,
MetaDataType::WEATHERING_COPPER_STATE,
pumpkin_data::tracked_data::copper_golem::WEATHER_STATE,
VarInt(self.get_weather_state().id()),
),
Metadata::new(
TrackedData::COPPER_GOLEM_STATE,
MetaDataType::COPPER_GOLEM_STATE,
pumpkin_data::tracked_data::copper_golem::COPPER_GOLEM_STATE,
VarInt(self.get_state().id()),
),
],

View File

@ -6,10 +6,8 @@ use std::sync::{
use pumpkin_data::entity::EntityType;
use pumpkin_data::item::Item;
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::sound::Sound;
use pumpkin_data::tag::{self, Taggable};
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_protocol::codec::var_int::VarInt;
use pumpkin_protocol::java::client::play::Metadata;
@ -126,8 +124,7 @@ impl FoxEntity {
let entity = self.get_entity();
entity.send_meta_data(
&[Metadata::new(
TrackedData::TYPE_ID,
MetaDataType::INT,
pumpkin_data::tracked_data::fox::TYPE_ID,
VarInt(variant.id()),
)],
None,
@ -149,8 +146,7 @@ impl FoxEntity {
let entity = self.get_entity();
entity.send_meta_data(
&[Metadata::new(
TrackedData::FLAGS_ID,
MetaDataType::BYTE,
pumpkin_data::tracked_data::fox::FLAGS_ID,
new_flags,
)],
None,
@ -299,8 +295,7 @@ impl Mob for FoxEntity {
if is_baby {
entity.send_meta_data(
&[Metadata::new(
TrackedData::BABY_ID,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::fox::BABY_ID,
true,
)],
None,
@ -308,16 +303,14 @@ impl Mob for FoxEntity {
}
entity.send_meta_data(
&[Metadata::new(
TrackedData::TYPE_ID,
MetaDataType::INT,
pumpkin_data::tracked_data::fox::TYPE_ID,
VarInt(self.get_variant().id()),
)],
None,
);
entity.send_meta_data(
&[Metadata::new(
TrackedData::FLAGS_ID,
MetaDataType::BYTE,
pumpkin_data::tracked_data::fox::FLAGS_ID,
self.flags.load(Ordering::Relaxed),
)],
None,

View File

@ -6,10 +6,8 @@ use std::sync::{
use pumpkin_data::entity::EntityType;
use pumpkin_data::item::Item;
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::sound::Sound;
use pumpkin_data::tag::{self, Taggable};
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_protocol::codec::var_int::VarInt;
use pumpkin_protocol::java::client::play::Metadata;
@ -126,8 +124,7 @@ impl FrogEntity {
let entity = self.get_entity();
entity.send_meta_data(
&[Metadata::new(
TrackedData::VARIANT,
MetaDataType::FROG_VARIANT,
pumpkin_data::tracked_data::frog::VARIANT,
VarInt(variant.id()),
)],
None,
@ -192,8 +189,7 @@ impl Mob for FrogEntity {
if is_baby {
entity.send_meta_data(
&[Metadata::new(
TrackedData::BABY_ID,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::frog::BABY_ID,
true,
)],
None,
@ -201,8 +197,7 @@ impl Mob for FrogEntity {
}
entity.send_meta_data(
&[Metadata::new(
TrackedData::VARIANT,
MetaDataType::FROG_VARIANT,
pumpkin_data::tracked_data::frog::VARIANT,
VarInt(self.get_variant().id()),
)],
None,

View File

@ -6,10 +6,8 @@ use std::sync::{
use pumpkin_data::entity::EntityType;
use pumpkin_data::item::Item;
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::sound::Sound;
use pumpkin_data::tag::{self, Taggable};
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_protocol::java::client::play::Metadata;
@ -93,8 +91,7 @@ impl HappyGhastEntity {
let entity = self.get_entity();
entity.send_meta_data(
&[Metadata::new(
TrackedData::IS_LEASH_HOLDER,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::happy_ghast::IS_LEASH_HOLDER,
is_leash_holder,
)],
None,
@ -107,8 +104,7 @@ impl HappyGhastEntity {
let entity = self.get_entity();
entity.send_meta_data(
&[Metadata::new(
TrackedData::STAYS_STILL,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::happy_ghast::STAYS_STILL,
stays_still,
)],
None,
@ -205,8 +201,7 @@ impl Mob for HappyGhastEntity {
if is_baby {
entity.send_meta_data(
&[Metadata::new(
TrackedData::BABY_ID,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::happy_ghast::BABY_ID,
true,
)],
None,
@ -215,13 +210,11 @@ impl Mob for HappyGhastEntity {
entity.send_meta_data(
&[
Metadata::new(
TrackedData::IS_LEASH_HOLDER,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::happy_ghast::IS_LEASH_HOLDER,
self.is_leash_holder.load(Ordering::Relaxed),
),
Metadata::new(
TrackedData::STAYS_STILL,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::happy_ghast::STAYS_STILL,
self.stays_still.load(Ordering::Relaxed),
),
],

View File

@ -6,9 +6,7 @@ use std::sync::{
use pumpkin_data::entity::EntityType;
use pumpkin_data::item::Item;
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::sound::{Sound, SoundCategory};
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_protocol::java::client::play::Metadata;
use pumpkin_util::GameMode;
@ -94,8 +92,7 @@ impl IronGolemEntity {
let flag: u8 = u8::from(value);
entity.send_meta_data(
&[Metadata::new(
TrackedData::FLAGS_ID,
MetaDataType::BYTE,
pumpkin_data::tracked_data::iron_golem::FLAGS_ID,
flag,
)],
None,
@ -146,8 +143,7 @@ impl Mob for IronGolemEntity {
let flag: u8 = u8::from(self.is_player_created());
entity.send_meta_data(
&[Metadata::new(
TrackedData::FLAGS_ID,
MetaDataType::BYTE,
pumpkin_data::tracked_data::iron_golem::FLAGS_ID,
flag,
)],
None,

View File

@ -10,11 +10,9 @@ use pumpkin_data::{
effect::StatusEffect,
entity::EntityStatus,
item_stack::ItemStack,
meta_data_type::MetaDataType,
particle::Particle,
potion::Effect,
sound::{Sound, SoundCategory},
tracked_data::TrackedData,
};
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_protocol::java::client::play::Metadata;
@ -61,8 +59,7 @@ impl NautilusEntity {
self.is_dashing.store(dashing, Ordering::Relaxed);
self.mob_entity.living_entity.entity.send_meta_data(
&[Metadata::new(
TrackedData::DASH,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::nautilus::DASH,
dashing,
)],
None,
@ -271,8 +268,7 @@ impl Mob for NautilusEntity {
Box::pin(async move {
self.mob_entity.living_entity.entity.send_meta_data(
&[Metadata::new(
TrackedData::DASH,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::nautilus::DASH,
self.is_dashing(),
)],
None,

View File

@ -6,9 +6,7 @@ use std::sync::{
use pumpkin_data::entity::{EntityStatus, EntityType};
use pumpkin_data::item::Item;
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::tag::{self, Taggable};
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_protocol::bedrock::server::actor_event::ActorEventType;
use pumpkin_protocol::java::client::play::Metadata;
@ -113,8 +111,7 @@ impl OcelotEntity {
let entity = self.get_entity();
entity.send_meta_data(
&[Metadata::new(
TrackedData::TRUSTING,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::ocelot::TRUSTING,
trusting,
)],
None,
@ -163,8 +160,7 @@ impl Mob for OcelotEntity {
if is_baby {
entity.send_meta_data(
&[Metadata::new(
TrackedData::BABY_ID,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::ocelot::BABY_ID,
true,
)],
None,
@ -172,8 +168,7 @@ impl Mob for OcelotEntity {
}
entity.send_meta_data(
&[Metadata::new(
TrackedData::TRUSTING,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::ocelot::TRUSTING,
self.is_trusting.load(Ordering::Relaxed),
)],
None,

View File

@ -3,9 +3,7 @@ use std::sync::{
atomic::{AtomicU8, Ordering},
};
use pumpkin_data::{
entity::EntityType, item::Item, meta_data_type::MetaDataType, tracked_data::TrackedData,
};
use pumpkin_data::{entity::EntityType, item::Item};
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_protocol::java::client::play::Metadata;
@ -88,8 +86,7 @@ impl SheepEntity {
self.color_and_sheared.store(byte, Ordering::Relaxed);
self.mob_entity.living_entity.entity.send_meta_data(
&[Metadata::new(
TrackedData::WOOL_ID,
MetaDataType::BYTE,
pumpkin_data::tracked_data::sheep::WOOL_ID,
byte as i8,
)],
None,

View File

@ -6,10 +6,8 @@ use std::sync::{
use pumpkin_data::entity::{EntityStatus, EntityType};
use pumpkin_data::item::Item;
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::sound::{Sound, SoundCategory};
use pumpkin_data::tag::{self, Taggable};
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_protocol::codec::var_int::VarInt;
use pumpkin_protocol::java::client::play::Metadata;
@ -126,8 +124,7 @@ impl SnifferEntity {
let entity = self.get_entity();
entity.send_meta_data(
&[Metadata::new(
TrackedData::STATE,
MetaDataType::SNIFFER_STATE,
pumpkin_data::tracked_data::sniffer::STATE,
VarInt(state.id()),
)],
None,
@ -195,8 +192,7 @@ impl SnifferEntity {
self.drop_seed_at_tick.store(drop_tick, Ordering::Relaxed);
entity.send_meta_data(
&[Metadata::new(
TrackedData::DROP_SEED_AT_TICK,
MetaDataType::INT,
pumpkin_data::tracked_data::sniffer::DROP_SEED_AT_TICK,
VarInt(drop_tick),
)],
None,
@ -397,8 +393,7 @@ impl Mob for SnifferEntity {
if is_baby {
entity.send_meta_data(
&[Metadata::new(
TrackedData::BABY_ID,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::sniffer::BABY_ID,
true,
)],
None,
@ -407,13 +402,11 @@ impl Mob for SnifferEntity {
entity.send_meta_data(
&[
Metadata::new(
TrackedData::STATE,
MetaDataType::SNIFFER_STATE,
pumpkin_data::tracked_data::sniffer::STATE,
VarInt(self.get_state().id()),
),
Metadata::new(
TrackedData::DROP_SEED_AT_TICK,
MetaDataType::INT,
pumpkin_data::tracked_data::sniffer::DROP_SEED_AT_TICK,
VarInt(self.drop_seed_at_tick.load(Ordering::Relaxed)),
),
],

View File

@ -10,9 +10,7 @@ use pumpkin_data::block_properties::{
};
use pumpkin_data::entity::{EntityPose, EntityType};
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::tag::Taggable;
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_inventory::merchant::merchant_screen_handler::MerchantScreenHandler;
use pumpkin_inventory::screen_handler::{
BoxFuture, InventoryPlayer, ScreenHandlerFactory, SharedScreenHandler,
@ -166,8 +164,7 @@ impl VillagerEntity {
// Send initial metadata
mob_arc.get_entity().send_meta_data(
&[Metadata::new(
TrackedData::VILLAGER_DATA,
MetaDataType::VILLAGER_DATA,
pumpkin_data::tracked_data::villager::VILLAGER_DATA,
villager_data,
)],
None,
@ -224,8 +221,7 @@ impl VillagerEntity {
};
self.get_entity().send_meta_data(
&[Metadata::new(
TrackedData::VILLAGER_DATA,
MetaDataType::VILLAGER_DATA,
pumpkin_data::tracked_data::villager::VILLAGER_DATA,
data,
)],
None,
@ -816,8 +812,7 @@ impl Mob for VillagerEntity {
self.get_entity().set_pose(EntityPose::Standing);
self.get_entity().send_meta_data(
&[Metadata::new(
TrackedData::SLEEPING_POS_ID,
MetaDataType::OPTIONAL_BLOCK_POS,
pumpkin_data::tracked_data::villager::SLEEPING_POS_ID,
None::<BlockPos>,
)],
None,
@ -919,8 +914,7 @@ impl Mob for VillagerEntity {
self.get_entity().set_pose(EntityPose::Sleeping);
self.get_entity().send_meta_data(
&[Metadata::new(
TrackedData::SLEEPING_POS_ID,
MetaDataType::OPTIONAL_BLOCK_POS,
pumpkin_data::tracked_data::villager::SLEEPING_POS_ID,
Some(home_pos),
)],
None,
@ -942,8 +936,7 @@ impl Mob for VillagerEntity {
self.get_entity().set_pose(EntityPose::Standing);
self.get_entity().send_meta_data(
&[Metadata::new(
TrackedData::SLEEPING_POS_ID,
MetaDataType::OPTIONAL_BLOCK_POS,
pumpkin_data::tracked_data::villager::SLEEPING_POS_ID,
None::<BlockPos>,
)],
None,

View File

@ -7,9 +7,7 @@ use crossbeam::atomic::AtomicCell;
use pumpkin_data::entity::EntityType;
use pumpkin_data::item::Item;
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::tag::{self, Taggable};
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_protocol::codec::var_int::VarInt;
use pumpkin_protocol::java::client::play::Metadata;
@ -266,8 +264,7 @@ impl Mob for WolfEntity {
if is_baby {
entity.send_meta_data(
&[Metadata::new(
TrackedData::BABY_ID,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::wolf::BABY_ID,
true,
)],
None,
@ -275,32 +272,28 @@ impl Mob for WolfEntity {
}
entity.send_meta_data(
&[Metadata::new(
TrackedData::TAMEABLE_FLAGS,
MetaDataType::BYTE,
pumpkin_data::tracked_data::wolf::TAMEABLE_FLAGS,
self.get_tame_flags(),
)],
None,
);
entity.send_meta_data(
&[Metadata::new(
TrackedData::COLLAR_COLOR,
MetaDataType::INT,
pumpkin_data::tracked_data::wolf::COLLAR_COLOR,
VarInt(self.collar_color.load(Ordering::Relaxed) as i32),
)],
None,
);
entity.send_meta_data(
&[Metadata::new(
TrackedData::WOLF_VARIANT_ID,
MetaDataType::WOLF_VARIANT,
pumpkin_data::tracked_data::wolf::WOLF_VARIANT_ID,
VarInt(self.variant.load(Ordering::Relaxed) as i32),
)],
None,
);
entity.send_meta_data(
&[Metadata::new(
TrackedData::OWNER_UUID,
MetaDataType::OPTIONAL_UUID,
pumpkin_data::tracked_data::wolf::OWNER_UUID,
self.owner.load(),
)],
None,

View File

@ -17,8 +17,6 @@ use arc_swap::ArcSwap;
use crossbeam::atomic::AtomicCell;
use crossbeam::channel::Receiver;
use pumpkin_data::dimension::Dimension;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_inventory::player::ender_chest_inventory::EnderChestInventory;
use pumpkin_protocol::bedrock::client::play_status::CPlayStatus;
use pumpkin_protocol::bedrock::client::set_time::CSetTime;
@ -2026,8 +2024,7 @@ impl Player {
.set_pos(bed_head_pos.to_f64().add_raw(0.5, 0.6875, 0.5));
self.get_entity().send_meta_data(
&[Metadata::new(
TrackedData::SLEEPING_POS_ID,
MetaDataType::OPTIONAL_BLOCK_POS,
pumpkin_data::tracked_data::player::SLEEPING_POS_ID,
Some(bed_head_pos),
)],
None,
@ -2159,8 +2156,7 @@ impl Player {
self.living_entity.entity.set_pos(self.position());
self.living_entity.entity.send_meta_data(
&[Metadata::new(
TrackedData::SLEEPING_POS_ID,
MetaDataType::OPTIONAL_BLOCK_POS,
pumpkin_data::tracked_data::player::SLEEPING_POS_ID,
None::<BlockPos>,
)],
None,
@ -4075,24 +4071,20 @@ impl Player {
&[
// v26.x
Metadata::new(
TrackedData::PLAYER_MODE_CUSTOMISATION,
MetaDataType::BYTE,
pumpkin_data::tracked_data::player::PLAYER_MODE_CUSTOMISATION,
config.skin_parts,
),
Metadata::new(
TrackedData::PLAYER_MAIN_HAND,
MetaDataType::HUMANOID_ARM,
pumpkin_data::tracked_data::player::PLAYER_MAIN_HAND,
config.main_hand as u8,
),
// v1.21.x
Metadata::new(
TrackedData::PLAYER_MODE_CUSTOMIZATION_ID,
MetaDataType::BYTE,
pumpkin_data::tracked_data::player::PLAYER_MODE_CUSTOMIZATION_ID,
config.skin_parts,
),
Metadata::new(
TrackedData::MAIN_ARM_ID,
MetaDataType::BYTE,
pumpkin_data::tracked_data::player::MAIN_ARM_ID,
config.main_hand as u8,
),
],

View File

@ -12,8 +12,6 @@ use crate::{
use pumpkin_data::entity::{EntityStatus, EntityType};
use pumpkin_data::item::Item;
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_protocol::bedrock::server::actor_event::ActorEventType;
use pumpkin_protocol::codec::item_stack_seralizer::ItemStackSerializer;
use pumpkin_protocol::java::client::play::Metadata;
@ -76,8 +74,7 @@ impl EntityBase for EggEntity {
// Sync the item stack so the client renders the correct color/variant
entity.send_meta_data(
&[Metadata::new(
TrackedData::ITEM_STACK,
MetaDataType::ITEM_STACK,
pumpkin_data::tracked_data::egg::ITEM_STACK,
&ItemStackSerializer::from(stack.clone()),
)],
None,

View File

@ -3,12 +3,12 @@ use crate::entity::living::LivingEntity;
use crate::entity::player::Player;
use crate::{entity::EntityBaseFuture, server::Server};
use core::f64;
use pumpkin_data::damage::DamageType;
use pumpkin_data::entity::EntityType;
use pumpkin_data::item::Item;
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::sound::Sound;
use pumpkin_data::world::WorldEvent;
use pumpkin_data::{damage::DamageType, meta_data_type::MetaDataType, tracked_data::TrackedData};
use pumpkin_protocol::{
codec::item_stack_seralizer::ItemStackSerializer, java::client::play::Metadata,
};
@ -174,8 +174,7 @@ impl EntityBase for EyeOfEnder {
Box::pin(async {
self.entity.send_meta_data(
&[Metadata::new(
TrackedData::ITEM,
MetaDataType::ITEM_STACK,
pumpkin_data::tracked_data::eye_of_ender::ITEM_STACK,
&ItemStackSerializer::from(self.item_stack.lock().await.clone()),
)],
None,

View File

@ -4,8 +4,6 @@ use tokio::sync::RwLock;
use pumpkin_data::item::Item;
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_protocol::codec::item_stack_seralizer::ItemStackSerializer;
use pumpkin_protocol::java::client::play::Metadata;
@ -118,8 +116,7 @@ impl FireballEntity {
self.get_entity().send_meta_data(
&[Metadata::new(
TrackedData::ITEM_STACK,
MetaDataType::ITEM_STACK,
pumpkin_data::tracked_data::fireball::ITEM_STACK,
&ItemStackSerializer::from(new_item),
)],
None,
@ -201,8 +198,7 @@ impl EntityBase for FireballEntity {
entity.send_meta_data(
&[Metadata::new(
TrackedData::ITEM_STACK,
MetaDataType::ITEM_STACK,
pumpkin_data::tracked_data::fireball::ITEM_STACK,
&ItemStackSerializer::from(stack.clone()),
)],
None,

View File

@ -3,7 +3,7 @@ use crate::{
server::Server,
world::World,
};
use pumpkin_data::{entity::EntityStatus, meta_data_type::MetaDataType, tracked_data::TrackedData};
use pumpkin_data::entity::EntityStatus;
use pumpkin_protocol::bedrock::server::actor_event::ActorEventType;
use pumpkin_protocol::{codec::optional_int::OptionalInt, java::client::play::Metadata};
use pumpkin_util::{
@ -71,8 +71,7 @@ impl FireworkRocketEntity {
// Set shooter metadata
rocket.entity.entity.send_meta_data(
&[Metadata::new(
TrackedData::ATTACHED_TO_TARGET,
MetaDataType::OPTIONAL_INT,
pumpkin_data::tracked_data::firework_rocket::ATTACHED_TO_TARGET,
OptionalInt(Some(shooter.entity_id)),
)],
None,

View File

@ -9,9 +9,7 @@ use crate::{
server::Server,
};
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::sound::{Sound, SoundCategory};
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_protocol::java::client::play::Metadata;
use pumpkin_util::math::boundingbox::BoundingBox;
use pumpkin_util::math::vector3::Vector3;
@ -217,8 +215,7 @@ impl FishingBobberEntity {
.store(cand.get_entity().entity_id, Ordering::Relaxed);
entity.send_meta_data(
&[Metadata::new(
TrackedData::HOOKED_ENTITY,
MetaDataType::INT,
pumpkin_data::tracked_data::fishing_bobber::HOOKED_ENTITY,
cand.get_entity().entity_id + 1,
)],
None,

View File

@ -72,8 +72,7 @@ impl EntityBase for LingeringPotionEntity {
// Sync the item stack so the client renders the correct potion type
entity.send_meta_data(
&[pumpkin_protocol::java::client::play::Metadata::new(
pumpkin_data::tracked_data::TrackedData::ITEM_STACK,
pumpkin_data::meta_data_type::MetaDataType::ITEM_STACK,
pumpkin_data::tracked_data::lingering_potion::ITEM_STACK,
&pumpkin_protocol::codec::item_stack_seralizer::ItemStackSerializer::from(
stack.clone(),
),

View File

@ -109,8 +109,7 @@ impl EntityBase for SplashPotionEntity {
// Sync the item stack
entity.send_meta_data(
&[pumpkin_protocol::java::client::play::Metadata::new(
pumpkin_data::tracked_data::TrackedData::ITEM_STACK,
pumpkin_data::meta_data_type::MetaDataType::ITEM_STACK,
pumpkin_data::tracked_data::splash_potion::ITEM_STACK,
&pumpkin_protocol::codec::item_stack_seralizer::ItemStackSerializer::from(
stack.clone(),
),

View File

@ -1,7 +1,7 @@
use super::{Entity, EntityBase, NBTStorage, living::LivingEntity};
use crate::{entity::EntityBaseFuture, server::Server};
use core::f32;
use pumpkin_data::{Block, meta_data_type::MetaDataType, tracked_data::TrackedData};
use pumpkin_data::Block;
use pumpkin_protocol::{codec::var_int::VarInt, java::client::play::Metadata};
use pumpkin_util::math::vector3::Vector3;
use std::{
@ -88,13 +88,11 @@ impl EntityBase for TNTEntity {
self.entity.send_meta_data(
&[
Metadata::new(
TrackedData::FUSE_ID,
MetaDataType::INTEGER,
pumpkin_data::tracked_data::tnt::FUSE_ID,
VarInt(self.fuse.load(Relaxed) as i32),
),
Metadata::new(
TrackedData::BLOCK_STATE_ID,
MetaDataType::BLOCK_STATE,
pumpkin_data::tracked_data::tnt::BLOCK_STATE_ID,
VarInt(i32::from(Block::TNT.default_state.id.as_u16())),
),
],

View File

@ -9,8 +9,6 @@ use crate::server::Server;
use pumpkin_data::damage::DamageType;
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_protocol::java::client::play::Metadata;
@ -41,8 +39,8 @@ impl BoatEntity {
self.vehicle.entity.send_meta_data(
&[
Metadata::new(TrackedData::ID_PADDLE_LEFT, MetaDataType::BOOLEAN, left),
Metadata::new(TrackedData::ID_PADDLE_RIGHT, MetaDataType::BOOLEAN, right),
Metadata::new(pumpkin_data::tracked_data::boat::ID_PADDLE_LEFT, left),
Metadata::new(pumpkin_data::tracked_data::boat::ID_PADDLE_RIGHT, right),
],
None,
);

View File

@ -2,10 +2,8 @@ use std::sync::atomic::{AtomicI32, Ordering};
use crossbeam::atomic::AtomicCell;
use pumpkin_data::item_stack::ItemStack;
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::particle::Particle;
use pumpkin_data::tag::{self, Taggable};
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_nbt::compound::NbtCompound;
use pumpkin_protocol::java::client::play::Metadata;
use pumpkin_util::math::vector3::Vector3;
@ -32,8 +30,7 @@ impl FurnaceMinecart {
fn set_fueled(entity: &Entity, fueled: bool) {
entity.send_meta_data(
&[Metadata::new(
TrackedData::ID_FUEL,
MetaDataType::BOOLEAN,
pumpkin_data::tracked_data::furnace_minecart::ID_FUEL,
fueled,
)],
None,

View File

@ -6,8 +6,6 @@ use pumpkin_protocol::java::client::play::Metadata;
use crate::entity::EntityBase;
use crate::world::loot::{LootContextParameters, LootTableExt};
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_protocol::codec::var_int::VarInt;
use pumpkin_util::GameMode;
@ -142,41 +140,21 @@ impl VehicleEntity {
self.entity.send_meta_data(
&[
Metadata::new(
TrackedData::DAMAGE_WOBBLE_TICKS,
MetaDataType::INTEGER,
pumpkin_data::tracked_data::boat::ID_HURT,
VarInt(self.get_hurt_time()),
),
Metadata::new(
TrackedData::DAMAGE_WOBBLE_SIDE,
MetaDataType::INTEGER,
VarInt(self.get_hurt_dir()),
),
Metadata::new(
TrackedData::ID_HURT,
MetaDataType::INT,
VarInt(self.get_hurt_time()),
),
Metadata::new(
TrackedData::ID_HURTDIR,
MetaDataType::INT,
pumpkin_data::tracked_data::boat::ID_HURTDIR,
VarInt(self.get_hurt_dir()),
),
],
None,
);
self.entity.send_meta_data(
&[
Metadata::new(
TrackedData::DAMAGE_WOBBLE_STRENGTH,
MetaDataType::FLOAT,
self.get_damage(),
),
Metadata::new(
TrackedData::ID_DAMAGE,
MetaDataType::FLOAT,
self.get_damage(),
),
],
&[Metadata::new(
pumpkin_data::tracked_data::boat::ID_DAMAGE,
self.get_damage(),
)],
None,
);
}
@ -273,8 +251,6 @@ impl VehicleEntity {
#[cfg(test)]
mod tests {
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_protocol::codec::var_int::VarInt;
use pumpkin_protocol::java::client::play::Metadata;
use pumpkin_util::version::JavaMinecraftVersion;
@ -282,18 +258,8 @@ mod tests {
fn wobble_integer_metadata(version: JavaMinecraftVersion) -> Vec<u8> {
let mut bytes = Vec::new();
for metadata in [
Metadata::new(
TrackedData::DAMAGE_WOBBLE_TICKS,
MetaDataType::INTEGER,
VarInt(10),
),
Metadata::new(
TrackedData::DAMAGE_WOBBLE_SIDE,
MetaDataType::INTEGER,
VarInt(-1),
),
Metadata::new(TrackedData::ID_HURT, MetaDataType::INT, VarInt(10)),
Metadata::new(TrackedData::ID_HURTDIR, MetaDataType::INT, VarInt(-1)),
Metadata::new(pumpkin_data::tracked_data::boat::ID_HURT, VarInt(10)),
Metadata::new(pumpkin_data::tracked_data::boat::ID_HURTDIR, VarInt(-1)),
] {
metadata.write(&mut bytes, &version).unwrap();
}

View File

@ -62,8 +62,6 @@ use pumpkin_data::dimension::Dimension;
use pumpkin_data::entity::MobCategory;
use pumpkin_data::fluid::{Falling, FluidProperties, FluidState};
use pumpkin_data::game_rules::{GameRule, GameRuleValue};
use pumpkin_data::meta_data_type::MetaDataType;
use pumpkin_data::tracked_data::TrackedData;
use pumpkin_data::{
Block, BlockStateId,
entity::{EntityStatus, EntityType},
@ -887,13 +885,11 @@ impl World {
let mut buf = Vec::new();
for meta in [
Metadata::new(
TrackedData::PLAYER_MODE_CUSTOMISATION,
MetaDataType::BYTE,
pumpkin_data::tracked_data::player::PLAYER_MODE_CUSTOMISATION,
skin_parts,
),
Metadata::new(
TrackedData::PLAYER_MODE_CUSTOMIZATION_ID,
MetaDataType::BYTE,
pumpkin_data::tracked_data::player::PLAYER_MODE_CUSTOMIZATION_ID,
skin_parts,
),
] {
@ -3385,16 +3381,14 @@ impl World {
let mut buf = Vec::new();
{
let meta = Metadata::new(
TrackedData::PLAYER_MODE_CUSTOMISATION,
MetaDataType::BYTE,
pumpkin_data::tracked_data::player::PLAYER_MODE_CUSTOMISATION,
config.skin_parts,
);
let _ = meta.write(&mut buf, &client.version.load());
};
{
let meta = Metadata::new(
TrackedData::PLAYER_MODE_CUSTOMIZATION_ID,
MetaDataType::BYTE,
pumpkin_data::tracked_data::player::PLAYER_MODE_CUSTOMIZATION_ID,
config.skin_parts,
);
let _ = meta.write(&mut buf, &client.version.load());

View File

@ -239,6 +239,7 @@ pub fn write_generated_file(new_code: &str, out_file: &str) {
}
/// Error returned when `rustfmt` is unavailable or fails to format code.
#[derive(Debug)]
pub struct RustFmtError;
/// Formats a Rust source string by piping it through `rustfmt`.

View File

@ -5,6 +5,25 @@ use quote::{format_ident, quote};
use crate::version::JavaMinecraftVersion;
fn canonicalize_type_name(name: &str) -> String {
match name {
"integer" | "int" => "int".to_string(),
"entity_pose" | "pose" => "pose".to_string(),
"facing" | "direction" => "direction".to_string(),
"text_component" | "component" => "component".to_string(),
"optional_text_component" | "optional_component" => "optional_component".to_string(),
"optional_int" | "optional_unsigned_int" => "optional_unsigned_int".to_string(),
"vector_3f" | "vector3" => "vector3".to_string(),
"quaternion_f" | "quaternion" => "quaternion".to_string(),
"rotation" | "rotations" => "rotations".to_string(),
"particle_list" | "particles" => "particles".to_string(),
"copper_golem_state" | "weathering_copper_state" => "weathering_copper_state".to_string(),
"profile" | "resolvable_profile" => "resolvable_profile".to_string(),
"arm" | "humanoid_arm" => "humanoid_arm".to_string(),
other => other.to_string(),
}
}
/// Generates the `TokenStream` for the `MetaDataType` struct with per-version ID fields and constants.
pub fn build() -> TokenStream {
let assets = [
@ -31,7 +50,8 @@ pub fn build() -> TokenStream {
serde_json::from_str(&fs::read_to_string(&path).unwrap())
.unwrap_or_else(|_| panic!("Failed to parse {file}"));
for (name, id) in parsed {
handlers_map.entry(name).or_default().insert(ver, id);
let canonical = canonicalize_type_name(&name);
handlers_map.entry(canonical).or_default().insert(ver, id);
}
}
@ -65,6 +85,22 @@ pub fn build() -> TokenStream {
});
}
let aliases = quote! {
pub const INTEGER: MetaDataType = Self::INT;
pub const ENTITY_POSE: MetaDataType = Self::POSE;
pub const FACING: MetaDataType = Self::DIRECTION;
pub const TEXT_COMPONENT: MetaDataType = Self::COMPONENT;
pub const OPTIONAL_TEXT_COMPONENT: MetaDataType = Self::OPTIONAL_COMPONENT;
pub const OPTIONAL_INT: MetaDataType = Self::OPTIONAL_UNSIGNED_INT;
pub const VECTOR_3F: MetaDataType = Self::VECTOR3;
pub const QUATERNION_F: MetaDataType = Self::QUATERNION;
pub const ROTATION: MetaDataType = Self::ROTATIONS;
pub const PARTICLE_LIST: MetaDataType = Self::PARTICLES;
pub const COPPER_GOLEM_STATE: MetaDataType = Self::WEATHERING_COPPER_STATE;
pub const PROFILE: MetaDataType = Self::RESOLVABLE_PROFILE;
pub const ARM: MetaDataType = Self::HUMANOID_ARM;
};
quote! {
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct MetaDataType {
@ -74,6 +110,8 @@ pub fn build() -> TokenStream {
impl MetaDataType {
#variants
#aliases
pub const fn id(&self, version: pumpkin_util::version::JavaMinecraftVersion) -> i32 {
match version {
#to_id_arms

View File

@ -1,13 +1,26 @@
use std::{
collections::{BTreeMap, BTreeSet},
fs,
};
use proc_macro2::TokenStream;
use quote::{format_ident, quote};
use std::{collections::BTreeMap, fs};
use serde::Deserialize;
use crate::version::JavaMinecraftVersion;
/// The newest protocol version used as the fallback for unknown versions in `TrackedId::get`.
const LATEST_VERSION: JavaMinecraftVersion = JavaMinecraftVersion::V_26_2;
/// Generates the `TokenStream` for `TrackedId`, `TrackedData`, and all per-entity tracking constants.
#[derive(Deserialize)]
struct RawTrackedField {
id: u8,
r#type: String,
#[allow(dead_code)]
type_id: u8,
}
/// Generates the `TokenStream` for `TrackedId`, `TrackedData`, and all per-entity tracking modules.
pub(crate) fn build() -> TokenStream {
let assets = [
(JavaMinecraftVersion::V_1_21, "1_21_tracked_data.json"),
@ -25,108 +38,38 @@ pub(crate) fn build() -> TokenStream {
let mut versions = BTreeMap::new();
for (ver, file) in assets {
let path = format!("../../assets/tracked_data/{file}");
let content = fs::read_to_string(&path)
.unwrap_or_else(|e| panic!("Failed to read JSON file: {path} {e}"));
let mut parsed: BTreeMap<String, u8> = serde_json::from_str(&content)
.unwrap_or_else(|e| panic!("Failed to parse {path}: {e}"));
// The upstream flattened asset loses duplicate Mojang field names.
// Before 26.1 the wolf tracker was named VARIANT; newer mappings use
// DATA_VARIANT_ID, which collides with unrelated entity fields in the
// flattened table. Preserve the legacy value and set the entity-scoped
// ID for the new mappings explicitly.
let wolf_variant_id = match ver {
JavaMinecraftVersion::V_26_1 | JavaMinecraftVersion::V_26_2 => Some(23),
_ => parsed.get("VARIANT").copied(),
};
if let Some(id) = wolf_variant_id {
parsed.insert("WOLF_VARIANT_ID".to_owned(), id);
if let Ok(content) = fs::read_to_string(&path) {
if let Ok(parsed) = serde_json::from_str::<
BTreeMap<String, BTreeMap<String, RawTrackedField>>,
>(&content)
{
versions.insert(ver, parsed);
}
}
let cat_variant_id = match ver {
JavaMinecraftVersion::V_26_1 | JavaMinecraftVersion::V_26_2 => Some(20),
_ => parsed.get("CAT_VARIANT").copied().or(Some(19)),
};
if let Some(id) = cat_variant_id {
parsed.insert("CAT_VARIANT".to_owned(), id);
parsed.insert("CAT_VARIANT_ID".to_owned(), id);
}
let cat_collar_color_id = match ver {
JavaMinecraftVersion::V_26_1 | JavaMinecraftVersion::V_26_2 => Some(23),
_ => Some(22),
};
if let Some(id) = cat_collar_color_id {
parsed.insert("CAT_COLLAR_COLOR".to_owned(), id);
parsed.insert("CAT_COLLAR_COLOR_ID".to_owned(), id);
}
let wolf_collar_color_id = match ver {
JavaMinecraftVersion::V_26_1 | JavaMinecraftVersion::V_26_2 => Some(21),
_ => Some(20),
};
if let Some(id) = wolf_collar_color_id {
parsed.insert("WOLF_COLLAR_COLOR".to_owned(), id);
parsed.insert("WOLF_COLLAR_COLOR_ID".to_owned(), id);
}
let sound_variant_id = match ver {
JavaMinecraftVersion::V_26_1 | JavaMinecraftVersion::V_26_2 => Some(24),
JavaMinecraftVersion::V_1_21_5
| JavaMinecraftVersion::V_1_21_6
| JavaMinecraftVersion::V_1_21_7
| JavaMinecraftVersion::V_1_21_9
| JavaMinecraftVersion::V_1_21_11 => Some(23),
_ => None,
};
if let Some(id) = sound_variant_id {
parsed.insert("SOUND_VARIANT".to_owned(), id);
parsed.insert("SOUND_VARIANT_ID".to_owned(), id);
parsed.insert("CAT_SOUND_VARIANT_ID".to_owned(), id);
parsed.insert("WOLF_SOUND_VARIANT_ID".to_owned(), id);
}
let is_lying_id = match ver {
JavaMinecraftVersion::V_26_1 | JavaMinecraftVersion::V_26_2 => Some(21),
_ => Some(20),
};
if let Some(id) = is_lying_id {
parsed.insert("IS_LYING".to_owned(), id);
parsed.insert("IN_SLEEPING_POSE".to_owned(), id);
}
let relax_state_one_id = match ver {
JavaMinecraftVersion::V_26_1 | JavaMinecraftVersion::V_26_2 => Some(22),
_ => Some(21),
};
if let Some(id) = relax_state_one_id {
parsed.insert("RELAX_STATE_ONE".to_owned(), id);
parsed.insert("HEAD_DOWN".to_owned(), id);
}
versions.insert(ver, parsed);
}
let tracked_data_struct = generate_struct(&versions);
let constants = generate_consts(&versions);
if versions.is_empty() {
panic!("No tracked data asset files found in assets/tracked_data");
}
let tracked_id_struct = generate_tracked_id_struct(&versions);
let tracked_data_struct = generate_tracked_data_struct();
let entity_modules = generate_entity_modules(&versions);
quote! {
use crate::meta_data_type::MetaDataType;
use pumpkin_util::version::JavaMinecraftVersion;
#tracked_id_struct
#tracked_data_struct
pub struct TrackedData;
impl TrackedData {
#constants
}
#entity_modules
}
}
/// Generates the `TrackedId` struct definition with one `u8` field per supported version.
fn generate_struct<T>(versions: &BTreeMap<JavaMinecraftVersion, T>) -> TokenStream {
// Build struct fields
fn generate_tracked_id_struct<T>(versions: &BTreeMap<JavaMinecraftVersion, T>) -> TokenStream {
let mut struct_fields = TokenStream::new();
for ver in versions.keys() {
let ident = ver.to_field_ident();
@ -135,9 +78,12 @@ fn generate_struct<T>(versions: &BTreeMap<JavaMinecraftVersion, T>) -> TokenStre
});
}
let latest_field_ident = LATEST_VERSION.to_field_ident();
let latest_field_ident = if versions.contains_key(&LATEST_VERSION) {
LATEST_VERSION.to_field_ident()
} else {
versions.keys().last().unwrap().to_field_ident()
};
// Build match arms
let mut match_arms = TokenStream::new();
for ver in versions.keys() {
let ident = ver.to_field_ident();
@ -147,12 +93,14 @@ fn generate_struct<T>(versions: &BTreeMap<JavaMinecraftVersion, T>) -> TokenStre
}
quote! {
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct TrackedId {
#struct_fields
}
impl TrackedId {
pub fn get(&self, version: &JavaMinecraftVersion) -> u8 {
#[must_use]
pub const fn get(&self, version: &JavaMinecraftVersion) -> u8 {
match version {
#match_arms
_ => self.#latest_field_ident,
@ -168,67 +116,324 @@ fn generate_struct<T>(versions: &BTreeMap<JavaMinecraftVersion, T>) -> TokenStre
}
}
/// Generates `TrackedId` constants for every tracked data key present in the latest version.
fn generate_consts(versions: &BTreeMap<JavaMinecraftVersion, BTreeMap<String, u8>>) -> TokenStream {
let mut constants = TokenStream::new();
/// Generates the `TrackedData` struct with `id` and `type` fields.
fn generate_tracked_data_struct() -> TokenStream {
quote! {
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct TrackedData {
pub id: TrackedId,
pub r#type: MetaDataType,
}
// Union of all normalized names across every version
let all_names: std::collections::BTreeSet<String> = versions
impl TrackedData {
#[must_use]
pub const fn new(id: TrackedId, r#type: MetaDataType) -> Self {
Self { id, r#type }
}
#[must_use]
pub const fn get(&self, version: &JavaMinecraftVersion) -> u8 {
self.id.get(version)
}
}
}
}
/// Generates entity-specific modules containing constants for all tracked fields.
fn generate_entity_modules(
versions: &BTreeMap<JavaMinecraftVersion, BTreeMap<String, BTreeMap<String, RawTrackedField>>>,
) -> TokenStream {
let mut modules = TokenStream::new();
let all_entities: BTreeSet<String> = versions
.values()
.flat_map(|data| data.keys().map(|k| normalize_name(k)))
.flat_map(|entities| entities.keys().cloned())
.collect();
for final_name in &all_names {
let ident = format_ident!("{}", final_name);
// Some versions prefix keys with DATA_ (Bedrock), others don't (Java)
// Try both forms so every version resolves correctly
let prefixed = format!("DATA_{final_name}");
let aliases: &[&str] = match final_name.as_str() {
"CUSTOM_NAME_VISIBLE" => &["NAME_VISIBLE"],
"IS_LYING" => &["IN_SLEEPING_POSE"],
"IN_SLEEPING_POSE" => &["IS_LYING"],
"RELAX_STATE_ONE" => &["HEAD_DOWN"],
"HEAD_DOWN" => &["RELAX_STATE_ONE"],
"SOUND_VARIANT" => &["SOUND_VARIANT_ID", "DATA_SOUND_VARIANT_ID"],
"SOUND_VARIANT_ID" => &["SOUND_VARIANT", "DATA_SOUND_VARIANT_ID"],
_ => &[],
};
for entity in &all_entities {
let entity_ident = format_ident!("{}", entity);
let mut fields = TokenStream::new();
for (ver, data) in versions.iter() {
let field_ident = ver.to_field_ident();
let id = data
.get(final_name.as_str())
.or_else(|| data.get(prefixed.as_str()))
.or_else(|| aliases.iter().find_map(|alias| data.get(*alias)))
.copied()
.unwrap_or(255);
fields.extend(quote! {
#field_ident: #id,
let all_fields: BTreeSet<String> = versions
.values()
.filter_map(|entities| entities.get(entity))
.flat_map(|fields| fields.keys().cloned())
.collect();
let mut field_consts = TokenStream::new();
let mut defined_idents = BTreeSet::new();
// 1. Generate base field constants
for field in &all_fields {
let field_upper = field.to_uppercase();
let field_ident = format_ident!("{}", field_upper);
defined_idents.insert(field_upper.clone());
let mut id_fields = TokenStream::new();
let mut latest_type = String::new();
for (ver, entities) in versions {
let ver_ident = ver.to_field_ident();
let field_info = entities.get(entity).and_then(|f| f.get(field));
let id = field_info.map_or(255u8, |info| info.id);
if let Some(info) = field_info {
latest_type = info.r#type.clone();
}
id_fields.extend(quote! {
#ver_ident: #id,
});
}
let type_const_ident = format_ident!("{}", latest_type.to_uppercase());
field_consts.extend(quote! {
pub const #field_ident: TrackedData = TrackedData {
id: TrackedId { #id_fields },
r#type: MetaDataType::#type_const_ident,
};
});
}
constants.extend(quote! {
pub const #ident: TrackedId = TrackedId { #fields };
// 2. Generate normalized and semantic aliases
for field in &all_fields {
let field_upper = field.to_uppercase();
let field_ident = format_ident!("{}", field_upper);
let mut candidate_aliases = Vec::new();
// Strip DATA_ prefix
if let Some(stripped) = field_upper.strip_prefix("DATA_") {
candidate_aliases.push(stripped.to_string());
}
// Strip _ID suffix
if let Some(stripped_id) = field_upper.strip_suffix("_ID") {
candidate_aliases.push(stripped_id.to_string());
if let Some(norm) = stripped_id.strip_prefix("DATA_") {
candidate_aliases.push(norm.to_string());
}
}
// Semantic aliases
add_semantic_aliases(entity, &field_upper, &mut candidate_aliases);
for alias in candidate_aliases {
if !defined_idents.contains(&alias) && is_valid_ident(&alias) {
defined_idents.insert(alias.clone());
let alias_ident = format_ident!("{}", alias);
field_consts.extend(quote! {
pub const #alias_ident: TrackedData = #field_ident;
});
}
}
}
modules.extend(quote! {
pub mod #entity_ident {
use super::*;
#field_consts
}
});
}
constants
modules
}
fn normalize_name(name: &str) -> String {
let upper = name.to_uppercase();
let normalized = upper
.strip_prefix("DATA_")
.map_or(upper.clone(), str::to_string);
fn is_valid_ident(name: &str) -> bool {
if name.is_empty() {
return false;
}
let mut chars = name.chars();
let first = chars.next().unwrap();
if !first.is_ascii_alphabetic() && first != '_' {
return false;
}
if !chars.all(|c| c.is_ascii_alphanumeric() || c == '_') {
return false;
}
!matches!(
name,
"as" | "break"
| "const"
| "continue"
| "crate"
| "else"
| "enum"
| "extern"
| "false"
| "fn"
| "for"
| "if"
| "impl"
| "in"
| "let"
| "loop"
| "match"
| "mod"
| "move"
| "mut"
| "pub"
| "ref"
| "return"
| "self"
| "Self"
| "static"
| "struct"
| "super"
| "trait"
| "true"
| "type"
| "unsafe"
| "use"
| "where"
| "while"
| "async"
| "await"
| "dyn"
| "abstract"
| "become"
| "box"
| "do"
| "final"
| "macro"
| "override"
| "priv"
| "typeof"
| "unsized"
| "virtual"
| "yield"
| "try"
)
}
// Mojang renamed the shared entity custom-name visibility tracker from
// NAME_VISIBLE to DATA_CUSTOM_NAME_VISIBLE in newer mappings. Keep one
// generated constant usable across both naming schemes.
if normalized == "NAME_VISIBLE" {
"CUSTOM_NAME_VISIBLE".to_string()
} else {
normalized
fn add_semantic_aliases(entity: &str, field: &str, aliases: &mut Vec<String>) {
match (entity, field) {
(_, "DATA_FLAGS_ID") => {
aliases.push("TAMEABLE_FLAGS".to_string());
aliases.push("FLAGS".to_string());
}
(_, "DATA_OWNERUUID_ID") => {
aliases.push("OWNER_UUID".to_string());
}
("creeper", "DATA_IS_POWERED") => {
aliases.push("CHARGED".to_string());
}
("creeper", "DATA_SWELL_DIR") => {
aliases.push("FUSE_ID".to_string());
}
("tnt" | "primed_tnt", "DATA_FUSE_ID") => {
aliases.push("FUSE_ID".to_string());
}
("sheep", "DATA_WOOL_ID") => {
aliases.push("WOOL_ID".to_string());
}
("cat", "IS_LYING") => {
aliases.push("IN_SLEEPING_POSE".to_string());
}
("cat", "RELAX_STATE_ONE") => {
aliases.push("HEAD_DOWN".to_string());
}
("cat", "DATA_SOUND_VARIANT_ID") | ("wolf", "DATA_SOUND_VARIANT_ID") => {
aliases.push("SOUND_VARIANT".to_string());
aliases.push("SOUND_VARIANT_ID".to_string());
}
("cat", "DATA_VARIANT_ID") => {
aliases.push("CAT_VARIANT".to_string());
aliases.push("CAT_VARIANT_ID".to_string());
aliases.push("VARIANT".to_string());
}
("wolf", "DATA_VARIANT_ID") => {
aliases.push("WOLF_VARIANT_ID".to_string());
aliases.push("VARIANT".to_string());
}
("cat", "DATA_COLLAR_COLOR") => {
aliases.push("CAT_COLLAR_COLOR".to_string());
aliases.push("COLLAR_COLOR".to_string());
}
("wolf", "DATA_COLLAR_COLOR") => {
aliases.push("WOLF_COLLAR_COLOR".to_string());
aliases.push("COLLAR_COLOR".to_string());
}
("player" | "avatar" | "mannequin", "DATA_PLAYER_MODE_CUSTOMISATION") => {
aliases.push("PLAYER_MODE_CUSTOMIZATION_ID".to_string());
}
("player" | "avatar" | "mannequin", "DATA_PLAYER_MAIN_HAND") => {
aliases.push("MAIN_ARM_ID".to_string());
}
("display" | "block_display" | "item_display" | "text_display", _) => match field {
"DATA_TRANSFORMATION_INTERPOLATION_START_DELTA_TICKS_ID" => {
aliases.push("START_INTERPOLATION".to_string());
}
"DATA_TRANSFORMATION_INTERPOLATION_DURATION_ID" => {
aliases.push("INTERPOLATION_DURATION".to_string());
}
"DATA_POS_ROT_INTERPOLATION_DURATION_ID" => {
aliases.push("TELEPORT_DURATION".to_string());
}
"DATA_TRANSLATION_ID" => {
aliases.push("TRANSLATION".to_string());
}
"DATA_SCALE_ID" => {
aliases.push("SCALE".to_string());
}
"DATA_LEFT_ROTATION_ID" => {
aliases.push("LEFT_ROTATION".to_string());
}
"DATA_RIGHT_ROTATION_ID" => {
aliases.push("RIGHT_ROTATION".to_string());
}
"DATA_BILLBOARD_RENDER_CONSTRAINTS_ID" => {
aliases.push("BILLBOARD".to_string());
}
"DATA_BRIGHTNESS_OVERRIDE_ID" => {
aliases.push("BRIGHTNESS".to_string());
}
"DATA_VIEW_RANGE_ID" => {
aliases.push("VIEW_RANGE".to_string());
}
"DATA_SHADOW_RADIUS_ID" => {
aliases.push("SHADOW_RADIUS".to_string());
}
"DATA_SHADOW_STRENGTH_ID" => {
aliases.push("SHADOW_STRENGTH".to_string());
}
"DATA_WIDTH_ID" => {
aliases.push("WIDTH".to_string());
}
"DATA_HEIGHT_ID" => {
aliases.push("HEIGHT".to_string());
}
"DATA_GLOW_COLOR_OVERRIDE_ID" => {
aliases.push("GLOW_COLOR_OVERRIDE".to_string());
}
"DATA_BLOCK_STATE_ID" => {
aliases.push("BLOCK_STATE".to_string());
}
"DATA_ITEM_STACK_ID" => {
aliases.push("ITEM".to_string());
aliases.push("ITEM_STACK".to_string());
}
"DATA_ITEM_DISPLAY_ID" => {
aliases.push("ITEM_DISPLAY".to_string());
}
"DATA_TEXT_ID" => {
aliases.push("TEXT".to_string());
}
"DATA_LINE_WIDTH_ID" => {
aliases.push("LINE_WIDTH".to_string());
}
"DATA_BACKGROUND_COLOR_ID" => {
aliases.push("BACKGROUND".to_string());
}
"DATA_TEXT_OPACITY_ID" => {
aliases.push("TEXT_OPACITY".to_string());
}
"DATA_STYLE_FLAGS_ID" => {
aliases.push("TEXT_DISPLAY_FLAGS".to_string());
}
_ => {}
},
_ => {}
}
}
@ -238,61 +443,12 @@ mod tests {
use quote::quote;
#[test]
fn wolf_variant_keeps_its_entity_specific_v26_2_tracker_id() {
fn wolf_and_cat_have_correct_entity_specific_tracker_constants() {
let generated = build().to_string();
assert!(generated.contains("WOLF_VARIANT_ID"));
let wolf = generated
.split("WOLF_VARIANT_ID")
.nth(1)
.expect("wolf tracker constant");
assert!(wolf.contains("v1_21_11 : 20u8"));
assert!(wolf.contains("v26_2 : 23u8"));
}
#[test]
fn cat_trackers_keep_their_entity_specific_tracker_ids() {
let generated = build().to_string();
assert!(generated.contains("CAT_VARIANT"));
let cat_variant = generated
.split("CAT_VARIANT")
.nth(1)
.expect("cat variant constant");
assert!(cat_variant.contains("v1_21_11 : 19u8"));
assert!(cat_variant.contains("v26_2 : 20u8"));
assert!(generated.contains("IS_LYING"));
let is_lying = generated
.split("IS_LYING")
.nth(1)
.expect("is lying constant");
assert!(is_lying.contains("v1_21_11 : 20u8"));
assert!(is_lying.contains("v26_2 : 21u8"));
assert!(generated.contains("RELAX_STATE_ONE"));
let relax = generated
.split("RELAX_STATE_ONE")
.nth(1)
.expect("relax state one constant");
assert!(relax.contains("v1_21_11 : 21u8"));
assert!(relax.contains("v26_2 : 22u8"));
assert!(generated.contains("CAT_COLLAR_COLOR"));
let collar = generated
.split("CAT_COLLAR_COLOR")
.nth(1)
.expect("cat collar color constant");
assert!(collar.contains("v1_21_11 : 22u8"));
assert!(collar.contains("v26_2 : 23u8"));
assert!(generated.contains("SOUND_VARIANT"));
let sound = generated
.split("SOUND_VARIANT")
.nth(1)
.expect("sound variant constant");
assert!(sound.contains("v1_21_11 : 23u8"));
assert!(sound.contains("v26_2 : 24u8"));
assert!(generated.contains("mod wolf"));
assert!(generated.contains("mod cat"));
assert!(generated.contains("DATA_COLLAR_COLOR"));
}
#[test]
@ -300,8 +456,11 @@ mod tests {
let checked_in =
std::fs::read_to_string("../../crates/pumpkin-data/src/generated/tracked_data.rs")
.expect("checked-in tracked data");
let parsed = syn::parse_file(&checked_in).expect("valid generated Rust");
let generated = crate::format_code(&build().to_string()).expect("valid rustfmt");
assert_eq!(quote!(#parsed).to_string(), build().to_string());
assert_eq!(
checked_in.trim(),
format!("/* This file is generated. Do not edit manually. */\n{generated}").trim()
);
}
}