From e06149aad14de035825c20d11df3b2b7cfa46582 Mon Sep 17 00:00:00 2001 From: iiroak Date: Mon, 20 Jul 2026 23:35:34 -0400 Subject: [PATCH 1/3] pc: Add sendsClientTickEndPacket feature flag for 1.21.2+ --- data/pc/common/features.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/data/pc/common/features.json b/data/pc/common/features.json index ba2cc4007..5384acafb 100644 --- a/data/pc/common/features.json +++ b/data/pc/common/features.json @@ -915,5 +915,10 @@ "name": "gameRuleUsesResourceLocation", "description": "gamerule names use resource location syntax", "versions": ["1.21.11", "latest"] + }, + { + "name": "sendsClientTickEndPacket", + "description": "client sends a tick_end packet at the end of every tick", + "versions": ["1.21.2", "latest"] } ] From fea711909589cf078feafff5e63d558265cec97a Mon Sep 17 00:00:00 2001 From: iiroak Date: Wed, 22 Jul 2026 00:28:02 -0400 Subject: [PATCH 2/3] fix: complete 1.21.4 attribute registry --- data/pc/1.21.4/proto.yml | 56 ++++++++++++++++++------------- data/pc/1.21.4/protocol.json | 40 +++++++++++++--------- tools/js/test/audit_attributes.js | 30 +++++++++++++++++ 3 files changed, 88 insertions(+), 38 deletions(-) create mode 100644 tools/js/test/audit_attributes.js diff --git a/data/pc/1.21.4/proto.yml b/data/pc/1.21.4/proto.yml index 99eabcedf..983dd4dae 100644 --- a/data/pc/1.21.4/proto.yml +++ b/data/pc/1.21.4/proto.yml @@ -2447,28 +2447,38 @@ entityId: varint properties: []varint key: varint => - - generic.armor - - generic.armor_toughness - - generic.attack_damage - - generic.attack_knockback - - generic.attack_speed - - player.block_break_speed - - player.block_interaction_range - - player.entity_interaction_range - - generic.fall_damage_multiplier - - generic.flying_speed - - generic.follow_range - - generic.gravity - - generic.jump_strength - - generic.knockback_resistance - - generic.luck - - generic.max_absorption - - generic.max_health - - generic.movement_speed - - generic.safe_fall_distance - - generic.scale - - zombie.spawn_reinforcements - - generic.step_height + - generic.armor + - generic.armor_toughness + - generic.attack_damage + - generic.attack_knockback + - generic.attack_speed + - player.block_break_speed + - player.block_interaction_range + - generic.burning_time + - generic.explosion_knockback_resistance + - player.entity_interaction_range + - generic.fall_damage_multiplier + - generic.flying_speed + - generic.follow_range + - generic.gravity + - generic.jump_strength + - generic.knockback_resistance + - generic.luck + - generic.max_absorption + - generic.max_health + - player.mining_efficiency + - generic.movement_efficiency + - generic.movement_speed + - generic.oxygen_bonus + - generic.safe_fall_distance + - generic.scale + - player.sneaking_speed + - zombie.spawn_reinforcements + - generic.step_height + - player.submerged_mining_speed + - player.sweeping_damage_ratio + - generic.tempt_range + - generic.water_movement_efficiency value: f64 modifiers: []varint uuid: string @@ -3240,4 +3250,4 @@ if arm_animation: packet_arm_animation if spectate: packet_spectate if block_place: packet_block_place - if use_item: packet_use_item \ No newline at end of file + if use_item: packet_use_item diff --git a/data/pc/1.21.4/protocol.json b/data/pc/1.21.4/protocol.json index e302e9772..c3e92a84d 100644 --- a/data/pc/1.21.4/protocol.json +++ b/data/pc/1.21.4/protocol.json @@ -7646,21 +7646,31 @@ "4": "generic.attack_speed", "5": "player.block_break_speed", "6": "player.block_interaction_range", - "7": "player.entity_interaction_range", - "8": "generic.fall_damage_multiplier", - "9": "generic.flying_speed", - "10": "generic.follow_range", - "11": "generic.gravity", - "12": "generic.jump_strength", - "13": "generic.knockback_resistance", - "14": "generic.luck", - "15": "generic.max_absorption", - "16": "generic.max_health", - "17": "generic.movement_speed", - "18": "generic.safe_fall_distance", - "19": "generic.scale", - "20": "zombie.spawn_reinforcements", - "21": "generic.step_height" + "7": "generic.burning_time", + "8": "generic.explosion_knockback_resistance", + "9": "player.entity_interaction_range", + "10": "generic.fall_damage_multiplier", + "11": "generic.flying_speed", + "12": "generic.follow_range", + "13": "generic.gravity", + "14": "generic.jump_strength", + "15": "generic.knockback_resistance", + "16": "generic.luck", + "17": "generic.max_absorption", + "18": "generic.max_health", + "19": "player.mining_efficiency", + "20": "generic.movement_efficiency", + "21": "generic.movement_speed", + "22": "generic.oxygen_bonus", + "23": "generic.safe_fall_distance", + "24": "generic.scale", + "25": "player.sneaking_speed", + "26": "zombie.spawn_reinforcements", + "27": "generic.step_height", + "28": "player.submerged_mining_speed", + "29": "player.sweeping_damage_ratio", + "30": "generic.tempt_range", + "31": "generic.water_movement_efficiency" } } ] diff --git a/tools/js/test/audit_attributes.js b/tools/js/test/audit_attributes.js new file mode 100644 index 000000000..364902474 --- /dev/null +++ b/tools/js/test/audit_attributes.js @@ -0,0 +1,30 @@ +/* eslint-env mocha */ + +const assert = require('assert') + +describe('attribute protocol mappings', () => { + it('uses the complete 1.21.4 attribute registry', () => { + const protocol = require('../../../data/pc/1.21.4/protocol.json') + const packet = protocol.play.toClient.types.packet_entity_update_attributes + const mappings = findMappings(packet) + + assert.strictEqual(mappings['9'], 'player.entity_interaction_range') + assert.strictEqual(mappings['21'], 'generic.movement_speed') + assert.strictEqual(mappings['27'], 'generic.step_height') + }) +}) + +function findMappings (value) { + if (Array.isArray(value)) { + if (value[0] === 'mapper' && value[1]?.mappings) return value[1].mappings + for (const child of value) { + const mappings = findMappings(child) + if (mappings) return mappings + } + } else if (value && typeof value === 'object') { + for (const child of Object.values(value)) { + const mappings = findMappings(child) + if (mappings) return mappings + } + } +} From 198235d0640e90d59abfb3f0193acd3f698f303c Mon Sep 17 00:00:00 2001 From: iiroak Date: Wed, 22 Jul 2026 01:05:54 -0400 Subject: [PATCH 3/3] Revert "fix: complete 1.21.4 attribute registry" This reverts commit fea711909589cf078feafff5e63d558265cec97a. --- data/pc/1.21.4/proto.yml | 56 +++++++++++++------------------ data/pc/1.21.4/protocol.json | 40 +++++++++------------- tools/js/test/audit_attributes.js | 30 ----------------- 3 files changed, 38 insertions(+), 88 deletions(-) delete mode 100644 tools/js/test/audit_attributes.js diff --git a/data/pc/1.21.4/proto.yml b/data/pc/1.21.4/proto.yml index 983dd4dae..99eabcedf 100644 --- a/data/pc/1.21.4/proto.yml +++ b/data/pc/1.21.4/proto.yml @@ -2447,38 +2447,28 @@ entityId: varint properties: []varint key: varint => - - generic.armor - - generic.armor_toughness - - generic.attack_damage - - generic.attack_knockback - - generic.attack_speed - - player.block_break_speed - - player.block_interaction_range - - generic.burning_time - - generic.explosion_knockback_resistance - - player.entity_interaction_range - - generic.fall_damage_multiplier - - generic.flying_speed - - generic.follow_range - - generic.gravity - - generic.jump_strength - - generic.knockback_resistance - - generic.luck - - generic.max_absorption - - generic.max_health - - player.mining_efficiency - - generic.movement_efficiency - - generic.movement_speed - - generic.oxygen_bonus - - generic.safe_fall_distance - - generic.scale - - player.sneaking_speed - - zombie.spawn_reinforcements - - generic.step_height - - player.submerged_mining_speed - - player.sweeping_damage_ratio - - generic.tempt_range - - generic.water_movement_efficiency + - generic.armor + - generic.armor_toughness + - generic.attack_damage + - generic.attack_knockback + - generic.attack_speed + - player.block_break_speed + - player.block_interaction_range + - player.entity_interaction_range + - generic.fall_damage_multiplier + - generic.flying_speed + - generic.follow_range + - generic.gravity + - generic.jump_strength + - generic.knockback_resistance + - generic.luck + - generic.max_absorption + - generic.max_health + - generic.movement_speed + - generic.safe_fall_distance + - generic.scale + - zombie.spawn_reinforcements + - generic.step_height value: f64 modifiers: []varint uuid: string @@ -3250,4 +3240,4 @@ if arm_animation: packet_arm_animation if spectate: packet_spectate if block_place: packet_block_place - if use_item: packet_use_item + if use_item: packet_use_item \ No newline at end of file diff --git a/data/pc/1.21.4/protocol.json b/data/pc/1.21.4/protocol.json index c3e92a84d..e302e9772 100644 --- a/data/pc/1.21.4/protocol.json +++ b/data/pc/1.21.4/protocol.json @@ -7646,31 +7646,21 @@ "4": "generic.attack_speed", "5": "player.block_break_speed", "6": "player.block_interaction_range", - "7": "generic.burning_time", - "8": "generic.explosion_knockback_resistance", - "9": "player.entity_interaction_range", - "10": "generic.fall_damage_multiplier", - "11": "generic.flying_speed", - "12": "generic.follow_range", - "13": "generic.gravity", - "14": "generic.jump_strength", - "15": "generic.knockback_resistance", - "16": "generic.luck", - "17": "generic.max_absorption", - "18": "generic.max_health", - "19": "player.mining_efficiency", - "20": "generic.movement_efficiency", - "21": "generic.movement_speed", - "22": "generic.oxygen_bonus", - "23": "generic.safe_fall_distance", - "24": "generic.scale", - "25": "player.sneaking_speed", - "26": "zombie.spawn_reinforcements", - "27": "generic.step_height", - "28": "player.submerged_mining_speed", - "29": "player.sweeping_damage_ratio", - "30": "generic.tempt_range", - "31": "generic.water_movement_efficiency" + "7": "player.entity_interaction_range", + "8": "generic.fall_damage_multiplier", + "9": "generic.flying_speed", + "10": "generic.follow_range", + "11": "generic.gravity", + "12": "generic.jump_strength", + "13": "generic.knockback_resistance", + "14": "generic.luck", + "15": "generic.max_absorption", + "16": "generic.max_health", + "17": "generic.movement_speed", + "18": "generic.safe_fall_distance", + "19": "generic.scale", + "20": "zombie.spawn_reinforcements", + "21": "generic.step_height" } } ] diff --git a/tools/js/test/audit_attributes.js b/tools/js/test/audit_attributes.js deleted file mode 100644 index 364902474..000000000 --- a/tools/js/test/audit_attributes.js +++ /dev/null @@ -1,30 +0,0 @@ -/* eslint-env mocha */ - -const assert = require('assert') - -describe('attribute protocol mappings', () => { - it('uses the complete 1.21.4 attribute registry', () => { - const protocol = require('../../../data/pc/1.21.4/protocol.json') - const packet = protocol.play.toClient.types.packet_entity_update_attributes - const mappings = findMappings(packet) - - assert.strictEqual(mappings['9'], 'player.entity_interaction_range') - assert.strictEqual(mappings['21'], 'generic.movement_speed') - assert.strictEqual(mappings['27'], 'generic.step_height') - }) -}) - -function findMappings (value) { - if (Array.isArray(value)) { - if (value[0] === 'mapper' && value[1]?.mappings) return value[1].mappings - for (const child of value) { - const mappings = findMappings(child) - if (mappings) return mappings - } - } else if (value && typeof value === 'object') { - for (const child of Object.values(value)) { - const mappings = findMappings(child) - if (mappings) return mappings - } - } -}