1
2
Fork 0
mirror of https://github.com/mat-1/azalea.git synced 2025-08-02 14:26:04 +00:00

Merge branch 'main' of https://github.com/azalea-rs/azalea into workspace-dependencies

This commit is contained in:
EightFactorial 2024-12-04 16:17:21 -08:00
commit f70dc84f33
No known key found for this signature in database
22 changed files with 1032 additions and 751 deletions

42
Cargo.lock generated
View file

@ -202,7 +202,7 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
[[package]] [[package]]
name = "azalea" name = "azalea"
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"azalea-auth", "azalea-auth",
@ -241,7 +241,7 @@ dependencies = [
[[package]] [[package]]
name = "azalea-auth" name = "azalea-auth"
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
dependencies = [ dependencies = [
"azalea-buf", "azalea-buf",
"azalea-crypto", "azalea-crypto",
@ -261,7 +261,7 @@ dependencies = [
[[package]] [[package]]
name = "azalea-block" name = "azalea-block"
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
dependencies = [ dependencies = [
"azalea-block-macros", "azalea-block-macros",
"azalea-buf", "azalea-buf",
@ -270,7 +270,7 @@ dependencies = [
[[package]] [[package]]
name = "azalea-block-macros" name = "azalea-block-macros"
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -279,7 +279,7 @@ dependencies = [
[[package]] [[package]]
name = "azalea-brigadier" name = "azalea-brigadier"
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
dependencies = [ dependencies = [
"azalea-buf", "azalea-buf",
"azalea-chat", "azalea-chat",
@ -290,7 +290,7 @@ dependencies = [
[[package]] [[package]]
name = "azalea-buf" name = "azalea-buf"
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
dependencies = [ dependencies = [
"azalea-buf-macros", "azalea-buf-macros",
"byteorder", "byteorder",
@ -303,7 +303,7 @@ dependencies = [
[[package]] [[package]]
name = "azalea-buf-macros" name = "azalea-buf-macros"
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -312,7 +312,7 @@ dependencies = [
[[package]] [[package]]
name = "azalea-chat" name = "azalea-chat"
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
dependencies = [ dependencies = [
"azalea-buf", "azalea-buf",
"azalea-language", "azalea-language",
@ -325,7 +325,7 @@ dependencies = [
[[package]] [[package]]
name = "azalea-client" name = "azalea-client"
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"azalea-auth", "azalea-auth",
@ -359,7 +359,7 @@ dependencies = [
[[package]] [[package]]
name = "azalea-core" name = "azalea-core"
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
dependencies = [ dependencies = [
"azalea-buf", "azalea-buf",
"azalea-registry", "azalea-registry",
@ -373,7 +373,7 @@ dependencies = [
[[package]] [[package]]
name = "azalea-crypto" name = "azalea-crypto"
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
dependencies = [ dependencies = [
"aes", "aes",
"azalea-buf", "azalea-buf",
@ -390,7 +390,7 @@ dependencies = [
[[package]] [[package]]
name = "azalea-entity" name = "azalea-entity"
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
dependencies = [ dependencies = [
"azalea-block", "azalea-block",
"azalea-buf", "azalea-buf",
@ -413,7 +413,7 @@ dependencies = [
[[package]] [[package]]
name = "azalea-inventory" name = "azalea-inventory"
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
dependencies = [ dependencies = [
"azalea-buf", "azalea-buf",
"azalea-chat", "azalea-chat",
@ -426,7 +426,7 @@ dependencies = [
[[package]] [[package]]
name = "azalea-inventory-macros" name = "azalea-inventory-macros"
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -435,7 +435,7 @@ dependencies = [
[[package]] [[package]]
name = "azalea-language" name = "azalea-language"
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
dependencies = [ dependencies = [
"serde", "serde",
"serde_json", "serde_json",
@ -443,7 +443,7 @@ dependencies = [
[[package]] [[package]]
name = "azalea-physics" name = "azalea-physics"
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
dependencies = [ dependencies = [
"azalea-block", "azalea-block",
"azalea-core", "azalea-core",
@ -460,7 +460,7 @@ dependencies = [
[[package]] [[package]]
name = "azalea-protocol" name = "azalea-protocol"
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-recursion", "async-recursion",
@ -497,7 +497,7 @@ dependencies = [
[[package]] [[package]]
name = "azalea-protocol-macros" name = "azalea-protocol-macros"
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -506,7 +506,7 @@ dependencies = [
[[package]] [[package]]
name = "azalea-registry" name = "azalea-registry"
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
dependencies = [ dependencies = [
"azalea-buf", "azalea-buf",
"azalea-registry-macros", "azalea-registry-macros",
@ -516,7 +516,7 @@ dependencies = [
[[package]] [[package]]
name = "azalea-registry-macros" name = "azalea-registry-macros"
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
dependencies = [ dependencies = [
"quote", "quote",
"syn", "syn",
@ -524,7 +524,7 @@ dependencies = [
[[package]] [[package]]
name = "azalea-world" name = "azalea-world"
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
dependencies = [ dependencies = [
"azalea-block", "azalea-block",
"azalea-buf", "azalea-buf",

View file

@ -22,7 +22,7 @@ resolver = "2"
# --- Workspace Settings --- # --- Workspace Settings ---
[workspace.package] [workspace.package]
version = "0.10.3+mc1.21.3" version = "0.10.3+mc1.21.4"
edition = "2021" edition = "2021"
license = "MIT" license = "MIT"
repository = "https://github.com/azalea-rs/azalea" repository = "https://github.com/azalea-rs/azalea"

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.21.3`._ _Currently supported Minecraft version: `1.21.4`._
> [!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
@ -55,6 +55,7 @@ There are several branches in the Azalea repository that target older Minecraft
Most of them are severely outdated compared to the latest version of Azalea. Most of them are severely outdated compared to the latest version of Azalea.
If you'd like to update them or add more, please open a PR. If you'd like to update them or add more, please open a PR.
- [1.21.2-1.21.3](https://github.com/azalea-rs/azalea/tree/1.21.3)
- [1.21-1.21.1](https://github.com/azalea-rs/azalea/tree/1.21.1) - [1.21-1.21.1](https://github.com/azalea-rs/azalea/tree/1.21.1)
- [1.20.5-1.20.6](https://github.com/azalea-rs/azalea/tree/1.20.6) - [1.20.5-1.20.6](https://github.com/azalea-rs/azalea/tree/1.20.6)
- [1.20.4](https://github.com/azalea-rs/azalea/tree/1.20.4) - [1.20.4](https://github.com/azalea-rs/azalea/tree/1.20.4)

View file

@ -326,11 +326,8 @@ make_block_states! {
"south" => South(bool), "south" => South(bool),
"up" => Up(bool), "up" => Up(bool),
"west" => West(bool), "west" => West(bool),
"creaking" => Creaking { "active" => Active(bool),
Disabled, "natural" => Natural(bool),
Dormant,
Active,
},
"half" => TopBottom { "half" => TopBottom {
Top, Top,
Bottom, Bottom,
@ -914,6 +911,31 @@ make_block_states! {
_7, _7,
}, },
"in_wall" => InWall(bool), "in_wall" => InWall(bool),
"type" => Type {
Top,
Bottom,
Double,
},
"east" => WallEast {
None,
Low,
Tall,
},
"north" => WallNorth {
None,
Low,
Tall,
},
"south" => WallSouth {
None,
Low,
Tall,
},
"west" => WallWest {
None,
Low,
Tall,
},
"age" => NetherWartAge { "age" => NetherWartAge {
_0, _0,
_1, _1,
@ -941,26 +963,6 @@ make_block_states! {
}, },
"disarmed" => Disarmed(bool), "disarmed" => Disarmed(bool),
"conditional" => Conditional(bool), "conditional" => Conditional(bool),
"east" => WallEast {
None,
Low,
Tall,
},
"north" => WallNorth {
None,
Low,
Tall,
},
"south" => WallSouth {
None,
Low,
Tall,
},
"west" => WallWest {
None,
Low,
Tall,
},
"age" => CarrotsAge { "age" => CarrotsAge {
_0, _0,
_1, _1,
@ -1192,11 +1194,6 @@ make_block_states! {
_14, _14,
_15, _15,
}, },
"type" => Type {
Top,
Bottom,
Double,
},
"rotation" => WhiteBannerRotation { "rotation" => WhiteBannerRotation {
_0, _0,
_1, _1,
@ -2441,8 +2438,9 @@ make_block_states! {
soul_fire => BlockBehavior::new(), {}, soul_fire => BlockBehavior::new(), {},
spawner => BlockBehavior::new().requires_correct_tool_for_drops().strength(5.0, 5.0), {}, spawner => BlockBehavior::new().requires_correct_tool_for_drops().strength(5.0, 5.0), {},
creaking_heart => BlockBehavior::new(), { creaking_heart => BlockBehavior::new(), {
"active": Active(false),
"axis": Axis::Y, "axis": Axis::Y,
"creaking": Creaking::Disabled, "natural": Natural(false),
}, },
oak_stairs => BlockBehavior::new().strength(2.0, 3.0), { oak_stairs => BlockBehavior::new().strength(2.0, 3.0), {
"facing": FacingCardinal::North, "facing": FacingCardinal::North,
@ -2972,6 +2970,15 @@ make_block_states! {
"waterlogged": Waterlogged(false), "waterlogged": Waterlogged(false),
"west": West(false), "west": West(false),
}, },
resin_clump => BlockBehavior::new(), {
"down": Down(false),
"east": East(false),
"north": North(false),
"south": South(false),
"up": Up(false),
"waterlogged": Waterlogged(false),
"west": West(false),
},
oak_fence_gate => BlockBehavior::new().strength(2.0, 3.0), { oak_fence_gate => BlockBehavior::new().strength(2.0, 3.0), {
"facing": FacingCardinal::North, "facing": FacingCardinal::North,
"in_wall": InWall(false), "in_wall": InWall(false),
@ -3000,6 +3007,27 @@ make_block_states! {
"snowy": Snowy(false), "snowy": Snowy(false),
}, },
lily_pad => BlockBehavior::new(), {}, lily_pad => BlockBehavior::new(), {},
resin_block => BlockBehavior::new(), {},
resin_bricks => BlockBehavior::new(), {},
resin_brick_stairs => BlockBehavior::new(), {
"facing": FacingCardinal::North,
"half": TopBottom::Bottom,
"shape": StairShape::Straight,
"waterlogged": Waterlogged(false),
},
resin_brick_slab => BlockBehavior::new(), {
"type": Type::Bottom,
"waterlogged": Waterlogged(false),
},
resin_brick_wall => BlockBehavior::new(), {
"east": WallEast::None,
"north": WallNorth::None,
"south": WallSouth::None,
"up": Up(true),
"waterlogged": Waterlogged(false),
"west": WallWest::None,
},
chiseled_resin_bricks => BlockBehavior::new(), {},
nether_bricks => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {}, nether_bricks => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {},
nether_brick_fence => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), { nether_brick_fence => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {
"east": East(false), "east": East(false),
@ -5546,5 +5574,9 @@ make_block_states! {
pale_hanging_moss => BlockBehavior::new(), { pale_hanging_moss => BlockBehavior::new(), {
"tip": Tip(true), "tip": Tip(true),
}, },
open_eyeblossom => BlockBehavior::new(), {},
closed_eyeblossom => BlockBehavior::new(), {},
potted_open_eyeblossom => BlockBehavior::new(), {},
potted_closed_eyeblossom => BlockBehavior::new(), {},
} }
} }

View file

@ -136,6 +136,7 @@ pub fn handle_block_interact_event(
direction: hit_result.direction, direction: hit_result.direction,
location: hit_result.location, location: hit_result.location,
inside: hit_result.inside, inside: hit_result.inside,
world_border: hit_result.world_border,
} }
} else { } else {
// we're not looking at the block, so make up some numbers // we're not looking at the block, so make up some numbers
@ -144,6 +145,7 @@ pub fn handle_block_interact_event(
direction: Direction::Up, direction: Direction::Up,
location: event.position.center(), location: event.position.center(),
inside: false, inside: false,
world_border: false,
} }
}; };

View file

@ -260,6 +260,7 @@ impl AABB {
block_pos: *pos, block_pos: *pos,
inside: false, inside: false,
miss: false, miss: false,
world_border: false,
}) })
} }

View file

@ -10,6 +10,7 @@ pub struct BlockHitResult {
pub block_pos: BlockPos, pub block_pos: BlockPos,
pub miss: bool, pub miss: bool,
pub inside: bool, pub inside: bool,
pub world_border: bool,
} }
impl BlockHitResult { impl BlockHitResult {
@ -20,6 +21,7 @@ impl BlockHitResult {
block_pos, block_pos,
miss: true, miss: true,
inside: false, inside: false,
world_border: false,
} }
} }

View file

@ -3,6 +3,7 @@
//! The most common ones are [`Vec3`] and [`BlockPos`], which are usually used //! The most common ones are [`Vec3`] and [`BlockPos`], which are usually used
//! for entity positions and block positions, respectively. //! for entity positions and block positions, respectively.
use std::str::FromStr;
use std::{ use std::{
fmt, fmt,
hash::Hash, hash::Hash,
@ -682,6 +683,51 @@ impl AzaleaWrite for ChunkSectionPos {
} }
} }
fn parse_three_values<T>(s: &str) -> Result<[T; 3], &'static str>
where
T: FromStr,
<T as FromStr>::Err: fmt::Debug,
{
let parts = s.split_whitespace().collect::<Vec<_>>();
if parts.len() != 3 {
return Err("Expected three values");
}
let x = parts[0].parse().map_err(|_| "Invalid X value")?;
let y = parts[1].parse().map_err(|_| "Invalid Y value")?;
let z = parts[2].parse().map_err(|_| "Invalid Z value")?;
Ok([x, y, z])
}
/// Parses a string in the format "X Y Z" into a BlockPos.
///
/// The input string should contain three integer values separated by spaces,
/// representing the x, y, and z components of the vector respectively.
/// This can be used to parse user input or from `BlockPos::to_string`.
impl FromStr for BlockPos {
type Err = &'static str;
fn from_str(s: &str) -> Result<Self, Self::Err> {
let [x, y, z] = parse_three_values::<i32>(s)?;
Ok(BlockPos { x, y, z })
}
}
/// Parses a string in the format "X Y Z" into a Vec3.
///
/// The input string should contain three floating-point values separated by
/// spaces, representing the x, y, and z components of the vector respectively.
/// This can be used to parse user input or from `Vec3::to_string`.
impl FromStr for Vec3 {
type Err = &'static str;
fn from_str(s: &str) -> Result<Self, Self::Err> {
let [x, y, z] = parse_three_values::<f64>(s)?;
Ok(Vec3 { x, y, z })
}
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;

View file

@ -2564,6 +2564,10 @@ impl Default for CowMetadataBundle {
pub struct CanMove(pub bool); pub struct CanMove(pub bool);
#[derive(Component, Deref, DerefMut, Clone)] #[derive(Component, Deref, DerefMut, Clone)]
pub struct IsActive(pub bool); pub struct IsActive(pub bool);
#[derive(Component, Deref, DerefMut, Clone)]
pub struct IsTearingDown(pub bool);
#[derive(Component, Deref, DerefMut, Clone)]
pub struct CreakingHomePos(pub Option<BlockPos>);
#[derive(Component)] #[derive(Component)]
pub struct Creaking; pub struct Creaking;
impl Creaking { impl Creaking {
@ -2579,6 +2583,12 @@ impl Creaking {
17 => { 17 => {
entity.insert(IsActive(d.value.into_boolean()?)); entity.insert(IsActive(d.value.into_boolean()?));
} }
18 => {
entity.insert(IsTearingDown(d.value.into_boolean()?));
}
19 => {
entity.insert(CreakingHomePos(d.value.into_optional_block_pos()?));
}
_ => {} _ => {}
} }
Ok(()) Ok(())
@ -2591,6 +2601,8 @@ pub struct CreakingMetadataBundle {
parent: AbstractMonsterMetadataBundle, parent: AbstractMonsterMetadataBundle,
can_move: CanMove, can_move: CanMove,
is_active: IsActive, is_active: IsActive,
is_tearing_down: IsTearingDown,
creaking_home_pos: CreakingHomePos,
} }
impl Default for CreakingMetadataBundle { impl Default for CreakingMetadataBundle {
fn default() -> Self { fn default() -> Self {
@ -2638,79 +2650,8 @@ impl Default for CreakingMetadataBundle {
}, },
can_move: CanMove(true), can_move: CanMove(true),
is_active: IsActive(false), is_active: IsActive(false),
} is_tearing_down: IsTearingDown(false),
} creaking_home_pos: CreakingHomePos(None),
}
#[derive(Component)]
pub struct CreakingTransient;
impl CreakingTransient {
pub fn apply_metadata(
entity: &mut bevy_ecs::system::EntityCommands,
d: EntityDataItem,
) -> Result<(), UpdateMetadataError> {
match d.index {
0..=17 => Creaking::apply_metadata(entity, d)?,
_ => {}
}
Ok(())
}
}
#[derive(Bundle)]
pub struct CreakingTransientMetadataBundle {
_marker: CreakingTransient,
parent: CreakingMetadataBundle,
}
impl Default for CreakingTransientMetadataBundle {
fn default() -> Self {
Self {
_marker: CreakingTransient,
parent: CreakingMetadataBundle {
_marker: Creaking,
parent: AbstractMonsterMetadataBundle {
_marker: AbstractMonster,
parent: AbstractCreatureMetadataBundle {
_marker: AbstractCreature,
parent: AbstractInsentientMetadataBundle {
_marker: AbstractInsentient,
parent: AbstractLivingMetadataBundle {
_marker: AbstractLiving,
parent: AbstractEntityMetadataBundle {
_marker: AbstractEntity,
on_fire: OnFire(false),
shift_key_down: ShiftKeyDown(false),
sprinting: Sprinting(false),
swimming: Swimming(false),
currently_glowing: CurrentlyGlowing(false),
invisible: Invisible(false),
fall_flying: FallFlying(false),
air_supply: AirSupply(Default::default()),
custom_name: CustomName(Default::default()),
custom_name_visible: CustomNameVisible(Default::default()),
silent: Silent(Default::default()),
no_gravity: NoGravity(Default::default()),
pose: Pose::default(),
ticks_frozen: TicksFrozen(Default::default()),
},
auto_spin_attack: AutoSpinAttack(false),
abstract_living_using_item: AbstractLivingUsingItem(false),
health: Health(1.0),
effect_particles: EffectParticles(Default::default()),
effect_ambience: EffectAmbience(false),
arrow_count: ArrowCount(0),
stinger_count: StingerCount(0),
sleeping_pos: SleepingPos(None),
},
no_ai: NoAi(false),
left_handed: LeftHanded(false),
aggressive: Aggressive(false),
},
},
},
can_move: CanMove(true),
is_active: IsActive(false),
},
} }
} }
} }
@ -8398,7 +8339,7 @@ impl Default for RavagerMetadataBundle {
#[derive(Component, Deref, DerefMut, Clone)] #[derive(Component, Deref, DerefMut, Clone)]
pub struct SalmonFromBucket(pub bool); pub struct SalmonFromBucket(pub bool);
#[derive(Component, Deref, DerefMut, Clone)] #[derive(Component, Deref, DerefMut, Clone)]
pub struct SalmonKind(pub String); pub struct SalmonKind(pub i32);
#[derive(Component)] #[derive(Component)]
pub struct Salmon; pub struct Salmon;
impl Salmon { impl Salmon {
@ -8412,7 +8353,7 @@ impl Salmon {
entity.insert(SalmonFromBucket(d.value.into_boolean()?)); entity.insert(SalmonFromBucket(d.value.into_boolean()?));
} }
17 => { 17 => {
entity.insert(SalmonKind(d.value.into_string()?)); entity.insert(SalmonKind(d.value.into_int()?));
} }
_ => {} _ => {}
} }
@ -10509,7 +10450,7 @@ impl Default for TropicalFishMetadataBundle {
} }
#[derive(Component, Deref, DerefMut, Clone)] #[derive(Component, Deref, DerefMut, Clone)]
pub struct HomePos(pub BlockPos); pub struct TurtleHomePos(pub BlockPos);
#[derive(Component, Deref, DerefMut, Clone)] #[derive(Component, Deref, DerefMut, Clone)]
pub struct HasEgg(pub bool); pub struct HasEgg(pub bool);
#[derive(Component, Deref, DerefMut, Clone)] #[derive(Component, Deref, DerefMut, Clone)]
@ -10530,7 +10471,7 @@ impl Turtle {
match d.index { match d.index {
0..=16 => AbstractAnimal::apply_metadata(entity, d)?, 0..=16 => AbstractAnimal::apply_metadata(entity, d)?,
17 => { 17 => {
entity.insert(HomePos(d.value.into_block_pos()?)); entity.insert(TurtleHomePos(d.value.into_block_pos()?));
} }
18 => { 18 => {
entity.insert(HasEgg(d.value.into_boolean()?)); entity.insert(HasEgg(d.value.into_boolean()?));
@ -10557,7 +10498,7 @@ impl Turtle {
pub struct TurtleMetadataBundle { pub struct TurtleMetadataBundle {
_marker: Turtle, _marker: Turtle,
parent: AbstractAnimalMetadataBundle, parent: AbstractAnimalMetadataBundle,
home_pos: HomePos, turtle_home_pos: TurtleHomePos,
has_egg: HasEgg, has_egg: HasEgg,
laying_egg: LayingEgg, laying_egg: LayingEgg,
travel_pos: TravelPos, travel_pos: TravelPos,
@ -10612,7 +10553,7 @@ impl Default for TurtleMetadataBundle {
abstract_ageable_baby: AbstractAgeableBaby(false), abstract_ageable_baby: AbstractAgeableBaby(false),
}, },
}, },
home_pos: HomePos(BlockPos::new(0, 0, 0)), turtle_home_pos: TurtleHomePos(BlockPos::new(0, 0, 0)),
has_egg: HasEgg(false), has_egg: HasEgg(false),
laying_egg: LayingEgg(false), laying_egg: LayingEgg(false),
travel_pos: TravelPos(BlockPos::new(0, 0, 0)), travel_pos: TravelPos(BlockPos::new(0, 0, 0)),
@ -12703,11 +12644,6 @@ pub fn apply_metadata(
Creaking::apply_metadata(entity, d)?; Creaking::apply_metadata(entity, d)?;
} }
} }
azalea_registry::EntityKind::CreakingTransient => {
for d in items {
CreakingTransient::apply_metadata(entity, d)?;
}
}
azalea_registry::EntityKind::Creeper => { azalea_registry::EntityKind::Creeper => {
for d in items { for d in items {
Creeper::apply_metadata(entity, d)?; Creeper::apply_metadata(entity, d)?;
@ -13402,9 +13338,6 @@ pub fn apply_default_metadata(
azalea_registry::EntityKind::Creaking => { azalea_registry::EntityKind::Creaking => {
entity.insert(CreakingMetadataBundle::default()); entity.insert(CreakingMetadataBundle::default());
} }
azalea_registry::EntityKind::CreakingTransient => {
entity.insert(CreakingTransientMetadataBundle::default());
}
azalea_registry::EntityKind::Creeper => { azalea_registry::EntityKind::Creeper => {
entity.insert(CreeperMetadataBundle::default()); entity.insert(CreeperMetadataBundle::default());
} }

View file

@ -163,6 +163,7 @@ impl From<ParticleKind> for Particle {
ParticleKind::Fishing => Self::Fishing, ParticleKind::Fishing => Self::Fishing,
ParticleKind::Flame => Self::Flame, ParticleKind::Flame => Self::Flame,
ParticleKind::CherryLeaves => Self::CherryLeaves, ParticleKind::CherryLeaves => Self::CherryLeaves,
ParticleKind::PaleOakLeaves => Self::PaleOakLeaves,
ParticleKind::SculkSoul => Self::SculkSoul, ParticleKind::SculkSoul => Self::SculkSoul,
ParticleKind::SculkCharge => Self::SculkCharge(SculkChargeParticle::default()), ParticleKind::SculkCharge => Self::SculkCharge(SculkChargeParticle::default()),
ParticleKind::SculkChargePop => Self::SculkChargePop, ParticleKind::SculkChargePop => Self::SculkChargePop,

View file

@ -1429,6 +1429,7 @@
"block.minecraft.chiseled_polished_blackstone": "Chiseled Polished Blackstone", "block.minecraft.chiseled_polished_blackstone": "Chiseled Polished Blackstone",
"block.minecraft.chiseled_quartz_block": "Chiseled Quartz Block", "block.minecraft.chiseled_quartz_block": "Chiseled Quartz Block",
"block.minecraft.chiseled_red_sandstone": "Chiseled Red Sandstone", "block.minecraft.chiseled_red_sandstone": "Chiseled Red Sandstone",
"block.minecraft.chiseled_resin_bricks": "Chiseled Resin Bricks",
"block.minecraft.chiseled_sandstone": "Chiseled Sandstone", "block.minecraft.chiseled_sandstone": "Chiseled Sandstone",
"block.minecraft.chiseled_stone_bricks": "Chiseled Stone Bricks", "block.minecraft.chiseled_stone_bricks": "Chiseled Stone Bricks",
"block.minecraft.chiseled_tuff": "Chiseled Tuff", "block.minecraft.chiseled_tuff": "Chiseled Tuff",
@ -1436,6 +1437,7 @@
"block.minecraft.chorus_flower": "Chorus Flower", "block.minecraft.chorus_flower": "Chorus Flower",
"block.minecraft.chorus_plant": "Chorus Plant", "block.minecraft.chorus_plant": "Chorus Plant",
"block.minecraft.clay": "Clay", "block.minecraft.clay": "Clay",
"block.minecraft.closed_eyeblossom": "Closed Eyeblossom",
"block.minecraft.coal_block": "Block of Coal", "block.minecraft.coal_block": "Block of Coal",
"block.minecraft.coal_ore": "Coal Ore", "block.minecraft.coal_ore": "Coal Ore",
"block.minecraft.coarse_dirt": "Coarse Dirt", "block.minecraft.coarse_dirt": "Coarse Dirt",
@ -1856,6 +1858,7 @@
"block.minecraft.obsidian": "Obsidian", "block.minecraft.obsidian": "Obsidian",
"block.minecraft.ochre_froglight": "Ochre Froglight", "block.minecraft.ochre_froglight": "Ochre Froglight",
"block.minecraft.ominous_banner": "Ominous Banner", "block.minecraft.ominous_banner": "Ominous Banner",
"block.minecraft.open_eyeblossom": "Open Eyeblossom",
"block.minecraft.orange_banner": "Orange Banner", "block.minecraft.orange_banner": "Orange Banner",
"block.minecraft.orange_bed": "Orange Bed", "block.minecraft.orange_bed": "Orange Bed",
"block.minecraft.orange_candle": "Orange Candle", "block.minecraft.orange_candle": "Orange Candle",
@ -1971,6 +1974,7 @@
"block.minecraft.potted_brown_mushroom": "Potted Brown Mushroom", "block.minecraft.potted_brown_mushroom": "Potted Brown Mushroom",
"block.minecraft.potted_cactus": "Potted Cactus", "block.minecraft.potted_cactus": "Potted Cactus",
"block.minecraft.potted_cherry_sapling": "Potted Cherry Sapling", "block.minecraft.potted_cherry_sapling": "Potted Cherry Sapling",
"block.minecraft.potted_closed_eyeblossom": "Potted Closed Eyeblossom",
"block.minecraft.potted_cornflower": "Potted Cornflower", "block.minecraft.potted_cornflower": "Potted Cornflower",
"block.minecraft.potted_crimson_fungus": "Potted Crimson Fungus", "block.minecraft.potted_crimson_fungus": "Potted Crimson Fungus",
"block.minecraft.potted_crimson_roots": "Potted Crimson Roots", "block.minecraft.potted_crimson_roots": "Potted Crimson Roots",
@ -1983,6 +1987,7 @@
"block.minecraft.potted_lily_of_the_valley": "Potted Lily of the Valley", "block.minecraft.potted_lily_of_the_valley": "Potted Lily of the Valley",
"block.minecraft.potted_mangrove_propagule": "Potted Mangrove Propagule", "block.minecraft.potted_mangrove_propagule": "Potted Mangrove Propagule",
"block.minecraft.potted_oak_sapling": "Potted Oak Sapling", "block.minecraft.potted_oak_sapling": "Potted Oak Sapling",
"block.minecraft.potted_open_eyeblossom": "Potted Open Eyeblossom",
"block.minecraft.potted_orange_tulip": "Potted Orange Tulip", "block.minecraft.potted_orange_tulip": "Potted Orange Tulip",
"block.minecraft.potted_oxeye_daisy": "Potted Oxeye Daisy", "block.minecraft.potted_oxeye_daisy": "Potted Oxeye Daisy",
"block.minecraft.potted_pale_oak_sapling": "Potted Pale Oak Sapling", "block.minecraft.potted_pale_oak_sapling": "Potted Pale Oak Sapling",
@ -2068,6 +2073,12 @@
"block.minecraft.reinforced_deepslate": "Reinforced Deepslate", "block.minecraft.reinforced_deepslate": "Reinforced Deepslate",
"block.minecraft.repeater": "Redstone Repeater", "block.minecraft.repeater": "Redstone Repeater",
"block.minecraft.repeating_command_block": "Repeating Command Block", "block.minecraft.repeating_command_block": "Repeating Command Block",
"block.minecraft.resin_block": "Block of Resin",
"block.minecraft.resin_brick_slab": "Resin Brick Slab",
"block.minecraft.resin_brick_stairs": "Resin Brick Stairs",
"block.minecraft.resin_brick_wall": "Resin Brick Wall",
"block.minecraft.resin_bricks": "Resin Bricks",
"block.minecraft.resin_clump": "Resin Clump",
"block.minecraft.respawn_anchor": "Respawn Anchor", "block.minecraft.respawn_anchor": "Respawn Anchor",
"block.minecraft.rooted_dirt": "Rooted Dirt", "block.minecraft.rooted_dirt": "Rooted Dirt",
"block.minecraft.rose_bush": "Rose Bush", "block.minecraft.rose_bush": "Rose Bush",
@ -2431,6 +2442,7 @@
"commands.advancement.revoke.one.to.one.failure": "Couldn't revoke advancement %s from %s as they don't have it", "commands.advancement.revoke.one.to.one.failure": "Couldn't revoke advancement %s from %s as they don't have it",
"commands.advancement.revoke.one.to.one.success": "Revoked the advancement %s from %s", "commands.advancement.revoke.one.to.one.success": "Revoked the advancement %s from %s",
"commands.attribute.base_value.get.success": "Base value of attribute %s for entity %s is %s", "commands.attribute.base_value.get.success": "Base value of attribute %s for entity %s is %s",
"commands.attribute.base_value.reset.success": "Base value for attribute %s for entity %s reset to default %s",
"commands.attribute.base_value.set.success": "Base value for attribute %s for entity %s set to %s", "commands.attribute.base_value.set.success": "Base value for attribute %s for entity %s set to %s",
"commands.attribute.failed.entity": "%s is not a valid entity for this command", "commands.attribute.failed.entity": "%s is not a valid entity for this command",
"commands.attribute.failed.modifier_already_present": "Modifier %s is already present on attribute %s for entity %s", "commands.attribute.failed.modifier_already_present": "Modifier %s is already present on attribute %s for entity %s",
@ -4358,6 +4370,8 @@
"item.minecraft.red_bundle": "Red Bundle", "item.minecraft.red_bundle": "Red Bundle",
"item.minecraft.red_dye": "Red Dye", "item.minecraft.red_dye": "Red Dye",
"item.minecraft.redstone": "Redstone Dust", "item.minecraft.redstone": "Redstone Dust",
"item.minecraft.resin_brick": "Resin Brick",
"item.minecraft.resin_clump": "Resin Clump",
"item.minecraft.rib_armor_trim_smithing_template": "Smithing Template", "item.minecraft.rib_armor_trim_smithing_template": "Smithing Template",
"item.minecraft.rib_armor_trim_smithing_template.new": "Rib Armor Trim", "item.minecraft.rib_armor_trim_smithing_template.new": "Rib Armor Trim",
"item.minecraft.rotten_flesh": "Rotten Flesh", "item.minecraft.rotten_flesh": "Rotten Flesh",
@ -4569,6 +4583,9 @@
"item.modifiers.mainhand": "When in Main Hand:", "item.modifiers.mainhand": "When in Main Hand:",
"item.modifiers.offhand": "When in Off Hand:", "item.modifiers.offhand": "When in Off Hand:",
"item.nbt_tags": "NBT: %s tag(s)", "item.nbt_tags": "NBT: %s tag(s)",
"item.op_block_warning.line1": "Warning:",
"item.op_block_warning.line2": "Use of this item might lead to command execution",
"item.op_block_warning.line3": "Do not use unless you know the exact contents!",
"item.unbreakable": "Unbreakable", "item.unbreakable": "Unbreakable",
"itemGroup.buildingBlocks": "Building Blocks", "itemGroup.buildingBlocks": "Building Blocks",
"itemGroup.coloredBlocks": "Colored Blocks", "itemGroup.coloredBlocks": "Colored Blocks",
@ -5999,6 +6016,7 @@
"structure_block.size.z": "structure size z", "structure_block.size.z": "structure size z",
"structure_block.structure_name": "Structure Name", "structure_block.structure_name": "Structure Name",
"subtitles.ambient.cave": "Eerie noise", "subtitles.ambient.cave": "Eerie noise",
"subtitles.ambient.sound": "Eerie noise",
"subtitles.block.amethyst_block.chime": "Amethyst chimes", "subtitles.block.amethyst_block.chime": "Amethyst chimes",
"subtitles.block.amethyst_block.resonate": "Amethyst resonates", "subtitles.block.amethyst_block.resonate": "Amethyst resonates",
"subtitles.block.anvil.destroy": "Anvil destroyed", "subtitles.block.anvil.destroy": "Anvil destroyed",
@ -6050,7 +6068,7 @@
"subtitles.block.copper_trapdoor.open": "Trapdoor opens", "subtitles.block.copper_trapdoor.open": "Trapdoor opens",
"subtitles.block.crafter.craft": "Crafter crafts", "subtitles.block.crafter.craft": "Crafter crafts",
"subtitles.block.crafter.fail": "Crafter fails crafting", "subtitles.block.crafter.fail": "Crafter fails crafting",
"subtitles.block.creaking_heart.hurt": "Creaking Heart screams", "subtitles.block.creaking_heart.hurt": "Creaking Heart grumbles",
"subtitles.block.creaking_heart.idle": "Eerie noise", "subtitles.block.creaking_heart.idle": "Eerie noise",
"subtitles.block.creaking_heart.spawn": "Creaking Heart awakens", "subtitles.block.creaking_heart.spawn": "Creaking Heart awakens",
"subtitles.block.decorated_pot.insert": "Decorated Pot fills", "subtitles.block.decorated_pot.insert": "Decorated Pot fills",
@ -6062,12 +6080,16 @@
"subtitles.block.enchantment_table.use": "Enchanting Table used", "subtitles.block.enchantment_table.use": "Enchanting Table used",
"subtitles.block.end_portal_frame.fill": "Eye of Ender attaches", "subtitles.block.end_portal_frame.fill": "Eye of Ender attaches",
"subtitles.block.end_portal.spawn": "End Portal opens", "subtitles.block.end_portal.spawn": "End Portal opens",
"subtitles.block.eyeblossom.close": "Eyeblossom closes",
"subtitles.block.eyeblossom.idle": "Eyeblossom whispers",
"subtitles.block.eyeblossom.open": "Eyeblossom opens",
"subtitles.block.fence_gate.toggle": "Fence Gate creaks", "subtitles.block.fence_gate.toggle": "Fence Gate creaks",
"subtitles.block.fire.ambient": "Fire crackles", "subtitles.block.fire.ambient": "Fire crackles",
"subtitles.block.fire.extinguish": "Fire extinguished", "subtitles.block.fire.extinguish": "Fire extinguished",
"subtitles.block.frogspawn.hatch": "Tadpole hatches", "subtitles.block.frogspawn.hatch": "Tadpole hatches",
"subtitles.block.furnace.fire_crackle": "Furnace crackles", "subtitles.block.furnace.fire_crackle": "Furnace crackles",
"subtitles.block.generic.break": "Block broken", "subtitles.block.generic.break": "Block broken",
"subtitles.block.generic.fall": "Something falls on a block",
"subtitles.block.generic.footsteps": "Footsteps", "subtitles.block.generic.footsteps": "Footsteps",
"subtitles.block.generic.hit": "Block breaking", "subtitles.block.generic.hit": "Block breaking",
"subtitles.block.generic.place": "Block placed", "subtitles.block.generic.place": "Block placed",
@ -6240,15 +6262,15 @@
"subtitles.entity.cow.death": "Cow dies", "subtitles.entity.cow.death": "Cow dies",
"subtitles.entity.cow.hurt": "Cow hurts", "subtitles.entity.cow.hurt": "Cow hurts",
"subtitles.entity.cow.milk": "Cow gets milked", "subtitles.entity.cow.milk": "Cow gets milked",
"subtitles.entity.creaking.activate": "Creaking activates", "subtitles.entity.creaking.activate": "Creaking watches",
"subtitles.entity.creaking.ambient": "Creaking creaks", "subtitles.entity.creaking.ambient": "Creaking creaks",
"subtitles.entity.creaking.angry": "Creaking sees player",
"subtitles.entity.creaking.attack": "Creaking attacks", "subtitles.entity.creaking.attack": "Creaking attacks",
"subtitles.entity.creaking.deactivate": "Creaking deactivates", "subtitles.entity.creaking.deactivate": "Creaking calms",
"subtitles.entity.creaking.death": "Creaking dies", "subtitles.entity.creaking.death": "Creaking crumbles",
"subtitles.entity.creaking.freeze": "Creaking stops", "subtitles.entity.creaking.freeze": "Creaking stops",
"subtitles.entity.creaking.spawn": "Creaking lives", "subtitles.entity.creaking.spawn": "Creaking manifests",
"subtitles.entity.creaking.sway": "Creaking is shielded", "subtitles.entity.creaking.sway": "Creaking is hit",
"subtitles.entity.creaking.twitch": "Creaking twitches",
"subtitles.entity.creaking.unfreeze": "Creaking moves", "subtitles.entity.creaking.unfreeze": "Creaking moves",
"subtitles.entity.creeper.death": "Creeper dies", "subtitles.entity.creeper.death": "Creeper dies",
"subtitles.entity.creeper.hurt": "Creeper hurts", "subtitles.entity.creeper.hurt": "Creeper hurts",
@ -6315,6 +6337,7 @@
"subtitles.entity.firework_rocket.blast": "Firework blasts", "subtitles.entity.firework_rocket.blast": "Firework blasts",
"subtitles.entity.firework_rocket.launch": "Firework launches", "subtitles.entity.firework_rocket.launch": "Firework launches",
"subtitles.entity.firework_rocket.twinkle": "Firework twinkles", "subtitles.entity.firework_rocket.twinkle": "Firework twinkles",
"subtitles.entity.fish.swim": "Splashes",
"subtitles.entity.fishing_bobber.retrieve": "Bobber retrieved", "subtitles.entity.fishing_bobber.retrieve": "Bobber retrieved",
"subtitles.entity.fishing_bobber.splash": "Fishing Bobber splashes", "subtitles.entity.fishing_bobber.splash": "Fishing Bobber splashes",
"subtitles.entity.fishing_bobber.throw": "Bobber thrown", "subtitles.entity.fishing_bobber.throw": "Bobber thrown",
@ -6434,6 +6457,8 @@
"subtitles.entity.magma_cube.death": "Magma Cube dies", "subtitles.entity.magma_cube.death": "Magma Cube dies",
"subtitles.entity.magma_cube.hurt": "Magma Cube hurts", "subtitles.entity.magma_cube.hurt": "Magma Cube hurts",
"subtitles.entity.magma_cube.squish": "Magma Cube squishes", "subtitles.entity.magma_cube.squish": "Magma Cube squishes",
"subtitles.entity.minecart.inside": "Minecart jangles",
"subtitles.entity.minecart.inside_underwater": "Minecart jangles underwater",
"subtitles.entity.minecart.riding": "Minecart rolls", "subtitles.entity.minecart.riding": "Minecart rolls",
"subtitles.entity.mooshroom.convert": "Mooshroom transforms", "subtitles.entity.mooshroom.convert": "Mooshroom transforms",
"subtitles.entity.mooshroom.eat": "Mooshroom eats", "subtitles.entity.mooshroom.eat": "Mooshroom eats",
@ -6590,6 +6615,7 @@
"subtitles.entity.skeleton_horse.ambient": "Skeleton Horse cries", "subtitles.entity.skeleton_horse.ambient": "Skeleton Horse cries",
"subtitles.entity.skeleton_horse.death": "Skeleton Horse dies", "subtitles.entity.skeleton_horse.death": "Skeleton Horse dies",
"subtitles.entity.skeleton_horse.hurt": "Skeleton Horse hurts", "subtitles.entity.skeleton_horse.hurt": "Skeleton Horse hurts",
"subtitles.entity.skeleton_horse.jump_water": "Skeleton Horse jumps",
"subtitles.entity.skeleton_horse.swim": "Skeleton Horse swims", "subtitles.entity.skeleton_horse.swim": "Skeleton Horse swims",
"subtitles.entity.skeleton.ambient": "Skeleton rattles", "subtitles.entity.skeleton.ambient": "Skeleton rattles",
"subtitles.entity.skeleton.converted_to_stray": "Skeleton converts to Stray", "subtitles.entity.skeleton.converted_to_stray": "Skeleton converts to Stray",
@ -6802,6 +6828,7 @@
"subtitles.item.crossbow.load": "Crossbow loads", "subtitles.item.crossbow.load": "Crossbow loads",
"subtitles.item.crossbow.shoot": "Crossbow fires", "subtitles.item.crossbow.shoot": "Crossbow fires",
"subtitles.item.dye.use": "Dye stains", "subtitles.item.dye.use": "Dye stains",
"subtitles.item.elytra.flying": "Swoosh",
"subtitles.item.firecharge.use": "Fireball whooshes", "subtitles.item.firecharge.use": "Fireball whooshes",
"subtitles.item.flintandsteel.use": "Flint and Steel click", "subtitles.item.flintandsteel.use": "Flint and Steel click",
"subtitles.item.glow_ink_sac.use": "Glow Ink Sac splotches", "subtitles.item.glow_ink_sac.use": "Glow Ink Sac splotches",
@ -6936,6 +6963,7 @@
"trim_material.minecraft.netherite": "Netherite Material", "trim_material.minecraft.netherite": "Netherite Material",
"trim_material.minecraft.quartz": "Quartz Material", "trim_material.minecraft.quartz": "Quartz Material",
"trim_material.minecraft.redstone": "Redstone Material", "trim_material.minecraft.redstone": "Redstone Material",
"trim_material.minecraft.resin": "Resin Material",
"trim_pattern.minecraft.bolt": "Bolt Armor Trim", "trim_pattern.minecraft.bolt": "Bolt Armor Trim",
"trim_pattern.minecraft.coast": "Coast Armor Trim", "trim_pattern.minecraft.coast": "Coast Armor Trim",
"trim_pattern.minecraft.dune": "Dune Armor Trim", "trim_pattern.minecraft.dune": "Dune Armor Trim",

File diff suppressed because it is too large Load diff

View file

@ -439,6 +439,7 @@ impl VoxelShape {
location: right_after_start, location: right_after_start,
inside: true, inside: true,
miss: false, miss: false,
world_border: false,
}) })
} else { } else {
AABB::clip_iterable(&self.to_aabbs(), from, to, block_pos) AABB::clip_iterable(&self.to_aabbs(), from, to, block_pos)

View file

@ -5,6 +5,7 @@ use azalea_protocol_macros::ClientboundGamePacket;
#[derive(Clone, Debug, AzBuf, ClientboundGamePacket)] #[derive(Clone, Debug, AzBuf, ClientboundGamePacket)]
pub struct ClientboundLevelParticles { pub struct ClientboundLevelParticles {
pub override_limiter: bool, pub override_limiter: bool,
pub always_show: bool,
pub x: f64, pub x: f64,
pub y: f64, pub y: f64,
pub z: f64, pub z: f64,
@ -27,13 +28,14 @@ mod tests {
#[test] #[test]
fn test_c_level_particles_packet() { fn test_c_level_particles_packet() {
let slice = &[ let slice = &[
0, 64, 139, 10, 0, 0, 0, 0, 0, 192, 26, 0, 0, 0, 0, 0, 0, 64, 144, 58, 0, 0, 0, 0, 0, 0, 0, 64, 36, 19, 1, 192, 139, 224, 69, 64, 91, 192, 0, 0, 0, 0, 0, 63, 229, 66, 62,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 13, 63, 128, 0, 0, 0, 0, 0, 20, 132, 232, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 25, 153, 154, 0, 0, 0, 70,
0, 0, 0, 0, 0, 63, 128, 0, 0, 1, 9,
][..]; ][..];
let mut bytes = Cursor::new(slice); let mut bytes = Cursor::new(slice);
let _packet = ClientboundLevelParticles::azalea_read(&mut bytes).unwrap(); let packet = ClientboundLevelParticles::azalea_read(&mut bytes).unwrap();
println!("{packet:?}");
assert_eq!(bytes.position(), slice.len() as u64); assert_eq!(bytes.position(), slice.len() as u64);
} }
} }

View file

@ -172,13 +172,15 @@ declare_state_packets!(GamePacket,
move_player_status_only, move_player_status_only,
move_vehicle, move_vehicle,
paddle_boat, paddle_boat,
pick_item, pick_item_from_block,
pick_item_from_entity,
ping_request, ping_request,
place_recipe, place_recipe,
player_abilities, player_abilities,
player_action, player_action,
player_command, player_command,
player_input, player_input,
player_loaded,
pong, pong,
recipe_book_change_settings, recipe_book_change_settings,
recipe_book_seen_recipe, recipe_book_seen_recipe,

View file

@ -2,7 +2,7 @@ use azalea_buf::AzBuf;
use azalea_protocol_macros::ServerboundGamePacket; use azalea_protocol_macros::ServerboundGamePacket;
#[derive(Clone, Debug, AzBuf, ServerboundGamePacket)] #[derive(Clone, Debug, AzBuf, ServerboundGamePacket)]
pub struct ServerboundPickItem { pub struct ServerboundPickItemFromBlock {
#[var] #[var]
pub slot: u32, pub slot: u32,
} }

View file

@ -27,8 +27,10 @@ pub struct BlockHit {
/// network, this is transmitted as the difference between the location and /// network, this is transmitted as the difference between the location and
/// block position. /// block position.
pub location: Vec3, pub location: Vec3,
/// Whether the player's head is inside of a block. /// Whether the player's head is inside a block.
pub inside: bool, pub inside: bool,
/// Whether the player's hitting the world border.
pub world_border: bool,
} }
impl AzaleaWrite for BlockHit { impl AzaleaWrite for BlockHit {
@ -48,6 +50,7 @@ impl AzaleaWrite for BlockHit {
buf, buf,
)?; )?;
self.inside.azalea_write(buf)?; self.inside.azalea_write(buf)?;
self.world_border.azalea_write(buf)?;
Ok(()) Ok(())
} }
} }
@ -60,6 +63,7 @@ impl AzaleaRead for BlockHit {
let cursor_y = f32::azalea_read(buf)?; let cursor_y = f32::azalea_read(buf)?;
let cursor_z = f32::azalea_read(buf)?; let cursor_z = f32::azalea_read(buf)?;
let inside = bool::azalea_read(buf)?; let inside = bool::azalea_read(buf)?;
let world_border = bool::azalea_read(buf)?;
Ok(Self { Ok(Self {
block_pos, block_pos,
direction, direction,
@ -69,6 +73,7 @@ impl AzaleaRead for BlockHit {
z: f64::from(block_pos.z) + f64::from(cursor_z), z: f64::from(block_pos.z) + f64::from(cursor_z),
}, },
inside, inside,
world_border,
}) })
} }
} }

View file

@ -11,8 +11,8 @@ use azalea_buf::{AzaleaReadVar, AzaleaWrite, AzaleaWriteVar, BufReadError};
use crate::read::ReadPacketError; use crate::read::ReadPacketError;
pub const PROTOCOL_VERSION: i32 = 768; pub const PROTOCOL_VERSION: i32 = 769;
pub const VERSION_NAME: &str = "1.21.3"; pub const VERSION_NAME: &str = "1.21.4";
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum ConnectionProtocol { pub enum ConnectionProtocol {

View file

@ -351,7 +351,7 @@ where
} }
if tracing::enabled!(tracing::Level::TRACE) { if tracing::enabled!(tracing::Level::TRACE) {
const DO_NOT_CUT_OFF_PACKET_LOGS: bool = true; const DO_NOT_CUT_OFF_PACKET_LOGS: bool = false;
let buf_string: String = { let buf_string: String = {
if !DO_NOT_CUT_OFF_PACKET_LOGS && buf.len() > 500 { if !DO_NOT_CUT_OFF_PACKET_LOGS && buf.len() > 500 {

View file

@ -600,12 +600,19 @@ enum Block {
MelonStem => "minecraft:melon_stem", MelonStem => "minecraft:melon_stem",
Vine => "minecraft:vine", Vine => "minecraft:vine",
GlowLichen => "minecraft:glow_lichen", GlowLichen => "minecraft:glow_lichen",
ResinClump => "minecraft:resin_clump",
OakFenceGate => "minecraft:oak_fence_gate", OakFenceGate => "minecraft:oak_fence_gate",
BrickStairs => "minecraft:brick_stairs", BrickStairs => "minecraft:brick_stairs",
StoneBrickStairs => "minecraft:stone_brick_stairs", StoneBrickStairs => "minecraft:stone_brick_stairs",
MudBrickStairs => "minecraft:mud_brick_stairs", MudBrickStairs => "minecraft:mud_brick_stairs",
Mycelium => "minecraft:mycelium", Mycelium => "minecraft:mycelium",
LilyPad => "minecraft:lily_pad", LilyPad => "minecraft:lily_pad",
ResinBlock => "minecraft:resin_block",
ResinBricks => "minecraft:resin_bricks",
ResinBrickStairs => "minecraft:resin_brick_stairs",
ResinBrickSlab => "minecraft:resin_brick_slab",
ResinBrickWall => "minecraft:resin_brick_wall",
ChiseledResinBricks => "minecraft:chiseled_resin_bricks",
NetherBricks => "minecraft:nether_bricks", NetherBricks => "minecraft:nether_bricks",
NetherBrickFence => "minecraft:nether_brick_fence", NetherBrickFence => "minecraft:nether_brick_fence",
NetherBrickStairs => "minecraft:nether_brick_stairs", NetherBrickStairs => "minecraft:nether_brick_stairs",
@ -1351,6 +1358,10 @@ enum Block {
PaleMossBlock => "minecraft:pale_moss_block", PaleMossBlock => "minecraft:pale_moss_block",
PaleMossCarpet => "minecraft:pale_moss_carpet", PaleMossCarpet => "minecraft:pale_moss_carpet",
PaleHangingMoss => "minecraft:pale_hanging_moss", PaleHangingMoss => "minecraft:pale_hanging_moss",
OpenEyeblossom => "minecraft:open_eyeblossom",
ClosedEyeblossom => "minecraft:closed_eyeblossom",
PottedOpenEyeblossom => "minecraft:potted_open_eyeblossom",
PottedClosedEyeblossom => "minecraft:potted_closed_eyeblossom",
} }
} }
@ -1677,7 +1688,6 @@ enum EntityKind {
CommandBlockMinecart => "minecraft:command_block_minecart", CommandBlockMinecart => "minecraft:command_block_minecart",
Cow => "minecraft:cow", Cow => "minecraft:cow",
Creaking => "minecraft:creaking", Creaking => "minecraft:creaking",
CreakingTransient => "minecraft:creaking_transient",
Creeper => "minecraft:creeper", Creeper => "minecraft:creeper",
DarkOakBoat => "minecraft:dark_oak_boat", DarkOakBoat => "minecraft:dark_oak_boat",
DarkOakChestBoat => "minecraft:dark_oak_chest_boat", DarkOakChestBoat => "minecraft:dark_oak_chest_boat",
@ -2155,6 +2165,8 @@ enum Item {
RedWool => "minecraft:red_wool", RedWool => "minecraft:red_wool",
BlackWool => "minecraft:black_wool", BlackWool => "minecraft:black_wool",
Dandelion => "minecraft:dandelion", Dandelion => "minecraft:dandelion",
OpenEyeblossom => "minecraft:open_eyeblossom",
ClosedEyeblossom => "minecraft:closed_eyeblossom",
Poppy => "minecraft:poppy", Poppy => "minecraft:poppy",
BlueOrchid => "minecraft:blue_orchid", BlueOrchid => "minecraft:blue_orchid",
Allium => "minecraft:allium", Allium => "minecraft:allium",
@ -2303,6 +2315,13 @@ enum Item {
Melon => "minecraft:melon", Melon => "minecraft:melon",
Vine => "minecraft:vine", Vine => "minecraft:vine",
GlowLichen => "minecraft:glow_lichen", GlowLichen => "minecraft:glow_lichen",
ResinClump => "minecraft:resin_clump",
ResinBlock => "minecraft:resin_block",
ResinBricks => "minecraft:resin_bricks",
ResinBrickStairs => "minecraft:resin_brick_stairs",
ResinBrickSlab => "minecraft:resin_brick_slab",
ResinBrickWall => "minecraft:resin_brick_wall",
ChiseledResinBricks => "minecraft:chiseled_resin_bricks",
BrickStairs => "minecraft:brick_stairs", BrickStairs => "minecraft:brick_stairs",
StoneBrickStairs => "minecraft:stone_brick_stairs", StoneBrickStairs => "minecraft:stone_brick_stairs",
MudBrickStairs => "minecraft:mud_brick_stairs", MudBrickStairs => "minecraft:mud_brick_stairs",
@ -3087,6 +3106,7 @@ enum Item {
FireworkStar => "minecraft:firework_star", FireworkStar => "minecraft:firework_star",
EnchantedBook => "minecraft:enchanted_book", EnchantedBook => "minecraft:enchanted_book",
NetherBrick => "minecraft:nether_brick", NetherBrick => "minecraft:nether_brick",
ResinBrick => "minecraft:resin_brick",
PrismarineShard => "minecraft:prismarine_shard", PrismarineShard => "minecraft:prismarine_shard",
PrismarineCrystals => "minecraft:prismarine_crystals", PrismarineCrystals => "minecraft:prismarine_crystals",
Rabbit => "minecraft:rabbit", Rabbit => "minecraft:rabbit",
@ -3669,6 +3689,7 @@ enum ParticleKind {
Flame => "minecraft:flame", Flame => "minecraft:flame",
Infested => "minecraft:infested", Infested => "minecraft:infested",
CherryLeaves => "minecraft:cherry_leaves", CherryLeaves => "minecraft:cherry_leaves",
PaleOakLeaves => "minecraft:pale_oak_leaves",
SculkSoul => "minecraft:sculk_soul", SculkSoul => "minecraft:sculk_soul",
SculkCharge => "minecraft:sculk_charge", SculkCharge => "minecraft:sculk_charge",
SculkChargePop => "minecraft:sculk_charge_pop", SculkChargePop => "minecraft:sculk_charge_pop",
@ -4316,6 +4337,7 @@ enum SoundEvent {
EntityCreakingUnfreeze => "minecraft:entity.creaking.unfreeze", EntityCreakingUnfreeze => "minecraft:entity.creaking.unfreeze",
EntityCreakingSpawn => "minecraft:entity.creaking.spawn", EntityCreakingSpawn => "minecraft:entity.creaking.spawn",
EntityCreakingSway => "minecraft:entity.creaking.sway", EntityCreakingSway => "minecraft:entity.creaking.sway",
EntityCreakingTwitch => "minecraft:entity.creaking.twitch",
BlockCreakingHeartBreak => "minecraft:block.creaking_heart.break", BlockCreakingHeartBreak => "minecraft:block.creaking_heart.break",
BlockCreakingHeartFall => "minecraft:block.creaking_heart.fall", BlockCreakingHeartFall => "minecraft:block.creaking_heart.fall",
BlockCreakingHeartHit => "minecraft:block.creaking_heart.hit", BlockCreakingHeartHit => "minecraft:block.creaking_heart.hit",
@ -4454,6 +4476,11 @@ enum SoundEvent {
EntityEvokerPrepareWololo => "minecraft:entity.evoker.prepare_wololo", EntityEvokerPrepareWololo => "minecraft:entity.evoker.prepare_wololo",
EntityExperienceBottleThrow => "minecraft:entity.experience_bottle.throw", EntityExperienceBottleThrow => "minecraft:entity.experience_bottle.throw",
EntityExperienceOrbPickup => "minecraft:entity.experience_orb.pickup", EntityExperienceOrbPickup => "minecraft:entity.experience_orb.pickup",
BlockEyeblossomOpenLong => "minecraft:block.eyeblossom.open_long",
BlockEyeblossomOpen => "minecraft:block.eyeblossom.open",
BlockEyeblossomCloseLong => "minecraft:block.eyeblossom.close_long",
BlockEyeblossomClose => "minecraft:block.eyeblossom.close",
BlockEyeblossomIdle => "minecraft:block.eyeblossom.idle",
BlockFenceGateClose => "minecraft:block.fence_gate.close", BlockFenceGateClose => "minecraft:block.fence_gate.close",
BlockFenceGateOpen => "minecraft:block.fence_gate.open", BlockFenceGateOpen => "minecraft:block.fence_gate.open",
ItemFirechargeUse => "minecraft:item.firecharge.use", ItemFirechargeUse => "minecraft:item.firecharge.use",
@ -5254,6 +5281,15 @@ enum SoundEvent {
BlockSpawnerHit => "minecraft:block.spawner.hit", BlockSpawnerHit => "minecraft:block.spawner.hit",
BlockSpawnerPlace => "minecraft:block.spawner.place", BlockSpawnerPlace => "minecraft:block.spawner.place",
BlockSpawnerStep => "minecraft:block.spawner.step", BlockSpawnerStep => "minecraft:block.spawner.step",
BlockResinBreak => "minecraft:block.resin.break",
BlockResinFall => "minecraft:block.resin.fall",
BlockResinPlace => "minecraft:block.resin.place",
BlockResinStep => "minecraft:block.resin.step",
BlockResinBricksBreak => "minecraft:block.resin_bricks.break",
BlockResinBricksFall => "minecraft:block.resin_bricks.fall",
BlockResinBricksHit => "minecraft:block.resin_bricks.hit",
BlockResinBricksPlace => "minecraft:block.resin_bricks.place",
BlockResinBricksStep => "minecraft:block.resin_bricks.step",
BlockSporeBlossomBreak => "minecraft:block.spore_blossom.break", BlockSporeBlossomBreak => "minecraft:block.spore_blossom.break",
BlockSporeBlossomFall => "minecraft:block.spore_blossom.fall", BlockSporeBlossomFall => "minecraft:block.spore_blossom.fall",
BlockSporeBlossomHit => "minecraft:block.spore_blossom.hit", BlockSporeBlossomHit => "minecraft:block.spore_blossom.hit",
@ -6106,7 +6142,6 @@ enum BlockKind {
CaveVinesPlant => "minecraft:cave_vines_plant", CaveVinesPlant => "minecraft:cave_vines_plant",
CeilingHangingSign => "minecraft:ceiling_hanging_sign", CeilingHangingSign => "minecraft:ceiling_hanging_sign",
Chain => "minecraft:chain", Chain => "minecraft:chain",
CherryLeaves => "minecraft:cherry_leaves",
Chest => "minecraft:chest", Chest => "minecraft:chest",
ChiseledBookShelf => "minecraft:chiseled_book_shelf", ChiseledBookShelf => "minecraft:chiseled_book_shelf",
ChorusFlower => "minecraft:chorus_flower", ChorusFlower => "minecraft:chorus_flower",
@ -6144,6 +6179,7 @@ enum BlockKind {
EndPortal => "minecraft:end_portal", EndPortal => "minecraft:end_portal",
EndPortalFrame => "minecraft:end_portal_frame", EndPortalFrame => "minecraft:end_portal_frame",
EndRod => "minecraft:end_rod", EndRod => "minecraft:end_rod",
Eyeblossom => "minecraft:eyeblossom",
Farm => "minecraft:farm", Farm => "minecraft:farm",
BonemealableFeaturePlacer => "minecraft:bonemealable_feature_placer", BonemealableFeaturePlacer => "minecraft:bonemealable_feature_placer",
Fence => "minecraft:fence", Fence => "minecraft:fence",
@ -6195,6 +6231,7 @@ enum BlockKind {
MossyCarpet => "minecraft:mossy_carpet", MossyCarpet => "minecraft:mossy_carpet",
MovingPiston => "minecraft:moving_piston", MovingPiston => "minecraft:moving_piston",
Mud => "minecraft:mud", Mud => "minecraft:mud",
Multiface => "minecraft:multiface",
Mushroom => "minecraft:mushroom", Mushroom => "minecraft:mushroom",
Mycelium => "minecraft:mycelium", Mycelium => "minecraft:mycelium",
NetherPortal => "minecraft:nether_portal", NetherPortal => "minecraft:nether_portal",
@ -6205,6 +6242,7 @@ enum BlockKind {
Nylium => "minecraft:nylium", Nylium => "minecraft:nylium",
Observer => "minecraft:observer", Observer => "minecraft:observer",
Piglinwallskull => "minecraft:piglinwallskull", Piglinwallskull => "minecraft:piglinwallskull",
ParticleLeaves => "minecraft:particle_leaves",
PinkPetals => "minecraft:pink_petals", PinkPetals => "minecraft:pink_petals",
PistonBase => "minecraft:piston_base", PistonBase => "minecraft:piston_base",
PistonHead => "minecraft:piston_head", PistonHead => "minecraft:piston_head",

View file

@ -23,6 +23,7 @@ pub static ALL_HANGING_SIGNS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::CherryHangingSign, Block::CherryHangingSign,
Block::JungleHangingSign, Block::JungleHangingSign,
Block::DarkOakHangingSign, Block::DarkOakHangingSign,
Block::PaleOakHangingSign,
Block::CrimsonHangingSign, Block::CrimsonHangingSign,
Block::WarpedHangingSign, Block::WarpedHangingSign,
Block::MangroveHangingSign, Block::MangroveHangingSign,
@ -34,6 +35,7 @@ pub static ALL_HANGING_SIGNS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::CherryWallHangingSign, Block::CherryWallHangingSign,
Block::JungleWallHangingSign, Block::JungleWallHangingSign,
Block::DarkOakWallHangingSign, Block::DarkOakWallHangingSign,
Block::PaleOakWallHangingSign,
Block::CrimsonWallHangingSign, Block::CrimsonWallHangingSign,
Block::WarpedWallHangingSign, Block::WarpedWallHangingSign,
Block::MangroveWallHangingSign, Block::MangroveWallHangingSign,
@ -48,6 +50,7 @@ pub static ALL_SIGNS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::AcaciaSign, Block::AcaciaSign,
Block::JungleSign, Block::JungleSign,
Block::DarkOakSign, Block::DarkOakSign,
Block::PaleOakSign,
Block::CrimsonSign, Block::CrimsonSign,
Block::WarpedSign, Block::WarpedSign,
Block::MangroveSign, Block::MangroveSign,
@ -59,6 +62,7 @@ pub static ALL_SIGNS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::AcaciaWallSign, Block::AcaciaWallSign,
Block::JungleWallSign, Block::JungleWallSign,
Block::DarkOakWallSign, Block::DarkOakWallSign,
Block::PaleOakWallSign,
Block::CrimsonWallSign, Block::CrimsonWallSign,
Block::WarpedWallSign, Block::WarpedWallSign,
Block::MangroveWallSign, Block::MangroveWallSign,
@ -71,6 +75,7 @@ pub static ALL_SIGNS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::CherryHangingSign, Block::CherryHangingSign,
Block::JungleHangingSign, Block::JungleHangingSign,
Block::DarkOakHangingSign, Block::DarkOakHangingSign,
Block::PaleOakHangingSign,
Block::CrimsonHangingSign, Block::CrimsonHangingSign,
Block::WarpedHangingSign, Block::WarpedHangingSign,
Block::MangroveHangingSign, Block::MangroveHangingSign,
@ -82,6 +87,7 @@ pub static ALL_SIGNS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::CherryWallHangingSign, Block::CherryWallHangingSign,
Block::JungleWallHangingSign, Block::JungleWallHangingSign,
Block::DarkOakWallHangingSign, Block::DarkOakWallHangingSign,
Block::PaleOakWallHangingSign,
Block::CrimsonWallHangingSign, Block::CrimsonWallHangingSign,
Block::WarpedWallHangingSign, Block::WarpedWallHangingSign,
Block::MangroveWallHangingSign, Block::MangroveWallHangingSign,
@ -136,6 +142,7 @@ pub static AZALEA_GROWS_ON: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::Mycelium, Block::Mycelium,
Block::RootedDirt, Block::RootedDirt,
Block::MossBlock, Block::MossBlock,
Block::PaleMossBlock,
Block::Mud, Block::Mud,
Block::MuddyMangroveRoots, Block::MuddyMangroveRoots,
Block::Sand, Block::Sand,
@ -182,6 +189,7 @@ pub static AZALEA_ROOT_REPLACEABLE: LazyLock<HashSet<Block>> = LazyLock::new(||
Block::Mycelium, Block::Mycelium,
Block::RootedDirt, Block::RootedDirt,
Block::MossBlock, Block::MossBlock,
Block::PaleMossBlock,
Block::Mud, Block::Mud,
Block::MuddyMangroveRoots, Block::MuddyMangroveRoots,
Block::Terracotta, Block::Terracotta,
@ -233,6 +241,7 @@ pub static BAMBOO_PLANTABLE_ON: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::Mycelium, Block::Mycelium,
Block::RootedDirt, Block::RootedDirt,
Block::MossBlock, Block::MossBlock,
Block::PaleMossBlock,
Block::Mud, Block::Mud,
Block::MuddyMangroveRoots, Block::MuddyMangroveRoots,
]) ])
@ -324,6 +333,37 @@ pub static BEDS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::YellowBed, Block::YellowBed,
]) ])
}); });
pub static BEE_ATTRACTIVE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
HashSet::from_iter(vec![
Block::Dandelion,
Block::OpenEyeblossom,
Block::Poppy,
Block::BlueOrchid,
Block::Allium,
Block::AzureBluet,
Block::RedTulip,
Block::OrangeTulip,
Block::WhiteTulip,
Block::PinkTulip,
Block::OxeyeDaisy,
Block::Cornflower,
Block::LilyOfTheValley,
Block::WitherRose,
Block::Torchflower,
Block::Sunflower,
Block::Lilac,
Block::Peony,
Block::RoseBush,
Block::PitcherPlant,
Block::FloweringAzaleaLeaves,
Block::FloweringAzalea,
Block::MangrovePropagule,
Block::CherryLeaves,
Block::PinkPetals,
Block::ChorusFlower,
Block::SporeBlossom,
])
});
pub static BEE_GROWABLES: LazyLock<HashSet<Block>> = LazyLock::new(|| { pub static BEE_GROWABLES: LazyLock<HashSet<Block>> = LazyLock::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Block::SweetBerryBush, Block::SweetBerryBush,
@ -353,6 +393,7 @@ pub static BIG_DRIPLEAF_PLACEABLE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::Mycelium, Block::Mycelium,
Block::RootedDirt, Block::RootedDirt,
Block::MossBlock, Block::MossBlock,
Block::PaleMossBlock,
Block::Mud, Block::Mud,
Block::MuddyMangroveRoots, Block::MuddyMangroveRoots,
]) ])
@ -375,6 +416,7 @@ pub static BUTTONS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JungleButton, Block::JungleButton,
Block::AcaciaButton, Block::AcaciaButton,
Block::DarkOakButton, Block::DarkOakButton,
Block::PaleOakButton,
Block::CrimsonButton, Block::CrimsonButton,
Block::WarpedButton, Block::WarpedButton,
Block::MangroveButton, Block::MangroveButton,
@ -471,6 +513,7 @@ pub static CEILING_HANGING_SIGNS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::CherryHangingSign, Block::CherryHangingSign,
Block::JungleHangingSign, Block::JungleHangingSign,
Block::DarkOakHangingSign, Block::DarkOakHangingSign,
Block::PaleOakHangingSign,
Block::CrimsonHangingSign, Block::CrimsonHangingSign,
Block::WarpedHangingSign, Block::WarpedHangingSign,
Block::MangroveHangingSign, Block::MangroveHangingSign,
@ -503,10 +546,12 @@ pub static COAL_ORES: LazyLock<HashSet<Block>> =
pub static COMBINATION_STEP_SOUND_BLOCKS: LazyLock<HashSet<Block>> = LazyLock::new(|| { pub static COMBINATION_STEP_SOUND_BLOCKS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Block::MossCarpet, Block::MossCarpet,
Block::PaleMossCarpet,
Block::Snow, Block::Snow,
Block::NetherSprouts, Block::NetherSprouts,
Block::WarpedRoots, Block::WarpedRoots,
Block::CrimsonRoots, Block::CrimsonRoots,
Block::ResinClump,
Block::WhiteCarpet, Block::WhiteCarpet,
Block::OrangeCarpet, Block::OrangeCarpet,
Block::MagentaCarpet, Block::MagentaCarpet,
@ -530,6 +575,7 @@ pub static COMPLETES_FIND_TREE_TUTORIAL: LazyLock<HashSet<Block>> = LazyLock::ne
Block::JungleLeaves, Block::JungleLeaves,
Block::OakLeaves, Block::OakLeaves,
Block::SpruceLeaves, Block::SpruceLeaves,
Block::PaleOakLeaves,
Block::DarkOakLeaves, Block::DarkOakLeaves,
Block::AcaciaLeaves, Block::AcaciaLeaves,
Block::BirchLeaves, Block::BirchLeaves,
@ -551,6 +597,10 @@ pub static COMPLETES_FIND_TREE_TUTORIAL: LazyLock<HashSet<Block>> = LazyLock::ne
Block::DarkOakWood, Block::DarkOakWood,
Block::StrippedDarkOakLog, Block::StrippedDarkOakLog,
Block::StrippedDarkOakWood, Block::StrippedDarkOakWood,
Block::PaleOakLog,
Block::PaleOakWood,
Block::StrippedPaleOakLog,
Block::StrippedPaleOakWood,
Block::OakLog, Block::OakLog,
Block::OakWood, Block::OakWood,
Block::StrippedOakLog, Block::StrippedOakLog,
@ -733,6 +783,7 @@ pub static DEAD_BUSH_MAY_PLACE_ON: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::Mycelium, Block::Mycelium,
Block::RootedDirt, Block::RootedDirt,
Block::MossBlock, Block::MossBlock,
Block::PaleMossBlock,
Block::Mud, Block::Mud,
Block::MuddyMangroveRoots, Block::MuddyMangroveRoots,
]) ])
@ -750,6 +801,7 @@ pub static DIRT: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::Mycelium, Block::Mycelium,
Block::RootedDirt, Block::RootedDirt,
Block::MossBlock, Block::MossBlock,
Block::PaleMossBlock,
Block::Mud, Block::Mud,
Block::MuddyMangroveRoots, Block::MuddyMangroveRoots,
]) ])
@ -773,6 +825,7 @@ pub static DOORS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JungleDoor, Block::JungleDoor,
Block::AcaciaDoor, Block::AcaciaDoor,
Block::DarkOakDoor, Block::DarkOakDoor,
Block::PaleOakDoor,
Block::CrimsonDoor, Block::CrimsonDoor,
Block::WarpedDoor, Block::WarpedDoor,
Block::MangroveDoor, Block::MangroveDoor,
@ -832,6 +885,7 @@ pub static ENCHANTMENT_POWER_TRANSMITTER: LazyLock<HashSet<Block>> = LazyLock::n
Block::Snow, Block::Snow,
Block::Vine, Block::Vine,
Block::GlowLichen, Block::GlowLichen,
Block::ResinClump,
Block::Light, Block::Light,
Block::TallGrass, Block::TallGrass,
Block::LargeFern, Block::LargeFern,
@ -865,6 +919,7 @@ pub static ENDERMAN_HOLDABLE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::WarpedNylium, Block::WarpedNylium,
Block::WarpedRoots, Block::WarpedRoots,
Block::Dandelion, Block::Dandelion,
Block::OpenEyeblossom,
Block::Poppy, Block::Poppy,
Block::BlueOrchid, Block::BlueOrchid,
Block::Allium, Block::Allium,
@ -878,6 +933,7 @@ pub static ENDERMAN_HOLDABLE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::LilyOfTheValley, Block::LilyOfTheValley,
Block::WitherRose, Block::WitherRose,
Block::Torchflower, Block::Torchflower,
Block::ClosedEyeblossom,
Block::Dirt, Block::Dirt,
Block::GrassBlock, Block::GrassBlock,
Block::Podzol, Block::Podzol,
@ -885,6 +941,7 @@ pub static ENDERMAN_HOLDABLE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::Mycelium, Block::Mycelium,
Block::RootedDirt, Block::RootedDirt,
Block::MossBlock, Block::MossBlock,
Block::PaleMossBlock,
Block::Mud, Block::Mud,
Block::MuddyMangroveRoots, Block::MuddyMangroveRoots,
]) ])
@ -920,6 +977,7 @@ pub static FENCE_GATES: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::AcaciaFenceGate, Block::AcaciaFenceGate,
Block::BirchFenceGate, Block::BirchFenceGate,
Block::DarkOakFenceGate, Block::DarkOakFenceGate,
Block::PaleOakFenceGate,
Block::JungleFenceGate, Block::JungleFenceGate,
Block::OakFenceGate, Block::OakFenceGate,
Block::SpruceFenceGate, Block::SpruceFenceGate,
@ -936,6 +994,7 @@ pub static FENCES: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::OakFence, Block::OakFence,
Block::AcaciaFence, Block::AcaciaFence,
Block::DarkOakFence, Block::DarkOakFence,
Block::PaleOakFence,
Block::SpruceFence, Block::SpruceFence,
Block::BirchFence, Block::BirchFence,
Block::JungleFence, Block::JungleFence,
@ -951,6 +1010,8 @@ pub static FIRE: LazyLock<HashSet<Block>> =
pub static FLOWER_POTS: LazyLock<HashSet<Block>> = LazyLock::new(|| { pub static FLOWER_POTS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Block::FlowerPot, Block::FlowerPot,
Block::PottedOpenEyeblossom,
Block::PottedClosedEyeblossom,
Block::PottedPoppy, Block::PottedPoppy,
Block::PottedBlueOrchid, Block::PottedBlueOrchid,
Block::PottedAllium, Block::PottedAllium,
@ -967,6 +1028,7 @@ pub static FLOWER_POTS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::PottedJungleSapling, Block::PottedJungleSapling,
Block::PottedAcaciaSapling, Block::PottedAcaciaSapling,
Block::PottedDarkOakSapling, Block::PottedDarkOakSapling,
Block::PottedPaleOakSapling,
Block::PottedRedMushroom, Block::PottedRedMushroom,
Block::PottedBrownMushroom, Block::PottedBrownMushroom,
Block::PottedDeadBush, Block::PottedDeadBush,
@ -989,6 +1051,11 @@ pub static FLOWER_POTS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
}); });
pub static FLOWERS: LazyLock<HashSet<Block>> = LazyLock::new(|| { pub static FLOWERS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Block::Sunflower,
Block::Lilac,
Block::Peony,
Block::RoseBush,
Block::PitcherPlant,
Block::FloweringAzaleaLeaves, Block::FloweringAzaleaLeaves,
Block::FloweringAzalea, Block::FloweringAzalea,
Block::MangrovePropagule, Block::MangrovePropagule,
@ -997,6 +1064,7 @@ pub static FLOWERS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::ChorusFlower, Block::ChorusFlower,
Block::SporeBlossom, Block::SporeBlossom,
Block::Dandelion, Block::Dandelion,
Block::OpenEyeblossom,
Block::Poppy, Block::Poppy,
Block::BlueOrchid, Block::BlueOrchid,
Block::Allium, Block::Allium,
@ -1010,11 +1078,7 @@ pub static FLOWERS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::LilyOfTheValley, Block::LilyOfTheValley,
Block::WitherRose, Block::WitherRose,
Block::Torchflower, Block::Torchflower,
Block::Sunflower, Block::ClosedEyeblossom,
Block::Lilac,
Block::Peony,
Block::RoseBush,
Block::PitcherPlant,
]) ])
}); });
pub static FOXES_SPAWNABLE_ON: LazyLock<HashSet<Block>> = LazyLock::new(|| { pub static FOXES_SPAWNABLE_ON: LazyLock<HashSet<Block>> = LazyLock::new(|| {
@ -1229,14 +1293,6 @@ pub static INCORRECT_FOR_GOLD_TOOL: LazyLock<HashSet<Block>> = LazyLock::new(||
Block::WaxedExposedCopperTrapdoor, Block::WaxedExposedCopperTrapdoor,
Block::WaxedWeatheredCopperTrapdoor, Block::WaxedWeatheredCopperTrapdoor,
Block::WaxedOxidizedCopperTrapdoor, Block::WaxedOxidizedCopperTrapdoor,
Block::CopperDoor,
Block::ExposedCopperDoor,
Block::WeatheredCopperDoor,
Block::OxidizedCopperDoor,
Block::WaxedCopperDoor,
Block::WaxedExposedCopperDoor,
Block::WaxedWeatheredCopperDoor,
Block::WaxedOxidizedCopperDoor,
]) ])
}); });
pub static INCORRECT_FOR_IRON_TOOL: LazyLock<HashSet<Block>> = LazyLock::new(|| { pub static INCORRECT_FOR_IRON_TOOL: LazyLock<HashSet<Block>> = LazyLock::new(|| {
@ -1366,14 +1422,6 @@ pub static INCORRECT_FOR_WOODEN_TOOL: LazyLock<HashSet<Block>> = LazyLock::new(|
Block::WaxedExposedCopperTrapdoor, Block::WaxedExposedCopperTrapdoor,
Block::WaxedWeatheredCopperTrapdoor, Block::WaxedWeatheredCopperTrapdoor,
Block::WaxedOxidizedCopperTrapdoor, Block::WaxedOxidizedCopperTrapdoor,
Block::CopperDoor,
Block::ExposedCopperDoor,
Block::WeatheredCopperDoor,
Block::OxidizedCopperDoor,
Block::WaxedCopperDoor,
Block::WaxedExposedCopperDoor,
Block::WaxedWeatheredCopperDoor,
Block::WaxedOxidizedCopperDoor,
]) ])
}); });
pub static INFINIBURN_END: LazyLock<HashSet<Block>> = LazyLock::new(|| { pub static INFINIBURN_END: LazyLock<HashSet<Block>> = LazyLock::new(|| {
@ -1419,6 +1467,7 @@ pub static LAVA_POOL_STONE_CANNOT_REPLACE: LazyLock<HashSet<Block>> = LazyLock::
Block::JungleLeaves, Block::JungleLeaves,
Block::OakLeaves, Block::OakLeaves,
Block::SpruceLeaves, Block::SpruceLeaves,
Block::PaleOakLeaves,
Block::DarkOakLeaves, Block::DarkOakLeaves,
Block::AcaciaLeaves, Block::AcaciaLeaves,
Block::BirchLeaves, Block::BirchLeaves,
@ -1438,6 +1487,10 @@ pub static LAVA_POOL_STONE_CANNOT_REPLACE: LazyLock<HashSet<Block>> = LazyLock::
Block::DarkOakWood, Block::DarkOakWood,
Block::StrippedDarkOakLog, Block::StrippedDarkOakLog,
Block::StrippedDarkOakWood, Block::StrippedDarkOakWood,
Block::PaleOakLog,
Block::PaleOakWood,
Block::StrippedPaleOakLog,
Block::StrippedPaleOakWood,
Block::OakLog, Block::OakLog,
Block::OakWood, Block::OakWood,
Block::StrippedOakLog, Block::StrippedOakLog,
@ -1473,6 +1526,7 @@ pub static LEAVES: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JungleLeaves, Block::JungleLeaves,
Block::OakLeaves, Block::OakLeaves,
Block::SpruceLeaves, Block::SpruceLeaves,
Block::PaleOakLeaves,
Block::DarkOakLeaves, Block::DarkOakLeaves,
Block::AcaciaLeaves, Block::AcaciaLeaves,
Block::BirchLeaves, Block::BirchLeaves,
@ -1496,6 +1550,10 @@ pub static LOGS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::DarkOakWood, Block::DarkOakWood,
Block::StrippedDarkOakLog, Block::StrippedDarkOakLog,
Block::StrippedDarkOakWood, Block::StrippedDarkOakWood,
Block::PaleOakLog,
Block::PaleOakWood,
Block::StrippedPaleOakLog,
Block::StrippedPaleOakWood,
Block::OakLog, Block::OakLog,
Block::OakWood, Block::OakWood,
Block::StrippedOakLog, Block::StrippedOakLog,
@ -1532,6 +1590,10 @@ pub static LOGS_THAT_BURN: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::DarkOakWood, Block::DarkOakWood,
Block::StrippedDarkOakLog, Block::StrippedDarkOakLog,
Block::StrippedDarkOakWood, Block::StrippedDarkOakWood,
Block::PaleOakLog,
Block::PaleOakWood,
Block::StrippedPaleOakLog,
Block::StrippedPaleOakWood,
Block::OakLog, Block::OakLog,
Block::OakWood, Block::OakWood,
Block::StrippedOakLog, Block::StrippedOakLog,
@ -1582,6 +1644,7 @@ pub static LUSH_GROUND_REPLACEABLE: LazyLock<HashSet<Block>> = LazyLock::new(||
Block::Mycelium, Block::Mycelium,
Block::RootedDirt, Block::RootedDirt,
Block::MossBlock, Block::MossBlock,
Block::PaleMossBlock,
Block::Mud, Block::Mud,
Block::MuddyMangroveRoots, Block::MuddyMangroveRoots,
]) ])
@ -1705,6 +1768,7 @@ pub static MINEABLE_AXE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::BambooMosaicSlab, Block::BambooMosaicSlab,
Block::BambooMosaicStairs, Block::BambooMosaicStairs,
Block::ChiseledBookshelf, Block::ChiseledBookshelf,
Block::CreakingHeart,
Block::WhiteBanner, Block::WhiteBanner,
Block::OrangeBanner, Block::OrangeBanner,
Block::MagentaBanner, Block::MagentaBanner,
@ -1740,6 +1804,7 @@ pub static MINEABLE_AXE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::AcaciaFenceGate, Block::AcaciaFenceGate,
Block::BirchFenceGate, Block::BirchFenceGate,
Block::DarkOakFenceGate, Block::DarkOakFenceGate,
Block::PaleOakFenceGate,
Block::JungleFenceGate, Block::JungleFenceGate,
Block::OakFenceGate, Block::OakFenceGate,
Block::SpruceFenceGate, Block::SpruceFenceGate,
@ -1754,6 +1819,7 @@ pub static MINEABLE_AXE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JunglePlanks, Block::JunglePlanks,
Block::AcaciaPlanks, Block::AcaciaPlanks,
Block::DarkOakPlanks, Block::DarkOakPlanks,
Block::PaleOakPlanks,
Block::CrimsonPlanks, Block::CrimsonPlanks,
Block::WarpedPlanks, Block::WarpedPlanks,
Block::MangrovePlanks, Block::MangrovePlanks,
@ -1765,6 +1831,7 @@ pub static MINEABLE_AXE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JungleSapling, Block::JungleSapling,
Block::AcaciaSapling, Block::AcaciaSapling,
Block::DarkOakSapling, Block::DarkOakSapling,
Block::PaleOakSapling,
Block::Azalea, Block::Azalea,
Block::FloweringAzalea, Block::FloweringAzalea,
Block::MangrovePropagule, Block::MangrovePropagule,
@ -1775,6 +1842,7 @@ pub static MINEABLE_AXE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JungleButton, Block::JungleButton,
Block::AcaciaButton, Block::AcaciaButton,
Block::DarkOakButton, Block::DarkOakButton,
Block::PaleOakButton,
Block::CrimsonButton, Block::CrimsonButton,
Block::WarpedButton, Block::WarpedButton,
Block::MangroveButton, Block::MangroveButton,
@ -1786,6 +1854,7 @@ pub static MINEABLE_AXE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JungleDoor, Block::JungleDoor,
Block::AcaciaDoor, Block::AcaciaDoor,
Block::DarkOakDoor, Block::DarkOakDoor,
Block::PaleOakDoor,
Block::CrimsonDoor, Block::CrimsonDoor,
Block::WarpedDoor, Block::WarpedDoor,
Block::MangroveDoor, Block::MangroveDoor,
@ -1794,6 +1863,7 @@ pub static MINEABLE_AXE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::OakFence, Block::OakFence,
Block::AcaciaFence, Block::AcaciaFence,
Block::DarkOakFence, Block::DarkOakFence,
Block::PaleOakFence,
Block::SpruceFence, Block::SpruceFence,
Block::BirchFence, Block::BirchFence,
Block::JungleFence, Block::JungleFence,
@ -1808,6 +1878,7 @@ pub static MINEABLE_AXE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JunglePressurePlate, Block::JunglePressurePlate,
Block::AcaciaPressurePlate, Block::AcaciaPressurePlate,
Block::DarkOakPressurePlate, Block::DarkOakPressurePlate,
Block::PaleOakPressurePlate,
Block::CrimsonPressurePlate, Block::CrimsonPressurePlate,
Block::WarpedPressurePlate, Block::WarpedPressurePlate,
Block::MangrovePressurePlate, Block::MangrovePressurePlate,
@ -1819,6 +1890,7 @@ pub static MINEABLE_AXE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JungleSlab, Block::JungleSlab,
Block::AcaciaSlab, Block::AcaciaSlab,
Block::DarkOakSlab, Block::DarkOakSlab,
Block::PaleOakSlab,
Block::CrimsonSlab, Block::CrimsonSlab,
Block::WarpedSlab, Block::WarpedSlab,
Block::MangroveSlab, Block::MangroveSlab,
@ -1830,6 +1902,7 @@ pub static MINEABLE_AXE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JungleStairs, Block::JungleStairs,
Block::AcaciaStairs, Block::AcaciaStairs,
Block::DarkOakStairs, Block::DarkOakStairs,
Block::PaleOakStairs,
Block::CrimsonStairs, Block::CrimsonStairs,
Block::WarpedStairs, Block::WarpedStairs,
Block::MangroveStairs, Block::MangroveStairs,
@ -1838,6 +1911,7 @@ pub static MINEABLE_AXE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::AcaciaTrapdoor, Block::AcaciaTrapdoor,
Block::BirchTrapdoor, Block::BirchTrapdoor,
Block::DarkOakTrapdoor, Block::DarkOakTrapdoor,
Block::PaleOakTrapdoor,
Block::JungleTrapdoor, Block::JungleTrapdoor,
Block::OakTrapdoor, Block::OakTrapdoor,
Block::SpruceTrapdoor, Block::SpruceTrapdoor,
@ -1862,6 +1936,7 @@ pub static MINEABLE_AXE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::AcaciaSign, Block::AcaciaSign,
Block::JungleSign, Block::JungleSign,
Block::DarkOakSign, Block::DarkOakSign,
Block::PaleOakSign,
Block::CrimsonSign, Block::CrimsonSign,
Block::WarpedSign, Block::WarpedSign,
Block::MangroveSign, Block::MangroveSign,
@ -1873,6 +1948,7 @@ pub static MINEABLE_AXE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::AcaciaWallSign, Block::AcaciaWallSign,
Block::JungleWallSign, Block::JungleWallSign,
Block::DarkOakWallSign, Block::DarkOakWallSign,
Block::PaleOakWallSign,
Block::CrimsonWallSign, Block::CrimsonWallSign,
Block::WarpedWallSign, Block::WarpedWallSign,
Block::MangroveWallSign, Block::MangroveWallSign,
@ -1885,6 +1961,7 @@ pub static MINEABLE_AXE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::CherryHangingSign, Block::CherryHangingSign,
Block::JungleHangingSign, Block::JungleHangingSign,
Block::DarkOakHangingSign, Block::DarkOakHangingSign,
Block::PaleOakHangingSign,
Block::CrimsonHangingSign, Block::CrimsonHangingSign,
Block::WarpedHangingSign, Block::WarpedHangingSign,
Block::MangroveHangingSign, Block::MangroveHangingSign,
@ -1896,6 +1973,7 @@ pub static MINEABLE_AXE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::CherryWallHangingSign, Block::CherryWallHangingSign,
Block::JungleWallHangingSign, Block::JungleWallHangingSign,
Block::DarkOakWallHangingSign, Block::DarkOakWallHangingSign,
Block::PaleOakWallHangingSign,
Block::CrimsonWallHangingSign, Block::CrimsonWallHangingSign,
Block::WarpedWallHangingSign, Block::WarpedWallHangingSign,
Block::MangroveWallHangingSign, Block::MangroveWallHangingSign,
@ -1904,6 +1982,10 @@ pub static MINEABLE_AXE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::DarkOakWood, Block::DarkOakWood,
Block::StrippedDarkOakLog, Block::StrippedDarkOakLog,
Block::StrippedDarkOakWood, Block::StrippedDarkOakWood,
Block::PaleOakLog,
Block::PaleOakWood,
Block::StrippedPaleOakLog,
Block::StrippedPaleOakWood,
Block::OakLog, Block::OakLog,
Block::OakWood, Block::OakWood,
Block::StrippedOakLog, Block::StrippedOakLog,
@ -1947,6 +2029,7 @@ pub static MINEABLE_HOE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JungleLeaves, Block::JungleLeaves,
Block::OakLeaves, Block::OakLeaves,
Block::SpruceLeaves, Block::SpruceLeaves,
Block::PaleOakLeaves,
Block::DarkOakLeaves, Block::DarkOakLeaves,
Block::AcaciaLeaves, Block::AcaciaLeaves,
Block::BirchLeaves, Block::BirchLeaves,
@ -1957,6 +2040,8 @@ pub static MINEABLE_HOE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::CalibratedSculkSensor, Block::CalibratedSculkSensor,
Block::MossBlock, Block::MossBlock,
Block::MossCarpet, Block::MossCarpet,
Block::PaleMossBlock,
Block::PaleMossCarpet,
Block::Sculk, Block::Sculk,
Block::SculkCatalyst, Block::SculkCatalyst,
Block::SculkVein, Block::SculkVein,
@ -2345,6 +2430,11 @@ pub static MINEABLE_PICKAXE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::WaxedWeatheredCopperTrapdoor, Block::WaxedWeatheredCopperTrapdoor,
Block::WaxedOxidizedCopperTrapdoor, Block::WaxedOxidizedCopperTrapdoor,
Block::HeavyCore, Block::HeavyCore,
Block::ResinBricks,
Block::ResinBrickSlab,
Block::ResinBrickWall,
Block::ResinBrickStairs,
Block::ChiseledResinBricks,
Block::StoneButton, Block::StoneButton,
Block::PolishedBlackstoneButton, Block::PolishedBlackstoneButton,
Block::CobblestoneWall, Block::CobblestoneWall,
@ -2372,6 +2462,7 @@ pub static MINEABLE_PICKAXE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::TuffWall, Block::TuffWall,
Block::PolishedTuffWall, Block::PolishedTuffWall,
Block::TuffBrickWall, Block::TuffBrickWall,
Block::ResinBrickWall,
Block::ShulkerBox, Block::ShulkerBox,
Block::BlackShulkerBox, Block::BlackShulkerBox,
Block::BlueShulkerBox, Block::BlueShulkerBox,
@ -2458,6 +2549,7 @@ pub static MOB_INTERACTABLE_DOORS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JungleDoor, Block::JungleDoor,
Block::AcaciaDoor, Block::AcaciaDoor,
Block::DarkOakDoor, Block::DarkOakDoor,
Block::PaleOakDoor,
Block::CrimsonDoor, Block::CrimsonDoor,
Block::WarpedDoor, Block::WarpedDoor,
Block::MangroveDoor, Block::MangroveDoor,
@ -2484,6 +2576,7 @@ pub static MOSS_REPLACEABLE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::Mycelium, Block::Mycelium,
Block::RootedDirt, Block::RootedDirt,
Block::MossBlock, Block::MossBlock,
Block::PaleMossBlock,
Block::Mud, Block::Mud,
Block::MuddyMangroveRoots, Block::MuddyMangroveRoots,
]) ])
@ -2599,14 +2692,6 @@ pub static NEEDS_STONE_TOOL: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::WaxedExposedCopperTrapdoor, Block::WaxedExposedCopperTrapdoor,
Block::WaxedWeatheredCopperTrapdoor, Block::WaxedWeatheredCopperTrapdoor,
Block::WaxedOxidizedCopperTrapdoor, Block::WaxedOxidizedCopperTrapdoor,
Block::CopperDoor,
Block::ExposedCopperDoor,
Block::WeatheredCopperDoor,
Block::OxidizedCopperDoor,
Block::WaxedCopperDoor,
Block::WaxedExposedCopperDoor,
Block::WaxedWeatheredCopperDoor,
Block::WaxedOxidizedCopperDoor,
]) ])
}); });
pub static NETHER_CARVER_REPLACEABLES: LazyLock<HashSet<Block>> = LazyLock::new(|| { pub static NETHER_CARVER_REPLACEABLES: LazyLock<HashSet<Block>> = LazyLock::new(|| {
@ -2629,6 +2714,7 @@ pub static NETHER_CARVER_REPLACEABLES: LazyLock<HashSet<Block>> = LazyLock::new(
Block::Mycelium, Block::Mycelium,
Block::RootedDirt, Block::RootedDirt,
Block::MossBlock, Block::MossBlock,
Block::PaleMossBlock,
Block::Mud, Block::Mud,
Block::MuddyMangroveRoots, Block::MuddyMangroveRoots,
Block::CrimsonNylium, Block::CrimsonNylium,
@ -2675,7 +2761,6 @@ pub static OVERWORLD_CARVER_REPLACEABLES: LazyLock<HashSet<Block>> = LazyLock::n
Block::Sandstone, Block::Sandstone,
Block::RedSandstone, Block::RedSandstone,
Block::Calcite, Block::Calcite,
Block::Snow,
Block::PackedIce, Block::PackedIce,
Block::RawIronBlock, Block::RawIronBlock,
Block::RawCopperBlock, Block::RawCopperBlock,
@ -2692,6 +2777,7 @@ pub static OVERWORLD_CARVER_REPLACEABLES: LazyLock<HashSet<Block>> = LazyLock::n
Block::Mycelium, Block::Mycelium,
Block::RootedDirt, Block::RootedDirt,
Block::MossBlock, Block::MossBlock,
Block::PaleMossBlock,
Block::Mud, Block::Mud,
Block::MuddyMangroveRoots, Block::MuddyMangroveRoots,
Block::Sand, Block::Sand,
@ -2719,6 +2805,9 @@ pub static OVERWORLD_CARVER_REPLACEABLES: LazyLock<HashSet<Block>> = LazyLock::n
Block::DeepslateIronOre, Block::DeepslateIronOre,
Block::CopperOre, Block::CopperOre,
Block::DeepslateCopperOre, Block::DeepslateCopperOre,
Block::Snow,
Block::SnowBlock,
Block::PowderSnow,
]) ])
}); });
pub static OVERWORLD_NATURAL_LOGS: LazyLock<HashSet<Block>> = LazyLock::new(|| { pub static OVERWORLD_NATURAL_LOGS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
@ -2729,10 +2818,19 @@ pub static OVERWORLD_NATURAL_LOGS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JungleLog, Block::JungleLog,
Block::SpruceLog, Block::SpruceLog,
Block::DarkOakLog, Block::DarkOakLog,
Block::PaleOakLog,
Block::MangroveLog, Block::MangroveLog,
Block::CherryLog, Block::CherryLog,
]) ])
}); });
pub static PALE_OAK_LOGS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
HashSet::from_iter(vec![
Block::PaleOakLog,
Block::PaleOakWood,
Block::StrippedPaleOakLog,
Block::StrippedPaleOakWood,
])
});
pub static PARROTS_SPAWNABLE_ON: LazyLock<HashSet<Block>> = LazyLock::new(|| { pub static PARROTS_SPAWNABLE_ON: LazyLock<HashSet<Block>> = LazyLock::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Block::GrassBlock, Block::GrassBlock,
@ -2740,6 +2838,7 @@ pub static PARROTS_SPAWNABLE_ON: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JungleLeaves, Block::JungleLeaves,
Block::OakLeaves, Block::OakLeaves,
Block::SpruceLeaves, Block::SpruceLeaves,
Block::PaleOakLeaves,
Block::DarkOakLeaves, Block::DarkOakLeaves,
Block::AcaciaLeaves, Block::AcaciaLeaves,
Block::BirchLeaves, Block::BirchLeaves,
@ -2759,6 +2858,10 @@ pub static PARROTS_SPAWNABLE_ON: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::DarkOakWood, Block::DarkOakWood,
Block::StrippedDarkOakLog, Block::StrippedDarkOakLog,
Block::StrippedDarkOakWood, Block::StrippedDarkOakWood,
Block::PaleOakLog,
Block::PaleOakWood,
Block::StrippedPaleOakLog,
Block::StrippedPaleOakWood,
Block::OakLog, Block::OakLog,
Block::OakWood, Block::OakWood,
Block::StrippedOakLog, Block::StrippedOakLog,
@ -2806,6 +2909,7 @@ pub static PLANKS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JunglePlanks, Block::JunglePlanks,
Block::AcaciaPlanks, Block::AcaciaPlanks,
Block::DarkOakPlanks, Block::DarkOakPlanks,
Block::PaleOakPlanks,
Block::CrimsonPlanks, Block::CrimsonPlanks,
Block::WarpedPlanks, Block::WarpedPlanks,
Block::MangrovePlanks, Block::MangrovePlanks,
@ -2832,6 +2936,7 @@ pub static PRESSURE_PLATES: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JunglePressurePlate, Block::JunglePressurePlate,
Block::AcaciaPressurePlate, Block::AcaciaPressurePlate,
Block::DarkOakPressurePlate, Block::DarkOakPressurePlate,
Block::PaleOakPressurePlate,
Block::CrimsonPressurePlate, Block::CrimsonPressurePlate,
Block::WarpedPressurePlate, Block::WarpedPressurePlate,
Block::MangrovePressurePlate, Block::MangrovePressurePlate,
@ -2882,6 +2987,7 @@ pub static REPLACEABLE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::Snow, Block::Snow,
Block::Vine, Block::Vine,
Block::GlowLichen, Block::GlowLichen,
Block::ResinClump,
Block::Light, Block::Light,
Block::TallGrass, Block::TallGrass,
Block::LargeFern, Block::LargeFern,
@ -2897,6 +3003,7 @@ pub static REPLACEABLE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
}); });
pub static REPLACEABLE_BY_TREES: LazyLock<HashSet<Block>> = LazyLock::new(|| { pub static REPLACEABLE_BY_TREES: LazyLock<HashSet<Block>> = LazyLock::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Block::PaleMossCarpet,
Block::ShortGrass, Block::ShortGrass,
Block::Fern, Block::Fern,
Block::DeadBush, Block::DeadBush,
@ -2919,6 +3026,7 @@ pub static REPLACEABLE_BY_TREES: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JungleLeaves, Block::JungleLeaves,
Block::OakLeaves, Block::OakLeaves,
Block::SpruceLeaves, Block::SpruceLeaves,
Block::PaleOakLeaves,
Block::DarkOakLeaves, Block::DarkOakLeaves,
Block::AcaciaLeaves, Block::AcaciaLeaves,
Block::BirchLeaves, Block::BirchLeaves,
@ -2926,6 +3034,22 @@ pub static REPLACEABLE_BY_TREES: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::FloweringAzaleaLeaves, Block::FloweringAzaleaLeaves,
Block::MangroveLeaves, Block::MangroveLeaves,
Block::CherryLeaves, Block::CherryLeaves,
Block::Dandelion,
Block::OpenEyeblossom,
Block::Poppy,
Block::BlueOrchid,
Block::Allium,
Block::AzureBluet,
Block::RedTulip,
Block::OrangeTulip,
Block::WhiteTulip,
Block::PinkTulip,
Block::OxeyeDaisy,
Block::Cornflower,
Block::LilyOfTheValley,
Block::WitherRose,
Block::Torchflower,
Block::ClosedEyeblossom,
]) ])
}); });
pub static SAND: LazyLock<HashSet<Block>> = LazyLock::new(|| { pub static SAND: LazyLock<HashSet<Block>> = LazyLock::new(|| {
@ -2944,6 +3068,7 @@ pub static SAPLINGS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JungleSapling, Block::JungleSapling,
Block::AcaciaSapling, Block::AcaciaSapling,
Block::DarkOakSapling, Block::DarkOakSapling,
Block::PaleOakSapling,
Block::Azalea, Block::Azalea,
Block::FloweringAzalea, Block::FloweringAzalea,
Block::MangrovePropagule, Block::MangrovePropagule,
@ -2977,6 +3102,7 @@ pub static SCULK_REPLACEABLE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::Mycelium, Block::Mycelium,
Block::RootedDirt, Block::RootedDirt,
Block::MossBlock, Block::MossBlock,
Block::PaleMossBlock,
Block::Mud, Block::Mud,
Block::MuddyMangroveRoots, Block::MuddyMangroveRoots,
Block::Terracotta, Block::Terracotta,
@ -3036,6 +3162,7 @@ pub static SCULK_REPLACEABLE_WORLD_GEN: LazyLock<HashSet<Block>> = LazyLock::new
Block::Mycelium, Block::Mycelium,
Block::RootedDirt, Block::RootedDirt,
Block::MossBlock, Block::MossBlock,
Block::PaleMossBlock,
Block::Mud, Block::Mud,
Block::MuddyMangroveRoots, Block::MuddyMangroveRoots,
Block::Terracotta, Block::Terracotta,
@ -3091,6 +3218,7 @@ pub static SIGNS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::AcaciaSign, Block::AcaciaSign,
Block::JungleSign, Block::JungleSign,
Block::DarkOakSign, Block::DarkOakSign,
Block::PaleOakSign,
Block::CrimsonSign, Block::CrimsonSign,
Block::WarpedSign, Block::WarpedSign,
Block::MangroveSign, Block::MangroveSign,
@ -3102,6 +3230,7 @@ pub static SIGNS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::AcaciaWallSign, Block::AcaciaWallSign,
Block::JungleWallSign, Block::JungleWallSign,
Block::DarkOakWallSign, Block::DarkOakWallSign,
Block::PaleOakWallSign,
Block::CrimsonWallSign, Block::CrimsonWallSign,
Block::WarpedWallSign, Block::WarpedWallSign,
Block::MangroveWallSign, Block::MangroveWallSign,
@ -3160,12 +3289,14 @@ pub static SLABS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::TuffSlab, Block::TuffSlab,
Block::PolishedTuffSlab, Block::PolishedTuffSlab,
Block::TuffBrickSlab, Block::TuffBrickSlab,
Block::ResinBrickSlab,
Block::OakSlab, Block::OakSlab,
Block::SpruceSlab, Block::SpruceSlab,
Block::BirchSlab, Block::BirchSlab,
Block::JungleSlab, Block::JungleSlab,
Block::AcaciaSlab, Block::AcaciaSlab,
Block::DarkOakSlab, Block::DarkOakSlab,
Block::PaleOakSlab,
Block::CrimsonSlab, Block::CrimsonSlab,
Block::WarpedSlab, Block::WarpedSlab,
Block::MangroveSlab, Block::MangroveSlab,
@ -3178,6 +3309,7 @@ pub static SMALL_DRIPLEAF_PLACEABLE: LazyLock<HashSet<Block>> =
pub static SMALL_FLOWERS: LazyLock<HashSet<Block>> = LazyLock::new(|| { pub static SMALL_FLOWERS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Block::Dandelion, Block::Dandelion,
Block::OpenEyeblossom,
Block::Poppy, Block::Poppy,
Block::BlueOrchid, Block::BlueOrchid,
Block::Allium, Block::Allium,
@ -3191,6 +3323,7 @@ pub static SMALL_FLOWERS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::LilyOfTheValley, Block::LilyOfTheValley,
Block::WitherRose, Block::WitherRose,
Block::Torchflower, Block::Torchflower,
Block::ClosedEyeblossom,
]) ])
}); });
pub static SMELTS_TO_GLASS: LazyLock<HashSet<Block>> = pub static SMELTS_TO_GLASS: LazyLock<HashSet<Block>> =
@ -3209,6 +3342,7 @@ pub static SNAPS_GOAT_HORN: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JungleLog, Block::JungleLog,
Block::SpruceLog, Block::SpruceLog,
Block::DarkOakLog, Block::DarkOakLog,
Block::PaleOakLog,
Block::MangroveLog, Block::MangroveLog,
Block::CherryLog, Block::CherryLog,
]) ])
@ -3221,6 +3355,7 @@ pub static SNIFFER_DIGGABLE_BLOCK: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::CoarseDirt, Block::CoarseDirt,
Block::RootedDirt, Block::RootedDirt,
Block::MossBlock, Block::MossBlock,
Block::PaleMossBlock,
Block::Mud, Block::Mud,
Block::MuddyMangroveRoots, Block::MuddyMangroveRoots,
]) ])
@ -3292,12 +3427,14 @@ pub static STAIRS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::TuffStairs, Block::TuffStairs,
Block::PolishedTuffStairs, Block::PolishedTuffStairs,
Block::TuffBrickStairs, Block::TuffBrickStairs,
Block::ResinBrickStairs,
Block::OakStairs, Block::OakStairs,
Block::SpruceStairs, Block::SpruceStairs,
Block::BirchStairs, Block::BirchStairs,
Block::JungleStairs, Block::JungleStairs,
Block::AcaciaStairs, Block::AcaciaStairs,
Block::DarkOakStairs, Block::DarkOakStairs,
Block::PaleOakStairs,
Block::CrimsonStairs, Block::CrimsonStairs,
Block::WarpedStairs, Block::WarpedStairs,
Block::MangroveStairs, Block::MangroveStairs,
@ -3313,6 +3450,7 @@ pub static STANDING_SIGNS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::AcaciaSign, Block::AcaciaSign,
Block::JungleSign, Block::JungleSign,
Block::DarkOakSign, Block::DarkOakSign,
Block::PaleOakSign,
Block::CrimsonSign, Block::CrimsonSign,
Block::WarpedSign, Block::WarpedSign,
Block::MangroveSign, Block::MangroveSign,
@ -3377,7 +3515,6 @@ pub static SWORD_EFFICIENT: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::CaveVines, Block::CaveVines,
Block::CaveVinesPlant, Block::CaveVinesPlant,
Block::SporeBlossom, Block::SporeBlossom,
Block::MossCarpet,
Block::PinkPetals, Block::PinkPetals,
Block::BigDripleaf, Block::BigDripleaf,
Block::BigDripleafStem, Block::BigDripleafStem,
@ -3397,6 +3534,7 @@ pub static SWORD_EFFICIENT: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JungleLeaves, Block::JungleLeaves,
Block::OakLeaves, Block::OakLeaves,
Block::SpruceLeaves, Block::SpruceLeaves,
Block::PaleOakLeaves,
Block::DarkOakLeaves, Block::DarkOakLeaves,
Block::AcaciaLeaves, Block::AcaciaLeaves,
Block::BirchLeaves, Block::BirchLeaves,
@ -3410,24 +3548,11 @@ pub static SWORD_EFFICIENT: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JungleSapling, Block::JungleSapling,
Block::AcaciaSapling, Block::AcaciaSapling,
Block::DarkOakSapling, Block::DarkOakSapling,
Block::PaleOakSapling,
Block::Azalea, Block::Azalea,
Block::FloweringAzalea, Block::FloweringAzalea,
Block::MangrovePropagule, Block::MangrovePropagule,
Block::CherrySapling, Block::CherrySapling,
Block::Dandelion,
Block::Poppy,
Block::BlueOrchid,
Block::Allium,
Block::AzureBluet,
Block::RedTulip,
Block::OrangeTulip,
Block::WhiteTulip,
Block::PinkTulip,
Block::OxeyeDaisy,
Block::Cornflower,
Block::LilyOfTheValley,
Block::WitherRose,
Block::Torchflower,
Block::Beetroots, Block::Beetroots,
Block::Carrots, Block::Carrots,
Block::Potatoes, Block::Potatoes,
@ -3438,15 +3563,6 @@ pub static SWORD_EFFICIENT: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::PitcherCrop, Block::PitcherCrop,
]) ])
}); });
pub static TALL_FLOWERS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
HashSet::from_iter(vec![
Block::Sunflower,
Block::Lilac,
Block::Peony,
Block::RoseBush,
Block::PitcherPlant,
])
});
pub static TERRACOTTA: LazyLock<HashSet<Block>> = LazyLock::new(|| { pub static TERRACOTTA: LazyLock<HashSet<Block>> = LazyLock::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Block::Terracotta, Block::Terracotta,
@ -3484,6 +3600,7 @@ pub static TRAPDOORS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::AcaciaTrapdoor, Block::AcaciaTrapdoor,
Block::BirchTrapdoor, Block::BirchTrapdoor,
Block::DarkOakTrapdoor, Block::DarkOakTrapdoor,
Block::PaleOakTrapdoor,
Block::JungleTrapdoor, Block::JungleTrapdoor,
Block::OakTrapdoor, Block::OakTrapdoor,
Block::SpruceTrapdoor, Block::SpruceTrapdoor,
@ -3519,6 +3636,7 @@ pub static UNSTABLE_BOTTOM_CENTER: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::AcaciaFenceGate, Block::AcaciaFenceGate,
Block::BirchFenceGate, Block::BirchFenceGate,
Block::DarkOakFenceGate, Block::DarkOakFenceGate,
Block::PaleOakFenceGate,
Block::JungleFenceGate, Block::JungleFenceGate,
Block::OakFenceGate, Block::OakFenceGate,
Block::SpruceFenceGate, Block::SpruceFenceGate,
@ -3551,6 +3669,7 @@ pub static WALL_HANGING_SIGNS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::CherryWallHangingSign, Block::CherryWallHangingSign,
Block::JungleWallHangingSign, Block::JungleWallHangingSign,
Block::DarkOakWallHangingSign, Block::DarkOakWallHangingSign,
Block::PaleOakWallHangingSign,
Block::CrimsonWallHangingSign, Block::CrimsonWallHangingSign,
Block::WarpedWallHangingSign, Block::WarpedWallHangingSign,
Block::MangroveWallHangingSign, Block::MangroveWallHangingSign,
@ -3603,6 +3722,7 @@ pub static WALL_POST_OVERRIDE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::AcaciaSign, Block::AcaciaSign,
Block::JungleSign, Block::JungleSign,
Block::DarkOakSign, Block::DarkOakSign,
Block::PaleOakSign,
Block::CrimsonSign, Block::CrimsonSign,
Block::WarpedSign, Block::WarpedSign,
Block::MangroveSign, Block::MangroveSign,
@ -3614,6 +3734,7 @@ pub static WALL_POST_OVERRIDE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::AcaciaWallSign, Block::AcaciaWallSign,
Block::JungleWallSign, Block::JungleWallSign,
Block::DarkOakWallSign, Block::DarkOakWallSign,
Block::PaleOakWallSign,
Block::CrimsonWallSign, Block::CrimsonWallSign,
Block::WarpedWallSign, Block::WarpedWallSign,
Block::MangroveWallSign, Block::MangroveWallSign,
@ -3625,6 +3746,7 @@ pub static WALL_POST_OVERRIDE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JunglePressurePlate, Block::JunglePressurePlate,
Block::AcaciaPressurePlate, Block::AcaciaPressurePlate,
Block::DarkOakPressurePlate, Block::DarkOakPressurePlate,
Block::PaleOakPressurePlate,
Block::CrimsonPressurePlate, Block::CrimsonPressurePlate,
Block::WarpedPressurePlate, Block::WarpedPressurePlate,
Block::MangrovePressurePlate, Block::MangrovePressurePlate,
@ -3642,6 +3764,7 @@ pub static WALL_SIGNS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::AcaciaWallSign, Block::AcaciaWallSign,
Block::JungleWallSign, Block::JungleWallSign,
Block::DarkOakWallSign, Block::DarkOakWallSign,
Block::PaleOakWallSign,
Block::CrimsonWallSign, Block::CrimsonWallSign,
Block::WarpedWallSign, Block::WarpedWallSign,
Block::MangroveWallSign, Block::MangroveWallSign,
@ -3676,6 +3799,7 @@ pub static WALLS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::TuffWall, Block::TuffWall,
Block::PolishedTuffWall, Block::PolishedTuffWall,
Block::TuffBrickWall, Block::TuffBrickWall,
Block::ResinBrickWall,
]) ])
}); });
pub static WARPED_STEMS: LazyLock<HashSet<Block>> = LazyLock::new(|| { pub static WARPED_STEMS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
@ -3724,6 +3848,7 @@ pub static WOODEN_BUTTONS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JungleButton, Block::JungleButton,
Block::AcaciaButton, Block::AcaciaButton,
Block::DarkOakButton, Block::DarkOakButton,
Block::PaleOakButton,
Block::CrimsonButton, Block::CrimsonButton,
Block::WarpedButton, Block::WarpedButton,
Block::MangroveButton, Block::MangroveButton,
@ -3739,6 +3864,7 @@ pub static WOODEN_DOORS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JungleDoor, Block::JungleDoor,
Block::AcaciaDoor, Block::AcaciaDoor,
Block::DarkOakDoor, Block::DarkOakDoor,
Block::PaleOakDoor,
Block::CrimsonDoor, Block::CrimsonDoor,
Block::WarpedDoor, Block::WarpedDoor,
Block::MangroveDoor, Block::MangroveDoor,
@ -3751,6 +3877,7 @@ pub static WOODEN_FENCES: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::OakFence, Block::OakFence,
Block::AcaciaFence, Block::AcaciaFence,
Block::DarkOakFence, Block::DarkOakFence,
Block::PaleOakFence,
Block::SpruceFence, Block::SpruceFence,
Block::BirchFence, Block::BirchFence,
Block::JungleFence, Block::JungleFence,
@ -3769,6 +3896,7 @@ pub static WOODEN_PRESSURE_PLATES: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JunglePressurePlate, Block::JunglePressurePlate,
Block::AcaciaPressurePlate, Block::AcaciaPressurePlate,
Block::DarkOakPressurePlate, Block::DarkOakPressurePlate,
Block::PaleOakPressurePlate,
Block::CrimsonPressurePlate, Block::CrimsonPressurePlate,
Block::WarpedPressurePlate, Block::WarpedPressurePlate,
Block::MangrovePressurePlate, Block::MangrovePressurePlate,
@ -3784,6 +3912,7 @@ pub static WOODEN_SLABS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JungleSlab, Block::JungleSlab,
Block::AcaciaSlab, Block::AcaciaSlab,
Block::DarkOakSlab, Block::DarkOakSlab,
Block::PaleOakSlab,
Block::CrimsonSlab, Block::CrimsonSlab,
Block::WarpedSlab, Block::WarpedSlab,
Block::MangroveSlab, Block::MangroveSlab,
@ -3799,6 +3928,7 @@ pub static WOODEN_STAIRS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::JungleStairs, Block::JungleStairs,
Block::AcaciaStairs, Block::AcaciaStairs,
Block::DarkOakStairs, Block::DarkOakStairs,
Block::PaleOakStairs,
Block::CrimsonStairs, Block::CrimsonStairs,
Block::WarpedStairs, Block::WarpedStairs,
Block::MangroveStairs, Block::MangroveStairs,
@ -3811,6 +3941,7 @@ pub static WOODEN_TRAPDOORS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::AcaciaTrapdoor, Block::AcaciaTrapdoor,
Block::BirchTrapdoor, Block::BirchTrapdoor,
Block::DarkOakTrapdoor, Block::DarkOakTrapdoor,
Block::PaleOakTrapdoor,
Block::JungleTrapdoor, Block::JungleTrapdoor,
Block::OakTrapdoor, Block::OakTrapdoor,
Block::SpruceTrapdoor, Block::SpruceTrapdoor,

View file

@ -83,14 +83,8 @@ pub static BEDS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
}); });
pub static BEE_FOOD: LazyLock<HashSet<Item>> = LazyLock::new(|| { pub static BEE_FOOD: LazyLock<HashSet<Item>> = LazyLock::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Item::FloweringAzaleaLeaves,
Item::FloweringAzalea,
Item::MangrovePropagule,
Item::CherryLeaves,
Item::PinkPetals,
Item::ChorusFlower,
Item::SporeBlossom,
Item::Dandelion, Item::Dandelion,
Item::OpenEyeblossom,
Item::Poppy, Item::Poppy,
Item::BlueOrchid, Item::BlueOrchid,
Item::Allium, Item::Allium,
@ -109,6 +103,13 @@ pub static BEE_FOOD: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::Peony, Item::Peony,
Item::RoseBush, Item::RoseBush,
Item::PitcherPlant, Item::PitcherPlant,
Item::FloweringAzaleaLeaves,
Item::FloweringAzalea,
Item::MangrovePropagule,
Item::CherryLeaves,
Item::PinkPetals,
Item::ChorusFlower,
Item::SporeBlossom,
]) ])
}); });
pub static BIRCH_LOGS: LazyLock<HashSet<Item>> = LazyLock::new(|| { pub static BIRCH_LOGS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
@ -127,6 +128,7 @@ pub static BOATS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::JungleBoat, Item::JungleBoat,
Item::AcaciaBoat, Item::AcaciaBoat,
Item::DarkOakBoat, Item::DarkOakBoat,
Item::PaleOakBoat,
Item::MangroveBoat, Item::MangroveBoat,
Item::BambooRaft, Item::BambooRaft,
Item::CherryBoat, Item::CherryBoat,
@ -136,6 +138,7 @@ pub static BOATS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::JungleChestBoat, Item::JungleChestBoat,
Item::AcaciaChestBoat, Item::AcaciaChestBoat,
Item::DarkOakChestBoat, Item::DarkOakChestBoat,
Item::PaleOakChestBoat,
Item::MangroveChestBoat, Item::MangroveChestBoat,
Item::BambooChestRaft, Item::BambooChestRaft,
Item::CherryChestBoat, Item::CherryChestBoat,
@ -217,6 +220,7 @@ pub static BUTTONS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::JungleButton, Item::JungleButton,
Item::AcaciaButton, Item::AcaciaButton,
Item::DarkOakButton, Item::DarkOakButton,
Item::PaleOakButton,
Item::CrimsonButton, Item::CrimsonButton,
Item::WarpedButton, Item::WarpedButton,
Item::MangroveButton, Item::MangroveButton,
@ -277,6 +281,7 @@ pub static CHEST_BOATS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::JungleChestBoat, Item::JungleChestBoat,
Item::AcaciaChestBoat, Item::AcaciaChestBoat,
Item::DarkOakChestBoat, Item::DarkOakChestBoat,
Item::PaleOakChestBoat,
Item::MangroveChestBoat, Item::MangroveChestBoat,
Item::BambooChestRaft, Item::BambooChestRaft,
Item::CherryChestBoat, Item::CherryChestBoat,
@ -313,6 +318,7 @@ pub static COMPLETES_FIND_TREE_TUTORIAL: LazyLock<HashSet<Item>> = LazyLock::new
Item::JungleLeaves, Item::JungleLeaves,
Item::OakLeaves, Item::OakLeaves,
Item::SpruceLeaves, Item::SpruceLeaves,
Item::PaleOakLeaves,
Item::DarkOakLeaves, Item::DarkOakLeaves,
Item::AcaciaLeaves, Item::AcaciaLeaves,
Item::BirchLeaves, Item::BirchLeaves,
@ -334,6 +340,10 @@ pub static COMPLETES_FIND_TREE_TUTORIAL: LazyLock<HashSet<Item>> = LazyLock::new
Item::DarkOakWood, Item::DarkOakWood,
Item::StrippedDarkOakLog, Item::StrippedDarkOakLog,
Item::StrippedDarkOakWood, Item::StrippedDarkOakWood,
Item::PaleOakLog,
Item::PaleOakWood,
Item::StrippedPaleOakLog,
Item::StrippedPaleOakWood,
Item::OakLog, Item::OakLog,
Item::OakWood, Item::OakWood,
Item::StrippedOakLog, Item::StrippedOakLog,
@ -506,6 +516,7 @@ pub static DIRT: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::Mycelium, Item::Mycelium,
Item::RootedDirt, Item::RootedDirt,
Item::MossBlock, Item::MossBlock,
Item::PaleMossBlock,
Item::Mud, Item::Mud,
Item::MuddyMangroveRoots, Item::MuddyMangroveRoots,
]) ])
@ -527,6 +538,7 @@ pub static DOORS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::JungleDoor, Item::JungleDoor,
Item::AcaciaDoor, Item::AcaciaDoor,
Item::DarkOakDoor, Item::DarkOakDoor,
Item::PaleOakDoor,
Item::CrimsonDoor, Item::CrimsonDoor,
Item::WarpedDoor, Item::WarpedDoor,
Item::MangroveDoor, Item::MangroveDoor,
@ -534,6 +546,8 @@ pub static DOORS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::CherryDoor, Item::CherryDoor,
]) ])
}); });
pub static DROWNED_PREFERRED_WEAPONS: LazyLock<HashSet<Item>> =
LazyLock::new(|| HashSet::from_iter(vec![Item::Trident]));
pub static DUPLICATES_ALLAYS: LazyLock<HashSet<Item>> = pub static DUPLICATES_ALLAYS: LazyLock<HashSet<Item>> =
LazyLock::new(|| HashSet::from_iter(vec![Item::AmethystShard])); LazyLock::new(|| HashSet::from_iter(vec![Item::AmethystShard]));
pub static DYEABLE: LazyLock<HashSet<Item>> = LazyLock::new(|| { pub static DYEABLE: LazyLock<HashSet<Item>> = LazyLock::new(|| {
@ -933,6 +947,7 @@ pub static FENCE_GATES: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::AcaciaFenceGate, Item::AcaciaFenceGate,
Item::BirchFenceGate, Item::BirchFenceGate,
Item::DarkOakFenceGate, Item::DarkOakFenceGate,
Item::PaleOakFenceGate,
Item::JungleFenceGate, Item::JungleFenceGate,
Item::OakFenceGate, Item::OakFenceGate,
Item::SpruceFenceGate, Item::SpruceFenceGate,
@ -949,6 +964,7 @@ pub static FENCES: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::OakFence, Item::OakFence,
Item::AcaciaFence, Item::AcaciaFence,
Item::DarkOakFence, Item::DarkOakFence,
Item::PaleOakFence,
Item::SpruceFence, Item::SpruceFence,
Item::BirchFence, Item::BirchFence,
Item::JungleFence, Item::JungleFence,
@ -969,36 +985,6 @@ pub static FISHES: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::TropicalFish, Item::TropicalFish,
]) ])
}); });
pub static FLOWERS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
HashSet::from_iter(vec![
Item::FloweringAzaleaLeaves,
Item::FloweringAzalea,
Item::MangrovePropagule,
Item::CherryLeaves,
Item::PinkPetals,
Item::ChorusFlower,
Item::SporeBlossom,
Item::Dandelion,
Item::Poppy,
Item::BlueOrchid,
Item::Allium,
Item::AzureBluet,
Item::RedTulip,
Item::OrangeTulip,
Item::WhiteTulip,
Item::PinkTulip,
Item::OxeyeDaisy,
Item::Cornflower,
Item::LilyOfTheValley,
Item::WitherRose,
Item::Torchflower,
Item::Sunflower,
Item::Lilac,
Item::Peony,
Item::RoseBush,
Item::PitcherPlant,
])
});
pub static FOOT_ARMOR: LazyLock<HashSet<Item>> = LazyLock::new(|| { pub static FOOT_ARMOR: LazyLock<HashSet<Item>> = LazyLock::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Item::LeatherBoots, Item::LeatherBoots,
@ -1046,6 +1032,7 @@ pub static HANGING_SIGNS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::CherryHangingSign, Item::CherryHangingSign,
Item::JungleHangingSign, Item::JungleHangingSign,
Item::DarkOakHangingSign, Item::DarkOakHangingSign,
Item::PaleOakHangingSign,
Item::CrimsonHangingSign, Item::CrimsonHangingSign,
Item::WarpedHangingSign, Item::WarpedHangingSign,
Item::MangroveHangingSign, Item::MangroveHangingSign,
@ -1114,6 +1101,7 @@ pub static LEAVES: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::JungleLeaves, Item::JungleLeaves,
Item::OakLeaves, Item::OakLeaves,
Item::SpruceLeaves, Item::SpruceLeaves,
Item::PaleOakLeaves,
Item::DarkOakLeaves, Item::DarkOakLeaves,
Item::AcaciaLeaves, Item::AcaciaLeaves,
Item::BirchLeaves, Item::BirchLeaves,
@ -1153,6 +1141,10 @@ pub static LOGS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::DarkOakWood, Item::DarkOakWood,
Item::StrippedDarkOakLog, Item::StrippedDarkOakLog,
Item::StrippedDarkOakWood, Item::StrippedDarkOakWood,
Item::PaleOakLog,
Item::PaleOakWood,
Item::StrippedPaleOakLog,
Item::StrippedPaleOakWood,
Item::OakLog, Item::OakLog,
Item::OakWood, Item::OakWood,
Item::StrippedOakLog, Item::StrippedOakLog,
@ -1189,6 +1181,10 @@ pub static LOGS_THAT_BURN: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::DarkOakWood, Item::DarkOakWood,
Item::StrippedDarkOakLog, Item::StrippedDarkOakLog,
Item::StrippedDarkOakWood, Item::StrippedDarkOakWood,
Item::PaleOakLog,
Item::PaleOakWood,
Item::StrippedPaleOakLog,
Item::StrippedPaleOakWood,
Item::OakLog, Item::OakLog,
Item::OakWood, Item::OakWood,
Item::StrippedOakLog, Item::StrippedOakLog,
@ -1301,6 +1297,14 @@ pub static OAK_LOGS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
}); });
pub static OCELOT_FOOD: LazyLock<HashSet<Item>> = pub static OCELOT_FOOD: LazyLock<HashSet<Item>> =
LazyLock::new(|| HashSet::from_iter(vec![Item::Cod, Item::Salmon])); LazyLock::new(|| HashSet::from_iter(vec![Item::Cod, Item::Salmon]));
pub static PALE_OAK_LOGS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
HashSet::from_iter(vec![
Item::PaleOakLog,
Item::PaleOakWood,
Item::StrippedPaleOakLog,
Item::StrippedPaleOakWood,
])
});
pub static PANDA_EATS_FROM_GROUND: LazyLock<HashSet<Item>> = pub static PANDA_EATS_FROM_GROUND: LazyLock<HashSet<Item>> =
LazyLock::new(|| HashSet::from_iter(vec![Item::Cake, Item::Bamboo])); LazyLock::new(|| HashSet::from_iter(vec![Item::Cake, Item::Bamboo]));
pub static PANDA_FOOD: LazyLock<HashSet<Item>> = pub static PANDA_FOOD: LazyLock<HashSet<Item>> =
@ -1360,6 +1364,8 @@ pub static PIGLIN_LOVED: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::DeepslateGoldOre, Item::DeepslateGoldOre,
]) ])
}); });
pub static PIGLIN_PREFERRED_WEAPONS: LazyLock<HashSet<Item>> =
LazyLock::new(|| HashSet::from_iter(vec![Item::Crossbow]));
pub static PIGLIN_REPELLENTS: LazyLock<HashSet<Item>> = LazyLock::new(|| { pub static PIGLIN_REPELLENTS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
HashSet::from_iter(vec![Item::SoulTorch, Item::SoulLantern, Item::SoulCampfire]) HashSet::from_iter(vec![Item::SoulTorch, Item::SoulLantern, Item::SoulCampfire])
}); });
@ -1371,6 +1377,8 @@ pub static PIGLIN_SAFE_ARMOR: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::GoldenBoots, Item::GoldenBoots,
]) ])
}); });
pub static PILLAGER_PREFERRED_WEAPONS: LazyLock<HashSet<Item>> =
LazyLock::new(|| HashSet::from_iter(vec![Item::Crossbow]));
pub static PLANKS: LazyLock<HashSet<Item>> = LazyLock::new(|| { pub static PLANKS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Item::OakPlanks, Item::OakPlanks,
@ -1379,6 +1387,7 @@ pub static PLANKS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::JunglePlanks, Item::JunglePlanks,
Item::AcaciaPlanks, Item::AcaciaPlanks,
Item::DarkOakPlanks, Item::DarkOakPlanks,
Item::PaleOakPlanks,
Item::CrimsonPlanks, Item::CrimsonPlanks,
Item::WarpedPlanks, Item::WarpedPlanks,
Item::MangrovePlanks, Item::MangrovePlanks,
@ -1430,6 +1439,7 @@ pub static SAPLINGS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::JungleSapling, Item::JungleSapling,
Item::AcaciaSapling, Item::AcaciaSapling,
Item::DarkOakSapling, Item::DarkOakSapling,
Item::PaleOakSapling,
Item::Azalea, Item::Azalea,
Item::FloweringAzalea, Item::FloweringAzalea,
Item::MangrovePropagule, Item::MangrovePropagule,
@ -1477,6 +1487,7 @@ pub static SIGNS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::AcaciaSign, Item::AcaciaSign,
Item::JungleSign, Item::JungleSign,
Item::DarkOakSign, Item::DarkOakSign,
Item::PaleOakSign,
Item::CrimsonSign, Item::CrimsonSign,
Item::WarpedSign, Item::WarpedSign,
Item::MangroveSign, Item::MangroveSign,
@ -1484,6 +1495,8 @@ pub static SIGNS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::CherrySign, Item::CherrySign,
]) ])
}); });
pub static SKELETON_PREFERRED_WEAPONS: LazyLock<HashSet<Item>> =
LazyLock::new(|| HashSet::from_iter(vec![Item::Bow]));
pub static SKULLS: LazyLock<HashSet<Item>> = LazyLock::new(|| { pub static SKULLS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Item::PlayerHead, Item::PlayerHead,
@ -1546,12 +1559,14 @@ pub static SLABS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::TuffSlab, Item::TuffSlab,
Item::PolishedTuffSlab, Item::PolishedTuffSlab,
Item::TuffBrickSlab, Item::TuffBrickSlab,
Item::ResinBrickSlab,
Item::OakSlab, Item::OakSlab,
Item::SpruceSlab, Item::SpruceSlab,
Item::BirchSlab, Item::BirchSlab,
Item::JungleSlab, Item::JungleSlab,
Item::AcaciaSlab, Item::AcaciaSlab,
Item::DarkOakSlab, Item::DarkOakSlab,
Item::PaleOakSlab,
Item::CrimsonSlab, Item::CrimsonSlab,
Item::WarpedSlab, Item::WarpedSlab,
Item::MangroveSlab, Item::MangroveSlab,
@ -1562,6 +1577,7 @@ pub static SLABS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
pub static SMALL_FLOWERS: LazyLock<HashSet<Item>> = LazyLock::new(|| { pub static SMALL_FLOWERS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Item::Dandelion, Item::Dandelion,
Item::OpenEyeblossom,
Item::Poppy, Item::Poppy,
Item::BlueOrchid, Item::BlueOrchid,
Item::Allium, Item::Allium,
@ -1575,6 +1591,7 @@ pub static SMALL_FLOWERS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::LilyOfTheValley, Item::LilyOfTheValley,
Item::WitherRose, Item::WitherRose,
Item::Torchflower, Item::Torchflower,
Item::ClosedEyeblossom,
]) ])
}); });
pub static SMELTS_TO_GLASS: LazyLock<HashSet<Item>> = pub static SMELTS_TO_GLASS: LazyLock<HashSet<Item>> =
@ -1638,12 +1655,14 @@ pub static STAIRS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::TuffStairs, Item::TuffStairs,
Item::PolishedTuffStairs, Item::PolishedTuffStairs,
Item::TuffBrickStairs, Item::TuffBrickStairs,
Item::ResinBrickStairs,
Item::OakStairs, Item::OakStairs,
Item::SpruceStairs, Item::SpruceStairs,
Item::BirchStairs, Item::BirchStairs,
Item::JungleStairs, Item::JungleStairs,
Item::AcaciaStairs, Item::AcaciaStairs,
Item::DarkOakStairs, Item::DarkOakStairs,
Item::PaleOakStairs,
Item::CrimsonStairs, Item::CrimsonStairs,
Item::WarpedStairs, Item::WarpedStairs,
Item::MangroveStairs, Item::MangroveStairs,
@ -1689,15 +1708,6 @@ pub static SWORDS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::IronSword, Item::IronSword,
]) ])
}); });
pub static TALL_FLOWERS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
HashSet::from_iter(vec![
Item::Sunflower,
Item::Lilac,
Item::Peony,
Item::RoseBush,
Item::PitcherPlant,
])
});
pub static TERRACOTTA: LazyLock<HashSet<Item>> = LazyLock::new(|| { pub static TERRACOTTA: LazyLock<HashSet<Item>> = LazyLock::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Item::Terracotta, Item::Terracotta,
@ -1733,6 +1743,7 @@ pub static TRAPDOORS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::AcaciaTrapdoor, Item::AcaciaTrapdoor,
Item::BirchTrapdoor, Item::BirchTrapdoor,
Item::DarkOakTrapdoor, Item::DarkOakTrapdoor,
Item::PaleOakTrapdoor,
Item::JungleTrapdoor, Item::JungleTrapdoor,
Item::OakTrapdoor, Item::OakTrapdoor,
Item::SpruceTrapdoor, Item::SpruceTrapdoor,
@ -1745,38 +1756,17 @@ pub static TRAPDOORS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
}); });
pub static TRIM_MATERIALS: LazyLock<HashSet<Item>> = LazyLock::new(|| { pub static TRIM_MATERIALS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Item::IronIngot,
Item::CopperIngot,
Item::GoldIngot,
Item::LapisLazuli,
Item::Emerald,
Item::Diamond,
Item::NetheriteIngot,
Item::Redstone,
Item::Quartz,
Item::AmethystShard, Item::AmethystShard,
]) Item::CopperIngot,
}); Item::Diamond,
pub static TRIM_TEMPLATES: LazyLock<HashSet<Item>> = LazyLock::new(|| { Item::Emerald,
HashSet::from_iter(vec![ Item::GoldIngot,
Item::WardArmorTrimSmithingTemplate, Item::IronIngot,
Item::SpireArmorTrimSmithingTemplate, Item::LapisLazuli,
Item::CoastArmorTrimSmithingTemplate, Item::NetheriteIngot,
Item::EyeArmorTrimSmithingTemplate, Item::Quartz,
Item::DuneArmorTrimSmithingTemplate, Item::Redstone,
Item::WildArmorTrimSmithingTemplate, Item::ResinBrick,
Item::RibArmorTrimSmithingTemplate,
Item::TideArmorTrimSmithingTemplate,
Item::SentryArmorTrimSmithingTemplate,
Item::VexArmorTrimSmithingTemplate,
Item::SnoutArmorTrimSmithingTemplate,
Item::WayfinderArmorTrimSmithingTemplate,
Item::ShaperArmorTrimSmithingTemplate,
Item::SilenceArmorTrimSmithingTemplate,
Item::RaiserArmorTrimSmithingTemplate,
Item::HostArmorTrimSmithingTemplate,
Item::FlowArmorTrimSmithingTemplate,
Item::BoltArmorTrimSmithingTemplate,
]) ])
}); });
pub static TRIMMABLE_ARMOR: LazyLock<HashSet<Item>> = LazyLock::new(|| { pub static TRIMMABLE_ARMOR: LazyLock<HashSet<Item>> = LazyLock::new(|| {
@ -1860,6 +1850,7 @@ pub static WALLS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::TuffWall, Item::TuffWall,
Item::PolishedTuffWall, Item::PolishedTuffWall,
Item::TuffBrickWall, Item::TuffBrickWall,
Item::ResinBrickWall,
]) ])
}); });
pub static WARPED_STEMS: LazyLock<HashSet<Item>> = LazyLock::new(|| { pub static WARPED_STEMS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
@ -1872,6 +1863,8 @@ pub static WARPED_STEMS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
}); });
pub static WART_BLOCKS: LazyLock<HashSet<Item>> = pub static WART_BLOCKS: LazyLock<HashSet<Item>> =
LazyLock::new(|| HashSet::from_iter(vec![Item::NetherWartBlock, Item::WarpedWartBlock])); LazyLock::new(|| HashSet::from_iter(vec![Item::NetherWartBlock, Item::WarpedWartBlock]));
pub static WITHER_SKELETON_DISLIKED_WEAPONS: LazyLock<HashSet<Item>> =
LazyLock::new(|| HashSet::from_iter(vec![Item::Bow, Item::Crossbow]));
pub static WOLF_FOOD: LazyLock<HashSet<Item>> = LazyLock::new(|| { pub static WOLF_FOOD: LazyLock<HashSet<Item>> = LazyLock::new(|| {
HashSet::from_iter(vec![ HashSet::from_iter(vec![
Item::Cod, Item::Cod,
@ -1902,6 +1895,7 @@ pub static WOODEN_BUTTONS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::JungleButton, Item::JungleButton,
Item::AcaciaButton, Item::AcaciaButton,
Item::DarkOakButton, Item::DarkOakButton,
Item::PaleOakButton,
Item::CrimsonButton, Item::CrimsonButton,
Item::WarpedButton, Item::WarpedButton,
Item::MangroveButton, Item::MangroveButton,
@ -1917,6 +1911,7 @@ pub static WOODEN_DOORS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::JungleDoor, Item::JungleDoor,
Item::AcaciaDoor, Item::AcaciaDoor,
Item::DarkOakDoor, Item::DarkOakDoor,
Item::PaleOakDoor,
Item::CrimsonDoor, Item::CrimsonDoor,
Item::WarpedDoor, Item::WarpedDoor,
Item::MangroveDoor, Item::MangroveDoor,
@ -1929,6 +1924,7 @@ pub static WOODEN_FENCES: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::OakFence, Item::OakFence,
Item::AcaciaFence, Item::AcaciaFence,
Item::DarkOakFence, Item::DarkOakFence,
Item::PaleOakFence,
Item::SpruceFence, Item::SpruceFence,
Item::BirchFence, Item::BirchFence,
Item::JungleFence, Item::JungleFence,
@ -1947,6 +1943,7 @@ pub static WOODEN_PRESSURE_PLATES: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::JunglePressurePlate, Item::JunglePressurePlate,
Item::AcaciaPressurePlate, Item::AcaciaPressurePlate,
Item::DarkOakPressurePlate, Item::DarkOakPressurePlate,
Item::PaleOakPressurePlate,
Item::CrimsonPressurePlate, Item::CrimsonPressurePlate,
Item::WarpedPressurePlate, Item::WarpedPressurePlate,
Item::MangrovePressurePlate, Item::MangrovePressurePlate,
@ -1962,6 +1959,7 @@ pub static WOODEN_SLABS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::JungleSlab, Item::JungleSlab,
Item::AcaciaSlab, Item::AcaciaSlab,
Item::DarkOakSlab, Item::DarkOakSlab,
Item::PaleOakSlab,
Item::CrimsonSlab, Item::CrimsonSlab,
Item::WarpedSlab, Item::WarpedSlab,
Item::MangroveSlab, Item::MangroveSlab,
@ -1977,6 +1975,7 @@ pub static WOODEN_STAIRS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::JungleStairs, Item::JungleStairs,
Item::AcaciaStairs, Item::AcaciaStairs,
Item::DarkOakStairs, Item::DarkOakStairs,
Item::PaleOakStairs,
Item::CrimsonStairs, Item::CrimsonStairs,
Item::WarpedStairs, Item::WarpedStairs,
Item::MangroveStairs, Item::MangroveStairs,
@ -1992,6 +1991,7 @@ pub static WOODEN_TOOL_MATERIALS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::JunglePlanks, Item::JunglePlanks,
Item::AcaciaPlanks, Item::AcaciaPlanks,
Item::DarkOakPlanks, Item::DarkOakPlanks,
Item::PaleOakPlanks,
Item::CrimsonPlanks, Item::CrimsonPlanks,
Item::WarpedPlanks, Item::WarpedPlanks,
Item::MangrovePlanks, Item::MangrovePlanks,
@ -2004,6 +2004,7 @@ pub static WOODEN_TRAPDOORS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::AcaciaTrapdoor, Item::AcaciaTrapdoor,
Item::BirchTrapdoor, Item::BirchTrapdoor,
Item::DarkOakTrapdoor, Item::DarkOakTrapdoor,
Item::PaleOakTrapdoor,
Item::JungleTrapdoor, Item::JungleTrapdoor,
Item::OakTrapdoor, Item::OakTrapdoor,
Item::SpruceTrapdoor, Item::SpruceTrapdoor,