fix: use wolf-specific entity metadata tracker id (#2407)

This commit is contained in:
Roman Chebykin
2026-07-31 08:53:17 +05:00
committed by GitHub
parent 4b1479607a
commit 4c0a40499e
3 changed files with 55 additions and 2 deletions

View File

@@ -28,9 +28,22 @@ pub(crate) fn build() -> TokenStream {
let content = fs::read_to_string(&path)
.unwrap_or_else(|e| panic!("Failed to read JSON file: {path} {e}"));
let parsed: BTreeMap<String, u8> = serde_json::from_str(&content)
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);
}
versions.insert(ver, parsed);
}
@@ -152,3 +165,31 @@ fn normalize_name(name: &str) -> String {
normalized
}
}
#[cfg(test)]
mod tests {
use super::build;
use quote::quote;
#[test]
fn wolf_variant_keeps_its_entity_specific_v26_2_tracker_id() {
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 checked_in_tracker_table_matches_codegen() {
let checked_in = std::fs::read_to_string("../pumpkin-data/src/generated/tracked_data.rs")
.expect("checked-in tracked data");
let parsed = syn::parse_file(&checked_in).expect("valid generated Rust");
assert_eq!(quote!(#parsed).to_string(), build().to_string());
}
}

View File

@@ -3960,6 +3960,18 @@ impl TrackedData {
v26_1: 20u8,
v26_2: 20u8,
};
pub const WOLF_VARIANT_ID: TrackedId = TrackedId {
v1_21: 22u8,
v1_21_2: 22u8,
v1_21_4: 22u8,
v1_21_5: 22u8,
v1_21_6: 22u8,
v1_21_7: 20u8,
v1_21_9: 22u8,
v1_21_11: 20u8,
v26_1: 23u8,
v26_2: 23u8,
};
pub const WOOL_ID: TrackedId = TrackedId {
v1_21: 255u8,
v1_21_2: 255u8,

View File

@@ -140,7 +140,7 @@ impl Mob for WolfEntity {
}
entity.send_meta_data(
&[Metadata::new(
TrackedData::VARIANT,
TrackedData::WOLF_VARIANT_ID,
MetaDataType::WOLF_VARIANT,
VarInt(self.variant.load(Ordering::Relaxed) as i32),
)],