1
2
Fork 0
mirror of https://github.com/mat-1/azalea.git synced 2025-08-02 14:26:04 +00:00
* 24w18a (data driven enchantments not implemented yet)

* 1.21
This commit is contained in:
mat 2024-06-13 19:52:05 -05:00 committed by GitHub
parent 38eab50b4f
commit f66d2d4767
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 652 additions and 131 deletions

View file

@ -11,7 +11,7 @@ A collection of Rust crates for making Minecraft bots, clients, and tools.
<!-- The line below is automatically read and updated by the migrate script, so don't change it manually. --> <!-- The line below is automatically read and updated by the migrate script, so don't change it manually. -->
_Currently supported Minecraft version: `1.20.6`._ _Currently supported Minecraft version: `1.21`._
> [!WARNING] > [!WARNING]
> Azalea is still very unfinished, though most crates are in a somewhat useable state > Azalea is still very unfinished, though most crates are in a somewhat useable state

View file

@ -365,10 +365,7 @@ fn update_modifiers_for_held_item(
}; };
attributes attributes
.attack_speed .attack_speed
.remove(&azalea_entity::attributes::BASE_ATTACK_SPEED_UUID); .insert(azalea_entity::attributes::base_attack_speed_modifier(
attributes
.attack_speed
.insert(azalea_entity::attributes::tool_attack_speed_modifier(
added_attack_speed, added_attack_speed,
)) ))
.unwrap(); .unwrap();

View file

@ -463,7 +463,7 @@ fn set_sprinting(
} else { } else {
attributes attributes
.speed .speed
.remove(&azalea_entity::attributes::sprinting_modifier().uuid) .remove(&azalea_entity::attributes::sprinting_modifier().id)
.is_none() .is_none()
} }
} }

View file

@ -1,14 +1,11 @@
//! See <https://minecraft.fandom.com/wiki/Attribute>. //! See <https://minecraft.fandom.com/wiki/Attribute>.
use std::{ use std::collections::HashMap;
collections::HashMap,
io::{Cursor, Write},
};
use azalea_buf::{BufReadError, McBuf, McBufReadable, McBufWritable}; use azalea_buf::McBuf;
use azalea_core::resource_location::ResourceLocation;
use bevy_ecs::component::Component; use bevy_ecs::component::Component;
use thiserror::Error; use thiserror::Error;
use uuid::{uuid, Uuid};
#[derive(Clone, Debug, Component)] #[derive(Clone, Debug, Component)]
pub struct Attributes { pub struct Attributes {
@ -19,7 +16,7 @@ pub struct Attributes {
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct AttributeInstance { pub struct AttributeInstance {
pub base: f64, pub base: f64,
modifiers_by_uuid: HashMap<Uuid, AttributeModifier>, modifiers_by_id: HashMap<ResourceLocation, AttributeModifier>,
} }
#[derive(Clone, Debug, Error)] #[derive(Clone, Debug, Error)]
@ -30,13 +27,13 @@ impl AttributeInstance {
pub fn new(base: f64) -> Self { pub fn new(base: f64) -> Self {
Self { Self {
base, base,
modifiers_by_uuid: HashMap::new(), modifiers_by_id: HashMap::new(),
} }
} }
pub fn calculate(&self) -> f64 { pub fn calculate(&self) -> f64 {
let mut total = self.base; let mut total = self.base;
for modifier in self.modifiers_by_uuid.values() { for modifier in self.modifiers_by_id.values() {
match modifier.operation { match modifier.operation {
AttributeModifierOperation::Addition => total += modifier.amount, AttributeModifierOperation::Addition => total += modifier.amount,
AttributeModifierOperation::MultiplyBase => total += self.base * modifier.amount, AttributeModifierOperation::MultiplyBase => total += self.base * modifier.amount,
@ -52,8 +49,8 @@ impl AttributeInstance {
/// Add a new modifier to this attribute. /// Add a new modifier to this attribute.
pub fn insert(&mut self, modifier: AttributeModifier) -> Result<(), AlreadyPresentError> { pub fn insert(&mut self, modifier: AttributeModifier) -> Result<(), AlreadyPresentError> {
if self if self
.modifiers_by_uuid .modifiers_by_id
.insert(modifier.uuid, modifier) .insert(modifier.id.clone(), modifier)
.is_some() .is_some()
{ {
Err(AlreadyPresentError) Err(AlreadyPresentError)
@ -62,17 +59,16 @@ impl AttributeInstance {
} }
} }
/// Remove the modifier with the given UUID from this attribute, returning /// Remove the modifier with the given ID from this attribute, returning
/// the previous modifier is present. /// the previous modifier is present.
pub fn remove(&mut self, uuid: &Uuid) -> Option<AttributeModifier> { pub fn remove(&mut self, id: &ResourceLocation) -> Option<AttributeModifier> {
self.modifiers_by_uuid.remove(uuid) self.modifiers_by_id.remove(id)
} }
} }
#[derive(Clone, Debug)] #[derive(Clone, Debug, McBuf)]
pub struct AttributeModifier { pub struct AttributeModifier {
pub uuid: Uuid, pub id: ResourceLocation,
pub name: String,
pub amount: f64, pub amount: f64,
pub operation: AttributeModifierOperation, pub operation: AttributeModifierOperation,
} }
@ -86,50 +82,16 @@ pub enum AttributeModifierOperation {
pub fn sprinting_modifier() -> AttributeModifier { pub fn sprinting_modifier() -> AttributeModifier {
AttributeModifier { AttributeModifier {
uuid: uuid!("662A6B8D-DA3E-4C1C-8813-96EA6097278D"), id: ResourceLocation::new("sprinting"),
name: "Sprinting speed boost".to_string(),
amount: 0.30000001192092896, amount: 0.30000001192092896,
operation: AttributeModifierOperation::MultiplyTotal, operation: AttributeModifierOperation::MultiplyTotal,
} }
} }
pub static BASE_ATTACK_SPEED_UUID: Uuid = uuid!("FA233E1C-4180-4865-B01B-BCCE9785ACA3"); pub fn base_attack_speed_modifier(amount: f64) -> AttributeModifier {
pub fn weapon_attack_speed_modifier(amount: f64) -> AttributeModifier {
AttributeModifier { AttributeModifier {
uuid: BASE_ATTACK_SPEED_UUID, id: ResourceLocation::new("base_attack_speed"),
name: "Weapon modifier".to_string(),
amount, amount,
operation: AttributeModifierOperation::Addition, operation: AttributeModifierOperation::Addition,
} }
} }
pub fn tool_attack_speed_modifier(amount: f64) -> AttributeModifier {
AttributeModifier {
uuid: BASE_ATTACK_SPEED_UUID,
name: "Tool modifier".to_string(),
amount,
operation: AttributeModifierOperation::Addition,
}
}
impl McBufReadable for AttributeModifier {
fn read_from(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
let uuid = Uuid::read_from(buf)?;
let amount = f64::read_from(buf)?;
let operation = AttributeModifierOperation::read_from(buf)?;
Ok(Self {
uuid,
name: "Unknown synced attribute modifier".to_string(),
amount,
operation,
})
}
}
impl McBufWritable for AttributeModifier {
fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
self.uuid.write_into(buf)?;
self.amount.write_into(buf)?;
self.operation.write_into(buf)?;
Ok(())
}
}

View file

@ -49,6 +49,8 @@ pub fn from_kind(
kind: azalea_registry::DataComponentKind, kind: azalea_registry::DataComponentKind,
buf: &mut Cursor<&[u8]>, buf: &mut Cursor<&[u8]>,
) -> Result<Box<dyn EncodableDataComponent>, BufReadError> { ) -> Result<Box<dyn EncodableDataComponent>, BufReadError> {
// if this is causing a compile-time error, look at DataComponents.java in the
// decompiled vanilla code to see how to implement new components
Ok(match kind { Ok(match kind {
DataComponentKind::CustomData => Box::new(CustomData::read_from(buf)?), DataComponentKind::CustomData => Box::new(CustomData::read_from(buf)?),
DataComponentKind::MaxStackSize => Box::new(MaxStackSize::read_from(buf)?), DataComponentKind::MaxStackSize => Box::new(MaxStackSize::read_from(buf)?),
@ -114,6 +116,7 @@ pub fn from_kind(
DataComponentKind::Bees => Box::new(Bees::read_from(buf)?), DataComponentKind::Bees => Box::new(Bees::read_from(buf)?),
DataComponentKind::Lock => Box::new(Lock::read_from(buf)?), DataComponentKind::Lock => Box::new(Lock::read_from(buf)?),
DataComponentKind::ContainerLoot => Box::new(ContainerLoot::read_from(buf)?), DataComponentKind::ContainerLoot => Box::new(ContainerLoot::read_from(buf)?),
DataComponentKind::JukeboxPlayable => todo!(),
}) })
} }
@ -654,3 +657,10 @@ pub struct ContainerLoot {
pub loot: NbtCompound, pub loot: NbtCompound,
} }
impl DataComponent for ContainerLoot {} impl DataComponent for ContainerLoot {}
#[derive(Clone, PartialEq, McBuf)]
pub struct JukeboxPlayable {
pub song: azalea_registry::JukeboxSong,
pub show_in_tooltip: bool,
}
impl DataComponent for JukeboxPlayable {}

View file

@ -337,6 +337,7 @@
"argument.entity.selector.allEntities": "All entities", "argument.entity.selector.allEntities": "All entities",
"argument.entity.selector.allPlayers": "All players", "argument.entity.selector.allPlayers": "All players",
"argument.entity.selector.missing": "Missing selector type", "argument.entity.selector.missing": "Missing selector type",
"argument.entity.selector.nearestEntity": "Nearest entity",
"argument.entity.selector.nearestPlayer": "Nearest player", "argument.entity.selector.nearestPlayer": "Nearest player",
"argument.entity.selector.not_allowed": "Selector not allowed", "argument.entity.selector.not_allowed": "Selector not allowed",
"argument.entity.selector.randomPlayer": "Random player", "argument.entity.selector.randomPlayer": "Random player",
@ -427,7 +428,9 @@
"attribute.name.generic.attack_knockback": "Attack Knockback", "attribute.name.generic.attack_knockback": "Attack Knockback",
"attribute.name.generic.attack_speed": "Attack Speed", "attribute.name.generic.attack_speed": "Attack Speed",
"attribute.name.generic.block_interaction_range": "Block Interaction Range", "attribute.name.generic.block_interaction_range": "Block Interaction Range",
"attribute.name.generic.burning_time": "Burning Time",
"attribute.name.generic.entity_interaction_range": "Entity Interaction Range", "attribute.name.generic.entity_interaction_range": "Entity Interaction Range",
"attribute.name.generic.explosion_knockback_resistance": "Explosion Knockback Resistance",
"attribute.name.generic.fall_damage_multiplier": "Fall Damage Multiplier", "attribute.name.generic.fall_damage_multiplier": "Fall Damage Multiplier",
"attribute.name.generic.flying_speed": "Flying Speed", "attribute.name.generic.flying_speed": "Flying Speed",
"attribute.name.generic.follow_range": "Mob Follow Range", "attribute.name.generic.follow_range": "Mob Follow Range",
@ -437,14 +440,21 @@
"attribute.name.generic.luck": "Luck", "attribute.name.generic.luck": "Luck",
"attribute.name.generic.max_absorption": "Max Absorption", "attribute.name.generic.max_absorption": "Max Absorption",
"attribute.name.generic.max_health": "Max Health", "attribute.name.generic.max_health": "Max Health",
"attribute.name.generic.movement_efficiency": "Movement Efficiency",
"attribute.name.generic.movement_speed": "Speed", "attribute.name.generic.movement_speed": "Speed",
"attribute.name.generic.oxygen_bonus": "Oxygen Bonus",
"attribute.name.generic.safe_fall_distance": "Safe Fall Distance", "attribute.name.generic.safe_fall_distance": "Safe Fall Distance",
"attribute.name.generic.scale": "Scale", "attribute.name.generic.scale": "Scale",
"attribute.name.generic.step_height": "Step Height", "attribute.name.generic.step_height": "Step Height",
"attribute.name.generic.water_movement_efficiency": "Water Movement Efficiency",
"attribute.name.horse.jump_strength": "Horse Jump Strength", "attribute.name.horse.jump_strength": "Horse Jump Strength",
"attribute.name.player.block_break_speed": "Block Break Speed", "attribute.name.player.block_break_speed": "Block Break Speed",
"attribute.name.player.block_interaction_range": "Block Interaction Range", "attribute.name.player.block_interaction_range": "Block Interaction Range",
"attribute.name.player.entity_interaction_range": "Entity Interaction Range", "attribute.name.player.entity_interaction_range": "Entity Interaction Range",
"attribute.name.player.mining_efficiency": "Mining Efficiency",
"attribute.name.player.sneaking_speed": "Sneaking Speed",
"attribute.name.player.submerged_mining_speed": "Submerged Mining Speed",
"attribute.name.player.sweeping_damage_ratio": "Sweeping Damage Ratio",
"attribute.name.zombie.spawn_reinforcements": "Zombie Reinforcements", "attribute.name.zombie.spawn_reinforcements": "Zombie Reinforcements",
"biome.minecraft.badlands": "Badlands", "biome.minecraft.badlands": "Badlands",
"biome.minecraft.bamboo_jungle": "Bamboo Jungle", "biome.minecraft.bamboo_jungle": "Bamboo Jungle",
@ -2285,8 +2295,8 @@
"chat.disabled.missingProfileKey": "Chat disabled due to missing profile public key. Please try reconnecting.", "chat.disabled.missingProfileKey": "Chat disabled due to missing profile public key. Please try reconnecting.",
"chat.disabled.options": "Chat disabled in client options.", "chat.disabled.options": "Chat disabled in client options.",
"chat.disabled.out_of_order_chat": "Chat received out-of-order. Did your system time change?", "chat.disabled.out_of_order_chat": "Chat received out-of-order. Did your system time change?",
"chat.disabled.profile": "Chat not allowed by account settings. Press '%s' again for more information.", "chat.disabled.profile": "Chat is not allowed by account settings. Press '%s' again for more information.",
"chat.disabled.profile.moreInfo": "Chat not allowed by account settings. Cannot send or view messages.", "chat.disabled.profile.moreInfo": "Chat is not allowed by account settings. Cannot send or view messages.",
"chat.editBox": "chat", "chat.editBox": "chat",
"chat.filtered": "Filtered by the server.", "chat.filtered": "Filtered by the server.",
"chat.filtered_full": "The server has hidden your message for some players.", "chat.filtered_full": "The server has hidden your message for some players.",
@ -3194,7 +3204,7 @@
"disconnect.timeout": "Timed out", "disconnect.timeout": "Timed out",
"disconnect.transfer": "Transferred to another server", "disconnect.transfer": "Transferred to another server",
"disconnect.unknownHost": "Unknown host", "disconnect.unknownHost": "Unknown host",
"download.pack.failed": "%s out of %s packs failed to download", "download.pack.failed": "%s out of %s pack(s) failed to download",
"download.pack.progress.bytes": "Progress: %s (total size unknown)", "download.pack.progress.bytes": "Progress: %s (total size unknown)",
"download.pack.progress.percent": "Progress: %s%%", "download.pack.progress.percent": "Progress: %s%%",
"download.pack.title": "Downloading resource pack %s/%s", "download.pack.title": "Downloading resource pack %s/%s",
@ -3491,7 +3501,7 @@
"filled_map.mansion": "Woodland Explorer Map", "filled_map.mansion": "Woodland Explorer Map",
"filled_map.monument": "Ocean Explorer Map", "filled_map.monument": "Ocean Explorer Map",
"filled_map.scale": "Scaling at 1:%s", "filled_map.scale": "Scaling at 1:%s",
"filled_map.trial_chambers": "Trial Chambers Map", "filled_map.trial_chambers": "Trial Explorer Map",
"filled_map.unknown": "Unknown Map", "filled_map.unknown": "Unknown Map",
"filled_map.village_desert": "Desert Village Map", "filled_map.village_desert": "Desert Village Map",
"filled_map.village_plains": "Plains Village Map", "filled_map.village_plains": "Plains Village Map",
@ -3546,12 +3556,14 @@
"gamerule.doTileDrops.description": "Controls resource drops from blocks, including experience orbs.", "gamerule.doTileDrops.description": "Controls resource drops from blocks, including experience orbs.",
"gamerule.doTraderSpawning": "Spawn Wandering Traders", "gamerule.doTraderSpawning": "Spawn Wandering Traders",
"gamerule.doVinesSpread": "Vines spread", "gamerule.doVinesSpread": "Vines spread",
"gamerule.doVinesSpread.description": "Controls whether or not the Vines block spreads randomly to adjacent blocks. Does not affect other type of vine blocks such as Weeping Vines, Twisting Vines, etc.", "gamerule.doVinesSpread.description": "Controls whether or not the Vines block spreads randomly to adjacent blocks. Does not affect other types of vine blocks such as Weeping Vines, Twisting Vines, etc.",
"gamerule.doWardenSpawning": "Spawn Wardens", "gamerule.doWardenSpawning": "Spawn Wardens",
"gamerule.doWeatherCycle": "Update weather", "gamerule.doWeatherCycle": "Update weather",
"gamerule.drowningDamage": "Deal drowning damage", "gamerule.drowningDamage": "Deal drowning damage",
"gamerule.enderPearlsVanishOnDeath": "Thrown ender pearls vanish on death", "gamerule.enderPearlsVanishOnDeath": "Thrown Ender Pearls vanish on death",
"gamerule.enderPearlsVanishOnDeath.description": "Whether ender pearls thrown by a player vanish when that player dies.", "gamerule.enderPearlsVanishOnDeath.description": "Whether Ender Pearls thrown by a player vanish when that player dies.",
"gamerule.entitiesWithPassengersCanUsePortals": "Entities with passengers can use portals",
"gamerule.entitiesWithPassengersCanUsePortals.description": "Allow entities with passengers to teleport through Nether Portals, End Portals, and End Gateways.",
"gamerule.fallDamage": "Deal fall damage", "gamerule.fallDamage": "Deal fall damage",
"gamerule.fireDamage": "Deal fire damage", "gamerule.fireDamage": "Deal fire damage",
"gamerule.forgiveDeadPlayers": "Forgive dead players", "gamerule.forgiveDeadPlayers": "Forgive dead players",
@ -3609,6 +3621,7 @@
"generator.minecraft.single_biome_surface": "Single Biome", "generator.minecraft.single_biome_surface": "Single Biome",
"generator.single_biome_caves": "Caves", "generator.single_biome_caves": "Caves",
"generator.single_biome_floating_islands": "Floating Islands", "generator.single_biome_floating_islands": "Floating Islands",
"gui.abuseReport.attestation": "By submitting this report, you confirm that the information you have provided is accurate and complete to the best of your knowledge.",
"gui.abuseReport.comments": "Comments", "gui.abuseReport.comments": "Comments",
"gui.abuseReport.describe": "Sharing details will help us make a well-informed decision.", "gui.abuseReport.describe": "Sharing details will help us make a well-informed decision.",
"gui.abuseReport.discard.content": "If you leave, you'll lose this report and your comments.\nAre you sure you want to leave?", "gui.abuseReport.discard.content": "If you leave, you'll lose this report and your comments.\nAre you sure you want to leave?",
@ -3662,6 +3675,7 @@
"gui.abuseReport.send.http_error": "An unexpected HTTP error occurred while sending your report.", "gui.abuseReport.send.http_error": "An unexpected HTTP error occurred while sending your report.",
"gui.abuseReport.send.json_error": "Encountered malformed payload while sending your report.", "gui.abuseReport.send.json_error": "Encountered malformed payload while sending your report.",
"gui.abuseReport.send.no_reason": "Please select a report category", "gui.abuseReport.send.no_reason": "Please select a report category",
"gui.abuseReport.send.not_attested": "Please read the text above and tick the checkbox to be able to send the report",
"gui.abuseReport.send.service_unavailable": "Unable to reach the Abuse Reporting service. Please make sure you are connected to the internet and try again.", "gui.abuseReport.send.service_unavailable": "Unable to reach the Abuse Reporting service. Please make sure you are connected to the internet and try again.",
"gui.abuseReport.sending.title": "Sending your report...", "gui.abuseReport.sending.title": "Sending your report...",
"gui.abuseReport.sent.title": "Report sent", "gui.abuseReport.sent.title": "Report sent",
@ -3741,6 +3755,8 @@
"gui.done": "Done", "gui.done": "Done",
"gui.down": "Down", "gui.down": "Down",
"gui.entity_tooltip.type": "Type: %s", "gui.entity_tooltip.type": "Type: %s",
"gui.fileDropFailure.detail": "Rejected %d files",
"gui.fileDropFailure.title": "Failed to add files",
"gui.hours": "%s hour(s)", "gui.hours": "%s hour(s)",
"gui.loadingMinecraft": "Loading Minecraft", "gui.loadingMinecraft": "Loading Minecraft",
"gui.minutes": "%s minute(s)", "gui.minutes": "%s minute(s)",
@ -3752,6 +3768,7 @@
"gui.no": "No", "gui.no": "No",
"gui.none": "None", "gui.none": "None",
"gui.ok": "Ok", "gui.ok": "Ok",
"gui.open_report_dir": "Open Report Directory",
"gui.proceed": "Proceed", "gui.proceed": "Proceed",
"gui.recipebook.moreRecipes": "Right Click for More", "gui.recipebook.moreRecipes": "Right Click for More",
"gui.recipebook.page": "%s/%s", "gui.recipebook.page": "%s/%s",
@ -3761,6 +3778,7 @@
"gui.recipebook.toggleRecipes.craftable": "Showing Craftable", "gui.recipebook.toggleRecipes.craftable": "Showing Craftable",
"gui.recipebook.toggleRecipes.smeltable": "Showing Smeltable", "gui.recipebook.toggleRecipes.smeltable": "Showing Smeltable",
"gui.recipebook.toggleRecipes.smokable": "Showing Smokable", "gui.recipebook.toggleRecipes.smokable": "Showing Smokable",
"gui.report_to_server": "Report To Server",
"gui.socialInteractions.blocking_hint": "Manage with Microsoft account", "gui.socialInteractions.blocking_hint": "Manage with Microsoft account",
"gui.socialInteractions.empty_blocked": "No blocked players in chat", "gui.socialInteractions.empty_blocked": "No blocked players in chat",
"gui.socialInteractions.empty_hidden": "No players hidden in chat", "gui.socialInteractions.empty_hidden": "No players hidden in chat",
@ -4151,6 +4169,10 @@
"item.minecraft.music_disc_cat.desc": "C418 - cat", "item.minecraft.music_disc_cat.desc": "C418 - cat",
"item.minecraft.music_disc_chirp": "Music Disc", "item.minecraft.music_disc_chirp": "Music Disc",
"item.minecraft.music_disc_chirp.desc": "C418 - chirp", "item.minecraft.music_disc_chirp.desc": "C418 - chirp",
"item.minecraft.music_disc_creator": "Music Disc",
"item.minecraft.music_disc_creator_music_box": "Music Disc",
"item.minecraft.music_disc_creator_music_box.desc": "Lena Raine - Creator (Music Box)",
"item.minecraft.music_disc_creator.desc": "Lena Raine - Creator",
"item.minecraft.music_disc_far": "Music Disc", "item.minecraft.music_disc_far": "Music Disc",
"item.minecraft.music_disc_far.desc": "C418 - far", "item.minecraft.music_disc_far.desc": "C418 - far",
"item.minecraft.music_disc_mall": "Music Disc", "item.minecraft.music_disc_mall": "Music Disc",
@ -4161,6 +4183,8 @@
"item.minecraft.music_disc_otherside.desc": "Lena Raine - otherside", "item.minecraft.music_disc_otherside.desc": "Lena Raine - otherside",
"item.minecraft.music_disc_pigstep": "Music Disc", "item.minecraft.music_disc_pigstep": "Music Disc",
"item.minecraft.music_disc_pigstep.desc": "Lena Raine - Pigstep", "item.minecraft.music_disc_pigstep.desc": "Lena Raine - Pigstep",
"item.minecraft.music_disc_precipice": "Music Disc",
"item.minecraft.music_disc_precipice.desc": "Aaron Cherof - Precipice",
"item.minecraft.music_disc_relic": "Music Disc", "item.minecraft.music_disc_relic": "Music Disc",
"item.minecraft.music_disc_relic.desc": "Aaron Cherof - Relic", "item.minecraft.music_disc_relic.desc": "Aaron Cherof - Relic",
"item.minecraft.music_disc_stal": "Music Disc", "item.minecraft.music_disc_stal": "Music Disc",
@ -4459,9 +4483,12 @@
"item.minecraft.zombie_spawn_egg": "Zombie Spawn Egg", "item.minecraft.zombie_spawn_egg": "Zombie Spawn Egg",
"item.minecraft.zombie_villager_spawn_egg": "Zombie Villager Spawn Egg", "item.minecraft.zombie_villager_spawn_egg": "Zombie Villager Spawn Egg",
"item.minecraft.zombified_piglin_spawn_egg": "Zombified Piglin Spawn Egg", "item.minecraft.zombified_piglin_spawn_egg": "Zombified Piglin Spawn Egg",
"item.modifiers.any": "When equipped:",
"item.modifiers.armor": "When worn:",
"item.modifiers.body": "When equipped:", "item.modifiers.body": "When equipped:",
"item.modifiers.chest": "When on Body:", "item.modifiers.chest": "When on Body:",
"item.modifiers.feet": "When on Feet:", "item.modifiers.feet": "When on Feet:",
"item.modifiers.hand": "When held:",
"item.modifiers.head": "When on Head:", "item.modifiers.head": "When on Head:",
"item.modifiers.legs": "When on Legs:", "item.modifiers.legs": "When on Legs:",
"item.modifiers.mainhand": "When in Main Hand:", "item.modifiers.mainhand": "When in Main Hand:",
@ -4498,6 +4525,25 @@
"jigsaw_block.selection_priority": "Selection Priority:", "jigsaw_block.selection_priority": "Selection Priority:",
"jigsaw_block.selection_priority.tooltip": "When the parent piece is being processed for connections, this is the order in which this Jigsaw block attempts to connect to its target piece.\n\nJigsaws will be processed in descending priority with random ordering breaking ties.", "jigsaw_block.selection_priority.tooltip": "When the parent piece is being processed for connections, this is the order in which this Jigsaw block attempts to connect to its target piece.\n\nJigsaws will be processed in descending priority with random ordering breaking ties.",
"jigsaw_block.target": "Target Name:", "jigsaw_block.target": "Target Name:",
"jukebox_song.minecraft.5": "Samuel \u00c5berg - 5",
"jukebox_song.minecraft.11": "C418 - 11",
"jukebox_song.minecraft.13": "C418 - 13",
"jukebox_song.minecraft.blocks": "C418 - blocks",
"jukebox_song.minecraft.cat": "C418 - cat",
"jukebox_song.minecraft.chirp": "C418 - chirp",
"jukebox_song.minecraft.creator": "Lena Raine - Creator",
"jukebox_song.minecraft.creator_music_box": "Lena Raine - Creator (Music Box)",
"jukebox_song.minecraft.far": "C418 - far",
"jukebox_song.minecraft.mall": "C418 - mall",
"jukebox_song.minecraft.mellohi": "C418 - mellohi",
"jukebox_song.minecraft.otherside": "Lena Raine - otherside",
"jukebox_song.minecraft.pigstep": "Lena Raine - Pigstep",
"jukebox_song.minecraft.precipice": "Aaron Cherof - Precipice",
"jukebox_song.minecraft.relic": "Aaron Cherof - Relic",
"jukebox_song.minecraft.stal": "C418 - stal",
"jukebox_song.minecraft.strad": "C418 - strad",
"jukebox_song.minecraft.wait": "C418 - wait",
"jukebox_song.minecraft.ward": "C418 - ward",
"key.advancements": "Advancements", "key.advancements": "Advancements",
"key.attack": "Attack/Destroy", "key.attack": "Attack/Destroy",
"key.back": "Walk Backwards", "key.back": "Walk Backwards",
@ -4625,9 +4671,19 @@
"key.socialInteractions": "Social Interactions Screen", "key.socialInteractions": "Social Interactions Screen",
"key.spectatorOutlines": "Highlight Players (Spectators)", "key.spectatorOutlines": "Highlight Players (Spectators)",
"key.sprint": "Sprint", "key.sprint": "Sprint",
"key.swapOffhand": "Swap Item With Offhand", "key.swapOffhand": "Swap Item With Off Hand",
"key.togglePerspective": "Toggle Perspective", "key.togglePerspective": "Toggle Perspective",
"key.use": "Use Item/Place Block", "key.use": "Use Item/Place Block",
"known_server_link.announcements": "Announcements",
"known_server_link.community": "Community",
"known_server_link.community_guidelines": "Community Guidelines",
"known_server_link.feedback": "Feedback",
"known_server_link.forums": "Forums",
"known_server_link.news": "News",
"known_server_link.report_bug": "Report Server Bug",
"known_server_link.status": "Status",
"known_server_link.support": "Support",
"known_server_link.website": "Website",
"language.code": "en_us", "language.code": "en_us",
"language.name": "English", "language.name": "English",
"language.region": "United States", "language.region": "United States",
@ -4689,12 +4745,16 @@
"mco.client.outdated.stable.version": "Your client version (%s) is not compatible with Realms.\n\nPlease use the most recent version of Minecraft.", "mco.client.outdated.stable.version": "Your client version (%s) is not compatible with Realms.\n\nPlease use the most recent version of Minecraft.",
"mco.client.unsupported.snapshot.version": "Your client version (%s) is not compatible with Realms.\n\nRealms is not available for this snapshot version.", "mco.client.unsupported.snapshot.version": "Your client version (%s) is not compatible with Realms.\n\nRealms is not available for this snapshot version.",
"mco.compatibility.downgrade": "Downgrade", "mco.compatibility.downgrade": "Downgrade",
"mco.compatibility.downgrade.description": "This world was last played in version %s; you are on version %s. Downgrading a world could cause corruption - we cannot guarantee that it will load or work.\n\nA backup of your world will be saved under \"World backups\". Please restore your world if needed.", "mco.compatibility.downgrade.description": "This world was last played in version %s; you are on version %s. Downgrading a world could cause corruption - we cannot guarantee that it will load or work.\n\nA backup of your world will be saved under \"World Backups\". Please restore your world if needed.",
"mco.compatibility.unverifiable.message": "The version this world was last played in could not be verified. If the world gets upgraded or downgraded, a backup will be automatically created and saved under \"World backups\".", "mco.compatibility.incompatible.popup.title": "Incompatible version",
"mco.compatibility.incompatible.releaseType.popup.message": "The world you are trying to join is incompatible with the version you are on.",
"mco.compatibility.incompatible.series.popup.message": "This world was last played in version %s; you are on version %s.\n\nThese series are not compatible with each other. A new world is needed to play on this version.",
"mco.compatibility.unverifiable.message": "The version this world was last played in could not be verified. If the world gets upgraded or downgraded, a backup will be automatically created and saved under \"World Backups\".",
"mco.compatibility.unverifiable.title": "Compatibility not verifiable", "mco.compatibility.unverifiable.title": "Compatibility not verifiable",
"mco.compatibility.upgrade": "Upgrade", "mco.compatibility.upgrade": "Upgrade",
"mco.compatibility.upgrade.description": "This world was last played in version %s; you are on version %s.\n\nA backup of your world will be saved under \"World backups\". Please restore your world if needed.", "mco.compatibility.upgrade.description": "This world was last played in version %s; you are on version %s.\n\nA backup of your world will be saved under \"World Backups\".\n\nPlease restore your world if needed.",
"mco.compatibility.upgrade.title": "Do you really want to upgrade your world?", "mco.compatibility.upgrade.friend.description": "This world was last played in version %s; you are on version %s.\n\nA backup of the world will be saved under \"World Backups\".\n\nThe owner of the Realm can restore the world if needed.",
"mco.compatibility.upgrade.title": "Do you really want to upgrade this world?",
"mco.configure.current.minigame": "Current", "mco.configure.current.minigame": "Current",
"mco.configure.world.activityfeed.disabled": "Player feed temporarily disabled", "mco.configure.world.activityfeed.disabled": "Player feed temporarily disabled",
"mco.configure.world.backup": "World Backups", "mco.configure.world.backup": "World Backups",
@ -4744,6 +4804,7 @@
"mco.configure.world.pvp": "PVP", "mco.configure.world.pvp": "PVP",
"mco.configure.world.reset.question.line1": "Your world will be regenerated and your current world will be lost", "mco.configure.world.reset.question.line1": "Your world will be regenerated and your current world will be lost",
"mco.configure.world.reset.question.line2": "Are you sure you want to continue?", "mco.configure.world.reset.question.line2": "Are you sure you want to continue?",
"mco.configure.world.resourcepack.question": "You need a custom resource pack to play on this realm\n\nDo you want to download it and play?",
"mco.configure.world.resourcepack.question.line1": "You need a custom resource pack to play on this realm", "mco.configure.world.resourcepack.question.line1": "You need a custom resource pack to play on this realm",
"mco.configure.world.resourcepack.question.line2": "Do you want to download it and play?", "mco.configure.world.resourcepack.question.line2": "Do you want to download it and play?",
"mco.configure.world.restore.download.question.line1": "The world will be downloaded and added to your single player worlds.", "mco.configure.world.restore.download.question.line1": "The world will be downloaded and added to your single player worlds.",
@ -4758,8 +4819,8 @@
"mco.configure.world.slot.tooltip": "Switch to world", "mco.configure.world.slot.tooltip": "Switch to world",
"mco.configure.world.slot.tooltip.active": "Join", "mco.configure.world.slot.tooltip.active": "Join",
"mco.configure.world.slot.tooltip.minigame": "Switch to minigame", "mco.configure.world.slot.tooltip.minigame": "Switch to minigame",
"mco.configure.world.spawn_toggle.message": "Turning this option off will REMOVE ALL existing entities of that type", "mco.configure.world.spawn_toggle.message": "Turning this option off will remove all existing entities of that type",
"mco.configure.world.spawn_toggle.message.npc": "Turning this option off will REMOVE ALL existing entities of that type, like Villagers", "mco.configure.world.spawn_toggle.message.npc": "Turning this option off will remove all existing entities of that type, like Villagers",
"mco.configure.world.spawn_toggle.title": "Warning!", "mco.configure.world.spawn_toggle.title": "Warning!",
"mco.configure.world.spawnAnimals": "Spawn Animals", "mco.configure.world.spawnAnimals": "Spawn Animals",
"mco.configure.world.spawnMonsters": "Spawn Monsters", "mco.configure.world.spawnMonsters": "Spawn Monsters",
@ -4801,6 +4862,7 @@
"mco.download.cancelled": "Download cancelled", "mco.download.cancelled": "Download cancelled",
"mco.download.confirmation.line1": "The world you are going to download is larger than %s", "mco.download.confirmation.line1": "The world you are going to download is larger than %s",
"mco.download.confirmation.line2": "You won't be able to upload this world to your realm again", "mco.download.confirmation.line2": "You won't be able to upload this world to your realm again",
"mco.download.confirmation.oversized": "The world you are going to download is larger than %s\n\nYou won't be able to upload this world to your realm again",
"mco.download.done": "Download done", "mco.download.done": "Download done",
"mco.download.downloading": "Downloading", "mco.download.downloading": "Downloading",
"mco.download.extracting": "Extracting", "mco.download.extracting": "Extracting",
@ -4859,8 +4921,9 @@
"mco.notification.dismiss": "Dismiss", "mco.notification.dismiss": "Dismiss",
"mco.notification.transferSubscription.buttonText": "Transfer Now", "mco.notification.transferSubscription.buttonText": "Transfer Now",
"mco.notification.transferSubscription.message": "Java Realms subscriptions are moving to the Microsoft Store. Do not let your subscription expire!\nTransfer now and get 30 days of Realms for free.\nGo to Profile on minecraft.net to transfer your subscription.", "mco.notification.transferSubscription.message": "Java Realms subscriptions are moving to the Microsoft Store. Do not let your subscription expire!\nTransfer now and get 30 days of Realms for free.\nGo to Profile on minecraft.net to transfer your subscription.",
"mco.notification.visitUrl.buttonText.default": "Open link", "mco.notification.visitUrl.buttonText.default": "Open Link",
"mco.notification.visitUrl.message.default": "Please visit the link below", "mco.notification.visitUrl.message.default": "Please visit the link below",
"mco.onlinePlayers": "Online Players",
"mco.question": "Question", "mco.question": "Question",
"mco.reset.world.adventure": "Adventures", "mco.reset.world.adventure": "Adventures",
"mco.reset.world.experience": "Experiences", "mco.reset.world.experience": "Experiences",
@ -4966,6 +5029,8 @@
"mco.worldSlot.minigame": "Minigame", "mco.worldSlot.minigame": "Minigame",
"menu.convertingLevel": "Converting world", "menu.convertingLevel": "Converting world",
"menu.disconnect": "Disconnect", "menu.disconnect": "Disconnect",
"menu.feedback": "Feedback...",
"menu.feedback.title": "Feedback",
"menu.game": "Game Menu", "menu.game": "Game Menu",
"menu.generatingLevel": "Generating world", "menu.generatingLevel": "Generating world",
"menu.generatingTerrain": "Building terrain", "menu.generatingTerrain": "Building terrain",
@ -4988,6 +5053,8 @@
"menu.savingChunks": "Saving chunks", "menu.savingChunks": "Saving chunks",
"menu.savingLevel": "Saving world", "menu.savingLevel": "Saving world",
"menu.sendFeedback": "Give Feedback", "menu.sendFeedback": "Give Feedback",
"menu.server_links": "Server Links...",
"menu.server_links.title": "Server Links",
"menu.shareToLan": "Open to LAN", "menu.shareToLan": "Open to LAN",
"menu.singleplayer": "Singleplayer", "menu.singleplayer": "Singleplayer",
"menu.working": "Working...", "menu.working": "Working...",
@ -5154,14 +5221,14 @@
"optimizeWorld.title": "Optimizing World '%s'", "optimizeWorld.title": "Optimizing World '%s'",
"options.accessibility": "Accessibility Settings...", "options.accessibility": "Accessibility Settings...",
"options.accessibility.high_contrast": "High Contrast", "options.accessibility.high_contrast": "High Contrast",
"options.accessibility.high_contrast.error.tooltip": "High Contrast resource pack is not available", "options.accessibility.high_contrast.error.tooltip": "High Contrast resource pack is not available.",
"options.accessibility.high_contrast.tooltip": "Enhances the contrast of UI elements", "options.accessibility.high_contrast.tooltip": "Enhances the contrast of UI elements.",
"options.accessibility.link": "Accessibility Guide", "options.accessibility.link": "Accessibility Guide",
"options.accessibility.menu_background_blurriness": "Menu Background Blur", "options.accessibility.menu_background_blurriness": "Menu Background Blur",
"options.accessibility.menu_background_blurriness.tooltip": "Changes the blurriness of menu backgrounds", "options.accessibility.menu_background_blurriness.tooltip": "Changes the blurriness of menu backgrounds.",
"options.accessibility.narrator_hotkey": "Narrator Hotkey", "options.accessibility.narrator_hotkey": "Narrator Hotkey",
"options.accessibility.narrator_hotkey.mac.tooltip": "Allows the Narrator to be toggled on and off with 'Cmd+B'", "options.accessibility.narrator_hotkey.mac.tooltip": "Allows the Narrator to be toggled on and off with 'Cmd+B'.",
"options.accessibility.narrator_hotkey.tooltip": "Allows the Narrator to be toggled on and off with 'Ctrl+B'", "options.accessibility.narrator_hotkey.tooltip": "Allows the Narrator to be toggled on and off with 'Ctrl+B'.",
"options.accessibility.panorama_speed": "Panorama Scroll Speed", "options.accessibility.panorama_speed": "Panorama Scroll Speed",
"options.accessibility.text_background": "Text Background", "options.accessibility.text_background": "Text Background",
"options.accessibility.text_background_opacity": "Text Background Opacity", "options.accessibility.text_background_opacity": "Text Background Opacity",
@ -5232,7 +5299,7 @@
"options.difficulty.peaceful": "Peaceful", "options.difficulty.peaceful": "Peaceful",
"options.difficulty.peaceful.info": "No hostile mobs and only some neutral mobs spawn. Hunger bar doesn't deplete and health replenishes over time.", "options.difficulty.peaceful.info": "No hostile mobs and only some neutral mobs spawn. Hunger bar doesn't deplete and health replenishes over time.",
"options.directionalAudio": "Directional Audio", "options.directionalAudio": "Directional Audio",
"options.directionalAudio.off.tooltip": "Classic Stereo sound", "options.directionalAudio.off.tooltip": "Classic Stereo sound.",
"options.directionalAudio.on.tooltip": "Uses HRTF-based directional audio to improve the simulation of 3D sound. Requires HRTF compatible audio hardware, and is best experienced with headphones.", "options.directionalAudio.on.tooltip": "Uses HRTF-based directional audio to improve the simulation of 3D sound. Requires HRTF compatible audio hardware, and is best experienced with headphones.",
"options.discrete_mouse_scroll": "Discrete Scrolling", "options.discrete_mouse_scroll": "Discrete Scrolling",
"options.entityDistanceScaling": "Entity Distance", "options.entityDistanceScaling": "Entity Distance",
@ -5287,7 +5354,7 @@
"options.hideSplashTexts.tooltip": "Hides the yellow splash text in the main menu.", "options.hideSplashTexts.tooltip": "Hides the yellow splash text in the main menu.",
"options.invertMouse": "Invert Mouse", "options.invertMouse": "Invert Mouse",
"options.japaneseGlyphVariants": "Japanese Glyph Variants", "options.japaneseGlyphVariants": "Japanese Glyph Variants",
"options.japaneseGlyphVariants.tooltip": "Uses Japanese variants of CJK characters in the default font", "options.japaneseGlyphVariants.tooltip": "Uses Japanese variants of CJK characters in the default font.",
"options.key.hold": "Hold", "options.key.hold": "Hold",
"options.key.toggle": "Toggle", "options.key.toggle": "Toggle",
"options.language": "Language...", "options.language": "Language...",
@ -5301,9 +5368,9 @@
"options.modelPart.cape": "Cape", "options.modelPart.cape": "Cape",
"options.modelPart.hat": "Hat", "options.modelPart.hat": "Hat",
"options.modelPart.jacket": "Jacket", "options.modelPart.jacket": "Jacket",
"options.modelPart.left_pants_leg": "Left Pants Leg", "options.modelPart.left_pants_leg": "Left Pant Leg",
"options.modelPart.left_sleeve": "Left Sleeve", "options.modelPart.left_sleeve": "Left Sleeve",
"options.modelPart.right_pants_leg": "Right Pants Leg", "options.modelPart.right_pants_leg": "Right Pant Leg",
"options.modelPart.right_sleeve": "Right Sleeve", "options.modelPart.right_sleeve": "Right Sleeve",
"options.mouse_settings": "Mouse Settings...", "options.mouse_settings": "Mouse Settings...",
"options.mouse_settings.title": "Mouse Settings", "options.mouse_settings.title": "Mouse Settings",
@ -5343,6 +5410,7 @@
"options.prioritizeChunkUpdates.none.tooltip": "Nearby chunks are compiled in parallel threads. This may result in brief visual holes when blocks are destroyed.", "options.prioritizeChunkUpdates.none.tooltip": "Nearby chunks are compiled in parallel threads. This may result in brief visual holes when blocks are destroyed.",
"options.rawMouseInput": "Raw Input", "options.rawMouseInput": "Raw Input",
"options.realmsNotifications": "Realms News & Invites", "options.realmsNotifications": "Realms News & Invites",
"options.realmsNotifications.tooltip": "Fetches Realms news and invites in the title screen and displays their respective icon on the Realms button.",
"options.reducedDebugInfo": "Reduced Debug Info", "options.reducedDebugInfo": "Reduced Debug Info",
"options.renderClouds": "Clouds", "options.renderClouds": "Clouds",
"options.renderDistance": "Render Distance", "options.renderDistance": "Render Distance",
@ -5402,12 +5470,24 @@
"painting.minecraft.aztec.title": "de_aztec", "painting.minecraft.aztec.title": "de_aztec",
"painting.minecraft.aztec2.author": "Kristoffer Zetterstrand", "painting.minecraft.aztec2.author": "Kristoffer Zetterstrand",
"painting.minecraft.aztec2.title": "de_aztec", "painting.minecraft.aztec2.title": "de_aztec",
"painting.minecraft.backyard.author": "Kristoffer Zetterstrand",
"painting.minecraft.backyard.title": "Backyard",
"painting.minecraft.baroque.author": "Sarah Boeving",
"painting.minecraft.baroque.title": "Baroque",
"painting.minecraft.bomb.author": "Kristoffer Zetterstrand", "painting.minecraft.bomb.author": "Kristoffer Zetterstrand",
"painting.minecraft.bomb.title": "Target Successfully Bombed", "painting.minecraft.bomb.title": "Target Successfully Bombed",
"painting.minecraft.bouquet.author": "Kristoffer Zetterstrand",
"painting.minecraft.bouquet.title": "Bouquet",
"painting.minecraft.burning_skull.author": "Kristoffer Zetterstrand", "painting.minecraft.burning_skull.author": "Kristoffer Zetterstrand",
"painting.minecraft.burning_skull.title": "Skull On Fire", "painting.minecraft.burning_skull.title": "Skull On Fire",
"painting.minecraft.bust.author": "Kristoffer Zetterstrand", "painting.minecraft.bust.author": "Kristoffer Zetterstrand",
"painting.minecraft.bust.title": "Bust", "painting.minecraft.bust.title": "Bust",
"painting.minecraft.cavebird.author": "Kristoffer Zetterstrand",
"painting.minecraft.cavebird.title": "Cavebird",
"painting.minecraft.changing.author": "Kristoffer Zetterstrand",
"painting.minecraft.changing.title": "Changing",
"painting.minecraft.cotan.author": "Kristoffer Zetterstrand",
"painting.minecraft.cotan.title": "Cot\u00e1n",
"painting.minecraft.courbet.author": "Kristoffer Zetterstrand", "painting.minecraft.courbet.author": "Kristoffer Zetterstrand",
"painting.minecraft.courbet.title": "Bonjour Monsieur Courbet", "painting.minecraft.courbet.title": "Bonjour Monsieur Courbet",
"painting.minecraft.creebet.author": "Kristoffer Zetterstrand", "painting.minecraft.creebet.author": "Kristoffer Zetterstrand",
@ -5416,24 +5496,46 @@
"painting.minecraft.donkey_kong.title": "Kong", "painting.minecraft.donkey_kong.title": "Kong",
"painting.minecraft.earth.author": "Mojang", "painting.minecraft.earth.author": "Mojang",
"painting.minecraft.earth.title": "Earth", "painting.minecraft.earth.title": "Earth",
"painting.minecraft.endboss.author": "Kristoffer Zetterstrand",
"painting.minecraft.endboss.title": "Endboss",
"painting.minecraft.fern.author": "Kristoffer Zetterstrand",
"painting.minecraft.fern.title": "Fern",
"painting.minecraft.fighters.author": "Kristoffer Zetterstrand", "painting.minecraft.fighters.author": "Kristoffer Zetterstrand",
"painting.minecraft.fighters.title": "Fighters", "painting.minecraft.fighters.title": "Fighters",
"painting.minecraft.finding.author": "Kristoffer Zetterstrand",
"painting.minecraft.finding.title": "Finding",
"painting.minecraft.fire.author": "Mojang", "painting.minecraft.fire.author": "Mojang",
"painting.minecraft.fire.title": "Fire", "painting.minecraft.fire.title": "Fire",
"painting.minecraft.graham.author": "Kristoffer Zetterstrand", "painting.minecraft.graham.author": "Kristoffer Zetterstrand",
"painting.minecraft.graham.title": "Graham", "painting.minecraft.graham.title": "Graham",
"painting.minecraft.humble.author": "Sarah Boeving",
"painting.minecraft.humble.title": "Humble",
"painting.minecraft.kebab.author": "Kristoffer Zetterstrand", "painting.minecraft.kebab.author": "Kristoffer Zetterstrand",
"painting.minecraft.kebab.title": "Kebab med tre pepperoni", "painting.minecraft.kebab.title": "Kebab med tre pepperoni",
"painting.minecraft.lowmist.author": "Kristoffer Zetterstrand",
"painting.minecraft.lowmist.title": "Lowmist",
"painting.minecraft.match.author": "Kristoffer Zetterstrand", "painting.minecraft.match.author": "Kristoffer Zetterstrand",
"painting.minecraft.match.title": "Match", "painting.minecraft.match.title": "Match",
"painting.minecraft.meditative.author": "Sarah Boeving",
"painting.minecraft.meditative.title": "Meditative",
"painting.minecraft.orb.author": "Kristoffer Zetterstrand",
"painting.minecraft.orb.title": "Orb",
"painting.minecraft.owlemons.author": "Kristoffer Zetterstrand",
"painting.minecraft.owlemons.title": "Owlemons",
"painting.minecraft.passage.author": "Kristoffer Zetterstrand",
"painting.minecraft.passage.title": "Passage",
"painting.minecraft.pigscene.author": "Kristoffer Zetterstrand", "painting.minecraft.pigscene.author": "Kristoffer Zetterstrand",
"painting.minecraft.pigscene.title": "Pigscene", "painting.minecraft.pigscene.title": "Pigscene",
"painting.minecraft.plant.author": "Kristoffer Zetterstrand", "painting.minecraft.plant.author": "Kristoffer Zetterstrand",
"painting.minecraft.plant.title": "Paradistr\u00e4d", "painting.minecraft.plant.title": "Paradistr\u00e4d",
"painting.minecraft.pointer.author": "Kristoffer Zetterstrand", "painting.minecraft.pointer.author": "Kristoffer Zetterstrand",
"painting.minecraft.pointer.title": "Pointer", "painting.minecraft.pointer.title": "Pointer",
"painting.minecraft.pond.author": "Kristoffer Zetterstrand",
"painting.minecraft.pond.title": "Pond",
"painting.minecraft.pool.author": "Kristoffer Zetterstrand", "painting.minecraft.pool.author": "Kristoffer Zetterstrand",
"painting.minecraft.pool.title": "The Pool", "painting.minecraft.pool.title": "The Pool",
"painting.minecraft.prairie_ride.author": "Sarah Boeving",
"painting.minecraft.prairie_ride.title": "Prairie Ride",
"painting.minecraft.sea.author": "Kristoffer Zetterstrand", "painting.minecraft.sea.author": "Kristoffer Zetterstrand",
"painting.minecraft.sea.title": "Seaside", "painting.minecraft.sea.title": "Seaside",
"painting.minecraft.skeleton.author": "Kristoffer Zetterstrand", "painting.minecraft.skeleton.author": "Kristoffer Zetterstrand",
@ -5442,8 +5544,14 @@
"painting.minecraft.skull_and_roses.title": "Skull and Roses", "painting.minecraft.skull_and_roses.title": "Skull and Roses",
"painting.minecraft.stage.author": "Kristoffer Zetterstrand", "painting.minecraft.stage.author": "Kristoffer Zetterstrand",
"painting.minecraft.stage.title": "The Stage Is Set", "painting.minecraft.stage.title": "The Stage Is Set",
"painting.minecraft.sunflowers.author": "Kristoffer Zetterstrand",
"painting.minecraft.sunflowers.title": "Sunflowers",
"painting.minecraft.sunset.author": "Kristoffer Zetterstrand", "painting.minecraft.sunset.author": "Kristoffer Zetterstrand",
"painting.minecraft.sunset.title": "sunset_dense", "painting.minecraft.sunset.title": "sunset_dense",
"painting.minecraft.tides.author": "Kristoffer Zetterstrand",
"painting.minecraft.tides.title": "Tides",
"painting.minecraft.unpacked.author": "Sarah Boeving",
"painting.minecraft.unpacked.title": "Unpacked",
"painting.minecraft.void.author": "Kristoffer Zetterstrand", "painting.minecraft.void.author": "Kristoffer Zetterstrand",
"painting.minecraft.void.title": "The void", "painting.minecraft.void.title": "The void",
"painting.minecraft.wanderer.author": "Kristoffer Zetterstrand", "painting.minecraft.wanderer.author": "Kristoffer Zetterstrand",
@ -5584,7 +5692,7 @@
"selectWorld.experimental": "Experimental", "selectWorld.experimental": "Experimental",
"selectWorld.experimental.details": "Details", "selectWorld.experimental.details": "Details",
"selectWorld.experimental.details.entry": "Required experimental features: %s", "selectWorld.experimental.details.entry": "Required experimental features: %s",
"selectWorld.experimental.details.title": "Experimental feature requirements", "selectWorld.experimental.details.title": "Experimental Feature Requirements",
"selectWorld.experimental.message": "Be careful!\nThis configuration requires features that are still under development. Your world might crash, break, or not work with future updates.", "selectWorld.experimental.message": "Be careful!\nThis configuration requires features that are still under development. Your world might crash, break, or not work with future updates.",
"selectWorld.experimental.title": "Experimental Features Warning", "selectWorld.experimental.title": "Experimental Features Warning",
"selectWorld.experiments": "Experiments", "selectWorld.experiments": "Experiments",
@ -5913,7 +6021,7 @@
"subtitles.block.respawn_anchor.deplete": "Respawn Anchor depletes", "subtitles.block.respawn_anchor.deplete": "Respawn Anchor depletes",
"subtitles.block.respawn_anchor.set_spawn": "Respawn Anchor sets spawn", "subtitles.block.respawn_anchor.set_spawn": "Respawn Anchor sets spawn",
"subtitles.block.sculk_catalyst.bloom": "Sculk Catalyst blooms", "subtitles.block.sculk_catalyst.bloom": "Sculk Catalyst blooms",
"subtitles.block.sculk_sensor.clicking": "Sculk Sensor starts clicking", "subtitles.block.sculk_sensor.clicking": "Sculk Sensor clicks",
"subtitles.block.sculk_sensor.clicking_stop": "Sculk Sensor stops clicking", "subtitles.block.sculk_sensor.clicking_stop": "Sculk Sensor stops clicking",
"subtitles.block.sculk_shrieker.shriek": "Sculk Shrieker shrieks", "subtitles.block.sculk_shrieker.shriek": "Sculk Shrieker shrieks",
"subtitles.block.sculk.charge": "Sculk bubbles", "subtitles.block.sculk.charge": "Sculk bubbles",
@ -5931,11 +6039,13 @@
"subtitles.block.trapdoor.toggle": "Trapdoor creaks", "subtitles.block.trapdoor.toggle": "Trapdoor creaks",
"subtitles.block.trial_spawner.about_to_spawn_item": "Ominous item prepares", "subtitles.block.trial_spawner.about_to_spawn_item": "Ominous item prepares",
"subtitles.block.trial_spawner.ambient": "Trial Spawner crackles", "subtitles.block.trial_spawner.ambient": "Trial Spawner crackles",
"subtitles.block.trial_spawner.ambient_charged": "Ominous Trial Spawner crackles", "subtitles.block.trial_spawner.ambient_charged": "Ominous crackling",
"subtitles.block.trial_spawner.ambient_ominous": "Ominous crackling",
"subtitles.block.trial_spawner.charge_activate": "Omen engulfs Trial Spawner", "subtitles.block.trial_spawner.charge_activate": "Omen engulfs Trial Spawner",
"subtitles.block.trial_spawner.close_shutter": "Trial Spawner closes", "subtitles.block.trial_spawner.close_shutter": "Trial Spawner closes",
"subtitles.block.trial_spawner.detect_player": "Trial Spawner charges up", "subtitles.block.trial_spawner.detect_player": "Trial Spawner charges up",
"subtitles.block.trial_spawner.eject_item": "Trial Spawner ejects items", "subtitles.block.trial_spawner.eject_item": "Trial Spawner ejects items",
"subtitles.block.trial_spawner.ominous_activate": "Omen engulfs Trial Spawner",
"subtitles.block.trial_spawner.open_shutter": "Trial Spawner opens", "subtitles.block.trial_spawner.open_shutter": "Trial Spawner opens",
"subtitles.block.trial_spawner.spawn_item": "Ominous item drops", "subtitles.block.trial_spawner.spawn_item": "Ominous item drops",
"subtitles.block.trial_spawner.spawn_item_begin": "Ominous item appears", "subtitles.block.trial_spawner.spawn_item_begin": "Ominous item appears",
@ -5949,8 +6059,9 @@
"subtitles.block.vault.deactivate": "Vault extinguishes", "subtitles.block.vault.deactivate": "Vault extinguishes",
"subtitles.block.vault.eject_item": "Vault ejects item", "subtitles.block.vault.eject_item": "Vault ejects item",
"subtitles.block.vault.insert_item": "Vault unlocks", "subtitles.block.vault.insert_item": "Vault unlocks",
"subtitles.block.vault.insert_item_fail": "Vault fails unlocking", "subtitles.block.vault.insert_item_fail": "Vault rejects item",
"subtitles.block.vault.open_shutter": "Vault opens", "subtitles.block.vault.open_shutter": "Vault opens",
"subtitles.block.vault.reject_rewarded_player": "Vault rejects player",
"subtitles.block.water.ambient": "Water flows", "subtitles.block.water.ambient": "Water flows",
"subtitles.block.wet_sponge.dries": "Sponge dries", "subtitles.block.wet_sponge.dries": "Sponge dries",
"subtitles.chiseled_bookshelf.insert": "Book placed", "subtitles.chiseled_bookshelf.insert": "Book placed",

View file

@ -12,7 +12,7 @@ use std::io::{Cursor, Write};
// TODO: rename the packet files to just like clientbound_add_entity instead of // TODO: rename the packet files to just like clientbound_add_entity instead of
// clientbound_add_entity_packet // clientbound_add_entity_packet
pub const PROTOCOL_VERSION: i32 = 766; pub const PROTOCOL_VERSION: i32 = 767;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum ConnectionProtocol { pub enum ConnectionProtocol {

View file

@ -72,3 +72,27 @@ enum TrimPattern {
Bolt => "bolt", Bolt => "bolt",
} }
} }
registry! {
enum JukeboxSong {
Thirteen => "13",
Cat => "cat",
Blocks => "blocks",
Chirp => "chirp",
Far => "far",
Mall => "mall",
Mellohi => "mellohi",
Stal => "stal",
Strad => "strad",
Ward => "ward",
Eleven => "11",
Wait => "wait",
Pigstep => "pigstep",
Otherside => "otherside",
Five => "5",
Relic => "relic",
Precipice => "precipice",
Creator => "creator",
CreatorMusicBox => "creator_music_box",
}
}

View file

@ -173,6 +173,8 @@ enum Attribute {
GenericAttackSpeed => "minecraft:generic.attack_speed", GenericAttackSpeed => "minecraft:generic.attack_speed",
PlayerBlockBreakSpeed => "minecraft:player.block_break_speed", PlayerBlockBreakSpeed => "minecraft:player.block_break_speed",
PlayerBlockInteractionRange => "minecraft:player.block_interaction_range", PlayerBlockInteractionRange => "minecraft:player.block_interaction_range",
GenericBurningTime => "minecraft:generic.burning_time",
GenericExplosionKnockbackResistance => "minecraft:generic.explosion_knockback_resistance",
PlayerEntityInteractionRange => "minecraft:player.entity_interaction_range", PlayerEntityInteractionRange => "minecraft:player.entity_interaction_range",
GenericFallDamageMultiplier => "minecraft:generic.fall_damage_multiplier", GenericFallDamageMultiplier => "minecraft:generic.fall_damage_multiplier",
GenericFlyingSpeed => "minecraft:generic.flying_speed", GenericFlyingSpeed => "minecraft:generic.flying_speed",
@ -183,11 +185,18 @@ enum Attribute {
GenericLuck => "minecraft:generic.luck", GenericLuck => "minecraft:generic.luck",
GenericMaxAbsorption => "minecraft:generic.max_absorption", GenericMaxAbsorption => "minecraft:generic.max_absorption",
GenericMaxHealth => "minecraft:generic.max_health", GenericMaxHealth => "minecraft:generic.max_health",
PlayerMiningEfficiency => "minecraft:player.mining_efficiency",
GenericMovementEfficiency => "minecraft:generic.movement_efficiency",
GenericMovementSpeed => "minecraft:generic.movement_speed", GenericMovementSpeed => "minecraft:generic.movement_speed",
GenericOxygenBonus => "minecraft:generic.oxygen_bonus",
GenericSafeFallDistance => "minecraft:generic.safe_fall_distance", GenericSafeFallDistance => "minecraft:generic.safe_fall_distance",
GenericScale => "minecraft:generic.scale", GenericScale => "minecraft:generic.scale",
PlayerSneakingSpeed => "minecraft:player.sneaking_speed",
ZombieSpawnReinforcements => "minecraft:zombie.spawn_reinforcements", ZombieSpawnReinforcements => "minecraft:zombie.spawn_reinforcements",
GenericStepHeight => "minecraft:generic.step_height", GenericStepHeight => "minecraft:generic.step_height",
PlayerSubmergedMiningSpeed => "minecraft:player.submerged_mining_speed",
PlayerSweepingDamageRatio => "minecraft:player.sweeping_damage_ratio",
GenericWaterMovementEfficiency => "minecraft:generic.water_movement_efficiency",
} }
} }
@ -1373,6 +1382,7 @@ enum BlockPredicateKind {
AllOf => "minecraft:all_of", AllOf => "minecraft:all_of",
Not => "minecraft:not", Not => "minecraft:not",
True => "minecraft:true", True => "minecraft:true",
Unobstructed => "minecraft:unobstructed",
} }
} }
@ -2659,6 +2669,7 @@ enum Item {
ArmadilloScute => "minecraft:armadillo_scute", ArmadilloScute => "minecraft:armadillo_scute",
WolfArmor => "minecraft:wolf_armor", WolfArmor => "minecraft:wolf_armor",
FlintAndSteel => "minecraft:flint_and_steel", FlintAndSteel => "minecraft:flint_and_steel",
Bowl => "minecraft:bowl",
Apple => "minecraft:apple", Apple => "minecraft:apple",
Bow => "minecraft:bow", Bow => "minecraft:bow",
Arrow => "minecraft:arrow", Arrow => "minecraft:arrow",
@ -2708,7 +2719,6 @@ enum Item {
NetheriteAxe => "minecraft:netherite_axe", NetheriteAxe => "minecraft:netherite_axe",
NetheriteHoe => "minecraft:netherite_hoe", NetheriteHoe => "minecraft:netherite_hoe",
Stick => "minecraft:stick", Stick => "minecraft:stick",
Bowl => "minecraft:bowl",
MushroomStew => "minecraft:mushroom_stew", MushroomStew => "minecraft:mushroom_stew",
String => "minecraft:string", String => "minecraft:string",
Feather => "minecraft:feather", Feather => "minecraft:feather",
@ -3032,6 +3042,8 @@ enum Item {
MusicDiscCat => "minecraft:music_disc_cat", MusicDiscCat => "minecraft:music_disc_cat",
MusicDiscBlocks => "minecraft:music_disc_blocks", MusicDiscBlocks => "minecraft:music_disc_blocks",
MusicDiscChirp => "minecraft:music_disc_chirp", MusicDiscChirp => "minecraft:music_disc_chirp",
MusicDiscCreator => "minecraft:music_disc_creator",
MusicDiscCreatorMusicBox => "minecraft:music_disc_creator_music_box",
MusicDiscFar => "minecraft:music_disc_far", MusicDiscFar => "minecraft:music_disc_far",
MusicDiscMall => "minecraft:music_disc_mall", MusicDiscMall => "minecraft:music_disc_mall",
MusicDiscMellohi => "minecraft:music_disc_mellohi", MusicDiscMellohi => "minecraft:music_disc_mellohi",
@ -3044,6 +3056,7 @@ enum Item {
MusicDiscRelic => "minecraft:music_disc_relic", MusicDiscRelic => "minecraft:music_disc_relic",
MusicDisc5 => "minecraft:music_disc_5", MusicDisc5 => "minecraft:music_disc_5",
MusicDiscPigstep => "minecraft:music_disc_pigstep", MusicDiscPigstep => "minecraft:music_disc_pigstep",
MusicDiscPrecipice => "minecraft:music_disc_precipice",
DiscFragment5 => "minecraft:disc_fragment_5", DiscFragment5 => "minecraft:disc_fragment_5",
Trident => "minecraft:trident", Trident => "minecraft:trident",
PhantomMembrane => "minecraft:phantom_membrane", PhantomMembrane => "minecraft:phantom_membrane",
@ -3199,7 +3212,7 @@ enum LootConditionKind {
AnyOf => "minecraft:any_of", AnyOf => "minecraft:any_of",
AllOf => "minecraft:all_of", AllOf => "minecraft:all_of",
RandomChance => "minecraft:random_chance", RandomChance => "minecraft:random_chance",
RandomChanceWithLooting => "minecraft:random_chance_with_looting", RandomChanceWithEnchantedBonus => "minecraft:random_chance_with_enchanted_bonus",
EntityProperties => "minecraft:entity_properties", EntityProperties => "minecraft:entity_properties",
KilledByPlayer => "minecraft:killed_by_player", KilledByPlayer => "minecraft:killed_by_player",
EntityScores => "minecraft:entity_scores", EntityScores => "minecraft:entity_scores",
@ -3213,6 +3226,7 @@ enum LootConditionKind {
Reference => "minecraft:reference", Reference => "minecraft:reference",
TimeCheck => "minecraft:time_check", TimeCheck => "minecraft:time_check",
ValueCheck => "minecraft:value_check", ValueCheck => "minecraft:value_check",
EnchantmentActiveCheck => "minecraft:enchantment_active_check",
} }
} }
@ -3226,7 +3240,7 @@ enum LootFunctionKind {
SetCustomData => "minecraft:set_custom_data", SetCustomData => "minecraft:set_custom_data",
SetComponents => "minecraft:set_components", SetComponents => "minecraft:set_components",
FurnaceSmelt => "minecraft:furnace_smelt", FurnaceSmelt => "minecraft:furnace_smelt",
LootingEnchant => "minecraft:looting_enchant", EnchantedCountIncrease => "minecraft:enchanted_count_increase",
SetDamage => "minecraft:set_damage", SetDamage => "minecraft:set_damage",
SetAttributes => "minecraft:set_attributes", SetAttributes => "minecraft:set_attributes",
SetName => "minecraft:set_name", SetName => "minecraft:set_name",
@ -3275,6 +3289,7 @@ enum LootNumberProviderKind {
Binomial => "minecraft:binomial", Binomial => "minecraft:binomial",
Score => "minecraft:score", Score => "minecraft:score",
Storage => "minecraft:storage", Storage => "minecraft:storage",
EnchantmentLevel => "minecraft:enchantment_level",
} }
} }
@ -4498,9 +4513,9 @@ enum SoundEvent {
BlockTrialSpawnerSpawnItem => "minecraft:block.trial_spawner.spawn_item", BlockTrialSpawnerSpawnItem => "minecraft:block.trial_spawner.spawn_item",
BlockTrialSpawnerSpawnItemBegin => "minecraft:block.trial_spawner.spawn_item_begin", BlockTrialSpawnerSpawnItemBegin => "minecraft:block.trial_spawner.spawn_item_begin",
BlockTrialSpawnerDetectPlayer => "minecraft:block.trial_spawner.detect_player", BlockTrialSpawnerDetectPlayer => "minecraft:block.trial_spawner.detect_player",
BlockTrialSpawnerChargeActivate => "minecraft:block.trial_spawner.charge_activate", BlockTrialSpawnerOminousActivate => "minecraft:block.trial_spawner.ominous_activate",
BlockTrialSpawnerAmbient => "minecraft:block.trial_spawner.ambient", BlockTrialSpawnerAmbient => "minecraft:block.trial_spawner.ambient",
BlockTrialSpawnerAmbientCharged => "minecraft:block.trial_spawner.ambient_charged", BlockTrialSpawnerAmbientOminous => "minecraft:block.trial_spawner.ambient_ominous",
BlockTrialSpawnerOpenShutter => "minecraft:block.trial_spawner.open_shutter", BlockTrialSpawnerOpenShutter => "minecraft:block.trial_spawner.open_shutter",
BlockTrialSpawnerCloseShutter => "minecraft:block.trial_spawner.close_shutter", BlockTrialSpawnerCloseShutter => "minecraft:block.trial_spawner.close_shutter",
BlockTrialSpawnerEjectItem => "minecraft:block.trial_spawner.eject_item", BlockTrialSpawnerEjectItem => "minecraft:block.trial_spawner.eject_item",
@ -4701,6 +4716,9 @@ enum SoundEvent {
MusicDiscWard => "minecraft:music_disc.ward", MusicDiscWard => "minecraft:music_disc.ward",
MusicDiscOtherside => "minecraft:music_disc.otherside", MusicDiscOtherside => "minecraft:music_disc.otherside",
MusicDiscRelic => "minecraft:music_disc.relic", MusicDiscRelic => "minecraft:music_disc.relic",
MusicDiscCreator => "minecraft:music_disc.creator",
MusicDiscCreatorMusicBox => "minecraft:music_disc.creator_music_box",
MusicDiscPrecipice => "minecraft:music_disc.precipice",
MusicDragon => "minecraft:music.dragon", MusicDragon => "minecraft:music.dragon",
MusicEnd => "minecraft:music.end", MusicEnd => "minecraft:music.end",
MusicGame => "minecraft:music.game", MusicGame => "minecraft:music.game",
@ -5254,6 +5272,7 @@ enum SoundEvent {
BlockVaultCloseShutter => "minecraft:block.vault.close_shutter", BlockVaultCloseShutter => "minecraft:block.vault.close_shutter",
BlockVaultDeactivate => "minecraft:block.vault.deactivate", BlockVaultDeactivate => "minecraft:block.vault.deactivate",
BlockVaultEjectItem => "minecraft:block.vault.eject_item", BlockVaultEjectItem => "minecraft:block.vault.eject_item",
BlockVaultRejectRewardedPlayer => "minecraft:block.vault.reject_rewarded_player",
BlockVaultFall => "minecraft:block.vault.fall", BlockVaultFall => "minecraft:block.vault.fall",
BlockVaultHit => "minecraft:block.vault.hit", BlockVaultHit => "minecraft:block.vault.hit",
BlockVaultInsertItem => "minecraft:block.vault.insert_item", BlockVaultInsertItem => "minecraft:block.vault.insert_item",
@ -5578,6 +5597,7 @@ enum WorldgenFeature {
Disk => "minecraft:disk", Disk => "minecraft:disk",
Lake => "minecraft:lake", Lake => "minecraft:lake",
Ore => "minecraft:ore", Ore => "minecraft:ore",
EndPlatform => "minecraft:end_platform",
EndSpike => "minecraft:end_spike", EndSpike => "minecraft:end_spike",
EndIsland => "minecraft:end_island", EndIsland => "minecraft:end_island",
EndGateway => "minecraft:end_gateway", EndGateway => "minecraft:end_gateway",
@ -5676,6 +5696,7 @@ enum WorldgenPlacementModifierKind {
InSquare => "minecraft:in_square", InSquare => "minecraft:in_square",
RandomOffset => "minecraft:random_offset", RandomOffset => "minecraft:random_offset",
CarvingMask => "minecraft:carving_mask", CarvingMask => "minecraft:carving_mask",
FixedPlacement => "minecraft:fixed_placement",
} }
} }
@ -6293,6 +6314,7 @@ enum DataComponentKind {
BlockEntityData => "minecraft:block_entity_data", BlockEntityData => "minecraft:block_entity_data",
Instrument => "minecraft:instrument", Instrument => "minecraft:instrument",
OminousBottleAmplifier => "minecraft:ominous_bottle_amplifier", OminousBottleAmplifier => "minecraft:ominous_bottle_amplifier",
JukeboxPlayable => "minecraft:jukebox_playable",
Recipes => "minecraft:recipes", Recipes => "minecraft:recipes",
LodestoneTracker => "minecraft:lodestone_tracker", LodestoneTracker => "minecraft:lodestone_tracker",
FireworkExplosion => "minecraft:firework_explosion", FireworkExplosion => "minecraft:firework_explosion",
@ -6349,6 +6371,7 @@ enum ItemSubPredicateKind {
WrittenBookContent => "minecraft:written_book_content", WrittenBookContent => "minecraft:written_book_content",
AttributeModifiers => "minecraft:attribute_modifiers", AttributeModifiers => "minecraft:attribute_modifiers",
Trim => "minecraft:trim", Trim => "minecraft:trim",
JukeboxPlayable => "minecraft:jukebox_playable",
} }
} }
@ -6391,3 +6414,132 @@ enum MapDecorationKind {
TrialChambers => "minecraft:trial_chambers", TrialChambers => "minecraft:trial_chambers",
} }
} }
registry! {
enum EnchantmentEffectComponentKind {
DamageProtection => "minecraft:damage_protection",
DamageImmunity => "minecraft:damage_immunity",
Damage => "minecraft:damage",
SmashDamagePerFallenBlock => "minecraft:smash_damage_per_fallen_block",
Knockback => "minecraft:knockback",
ArmorEffectiveness => "minecraft:armor_effectiveness",
PostAttack => "minecraft:post_attack",
HitBlock => "minecraft:hit_block",
ItemDamage => "minecraft:item_damage",
Attributes => "minecraft:attributes",
EquipmentDrops => "minecraft:equipment_drops",
LocationChanged => "minecraft:location_changed",
Tick => "minecraft:tick",
AmmoUse => "minecraft:ammo_use",
ProjectilePiercing => "minecraft:projectile_piercing",
ProjectileSpawned => "minecraft:projectile_spawned",
ProjectileSpread => "minecraft:projectile_spread",
ProjectileCount => "minecraft:projectile_count",
TridentReturnAcceleration => "minecraft:trident_return_acceleration",
FishingTimeReduction => "minecraft:fishing_time_reduction",
FishingLuckBonus => "minecraft:fishing_luck_bonus",
BlockExperience => "minecraft:block_experience",
MobExperience => "minecraft:mob_experience",
RepairWithXp => "minecraft:repair_with_xp",
CrossbowChargeTime => "minecraft:crossbow_charge_time",
CrossbowChargingSounds => "minecraft:crossbow_charging_sounds",
TridentSound => "minecraft:trident_sound",
PreventEquipmentDrop => "minecraft:prevent_equipment_drop",
PreventArmorChange => "minecraft:prevent_armor_change",
TridentSpinAttackStrength => "minecraft:trident_spin_attack_strength",
}
}
registry! {
enum EnchantmentEntityEffectKind {
AllOf => "minecraft:all_of",
ApplyMobEffect => "minecraft:apply_mob_effect",
DamageEntity => "minecraft:damage_entity",
DamageItem => "minecraft:damage_item",
Explode => "minecraft:explode",
Ignite => "minecraft:ignite",
PlaySound => "minecraft:play_sound",
ReplaceBlock => "minecraft:replace_block",
ReplaceDisk => "minecraft:replace_disk",
RunFunction => "minecraft:run_function",
SetBlockProperties => "minecraft:set_block_properties",
SpawnParticles => "minecraft:spawn_particles",
SummonEntity => "minecraft:summon_entity",
}
}
registry! {
enum EnchantmentLevelBasedValueKind {
Clamped => "minecraft:clamped",
Fraction => "minecraft:fraction",
LevelsSquared => "minecraft:levels_squared",
Linear => "minecraft:linear",
Lookup => "minecraft:lookup",
}
}
registry! {
enum EnchantmentLocationBasedEffectKind {
AllOf => "minecraft:all_of",
ApplyMobEffect => "minecraft:apply_mob_effect",
Attribute => "minecraft:attribute",
DamageEntity => "minecraft:damage_entity",
DamageItem => "minecraft:damage_item",
Explode => "minecraft:explode",
Ignite => "minecraft:ignite",
PlaySound => "minecraft:play_sound",
ReplaceBlock => "minecraft:replace_block",
ReplaceDisk => "minecraft:replace_disk",
RunFunction => "minecraft:run_function",
SetBlockProperties => "minecraft:set_block_properties",
SpawnParticles => "minecraft:spawn_particles",
SummonEntity => "minecraft:summon_entity",
}
}
registry! {
enum EnchantmentProviderKind {
ByCost => "minecraft:by_cost",
ByCostWithDifficulty => "minecraft:by_cost_with_difficulty",
Single => "minecraft:single",
}
}
registry! {
enum EnchantmentValueEffectKind {
Add => "minecraft:add",
AllOf => "minecraft:all_of",
Multiply => "minecraft:multiply",
RemoveBinomial => "minecraft:remove_binomial",
Set => "minecraft:set",
}
}
registry! {
enum DecoratedPotPattern {
Angler => "minecraft:angler",
Archer => "minecraft:archer",
ArmsUp => "minecraft:arms_up",
Blade => "minecraft:blade",
Brewer => "minecraft:brewer",
Burn => "minecraft:burn",
Danger => "minecraft:danger",
Explorer => "minecraft:explorer",
Flow => "minecraft:flow",
Friend => "minecraft:friend",
Guster => "minecraft:guster",
Heart => "minecraft:heart",
Heartbreak => "minecraft:heartbreak",
Howl => "minecraft:howl",
Miner => "minecraft:miner",
Mourner => "minecraft:mourner",
Plenty => "minecraft:plenty",
Prize => "minecraft:prize",
Scrape => "minecraft:scrape",
Sheaf => "minecraft:sheaf",
Shelter => "minecraft:shelter",
Skull => "minecraft:skull",
Snort => "minecraft:snort",
Blank => "minecraft:blank",
}
}

View file

@ -14,6 +14,8 @@ pub static ACACIA_LOGS: Lazy<HashSet<Block>> = Lazy::new(|| {
Block::StrippedAcaciaWood, Block::StrippedAcaciaWood,
]) ])
}); });
pub static AIR: Lazy<HashSet<Block>> =
Lazy::new(|| HashSet::from_iter(vec![Block::Air, Block::VoidAir, Block::CaveAir]));
pub static ALL_HANGING_SIGNS: Lazy<HashSet<Block>> = Lazy::new(|| { pub static ALL_HANGING_SIGNS: Lazy<HashSet<Block>> = Lazy::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Block::OakHangingSign, Block::OakHangingSign,
@ -354,6 +356,8 @@ pub static BIRCH_LOGS: Lazy<HashSet<Block>> = Lazy::new(|| {
Block::StrippedBirchWood, Block::StrippedBirchWood,
]) ])
}); });
pub static BLOCKS_WIND_CHARGE_EXPLOSIONS: Lazy<HashSet<Block>> =
Lazy::new(|| HashSet::from_iter(vec![Block::Barrier, Block::Bedrock]));
pub static BUTTONS: Lazy<HashSet<Block>> = Lazy::new(|| { pub static BUTTONS: Lazy<HashSet<Block>> = Lazy::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Block::OakButton, Block::OakButton,
@ -745,6 +749,14 @@ pub static DOES_NOT_BLOCK_HOPPERS: Lazy<HashSet<Block>> =
Lazy::new(|| HashSet::from_iter(vec![Block::BeeNest, Block::Beehive])); Lazy::new(|| HashSet::from_iter(vec![Block::BeeNest, Block::Beehive]));
pub static DOORS: Lazy<HashSet<Block>> = Lazy::new(|| { pub static DOORS: Lazy<HashSet<Block>> = Lazy::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Block::CopperDoor,
Block::ExposedCopperDoor,
Block::WeatheredCopperDoor,
Block::OxidizedCopperDoor,
Block::WaxedCopperDoor,
Block::WaxedExposedCopperDoor,
Block::WaxedWeatheredCopperDoor,
Block::WaxedOxidizedCopperDoor,
Block::IronDoor, Block::IronDoor,
Block::OakDoor, Block::OakDoor,
Block::SpruceDoor, Block::SpruceDoor,
@ -890,6 +902,8 @@ pub static FEATURES_CANNOT_REPLACE: Lazy<HashSet<Block>> = Lazy::new(|| {
Block::Chest, Block::Chest,
Block::EndPortalFrame, Block::EndPortalFrame,
Block::ReinforcedDeepslate, Block::ReinforcedDeepslate,
Block::TrialSpawner,
Block::Vault,
]) ])
}); });
pub static FENCE_GATES: Lazy<HashSet<Block>> = Lazy::new(|| { pub static FENCE_GATES: Lazy<HashSet<Block>> = Lazy::new(|| {
@ -1173,6 +1187,47 @@ pub static INCORRECT_FOR_GOLD_TOOL: Lazy<HashSet<Block>> = Lazy::new(|| {
Block::WaxedOxidizedCutCopperStairs, Block::WaxedOxidizedCutCopperStairs,
Block::WaxedOxidizedCutCopper, Block::WaxedOxidizedCutCopper,
Block::LightningRod, Block::LightningRod,
Block::Crafter,
Block::ChiseledCopper,
Block::ExposedChiseledCopper,
Block::WeatheredChiseledCopper,
Block::OxidizedChiseledCopper,
Block::WaxedChiseledCopper,
Block::WaxedExposedChiseledCopper,
Block::WaxedWeatheredChiseledCopper,
Block::WaxedOxidizedChiseledCopper,
Block::CopperGrate,
Block::ExposedCopperGrate,
Block::WeatheredCopperGrate,
Block::OxidizedCopperGrate,
Block::WaxedCopperGrate,
Block::WaxedExposedCopperGrate,
Block::WaxedWeatheredCopperGrate,
Block::WaxedOxidizedCopperGrate,
Block::CopperBulb,
Block::ExposedCopperBulb,
Block::WeatheredCopperBulb,
Block::OxidizedCopperBulb,
Block::WaxedCopperBulb,
Block::WaxedExposedCopperBulb,
Block::WaxedWeatheredCopperBulb,
Block::WaxedOxidizedCopperBulb,
Block::CopperTrapdoor,
Block::ExposedCopperTrapdoor,
Block::WeatheredCopperTrapdoor,
Block::OxidizedCopperTrapdoor,
Block::WaxedCopperTrapdoor,
Block::WaxedExposedCopperTrapdoor,
Block::WaxedWeatheredCopperTrapdoor,
Block::WaxedOxidizedCopperTrapdoor,
Block::CopperDoor,
Block::ExposedCopperDoor,
Block::WeatheredCopperDoor,
Block::OxidizedCopperDoor,
Block::WaxedCopperDoor,
Block::WaxedExposedCopperDoor,
Block::WaxedWeatheredCopperDoor,
Block::WaxedOxidizedCopperDoor,
]) ])
}); });
pub static INCORRECT_FOR_IRON_TOOL: Lazy<HashSet<Block>> = Lazy::new(|| { pub static INCORRECT_FOR_IRON_TOOL: Lazy<HashSet<Block>> = Lazy::new(|| {
@ -1269,6 +1324,47 @@ pub static INCORRECT_FOR_WOODEN_TOOL: Lazy<HashSet<Block>> = Lazy::new(|| {
Block::WaxedOxidizedCutCopperStairs, Block::WaxedOxidizedCutCopperStairs,
Block::WaxedOxidizedCutCopper, Block::WaxedOxidizedCutCopper,
Block::LightningRod, Block::LightningRod,
Block::Crafter,
Block::ChiseledCopper,
Block::ExposedChiseledCopper,
Block::WeatheredChiseledCopper,
Block::OxidizedChiseledCopper,
Block::WaxedChiseledCopper,
Block::WaxedExposedChiseledCopper,
Block::WaxedWeatheredChiseledCopper,
Block::WaxedOxidizedChiseledCopper,
Block::CopperGrate,
Block::ExposedCopperGrate,
Block::WeatheredCopperGrate,
Block::OxidizedCopperGrate,
Block::WaxedCopperGrate,
Block::WaxedExposedCopperGrate,
Block::WaxedWeatheredCopperGrate,
Block::WaxedOxidizedCopperGrate,
Block::CopperBulb,
Block::ExposedCopperBulb,
Block::WeatheredCopperBulb,
Block::OxidizedCopperBulb,
Block::WaxedCopperBulb,
Block::WaxedExposedCopperBulb,
Block::WaxedWeatheredCopperBulb,
Block::WaxedOxidizedCopperBulb,
Block::CopperTrapdoor,
Block::ExposedCopperTrapdoor,
Block::WeatheredCopperTrapdoor,
Block::OxidizedCopperTrapdoor,
Block::WaxedCopperTrapdoor,
Block::WaxedExposedCopperTrapdoor,
Block::WaxedWeatheredCopperTrapdoor,
Block::WaxedOxidizedCopperTrapdoor,
Block::CopperDoor,
Block::ExposedCopperDoor,
Block::WeatheredCopperDoor,
Block::OxidizedCopperDoor,
Block::WaxedCopperDoor,
Block::WaxedExposedCopperDoor,
Block::WaxedWeatheredCopperDoor,
Block::WaxedOxidizedCopperDoor,
]) ])
}); });
pub static INFINIBURN_END: Lazy<HashSet<Block>> = pub static INFINIBURN_END: Lazy<HashSet<Block>> =
@ -1308,6 +1404,8 @@ pub static LAVA_POOL_STONE_CANNOT_REPLACE: Lazy<HashSet<Block>> = Lazy::new(|| {
Block::Chest, Block::Chest,
Block::EndPortalFrame, Block::EndPortalFrame,
Block::ReinforcedDeepslate, Block::ReinforcedDeepslate,
Block::TrialSpawner,
Block::Vault,
Block::JungleLeaves, Block::JungleLeaves,
Block::OakLeaves, Block::OakLeaves,
Block::SpruceLeaves, Block::SpruceLeaves,
@ -2182,6 +2280,61 @@ pub static MINEABLE_PICKAXE: Lazy<HashSet<Block>> = Lazy::new(|| {
Block::MudBrickStairs, Block::MudBrickStairs,
Block::MudBrickSlab, Block::MudBrickSlab,
Block::PackedMud, Block::PackedMud,
Block::Crafter,
Block::TuffSlab,
Block::TuffStairs,
Block::TuffWall,
Block::ChiseledTuff,
Block::PolishedTuff,
Block::PolishedTuffSlab,
Block::PolishedTuffStairs,
Block::PolishedTuffWall,
Block::TuffBricks,
Block::TuffBrickSlab,
Block::TuffBrickStairs,
Block::TuffBrickWall,
Block::ChiseledTuffBricks,
Block::ChiseledCopper,
Block::ExposedChiseledCopper,
Block::WeatheredChiseledCopper,
Block::OxidizedChiseledCopper,
Block::WaxedChiseledCopper,
Block::WaxedExposedChiseledCopper,
Block::WaxedWeatheredChiseledCopper,
Block::WaxedOxidizedChiseledCopper,
Block::CopperGrate,
Block::ExposedCopperGrate,
Block::WeatheredCopperGrate,
Block::OxidizedCopperGrate,
Block::WaxedCopperGrate,
Block::WaxedExposedCopperGrate,
Block::WaxedWeatheredCopperGrate,
Block::WaxedOxidizedCopperGrate,
Block::CopperBulb,
Block::ExposedCopperBulb,
Block::WeatheredCopperBulb,
Block::OxidizedCopperBulb,
Block::WaxedCopperBulb,
Block::WaxedExposedCopperBulb,
Block::WaxedWeatheredCopperBulb,
Block::WaxedOxidizedCopperBulb,
Block::CopperDoor,
Block::ExposedCopperDoor,
Block::WeatheredCopperDoor,
Block::OxidizedCopperDoor,
Block::WaxedCopperDoor,
Block::WaxedExposedCopperDoor,
Block::WaxedWeatheredCopperDoor,
Block::WaxedOxidizedCopperDoor,
Block::CopperTrapdoor,
Block::ExposedCopperTrapdoor,
Block::WeatheredCopperTrapdoor,
Block::OxidizedCopperTrapdoor,
Block::WaxedCopperTrapdoor,
Block::WaxedExposedCopperTrapdoor,
Block::WaxedWeatheredCopperTrapdoor,
Block::WaxedOxidizedCopperTrapdoor,
Block::HeavyCore,
Block::StoneButton, Block::StoneButton,
Block::PolishedBlackstoneButton, Block::PolishedBlackstoneButton,
Block::CobblestoneWall, Block::CobblestoneWall,
@ -2206,6 +2359,9 @@ pub static MINEABLE_PICKAXE: Lazy<HashSet<Block>> = Lazy::new(|| {
Block::DeepslateTileWall, Block::DeepslateTileWall,
Block::DeepslateBrickWall, Block::DeepslateBrickWall,
Block::MudBrickWall, Block::MudBrickWall,
Block::TuffWall,
Block::PolishedTuffWall,
Block::TuffBrickWall,
Block::ShulkerBox, Block::ShulkerBox,
Block::BlackShulkerBox, Block::BlackShulkerBox,
Block::BlueShulkerBox, Block::BlueShulkerBox,
@ -2276,6 +2432,29 @@ pub static MINEABLE_SHOVEL: Lazy<HashSet<Block>> = Lazy::new(|| {
Block::BlackConcretePowder, Block::BlackConcretePowder,
]) ])
}); });
pub static MOB_INTERACTABLE_DOORS: Lazy<HashSet<Block>> = Lazy::new(|| {
HashSet::from_iter(vec![
Block::CopperDoor,
Block::ExposedCopperDoor,
Block::WeatheredCopperDoor,
Block::OxidizedCopperDoor,
Block::WaxedCopperDoor,
Block::WaxedExposedCopperDoor,
Block::WaxedWeatheredCopperDoor,
Block::WaxedOxidizedCopperDoor,
Block::OakDoor,
Block::SpruceDoor,
Block::BirchDoor,
Block::JungleDoor,
Block::AcaciaDoor,
Block::DarkOakDoor,
Block::CrimsonDoor,
Block::WarpedDoor,
Block::MangroveDoor,
Block::BambooDoor,
Block::CherryDoor,
])
});
pub static MOOSHROOMS_SPAWNABLE_ON: Lazy<HashSet<Block>> = pub static MOOSHROOMS_SPAWNABLE_ON: Lazy<HashSet<Block>> =
Lazy::new(|| HashSet::from_iter(vec![Block::Mycelium])); Lazy::new(|| HashSet::from_iter(vec![Block::Mycelium]));
pub static MOSS_REPLACEABLE: Lazy<HashSet<Block>> = Lazy::new(|| { pub static MOSS_REPLACEABLE: Lazy<HashSet<Block>> = Lazy::new(|| {
@ -2377,6 +2556,47 @@ pub static NEEDS_STONE_TOOL: Lazy<HashSet<Block>> = Lazy::new(|| {
Block::WaxedOxidizedCutCopperStairs, Block::WaxedOxidizedCutCopperStairs,
Block::WaxedOxidizedCutCopper, Block::WaxedOxidizedCutCopper,
Block::LightningRod, Block::LightningRod,
Block::Crafter,
Block::ChiseledCopper,
Block::ExposedChiseledCopper,
Block::WeatheredChiseledCopper,
Block::OxidizedChiseledCopper,
Block::WaxedChiseledCopper,
Block::WaxedExposedChiseledCopper,
Block::WaxedWeatheredChiseledCopper,
Block::WaxedOxidizedChiseledCopper,
Block::CopperGrate,
Block::ExposedCopperGrate,
Block::WeatheredCopperGrate,
Block::OxidizedCopperGrate,
Block::WaxedCopperGrate,
Block::WaxedExposedCopperGrate,
Block::WaxedWeatheredCopperGrate,
Block::WaxedOxidizedCopperGrate,
Block::CopperBulb,
Block::ExposedCopperBulb,
Block::WeatheredCopperBulb,
Block::OxidizedCopperBulb,
Block::WaxedCopperBulb,
Block::WaxedExposedCopperBulb,
Block::WaxedWeatheredCopperBulb,
Block::WaxedOxidizedCopperBulb,
Block::CopperTrapdoor,
Block::ExposedCopperTrapdoor,
Block::WeatheredCopperTrapdoor,
Block::OxidizedCopperTrapdoor,
Block::WaxedCopperTrapdoor,
Block::WaxedExposedCopperTrapdoor,
Block::WaxedWeatheredCopperTrapdoor,
Block::WaxedOxidizedCopperTrapdoor,
Block::CopperDoor,
Block::ExposedCopperDoor,
Block::WeatheredCopperDoor,
Block::OxidizedCopperDoor,
Block::WaxedCopperDoor,
Block::WaxedExposedCopperDoor,
Block::WaxedWeatheredCopperDoor,
Block::WaxedOxidizedCopperDoor,
]) ])
}); });
pub static NETHER_CARVER_REPLACEABLES: Lazy<HashSet<Block>> = Lazy::new(|| { pub static NETHER_CARVER_REPLACEABLES: Lazy<HashSet<Block>> = Lazy::new(|| {
@ -2927,6 +3147,9 @@ pub static SLABS: Lazy<HashSet<Block>> = Lazy::new(|| {
Block::CutCopperSlab, Block::CutCopperSlab,
Block::WaxedOxidizedCutCopperSlab, Block::WaxedOxidizedCutCopperSlab,
Block::MudBrickSlab, Block::MudBrickSlab,
Block::TuffSlab,
Block::PolishedTuffSlab,
Block::TuffBrickSlab,
Block::OakSlab, Block::OakSlab,
Block::SpruceSlab, Block::SpruceSlab,
Block::BirchSlab, Block::BirchSlab,
@ -3056,6 +3279,9 @@ pub static STAIRS: Lazy<HashSet<Block>> = Lazy::new(|| {
Block::WaxedCutCopperStairs, Block::WaxedCutCopperStairs,
Block::WaxedOxidizedCutCopperStairs, Block::WaxedOxidizedCutCopperStairs,
Block::MudBrickStairs, Block::MudBrickStairs,
Block::TuffStairs,
Block::PolishedTuffStairs,
Block::TuffBrickStairs,
Block::OakStairs, Block::OakStairs,
Block::SpruceStairs, Block::SpruceStairs,
Block::BirchStairs, Block::BirchStairs,
@ -3237,6 +3463,14 @@ pub static TRAIL_RUINS_REPLACEABLE: Lazy<HashSet<Block>> =
pub static TRAPDOORS: Lazy<HashSet<Block>> = Lazy::new(|| { pub static TRAPDOORS: Lazy<HashSet<Block>> = Lazy::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Block::IronTrapdoor, Block::IronTrapdoor,
Block::CopperTrapdoor,
Block::ExposedCopperTrapdoor,
Block::WeatheredCopperTrapdoor,
Block::OxidizedCopperTrapdoor,
Block::WaxedCopperTrapdoor,
Block::WaxedExposedCopperTrapdoor,
Block::WaxedWeatheredCopperTrapdoor,
Block::WaxedOxidizedCopperTrapdoor,
Block::AcaciaTrapdoor, Block::AcaciaTrapdoor,
Block::BirchTrapdoor, Block::BirchTrapdoor,
Block::DarkOakTrapdoor, Block::DarkOakTrapdoor,
@ -3429,6 +3663,9 @@ pub static WALLS: Lazy<HashSet<Block>> = Lazy::new(|| {
Block::DeepslateTileWall, Block::DeepslateTileWall,
Block::DeepslateBrickWall, Block::DeepslateBrickWall,
Block::MudBrickWall, Block::MudBrickWall,
Block::TuffWall,
Block::PolishedTuffWall,
Block::TuffBrickWall,
]) ])
}); });
pub static WARPED_STEMS: Lazy<HashSet<Block>> = Lazy::new(|| { pub static WARPED_STEMS: Lazy<HashSet<Block>> = Lazy::new(|| {

View file

@ -155,6 +155,7 @@ pub static BOOKSHELF_BOOKS: Lazy<HashSet<Item>> = Lazy::new(|| {
pub static BREAKS_DECORATED_POTS: Lazy<HashSet<Item>> = Lazy::new(|| { pub static BREAKS_DECORATED_POTS: Lazy<HashSet<Item>> = Lazy::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Item::Trident, Item::Trident,
Item::Mace,
Item::DiamondSword, Item::DiamondSword,
Item::StoneSword, Item::StoneSword,
Item::GoldenSword, Item::GoldenSword,
@ -437,6 +438,9 @@ pub static DECORATED_POT_INGREDIENTS: Lazy<HashSet<Item>> = Lazy::new(|| {
Item::ShelterPotterySherd, Item::ShelterPotterySherd,
Item::SkullPotterySherd, Item::SkullPotterySherd,
Item::SnortPotterySherd, Item::SnortPotterySherd,
Item::FlowPotterySherd,
Item::GusterPotterySherd,
Item::ScrapePotterySherd,
]) ])
}); });
pub static DECORATED_POT_SHERDS: Lazy<HashSet<Item>> = Lazy::new(|| { pub static DECORATED_POT_SHERDS: Lazy<HashSet<Item>> = Lazy::new(|| {
@ -461,6 +465,9 @@ pub static DECORATED_POT_SHERDS: Lazy<HashSet<Item>> = Lazy::new(|| {
Item::ShelterPotterySherd, Item::ShelterPotterySherd,
Item::SkullPotterySherd, Item::SkullPotterySherd,
Item::SnortPotterySherd, Item::SnortPotterySherd,
Item::FlowPotterySherd,
Item::GusterPotterySherd,
Item::ScrapePotterySherd,
]) ])
}); });
pub static DIAMOND_ORES: Lazy<HashSet<Item>> = pub static DIAMOND_ORES: Lazy<HashSet<Item>> =
@ -480,6 +487,14 @@ pub static DIRT: Lazy<HashSet<Item>> = Lazy::new(|| {
}); });
pub static DOORS: Lazy<HashSet<Item>> = Lazy::new(|| { pub static DOORS: Lazy<HashSet<Item>> = Lazy::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Item::CopperDoor,
Item::ExposedCopperDoor,
Item::WeatheredCopperDoor,
Item::OxidizedCopperDoor,
Item::WaxedCopperDoor,
Item::WaxedExposedCopperDoor,
Item::WaxedWeatheredCopperDoor,
Item::WaxedOxidizedCopperDoor,
Item::IronDoor, Item::IronDoor,
Item::OakDoor, Item::OakDoor,
Item::SpruceDoor, Item::SpruceDoor,
@ -561,6 +576,7 @@ pub static ENCHANTABLE_DURABILITY: Lazy<HashSet<Item>> = Lazy::new(|| {
Item::FishingRod, Item::FishingRod,
Item::CarrotOnAStick, Item::CarrotOnAStick,
Item::WarpedFungusOnAStick, Item::WarpedFungusOnAStick,
Item::Mace,
Item::LeatherBoots, Item::LeatherBoots,
Item::ChainmailBoots, Item::ChainmailBoots,
Item::GoldenBoots, Item::GoldenBoots,
@ -658,6 +674,7 @@ pub static ENCHANTABLE_EQUIPPABLE: Lazy<HashSet<Item>> = Lazy::new(|| {
}); });
pub static ENCHANTABLE_FIRE_ASPECT: Lazy<HashSet<Item>> = Lazy::new(|| { pub static ENCHANTABLE_FIRE_ASPECT: Lazy<HashSet<Item>> = Lazy::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Item::Mace,
Item::DiamondSword, Item::DiamondSword,
Item::StoneSword, Item::StoneSword,
Item::GoldenSword, Item::GoldenSword,
@ -699,6 +716,8 @@ pub static ENCHANTABLE_LEG_ARMOR: Lazy<HashSet<Item>> = Lazy::new(|| {
Item::NetheriteLeggings, Item::NetheriteLeggings,
]) ])
}); });
pub static ENCHANTABLE_MACE: Lazy<HashSet<Item>> =
Lazy::new(|| HashSet::from_iter(vec![Item::Mace]));
pub static ENCHANTABLE_MINING: Lazy<HashSet<Item>> = Lazy::new(|| { pub static ENCHANTABLE_MINING: Lazy<HashSet<Item>> = Lazy::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Item::Shears, Item::Shears,
@ -799,6 +818,7 @@ pub static ENCHANTABLE_VANISHING: Lazy<HashSet<Item>> = Lazy::new(|| {
Item::FishingRod, Item::FishingRod,
Item::CarrotOnAStick, Item::CarrotOnAStick,
Item::WarpedFungusOnAStick, Item::WarpedFungusOnAStick,
Item::Mace,
Item::PlayerHead, Item::PlayerHead,
Item::CreeperHead, Item::CreeperHead,
Item::ZombieHead, Item::ZombieHead,
@ -865,6 +885,7 @@ pub static ENCHANTABLE_VANISHING: Lazy<HashSet<Item>> = Lazy::new(|| {
}); });
pub static ENCHANTABLE_WEAPON: Lazy<HashSet<Item>> = Lazy::new(|| { pub static ENCHANTABLE_WEAPON: Lazy<HashSet<Item>> = Lazy::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Item::Mace,
Item::DiamondSword, Item::DiamondSword,
Item::StoneSword, Item::StoneSword,
Item::GoldenSword, Item::GoldenSword,
@ -1183,26 +1204,6 @@ pub static MEAT: Lazy<HashSet<Item>> = Lazy::new(|| {
Item::RottenFlesh, Item::RottenFlesh,
]) ])
}); });
pub static MUSIC_DISCS: Lazy<HashSet<Item>> = Lazy::new(|| {
HashSet::from_iter(vec![
Item::MusicDiscPigstep,
Item::MusicDiscOtherside,
Item::MusicDisc5,
Item::MusicDiscRelic,
Item::MusicDisc13,
Item::MusicDiscCat,
Item::MusicDiscBlocks,
Item::MusicDiscChirp,
Item::MusicDiscFar,
Item::MusicDiscMall,
Item::MusicDiscMellohi,
Item::MusicDiscStal,
Item::MusicDiscStrad,
Item::MusicDiscWard,
Item::MusicDisc11,
Item::MusicDiscWait,
])
});
pub static NON_FLAMMABLE_WOOD: Lazy<HashSet<Item>> = Lazy::new(|| { pub static NON_FLAMMABLE_WOOD: Lazy<HashSet<Item>> = Lazy::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Item::WarpedStem, Item::WarpedStem,
@ -1450,6 +1451,9 @@ pub static SLABS: Lazy<HashSet<Item>> = Lazy::new(|| {
Item::CutCopperSlab, Item::CutCopperSlab,
Item::WaxedOxidizedCutCopperSlab, Item::WaxedOxidizedCutCopperSlab,
Item::MudBrickSlab, Item::MudBrickSlab,
Item::TuffSlab,
Item::PolishedTuffSlab,
Item::TuffBrickSlab,
Item::OakSlab, Item::OakSlab,
Item::SpruceSlab, Item::SpruceSlab,
Item::BirchSlab, Item::BirchSlab,
@ -1539,6 +1543,9 @@ pub static STAIRS: Lazy<HashSet<Item>> = Lazy::new(|| {
Item::WaxedCutCopperStairs, Item::WaxedCutCopperStairs,
Item::WaxedOxidizedCutCopperStairs, Item::WaxedOxidizedCutCopperStairs,
Item::MudBrickStairs, Item::MudBrickStairs,
Item::TuffStairs,
Item::PolishedTuffStairs,
Item::TuffBrickStairs,
Item::OakStairs, Item::OakStairs,
Item::SpruceStairs, Item::SpruceStairs,
Item::BirchStairs, Item::BirchStairs,
@ -1623,6 +1630,14 @@ pub static TERRACOTTA: Lazy<HashSet<Item>> = Lazy::new(|| {
pub static TRAPDOORS: Lazy<HashSet<Item>> = Lazy::new(|| { pub static TRAPDOORS: Lazy<HashSet<Item>> = Lazy::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Item::IronTrapdoor, Item::IronTrapdoor,
Item::CopperTrapdoor,
Item::ExposedCopperTrapdoor,
Item::WeatheredCopperTrapdoor,
Item::OxidizedCopperTrapdoor,
Item::WaxedCopperTrapdoor,
Item::WaxedExposedCopperTrapdoor,
Item::WaxedWeatheredCopperTrapdoor,
Item::WaxedOxidizedCopperTrapdoor,
Item::AcaciaTrapdoor, Item::AcaciaTrapdoor,
Item::BirchTrapdoor, Item::BirchTrapdoor,
Item::DarkOakTrapdoor, Item::DarkOakTrapdoor,
@ -1668,6 +1683,8 @@ pub static TRIM_TEMPLATES: Lazy<HashSet<Item>> = Lazy::new(|| {
Item::SilenceArmorTrimSmithingTemplate, Item::SilenceArmorTrimSmithingTemplate,
Item::RaiserArmorTrimSmithingTemplate, Item::RaiserArmorTrimSmithingTemplate,
Item::HostArmorTrimSmithingTemplate, Item::HostArmorTrimSmithingTemplate,
Item::FlowArmorTrimSmithingTemplate,
Item::BoltArmorTrimSmithingTemplate,
]) ])
}); });
pub static TRIMMABLE_ARMOR: Lazy<HashSet<Item>> = Lazy::new(|| { pub static TRIMMABLE_ARMOR: Lazy<HashSet<Item>> = Lazy::new(|| {
@ -1735,6 +1752,9 @@ pub static WALLS: Lazy<HashSet<Item>> = Lazy::new(|| {
Item::DeepslateTileWall, Item::DeepslateTileWall,
Item::DeepslateBrickWall, Item::DeepslateBrickWall,
Item::MudBrickWall, Item::MudBrickWall,
Item::TuffWall,
Item::PolishedTuffWall,
Item::TuffBrickWall,
]) ])
}); });
pub static WARPED_STEMS: Lazy<HashSet<Item>> = Lazy::new(|| { pub static WARPED_STEMS: Lazy<HashSet<Item>> = Lazy::new(|| {

View file

@ -15,9 +15,9 @@ def generate(version_id: str):
lib.code.inventory.update_menus(registries['minecraft:menu']['entries']) lib.code.inventory.update_menus(registries['minecraft:menu']['entries'])
block_tags = lib.extract.get_registry_tags(version_id, 'blocks') block_tags = lib.extract.get_registry_tags(version_id, 'block')
item_tags = lib.extract.get_registry_tags(version_id, 'items') item_tags = lib.extract.get_registry_tags(version_id, 'item')
fluid_tags = lib.extract.get_registry_tags(version_id, 'fluids') fluid_tags = lib.extract.get_registry_tags(version_id, 'fluid')
lib.code.tags.generate_tags(block_tags, 'blocks', 'Block') lib.code.tags.generate_tags(block_tags, 'blocks', 'Block')
lib.code.tags.generate_tags(item_tags, 'items', 'Item') lib.code.tags.generate_tags(item_tags, 'items', 'Item')

View file

@ -1,8 +1,8 @@
# Extracting data from the Minecraft jars # Extracting data from the Minecraft jars
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from lib.download import get_server_jar, get_burger, get_client_jar, get_pixlyzer, get_yarn_data, get_fabric_api_versions, get_fabric_loader_versions from lib.download import get_mappings_for_version, get_server_jar, get_burger, get_client_jar, get_pixlyzer, get_yarn_data, get_fabric_api_versions, get_fabric_loader_versions
from lib.utils import get_dir_location from lib.utils import get_dir_location, to_camel_case, upper_first_letter
from zipfile import ZipFile from zipfile import ZipFile
import subprocess import subprocess
import requests import requests
@ -281,14 +281,22 @@ def get_en_us_lang(version_id: str):
# this is very much not ideal. # this is very much not ideal.
if TYPE_CHECKING: from codegen.lib.mappings import Mappings if TYPE_CHECKING: from codegen.lib.mappings import Mappings
def get_packet_list(burger_data, mappings: 'Mappings'): def get_packet_list(version_id: str):
packet_list = list(burger_data[0]['packets']['packet'].values()) if version_id != '1.21':
return []
current_packet_id = 0
for packet in packet_list:
if packet['id'] == -1:
packet['id'] = current_packet_id
print(packet)
current_packet_id += 1
return packet_list generate_data_from_server_jar(version_id)
with open(get_dir_location(f'__cache__/generated-{version_id}/reports/packets.json'), 'r') as f:
packets_report = json.load(f)
packet_list = []
for state, state_value in packets_report.items():
for direction, direction_value in state_value.items():
for packet_resourcelocation, packet_value in direction_value.items():
assert packet_resourcelocation.startswith('minecraft:')
packet_resourcelocation = upper_first_letter(to_camel_case(packet_resourcelocation[len('minecraft:'):]))
packet_list.append({
'state': state,
'direction': direction,
'name': packet_resourcelocation,
'id': packet_value['protocol_id']
})

View file

@ -31,8 +31,8 @@ new_version_id = sys.argv[1]
new_mappings = lib.download.get_mappings_for_version(new_version_id) new_mappings = lib.download.get_mappings_for_version(new_version_id)
new_burger_data = lib.extract.get_burger_data_for_version(new_version_id) new_burger_data = lib.extract.get_burger_data_for_version(new_version_id)
old_packet_list = lib.extract.get_packet_list(old_burger_data, old_mappings) old_packet_list = lib.extract.get_packet_list(old_version_id)
new_packet_list = lib.extract.get_packet_list(new_burger_data, new_mappings) new_packet_list = lib.extract.get_packet_list(new_version_id)
# old_packets: dict[PacketIdentifier, str] = {} # old_packets: dict[PacketIdentifier, str] = {}