mirror of
https://github.com/mat-1/azalea.git
synced 2024-11-03 08:04:00 +00:00
1.21 (#145)
* 24w18a (data driven enchantments not implemented yet) * 1.21
This commit is contained in:
parent
38eab50b4f
commit
f66d2d4767
14 changed files with 652 additions and 131 deletions
|
@ -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. -->
|
||||
|
||||
_Currently supported Minecraft version: `1.20.6`._
|
||||
_Currently supported Minecraft version: `1.21`._
|
||||
|
||||
> [!WARNING]
|
||||
> Azalea is still very unfinished, though most crates are in a somewhat useable state
|
||||
|
|
|
@ -365,10 +365,7 @@ fn update_modifiers_for_held_item(
|
|||
};
|
||||
attributes
|
||||
.attack_speed
|
||||
.remove(&azalea_entity::attributes::BASE_ATTACK_SPEED_UUID);
|
||||
attributes
|
||||
.attack_speed
|
||||
.insert(azalea_entity::attributes::tool_attack_speed_modifier(
|
||||
.insert(azalea_entity::attributes::base_attack_speed_modifier(
|
||||
added_attack_speed,
|
||||
))
|
||||
.unwrap();
|
||||
|
|
|
@ -463,7 +463,7 @@ fn set_sprinting(
|
|||
} else {
|
||||
attributes
|
||||
.speed
|
||||
.remove(&azalea_entity::attributes::sprinting_modifier().uuid)
|
||||
.remove(&azalea_entity::attributes::sprinting_modifier().id)
|
||||
.is_none()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,14 +1,11 @@
|
|||
//! See <https://minecraft.fandom.com/wiki/Attribute>.
|
||||
|
||||
use std::{
|
||||
collections::HashMap,
|
||||
io::{Cursor, Write},
|
||||
};
|
||||
use std::collections::HashMap;
|
||||
|
||||
use azalea_buf::{BufReadError, McBuf, McBufReadable, McBufWritable};
|
||||
use azalea_buf::McBuf;
|
||||
use azalea_core::resource_location::ResourceLocation;
|
||||
use bevy_ecs::component::Component;
|
||||
use thiserror::Error;
|
||||
use uuid::{uuid, Uuid};
|
||||
|
||||
#[derive(Clone, Debug, Component)]
|
||||
pub struct Attributes {
|
||||
|
@ -19,7 +16,7 @@ pub struct Attributes {
|
|||
#[derive(Clone, Debug)]
|
||||
pub struct AttributeInstance {
|
||||
pub base: f64,
|
||||
modifiers_by_uuid: HashMap<Uuid, AttributeModifier>,
|
||||
modifiers_by_id: HashMap<ResourceLocation, AttributeModifier>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Error)]
|
||||
|
@ -30,13 +27,13 @@ impl AttributeInstance {
|
|||
pub fn new(base: f64) -> Self {
|
||||
Self {
|
||||
base,
|
||||
modifiers_by_uuid: HashMap::new(),
|
||||
modifiers_by_id: HashMap::new(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn calculate(&self) -> f64 {
|
||||
let mut total = self.base;
|
||||
for modifier in self.modifiers_by_uuid.values() {
|
||||
for modifier in self.modifiers_by_id.values() {
|
||||
match modifier.operation {
|
||||
AttributeModifierOperation::Addition => total += modifier.amount,
|
||||
AttributeModifierOperation::MultiplyBase => total += self.base * modifier.amount,
|
||||
|
@ -52,8 +49,8 @@ impl AttributeInstance {
|
|||
/// Add a new modifier to this attribute.
|
||||
pub fn insert(&mut self, modifier: AttributeModifier) -> Result<(), AlreadyPresentError> {
|
||||
if self
|
||||
.modifiers_by_uuid
|
||||
.insert(modifier.uuid, modifier)
|
||||
.modifiers_by_id
|
||||
.insert(modifier.id.clone(), modifier)
|
||||
.is_some()
|
||||
{
|
||||
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.
|
||||
pub fn remove(&mut self, uuid: &Uuid) -> Option<AttributeModifier> {
|
||||
self.modifiers_by_uuid.remove(uuid)
|
||||
pub fn remove(&mut self, id: &ResourceLocation) -> Option<AttributeModifier> {
|
||||
self.modifiers_by_id.remove(id)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
#[derive(Clone, Debug, McBuf)]
|
||||
pub struct AttributeModifier {
|
||||
pub uuid: Uuid,
|
||||
pub name: String,
|
||||
pub id: ResourceLocation,
|
||||
pub amount: f64,
|
||||
pub operation: AttributeModifierOperation,
|
||||
}
|
||||
|
@ -86,50 +82,16 @@ pub enum AttributeModifierOperation {
|
|||
|
||||
pub fn sprinting_modifier() -> AttributeModifier {
|
||||
AttributeModifier {
|
||||
uuid: uuid!("662A6B8D-DA3E-4C1C-8813-96EA6097278D"),
|
||||
name: "Sprinting speed boost".to_string(),
|
||||
id: ResourceLocation::new("sprinting"),
|
||||
amount: 0.30000001192092896,
|
||||
operation: AttributeModifierOperation::MultiplyTotal,
|
||||
}
|
||||
}
|
||||
|
||||
pub static BASE_ATTACK_SPEED_UUID: Uuid = uuid!("FA233E1C-4180-4865-B01B-BCCE9785ACA3");
|
||||
pub fn weapon_attack_speed_modifier(amount: f64) -> AttributeModifier {
|
||||
pub fn base_attack_speed_modifier(amount: f64) -> AttributeModifier {
|
||||
AttributeModifier {
|
||||
uuid: BASE_ATTACK_SPEED_UUID,
|
||||
name: "Weapon modifier".to_string(),
|
||||
id: ResourceLocation::new("base_attack_speed"),
|
||||
amount,
|
||||
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(())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,6 +49,8 @@ pub fn from_kind(
|
|||
kind: azalea_registry::DataComponentKind,
|
||||
buf: &mut Cursor<&[u8]>,
|
||||
) -> 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 {
|
||||
DataComponentKind::CustomData => Box::new(CustomData::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::Lock => Box::new(Lock::read_from(buf)?),
|
||||
DataComponentKind::ContainerLoot => Box::new(ContainerLoot::read_from(buf)?),
|
||||
DataComponentKind::JukeboxPlayable => todo!(),
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -654,3 +657,10 @@ pub struct ContainerLoot {
|
|||
pub loot: NbtCompound,
|
||||
}
|
||||
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 {}
|
||||
|
|
|
@ -337,6 +337,7 @@
|
|||
"argument.entity.selector.allEntities": "All entities",
|
||||
"argument.entity.selector.allPlayers": "All players",
|
||||
"argument.entity.selector.missing": "Missing selector type",
|
||||
"argument.entity.selector.nearestEntity": "Nearest entity",
|
||||
"argument.entity.selector.nearestPlayer": "Nearest player",
|
||||
"argument.entity.selector.not_allowed": "Selector not allowed",
|
||||
"argument.entity.selector.randomPlayer": "Random player",
|
||||
|
@ -427,7 +428,9 @@
|
|||
"attribute.name.generic.attack_knockback": "Attack Knockback",
|
||||
"attribute.name.generic.attack_speed": "Attack Speed",
|
||||
"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.explosion_knockback_resistance": "Explosion Knockback Resistance",
|
||||
"attribute.name.generic.fall_damage_multiplier": "Fall Damage Multiplier",
|
||||
"attribute.name.generic.flying_speed": "Flying Speed",
|
||||
"attribute.name.generic.follow_range": "Mob Follow Range",
|
||||
|
@ -437,14 +440,21 @@
|
|||
"attribute.name.generic.luck": "Luck",
|
||||
"attribute.name.generic.max_absorption": "Max Absorption",
|
||||
"attribute.name.generic.max_health": "Max Health",
|
||||
"attribute.name.generic.movement_efficiency": "Movement Efficiency",
|
||||
"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.scale": "Scale",
|
||||
"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.player.block_break_speed": "Block Break Speed",
|
||||
"attribute.name.player.block_interaction_range": "Block 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",
|
||||
"biome.minecraft.badlands": "Badlands",
|
||||
"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.options": "Chat disabled in client options.",
|
||||
"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.moreInfo": "Chat not allowed by account settings. Cannot send or view messages.",
|
||||
"chat.disabled.profile": "Chat is not allowed by account settings. Press '%s' again for more information.",
|
||||
"chat.disabled.profile.moreInfo": "Chat is not allowed by account settings. Cannot send or view messages.",
|
||||
"chat.editBox": "chat",
|
||||
"chat.filtered": "Filtered by the server.",
|
||||
"chat.filtered_full": "The server has hidden your message for some players.",
|
||||
|
@ -3194,7 +3204,7 @@
|
|||
"disconnect.timeout": "Timed out",
|
||||
"disconnect.transfer": "Transferred to another server",
|
||||
"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.percent": "Progress: %s%%",
|
||||
"download.pack.title": "Downloading resource pack %s/%s",
|
||||
|
@ -3491,7 +3501,7 @@
|
|||
"filled_map.mansion": "Woodland Explorer Map",
|
||||
"filled_map.monument": "Ocean Explorer Map",
|
||||
"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.village_desert": "Desert 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.doTraderSpawning": "Spawn Wandering Traders",
|
||||
"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.doWeatherCycle": "Update weather",
|
||||
"gamerule.drowningDamage": "Deal drowning damage",
|
||||
"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": "Thrown Ender Pearls vanish on death",
|
||||
"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.fireDamage": "Deal fire damage",
|
||||
"gamerule.forgiveDeadPlayers": "Forgive dead players",
|
||||
|
@ -3609,6 +3621,7 @@
|
|||
"generator.minecraft.single_biome_surface": "Single Biome",
|
||||
"generator.single_biome_caves": "Caves",
|
||||
"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.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?",
|
||||
|
@ -3662,6 +3675,7 @@
|
|||
"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.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.sending.title": "Sending your report...",
|
||||
"gui.abuseReport.sent.title": "Report sent",
|
||||
|
@ -3741,6 +3755,8 @@
|
|||
"gui.done": "Done",
|
||||
"gui.down": "Down",
|
||||
"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.loadingMinecraft": "Loading Minecraft",
|
||||
"gui.minutes": "%s minute(s)",
|
||||
|
@ -3752,6 +3768,7 @@
|
|||
"gui.no": "No",
|
||||
"gui.none": "None",
|
||||
"gui.ok": "Ok",
|
||||
"gui.open_report_dir": "Open Report Directory",
|
||||
"gui.proceed": "Proceed",
|
||||
"gui.recipebook.moreRecipes": "Right Click for More",
|
||||
"gui.recipebook.page": "%s/%s",
|
||||
|
@ -3761,6 +3778,7 @@
|
|||
"gui.recipebook.toggleRecipes.craftable": "Showing Craftable",
|
||||
"gui.recipebook.toggleRecipes.smeltable": "Showing Smeltable",
|
||||
"gui.recipebook.toggleRecipes.smokable": "Showing Smokable",
|
||||
"gui.report_to_server": "Report To Server",
|
||||
"gui.socialInteractions.blocking_hint": "Manage with Microsoft account",
|
||||
"gui.socialInteractions.empty_blocked": "No blocked players 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_chirp": "Music Disc",
|
||||
"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.desc": "C418 - far",
|
||||
"item.minecraft.music_disc_mall": "Music Disc",
|
||||
|
@ -4161,6 +4183,8 @@
|
|||
"item.minecraft.music_disc_otherside.desc": "Lena Raine - otherside",
|
||||
"item.minecraft.music_disc_pigstep": "Music Disc",
|
||||
"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.desc": "Aaron Cherof - Relic",
|
||||
"item.minecraft.music_disc_stal": "Music Disc",
|
||||
|
@ -4459,9 +4483,12 @@
|
|||
"item.minecraft.zombie_spawn_egg": "Zombie Spawn Egg",
|
||||
"item.minecraft.zombie_villager_spawn_egg": "Zombie Villager 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.chest": "When on Body:",
|
||||
"item.modifiers.feet": "When on Feet:",
|
||||
"item.modifiers.hand": "When held:",
|
||||
"item.modifiers.head": "When on Head:",
|
||||
"item.modifiers.legs": "When on Legs:",
|
||||
"item.modifiers.mainhand": "When in Main Hand:",
|
||||
|
@ -4498,6 +4525,25 @@
|
|||
"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.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.attack": "Attack/Destroy",
|
||||
"key.back": "Walk Backwards",
|
||||
|
@ -4625,9 +4671,19 @@
|
|||
"key.socialInteractions": "Social Interactions Screen",
|
||||
"key.spectatorOutlines": "Highlight Players (Spectators)",
|
||||
"key.sprint": "Sprint",
|
||||
"key.swapOffhand": "Swap Item With Offhand",
|
||||
"key.swapOffhand": "Swap Item With Off Hand",
|
||||
"key.togglePerspective": "Toggle Perspective",
|
||||
"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.name": "English",
|
||||
"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.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.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.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.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.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.title": "Do you really want to upgrade your world?",
|
||||
"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.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.world.activityfeed.disabled": "Player feed temporarily disabled",
|
||||
"mco.configure.world.backup": "World Backups",
|
||||
|
@ -4744,6 +4804,7 @@
|
|||
"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.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.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.",
|
||||
|
@ -4758,8 +4819,8 @@
|
|||
"mco.configure.world.slot.tooltip": "Switch to world",
|
||||
"mco.configure.world.slot.tooltip.active": "Join",
|
||||
"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.npc": "Turning this option off will REMOVE ALL existing entities of that type, like Villagers",
|
||||
"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.title": "Warning!",
|
||||
"mco.configure.world.spawnAnimals": "Spawn Animals",
|
||||
"mco.configure.world.spawnMonsters": "Spawn Monsters",
|
||||
|
@ -4801,6 +4862,7 @@
|
|||
"mco.download.cancelled": "Download cancelled",
|
||||
"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.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.downloading": "Downloading",
|
||||
"mco.download.extracting": "Extracting",
|
||||
|
@ -4859,8 +4921,9 @@
|
|||
"mco.notification.dismiss": "Dismiss",
|
||||
"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.visitUrl.buttonText.default": "Open link",
|
||||
"mco.notification.visitUrl.buttonText.default": "Open Link",
|
||||
"mco.notification.visitUrl.message.default": "Please visit the link below",
|
||||
"mco.onlinePlayers": "Online Players",
|
||||
"mco.question": "Question",
|
||||
"mco.reset.world.adventure": "Adventures",
|
||||
"mco.reset.world.experience": "Experiences",
|
||||
|
@ -4966,6 +5029,8 @@
|
|||
"mco.worldSlot.minigame": "Minigame",
|
||||
"menu.convertingLevel": "Converting world",
|
||||
"menu.disconnect": "Disconnect",
|
||||
"menu.feedback": "Feedback...",
|
||||
"menu.feedback.title": "Feedback",
|
||||
"menu.game": "Game Menu",
|
||||
"menu.generatingLevel": "Generating world",
|
||||
"menu.generatingTerrain": "Building terrain",
|
||||
|
@ -4988,6 +5053,8 @@
|
|||
"menu.savingChunks": "Saving chunks",
|
||||
"menu.savingLevel": "Saving world",
|
||||
"menu.sendFeedback": "Give Feedback",
|
||||
"menu.server_links": "Server Links...",
|
||||
"menu.server_links.title": "Server Links",
|
||||
"menu.shareToLan": "Open to LAN",
|
||||
"menu.singleplayer": "Singleplayer",
|
||||
"menu.working": "Working...",
|
||||
|
@ -5154,14 +5221,14 @@
|
|||
"optimizeWorld.title": "Optimizing World '%s'",
|
||||
"options.accessibility": "Accessibility Settings...",
|
||||
"options.accessibility.high_contrast": "High Contrast",
|
||||
"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.error.tooltip": "High Contrast resource pack is not available.",
|
||||
"options.accessibility.high_contrast.tooltip": "Enhances the contrast of UI elements.",
|
||||
"options.accessibility.link": "Accessibility Guide",
|
||||
"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.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.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.panorama_speed": "Panorama Scroll Speed",
|
||||
"options.accessibility.text_background": "Text Background",
|
||||
"options.accessibility.text_background_opacity": "Text Background Opacity",
|
||||
|
@ -5232,7 +5299,7 @@
|
|||
"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.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.discrete_mouse_scroll": "Discrete Scrolling",
|
||||
"options.entityDistanceScaling": "Entity Distance",
|
||||
|
@ -5287,7 +5354,7 @@
|
|||
"options.hideSplashTexts.tooltip": "Hides the yellow splash text in the main menu.",
|
||||
"options.invertMouse": "Invert Mouse",
|
||||
"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.toggle": "Toggle",
|
||||
"options.language": "Language...",
|
||||
|
@ -5301,9 +5368,9 @@
|
|||
"options.modelPart.cape": "Cape",
|
||||
"options.modelPart.hat": "Hat",
|
||||
"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.right_pants_leg": "Right Pants Leg",
|
||||
"options.modelPart.right_pants_leg": "Right Pant Leg",
|
||||
"options.modelPart.right_sleeve": "Right Sleeve",
|
||||
"options.mouse_settings": "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.rawMouseInput": "Raw Input",
|
||||
"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.renderClouds": "Clouds",
|
||||
"options.renderDistance": "Render Distance",
|
||||
|
@ -5402,12 +5470,24 @@
|
|||
"painting.minecraft.aztec.title": "de_aztec",
|
||||
"painting.minecraft.aztec2.author": "Kristoffer Zetterstrand",
|
||||
"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.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.title": "Skull On Fire",
|
||||
"painting.minecraft.bust.author": "Kristoffer Zetterstrand",
|
||||
"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.title": "Bonjour Monsieur Courbet",
|
||||
"painting.minecraft.creebet.author": "Kristoffer Zetterstrand",
|
||||
|
@ -5416,24 +5496,46 @@
|
|||
"painting.minecraft.donkey_kong.title": "Kong",
|
||||
"painting.minecraft.earth.author": "Mojang",
|
||||
"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.title": "Fighters",
|
||||
"painting.minecraft.finding.author": "Kristoffer Zetterstrand",
|
||||
"painting.minecraft.finding.title": "Finding",
|
||||
"painting.minecraft.fire.author": "Mojang",
|
||||
"painting.minecraft.fire.title": "Fire",
|
||||
"painting.minecraft.graham.author": "Kristoffer Zetterstrand",
|
||||
"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.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.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.title": "Pigscene",
|
||||
"painting.minecraft.plant.author": "Kristoffer Zetterstrand",
|
||||
"painting.minecraft.plant.title": "Paradistr\u00e4d",
|
||||
"painting.minecraft.pointer.author": "Kristoffer Zetterstrand",
|
||||
"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.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.title": "Seaside",
|
||||
"painting.minecraft.skeleton.author": "Kristoffer Zetterstrand",
|
||||
|
@ -5442,8 +5544,14 @@
|
|||
"painting.minecraft.skull_and_roses.title": "Skull and Roses",
|
||||
"painting.minecraft.stage.author": "Kristoffer Zetterstrand",
|
||||
"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.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.title": "The void",
|
||||
"painting.minecraft.wanderer.author": "Kristoffer Zetterstrand",
|
||||
|
@ -5584,7 +5692,7 @@
|
|||
"selectWorld.experimental": "Experimental",
|
||||
"selectWorld.experimental.details": "Details",
|
||||
"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.title": "Experimental Features Warning",
|
||||
"selectWorld.experiments": "Experiments",
|
||||
|
@ -5913,7 +6021,7 @@
|
|||
"subtitles.block.respawn_anchor.deplete": "Respawn Anchor depletes",
|
||||
"subtitles.block.respawn_anchor.set_spawn": "Respawn Anchor sets spawn",
|
||||
"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_shrieker.shriek": "Sculk Shrieker shrieks",
|
||||
"subtitles.block.sculk.charge": "Sculk bubbles",
|
||||
|
@ -5931,11 +6039,13 @@
|
|||
"subtitles.block.trapdoor.toggle": "Trapdoor creaks",
|
||||
"subtitles.block.trial_spawner.about_to_spawn_item": "Ominous item prepares",
|
||||
"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.close_shutter": "Trial Spawner closes",
|
||||
"subtitles.block.trial_spawner.detect_player": "Trial Spawner charges up",
|
||||
"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.spawn_item": "Ominous item drops",
|
||||
"subtitles.block.trial_spawner.spawn_item_begin": "Ominous item appears",
|
||||
|
@ -5949,8 +6059,9 @@
|
|||
"subtitles.block.vault.deactivate": "Vault extinguishes",
|
||||
"subtitles.block.vault.eject_item": "Vault ejects item",
|
||||
"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.reject_rewarded_player": "Vault rejects player",
|
||||
"subtitles.block.water.ambient": "Water flows",
|
||||
"subtitles.block.wet_sponge.dries": "Sponge dries",
|
||||
"subtitles.chiseled_bookshelf.insert": "Book placed",
|
||||
|
|
|
@ -12,7 +12,7 @@ use std::io::{Cursor, Write};
|
|||
// TODO: rename the packet files to just like clientbound_add_entity instead of
|
||||
// clientbound_add_entity_packet
|
||||
|
||||
pub const PROTOCOL_VERSION: i32 = 766;
|
||||
pub const PROTOCOL_VERSION: i32 = 767;
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub enum ConnectionProtocol {
|
||||
|
|
|
@ -72,3 +72,27 @@ enum TrimPattern {
|
|||
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",
|
||||
}
|
||||
}
|
||||
|
|
|
@ -173,6 +173,8 @@ enum Attribute {
|
|||
GenericAttackSpeed => "minecraft:generic.attack_speed",
|
||||
PlayerBlockBreakSpeed => "minecraft:player.block_break_speed",
|
||||
PlayerBlockInteractionRange => "minecraft:player.block_interaction_range",
|
||||
GenericBurningTime => "minecraft:generic.burning_time",
|
||||
GenericExplosionKnockbackResistance => "minecraft:generic.explosion_knockback_resistance",
|
||||
PlayerEntityInteractionRange => "minecraft:player.entity_interaction_range",
|
||||
GenericFallDamageMultiplier => "minecraft:generic.fall_damage_multiplier",
|
||||
GenericFlyingSpeed => "minecraft:generic.flying_speed",
|
||||
|
@ -183,11 +185,18 @@ enum Attribute {
|
|||
GenericLuck => "minecraft:generic.luck",
|
||||
GenericMaxAbsorption => "minecraft:generic.max_absorption",
|
||||
GenericMaxHealth => "minecraft:generic.max_health",
|
||||
PlayerMiningEfficiency => "minecraft:player.mining_efficiency",
|
||||
GenericMovementEfficiency => "minecraft:generic.movement_efficiency",
|
||||
GenericMovementSpeed => "minecraft:generic.movement_speed",
|
||||
GenericOxygenBonus => "minecraft:generic.oxygen_bonus",
|
||||
GenericSafeFallDistance => "minecraft:generic.safe_fall_distance",
|
||||
GenericScale => "minecraft:generic.scale",
|
||||
PlayerSneakingSpeed => "minecraft:player.sneaking_speed",
|
||||
ZombieSpawnReinforcements => "minecraft:zombie.spawn_reinforcements",
|
||||
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",
|
||||
Not => "minecraft:not",
|
||||
True => "minecraft:true",
|
||||
Unobstructed => "minecraft:unobstructed",
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2659,6 +2669,7 @@ enum Item {
|
|||
ArmadilloScute => "minecraft:armadillo_scute",
|
||||
WolfArmor => "minecraft:wolf_armor",
|
||||
FlintAndSteel => "minecraft:flint_and_steel",
|
||||
Bowl => "minecraft:bowl",
|
||||
Apple => "minecraft:apple",
|
||||
Bow => "minecraft:bow",
|
||||
Arrow => "minecraft:arrow",
|
||||
|
@ -2708,7 +2719,6 @@ enum Item {
|
|||
NetheriteAxe => "minecraft:netherite_axe",
|
||||
NetheriteHoe => "minecraft:netherite_hoe",
|
||||
Stick => "minecraft:stick",
|
||||
Bowl => "minecraft:bowl",
|
||||
MushroomStew => "minecraft:mushroom_stew",
|
||||
String => "minecraft:string",
|
||||
Feather => "minecraft:feather",
|
||||
|
@ -3032,6 +3042,8 @@ enum Item {
|
|||
MusicDiscCat => "minecraft:music_disc_cat",
|
||||
MusicDiscBlocks => "minecraft:music_disc_blocks",
|
||||
MusicDiscChirp => "minecraft:music_disc_chirp",
|
||||
MusicDiscCreator => "minecraft:music_disc_creator",
|
||||
MusicDiscCreatorMusicBox => "minecraft:music_disc_creator_music_box",
|
||||
MusicDiscFar => "minecraft:music_disc_far",
|
||||
MusicDiscMall => "minecraft:music_disc_mall",
|
||||
MusicDiscMellohi => "minecraft:music_disc_mellohi",
|
||||
|
@ -3044,6 +3056,7 @@ enum Item {
|
|||
MusicDiscRelic => "minecraft:music_disc_relic",
|
||||
MusicDisc5 => "minecraft:music_disc_5",
|
||||
MusicDiscPigstep => "minecraft:music_disc_pigstep",
|
||||
MusicDiscPrecipice => "minecraft:music_disc_precipice",
|
||||
DiscFragment5 => "minecraft:disc_fragment_5",
|
||||
Trident => "minecraft:trident",
|
||||
PhantomMembrane => "minecraft:phantom_membrane",
|
||||
|
@ -3199,7 +3212,7 @@ enum LootConditionKind {
|
|||
AnyOf => "minecraft:any_of",
|
||||
AllOf => "minecraft:all_of",
|
||||
RandomChance => "minecraft:random_chance",
|
||||
RandomChanceWithLooting => "minecraft:random_chance_with_looting",
|
||||
RandomChanceWithEnchantedBonus => "minecraft:random_chance_with_enchanted_bonus",
|
||||
EntityProperties => "minecraft:entity_properties",
|
||||
KilledByPlayer => "minecraft:killed_by_player",
|
||||
EntityScores => "minecraft:entity_scores",
|
||||
|
@ -3213,6 +3226,7 @@ enum LootConditionKind {
|
|||
Reference => "minecraft:reference",
|
||||
TimeCheck => "minecraft:time_check",
|
||||
ValueCheck => "minecraft:value_check",
|
||||
EnchantmentActiveCheck => "minecraft:enchantment_active_check",
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3226,7 +3240,7 @@ enum LootFunctionKind {
|
|||
SetCustomData => "minecraft:set_custom_data",
|
||||
SetComponents => "minecraft:set_components",
|
||||
FurnaceSmelt => "minecraft:furnace_smelt",
|
||||
LootingEnchant => "minecraft:looting_enchant",
|
||||
EnchantedCountIncrease => "minecraft:enchanted_count_increase",
|
||||
SetDamage => "minecraft:set_damage",
|
||||
SetAttributes => "minecraft:set_attributes",
|
||||
SetName => "minecraft:set_name",
|
||||
|
@ -3275,6 +3289,7 @@ enum LootNumberProviderKind {
|
|||
Binomial => "minecraft:binomial",
|
||||
Score => "minecraft:score",
|
||||
Storage => "minecraft:storage",
|
||||
EnchantmentLevel => "minecraft:enchantment_level",
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4498,9 +4513,9 @@ enum SoundEvent {
|
|||
BlockTrialSpawnerSpawnItem => "minecraft:block.trial_spawner.spawn_item",
|
||||
BlockTrialSpawnerSpawnItemBegin => "minecraft:block.trial_spawner.spawn_item_begin",
|
||||
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",
|
||||
BlockTrialSpawnerAmbientCharged => "minecraft:block.trial_spawner.ambient_charged",
|
||||
BlockTrialSpawnerAmbientOminous => "minecraft:block.trial_spawner.ambient_ominous",
|
||||
BlockTrialSpawnerOpenShutter => "minecraft:block.trial_spawner.open_shutter",
|
||||
BlockTrialSpawnerCloseShutter => "minecraft:block.trial_spawner.close_shutter",
|
||||
BlockTrialSpawnerEjectItem => "minecraft:block.trial_spawner.eject_item",
|
||||
|
@ -4701,6 +4716,9 @@ enum SoundEvent {
|
|||
MusicDiscWard => "minecraft:music_disc.ward",
|
||||
MusicDiscOtherside => "minecraft:music_disc.otherside",
|
||||
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",
|
||||
MusicEnd => "minecraft:music.end",
|
||||
MusicGame => "minecraft:music.game",
|
||||
|
@ -5254,6 +5272,7 @@ enum SoundEvent {
|
|||
BlockVaultCloseShutter => "minecraft:block.vault.close_shutter",
|
||||
BlockVaultDeactivate => "minecraft:block.vault.deactivate",
|
||||
BlockVaultEjectItem => "minecraft:block.vault.eject_item",
|
||||
BlockVaultRejectRewardedPlayer => "minecraft:block.vault.reject_rewarded_player",
|
||||
BlockVaultFall => "minecraft:block.vault.fall",
|
||||
BlockVaultHit => "minecraft:block.vault.hit",
|
||||
BlockVaultInsertItem => "minecraft:block.vault.insert_item",
|
||||
|
@ -5578,6 +5597,7 @@ enum WorldgenFeature {
|
|||
Disk => "minecraft:disk",
|
||||
Lake => "minecraft:lake",
|
||||
Ore => "minecraft:ore",
|
||||
EndPlatform => "minecraft:end_platform",
|
||||
EndSpike => "minecraft:end_spike",
|
||||
EndIsland => "minecraft:end_island",
|
||||
EndGateway => "minecraft:end_gateway",
|
||||
|
@ -5676,6 +5696,7 @@ enum WorldgenPlacementModifierKind {
|
|||
InSquare => "minecraft:in_square",
|
||||
RandomOffset => "minecraft:random_offset",
|
||||
CarvingMask => "minecraft:carving_mask",
|
||||
FixedPlacement => "minecraft:fixed_placement",
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6293,6 +6314,7 @@ enum DataComponentKind {
|
|||
BlockEntityData => "minecraft:block_entity_data",
|
||||
Instrument => "minecraft:instrument",
|
||||
OminousBottleAmplifier => "minecraft:ominous_bottle_amplifier",
|
||||
JukeboxPlayable => "minecraft:jukebox_playable",
|
||||
Recipes => "minecraft:recipes",
|
||||
LodestoneTracker => "minecraft:lodestone_tracker",
|
||||
FireworkExplosion => "minecraft:firework_explosion",
|
||||
|
@ -6349,6 +6371,7 @@ enum ItemSubPredicateKind {
|
|||
WrittenBookContent => "minecraft:written_book_content",
|
||||
AttributeModifiers => "minecraft:attribute_modifiers",
|
||||
Trim => "minecraft:trim",
|
||||
JukeboxPlayable => "minecraft:jukebox_playable",
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6391,3 +6414,132 @@ enum MapDecorationKind {
|
|||
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",
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,6 +14,8 @@ pub static ACACIA_LOGS: Lazy<HashSet<Block>> = Lazy::new(|| {
|
|||
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(|| {
|
||||
HashSet::from_iter(vec![
|
||||
Block::OakHangingSign,
|
||||
|
@ -354,6 +356,8 @@ pub static BIRCH_LOGS: Lazy<HashSet<Block>> = Lazy::new(|| {
|
|||
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(|| {
|
||||
HashSet::from_iter(vec![
|
||||
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]));
|
||||
pub static 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::IronDoor,
|
||||
Block::OakDoor,
|
||||
Block::SpruceDoor,
|
||||
|
@ -890,6 +902,8 @@ pub static FEATURES_CANNOT_REPLACE: Lazy<HashSet<Block>> = Lazy::new(|| {
|
|||
Block::Chest,
|
||||
Block::EndPortalFrame,
|
||||
Block::ReinforcedDeepslate,
|
||||
Block::TrialSpawner,
|
||||
Block::Vault,
|
||||
])
|
||||
});
|
||||
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::WaxedOxidizedCutCopper,
|
||||
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(|| {
|
||||
|
@ -1269,6 +1324,47 @@ pub static INCORRECT_FOR_WOODEN_TOOL: Lazy<HashSet<Block>> = Lazy::new(|| {
|
|||
Block::WaxedOxidizedCutCopperStairs,
|
||||
Block::WaxedOxidizedCutCopper,
|
||||
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>> =
|
||||
|
@ -1308,6 +1404,8 @@ pub static LAVA_POOL_STONE_CANNOT_REPLACE: Lazy<HashSet<Block>> = Lazy::new(|| {
|
|||
Block::Chest,
|
||||
Block::EndPortalFrame,
|
||||
Block::ReinforcedDeepslate,
|
||||
Block::TrialSpawner,
|
||||
Block::Vault,
|
||||
Block::JungleLeaves,
|
||||
Block::OakLeaves,
|
||||
Block::SpruceLeaves,
|
||||
|
@ -2182,6 +2280,61 @@ pub static MINEABLE_PICKAXE: Lazy<HashSet<Block>> = Lazy::new(|| {
|
|||
Block::MudBrickStairs,
|
||||
Block::MudBrickSlab,
|
||||
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::PolishedBlackstoneButton,
|
||||
Block::CobblestoneWall,
|
||||
|
@ -2206,6 +2359,9 @@ pub static MINEABLE_PICKAXE: Lazy<HashSet<Block>> = Lazy::new(|| {
|
|||
Block::DeepslateTileWall,
|
||||
Block::DeepslateBrickWall,
|
||||
Block::MudBrickWall,
|
||||
Block::TuffWall,
|
||||
Block::PolishedTuffWall,
|
||||
Block::TuffBrickWall,
|
||||
Block::ShulkerBox,
|
||||
Block::BlackShulkerBox,
|
||||
Block::BlueShulkerBox,
|
||||
|
@ -2276,6 +2432,29 @@ pub static MINEABLE_SHOVEL: Lazy<HashSet<Block>> = Lazy::new(|| {
|
|||
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>> =
|
||||
Lazy::new(|| HashSet::from_iter(vec![Block::Mycelium]));
|
||||
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::WaxedOxidizedCutCopper,
|
||||
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(|| {
|
||||
|
@ -2927,6 +3147,9 @@ pub static SLABS: Lazy<HashSet<Block>> = Lazy::new(|| {
|
|||
Block::CutCopperSlab,
|
||||
Block::WaxedOxidizedCutCopperSlab,
|
||||
Block::MudBrickSlab,
|
||||
Block::TuffSlab,
|
||||
Block::PolishedTuffSlab,
|
||||
Block::TuffBrickSlab,
|
||||
Block::OakSlab,
|
||||
Block::SpruceSlab,
|
||||
Block::BirchSlab,
|
||||
|
@ -3056,6 +3279,9 @@ pub static STAIRS: Lazy<HashSet<Block>> = Lazy::new(|| {
|
|||
Block::WaxedCutCopperStairs,
|
||||
Block::WaxedOxidizedCutCopperStairs,
|
||||
Block::MudBrickStairs,
|
||||
Block::TuffStairs,
|
||||
Block::PolishedTuffStairs,
|
||||
Block::TuffBrickStairs,
|
||||
Block::OakStairs,
|
||||
Block::SpruceStairs,
|
||||
Block::BirchStairs,
|
||||
|
@ -3237,6 +3463,14 @@ pub static TRAIL_RUINS_REPLACEABLE: Lazy<HashSet<Block>> =
|
|||
pub static TRAPDOORS: Lazy<HashSet<Block>> = Lazy::new(|| {
|
||||
HashSet::from_iter(vec![
|
||||
Block::IronTrapdoor,
|
||||
Block::CopperTrapdoor,
|
||||
Block::ExposedCopperTrapdoor,
|
||||
Block::WeatheredCopperTrapdoor,
|
||||
Block::OxidizedCopperTrapdoor,
|
||||
Block::WaxedCopperTrapdoor,
|
||||
Block::WaxedExposedCopperTrapdoor,
|
||||
Block::WaxedWeatheredCopperTrapdoor,
|
||||
Block::WaxedOxidizedCopperTrapdoor,
|
||||
Block::AcaciaTrapdoor,
|
||||
Block::BirchTrapdoor,
|
||||
Block::DarkOakTrapdoor,
|
||||
|
@ -3429,6 +3663,9 @@ pub static WALLS: Lazy<HashSet<Block>> = Lazy::new(|| {
|
|||
Block::DeepslateTileWall,
|
||||
Block::DeepslateBrickWall,
|
||||
Block::MudBrickWall,
|
||||
Block::TuffWall,
|
||||
Block::PolishedTuffWall,
|
||||
Block::TuffBrickWall,
|
||||
])
|
||||
});
|
||||
pub static WARPED_STEMS: Lazy<HashSet<Block>> = Lazy::new(|| {
|
||||
|
|
|
@ -155,6 +155,7 @@ pub static BOOKSHELF_BOOKS: Lazy<HashSet<Item>> = Lazy::new(|| {
|
|||
pub static BREAKS_DECORATED_POTS: Lazy<HashSet<Item>> = Lazy::new(|| {
|
||||
HashSet::from_iter(vec![
|
||||
Item::Trident,
|
||||
Item::Mace,
|
||||
Item::DiamondSword,
|
||||
Item::StoneSword,
|
||||
Item::GoldenSword,
|
||||
|
@ -437,6 +438,9 @@ pub static DECORATED_POT_INGREDIENTS: Lazy<HashSet<Item>> = Lazy::new(|| {
|
|||
Item::ShelterPotterySherd,
|
||||
Item::SkullPotterySherd,
|
||||
Item::SnortPotterySherd,
|
||||
Item::FlowPotterySherd,
|
||||
Item::GusterPotterySherd,
|
||||
Item::ScrapePotterySherd,
|
||||
])
|
||||
});
|
||||
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::SkullPotterySherd,
|
||||
Item::SnortPotterySherd,
|
||||
Item::FlowPotterySherd,
|
||||
Item::GusterPotterySherd,
|
||||
Item::ScrapePotterySherd,
|
||||
])
|
||||
});
|
||||
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(|| {
|
||||
HashSet::from_iter(vec![
|
||||
Item::CopperDoor,
|
||||
Item::ExposedCopperDoor,
|
||||
Item::WeatheredCopperDoor,
|
||||
Item::OxidizedCopperDoor,
|
||||
Item::WaxedCopperDoor,
|
||||
Item::WaxedExposedCopperDoor,
|
||||
Item::WaxedWeatheredCopperDoor,
|
||||
Item::WaxedOxidizedCopperDoor,
|
||||
Item::IronDoor,
|
||||
Item::OakDoor,
|
||||
Item::SpruceDoor,
|
||||
|
@ -561,6 +576,7 @@ pub static ENCHANTABLE_DURABILITY: Lazy<HashSet<Item>> = Lazy::new(|| {
|
|||
Item::FishingRod,
|
||||
Item::CarrotOnAStick,
|
||||
Item::WarpedFungusOnAStick,
|
||||
Item::Mace,
|
||||
Item::LeatherBoots,
|
||||
Item::ChainmailBoots,
|
||||
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(|| {
|
||||
HashSet::from_iter(vec![
|
||||
Item::Mace,
|
||||
Item::DiamondSword,
|
||||
Item::StoneSword,
|
||||
Item::GoldenSword,
|
||||
|
@ -699,6 +716,8 @@ pub static ENCHANTABLE_LEG_ARMOR: Lazy<HashSet<Item>> = Lazy::new(|| {
|
|||
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(|| {
|
||||
HashSet::from_iter(vec![
|
||||
Item::Shears,
|
||||
|
@ -799,6 +818,7 @@ pub static ENCHANTABLE_VANISHING: Lazy<HashSet<Item>> = Lazy::new(|| {
|
|||
Item::FishingRod,
|
||||
Item::CarrotOnAStick,
|
||||
Item::WarpedFungusOnAStick,
|
||||
Item::Mace,
|
||||
Item::PlayerHead,
|
||||
Item::CreeperHead,
|
||||
Item::ZombieHead,
|
||||
|
@ -865,6 +885,7 @@ pub static ENCHANTABLE_VANISHING: Lazy<HashSet<Item>> = Lazy::new(|| {
|
|||
});
|
||||
pub static ENCHANTABLE_WEAPON: Lazy<HashSet<Item>> = Lazy::new(|| {
|
||||
HashSet::from_iter(vec![
|
||||
Item::Mace,
|
||||
Item::DiamondSword,
|
||||
Item::StoneSword,
|
||||
Item::GoldenSword,
|
||||
|
@ -1183,26 +1204,6 @@ pub static MEAT: Lazy<HashSet<Item>> = Lazy::new(|| {
|
|||
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(|| {
|
||||
HashSet::from_iter(vec![
|
||||
Item::WarpedStem,
|
||||
|
@ -1450,6 +1451,9 @@ pub static SLABS: Lazy<HashSet<Item>> = Lazy::new(|| {
|
|||
Item::CutCopperSlab,
|
||||
Item::WaxedOxidizedCutCopperSlab,
|
||||
Item::MudBrickSlab,
|
||||
Item::TuffSlab,
|
||||
Item::PolishedTuffSlab,
|
||||
Item::TuffBrickSlab,
|
||||
Item::OakSlab,
|
||||
Item::SpruceSlab,
|
||||
Item::BirchSlab,
|
||||
|
@ -1539,6 +1543,9 @@ pub static STAIRS: Lazy<HashSet<Item>> = Lazy::new(|| {
|
|||
Item::WaxedCutCopperStairs,
|
||||
Item::WaxedOxidizedCutCopperStairs,
|
||||
Item::MudBrickStairs,
|
||||
Item::TuffStairs,
|
||||
Item::PolishedTuffStairs,
|
||||
Item::TuffBrickStairs,
|
||||
Item::OakStairs,
|
||||
Item::SpruceStairs,
|
||||
Item::BirchStairs,
|
||||
|
@ -1623,6 +1630,14 @@ pub static TERRACOTTA: Lazy<HashSet<Item>> = Lazy::new(|| {
|
|||
pub static TRAPDOORS: Lazy<HashSet<Item>> = Lazy::new(|| {
|
||||
HashSet::from_iter(vec![
|
||||
Item::IronTrapdoor,
|
||||
Item::CopperTrapdoor,
|
||||
Item::ExposedCopperTrapdoor,
|
||||
Item::WeatheredCopperTrapdoor,
|
||||
Item::OxidizedCopperTrapdoor,
|
||||
Item::WaxedCopperTrapdoor,
|
||||
Item::WaxedExposedCopperTrapdoor,
|
||||
Item::WaxedWeatheredCopperTrapdoor,
|
||||
Item::WaxedOxidizedCopperTrapdoor,
|
||||
Item::AcaciaTrapdoor,
|
||||
Item::BirchTrapdoor,
|
||||
Item::DarkOakTrapdoor,
|
||||
|
@ -1668,6 +1683,8 @@ pub static TRIM_TEMPLATES: Lazy<HashSet<Item>> = Lazy::new(|| {
|
|||
Item::SilenceArmorTrimSmithingTemplate,
|
||||
Item::RaiserArmorTrimSmithingTemplate,
|
||||
Item::HostArmorTrimSmithingTemplate,
|
||||
Item::FlowArmorTrimSmithingTemplate,
|
||||
Item::BoltArmorTrimSmithingTemplate,
|
||||
])
|
||||
});
|
||||
pub static TRIMMABLE_ARMOR: Lazy<HashSet<Item>> = Lazy::new(|| {
|
||||
|
@ -1735,6 +1752,9 @@ pub static WALLS: Lazy<HashSet<Item>> = Lazy::new(|| {
|
|||
Item::DeepslateTileWall,
|
||||
Item::DeepslateBrickWall,
|
||||
Item::MudBrickWall,
|
||||
Item::TuffWall,
|
||||
Item::PolishedTuffWall,
|
||||
Item::TuffBrickWall,
|
||||
])
|
||||
});
|
||||
pub static WARPED_STEMS: Lazy<HashSet<Item>> = Lazy::new(|| {
|
||||
|
|
|
@ -15,9 +15,9 @@ def generate(version_id: str):
|
|||
lib.code.inventory.update_menus(registries['minecraft:menu']['entries'])
|
||||
|
||||
|
||||
block_tags = lib.extract.get_registry_tags(version_id, 'blocks')
|
||||
item_tags = lib.extract.get_registry_tags(version_id, 'items')
|
||||
fluid_tags = lib.extract.get_registry_tags(version_id, 'fluids')
|
||||
block_tags = lib.extract.get_registry_tags(version_id, 'block')
|
||||
item_tags = lib.extract.get_registry_tags(version_id, 'item')
|
||||
fluid_tags = lib.extract.get_registry_tags(version_id, 'fluid')
|
||||
|
||||
lib.code.tags.generate_tags(block_tags, 'blocks', 'Block')
|
||||
lib.code.tags.generate_tags(item_tags, 'items', 'Item')
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Extracting data from the Minecraft jars
|
||||
|
||||
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.utils import get_dir_location
|
||||
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, to_camel_case, upper_first_letter
|
||||
from zipfile import ZipFile
|
||||
import subprocess
|
||||
import requests
|
||||
|
@ -281,14 +281,22 @@ def get_en_us_lang(version_id: str):
|
|||
# this is very much not ideal.
|
||||
|
||||
if TYPE_CHECKING: from codegen.lib.mappings import Mappings
|
||||
def get_packet_list(burger_data, mappings: 'Mappings'):
|
||||
packet_list = list(burger_data[0]['packets']['packet'].values())
|
||||
|
||||
current_packet_id = 0
|
||||
for packet in packet_list:
|
||||
if packet['id'] == -1:
|
||||
packet['id'] = current_packet_id
|
||||
print(packet)
|
||||
current_packet_id += 1
|
||||
def get_packet_list(version_id: str):
|
||||
if version_id != '1.21':
|
||||
return []
|
||||
|
||||
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']
|
||||
})
|
||||
|
|
|
@ -31,8 +31,8 @@ new_version_id = sys.argv[1]
|
|||
new_mappings = lib.download.get_mappings_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)
|
||||
new_packet_list = lib.extract.get_packet_list(new_burger_data, new_mappings)
|
||||
old_packet_list = lib.extract.get_packet_list(old_version_id)
|
||||
new_packet_list = lib.extract.get_packet_list(new_version_id)
|
||||
|
||||
|
||||
# old_packets: dict[PacketIdentifier, str] = {}
|
||||
|
|
Loading…
Reference in a new issue