mirror of
https://github.com/Pumpkin-MC/Pumpkin.git
synced 2026-08-30 20:14:23 +00:00
fix(protocol): remap item/block state IDs and entity metadata for older Java clients (#2185)
* fix(protocol): remap item/block state IDs and entity metadata for older Java clients The server was using reversed ViaVersion mappings (designed for old→new) to downgrade packets for older clients, which produced ID collisions and incorrect fallbacks for 26.1-exclusive items and block states. Changes: - Replace ViaVersion with ViaBackwards mapping files for item ID and block state remapping, which provide the correct new→old direction with proper closest-item fallbacks for 26.1-exclusive content - Fix CSetEntityMetadata to remap ItemStack item IDs per client version, matching the version-aware handling already done for inventory packets and block state metadata - Fix TrackedData codegen to resolve Java JSON keys correctly by trying both bare names and DATA_-prefixed names, and iterate the union of all version keys instead of only the latest (Bedrock) version - Fix LootCondition::MatchTool to default to false instead of true, preventing silk-touch loot table branches from always winning and causing ores to drop themselves instead of their correct items Fixes: block drops invisible on older Java clients Fixes: leather showing as milk bucket on 1.21.11 Fixes: coal ore dropping coal ore instead of coal Fixes: 26.1-exclusive blocks showing as wrong blocks on older clients * fix(codegen): remove #[must_use] from trait impl methods in generated code * fix(codegen): switch entity, sound and block state remapping to ViaBackwards mappings --------- Co-authored-by: Missing_Love <42416195+Q2297045667@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
d29e4c18bd
commit
42f6b9ce3f
BIN
assets/viabackwards/data/mappings-1.21.11to1.21.9.nbt
Normal file
BIN
assets/viabackwards/data/mappings-1.21.11to1.21.9.nbt
Normal file
Binary file not shown.
BIN
assets/viabackwards/data/mappings-1.21.2to1.21.nbt
Normal file
BIN
assets/viabackwards/data/mappings-1.21.2to1.21.nbt
Normal file
Binary file not shown.
BIN
assets/viabackwards/data/mappings-1.21.4to1.21.2.nbt
Normal file
BIN
assets/viabackwards/data/mappings-1.21.4to1.21.2.nbt
Normal file
Binary file not shown.
BIN
assets/viabackwards/data/mappings-1.21.5to1.21.4.nbt
Normal file
BIN
assets/viabackwards/data/mappings-1.21.5to1.21.4.nbt
Normal file
Binary file not shown.
BIN
assets/viabackwards/data/mappings-1.21.6to1.21.5.nbt
Normal file
BIN
assets/viabackwards/data/mappings-1.21.6to1.21.5.nbt
Normal file
Binary file not shown.
BIN
assets/viabackwards/data/mappings-1.21.7to1.21.6.nbt
Normal file
BIN
assets/viabackwards/data/mappings-1.21.7to1.21.6.nbt
Normal file
Binary file not shown.
BIN
assets/viabackwards/data/mappings-1.21.9to1.21.7.nbt
Normal file
BIN
assets/viabackwards/data/mappings-1.21.9to1.21.7.nbt
Normal file
Binary file not shown.
BIN
assets/viabackwards/data/mappings-1.21to1.20.5.nbt
Normal file
BIN
assets/viabackwards/data/mappings-1.21to1.20.5.nbt
Normal file
Binary file not shown.
BIN
assets/viabackwards/data/mappings-26.1to1.21.11.nbt
Normal file
BIN
assets/viabackwards/data/mappings-26.1to1.21.11.nbt
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -174,12 +174,10 @@ pub fn build() -> TokenStream {
|
||||
}
|
||||
}
|
||||
impl IDSetContent for StatusEffect {
|
||||
#[must_use]
|
||||
fn registry_id(&self) -> u16 {
|
||||
self.id as u16
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
fn from_id(id: u16) -> Option<&'static Self> {
|
||||
match id {
|
||||
#id_to_type
|
||||
@@ -187,12 +185,10 @@ pub fn build() -> TokenStream {
|
||||
}
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
fn from_str(name: &str) -> Option<&'static Self> {
|
||||
Self::from_minecraft_name(name)
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
fn to_string(&self) -> String {
|
||||
self.minecraft_name.to_string()
|
||||
}
|
||||
|
||||
@@ -595,7 +595,6 @@ pub fn build() -> TokenStream {
|
||||
}
|
||||
|
||||
impl From<&CookingRecipeType> for CookingRecipeKind {
|
||||
#[must_use]
|
||||
fn from(recipe_type: &CookingRecipeType) -> Self {
|
||||
match recipe_type {
|
||||
CookingRecipeType::Blasting(_) => Self::Blasting,
|
||||
@@ -607,7 +606,6 @@ pub fn build() -> TokenStream {
|
||||
}
|
||||
|
||||
impl From<CookingRecipeType> for CookingRecipeKind {
|
||||
#[must_use]
|
||||
fn from(recipe_type: CookingRecipeType) -> Self {
|
||||
match recipe_type {
|
||||
CookingRecipeType::Blasting(_) => Self::Blasting,
|
||||
|
||||
@@ -9,50 +9,49 @@ use crate::version::JavaMinecraftVersion;
|
||||
pub fn build() -> TokenStream {
|
||||
let node_1_20_5 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_20_5,
|
||||
value: "../assets/viaversion/data/mappings-1.20.5to1.21.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21to1.20.5.nbt",
|
||||
child: None,
|
||||
};
|
||||
let node_1_21 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21,
|
||||
value: "../assets/viaversion/data/mappings-1.21to1.21.2.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.2to1.21.nbt",
|
||||
child: Some(&node_1_20_5),
|
||||
};
|
||||
let node_1_21_2 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_2,
|
||||
value: "../assets/viaversion/data/mappings-1.21.2to1.21.4.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.4to1.21.2.nbt",
|
||||
child: Some(&node_1_21),
|
||||
};
|
||||
let node_1_21_4 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_4,
|
||||
value: "../assets/viaversion/data/mappings-1.21.4to1.21.5.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.5to1.21.4.nbt",
|
||||
child: Some(&node_1_21_2),
|
||||
};
|
||||
let node_1_21_5 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_5,
|
||||
value: "../assets/viaversion/data/mappings-1.21.5to1.21.6.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.6to1.21.5.nbt",
|
||||
child: Some(&node_1_21_4),
|
||||
};
|
||||
let node_1_21_6 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_6,
|
||||
value: "../assets/viaversion/data/mappings-1.21.6to1.21.7.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.7to1.21.6.nbt",
|
||||
child: Some(&node_1_21_5),
|
||||
};
|
||||
let node_1_21_7 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_7,
|
||||
value: "../assets/viaversion/data/mappings-1.21.7to1.21.9.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.9to1.21.7.nbt",
|
||||
child: Some(&node_1_21_6),
|
||||
};
|
||||
let node_1_21_9 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_9,
|
||||
value: "../assets/viaversion/data/mappings-1.21.9to1.21.11.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.11to1.21.9.nbt",
|
||||
child: Some(&node_1_21_7),
|
||||
};
|
||||
let node_1_21_11 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_11,
|
||||
value: "../assets/viaversion/data/mappings-1.21.11to26.1.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-26.1to1.21.11.nbt",
|
||||
child: Some(&node_1_21_9),
|
||||
};
|
||||
|
||||
let remapper: Remapper<_, Option<Vec<u16>>> = Remapper {
|
||||
version: JavaMinecraftVersion::V_26_1,
|
||||
remapper: |first, second| match (first, second) {
|
||||
@@ -72,7 +71,7 @@ pub fn build() -> TokenStream {
|
||||
},
|
||||
serializer: |&file| {
|
||||
ParsedMappings::parse_mapping_file(file, "blockstates")
|
||||
.map(|mappings| mappings.invert_with_default_to_u16(file))
|
||||
.map(|mappings| mappings.to_u16(file))
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -9,45 +9,49 @@ use crate::version::JavaMinecraftVersion;
|
||||
pub fn build() -> TokenStream {
|
||||
let node_1_20_5 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_20_5,
|
||||
value: "../assets/viaversion/data/mappings-1.20.5to1.21.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21to1.20.5.nbt",
|
||||
child: None,
|
||||
};
|
||||
let node_1_21 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21,
|
||||
value: "../assets/viaversion/data/mappings-1.21to1.21.2.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.2to1.21.nbt",
|
||||
child: Some(&node_1_20_5),
|
||||
};
|
||||
let node_1_21_2 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_2,
|
||||
value: "../assets/viaversion/data/mappings-1.21.2to1.21.4.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.4to1.21.2.nbt",
|
||||
child: Some(&node_1_21),
|
||||
};
|
||||
let node_1_21_4 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_4,
|
||||
value: "../assets/viaversion/data/mappings-1.21.4to1.21.5.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.5to1.21.4.nbt",
|
||||
child: Some(&node_1_21_2),
|
||||
};
|
||||
let node_1_21_5 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_5,
|
||||
value: "../assets/viaversion/data/mappings-1.21.5to1.21.6.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.6to1.21.5.nbt",
|
||||
child: Some(&node_1_21_4),
|
||||
};
|
||||
let node_1_21_6 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_6,
|
||||
value: "../assets/viaversion/data/mappings-1.21.6to1.21.7.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.7to1.21.6.nbt",
|
||||
child: Some(&node_1_21_5),
|
||||
};
|
||||
let node_1_21_7 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_7,
|
||||
value: "../assets/viaversion/data/mappings-1.21.7to1.21.9.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.9to1.21.7.nbt",
|
||||
child: Some(&node_1_21_6),
|
||||
};
|
||||
let node_1_21_9 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_9,
|
||||
value: "../assets/viaversion/data/mappings-1.21.9to1.21.11.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.11to1.21.9.nbt",
|
||||
child: Some(&node_1_21_7),
|
||||
};
|
||||
|
||||
let node_1_21_11 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_11,
|
||||
value: "../assets/viabackwards/data/mappings-26.1to1.21.11.nbt",
|
||||
child: Some(&node_1_21_9),
|
||||
};
|
||||
let remapper: Remapper<_, Option<Vec<u16>>> = Remapper {
|
||||
version: JavaMinecraftVersion::V_26_1,
|
||||
remapper: |first, second| match (first, second) {
|
||||
@@ -57,33 +61,31 @@ pub fn build() -> TokenStream {
|
||||
.map(|id| second.get(usize::from(*id)).copied().unwrap_or(0))
|
||||
.collect(),
|
||||
),
|
||||
(None, Some(second)) => Some(
|
||||
(0..second.len())
|
||||
.map(|id| second.get(id).copied().unwrap_or(0))
|
||||
.collect(),
|
||||
),
|
||||
(None, Some(second)) => Some(second.clone()),
|
||||
(Some(first), None) => Some(first.clone()),
|
||||
_ => None,
|
||||
},
|
||||
serializer: |&file| {
|
||||
ParsedMappings::parse_mapping_file(file, "entities")
|
||||
.map(|mappings| mappings.invert_with_default_to_u16(file))
|
||||
.map(|mappings| mappings.to_u16(file))
|
||||
},
|
||||
};
|
||||
|
||||
let all_mappings = remapper.process(&node_1_21_9);
|
||||
let all_mappings = remapper.process(&node_1_21_11);
|
||||
|
||||
let mut static_values = TokenStream::new();
|
||||
let mut match_arms = TokenStream::new();
|
||||
|
||||
for (ver, mapping) in &all_mappings {
|
||||
let Some(mapping) = mapping else {
|
||||
continue;
|
||||
};
|
||||
|
||||
let ident = format_ident!(
|
||||
"{}",
|
||||
format!("ENTITY_ID_REMAP_{:?}_TO_{:?}", remapper.version, ver).to_uppercase()
|
||||
);
|
||||
let mapping_tokens: Vec<_> = mapping
|
||||
.as_ref()
|
||||
.unwrap()
|
||||
.iter()
|
||||
.copied()
|
||||
.map(Literal::u16_unsuffixed)
|
||||
|
||||
@@ -4,103 +4,97 @@ use quote::{format_ident, quote};
|
||||
use crate::remap::{MappingNode, ParsedMappings, Remapper};
|
||||
use crate::version::JavaMinecraftVersion;
|
||||
|
||||
/// Computes the inverse of an item ID mapping table, mapping new IDs back to old IDs.
|
||||
///
|
||||
/// # Arguments
|
||||
/// - `mapping` – Forward mapping slice where index is the old ID and value is the new ID.
|
||||
/// - `mapped_size` – Length of the output table (number of IDs in the new version).
|
||||
///
|
||||
/// # Returns
|
||||
/// A `Vec<u16>` of length `mapped_size` where index is the new ID and value is the old ID.
|
||||
fn reverse_mapping(mapping: &[u16], mapped_size: usize) -> Vec<u16> {
|
||||
let mut result = vec![0; mapped_size];
|
||||
for i in 0..mapped_size {
|
||||
result[mapping.get(i).copied().unwrap_or(i as u16) as usize] = i as u16;
|
||||
}
|
||||
result
|
||||
}
|
||||
|
||||
/// Generates the `TokenStream` for per-version item ID remap tables and the
|
||||
/// `remap_item_id_for_version`/`remap_item_id_from_version` functions.
|
||||
pub fn build() -> TokenStream {
|
||||
// ViaBackwards mappings go new → old (26.1 → 1.21.11 → ... → 1.20.5)
|
||||
// This is the correct direction for a new server sending to old clients.
|
||||
let node_1_20_5 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_20_5,
|
||||
value: "../assets/viaversion/data/mappings-1.20.5to1.21.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21to1.20.5.nbt",
|
||||
child: None,
|
||||
};
|
||||
let node_1_21 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21,
|
||||
value: "../assets/viaversion/data/mappings-1.21to1.21.2.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.2to1.21.nbt",
|
||||
child: Some(&node_1_20_5),
|
||||
};
|
||||
let node_1_21_2 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_2,
|
||||
value: "../assets/viaversion/data/mappings-1.21.2to1.21.4.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.4to1.21.2.nbt",
|
||||
child: Some(&node_1_21),
|
||||
};
|
||||
let node_1_21_4 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_4,
|
||||
value: "../assets/viaversion/data/mappings-1.21.4to1.21.5.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.5to1.21.4.nbt",
|
||||
child: Some(&node_1_21_2),
|
||||
};
|
||||
let node_1_21_5 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_5,
|
||||
value: "../assets/viaversion/data/mappings-1.21.5to1.21.6.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.6to1.21.5.nbt",
|
||||
child: Some(&node_1_21_4),
|
||||
};
|
||||
let node_1_21_6 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_6,
|
||||
value: "../assets/viaversion/data/mappings-1.21.6to1.21.7.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.7to1.21.6.nbt",
|
||||
child: Some(&node_1_21_5),
|
||||
};
|
||||
let node_1_21_7 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_7,
|
||||
value: "../assets/viaversion/data/mappings-1.21.7to1.21.9.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.9to1.21.7.nbt",
|
||||
child: Some(&node_1_21_6),
|
||||
};
|
||||
let node_1_21_9 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_9,
|
||||
value: "../assets/viaversion/data/mappings-1.21.9to1.21.11.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.11to1.21.9.nbt",
|
||||
child: Some(&node_1_21_7),
|
||||
};
|
||||
let node_1_21_11 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_11,
|
||||
value: "../assets/viaversion/data/mappings-1.21.11to26.1.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-26.1to1.21.11.nbt",
|
||||
child: Some(&node_1_21_9),
|
||||
};
|
||||
|
||||
let remapper: Remapper<_, Option<Vec<u16>>> = Remapper {
|
||||
version: JavaMinecraftVersion::V_26_1,
|
||||
remapper: |first, second| match (first, second) {
|
||||
(Some(first), Some(second)) => Some(
|
||||
first
|
||||
.iter()
|
||||
.map(|id| second.get(usize::from(*id)).copied().unwrap_or(*id))
|
||||
.map(|id| second.get(usize::from(*id)).copied().unwrap_or(0))
|
||||
.collect(),
|
||||
),
|
||||
(None, Some(second)) => Some(
|
||||
(0..second.len())
|
||||
.map(|id| second.get(id).copied().unwrap_or(id as u16))
|
||||
.map(|id| second.get(id).copied().unwrap_or(0))
|
||||
.collect(),
|
||||
),
|
||||
(Some(first), None) => Some(first.clone()),
|
||||
_ => None,
|
||||
},
|
||||
serializer: |&file| {
|
||||
ParsedMappings::parse_mapping_file(file, "items")
|
||||
.map(|mappings| mappings.invert_with_default_to_u16(file))
|
||||
ParsedMappings::parse_mapping_file(file, "items").map(|mappings| mappings.to_u16(file))
|
||||
},
|
||||
};
|
||||
|
||||
let all_mappings = remapper.process(&node_1_21_11);
|
||||
let mapping_size = all_mappings
|
||||
.iter()
|
||||
.map(|(_, mapping)| mapping.as_ref().map(|x| x.len()).unwrap_or(0))
|
||||
.flat_map(|(_, mapping)| {
|
||||
mapping
|
||||
.as_ref()
|
||||
.map(|m| m.iter().copied().max().unwrap_or(0))
|
||||
})
|
||||
.max()
|
||||
.unwrap_or(0);
|
||||
.unwrap_or(0) as usize
|
||||
+ 1;
|
||||
|
||||
let mut static_values = TokenStream::new();
|
||||
let mut match_arms_id_for_ver = TokenStream::new();
|
||||
let mut match_arms_id_from_ver = TokenStream::new();
|
||||
|
||||
for (ver, mapping) in &all_mappings {
|
||||
// Forward: 26.1 → old version (for sending to old clients)
|
||||
{
|
||||
let ident = format_ident!(
|
||||
"{}",
|
||||
@@ -123,6 +117,7 @@ pub fn build() -> TokenStream {
|
||||
.unwrap_or(item_id),
|
||||
});
|
||||
}
|
||||
// Reverse: old version → 26.1 (for receiving from old clients)
|
||||
{
|
||||
let reversed = reverse_mapping(mapping.as_ref().unwrap(), mapping_size);
|
||||
let ident = format_ident!(
|
||||
@@ -165,3 +160,14 @@ pub fn build() -> TokenStream {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn reverse_mapping(mapping: &[u16], mapped_size: usize) -> Vec<u16> {
|
||||
let mut result = vec![0u16; mapped_size];
|
||||
for (new_id, old_id) in mapping.iter().enumerate() {
|
||||
let old_id = *old_id as usize;
|
||||
if old_id != 0 && old_id < mapped_size {
|
||||
result[old_id] = new_id as u16;
|
||||
}
|
||||
}
|
||||
result
|
||||
}
|
||||
|
||||
@@ -210,7 +210,7 @@ impl ParsedMappings {
|
||||
///
|
||||
/// # Returns
|
||||
/// A `Vec<u16>` of length `self.mapped_size` mapping new IDs back to old IDs.
|
||||
pub fn invert_with_default_to_u16(&self, name: &str) -> Vec<u16> {
|
||||
pub fn _invert_with_default_to_u16(&self, name: &str) -> Vec<u16> {
|
||||
let mut inverse = vec![0u16; self.mapped_size];
|
||||
let mut seen = vec![false; self.mapped_size];
|
||||
|
||||
@@ -237,4 +237,20 @@ impl ParsedMappings {
|
||||
|
||||
inverse
|
||||
}
|
||||
|
||||
/// Converts the forward mapping directly to a u16 table.
|
||||
/// Used with ViaBackwards mappings which are already in new→old direction.
|
||||
pub fn to_u16(&self, name: &str) -> Vec<u16> {
|
||||
self.forward
|
||||
.iter()
|
||||
.map(|&id| {
|
||||
if id < 0 {
|
||||
0 // unmapped → air
|
||||
} else {
|
||||
u16::try_from(id)
|
||||
.unwrap_or_else(|_| panic!("{name}: id {id} does not fit in u16"))
|
||||
}
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,47 +9,47 @@ use crate::version::JavaMinecraftVersion;
|
||||
pub fn build() -> TokenStream {
|
||||
let node_1_20_5 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_20_5,
|
||||
value: "../assets/viaversion/data/mappings-1.20.5to1.21.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21to1.20.5.nbt",
|
||||
child: None,
|
||||
};
|
||||
let node_1_21 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21,
|
||||
value: "../assets/viaversion/data/mappings-1.21to1.21.2.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.2to1.21.nbt",
|
||||
child: Some(&node_1_20_5),
|
||||
};
|
||||
let node_1_21_2 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_2,
|
||||
value: "../assets/viaversion/data/mappings-1.21.2to1.21.4.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.4to1.21.2.nbt",
|
||||
child: Some(&node_1_21),
|
||||
};
|
||||
let node_1_21_4 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_4,
|
||||
value: "../assets/viaversion/data/mappings-1.21.4to1.21.5.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.5to1.21.4.nbt",
|
||||
child: Some(&node_1_21_2),
|
||||
};
|
||||
let node_1_21_5 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_5,
|
||||
value: "../assets/viaversion/data/mappings-1.21.5to1.21.6.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.6to1.21.5.nbt",
|
||||
child: Some(&node_1_21_4),
|
||||
};
|
||||
let node_1_21_6 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_6,
|
||||
value: "../assets/viaversion/data/mappings-1.21.6to1.21.7.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.7to1.21.6.nbt",
|
||||
child: Some(&node_1_21_5),
|
||||
};
|
||||
let node_1_21_7 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_7,
|
||||
value: "../assets/viaversion/data/mappings-1.21.7to1.21.9.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.9to1.21.7.nbt",
|
||||
child: Some(&node_1_21_6),
|
||||
};
|
||||
let node_1_21_9 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_9,
|
||||
value: "../assets/viaversion/data/mappings-1.21.9to1.21.11.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-1.21.11to1.21.9.nbt",
|
||||
child: Some(&node_1_21_7),
|
||||
};
|
||||
let node_1_21_11 = MappingNode {
|
||||
version: JavaMinecraftVersion::V_1_21_11,
|
||||
value: "../assets/viaversion/data/mappings-1.21.11to26.1.nbt",
|
||||
value: "../assets/viabackwards/data/mappings-26.1to1.21.11.nbt",
|
||||
child: Some(&node_1_21_9),
|
||||
};
|
||||
let remapper: Remapper<_, Option<Vec<u16>>> = Remapper {
|
||||
@@ -58,20 +58,19 @@ pub fn build() -> TokenStream {
|
||||
(Some(first), Some(second)) => Some(
|
||||
first
|
||||
.iter()
|
||||
.map(|id| second.get(usize::from(*id)).copied().unwrap_or(*id))
|
||||
.map(|id| second.get(usize::from(*id)).copied().unwrap_or(0))
|
||||
.collect(),
|
||||
),
|
||||
(None, Some(second)) => Some(
|
||||
(0..second.len())
|
||||
.map(|id| second.get(id).copied().unwrap_or(id as u16))
|
||||
.map(|id| second.get(id).copied().unwrap_or(0))
|
||||
.collect(),
|
||||
),
|
||||
(Some(first), None) => Some(first.clone()),
|
||||
_ => None,
|
||||
},
|
||||
serializer: |&file| {
|
||||
ParsedMappings::parse_mapping_file(file, "sounds")
|
||||
.map(|mappings| mappings.invert_with_default_to_u16(file))
|
||||
ParsedMappings::parse_mapping_file(file, "sounds").map(|mappings| mappings.to_u16(file))
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -96,28 +96,27 @@ 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();
|
||||
let mut generated_names = std::collections::HashSet::new();
|
||||
|
||||
let latest_data = versions.get(&LATEST_VERSION).unwrap();
|
||||
for name in latest_data.keys() {
|
||||
let name_upper = name.to_uppercase();
|
||||
let final_name = if let Some(stripped) = name_upper.strip_prefix("DATA_") {
|
||||
stripped.to_string()
|
||||
} else {
|
||||
name_upper.to_string()
|
||||
};
|
||||
|
||||
if !generated_names.insert(final_name.clone()) {
|
||||
continue;
|
||||
}
|
||||
// Union of all normalized names across every version
|
||||
let all_names: std::collections::BTreeSet<String> = versions
|
||||
.values()
|
||||
.flat_map(|data| data.keys().map(|k| normalize_name(k)))
|
||||
.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 mut fields = TokenStream::new();
|
||||
for (ver, data) in versions.iter() {
|
||||
let field_ident = ver.to_field_ident();
|
||||
// 255 as an 'Invalid' marker
|
||||
let id = data.get(name).copied().unwrap_or(255);
|
||||
let id = data
|
||||
.get(final_name.as_str())
|
||||
.or_else(|| data.get(prefixed.as_str()))
|
||||
.copied()
|
||||
.unwrap_or(255);
|
||||
fields.extend(quote! {
|
||||
#field_ident: #id,
|
||||
});
|
||||
@@ -130,3 +129,10 @@ fn generate_consts(versions: &BTreeMap<JavaMinecraftVersion, BTreeMap<String, u8
|
||||
|
||||
constants
|
||||
}
|
||||
|
||||
fn normalize_name(name: &str) -> String {
|
||||
let upper = name.to_uppercase();
|
||||
upper
|
||||
.strip_prefix("DATA_")
|
||||
.map_or(upper.clone(), str::to_string)
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -512,11 +512,9 @@ impl StatusEffect {
|
||||
}
|
||||
}
|
||||
impl IDSetContent for StatusEffect {
|
||||
|
||||
fn registry_id(&self) -> u16 {
|
||||
self.id as u16
|
||||
}
|
||||
|
||||
fn from_id(id: u16) -> Option<&'static Self> {
|
||||
match id {
|
||||
21u16 => Some(&Self::ABSORPTION),
|
||||
@@ -562,11 +560,9 @@ impl IDSetContent for StatusEffect {
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
fn from_str(name: &str) -> Option<&'static Self> {
|
||||
Self::from_minecraft_name(name)
|
||||
}
|
||||
|
||||
fn to_string(&self) -> String {
|
||||
self.minecraft_name.to_string()
|
||||
}
|
||||
|
||||
@@ -1,81 +1,81 @@
|
||||
/* This file is generated. Do not edit manually. */
|
||||
pub static ENTITY_ID_REMAP_V_26_1_TO_V_1_20_5: &[u16] = &[
|
||||
0, 1, 0, 1, 2, 3, 4, 5, 8, 9, 6, 7, 12, 13, 8, 9, 11, 12, 13, 14, 15, 15, 16, 22, 23, 18, 19,
|
||||
20, 21, 21, 22, 29, 23, 32, 33, 24, 25, 26, 27, 28, 29, 33, 34, 31, 32, 30, 35, 36, 37, 38, 39,
|
||||
40, 62, 41, 42, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 72,
|
||||
73, 63, 64, 65, 66, 67, 79, 80, 69, 68, 69, 70, 71, 17, 10, 17, 72, 61, 73, 90, 91, 74, 77, 75,
|
||||
76, 77, 78, 79, 80, 81, 82, 83, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97, 96, 98,
|
||||
99, 100, 119, 120, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
|
||||
116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 129, 126, 127, 128, 129,
|
||||
10, 17, 0, 1, 2, 3, 4, 5, 17, 10, 6, 7, 10, 17, 8, 9, 11, 12, 13, 14, 14, 15, 16, 10, 17, 18,
|
||||
19, 20, 43, 21, 22, 116, 23, 10, 17, 24, 25, 26, 27, 28, 29, 33, 34, 31, 32, 30, 35, 36, 37,
|
||||
38, 39, 40, 62, 41, 42, 43, 44, 45, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
|
||||
60, 10, 17, 63, 64, 65, 66, 67, 10, 17, 128, 68, 69, 70, 71, 101, 10, 17, 72, 61, 73, 10, 17,
|
||||
74, 91, 75, 76, 77, 78, 79, 80, 81, 82, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
|
||||
97, 96, 98, 99, 100, 10, 17, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
|
||||
114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 48, 126, 127, 128, 129,
|
||||
];
|
||||
pub static ENTITY_ID_REMAP_V_26_1_TO_V_1_21: &[u16] = &[
|
||||
0, 1, 0, 1, 2, 3, 4, 5, 8, 9, 6, 7, 12, 13, 8, 9, 11, 12, 13, 14, 15, 15, 16, 22, 23, 18, 19,
|
||||
20, 21, 21, 22, 29, 23, 32, 33, 24, 25, 26, 27, 28, 29, 33, 34, 31, 32, 30, 35, 36, 37, 38, 39,
|
||||
40, 62, 41, 42, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 72,
|
||||
73, 63, 64, 65, 66, 67, 79, 80, 69, 68, 69, 70, 71, 17, 10, 17, 72, 61, 73, 90, 91, 74, 77, 75,
|
||||
76, 77, 78, 79, 80, 81, 82, 83, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97, 96, 98,
|
||||
99, 100, 119, 120, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
|
||||
116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 129, 126, 127, 128, 129,
|
||||
10, 17, 0, 1, 2, 3, 4, 5, 17, 10, 6, 7, 10, 17, 8, 9, 11, 12, 13, 14, 14, 15, 16, 10, 17, 18,
|
||||
19, 20, 43, 21, 22, 116, 23, 10, 17, 24, 25, 26, 27, 28, 29, 33, 34, 31, 32, 30, 35, 36, 37,
|
||||
38, 39, 40, 62, 41, 42, 43, 44, 45, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
|
||||
60, 10, 17, 63, 64, 65, 66, 67, 10, 17, 128, 68, 69, 70, 71, 101, 10, 17, 72, 61, 73, 10, 17,
|
||||
74, 91, 75, 76, 77, 78, 79, 80, 81, 82, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
|
||||
97, 96, 98, 99, 100, 10, 17, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
|
||||
114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 48, 126, 127, 128, 129,
|
||||
];
|
||||
pub static ENTITY_ID_REMAP_V_26_1_TO_V_1_21_2: &[u16] = &[
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 20, 21, 22, 23, 24,
|
||||
25, 26, 27, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
|
||||
49, 50, 51, 52, 53, 54, 55, 56, 57, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
|
||||
72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 81, 82, 83, 84, 86, 85, 86, 87, 88, 89, 90, 91, 92, 95,
|
||||
93, 94, 95, 96, 97, 98, 99, 100, 101, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
|
||||
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
|
||||
131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 149, 146, 147, 148,
|
||||
149,
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 23, 24,
|
||||
25, 26, 54, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
|
||||
49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
|
||||
72, 73, 74, 75, 76, 77, 78, 79, 80, 148, 81, 82, 83, 84, 121, 85, 86, 87, 88, 89, 90, 91, 92,
|
||||
109, 93, 94, 95, 96, 97, 98, 99, 100, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
|
||||
111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
|
||||
130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 59, 146, 147,
|
||||
148, 149,
|
||||
];
|
||||
pub static ENTITY_ID_REMAP_V_26_1_TO_V_1_21_4: &[u16] = &[
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 20, 21, 22, 23, 24,
|
||||
25, 26, 27, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
|
||||
48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
|
||||
71, 72, 73, 74, 75, 76, 77, 78, 79, 81, 80, 81, 82, 83, 85, 84, 85, 86, 87, 88, 89, 90, 91, 94,
|
||||
92, 93, 94, 95, 96, 97, 98, 99, 100, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 23, 24,
|
||||
25, 26, 53, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
|
||||
48, 49, 50, 51, 52, 53, 54, 55, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
|
||||
71, 72, 73, 74, 75, 76, 77, 78, 79, 147, 80, 81, 82, 83, 120, 84, 85, 86, 87, 88, 89, 90, 91,
|
||||
108, 92, 93, 94, 95, 96, 97, 98, 99, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
|
||||
111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
|
||||
130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 148, 145, 146, 147,
|
||||
130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 58, 145, 146, 147,
|
||||
148,
|
||||
];
|
||||
pub static ENTITY_ID_REMAP_V_26_1_TO_V_1_21_5: &[u16] = &[
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 20, 21, 22, 23, 24,
|
||||
25, 26, 27, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
|
||||
48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
|
||||
71, 72, 73, 74, 75, 76, 77, 78, 79, 81, 80, 81, 82, 83, 85, 84, 85, 86, 87, 88, 89, 90, 91, 94,
|
||||
92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
|
||||
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
|
||||
131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 149, 146, 147, 148,
|
||||
149,
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 23, 24,
|
||||
25, 26, 53, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
|
||||
48, 49, 50, 51, 52, 53, 54, 55, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
|
||||
71, 72, 73, 74, 75, 76, 77, 78, 79, 148, 80, 81, 82, 83, 121, 84, 85, 86, 87, 88, 89, 90, 91,
|
||||
109, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
|
||||
111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
|
||||
130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 58, 146, 147,
|
||||
148, 149,
|
||||
];
|
||||
pub static ENTITY_ID_REMAP_V_26_1_TO_V_1_21_6: &[u16] = &[
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 20, 21, 22, 23, 24,
|
||||
25, 26, 27, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 23, 24,
|
||||
25, 26, 53, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
|
||||
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
|
||||
72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 81, 82, 83, 84, 86, 85, 86, 87, 88, 89, 90, 91, 92, 95,
|
||||
93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
|
||||
113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
|
||||
132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 150, 147, 148, 149,
|
||||
150,
|
||||
72, 73, 74, 75, 76, 77, 78, 79, 80, 149, 81, 82, 83, 84, 122, 85, 86, 87, 88, 89, 90, 91, 92,
|
||||
110, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
|
||||
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
|
||||
131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 59, 147, 148,
|
||||
149, 150,
|
||||
];
|
||||
pub static ENTITY_ID_REMAP_V_26_1_TO_V_1_21_7: &[u16] = &[
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 20, 21, 22, 23, 24,
|
||||
25, 26, 27, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 23, 24,
|
||||
25, 26, 53, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
|
||||
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
|
||||
72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 81, 82, 83, 84, 86, 85, 86, 87, 88, 89, 90, 91, 92, 95,
|
||||
93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
|
||||
113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
|
||||
132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 150, 147, 148, 149,
|
||||
150,
|
||||
72, 73, 74, 75, 76, 77, 78, 79, 80, 149, 81, 82, 83, 84, 122, 85, 86, 87, 88, 89, 90, 91, 92,
|
||||
110, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
|
||||
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
|
||||
131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 59, 147, 148,
|
||||
149, 150,
|
||||
];
|
||||
pub static ENTITY_ID_REMAP_V_26_1_TO_V_1_21_9: &[u16] = &[
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 20, 21, 22, 23, 24,
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 23, 24,
|
||||
25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
|
||||
49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
|
||||
73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 87, 88, 89, 90, 91, 92, 93, 94, 97,
|
||||
95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
|
||||
115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
|
||||
134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 152, 149, 150, 151,
|
||||
152,
|
||||
73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 124, 87, 88, 89, 90, 91, 92, 93, 94,
|
||||
112, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
|
||||
114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
|
||||
133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 60, 149, 150,
|
||||
151, 152,
|
||||
];
|
||||
#[must_use]
|
||||
pub fn remap_entity_id_for_version(
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -57,7 +57,6 @@ pub enum CookingRecipeKind {
|
||||
CampfireCooking,
|
||||
}
|
||||
impl From<&CookingRecipeType> for CookingRecipeKind {
|
||||
|
||||
fn from(recipe_type: &CookingRecipeType) -> Self {
|
||||
match recipe_type {
|
||||
CookingRecipeType::Blasting(_) => Self::Blasting,
|
||||
@@ -68,7 +67,6 @@ impl From<&CookingRecipeType> for CookingRecipeKind {
|
||||
}
|
||||
}
|
||||
impl From<CookingRecipeType> for CookingRecipeKind {
|
||||
|
||||
fn from(recipe_type: CookingRecipeType) -> Self {
|
||||
match recipe_type {
|
||||
CookingRecipeType::Blasting(_) => Self::Blasting,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,8 +1,9 @@
|
||||
use std::io::{Cursor, Write};
|
||||
|
||||
use pumpkin_data::{
|
||||
block_state_remap::remap_block_state_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::TrackedId,
|
||||
};
|
||||
use pumpkin_macros::java_packet;
|
||||
use pumpkin_util::version::JavaMinecraftVersion;
|
||||
@@ -112,6 +113,38 @@ impl<T> Metadata<T> {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
if self.r#type == MetaDataType::ITEM_STACK {
|
||||
let mut serialized_value = Vec::new();
|
||||
{
|
||||
let mut serializer = serializer::Serializer::new(&mut serialized_value);
|
||||
self.value
|
||||
.serialize(&mut serializer)
|
||||
.map_err(|e| WritingError::Serde(e.to_string()))?;
|
||||
};
|
||||
|
||||
let mut cursor = Cursor::new(serialized_value);
|
||||
let item_count = VarInt::decode(&mut cursor).map_err(|e| {
|
||||
WritingError::Message(format!("Failed to decodeitem stack count: {e}"))
|
||||
})?;
|
||||
|
||||
if item_count.0 <= 0 {
|
||||
writer.write_var_int(&item_count)?;
|
||||
} else {
|
||||
let item_id = VarInt::decode(&mut cursor)
|
||||
.map_err(|e| WritingError::Message(format!("Failed to decode item id: {e}")))?;
|
||||
let remapped_id = u16::try_from(item_id.0)
|
||||
.map_or(0, |id| remap_item_id_for_version(id, *version));
|
||||
writer.write_var_int(&item_count)?;
|
||||
writer.write_var_int(&VarInt(i32::from(remapped_id)))?;
|
||||
let remainder_start = cursor.position() as usize;
|
||||
let inner = cursor.into_inner();
|
||||
writer.write_all(&inner[remainder_start..]).map_err(|e| {
|
||||
WritingError::Message(format!("Failed to write item stack remainder: {e}"))
|
||||
})?;
|
||||
}
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let mut serializer = serializer::Serializer::new(&mut writer);
|
||||
self.value
|
||||
.serialize(&mut serializer)
|
||||
|
||||
@@ -461,7 +461,7 @@ impl LootConditionExt for LootCondition {
|
||||
| Self::EnchantmentActiveCheck { .. }
|
||||
| Self::LocationCheck { .. } => {
|
||||
// TODO: Implement these
|
||||
true
|
||||
false
|
||||
}
|
||||
Self::TimeCheck { range, period } => {
|
||||
let mut time = params.world_time;
|
||||
|
||||
Reference in New Issue
Block a user