From 5aafff35e81fb296d9a417d3ab21997362f636c4 Mon Sep 17 00:00:00 2001 From: Alexander Medvedev Date: Fri, 15 May 2026 18:24:28 +0200 Subject: [PATCH] feat: add bedrock forms --- Cargo.lock | 2 + pumpkin-codegen/src/block.rs | 8 +- pumpkin-config/Cargo.toml | 3 - pumpkin-data/src/generated/block.rs | 1140 ++++++++--------- pumpkin-data/src/generated/fluid.rs | 16 +- pumpkin-plugin-api/Cargo.toml | 2 + .../events/player/bedrock_form_response.rs | 21 + pumpkin-plugin-api/src/events/player/mod.rs | 1 + pumpkin-plugin-api/src/forms.rs | 218 ++++ pumpkin-plugin-api/src/lib.rs | 1 + pumpkin-plugin-wit/v0.1/event.wit | 9 + pumpkin-plugin-wit/v0.1/forms.wit | 54 + pumpkin-plugin-wit/v0.1/plugin.wit | 2 + pumpkin-protocol/src/bedrock/client/mod.rs | 2 + .../src/bedrock/client/modal_form_request.rs | 9 + pumpkin-protocol/src/bedrock/server/mod.rs | 1 + .../src/bedrock/server/modal_form_response.rs | 18 + pumpkin-protocol/src/lib.rs | 2 +- pumpkin-util/src/noise/perlin.rs | 2 - pumpkin-util/src/random/xoroshiro128.rs | 1 - pumpkin-world/Cargo.toml | 2 - pumpkin-world/src/biome/mod.rs | 1 - pumpkin-world/src/biome/multi_noise.rs | 2 +- pumpkin-world/src/chunk_system/schedule.rs | 38 +- pumpkin-world/src/generation/carver/mask.rs | 1 - .../feature/features/spring_feature.rs | 1 - pumpkin-world/src/generation/noise/perlin.rs | 1 - .../noise/router/chunk_density_function.rs | 1 - .../noise/router/density_function/math.rs | 5 - .../noise/router/density_function/misc.rs | 3 - .../noise/router/density_function/mod.rs | 1 - .../noise/router/density_function/spline.rs | 4 - .../noise/router/find_top_surface.rs | 1 - pumpkin-world/src/generation/proto_chunk.rs | 17 +- .../generation/structure/shiftable_piece.rs | 1 - .../structure/structures/buried_treasure.rs | 5 - .../structure/structures/desert_pyramid.rs | 5 - .../generation/structure/structures/igloo.rs | 5 - .../structure/structures/jungle_temple.rs | 5 - .../generation/structure/structures/mod.rs | 7 - .../structures/nether_fortress/bridge.rs | 5 - .../nether_fortress/bridge_crossing.rs | 5 - .../structures/nether_fortress/bridge_end.rs | 5 - .../nether_fortress/bridge_platform.rs | 5 - .../nether_fortress/bridge_small_crossing.rs | 5 - .../nether_fortress/bridge_stairs.rs | 5 - .../nether_fortress/corridor_balcony.rs | 5 - .../nether_fortress/corridor_crossing.rs | 5 - .../nether_fortress/corridor_exit.rs | 5 - .../nether_fortress/corridor_left_turn.rs | 5 - .../corridor_nether_warts_room.rs | 5 - .../nether_fortress/corridor_right_turn.rs | 5 - .../nether_fortress/corridor_stairs.rs | 5 - .../structures/nether_fortress/mod.rs | 16 +- .../nether_fortress/small_corridor.rs | 5 - .../structure/structures/nether_fossil.rs | 5 - .../structures/stronghold/chest_corridor.rs | 5 - .../structures/stronghold/corridor.rs | 10 - .../stronghold/five_way_crossing.rs | 5 - .../structures/stronghold/left_turn.rs | 5 - .../structures/stronghold/library.rs | 5 - .../structure/structures/stronghold/mod.rs | 24 +- .../structures/stronghold/portal_room.rs | 5 - .../structures/stronghold/prison_hall.rs | 5 - .../structures/stronghold/right_turn.rs | 5 - .../structures/stronghold/spiral_staircase.rs | 18 - .../structures/stronghold/square_room.rs | 5 - .../structure/structures/stronghold/stairs.rs | 5 - .../structure/structures/swamp_hut.rs | 5 - .../structure/template/template_piece.rs | 5 - pumpkin-world/src/level.rs | 46 +- pumpkin/Cargo.toml | 1 - pumpkin/src/crash.rs | 2 +- pumpkin/src/entity/mod.rs | 2 +- pumpkin/src/item/items/ender_eye.rs | 8 +- pumpkin/src/item/items/ignite/ignition.rs | 6 +- pumpkin/src/net/bedrock/mod.rs | 13 + pumpkin/src/net/bedrock/play.rs | 14 + pumpkin/src/net/lan_broadcast.rs | 2 +- .../events/player/bedrock_form_response.rs | 37 + pumpkin/src/plugin/api/events/player/mod.rs | 1 + .../wasm/wasm_host/wit/v0_1/events/player.rs | 30 +- .../loader/wasm/wasm_host/wit/v0_1/forms.rs | 129 ++ .../loader/wasm/wasm_host/wit/v0_1/mod.rs | 1 + pumpkin/src/world/mod.rs | 14 +- pumpkin/src/world/portal/end.rs | 2 +- 86 files changed, 1226 insertions(+), 898 deletions(-) create mode 100644 pumpkin-plugin-api/src/events/player/bedrock_form_response.rs create mode 100644 pumpkin-plugin-api/src/forms.rs create mode 100644 pumpkin-plugin-wit/v0.1/forms.wit create mode 100644 pumpkin-protocol/src/bedrock/client/modal_form_request.rs create mode 100644 pumpkin-protocol/src/bedrock/server/modal_form_response.rs create mode 100644 pumpkin/src/plugin/api/events/player/bedrock_form_response.rs create mode 100644 pumpkin/src/plugin/loader/wasm/wasm_host/wit/v0_1/forms.rs diff --git a/Cargo.lock b/Cargo.lock index 6ad0d76f6..5ac3f6f05 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2965,6 +2965,8 @@ name = "pumpkin-plugin-api" version = "0.1.0" dependencies = [ "postcard", + "serde", + "serde_json", "tracing", "tracing-serde-structured", "wit-bindgen 0.57.1", diff --git a/pumpkin-codegen/src/block.rs b/pumpkin-codegen/src/block.rs index 045240485..ff000f58b 100644 --- a/pumpkin-codegen/src/block.rs +++ b/pumpkin-codegen/src/block.rs @@ -393,7 +393,7 @@ impl ToTokens for BlockPropertyStruct { fn to_state_id(&self, block: &Block) -> u16 { if !Self::handles_block_id(block.id) { - panic!("{} is not a valid block for {}", &block.name, #struct_name); + panic!("{} is not a valid block for {}", block.name, #struct_name); } block.states[0].id + self.to_index() } @@ -401,7 +401,7 @@ impl ToTokens for BlockPropertyStruct { fn from_state_id(state_id: u16, block: &Block) -> Self { debug_assert!( Self::handles_block_id(block.id), - "{} is not a valid block for {}", &block.name, #struct_name + "{} is not a valid block for {}", block.name, #struct_name ); let min_id = block.states[0].id; @@ -420,7 +420,7 @@ impl ToTokens for BlockPropertyStruct { fn default(block: &Block) -> Self { if !Self::handles_block_id(block.id) { - panic!("{} is not a valid block for {}", &block.name, #struct_name); + panic!("{} is not a valid block for {}", block.name, #struct_name); } Self::from_state_id(block.default_state.id, block) } @@ -433,7 +433,7 @@ impl ToTokens for BlockPropertyStruct { fn from_props(props: &[(&str, &str)], block: &Block) -> Self { #[cfg(debug_assertions)] if !matches!(block.id, #(#block_ids)|*) { - panic!("{} is not a valid block for {}", &block.name, #struct_name); + panic!("{} is not a valid block for {}", block.name, #struct_name); } let mut block_props = Self::default(block); for (key, value) in props { diff --git a/pumpkin-config/Cargo.toml b/pumpkin-config/Cargo.toml index 30646c7ed..104832e6b 100644 --- a/pumpkin-config/Cargo.toml +++ b/pumpkin-config/Cargo.toml @@ -13,9 +13,6 @@ uuid.workspace = true toml.workspace = true -[features] -# Adds helper to change the config at runtime -test_helper = [] [lints] workspace = true diff --git a/pumpkin-data/src/generated/block.rs b/pumpkin-data/src/generated/block.rs index fde6c7dac..01f9e78cc 100644 --- a/pumpkin-data/src/generated/block.rs +++ b/pumpkin-data/src/generated/block.rs @@ -504820,7 +504820,7 @@ impl BlockProperties for OakFenceGateLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "OakFenceGateLikeProperties" + block.name, "OakFenceGateLikeProperties" ); } block.states[0].id + self.to_index() @@ -504829,7 +504829,7 @@ impl BlockProperties for OakFenceGateLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "OakFenceGateLikeProperties" ); let min_id = block.states[0].id; @@ -504838,7 +504838,7 @@ impl BlockProperties for OakFenceGateLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -504847,7 +504847,7 @@ impl BlockProperties for OakFenceGateLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "OakFenceGateLikeProperties" + block.name, "OakFenceGateLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -504880,7 +504880,7 @@ impl BlockProperties for OakFenceGateLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "OakFenceGateLikeProperties" + block.name, "OakFenceGateLikeProperties" ); } let mut block_props = Self::default(block); @@ -504931,7 +504931,7 @@ impl BlockProperties for CakeLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CakeLikeProperties" + block.name, "CakeLikeProperties" ); } block.states[0].id + self.to_index() @@ -504940,7 +504940,7 @@ impl BlockProperties for CakeLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "CakeLikeProperties" ); let min_id = block.states[0].id; @@ -504949,7 +504949,7 @@ impl BlockProperties for CakeLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -504958,7 +504958,7 @@ impl BlockProperties for CakeLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CakeLikeProperties" + block.name, "CakeLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -504984,7 +504984,7 @@ impl BlockProperties for CakeLikeProperties { if !matches!(block.id, 298u16) { panic!( "{} is not a valid block for {}", - &block.name, "CakeLikeProperties" + block.name, "CakeLikeProperties" ); } let mut block_props = Self::default(block); @@ -505040,7 +505040,7 @@ impl BlockProperties for JukeboxLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "JukeboxLikeProperties" + block.name, "JukeboxLikeProperties" ); } block.states[0].id + self.to_index() @@ -505049,7 +505049,7 @@ impl BlockProperties for JukeboxLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "JukeboxLikeProperties" ); let min_id = block.states[0].id; @@ -505058,7 +505058,7 @@ impl BlockProperties for JukeboxLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -505067,7 +505067,7 @@ impl BlockProperties for JukeboxLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "JukeboxLikeProperties" + block.name, "JukeboxLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -505084,7 +505084,7 @@ impl BlockProperties for JukeboxLikeProperties { if !matches!(block.id, 283u16) { panic!( "{} is not a valid block for {}", - &block.name, "JukeboxLikeProperties" + block.name, "JukeboxLikeProperties" ); } let mut block_props = Self::default(block); @@ -505153,7 +505153,7 @@ impl BlockProperties for PointedDripstoneLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "PointedDripstoneLikeProperties" + block.name, "PointedDripstoneLikeProperties" ); } block.states[0].id + self.to_index() @@ -505162,7 +505162,7 @@ impl BlockProperties for PointedDripstoneLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "PointedDripstoneLikeProperties" ); let min_id = block.states[0].id; @@ -505171,7 +505171,7 @@ impl BlockProperties for PointedDripstoneLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -505180,7 +505180,7 @@ impl BlockProperties for PointedDripstoneLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "PointedDripstoneLikeProperties" + block.name, "PointedDripstoneLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -505201,7 +505201,7 @@ impl BlockProperties for PointedDripstoneLikeProperties { if !matches!(block.id, 1105u16) { panic!( "{} is not a valid block for {}", - &block.name, "PointedDripstoneLikeProperties" + block.name, "PointedDripstoneLikeProperties" ); } let mut block_props = Self::default(block); @@ -505326,7 +505326,7 @@ impl BlockProperties for ResinBrickSlabLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "ResinBrickSlabLikeProperties" + block.name, "ResinBrickSlabLikeProperties" ); } block.states[0].id + self.to_index() @@ -505335,7 +505335,7 @@ impl BlockProperties for ResinBrickSlabLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "ResinBrickSlabLikeProperties" ); let min_id = block.states[0].id; @@ -505344,7 +505344,7 @@ impl BlockProperties for ResinBrickSlabLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -505353,7 +505353,7 @@ impl BlockProperties for ResinBrickSlabLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "ResinBrickSlabLikeProperties" + block.name, "ResinBrickSlabLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -505437,7 +505437,7 @@ impl BlockProperties for ResinBrickSlabLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "ResinBrickSlabLikeProperties" + block.name, "ResinBrickSlabLikeProperties" ); } let mut block_props = Self::default(block); @@ -505502,7 +505502,7 @@ impl BlockProperties for DriedGhastLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "DriedGhastLikeProperties" + block.name, "DriedGhastLikeProperties" ); } block.states[0].id + self.to_index() @@ -505511,7 +505511,7 @@ impl BlockProperties for DriedGhastLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "DriedGhastLikeProperties" ); let min_id = block.states[0].id; @@ -505520,7 +505520,7 @@ impl BlockProperties for DriedGhastLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -505529,7 +505529,7 @@ impl BlockProperties for DriedGhastLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "DriedGhastLikeProperties" + block.name, "DriedGhastLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -505559,7 +505559,7 @@ impl BlockProperties for DriedGhastLikeProperties { if !matches!(block.id, 747u16) { panic!( "{} is not a valid block for {}", - &block.name, "DriedGhastLikeProperties" + block.name, "DriedGhastLikeProperties" ); } let mut block_props = Self::default(block); @@ -505647,7 +505647,7 @@ impl BlockProperties for RedstoneWireLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "RedstoneWireLikeProperties" + block.name, "RedstoneWireLikeProperties" ); } block.states[0].id + self.to_index() @@ -505656,7 +505656,7 @@ impl BlockProperties for RedstoneWireLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "RedstoneWireLikeProperties" ); let min_id = block.states[0].id; @@ -505665,7 +505665,7 @@ impl BlockProperties for RedstoneWireLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -505674,7 +505674,7 @@ impl BlockProperties for RedstoneWireLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "RedstoneWireLikeProperties" + block.name, "RedstoneWireLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -505715,7 +505715,7 @@ impl BlockProperties for RedstoneWireLikeProperties { if !matches!(block.id, 202u16) { panic!( "{} is not a valid block for {}", - &block.name, "RedstoneWireLikeProperties" + block.name, "RedstoneWireLikeProperties" ); } let mut block_props = Self::default(block); @@ -505796,7 +505796,7 @@ impl BlockProperties for StickyPistonLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "StickyPistonLikeProperties" + block.name, "StickyPistonLikeProperties" ); } block.states[0].id + self.to_index() @@ -505805,7 +505805,7 @@ impl BlockProperties for StickyPistonLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "StickyPistonLikeProperties" ); let min_id = block.states[0].id; @@ -505814,7 +505814,7 @@ impl BlockProperties for StickyPistonLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -505823,7 +505823,7 @@ impl BlockProperties for StickyPistonLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "StickyPistonLikeProperties" + block.name, "StickyPistonLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -505840,7 +505840,7 @@ impl BlockProperties for StickyPistonLikeProperties { if !matches!(block.id, 128u16 | 138u16) { panic!( "{} is not a valid block for {}", - &block.name, "StickyPistonLikeProperties" + block.name, "StickyPistonLikeProperties" ); } let mut block_props = Self::default(block); @@ -505933,7 +505933,7 @@ impl BlockProperties for ChiseledBookshelfLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "ChiseledBookshelfLikeProperties" + block.name, "ChiseledBookshelfLikeProperties" ); } block.states[0].id + self.to_index() @@ -505942,7 +505942,7 @@ impl BlockProperties for ChiseledBookshelfLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "ChiseledBookshelfLikeProperties" ); let min_id = block.states[0].id; @@ -505951,7 +505951,7 @@ impl BlockProperties for ChiseledBookshelfLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -505960,7 +505960,7 @@ impl BlockProperties for ChiseledBookshelfLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "ChiseledBookshelfLikeProperties" + block.name, "ChiseledBookshelfLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -506024,7 +506024,7 @@ impl BlockProperties for ChiseledBookshelfLikeProperties { if !matches!(block.id, 179u16) { panic!( "{} is not a valid block for {}", - &block.name, "ChiseledBookshelfLikeProperties" + block.name, "ChiseledBookshelfLikeProperties" ); } let mut block_props = Self::default(block); @@ -506094,7 +506094,7 @@ impl BlockProperties for PoweredRailLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "PoweredRailLikeProperties" + block.name, "PoweredRailLikeProperties" ); } block.states[0].id + self.to_index() @@ -506103,7 +506103,7 @@ impl BlockProperties for PoweredRailLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "PoweredRailLikeProperties" ); let min_id = block.states[0].id; @@ -506112,7 +506112,7 @@ impl BlockProperties for PoweredRailLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -506121,7 +506121,7 @@ impl BlockProperties for PoweredRailLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "PoweredRailLikeProperties" + block.name, "PoweredRailLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -506142,7 +506142,7 @@ impl BlockProperties for PoweredRailLikeProperties { if !matches!(block.id, 126u16 | 127u16 | 482u16) { panic!( "{} is not a valid block for {}", - &block.name, "PoweredRailLikeProperties" + block.name, "PoweredRailLikeProperties" ); } let mut block_props = Self::default(block); @@ -506226,7 +506226,7 @@ impl BlockProperties for WhiteBedLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "WhiteBedLikeProperties" + block.name, "WhiteBedLikeProperties" ); } block.states[0].id + self.to_index() @@ -506235,7 +506235,7 @@ impl BlockProperties for WhiteBedLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "WhiteBedLikeProperties" ); let min_id = block.states[0].id; @@ -506244,7 +506244,7 @@ impl BlockProperties for WhiteBedLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -506253,7 +506253,7 @@ impl BlockProperties for WhiteBedLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "WhiteBedLikeProperties" + block.name, "WhiteBedLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -506289,7 +506289,7 @@ impl BlockProperties for WhiteBedLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "WhiteBedLikeProperties" + block.name, "WhiteBedLikeProperties" ); } let mut block_props = Self::default(block); @@ -506339,7 +506339,7 @@ impl BlockProperties for ChorusFlowerLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "ChorusFlowerLikeProperties" + block.name, "ChorusFlowerLikeProperties" ); } block.states[0].id + self.to_index() @@ -506348,7 +506348,7 @@ impl BlockProperties for ChorusFlowerLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "ChorusFlowerLikeProperties" ); let min_id = block.states[0].id; @@ -506357,7 +506357,7 @@ impl BlockProperties for ChorusFlowerLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -506366,7 +506366,7 @@ impl BlockProperties for ChorusFlowerLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "ChorusFlowerLikeProperties" + block.name, "ChorusFlowerLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -506391,7 +506391,7 @@ impl BlockProperties for ChorusFlowerLikeProperties { if !matches!(block.id, 657u16) { panic!( "{} is not a valid block for {}", - &block.name, "ChorusFlowerLikeProperties" + block.name, "ChorusFlowerLikeProperties" ); } let mut block_props = Self::default(block); @@ -506446,7 +506446,7 @@ impl BlockProperties for CactusLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CactusLikeProperties" + block.name, "CactusLikeProperties" ); } block.states[0].id + self.to_index() @@ -506455,7 +506455,7 @@ impl BlockProperties for CactusLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "CactusLikeProperties" ); let min_id = block.states[0].id; @@ -506464,7 +506464,7 @@ impl BlockProperties for CactusLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -506473,7 +506473,7 @@ impl BlockProperties for CactusLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CactusLikeProperties" + block.name, "CactusLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -506508,7 +506508,7 @@ impl BlockProperties for CactusLikeProperties { if !matches!(block.id, 279u16 | 282u16) { panic!( "{} is not a valid block for {}", - &block.name, "CactusLikeProperties" + block.name, "CactusLikeProperties" ); } let mut block_props = Self::default(block); @@ -506610,7 +506610,7 @@ impl BlockProperties for FireLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "FireLikeProperties" + block.name, "FireLikeProperties" ); } block.states[0].id + self.to_index() @@ -506619,7 +506619,7 @@ impl BlockProperties for FireLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "FireLikeProperties" ); let min_id = block.states[0].id; @@ -506628,7 +506628,7 @@ impl BlockProperties for FireLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -506637,7 +506637,7 @@ impl BlockProperties for FireLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "FireLikeProperties" + block.name, "FireLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -506679,7 +506679,7 @@ impl BlockProperties for FireLikeProperties { if !matches!(block.id, 196u16) { panic!( "{} is not a valid block for {}", - &block.name, "FireLikeProperties" + block.name, "FireLikeProperties" ); } let mut block_props = Self::default(block); @@ -506761,7 +506761,7 @@ impl BlockProperties for HopperLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "HopperLikeProperties" + block.name, "HopperLikeProperties" ); } block.states[0].id + self.to_index() @@ -506770,7 +506770,7 @@ impl BlockProperties for HopperLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "HopperLikeProperties" ); let min_id = block.states[0].id; @@ -506779,7 +506779,7 @@ impl BlockProperties for HopperLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -506788,7 +506788,7 @@ impl BlockProperties for HopperLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "HopperLikeProperties" + block.name, "HopperLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -506805,7 +506805,7 @@ impl BlockProperties for HopperLikeProperties { if !matches!(block.id, 477u16) { panic!( "{} is not a valid block for {}", - &block.name, "HopperLikeProperties" + block.name, "HopperLikeProperties" ); } let mut block_props = Self::default(block); @@ -506907,7 +506907,7 @@ impl BlockProperties for OakDoorLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "OakDoorLikeProperties" + block.name, "OakDoorLikeProperties" ); } block.states[0].id + self.to_index() @@ -506916,7 +506916,7 @@ impl BlockProperties for OakDoorLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "OakDoorLikeProperties" ); let min_id = block.states[0].id; @@ -506925,7 +506925,7 @@ impl BlockProperties for OakDoorLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -506934,7 +506934,7 @@ impl BlockProperties for OakDoorLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "OakDoorLikeProperties" + block.name, "OakDoorLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -506977,7 +506977,7 @@ impl BlockProperties for OakDoorLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "OakDoorLikeProperties" + block.name, "OakDoorLikeProperties" ); } let mut block_props = Self::default(block); @@ -507045,7 +507045,7 @@ impl BlockProperties for PistonHeadLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "PistonHeadLikeProperties" + block.name, "PistonHeadLikeProperties" ); } block.states[0].id + self.to_index() @@ -507054,7 +507054,7 @@ impl BlockProperties for PistonHeadLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "PistonHeadLikeProperties" ); let min_id = block.states[0].id; @@ -507063,7 +507063,7 @@ impl BlockProperties for PistonHeadLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -507072,7 +507072,7 @@ impl BlockProperties for PistonHeadLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "PistonHeadLikeProperties" + block.name, "PistonHeadLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -507090,7 +507090,7 @@ impl BlockProperties for PistonHeadLikeProperties { if !matches!(block.id, 139u16) { panic!( "{} is not a valid block for {}", - &block.name, "PistonHeadLikeProperties" + block.name, "PistonHeadLikeProperties" ); } let mut block_props = Self::default(block); @@ -507149,7 +507149,7 @@ impl BlockProperties for MovingPistonLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "MovingPistonLikeProperties" + block.name, "MovingPistonLikeProperties" ); } block.states[0].id + self.to_index() @@ -507158,7 +507158,7 @@ impl BlockProperties for MovingPistonLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "MovingPistonLikeProperties" ); let min_id = block.states[0].id; @@ -507167,7 +507167,7 @@ impl BlockProperties for MovingPistonLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -507176,7 +507176,7 @@ impl BlockProperties for MovingPistonLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "MovingPistonLikeProperties" + block.name, "MovingPistonLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -507193,7 +507193,7 @@ impl BlockProperties for MovingPistonLikeProperties { if !matches!(block.id, 156u16) { panic!( "{} is not a valid block for {}", - &block.name, "MovingPistonLikeProperties" + block.name, "MovingPistonLikeProperties" ); } let mut block_props = Self::default(block); @@ -507261,7 +507261,7 @@ impl BlockProperties for CreakingHeartLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CreakingHeartLikeProperties" + block.name, "CreakingHeartLikeProperties" ); } block.states[0].id + self.to_index() @@ -507270,7 +507270,7 @@ impl BlockProperties for CreakingHeartLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "CreakingHeartLikeProperties" ); let min_id = block.states[0].id; @@ -507279,7 +507279,7 @@ impl BlockProperties for CreakingHeartLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -507288,7 +507288,7 @@ impl BlockProperties for CreakingHeartLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CreakingHeartLikeProperties" + block.name, "CreakingHeartLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -507309,7 +507309,7 @@ impl BlockProperties for CreakingHeartLikeProperties { if !matches!(block.id, 199u16) { panic!( "{} is not a valid block for {}", - &block.name, "CreakingHeartLikeProperties" + block.name, "CreakingHeartLikeProperties" ); } let mut block_props = Self::default(block); @@ -507391,7 +507391,7 @@ impl BlockProperties for PaleMossCarpetLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "PaleMossCarpetLikeProperties" + block.name, "PaleMossCarpetLikeProperties" ); } block.states[0].id + self.to_index() @@ -507400,7 +507400,7 @@ impl BlockProperties for PaleMossCarpetLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "PaleMossCarpetLikeProperties" ); let min_id = block.states[0].id; @@ -507409,7 +507409,7 @@ impl BlockProperties for PaleMossCarpetLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -507418,7 +507418,7 @@ impl BlockProperties for PaleMossCarpetLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "PaleMossCarpetLikeProperties" + block.name, "PaleMossCarpetLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -507438,7 +507438,7 @@ impl BlockProperties for PaleMossCarpetLikeProperties { if !matches!(block.id, 1161u16) { panic!( "{} is not a valid block for {}", - &block.name, "PaleMossCarpetLikeProperties" + block.name, "PaleMossCarpetLikeProperties" ); } let mut block_props = Self::default(block); @@ -507506,7 +507506,7 @@ impl BlockProperties for ScaffoldingLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "ScaffoldingLikeProperties" + block.name, "ScaffoldingLikeProperties" ); } block.states[0].id + self.to_index() @@ -507515,7 +507515,7 @@ impl BlockProperties for ScaffoldingLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "ScaffoldingLikeProperties" ); let min_id = block.states[0].id; @@ -507524,7 +507524,7 @@ impl BlockProperties for ScaffoldingLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -507533,7 +507533,7 @@ impl BlockProperties for ScaffoldingLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "ScaffoldingLikeProperties" + block.name, "ScaffoldingLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -507567,7 +507567,7 @@ impl BlockProperties for ScaffoldingLikeProperties { if !matches!(block.id, 837u16) { panic!( "{} is not a valid block for {}", - &block.name, "ScaffoldingLikeProperties" + block.name, "ScaffoldingLikeProperties" ); } let mut block_props = Self::default(block); @@ -507645,7 +507645,7 @@ impl BlockProperties for VaultLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "VaultLikeProperties" + block.name, "VaultLikeProperties" ); } block.states[0].id + self.to_index() @@ -507654,7 +507654,7 @@ impl BlockProperties for VaultLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "VaultLikeProperties" ); let min_id = block.states[0].id; @@ -507663,7 +507663,7 @@ impl BlockProperties for VaultLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -507672,7 +507672,7 @@ impl BlockProperties for VaultLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "VaultLikeProperties" + block.name, "VaultLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -507690,7 +507690,7 @@ impl BlockProperties for VaultLikeProperties { if !matches!(block.id, 1158u16) { panic!( "{} is not a valid block for {}", - &block.name, "VaultLikeProperties" + block.name, "VaultLikeProperties" ); } let mut block_props = Self::default(block); @@ -507752,7 +507752,7 @@ impl BlockProperties for TrialSpawnerLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "TrialSpawnerLikeProperties" + block.name, "TrialSpawnerLikeProperties" ); } block.states[0].id + self.to_index() @@ -507761,7 +507761,7 @@ impl BlockProperties for TrialSpawnerLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "TrialSpawnerLikeProperties" ); let min_id = block.states[0].id; @@ -507770,7 +507770,7 @@ impl BlockProperties for TrialSpawnerLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -507779,7 +507779,7 @@ impl BlockProperties for TrialSpawnerLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "TrialSpawnerLikeProperties" + block.name, "TrialSpawnerLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -507796,7 +507796,7 @@ impl BlockProperties for TrialSpawnerLikeProperties { if !matches!(block.id, 1157u16) { panic!( "{} is not a valid block for {}", - &block.name, "TrialSpawnerLikeProperties" + block.name, "TrialSpawnerLikeProperties" ); } let mut block_props = Self::default(block); @@ -507863,7 +507863,7 @@ impl BlockProperties for SculkShriekerLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "SculkShriekerLikeProperties" + block.name, "SculkShriekerLikeProperties" ); } block.states[0].id + self.to_index() @@ -507872,7 +507872,7 @@ impl BlockProperties for SculkShriekerLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "SculkShriekerLikeProperties" ); let min_id = block.states[0].id; @@ -507881,7 +507881,7 @@ impl BlockProperties for SculkShriekerLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -507890,7 +507890,7 @@ impl BlockProperties for SculkShriekerLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "SculkShriekerLikeProperties" + block.name, "SculkShriekerLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -507914,7 +507914,7 @@ impl BlockProperties for SculkShriekerLikeProperties { if !matches!(block.id, 1006u16) { panic!( "{} is not a valid block for {}", - &block.name, "SculkShriekerLikeProperties" + block.name, "SculkShriekerLikeProperties" ); } let mut block_props = Self::default(block); @@ -507987,7 +507987,7 @@ impl BlockProperties for RepeaterLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "RepeaterLikeProperties" + block.name, "RepeaterLikeProperties" ); } block.states[0].id + self.to_index() @@ -507996,7 +507996,7 @@ impl BlockProperties for RepeaterLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "RepeaterLikeProperties" ); let min_id = block.states[0].id; @@ -508005,7 +508005,7 @@ impl BlockProperties for RepeaterLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -508014,7 +508014,7 @@ impl BlockProperties for RepeaterLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "RepeaterLikeProperties" + block.name, "RepeaterLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -508042,7 +508042,7 @@ impl BlockProperties for RepeaterLikeProperties { if !matches!(block.id, 299u16) { panic!( "{} is not a valid block for {}", - &block.name, "RepeaterLikeProperties" + block.name, "RepeaterLikeProperties" ); } let mut block_props = Self::default(block); @@ -508101,7 +508101,7 @@ impl BlockProperties for RespawnAnchorLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "RespawnAnchorLikeProperties" + block.name, "RespawnAnchorLikeProperties" ); } block.states[0].id + self.to_index() @@ -508110,7 +508110,7 @@ impl BlockProperties for RespawnAnchorLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "RespawnAnchorLikeProperties" ); let min_id = block.states[0].id; @@ -508119,7 +508119,7 @@ impl BlockProperties for RespawnAnchorLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -508128,7 +508128,7 @@ impl BlockProperties for RespawnAnchorLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "RespawnAnchorLikeProperties" + block.name, "RespawnAnchorLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -508152,7 +508152,7 @@ impl BlockProperties for RespawnAnchorLikeProperties { if !matches!(block.id, 918u16) { panic!( "{} is not a valid block for {}", - &block.name, "RespawnAnchorLikeProperties" + block.name, "RespawnAnchorLikeProperties" ); } let mut block_props = Self::default(block); @@ -508243,7 +508243,7 @@ impl BlockProperties for AcaciaShelfLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "AcaciaShelfLikeProperties" + block.name, "AcaciaShelfLikeProperties" ); } block.states[0].id + self.to_index() @@ -508252,7 +508252,7 @@ impl BlockProperties for AcaciaShelfLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "AcaciaShelfLikeProperties" ); let min_id = block.states[0].id; @@ -508261,7 +508261,7 @@ impl BlockProperties for AcaciaShelfLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -508270,7 +508270,7 @@ impl BlockProperties for AcaciaShelfLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "AcaciaShelfLikeProperties" + block.name, "AcaciaShelfLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -508306,7 +508306,7 @@ impl BlockProperties for AcaciaShelfLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "AcaciaShelfLikeProperties" + block.name, "AcaciaShelfLikeProperties" ); } let mut block_props = Self::default(block); @@ -508422,7 +508422,7 @@ impl BlockProperties for ResinBrickWallLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "ResinBrickWallLikeProperties" + block.name, "ResinBrickWallLikeProperties" ); } block.states[0].id + self.to_index() @@ -508431,7 +508431,7 @@ impl BlockProperties for ResinBrickWallLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "ResinBrickWallLikeProperties" ); let min_id = block.states[0].id; @@ -508440,7 +508440,7 @@ impl BlockProperties for ResinBrickWallLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -508449,7 +508449,7 @@ impl BlockProperties for ResinBrickWallLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "ResinBrickWallLikeProperties" + block.name, "ResinBrickWallLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -508501,7 +508501,7 @@ impl BlockProperties for ResinBrickWallLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "ResinBrickWallLikeProperties" + block.name, "ResinBrickWallLikeProperties" ); } let mut block_props = Self::default(block); @@ -508570,7 +508570,7 @@ impl BlockProperties for BrewingStandLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "BrewingStandLikeProperties" + block.name, "BrewingStandLikeProperties" ); } block.states[0].id + self.to_index() @@ -508579,7 +508579,7 @@ impl BlockProperties for BrewingStandLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "BrewingStandLikeProperties" ); let min_id = block.states[0].id; @@ -508588,7 +508588,7 @@ impl BlockProperties for BrewingStandLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -508597,7 +508597,7 @@ impl BlockProperties for BrewingStandLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "BrewingStandLikeProperties" + block.name, "BrewingStandLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -508624,7 +508624,7 @@ impl BlockProperties for BrewingStandLikeProperties { if !matches!(block.id, 386u16) { panic!( "{} is not a valid block for {}", - &block.name, "BrewingStandLikeProperties" + block.name, "BrewingStandLikeProperties" ); } let mut block_props = Self::default(block); @@ -508674,7 +508674,7 @@ impl BlockProperties for SnowLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "SnowLikeProperties" + block.name, "SnowLikeProperties" ); } block.states[0].id + self.to_index() @@ -508683,7 +508683,7 @@ impl BlockProperties for SnowLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "SnowLikeProperties" ); let min_id = block.states[0].id; @@ -508692,7 +508692,7 @@ impl BlockProperties for SnowLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -508701,7 +508701,7 @@ impl BlockProperties for SnowLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "SnowLikeProperties" + block.name, "SnowLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -508728,7 +508728,7 @@ impl BlockProperties for SnowLikeProperties { if !matches!(block.id, 276u16) { panic!( "{} is not a valid block for {}", - &block.name, "SnowLikeProperties" + block.name, "SnowLikeProperties" ); } let mut block_props = Self::default(block); @@ -508804,7 +508804,7 @@ impl BlockProperties for NoteBlockLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "NoteBlockLikeProperties" + block.name, "NoteBlockLikeProperties" ); } block.states[0].id + self.to_index() @@ -508813,7 +508813,7 @@ impl BlockProperties for NoteBlockLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "NoteBlockLikeProperties" ); let min_id = block.states[0].id; @@ -508822,7 +508822,7 @@ impl BlockProperties for NoteBlockLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -508831,7 +508831,7 @@ impl BlockProperties for NoteBlockLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "NoteBlockLikeProperties" + block.name, "NoteBlockLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -508879,7 +508879,7 @@ impl BlockProperties for NoteBlockLikeProperties { if !matches!(block.id, 109u16) { panic!( "{} is not a valid block for {}", - &block.name, "NoteBlockLikeProperties" + block.name, "NoteBlockLikeProperties" ); } let mut block_props = Self::default(block); @@ -508967,7 +508967,7 @@ impl BlockProperties for DispenserLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "DispenserLikeProperties" + block.name, "DispenserLikeProperties" ); } block.states[0].id + self.to_index() @@ -508976,7 +508976,7 @@ impl BlockProperties for DispenserLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "DispenserLikeProperties" ); let min_id = block.states[0].id; @@ -508985,7 +508985,7 @@ impl BlockProperties for DispenserLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -508994,7 +508994,7 @@ impl BlockProperties for DispenserLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "DispenserLikeProperties" + block.name, "DispenserLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -509011,7 +509011,7 @@ impl BlockProperties for DispenserLikeProperties { if !matches!(block.id, 105u16 | 483u16) { panic!( "{} is not a valid block for {}", - &block.name, "DispenserLikeProperties" + block.name, "DispenserLikeProperties" ); } let mut block_props = Self::default(block); @@ -509076,7 +509076,7 @@ impl BlockProperties for CrafterLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CrafterLikeProperties" + block.name, "CrafterLikeProperties" ); } block.states[0].id + self.to_index() @@ -509085,7 +509085,7 @@ impl BlockProperties for CrafterLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "CrafterLikeProperties" ); let min_id = block.states[0].id; @@ -509094,7 +509094,7 @@ impl BlockProperties for CrafterLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -509103,7 +509103,7 @@ impl BlockProperties for CrafterLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CrafterLikeProperties" + block.name, "CrafterLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -509121,7 +509121,7 @@ impl BlockProperties for CrafterLikeProperties { if !matches!(block.id, 1156u16) { panic!( "{} is not a valid block for {}", - &block.name, "CrafterLikeProperties" + block.name, "CrafterLikeProperties" ); } let mut block_props = Self::default(block); @@ -509254,7 +509254,7 @@ impl BlockProperties for OakStairsLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "OakStairsLikeProperties" + block.name, "OakStairsLikeProperties" ); } block.states[0].id + self.to_index() @@ -509263,7 +509263,7 @@ impl BlockProperties for OakStairsLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "OakStairsLikeProperties" ); let min_id = block.states[0].id; @@ -509272,7 +509272,7 @@ impl BlockProperties for OakStairsLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -509281,7 +509281,7 @@ impl BlockProperties for OakStairsLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "OakStairsLikeProperties" + block.name, "OakStairsLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -509363,7 +509363,7 @@ impl BlockProperties for OakStairsLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "OakStairsLikeProperties" + block.name, "OakStairsLikeProperties" ); } let mut block_props = Self::default(block); @@ -509414,7 +509414,7 @@ impl BlockProperties for FarmlandLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "FarmlandLikeProperties" + block.name, "FarmlandLikeProperties" ); } block.states[0].id + self.to_index() @@ -509423,7 +509423,7 @@ impl BlockProperties for FarmlandLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "FarmlandLikeProperties" ); let min_id = block.states[0].id; @@ -509432,7 +509432,7 @@ impl BlockProperties for FarmlandLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -509441,7 +509441,7 @@ impl BlockProperties for FarmlandLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "FarmlandLikeProperties" + block.name, "FarmlandLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -509468,7 +509468,7 @@ impl BlockProperties for FarmlandLikeProperties { if !matches!(block.id, 208u16) { panic!( "{} is not a valid block for {}", - &block.name, "FarmlandLikeProperties" + block.name, "FarmlandLikeProperties" ); } let mut block_props = Self::default(block); @@ -509525,7 +509525,7 @@ impl BlockProperties for SuspiciousSandLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "SuspiciousSandLikeProperties" + block.name, "SuspiciousSandLikeProperties" ); } block.states[0].id + self.to_index() @@ -509534,7 +509534,7 @@ impl BlockProperties for SuspiciousSandLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "SuspiciousSandLikeProperties" ); let min_id = block.states[0].id; @@ -509543,7 +509543,7 @@ impl BlockProperties for SuspiciousSandLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -509552,7 +509552,7 @@ impl BlockProperties for SuspiciousSandLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "SuspiciousSandLikeProperties" + block.name, "SuspiciousSandLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -509575,7 +509575,7 @@ impl BlockProperties for SuspiciousSandLikeProperties { if !matches!(block.id, 38u16 | 41u16) { panic!( "{} is not a valid block for {}", - &block.name, "SuspiciousSandLikeProperties" + block.name, "SuspiciousSandLikeProperties" ); } let mut block_props = Self::default(block); @@ -509644,7 +509644,7 @@ impl BlockProperties for BambooLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "BambooLikeProperties" + block.name, "BambooLikeProperties" ); } block.states[0].id + self.to_index() @@ -509653,7 +509653,7 @@ impl BlockProperties for BambooLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "BambooLikeProperties" ); let min_id = block.states[0].id; @@ -509662,7 +509662,7 @@ impl BlockProperties for BambooLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -509671,7 +509671,7 @@ impl BlockProperties for BambooLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "BambooLikeProperties" + block.name, "BambooLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -509703,7 +509703,7 @@ impl BlockProperties for BambooLikeProperties { if !matches!(block.id, 792u16) { panic!( "{} is not a valid block for {}", - &block.name, "BambooLikeProperties" + block.name, "BambooLikeProperties" ); } let mut block_props = Self::default(block); @@ -509781,7 +509781,7 @@ impl BlockProperties for StonePressurePlateLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "StonePressurePlateLikeProperties" + block.name, "StonePressurePlateLikeProperties" ); } block.states[0].id + self.to_index() @@ -509790,7 +509790,7 @@ impl BlockProperties for StonePressurePlateLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "StonePressurePlateLikeProperties" ); let min_id = block.states[0].id; @@ -509799,7 +509799,7 @@ impl BlockProperties for StonePressurePlateLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -509808,7 +509808,7 @@ impl BlockProperties for StonePressurePlateLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "StonePressurePlateLikeProperties" + block.name, "StonePressurePlateLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -509838,7 +509838,7 @@ impl BlockProperties for StonePressurePlateLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "StonePressurePlateLikeProperties" + block.name, "StonePressurePlateLikeProperties" ); } let mut block_props = Self::default(block); @@ -509901,7 +509901,7 @@ impl BlockProperties for ComparatorLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "ComparatorLikeProperties" + block.name, "ComparatorLikeProperties" ); } block.states[0].id + self.to_index() @@ -509910,7 +509910,7 @@ impl BlockProperties for ComparatorLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "ComparatorLikeProperties" ); let min_id = block.states[0].id; @@ -509919,7 +509919,7 @@ impl BlockProperties for ComparatorLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -509928,7 +509928,7 @@ impl BlockProperties for ComparatorLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "ComparatorLikeProperties" + block.name, "ComparatorLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -509946,7 +509946,7 @@ impl BlockProperties for ComparatorLikeProperties { if !matches!(block.id, 473u16) { panic!( "{} is not a valid block for {}", - &block.name, "ComparatorLikeProperties" + block.name, "ComparatorLikeProperties" ); } let mut block_props = Self::default(block); @@ -510005,7 +510005,7 @@ impl BlockProperties for CopperBulbLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CopperBulbLikeProperties" + block.name, "CopperBulbLikeProperties" ); } block.states[0].id + self.to_index() @@ -510014,7 +510014,7 @@ impl BlockProperties for CopperBulbLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "CopperBulbLikeProperties" ); let min_id = block.states[0].id; @@ -510023,7 +510023,7 @@ impl BlockProperties for CopperBulbLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -510032,7 +510032,7 @@ impl BlockProperties for CopperBulbLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CopperBulbLikeProperties" + block.name, "CopperBulbLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -510052,7 +510052,7 @@ impl BlockProperties for CopperBulbLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "CopperBulbLikeProperties" + block.name, "CopperBulbLikeProperties" ); } let mut block_props = Self::default(block); @@ -510145,7 +510145,7 @@ impl BlockProperties for TripwireLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "TripwireLikeProperties" + block.name, "TripwireLikeProperties" ); } block.states[0].id + self.to_index() @@ -510154,7 +510154,7 @@ impl BlockProperties for TripwireLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "TripwireLikeProperties" ); let min_id = block.states[0].id; @@ -510163,7 +510163,7 @@ impl BlockProperties for TripwireLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -510172,7 +510172,7 @@ impl BlockProperties for TripwireLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "TripwireLikeProperties" + block.name, "TripwireLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -510194,7 +510194,7 @@ impl BlockProperties for TripwireLikeProperties { if !matches!(block.id, 402u16) { panic!( "{} is not a valid block for {}", - &block.name, "TripwireLikeProperties" + block.name, "TripwireLikeProperties" ); } let mut block_props = Self::default(block); @@ -510301,7 +510301,7 @@ impl BlockProperties for OakTrapdoorLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "OakTrapdoorLikeProperties" + block.name, "OakTrapdoorLikeProperties" ); } block.states[0].id + self.to_index() @@ -510310,7 +510310,7 @@ impl BlockProperties for OakTrapdoorLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "OakTrapdoorLikeProperties" ); let min_id = block.states[0].id; @@ -510319,7 +510319,7 @@ impl BlockProperties for OakTrapdoorLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -510328,7 +510328,7 @@ impl BlockProperties for OakTrapdoorLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "OakTrapdoorLikeProperties" + block.name, "OakTrapdoorLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -510374,7 +510374,7 @@ impl BlockProperties for OakTrapdoorLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "OakTrapdoorLikeProperties" + block.name, "OakTrapdoorLikeProperties" ); } let mut block_props = Self::default(block); @@ -510442,7 +510442,7 @@ impl BlockProperties for LecternLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "LecternLikeProperties" + block.name, "LecternLikeProperties" ); } block.states[0].id + self.to_index() @@ -510451,7 +510451,7 @@ impl BlockProperties for LecternLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "LecternLikeProperties" ); let min_id = block.states[0].id; @@ -510460,7 +510460,7 @@ impl BlockProperties for LecternLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -510469,7 +510469,7 @@ impl BlockProperties for LecternLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "LecternLikeProperties" + block.name, "LecternLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -510487,7 +510487,7 @@ impl BlockProperties for LecternLikeProperties { if !matches!(block.id, 845u16) { panic!( "{} is not a valid block for {}", - &block.name, "LecternLikeProperties" + block.name, "LecternLikeProperties" ); } let mut block_props = Self::default(block); @@ -510553,7 +510553,7 @@ impl BlockProperties for TripwireHookLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "TripwireHookLikeProperties" + block.name, "TripwireHookLikeProperties" ); } block.states[0].id + self.to_index() @@ -510562,7 +510562,7 @@ impl BlockProperties for TripwireHookLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "TripwireHookLikeProperties" ); let min_id = block.states[0].id; @@ -510571,7 +510571,7 @@ impl BlockProperties for TripwireHookLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -510580,7 +510580,7 @@ impl BlockProperties for TripwireHookLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "TripwireHookLikeProperties" + block.name, "TripwireHookLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -510598,7 +510598,7 @@ impl BlockProperties for TripwireHookLikeProperties { if !matches!(block.id, 401u16) { panic!( "{} is not a valid block for {}", - &block.name, "TripwireHookLikeProperties" + block.name, "TripwireHookLikeProperties" ); } let mut block_props = Self::default(block); @@ -510667,7 +510667,7 @@ impl BlockProperties for BellLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "BellLikeProperties" + block.name, "BellLikeProperties" ); } block.states[0].id + self.to_index() @@ -510676,7 +510676,7 @@ impl BlockProperties for BellLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "BellLikeProperties" ); let min_id = block.states[0].id; @@ -510685,7 +510685,7 @@ impl BlockProperties for BellLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -510694,7 +510694,7 @@ impl BlockProperties for BellLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "BellLikeProperties" + block.name, "BellLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -510712,7 +510712,7 @@ impl BlockProperties for BellLikeProperties { if !matches!(block.id, 848u16) { panic!( "{} is not a valid block for {}", - &block.name, "BellLikeProperties" + block.name, "BellLikeProperties" ); } let mut block_props = Self::default(block); @@ -510774,7 +510774,7 @@ impl BlockProperties for SkeletonWallSkullLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "SkeletonWallSkullLikeProperties" + block.name, "SkeletonWallSkullLikeProperties" ); } block.states[0].id + self.to_index() @@ -510783,7 +510783,7 @@ impl BlockProperties for SkeletonWallSkullLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "SkeletonWallSkullLikeProperties" ); let min_id = block.states[0].id; @@ -510792,7 +510792,7 @@ impl BlockProperties for SkeletonWallSkullLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -510801,7 +510801,7 @@ impl BlockProperties for SkeletonWallSkullLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "SkeletonWallSkullLikeProperties" + block.name, "SkeletonWallSkullLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -510821,7 +510821,7 @@ impl BlockProperties for SkeletonWallSkullLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "SkeletonWallSkullLikeProperties" + block.name, "SkeletonWallSkullLikeProperties" ); } let mut block_props = Self::default(block); @@ -510903,7 +510903,7 @@ impl BlockProperties for LeverLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "LeverLikeProperties" + block.name, "LeverLikeProperties" ); } block.states[0].id + self.to_index() @@ -510912,7 +510912,7 @@ impl BlockProperties for LeverLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "LeverLikeProperties" ); let min_id = block.states[0].id; @@ -510921,7 +510921,7 @@ impl BlockProperties for LeverLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -510930,7 +510930,7 @@ impl BlockProperties for LeverLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "LeverLikeProperties" + block.name, "LeverLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -510965,7 +510965,7 @@ impl BlockProperties for LeverLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "LeverLikeProperties" + block.name, "LeverLikeProperties" ); } let mut block_props = Self::default(block); @@ -511034,7 +511034,7 @@ impl BlockProperties for LightningRodLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "LightningRodLikeProperties" + block.name, "LightningRodLikeProperties" ); } block.states[0].id + self.to_index() @@ -511043,7 +511043,7 @@ impl BlockProperties for LightningRodLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "LightningRodLikeProperties" ); let min_id = block.states[0].id; @@ -511052,7 +511052,7 @@ impl BlockProperties for LightningRodLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -511061,7 +511061,7 @@ impl BlockProperties for LightningRodLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "LightningRodLikeProperties" + block.name, "LightningRodLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -511085,7 +511085,7 @@ impl BlockProperties for LightningRodLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "LightningRodLikeProperties" + block.name, "LightningRodLikeProperties" ); } let mut block_props = Self::default(block); @@ -511144,7 +511144,7 @@ impl BlockProperties for SkeletonSkullLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "SkeletonSkullLikeProperties" + block.name, "SkeletonSkullLikeProperties" ); } block.states[0].id + self.to_index() @@ -511153,7 +511153,7 @@ impl BlockProperties for SkeletonSkullLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "SkeletonSkullLikeProperties" ); let min_id = block.states[0].id; @@ -511162,7 +511162,7 @@ impl BlockProperties for SkeletonSkullLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -511171,7 +511171,7 @@ impl BlockProperties for SkeletonSkullLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "SkeletonSkullLikeProperties" + block.name, "SkeletonSkullLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -511212,7 +511212,7 @@ impl BlockProperties for SkeletonSkullLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "SkeletonSkullLikeProperties" + block.name, "SkeletonSkullLikeProperties" ); } let mut block_props = Self::default(block); @@ -511290,7 +511290,7 @@ impl BlockProperties for ObserverLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "ObserverLikeProperties" + block.name, "ObserverLikeProperties" ); } block.states[0].id + self.to_index() @@ -511299,7 +511299,7 @@ impl BlockProperties for ObserverLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "ObserverLikeProperties" ); let min_id = block.states[0].id; @@ -511308,7 +511308,7 @@ impl BlockProperties for ObserverLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -511317,7 +511317,7 @@ impl BlockProperties for ObserverLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "ObserverLikeProperties" + block.name, "ObserverLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -511334,7 +511334,7 @@ impl BlockProperties for ObserverLikeProperties { if !matches!(block.id, 676u16) { panic!( "{} is not a valid block for {}", - &block.name, "ObserverLikeProperties" + block.name, "ObserverLikeProperties" ); } let mut block_props = Self::default(block); @@ -511383,7 +511383,7 @@ impl BlockProperties for ComposterLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "ComposterLikeProperties" + block.name, "ComposterLikeProperties" ); } block.states[0].id + self.to_index() @@ -511392,7 +511392,7 @@ impl BlockProperties for ComposterLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "ComposterLikeProperties" ); let min_id = block.states[0].id; @@ -511401,7 +511401,7 @@ impl BlockProperties for ComposterLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -511410,7 +511410,7 @@ impl BlockProperties for ComposterLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "ComposterLikeProperties" + block.name, "ComposterLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -511438,7 +511438,7 @@ impl BlockProperties for ComposterLikeProperties { if !matches!(block.id, 909u16) { panic!( "{} is not a valid block for {}", - &block.name, "ComposterLikeProperties" + block.name, "ComposterLikeProperties" ); } let mut block_props = Self::default(block); @@ -511496,7 +511496,7 @@ impl BlockProperties for CaveVinesPlantLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CaveVinesPlantLikeProperties" + block.name, "CaveVinesPlantLikeProperties" ); } block.states[0].id + self.to_index() @@ -511505,7 +511505,7 @@ impl BlockProperties for CaveVinesPlantLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "CaveVinesPlantLikeProperties" ); let min_id = block.states[0].id; @@ -511514,7 +511514,7 @@ impl BlockProperties for CaveVinesPlantLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -511523,7 +511523,7 @@ impl BlockProperties for CaveVinesPlantLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CaveVinesPlantLikeProperties" + block.name, "CaveVinesPlantLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -511537,7 +511537,7 @@ impl BlockProperties for CaveVinesPlantLikeProperties { if !matches!(block.id, 1108u16) { panic!( "{} is not a valid block for {}", - &block.name, "CaveVinesPlantLikeProperties" + block.name, "CaveVinesPlantLikeProperties" ); } let mut block_props = Self::default(block); @@ -511590,7 +511590,7 @@ impl BlockProperties for CaveVinesLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CaveVinesLikeProperties" + block.name, "CaveVinesLikeProperties" ); } block.states[0].id + self.to_index() @@ -511599,7 +511599,7 @@ impl BlockProperties for CaveVinesLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "CaveVinesLikeProperties" ); let min_id = block.states[0].id; @@ -511608,7 +511608,7 @@ impl BlockProperties for CaveVinesLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -511617,7 +511617,7 @@ impl BlockProperties for CaveVinesLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CaveVinesLikeProperties" + block.name, "CaveVinesLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -511665,7 +511665,7 @@ impl BlockProperties for CaveVinesLikeProperties { if !matches!(block.id, 1107u16) { panic!( "{} is not a valid block for {}", - &block.name, "CaveVinesLikeProperties" + block.name, "CaveVinesLikeProperties" ); } let mut block_props = Self::default(block); @@ -511744,7 +511744,7 @@ impl BlockProperties for TntLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "TntLikeProperties" + block.name, "TntLikeProperties" ); } block.states[0].id + self.to_index() @@ -511753,7 +511753,7 @@ impl BlockProperties for TntLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "TntLikeProperties" ); let min_id = block.states[0].id; @@ -511762,7 +511762,7 @@ impl BlockProperties for TntLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -511771,7 +511771,7 @@ impl BlockProperties for TntLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "TntLikeProperties" + block.name, "TntLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -511785,7 +511785,7 @@ impl BlockProperties for TntLikeProperties { if !matches!(block.id, 177u16) { panic!( "{} is not a valid block for {}", - &block.name, "TntLikeProperties" + block.name, "TntLikeProperties" ); } let mut block_props = Self::default(block); @@ -511869,7 +511869,7 @@ impl BlockProperties for BrownMushroomBlockLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "BrownMushroomBlockLikeProperties" + block.name, "BrownMushroomBlockLikeProperties" ); } block.states[0].id + self.to_index() @@ -511878,7 +511878,7 @@ impl BlockProperties for BrownMushroomBlockLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "BrownMushroomBlockLikeProperties" ); let min_id = block.states[0].id; @@ -511887,7 +511887,7 @@ impl BlockProperties for BrownMushroomBlockLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -511896,7 +511896,7 @@ impl BlockProperties for BrownMushroomBlockLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "BrownMushroomBlockLikeProperties" + block.name, "BrownMushroomBlockLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -511917,7 +511917,7 @@ impl BlockProperties for BrownMushroomBlockLikeProperties { if !matches!(block.id, 338u16 | 339u16 | 340u16 | 656u16) { panic!( "{} is not a valid block for {}", - &block.name, "BrownMushroomBlockLikeProperties" + block.name, "BrownMushroomBlockLikeProperties" ); } let mut block_props = Self::default(block); @@ -512014,7 +512014,7 @@ impl BlockProperties for GlowLichenLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "GlowLichenLikeProperties" + block.name, "GlowLichenLikeProperties" ); } block.states[0].id + self.to_index() @@ -512023,7 +512023,7 @@ impl BlockProperties for GlowLichenLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "GlowLichenLikeProperties" ); let min_id = block.states[0].id; @@ -512032,7 +512032,7 @@ impl BlockProperties for GlowLichenLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -512041,7 +512041,7 @@ impl BlockProperties for GlowLichenLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "GlowLichenLikeProperties" + block.name, "GlowLichenLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -512066,7 +512066,7 @@ impl BlockProperties for GlowLichenLikeProperties { if !matches!(block.id, 367u16 | 368u16 | 1004u16) { panic!( "{} is not a valid block for {}", - &block.name, "GlowLichenLikeProperties" + block.name, "GlowLichenLikeProperties" ); } let mut block_props = Self::default(block); @@ -512150,7 +512150,7 @@ impl BlockProperties for VineLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "VineLikeProperties" + block.name, "VineLikeProperties" ); } block.states[0].id + self.to_index() @@ -512159,7 +512159,7 @@ impl BlockProperties for VineLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "VineLikeProperties" ); let min_id = block.states[0].id; @@ -512168,7 +512168,7 @@ impl BlockProperties for VineLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -512177,7 +512177,7 @@ impl BlockProperties for VineLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "VineLikeProperties" + block.name, "VineLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -512197,7 +512197,7 @@ impl BlockProperties for VineLikeProperties { if !matches!(block.id, 366u16) { panic!( "{} is not a valid block for {}", - &block.name, "VineLikeProperties" + block.name, "VineLikeProperties" ); } let mut block_props = Self::default(block); @@ -512258,7 +512258,7 @@ impl BlockProperties for EndPortalFrameLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "EndPortalFrameLikeProperties" + block.name, "EndPortalFrameLikeProperties" ); } block.states[0].id + self.to_index() @@ -512267,7 +512267,7 @@ impl BlockProperties for EndPortalFrameLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "EndPortalFrameLikeProperties" ); let min_id = block.states[0].id; @@ -512276,7 +512276,7 @@ impl BlockProperties for EndPortalFrameLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -512285,7 +512285,7 @@ impl BlockProperties for EndPortalFrameLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "EndPortalFrameLikeProperties" + block.name, "EndPortalFrameLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -512302,7 +512302,7 @@ impl BlockProperties for EndPortalFrameLikeProperties { if !matches!(block.id, 392u16) { panic!( "{} is not a valid block for {}", - &block.name, "EndPortalFrameLikeProperties" + block.name, "EndPortalFrameLikeProperties" ); } let mut block_props = Self::default(block); @@ -512374,7 +512374,7 @@ impl BlockProperties for RedstoneOreLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "RedstoneOreLikeProperties" + block.name, "RedstoneOreLikeProperties" ); } block.states[0].id + self.to_index() @@ -512383,7 +512383,7 @@ impl BlockProperties for RedstoneOreLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "RedstoneOreLikeProperties" ); let min_id = block.states[0].id; @@ -512392,7 +512392,7 @@ impl BlockProperties for RedstoneOreLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -512401,7 +512401,7 @@ impl BlockProperties for RedstoneOreLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "RedstoneOreLikeProperties" + block.name, "RedstoneOreLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -512438,7 +512438,7 @@ impl BlockProperties for RedstoneOreLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "RedstoneOreLikeProperties" + block.name, "RedstoneOreLikeProperties" ); } let mut block_props = Self::default(block); @@ -512508,7 +512508,7 @@ impl BlockProperties for CampfireLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CampfireLikeProperties" + block.name, "CampfireLikeProperties" ); } block.states[0].id + self.to_index() @@ -512517,7 +512517,7 @@ impl BlockProperties for CampfireLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "CampfireLikeProperties" ); let min_id = block.states[0].id; @@ -512526,7 +512526,7 @@ impl BlockProperties for CampfireLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -512535,7 +512535,7 @@ impl BlockProperties for CampfireLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CampfireLikeProperties" + block.name, "CampfireLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -512560,7 +512560,7 @@ impl BlockProperties for CampfireLikeProperties { if !matches!(block.id, 859u16 | 860u16) { panic!( "{} is not a valid block for {}", - &block.name, "CampfireLikeProperties" + block.name, "CampfireLikeProperties" ); } let mut block_props = Self::default(block); @@ -512620,7 +512620,7 @@ impl BlockProperties for FurnaceLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "FurnaceLikeProperties" + block.name, "FurnaceLikeProperties" ); } block.states[0].id + self.to_index() @@ -512629,7 +512629,7 @@ impl BlockProperties for FurnaceLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "FurnaceLikeProperties" ); let min_id = block.states[0].id; @@ -512638,7 +512638,7 @@ impl BlockProperties for FurnaceLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -512647,7 +512647,7 @@ impl BlockProperties for FurnaceLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "FurnaceLikeProperties" + block.name, "FurnaceLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -512664,7 +512664,7 @@ impl BlockProperties for FurnaceLikeProperties { if !matches!(block.id, 209u16 | 274u16 | 840u16 | 841u16) { panic!( "{} is not a valid block for {}", - &block.name, "FurnaceLikeProperties" + block.name, "FurnaceLikeProperties" ); } let mut block_props = Self::default(block); @@ -512748,7 +512748,7 @@ impl BlockProperties for CandleLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CandleLikeProperties" + block.name, "CandleLikeProperties" ); } block.states[0].id + self.to_index() @@ -512757,7 +512757,7 @@ impl BlockProperties for CandleLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "CandleLikeProperties" ); let min_id = block.states[0].id; @@ -512766,7 +512766,7 @@ impl BlockProperties for CandleLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -512775,7 +512775,7 @@ impl BlockProperties for CandleLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CandleLikeProperties" + block.name, "CandleLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -512824,7 +512824,7 @@ impl BlockProperties for CandleLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "CandleLikeProperties" + block.name, "CandleLikeProperties" ); } let mut block_props = Self::default(block); @@ -512882,7 +512882,7 @@ impl BlockProperties for PaleHangingMossLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "PaleHangingMossLikeProperties" + block.name, "PaleHangingMossLikeProperties" ); } block.states[0].id + self.to_index() @@ -512891,7 +512891,7 @@ impl BlockProperties for PaleHangingMossLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "PaleHangingMossLikeProperties" ); let min_id = block.states[0].id; @@ -512900,7 +512900,7 @@ impl BlockProperties for PaleHangingMossLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -512909,7 +512909,7 @@ impl BlockProperties for PaleHangingMossLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "PaleHangingMossLikeProperties" + block.name, "PaleHangingMossLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -512923,7 +512923,7 @@ impl BlockProperties for PaleHangingMossLikeProperties { if !matches!(block.id, 1162u16) { panic!( "{} is not a valid block for {}", - &block.name, "PaleHangingMossLikeProperties" + block.name, "PaleHangingMossLikeProperties" ); } let mut block_props = Self::default(block); @@ -512970,7 +512970,7 @@ impl BlockProperties for BubbleColumnLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "BubbleColumnLikeProperties" + block.name, "BubbleColumnLikeProperties" ); } block.states[0].id + self.to_index() @@ -512979,7 +512979,7 @@ impl BlockProperties for BubbleColumnLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "BubbleColumnLikeProperties" ); let min_id = block.states[0].id; @@ -512988,7 +512988,7 @@ impl BlockProperties for BubbleColumnLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -512997,7 +512997,7 @@ impl BlockProperties for BubbleColumnLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "BubbleColumnLikeProperties" + block.name, "BubbleColumnLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -513011,7 +513011,7 @@ impl BlockProperties for BubbleColumnLikeProperties { if !matches!(block.id, 796u16) { panic!( "{} is not a valid block for {}", - &block.name, "BubbleColumnLikeProperties" + block.name, "BubbleColumnLikeProperties" ); } let mut block_props = Self::default(block); @@ -513129,7 +513129,7 @@ impl BlockProperties for OakFenceLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "OakFenceLikeProperties" + block.name, "OakFenceLikeProperties" ); } block.states[0].id + self.to_index() @@ -513138,7 +513138,7 @@ impl BlockProperties for OakFenceLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "OakFenceLikeProperties" ); let min_id = block.states[0].id; @@ -513147,7 +513147,7 @@ impl BlockProperties for OakFenceLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -513156,7 +513156,7 @@ impl BlockProperties for OakFenceLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "OakFenceLikeProperties" + block.name, "OakFenceLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -513220,7 +513220,7 @@ impl BlockProperties for OakFenceLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "OakFenceLikeProperties" + block.name, "OakFenceLikeProperties" ); } let mut block_props = Self::default(block); @@ -513281,7 +513281,7 @@ impl BlockProperties for BarrelLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "BarrelLikeProperties" + block.name, "BarrelLikeProperties" ); } block.states[0].id + self.to_index() @@ -513290,7 +513290,7 @@ impl BlockProperties for BarrelLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "BarrelLikeProperties" ); let min_id = block.states[0].id; @@ -513299,7 +513299,7 @@ impl BlockProperties for BarrelLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -513308,7 +513308,7 @@ impl BlockProperties for BarrelLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "BarrelLikeProperties" + block.name, "BarrelLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -513325,7 +513325,7 @@ impl BlockProperties for BarrelLikeProperties { if !matches!(block.id, 839u16) { panic!( "{} is not a valid block for {}", - &block.name, "BarrelLikeProperties" + block.name, "BarrelLikeProperties" ); } let mut block_props = Self::default(block); @@ -513374,7 +513374,7 @@ impl BlockProperties for SculkCatalystLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "SculkCatalystLikeProperties" + block.name, "SculkCatalystLikeProperties" ); } block.states[0].id + self.to_index() @@ -513383,7 +513383,7 @@ impl BlockProperties for SculkCatalystLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "SculkCatalystLikeProperties" ); let min_id = block.states[0].id; @@ -513392,7 +513392,7 @@ impl BlockProperties for SculkCatalystLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -513401,7 +513401,7 @@ impl BlockProperties for SculkCatalystLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "SculkCatalystLikeProperties" + block.name, "SculkCatalystLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -513415,7 +513415,7 @@ impl BlockProperties for SculkCatalystLikeProperties { if !matches!(block.id, 1005u16) { panic!( "{} is not a valid block for {}", - &block.name, "SculkCatalystLikeProperties" + block.name, "SculkCatalystLikeProperties" ); } let mut block_props = Self::default(block); @@ -513462,7 +513462,7 @@ impl BlockProperties for GrassBlockLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "GrassBlockLikeProperties" + block.name, "GrassBlockLikeProperties" ); } block.states[0].id + self.to_index() @@ -513471,7 +513471,7 @@ impl BlockProperties for GrassBlockLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "GrassBlockLikeProperties" ); let min_id = block.states[0].id; @@ -513480,7 +513480,7 @@ impl BlockProperties for GrassBlockLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -513489,7 +513489,7 @@ impl BlockProperties for GrassBlockLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "GrassBlockLikeProperties" + block.name, "GrassBlockLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -513503,7 +513503,7 @@ impl BlockProperties for GrassBlockLikeProperties { if !matches!(block.id, 8u16 | 11u16 | 373u16) { panic!( "{} is not a valid block for {}", - &block.name, "GrassBlockLikeProperties" + block.name, "GrassBlockLikeProperties" ); } let mut block_props = Self::default(block); @@ -513550,7 +513550,7 @@ impl BlockProperties for StructureBlockLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "StructureBlockLikeProperties" + block.name, "StructureBlockLikeProperties" ); } block.states[0].id + self.to_index() @@ -513559,7 +513559,7 @@ impl BlockProperties for StructureBlockLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "StructureBlockLikeProperties" ); let min_id = block.states[0].id; @@ -513568,7 +513568,7 @@ impl BlockProperties for StructureBlockLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -513577,7 +513577,7 @@ impl BlockProperties for StructureBlockLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "StructureBlockLikeProperties" + block.name, "StructureBlockLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -513591,7 +513591,7 @@ impl BlockProperties for StructureBlockLikeProperties { if !matches!(block.id, 905u16) { panic!( "{} is not a valid block for {}", - &block.name, "StructureBlockLikeProperties" + block.name, "StructureBlockLikeProperties" ); } let mut block_props = Self::default(block); @@ -513666,7 +513666,7 @@ impl BlockProperties for ChestLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "ChestLikeProperties" + block.name, "ChestLikeProperties" ); } block.states[0].id + self.to_index() @@ -513675,7 +513675,7 @@ impl BlockProperties for ChestLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "ChestLikeProperties" ); let min_id = block.states[0].id; @@ -513684,7 +513684,7 @@ impl BlockProperties for ChestLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -513693,7 +513693,7 @@ impl BlockProperties for ChestLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "ChestLikeProperties" + block.name, "ChestLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -513726,7 +513726,7 @@ impl BlockProperties for ChestLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "ChestLikeProperties" + block.name, "ChestLikeProperties" ); } let mut block_props = Self::default(block); @@ -513802,7 +513802,7 @@ impl BlockProperties for CalibratedSculkSensorLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CalibratedSculkSensorLikeProperties" + block.name, "CalibratedSculkSensorLikeProperties" ); } block.states[0].id + self.to_index() @@ -513811,7 +513811,7 @@ impl BlockProperties for CalibratedSculkSensorLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "CalibratedSculkSensorLikeProperties" ); let min_id = block.states[0].id; @@ -513820,7 +513820,7 @@ impl BlockProperties for CalibratedSculkSensorLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -513829,7 +513829,7 @@ impl BlockProperties for CalibratedSculkSensorLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CalibratedSculkSensorLikeProperties" + block.name, "CalibratedSculkSensorLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -513872,7 +513872,7 @@ impl BlockProperties for CalibratedSculkSensorLikeProperties { if !matches!(block.id, 1002u16) { panic!( "{} is not a valid block for {}", - &block.name, "CalibratedSculkSensorLikeProperties" + block.name, "CalibratedSculkSensorLikeProperties" ); } let mut block_props = Self::default(block); @@ -513964,7 +513964,7 @@ impl BlockProperties for SculkSensorLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "SculkSensorLikeProperties" + block.name, "SculkSensorLikeProperties" ); } block.states[0].id + self.to_index() @@ -513973,7 +513973,7 @@ impl BlockProperties for SculkSensorLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "SculkSensorLikeProperties" ); let min_id = block.states[0].id; @@ -513982,7 +513982,7 @@ impl BlockProperties for SculkSensorLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -513991,7 +513991,7 @@ impl BlockProperties for SculkSensorLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "SculkSensorLikeProperties" + block.name, "SculkSensorLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -514033,7 +514033,7 @@ impl BlockProperties for SculkSensorLikeProperties { if !matches!(block.id, 1001u16) { panic!( "{} is not a valid block for {}", - &block.name, "SculkSensorLikeProperties" + block.name, "SculkSensorLikeProperties" ); } let mut block_props = Self::default(block); @@ -514124,7 +514124,7 @@ impl BlockProperties for OakLeavesLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "OakLeavesLikeProperties" + block.name, "OakLeavesLikeProperties" ); } block.states[0].id + self.to_index() @@ -514133,7 +514133,7 @@ impl BlockProperties for OakLeavesLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "OakLeavesLikeProperties" ); let min_id = block.states[0].id; @@ -514142,7 +514142,7 @@ impl BlockProperties for OakLeavesLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -514151,7 +514151,7 @@ impl BlockProperties for OakLeavesLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "OakLeavesLikeProperties" + block.name, "OakLeavesLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -514190,7 +514190,7 @@ impl BlockProperties for OakLeavesLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "OakLeavesLikeProperties" + block.name, "OakLeavesLikeProperties" ); } let mut block_props = Self::default(block); @@ -514251,7 +514251,7 @@ impl BlockProperties for SnifferEggLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "SnifferEggLikeProperties" + block.name, "SnifferEggLikeProperties" ); } block.states[0].id + self.to_index() @@ -514260,7 +514260,7 @@ impl BlockProperties for SnifferEggLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "SnifferEggLikeProperties" ); let min_id = block.states[0].id; @@ -514269,7 +514269,7 @@ impl BlockProperties for SnifferEggLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -514278,7 +514278,7 @@ impl BlockProperties for SnifferEggLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "SnifferEggLikeProperties" + block.name, "SnifferEggLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -514300,7 +514300,7 @@ impl BlockProperties for SnifferEggLikeProperties { if !matches!(block.id, 746u16) { panic!( "{} is not a valid block for {}", - &block.name, "SnifferEggLikeProperties" + block.name, "SnifferEggLikeProperties" ); } let mut block_props = Self::default(block); @@ -514361,7 +514361,7 @@ impl BlockProperties for TurtleEggLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "TurtleEggLikeProperties" + block.name, "TurtleEggLikeProperties" ); } block.states[0].id + self.to_index() @@ -514370,7 +514370,7 @@ impl BlockProperties for TurtleEggLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "TurtleEggLikeProperties" ); let min_id = block.states[0].id; @@ -514379,7 +514379,7 @@ impl BlockProperties for TurtleEggLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -514388,7 +514388,7 @@ impl BlockProperties for TurtleEggLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "TurtleEggLikeProperties" + block.name, "TurtleEggLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -514422,7 +514422,7 @@ impl BlockProperties for TurtleEggLikeProperties { if !matches!(block.id, 745u16) { panic!( "{} is not a valid block for {}", - &block.name, "TurtleEggLikeProperties" + block.name, "TurtleEggLikeProperties" ); } let mut block_props = Self::default(block); @@ -514516,7 +514516,7 @@ impl BlockProperties for OakHangingSignLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "OakHangingSignLikeProperties" + block.name, "OakHangingSignLikeProperties" ); } block.states[0].id + self.to_index() @@ -514525,7 +514525,7 @@ impl BlockProperties for OakHangingSignLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "OakHangingSignLikeProperties" ); let min_id = block.states[0].id; @@ -514534,7 +514534,7 @@ impl BlockProperties for OakHangingSignLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -514543,7 +514543,7 @@ impl BlockProperties for OakHangingSignLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "OakHangingSignLikeProperties" + block.name, "OakHangingSignLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -514599,7 +514599,7 @@ impl BlockProperties for OakHangingSignLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "OakHangingSignLikeProperties" + block.name, "OakHangingSignLikeProperties" ); } let mut block_props = Self::default(block); @@ -514675,7 +514675,7 @@ impl BlockProperties for DaylightDetectorLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "DaylightDetectorLikeProperties" + block.name, "DaylightDetectorLikeProperties" ); } block.states[0].id + self.to_index() @@ -514684,7 +514684,7 @@ impl BlockProperties for DaylightDetectorLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "DaylightDetectorLikeProperties" ); let min_id = block.states[0].id; @@ -514693,7 +514693,7 @@ impl BlockProperties for DaylightDetectorLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -514702,7 +514702,7 @@ impl BlockProperties for DaylightDetectorLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "DaylightDetectorLikeProperties" + block.name, "DaylightDetectorLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -514740,7 +514740,7 @@ impl BlockProperties for DaylightDetectorLikeProperties { if !matches!(block.id, 474u16) { panic!( "{} is not a valid block for {}", - &block.name, "DaylightDetectorLikeProperties" + block.name, "DaylightDetectorLikeProperties" ); } let mut block_props = Self::default(block); @@ -514809,7 +514809,7 @@ impl BlockProperties for WaterCauldronLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "WaterCauldronLikeProperties" + block.name, "WaterCauldronLikeProperties" ); } block.states[0].id + self.to_index() @@ -514818,7 +514818,7 @@ impl BlockProperties for WaterCauldronLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "WaterCauldronLikeProperties" ); let min_id = block.states[0].id; @@ -514827,7 +514827,7 @@ impl BlockProperties for WaterCauldronLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -514836,7 +514836,7 @@ impl BlockProperties for WaterCauldronLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "WaterCauldronLikeProperties" + block.name, "WaterCauldronLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -514858,7 +514858,7 @@ impl BlockProperties for WaterCauldronLikeProperties { if !matches!(block.id, 388u16 | 390u16) { panic!( "{} is not a valid block for {}", - &block.name, "WaterCauldronLikeProperties" + block.name, "WaterCauldronLikeProperties" ); } let mut block_props = Self::default(block); @@ -514933,7 +514933,7 @@ impl BlockProperties for MangrovePropaguleLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "MangrovePropaguleLikeProperties" + block.name, "MangrovePropaguleLikeProperties" ); } block.states[0].id + self.to_index() @@ -514942,7 +514942,7 @@ impl BlockProperties for MangrovePropaguleLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "MangrovePropaguleLikeProperties" ); let min_id = block.states[0].id; @@ -514951,7 +514951,7 @@ impl BlockProperties for MangrovePropaguleLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -514960,7 +514960,7 @@ impl BlockProperties for MangrovePropaguleLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "MangrovePropaguleLikeProperties" + block.name, "MangrovePropaguleLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -514999,7 +514999,7 @@ impl BlockProperties for MangrovePropaguleLikeProperties { if !matches!(block.id, 33u16) { panic!( "{} is not a valid block for {}", - &block.name, "MangrovePropaguleLikeProperties" + block.name, "MangrovePropaguleLikeProperties" ); } let mut block_props = Self::default(block); @@ -515074,7 +515074,7 @@ impl BlockProperties for LanternLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "LanternLikeProperties" + block.name, "LanternLikeProperties" ); } block.states[0].id + self.to_index() @@ -515083,7 +515083,7 @@ impl BlockProperties for LanternLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "LanternLikeProperties" ); let min_id = block.states[0].id; @@ -515092,7 +515092,7 @@ impl BlockProperties for LanternLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -515101,7 +515101,7 @@ impl BlockProperties for LanternLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "LanternLikeProperties" + block.name, "LanternLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -515124,7 +515124,7 @@ impl BlockProperties for LanternLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "LanternLikeProperties" + block.name, "LanternLikeProperties" ); } let mut block_props = Self::default(block); @@ -515173,7 +515173,7 @@ impl BlockProperties for NetherPortalLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "NetherPortalLikeProperties" + block.name, "NetherPortalLikeProperties" ); } block.states[0].id + self.to_index() @@ -515182,7 +515182,7 @@ impl BlockProperties for NetherPortalLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "NetherPortalLikeProperties" ); let min_id = block.states[0].id; @@ -515191,7 +515191,7 @@ impl BlockProperties for NetherPortalLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -515200,7 +515200,7 @@ impl BlockProperties for NetherPortalLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "NetherPortalLikeProperties" + block.name, "NetherPortalLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -515214,7 +515214,7 @@ impl BlockProperties for NetherPortalLikeProperties { if !matches!(block.id, 295u16) { panic!( "{} is not a valid block for {}", - &block.name, "NetherPortalLikeProperties" + block.name, "NetherPortalLikeProperties" ); } let mut block_props = Self::default(block); @@ -515264,7 +515264,7 @@ impl BlockProperties for OakSaplingLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "OakSaplingLikeProperties" + block.name, "OakSaplingLikeProperties" ); } block.states[0].id + self.to_index() @@ -515273,7 +515273,7 @@ impl BlockProperties for OakSaplingLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "OakSaplingLikeProperties" ); let min_id = block.states[0].id; @@ -515282,7 +515282,7 @@ impl BlockProperties for OakSaplingLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -515291,7 +515291,7 @@ impl BlockProperties for OakSaplingLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "OakSaplingLikeProperties" + block.name, "OakSaplingLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -515315,7 +515315,7 @@ impl BlockProperties for OakSaplingLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "OakSaplingLikeProperties" + block.name, "OakSaplingLikeProperties" ); } let mut block_props = Self::default(block); @@ -515388,7 +515388,7 @@ impl BlockProperties for CopperGolemStatueLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CopperGolemStatueLikeProperties" + block.name, "CopperGolemStatueLikeProperties" ); } block.states[0].id + self.to_index() @@ -515397,7 +515397,7 @@ impl BlockProperties for CopperGolemStatueLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "CopperGolemStatueLikeProperties" ); let min_id = block.states[0].id; @@ -515406,7 +515406,7 @@ impl BlockProperties for CopperGolemStatueLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -515415,7 +515415,7 @@ impl BlockProperties for CopperGolemStatueLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CopperGolemStatueLikeProperties" + block.name, "CopperGolemStatueLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -515439,7 +515439,7 @@ impl BlockProperties for CopperGolemStatueLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "CopperGolemStatueLikeProperties" + block.name, "CopperGolemStatueLikeProperties" ); } let mut block_props = Self::default(block); @@ -515491,7 +515491,7 @@ impl BlockProperties for WheatLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "WheatLikeProperties" + block.name, "WheatLikeProperties" ); } block.states[0].id + self.to_index() @@ -515500,7 +515500,7 @@ impl BlockProperties for WheatLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "WheatLikeProperties" ); let min_id = block.states[0].id; @@ -515509,7 +515509,7 @@ impl BlockProperties for WheatLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -515518,7 +515518,7 @@ impl BlockProperties for WheatLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "WheatLikeProperties" + block.name, "WheatLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -515545,7 +515545,7 @@ impl BlockProperties for WheatLikeProperties { if !matches!(block.id, 207u16 | 364u16 | 365u16 | 441u16 | 442u16) { panic!( "{} is not a valid block for {}", - &block.name, "WheatLikeProperties" + block.name, "WheatLikeProperties" ); } let mut block_props = Self::default(block); @@ -515648,7 +515648,7 @@ impl BlockProperties for WallTorchLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "WallTorchLikeProperties" + block.name, "WallTorchLikeProperties" ); } block.states[0].id + self.to_index() @@ -515657,7 +515657,7 @@ impl BlockProperties for WallTorchLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "WallTorchLikeProperties" ); let min_id = block.states[0].id; @@ -515666,7 +515666,7 @@ impl BlockProperties for WallTorchLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -515675,7 +515675,7 @@ impl BlockProperties for WallTorchLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "WallTorchLikeProperties" + block.name, "WallTorchLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -515735,7 +515735,7 @@ impl BlockProperties for WallTorchLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "WallTorchLikeProperties" + block.name, "WallTorchLikeProperties" ); } let mut block_props = Self::default(block); @@ -515791,7 +515791,7 @@ impl BlockProperties for BeeNestLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "BeeNestLikeProperties" + block.name, "BeeNestLikeProperties" ); } block.states[0].id + self.to_index() @@ -515800,7 +515800,7 @@ impl BlockProperties for BeeNestLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "BeeNestLikeProperties" ); let min_id = block.states[0].id; @@ -515809,7 +515809,7 @@ impl BlockProperties for BeeNestLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -515818,7 +515818,7 @@ impl BlockProperties for BeeNestLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "BeeNestLikeProperties" + block.name, "BeeNestLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -515846,7 +515846,7 @@ impl BlockProperties for BeeNestLikeProperties { if !matches!(block.id, 911u16 | 912u16) { panic!( "{} is not a valid block for {}", - &block.name, "BeeNestLikeProperties" + block.name, "BeeNestLikeProperties" ); } let mut block_props = Self::default(block); @@ -515921,7 +515921,7 @@ impl BlockProperties for DecoratedPotLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "DecoratedPotLikeProperties" + block.name, "DecoratedPotLikeProperties" ); } block.states[0].id + self.to_index() @@ -515930,7 +515930,7 @@ impl BlockProperties for DecoratedPotLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "DecoratedPotLikeProperties" ); let min_id = block.states[0].id; @@ -515939,7 +515939,7 @@ impl BlockProperties for DecoratedPotLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -515948,7 +515948,7 @@ impl BlockProperties for DecoratedPotLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "DecoratedPotLikeProperties" + block.name, "DecoratedPotLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -515969,7 +515969,7 @@ impl BlockProperties for DecoratedPotLikeProperties { if !matches!(block.id, 1155u16) { panic!( "{} is not a valid block for {}", - &block.name, "DecoratedPotLikeProperties" + block.name, "DecoratedPotLikeProperties" ); } let mut block_props = Self::default(block); @@ -516067,7 +516067,7 @@ impl BlockProperties for LadderLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "LadderLikeProperties" + block.name, "LadderLikeProperties" ); } block.states[0].id + self.to_index() @@ -516076,7 +516076,7 @@ impl BlockProperties for LadderLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "LadderLikeProperties" ); let min_id = block.states[0].id; @@ -516085,7 +516085,7 @@ impl BlockProperties for LadderLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -516094,7 +516094,7 @@ impl BlockProperties for LadderLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "LadderLikeProperties" + block.name, "LadderLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -516153,7 +516153,7 @@ impl BlockProperties for LadderLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "LadderLikeProperties" + block.name, "LadderLikeProperties" ); } let mut block_props = Self::default(block); @@ -516218,7 +516218,7 @@ impl BlockProperties for BigDripleafLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "BigDripleafLikeProperties" + block.name, "BigDripleafLikeProperties" ); } block.states[0].id + self.to_index() @@ -516227,7 +516227,7 @@ impl BlockProperties for BigDripleafLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "BigDripleafLikeProperties" ); let min_id = block.states[0].id; @@ -516236,7 +516236,7 @@ impl BlockProperties for BigDripleafLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -516245,7 +516245,7 @@ impl BlockProperties for BigDripleafLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "BigDripleafLikeProperties" + block.name, "BigDripleafLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -516266,7 +516266,7 @@ impl BlockProperties for BigDripleafLikeProperties { if !matches!(block.id, 1117u16) { panic!( "{} is not a valid block for {}", - &block.name, "BigDripleafLikeProperties" + block.name, "BigDripleafLikeProperties" ); } let mut block_props = Self::default(block); @@ -516332,7 +516332,7 @@ impl BlockProperties for SmallDripleafLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "SmallDripleafLikeProperties" + block.name, "SmallDripleafLikeProperties" ); } block.states[0].id + self.to_index() @@ -516341,7 +516341,7 @@ impl BlockProperties for SmallDripleafLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "SmallDripleafLikeProperties" ); let min_id = block.states[0].id; @@ -516350,7 +516350,7 @@ impl BlockProperties for SmallDripleafLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -516359,7 +516359,7 @@ impl BlockProperties for SmallDripleafLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "SmallDripleafLikeProperties" + block.name, "SmallDripleafLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -516380,7 +516380,7 @@ impl BlockProperties for SmallDripleafLikeProperties { if !matches!(block.id, 1119u16) { panic!( "{} is not a valid block for {}", - &block.name, "SmallDripleafLikeProperties" + block.name, "SmallDripleafLikeProperties" ); } let mut block_props = Self::default(block); @@ -516439,7 +516439,7 @@ impl BlockProperties for GrindstoneLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "GrindstoneLikeProperties" + block.name, "GrindstoneLikeProperties" ); } block.states[0].id + self.to_index() @@ -516448,7 +516448,7 @@ impl BlockProperties for GrindstoneLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "GrindstoneLikeProperties" ); let min_id = block.states[0].id; @@ -516457,7 +516457,7 @@ impl BlockProperties for GrindstoneLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -516466,7 +516466,7 @@ impl BlockProperties for GrindstoneLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "GrindstoneLikeProperties" + block.name, "GrindstoneLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -516483,7 +516483,7 @@ impl BlockProperties for GrindstoneLikeProperties { if !matches!(block.id, 844u16) { panic!( "{} is not a valid block for {}", - &block.name, "GrindstoneLikeProperties" + block.name, "GrindstoneLikeProperties" ); } let mut block_props = Self::default(block); @@ -516541,7 +516541,7 @@ impl BlockProperties for PinkPetalsLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "PinkPetalsLikeProperties" + block.name, "PinkPetalsLikeProperties" ); } block.states[0].id + self.to_index() @@ -516550,7 +516550,7 @@ impl BlockProperties for PinkPetalsLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "PinkPetalsLikeProperties" ); let min_id = block.states[0].id; @@ -516559,7 +516559,7 @@ impl BlockProperties for PinkPetalsLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -516568,7 +516568,7 @@ impl BlockProperties for PinkPetalsLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "PinkPetalsLikeProperties" + block.name, "PinkPetalsLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -516594,7 +516594,7 @@ impl BlockProperties for PinkPetalsLikeProperties { if !matches!(block.id, 1113u16 | 1114u16) { panic!( "{} is not a valid block for {}", - &block.name, "PinkPetalsLikeProperties" + block.name, "PinkPetalsLikeProperties" ); } let mut block_props = Self::default(block); @@ -516660,7 +516660,7 @@ impl BlockProperties for LeafLitterLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "LeafLitterLikeProperties" + block.name, "LeafLitterLikeProperties" ); } block.states[0].id + self.to_index() @@ -516669,7 +516669,7 @@ impl BlockProperties for LeafLitterLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "LeafLitterLikeProperties" ); let min_id = block.states[0].id; @@ -516678,7 +516678,7 @@ impl BlockProperties for LeafLitterLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -516687,7 +516687,7 @@ impl BlockProperties for LeafLitterLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "LeafLitterLikeProperties" + block.name, "LeafLitterLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -516713,7 +516713,7 @@ impl BlockProperties for LeafLitterLikeProperties { if !matches!(block.id, 1115u16) { panic!( "{} is not a valid block for {}", - &block.name, "LeafLitterLikeProperties" + block.name, "LeafLitterLikeProperties" ); } let mut block_props = Self::default(block); @@ -516779,7 +516779,7 @@ impl BlockProperties for CocoaLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CocoaLikeProperties" + block.name, "CocoaLikeProperties" ); } block.states[0].id + self.to_index() @@ -516788,7 +516788,7 @@ impl BlockProperties for CocoaLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "CocoaLikeProperties" ); let min_id = block.states[0].id; @@ -516797,7 +516797,7 @@ impl BlockProperties for CocoaLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -516806,7 +516806,7 @@ impl BlockProperties for CocoaLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CocoaLikeProperties" + block.name, "CocoaLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -516831,7 +516831,7 @@ impl BlockProperties for CocoaLikeProperties { if !matches!(block.id, 396u16) { panic!( "{} is not a valid block for {}", - &block.name, "CocoaLikeProperties" + block.name, "CocoaLikeProperties" ); } let mut block_props = Self::default(block); @@ -516896,7 +516896,7 @@ impl BlockProperties for RailLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "RailLikeProperties" + block.name, "RailLikeProperties" ); } block.states[0].id + self.to_index() @@ -516905,7 +516905,7 @@ impl BlockProperties for RailLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "RailLikeProperties" ); let min_id = block.states[0].id; @@ -516914,7 +516914,7 @@ impl BlockProperties for RailLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -516923,7 +516923,7 @@ impl BlockProperties for RailLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "RailLikeProperties" + block.name, "RailLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -516943,7 +516943,7 @@ impl BlockProperties for RailLikeProperties { if !matches!(block.id, 222u16) { panic!( "{} is not a valid block for {}", - &block.name, "RailLikeProperties" + block.name, "RailLikeProperties" ); } let mut block_props = Self::default(block); @@ -517001,7 +517001,7 @@ impl BlockProperties for SeaPickleLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "SeaPickleLikeProperties" + block.name, "SeaPickleLikeProperties" ); } block.states[0].id + self.to_index() @@ -517010,7 +517010,7 @@ impl BlockProperties for SeaPickleLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "SeaPickleLikeProperties" ); let min_id = block.states[0].id; @@ -517019,7 +517019,7 @@ impl BlockProperties for SeaPickleLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -517028,7 +517028,7 @@ impl BlockProperties for SeaPickleLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "SeaPickleLikeProperties" + block.name, "SeaPickleLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -517057,7 +517057,7 @@ impl BlockProperties for SeaPickleLikeProperties { if !matches!(block.id, 788u16) { panic!( "{} is not a valid block for {}", - &block.name, "SeaPickleLikeProperties" + block.name, "SeaPickleLikeProperties" ); } let mut block_props = Self::default(block); @@ -517149,7 +517149,7 @@ impl BlockProperties for MangroveRootsLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "MangroveRootsLikeProperties" + block.name, "MangroveRootsLikeProperties" ); } block.states[0].id + self.to_index() @@ -517158,7 +517158,7 @@ impl BlockProperties for MangroveRootsLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "MangroveRootsLikeProperties" ); let min_id = block.states[0].id; @@ -517167,7 +517167,7 @@ impl BlockProperties for MangroveRootsLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -517176,7 +517176,7 @@ impl BlockProperties for MangroveRootsLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "MangroveRootsLikeProperties" + block.name, "MangroveRootsLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -517228,7 +517228,7 @@ impl BlockProperties for MangroveRootsLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "MangroveRootsLikeProperties" + block.name, "MangroveRootsLikeProperties" ); } let mut block_props = Self::default(block); @@ -517298,7 +517298,7 @@ impl BlockProperties for OakSignLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "OakSignLikeProperties" + block.name, "OakSignLikeProperties" ); } block.states[0].id + self.to_index() @@ -517307,7 +517307,7 @@ impl BlockProperties for OakSignLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "OakSignLikeProperties" ); let min_id = block.states[0].id; @@ -517316,7 +517316,7 @@ impl BlockProperties for OakSignLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -517325,7 +517325,7 @@ impl BlockProperties for OakSignLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "OakSignLikeProperties" + block.name, "OakSignLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -517380,7 +517380,7 @@ impl BlockProperties for OakSignLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "OakSignLikeProperties" + block.name, "OakSignLikeProperties" ); } let mut block_props = Self::default(block); @@ -517458,7 +517458,7 @@ impl BlockProperties for AmethystClusterLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "AmethystClusterLikeProperties" + block.name, "AmethystClusterLikeProperties" ); } block.states[0].id + self.to_index() @@ -517467,7 +517467,7 @@ impl BlockProperties for AmethystClusterLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "AmethystClusterLikeProperties" ); let min_id = block.states[0].id; @@ -517476,7 +517476,7 @@ impl BlockProperties for AmethystClusterLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -517485,7 +517485,7 @@ impl BlockProperties for AmethystClusterLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "AmethystClusterLikeProperties" + block.name, "AmethystClusterLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -517505,7 +517505,7 @@ impl BlockProperties for AmethystClusterLikeProperties { if !matches!(block.id, 980u16 | 981u16 | 982u16 | 983u16) { panic!( "{} is not a valid block for {}", - &block.name, "AmethystClusterLikeProperties" + block.name, "AmethystClusterLikeProperties" ); } let mut block_props = Self::default(block); @@ -517563,7 +517563,7 @@ impl BlockProperties for LightLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "LightLikeProperties" + block.name, "LightLikeProperties" ); } block.states[0].id + self.to_index() @@ -517572,7 +517572,7 @@ impl BlockProperties for LightLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "LightLikeProperties" ); let min_id = block.states[0].id; @@ -517581,7 +517581,7 @@ impl BlockProperties for LightLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -517590,7 +517590,7 @@ impl BlockProperties for LightLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "LightLikeProperties" + block.name, "LightLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -517631,7 +517631,7 @@ impl BlockProperties for LightLikeProperties { if !matches!(block.id, 525u16) { panic!( "{} is not a valid block for {}", - &block.name, "LightLikeProperties" + block.name, "LightLikeProperties" ); } let mut block_props = Self::default(block); @@ -517712,7 +517712,7 @@ impl BlockProperties for IronChainLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "IronChainLikeProperties" + block.name, "IronChainLikeProperties" ); } block.states[0].id + self.to_index() @@ -517721,7 +517721,7 @@ impl BlockProperties for IronChainLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "IronChainLikeProperties" ); let min_id = block.states[0].id; @@ -517730,7 +517730,7 @@ impl BlockProperties for IronChainLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -517739,7 +517739,7 @@ impl BlockProperties for IronChainLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "IronChainLikeProperties" + block.name, "IronChainLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -517762,7 +517762,7 @@ impl BlockProperties for IronChainLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "IronChainLikeProperties" + block.name, "IronChainLikeProperties" ); } let mut block_props = Self::default(block); @@ -517820,7 +517820,7 @@ impl BlockProperties for CommandBlockLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CommandBlockLikeProperties" + block.name, "CommandBlockLikeProperties" ); } block.states[0].id + self.to_index() @@ -517829,7 +517829,7 @@ impl BlockProperties for CommandBlockLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "CommandBlockLikeProperties" ); let min_id = block.states[0].id; @@ -517838,7 +517838,7 @@ impl BlockProperties for CommandBlockLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -517847,7 +517847,7 @@ impl BlockProperties for CommandBlockLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "CommandBlockLikeProperties" + block.name, "CommandBlockLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -517867,7 +517867,7 @@ impl BlockProperties for CommandBlockLikeProperties { if !matches!(block.id, 407u16 | 668u16 | 669u16) { panic!( "{} is not a valid block for {}", - &block.name, "CommandBlockLikeProperties" + block.name, "CommandBlockLikeProperties" ); } let mut block_props = Self::default(block); @@ -517919,7 +517919,7 @@ impl BlockProperties for TallSeagrassLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "TallSeagrassLikeProperties" + block.name, "TallSeagrassLikeProperties" ); } block.states[0].id + self.to_index() @@ -517928,7 +517928,7 @@ impl BlockProperties for TallSeagrassLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "TallSeagrassLikeProperties" ); let min_id = block.states[0].id; @@ -517937,7 +517937,7 @@ impl BlockProperties for TallSeagrassLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -517946,7 +517946,7 @@ impl BlockProperties for TallSeagrassLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "TallSeagrassLikeProperties" + block.name, "TallSeagrassLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -517963,7 +517963,7 @@ impl BlockProperties for TallSeagrassLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "TallSeagrassLikeProperties" + block.name, "TallSeagrassLikeProperties" ); } let mut block_props = Self::default(block); @@ -518019,7 +518019,7 @@ impl BlockProperties for PitcherCropLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "PitcherCropLikeProperties" + block.name, "PitcherCropLikeProperties" ); } block.states[0].id + self.to_index() @@ -518028,7 +518028,7 @@ impl BlockProperties for PitcherCropLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "PitcherCropLikeProperties" ); let min_id = block.states[0].id; @@ -518037,7 +518037,7 @@ impl BlockProperties for PitcherCropLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -518046,7 +518046,7 @@ impl BlockProperties for PitcherCropLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "PitcherCropLikeProperties" + block.name, "PitcherCropLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -518073,7 +518073,7 @@ impl BlockProperties for PitcherCropLikeProperties { if !matches!(block.id, 663u16) { panic!( "{} is not a valid block for {}", - &block.name, "PitcherCropLikeProperties" + block.name, "PitcherCropLikeProperties" ); } let mut block_props = Self::default(block); @@ -518149,7 +518149,7 @@ impl BlockProperties for WhiteBannerLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "WhiteBannerLikeProperties" + block.name, "WhiteBannerLikeProperties" ); } block.states[0].id + self.to_index() @@ -518158,7 +518158,7 @@ impl BlockProperties for WhiteBannerLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "WhiteBannerLikeProperties" ); let min_id = block.states[0].id; @@ -518167,7 +518167,7 @@ impl BlockProperties for WhiteBannerLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -518176,7 +518176,7 @@ impl BlockProperties for WhiteBannerLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "WhiteBannerLikeProperties" + block.name, "WhiteBannerLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -518229,7 +518229,7 @@ impl BlockProperties for WhiteBannerLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "WhiteBannerLikeProperties" + block.name, "WhiteBannerLikeProperties" ); } let mut block_props = Self::default(block); @@ -518314,7 +518314,7 @@ impl BlockProperties for EndRodLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "EndRodLikeProperties" + block.name, "EndRodLikeProperties" ); } block.states[0].id + self.to_index() @@ -518323,7 +518323,7 @@ impl BlockProperties for EndRodLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "EndRodLikeProperties" ); let min_id = block.states[0].id; @@ -518332,7 +518332,7 @@ impl BlockProperties for EndRodLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -518341,7 +518341,7 @@ impl BlockProperties for EndRodLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "EndRodLikeProperties" + block.name, "EndRodLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -518375,7 +518375,7 @@ impl BlockProperties for EndRodLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "EndRodLikeProperties" + block.name, "EndRodLikeProperties" ); } let mut block_props = Self::default(block); @@ -518422,7 +518422,7 @@ impl BlockProperties for WaterLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "WaterLikeProperties" + block.name, "WaterLikeProperties" ); } block.states[0].id + self.to_index() @@ -518431,7 +518431,7 @@ impl BlockProperties for WaterLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "WaterLikeProperties" ); let min_id = block.states[0].id; @@ -518440,7 +518440,7 @@ impl BlockProperties for WaterLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -518449,7 +518449,7 @@ impl BlockProperties for WaterLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "WaterLikeProperties" + block.name, "WaterLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -518484,7 +518484,7 @@ impl BlockProperties for WaterLikeProperties { if !matches!(block.id, 35u16 | 36u16) { panic!( "{} is not a valid block for {}", - &block.name, "WaterLikeProperties" + block.name, "WaterLikeProperties" ); } let mut block_props = Self::default(block); @@ -518549,7 +518549,7 @@ impl BlockProperties for KelpLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "KelpLikeProperties" + block.name, "KelpLikeProperties" ); } block.states[0].id + self.to_index() @@ -518558,7 +518558,7 @@ impl BlockProperties for KelpLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "KelpLikeProperties" ); let min_id = block.states[0].id; @@ -518567,7 +518567,7 @@ impl BlockProperties for KelpLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -518576,7 +518576,7 @@ impl BlockProperties for KelpLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "KelpLikeProperties" + block.name, "KelpLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -518621,7 +518621,7 @@ impl BlockProperties for KelpLikeProperties { if !matches!(block.id, 742u16 | 878u16 | 880u16) { panic!( "{} is not a valid block for {}", - &block.name, "KelpLikeProperties" + block.name, "KelpLikeProperties" ); } let mut block_props = Self::default(block); @@ -518696,7 +518696,7 @@ impl BlockProperties for LightWeightedPressurePlateLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "LightWeightedPressurePlateLikeProperties" + block.name, "LightWeightedPressurePlateLikeProperties" ); } block.states[0].id + self.to_index() @@ -518705,7 +518705,7 @@ impl BlockProperties for LightWeightedPressurePlateLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "LightWeightedPressurePlateLikeProperties" ); let min_id = block.states[0].id; @@ -518714,7 +518714,7 @@ impl BlockProperties for LightWeightedPressurePlateLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -518723,7 +518723,7 @@ impl BlockProperties for LightWeightedPressurePlateLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "LightWeightedPressurePlateLikeProperties" + block.name, "LightWeightedPressurePlateLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -518758,7 +518758,7 @@ impl BlockProperties for LightWeightedPressurePlateLikeProperties { if !matches!(block.id, 471u16 | 472u16 | 910u16) { panic!( "{} is not a valid block for {}", - &block.name, "LightWeightedPressurePlateLikeProperties" + block.name, "LightWeightedPressurePlateLikeProperties" ); } let mut block_props = Self::default(block); @@ -518823,7 +518823,7 @@ impl BlockProperties for TestBlockLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "TestBlockLikeProperties" + block.name, "TestBlockLikeProperties" ); } block.states[0].id + self.to_index() @@ -518832,7 +518832,7 @@ impl BlockProperties for TestBlockLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "TestBlockLikeProperties" ); let min_id = block.states[0].id; @@ -518841,7 +518841,7 @@ impl BlockProperties for TestBlockLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -518850,7 +518850,7 @@ impl BlockProperties for TestBlockLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "TestBlockLikeProperties" + block.name, "TestBlockLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -518864,7 +518864,7 @@ impl BlockProperties for TestBlockLikeProperties { if !matches!(block.id, 907u16) { panic!( "{} is not a valid block for {}", - &block.name, "TestBlockLikeProperties" + block.name, "TestBlockLikeProperties" ); } let mut block_props = Self::default(block); @@ -518911,7 +518911,7 @@ impl BlockProperties for TorchflowerCropLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "TorchflowerCropLikeProperties" + block.name, "TorchflowerCropLikeProperties" ); } block.states[0].id + self.to_index() @@ -518920,7 +518920,7 @@ impl BlockProperties for TorchflowerCropLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "TorchflowerCropLikeProperties" ); let min_id = block.states[0].id; @@ -518929,7 +518929,7 @@ impl BlockProperties for TorchflowerCropLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -518938,7 +518938,7 @@ impl BlockProperties for TorchflowerCropLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "TorchflowerCropLikeProperties" + block.name, "TorchflowerCropLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -518959,7 +518959,7 @@ impl BlockProperties for TorchflowerCropLikeProperties { if !matches!(block.id, 662u16) { panic!( "{} is not a valid block for {}", - &block.name, "TorchflowerCropLikeProperties" + block.name, "TorchflowerCropLikeProperties" ); } let mut block_props = Self::default(block); @@ -519010,7 +519010,7 @@ impl BlockProperties for NetherWartLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "NetherWartLikeProperties" + block.name, "NetherWartLikeProperties" ); } block.states[0].id + self.to_index() @@ -519019,7 +519019,7 @@ impl BlockProperties for NetherWartLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "NetherWartLikeProperties" ); let min_id = block.states[0].id; @@ -519028,7 +519028,7 @@ impl BlockProperties for NetherWartLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -519037,7 +519037,7 @@ impl BlockProperties for NetherWartLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "NetherWartLikeProperties" + block.name, "NetherWartLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -519060,7 +519060,7 @@ impl BlockProperties for NetherWartLikeProperties { if !matches!(block.id, 384u16 | 665u16 | 670u16 | 861u16) { panic!( "{} is not a valid block for {}", - &block.name, "NetherWartLikeProperties" + block.name, "NetherWartLikeProperties" ); } let mut block_props = Self::default(block); @@ -519173,7 +519173,7 @@ impl BlockProperties for PaleOakWoodLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "PaleOakWoodLikeProperties" + block.name, "PaleOakWoodLikeProperties" ); } block.states[0].id + self.to_index() @@ -519182,7 +519182,7 @@ impl BlockProperties for PaleOakWoodLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "PaleOakWoodLikeProperties" ); let min_id = block.states[0].id; @@ -519191,7 +519191,7 @@ impl BlockProperties for PaleOakWoodLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -519200,7 +519200,7 @@ impl BlockProperties for PaleOakWoodLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "PaleOakWoodLikeProperties" + block.name, "PaleOakWoodLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -519274,7 +519274,7 @@ impl BlockProperties for PaleOakWoodLikeProperties { ) { panic!( "{} is not a valid block for {}", - &block.name, "PaleOakWoodLikeProperties" + block.name, "PaleOakWoodLikeProperties" ); } let mut block_props = Self::default(block); @@ -519321,7 +519321,7 @@ impl BlockProperties for JigsawLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "JigsawLikeProperties" + block.name, "JigsawLikeProperties" ); } block.states[0].id + self.to_index() @@ -519330,7 +519330,7 @@ impl BlockProperties for JigsawLikeProperties { debug_assert!( Self::handles_block_id(block.id), "{} is not a valid block for {}", - &block.name, + block.name, "JigsawLikeProperties" ); let min_id = block.states[0].id; @@ -519339,7 +519339,7 @@ impl BlockProperties for JigsawLikeProperties { Self::from_index(state_id - min_id) } else { #[cfg(debug_assertions)] - panic!("State ID {} does not exist for {}", state_id, &block.name); + panic!("State ID {} does not exist for {}", state_id, block.name); #[cfg(not(debug_assertions))] Self::from_index(0) } @@ -519348,7 +519348,7 @@ impl BlockProperties for JigsawLikeProperties { if !Self::handles_block_id(block.id) { panic!( "{} is not a valid block for {}", - &block.name, "JigsawLikeProperties" + block.name, "JigsawLikeProperties" ); } Self::from_state_id(block.default_state.id, block) @@ -519362,7 +519362,7 @@ impl BlockProperties for JigsawLikeProperties { if !matches!(block.id, 906u16) { panic!( "{} is not a valid block for {}", - &block.name, "JigsawLikeProperties" + block.name, "JigsawLikeProperties" ); } let mut block_props = Self::default(block); diff --git a/pumpkin-data/src/generated/fluid.rs b/pumpkin-data/src/generated/fluid.rs index 698552277..33c141c12 100644 --- a/pumpkin-data/src/generated/fluid.rs +++ b/pumpkin-data/src/generated/fluid.rs @@ -907,7 +907,7 @@ impl FluidProperties for WaterLikeFluidProperties { if !["water", "lava"].contains(&fluid.name) { panic!( "{} is not a valid fluid for {}", - &fluid.name, "WaterLikeFluidProperties" + fluid.name, "WaterLikeFluidProperties" ); } let prop_index = self.to_index(); @@ -921,7 +921,7 @@ impl FluidProperties for WaterLikeFluidProperties { if !["water", "lava"].contains(&fluid.name) { panic!( "{} is not a valid fluid for {}", - &fluid.name, "WaterLikeFluidProperties" + fluid.name, "WaterLikeFluidProperties" ); } for (idx, state) in fluid.states.iter().enumerate() { @@ -935,7 +935,7 @@ impl FluidProperties for WaterLikeFluidProperties { if !["water", "lava"].contains(&fluid.name) { panic!( "{} is not a valid fluid for {}", - &fluid.name, "WaterLikeFluidProperties" + fluid.name, "WaterLikeFluidProperties" ); } Self::from_state_id(fluid.default_state_index, fluid) @@ -947,7 +947,7 @@ impl FluidProperties for WaterLikeFluidProperties { if !["water", "lava"].contains(&fluid.name) { panic!( "{} is not a valid fluid for {}", - &fluid.name, "WaterLikeFluidProperties" + fluid.name, "WaterLikeFluidProperties" ); } let mut fluid_props = Self::default(fluid); @@ -995,7 +995,7 @@ impl FluidProperties for FlowingWaterLikeFluidProperties { if !["flowing_water", "flowing_lava"].contains(&fluid.name) { panic!( "{} is not a valid fluid for {}", - &fluid.name, "FlowingWaterLikeFluidProperties" + fluid.name, "FlowingWaterLikeFluidProperties" ); } let prop_index = self.to_index(); @@ -1009,7 +1009,7 @@ impl FluidProperties for FlowingWaterLikeFluidProperties { if !["flowing_water", "flowing_lava"].contains(&fluid.name) { panic!( "{} is not a valid fluid for {}", - &fluid.name, "FlowingWaterLikeFluidProperties" + fluid.name, "FlowingWaterLikeFluidProperties" ); } for (idx, state) in fluid.states.iter().enumerate() { @@ -1023,7 +1023,7 @@ impl FluidProperties for FlowingWaterLikeFluidProperties { if !["flowing_water", "flowing_lava"].contains(&fluid.name) { panic!( "{} is not a valid fluid for {}", - &fluid.name, "FlowingWaterLikeFluidProperties" + fluid.name, "FlowingWaterLikeFluidProperties" ); } Self::from_state_id(fluid.default_state_index, fluid) @@ -1038,7 +1038,7 @@ impl FluidProperties for FlowingWaterLikeFluidProperties { if !["flowing_water", "flowing_lava"].contains(&fluid.name) { panic!( "{} is not a valid fluid for {}", - &fluid.name, "FlowingWaterLikeFluidProperties" + fluid.name, "FlowingWaterLikeFluidProperties" ); } let mut fluid_props = Self::default(fluid); diff --git a/pumpkin-plugin-api/Cargo.toml b/pumpkin-plugin-api/Cargo.toml index 38cb4fafa..812cb24eb 100644 --- a/pumpkin-plugin-api/Cargo.toml +++ b/pumpkin-plugin-api/Cargo.toml @@ -10,6 +10,8 @@ wit-bindgen = { workspace = true } tracing = { workspace = true } postcard = { workspace = true } tracing-serde-structured = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } [package.metadata.component] target = { path = "../pumpkin-plugin-wit" } diff --git a/pumpkin-plugin-api/src/events/player/bedrock_form_response.rs b/pumpkin-plugin-api/src/events/player/bedrock_form_response.rs new file mode 100644 index 000000000..6ff9583c4 --- /dev/null +++ b/pumpkin-plugin-api/src/events/player/bedrock_form_response.rs @@ -0,0 +1,21 @@ +use crate::wit::pumpkin::plugin::event::{BedrockFormResponseEventData, Event, EventType}; + +use super::super::FromIntoEvent; + +/// An event that occurs when a player responds to a Bedrock custom form. +pub struct BedrockFormResponseEvent; +impl FromIntoEvent for BedrockFormResponseEvent { + const EVENT_TYPE: EventType = EventType::BedrockFormResponseEvent; + type Data = BedrockFormResponseEventData; + + fn data_from_event(event: Event) -> Self::Data { + match event { + Event::BedrockFormResponseEvent(data) => data, + _ => panic!("unexpected event"), + } + } + + fn data_into_event(data: Self::Data) -> Event { + Event::BedrockFormResponseEvent(data) + } +} diff --git a/pumpkin-plugin-api/src/events/player/mod.rs b/pumpkin-plugin-api/src/events/player/mod.rs index b48da803e..fb51d54bc 100644 --- a/pumpkin-plugin-api/src/events/player/mod.rs +++ b/pumpkin-plugin-api/src/events/player/mod.rs @@ -1,3 +1,4 @@ +pub mod bedrock_form_response; pub mod changed_main_hand; pub mod egg_throw; pub mod exp_change; diff --git a/pumpkin-plugin-api/src/forms.rs b/pumpkin-plugin-api/src/forms.rs new file mode 100644 index 000000000..8ef5d0013 --- /dev/null +++ b/pumpkin-plugin-api/src/forms.rs @@ -0,0 +1,218 @@ +use crate::player::Player; +use crate::text::TextComponent; +use crate::wit::pumpkin::plugin::forms::{ + self as wit_forms, CustomForm, CustomFormElement, Form, FormImage, ImageType, ModalForm, + SimpleForm, SimpleFormButton, +}; + +pub struct SimpleFormBuilder { + title: TextComponent, + content: TextComponent, + buttons: Vec, +} + +impl SimpleFormBuilder { + pub fn new(title: impl Into, content: impl Into) -> Self { + Self { + title: title.into(), + content: content.into(), + buttons: Vec::new(), + } + } + + pub fn button(mut self, text: impl Into, image: Option) -> Self { + self.buttons.push(SimpleFormButton { + text: text.into(), + image, + }); + self + } + + pub fn build(self) -> Form { + Form::Simple(SimpleForm { + title: self.title, + content: self.content, + buttons: self.buttons, + }) + } +} + +pub struct ModalFormBuilder { + title: TextComponent, + content: TextComponent, + button1: TextComponent, + button2: TextComponent, +} + +impl ModalFormBuilder { + pub fn new(title: impl Into, content: impl Into) -> Self { + Self { + title: title.into(), + content: content.into(), + button1: TextComponent::text("Yes"), + button2: TextComponent::text("No"), + } + } + + pub fn button1(mut self, text: impl Into) -> Self { + self.button1 = text.into(); + self + } + + pub fn button2(mut self, text: impl Into) -> Self { + self.button2 = text.into(); + self + } + + pub fn build(self) -> Form { + Form::Modal(ModalForm { + title: self.title, + content: self.content, + button1: self.button1, + button2: self.button2, + }) + } +} + +pub struct CustomFormBuilder { + title: TextComponent, + elements: Vec, +} + +impl CustomFormBuilder { + pub fn new(title: impl Into) -> Self { + Self { + title: title.into(), + elements: Vec::new(), + } + } + + pub fn label(mut self, text: impl Into) -> Self { + self.elements.push(CustomFormElement::Label(text.into())); + self + } + + pub fn toggle(mut self, text: impl Into, default: bool) -> Self { + self.elements + .push(CustomFormElement::Toggle((text.into(), default))); + self + } + + pub fn slider( + mut self, + text: impl Into, + min: f32, + max: f32, + step: f32, + default: f32, + ) -> Self { + self.elements.push(CustomFormElement::Slider(( + text.into(), + min, + max, + step, + default, + ))); + self + } + + pub fn step_slider( + mut self, + text: impl Into, + steps: Vec, + default: u32, + ) -> Self { + self.elements + .push(CustomFormElement::StepSlider((text.into(), steps, default))); + self + } + + pub fn dropdown( + mut self, + text: impl Into, + options: Vec, + default: u32, + ) -> Self { + self.elements + .push(CustomFormElement::Dropdown((text.into(), options, default))); + self + } + + pub fn input( + mut self, + text: impl Into, + placeholder: impl Into, + default: impl Into, + ) -> Self { + self.elements.push(CustomFormElement::Input(( + text.into(), + placeholder.into(), + default.into(), + ))); + self + } + + pub fn build(self) -> Form { + Form::Custom(CustomForm { + title: self.title, + elements: self.elements, + }) + } +} + +pub fn send_form(player: Player, form: Form) -> u32 { + wit_forms::send_form(player, form) +} + +pub fn url_image(url: impl Into) -> FormImage { + FormImage { + type_: ImageType::Url, + data: url.into(), + } +} + +pub fn path_image(path: impl Into) -> FormImage { + FormImage { + type_: ImageType::Path, + data: path.into(), + } +} + +pub enum FormResponse { + Simple(u32), + Modal(bool), + Custom(Vec), + Closed, +} + +impl FormResponse { + pub fn parse(data: Option) -> Self { + match data { + None => Self::Closed, + Some(s) => { + if let Ok(val) = serde_json::from_str::(&s) { + if val.is_u64() { + Self::Simple(val.as_u64().unwrap() as u32) + } else if val.is_boolean() { + Self::Modal(val.as_bool().unwrap()) + } else if val.is_array() { + Self::Custom(val.as_array().unwrap().clone()) + } else { + Self::Closed // Or some error state + } + } else { + // Fallback for some clients that might send raw strings for simple/modal + if s == "true" { + Self::Modal(true) + } else if s == "false" { + Self::Modal(false) + } else if let Ok(idx) = s.parse::() { + Self::Simple(idx) + } else { + Self::Closed + } + } + } + } + } +} diff --git a/pumpkin-plugin-api/src/lib.rs b/pumpkin-plugin-api/src/lib.rs index 38a1e79da..2dfe42489 100644 --- a/pumpkin-plugin-api/src/lib.rs +++ b/pumpkin-plugin-api/src/lib.rs @@ -35,6 +35,7 @@ use crate::{ pub mod commands; pub mod events; +pub mod forms; /// Constants for plugin permissions. /// /// Use these in your `PluginMetadata` to request access to specific host features. diff --git a/pumpkin-plugin-wit/v0.1/event.wit b/pumpkin-plugin-wit/v0.1/event.wit index 62684ecea..496cfe020 100644 --- a/pumpkin-plugin-wit/v0.1/event.wit +++ b/pumpkin-plugin-wit/v0.1/event.wit @@ -258,6 +258,13 @@ interface event { can-build: bool, cancelled: bool } + + record bedrock-form-response-event-data { + player: player, + form-id: u32, + response-data: option, + } + record server-command-event-data { command: string, cancelled: bool @@ -321,6 +328,7 @@ interface event { block-can-build-event, block-grow-event, block-place-event, + bedrock-form-response-event, server-command-event, spawn-change-event, server-broadcast-event, @@ -358,6 +366,7 @@ interface event { block-can-build-event(block-can-build-event-data), block-grow-event(block-grow-event-data), block-place-event(block-place-event-data), + bedrock-form-response-event(bedrock-form-response-event-data), server-command-event(server-command-event-data), spawn-change-event(spawn-change-event-data), server-broadcast-event(server-broadcast-event-data), diff --git a/pumpkin-plugin-wit/v0.1/forms.wit b/pumpkin-plugin-wit/v0.1/forms.wit new file mode 100644 index 000000000..abaae5337 --- /dev/null +++ b/pumpkin-plugin-wit/v0.1/forms.wit @@ -0,0 +1,54 @@ +interface forms { + use player.{player}; + use text.{text-component}; + + enum image-type { + url, + path, + } + + record form-image { + %type: image-type, + data: string, + } + + record simple-form-button { + text: text-component, + image: option, + } + + record simple-form { + title: text-component, + content: text-component, + buttons: list, + } + + record modal-form { + title: text-component, + content: text-component, + button1: text-component, + button2: text-component, + } + + variant custom-form-element { + label(text-component), + toggle(tuple), + slider(tuple), // text, min, max, step, default + step-slider(tuple, u32>), // text, steps, default + dropdown(tuple, u32>), // text, options, default + input(tuple), // text, placeholder, default + } + + record custom-form { + title: text-component, + elements: list, + } + + variant form { + simple(simple-form), + modal(modal-form), + custom(custom-form), + } + + send-form: func(player: player, form: form) -> u32; +} diff --git a/pumpkin-plugin-wit/v0.1/plugin.wit b/pumpkin-plugin-wit/v0.1/plugin.wit index 80bf6b193..29be8de0d 100644 --- a/pumpkin-plugin-wit/v0.1/plugin.wit +++ b/pumpkin-plugin-wit/v0.1/plugin.wit @@ -35,6 +35,8 @@ world plugin { import entity; /// Provides boss bar creation and management. import boss-bar; + /// Provides Bedrock custom forms. + import forms; // --- Plugin-provided exports --- diff --git a/pumpkin-protocol/src/bedrock/client/mod.rs b/pumpkin-protocol/src/bedrock/client/mod.rs index 484ba1a8d..6090fde18 100644 --- a/pumpkin-protocol/src/bedrock/client/mod.rs +++ b/pumpkin-protocol/src/bedrock/client/mod.rs @@ -9,6 +9,7 @@ pub mod handshake; pub mod inventory_content; pub mod level_chunk; pub mod level_event; +pub mod modal_form_request; pub mod move_player; pub mod network_chunk_publisher_update; pub mod network_settings; @@ -38,6 +39,7 @@ pub use handshake::*; pub use inventory_content::*; pub use level_chunk::*; pub use level_event::*; +pub use modal_form_request::*; pub use move_player::*; pub use network_chunk_publisher_update::*; pub use network_settings::*; diff --git a/pumpkin-protocol/src/bedrock/client/modal_form_request.rs b/pumpkin-protocol/src/bedrock/client/modal_form_request.rs new file mode 100644 index 000000000..1959f29bf --- /dev/null +++ b/pumpkin-protocol/src/bedrock/client/modal_form_request.rs @@ -0,0 +1,9 @@ +use crate::{codec::var_int::VarInt, serial::PacketWrite}; +use pumpkin_macros::packet; + +#[packet(100)] +#[derive(PacketWrite)] +pub struct CModalFormRequest { + pub form_id: VarInt, + pub form_data: String, +} diff --git a/pumpkin-protocol/src/bedrock/server/mod.rs b/pumpkin-protocol/src/bedrock/server/mod.rs index 3c07fe936..21d2cf084 100644 --- a/pumpkin-protocol/src/bedrock/server/mod.rs +++ b/pumpkin-protocol/src/bedrock/server/mod.rs @@ -5,6 +5,7 @@ pub mod container_close; pub mod interaction; pub mod loading_screen; pub mod login; +pub mod modal_form_response; pub mod player_action; pub mod player_auth_input; pub mod raknet; diff --git a/pumpkin-protocol/src/bedrock/server/modal_form_response.rs b/pumpkin-protocol/src/bedrock/server/modal_form_response.rs new file mode 100644 index 000000000..ffa15e3da --- /dev/null +++ b/pumpkin-protocol/src/bedrock/server/modal_form_response.rs @@ -0,0 +1,18 @@ +use crate::codec::var_int::VarInt; +use crate::serial::PacketRead; +use pumpkin_macros::packet; +use std::io::{Error, Read}; + +#[packet(101)] +pub struct SModalFormResponse { + pub form_id: VarInt, + pub form_data: Option, +} + +impl PacketRead for SModalFormResponse { + fn read(reader: &mut R) -> Result { + let form_id = VarInt::read(reader)?; + let form_data = Option::::read(reader)?; + Ok(Self { form_id, form_data }) + } +} diff --git a/pumpkin-protocol/src/lib.rs b/pumpkin-protocol/src/lib.rs index b94130a65..a0aa1ebe1 100644 --- a/pumpkin-protocol/src/lib.rs +++ b/pumpkin-protocol/src/lib.rs @@ -110,7 +110,7 @@ impl<'de, T: Deserialize<'de>> Visitor<'de> for IdOrVisitor { })?); } IdOrStateDeserializer::Id(id) => { - debug_assert!(*id == 0); + debug_assert_eq!(*id, 0); // Get the data let value = T::deserialize(deserializer)?; *self = IdOrStateDeserializer::Value(value); diff --git a/pumpkin-util/src/noise/perlin.rs b/pumpkin-util/src/noise/perlin.rs index 0dab6a6b1..909535220 100644 --- a/pumpkin-util/src/noise/perlin.rs +++ b/pumpkin-util/src/noise/perlin.rs @@ -226,7 +226,6 @@ impl PerlinNoiseSampler { } /// Data for a single octave in an octave Perlin noise sampler. -#[derive(Clone)] pub struct SamplerData { /// The Perlin noise sampler for this octave. pub sampler: PerlinNoiseSampler, @@ -243,7 +242,6 @@ pub struct SamplerData { /// Octave noise, also known as fractal noise, combines multiple octaves of Perlin noise /// with different frequencies and amplitudes to create more complex, natural-looking patterns. /// Each octave adds finer detail to the overall noise. -#[derive(Clone)] pub struct OctavePerlinNoiseSampler { /// The list of samplers for each octave, with their associated parameters. pub samplers: Box<[SamplerData]>, diff --git a/pumpkin-util/src/random/xoroshiro128.rs b/pumpkin-util/src/random/xoroshiro128.rs index bf39c61c8..46b7690bf 100644 --- a/pumpkin-util/src/random/xoroshiro128.rs +++ b/pumpkin-util/src/random/xoroshiro128.rs @@ -216,7 +216,6 @@ impl RandomImpl for Xoroshiro { /// This struct allows for deterministic creation of multiple independent /// random generators from a single seed, which is essential for /// parallelizable world generation. -#[derive(Clone)] pub struct XoroshiroSplitter { /// Lower 64 bits of the splitter state. lo: u64, diff --git a/pumpkin-world/Cargo.toml b/pumpkin-world/Cargo.toml index 2edc291b7..447956b60 100644 --- a/pumpkin-world/Cargo.toml +++ b/pumpkin-world/Cargo.toml @@ -79,8 +79,6 @@ harness = false name = "noise_router" harness = false -[features] -tokio_taskdump = [] # [lints] # workspace = true diff --git a/pumpkin-world/src/biome/mod.rs b/pumpkin-world/src/biome/mod.rs index b3bb0c15d..50336eb4f 100644 --- a/pumpkin-world/src/biome/mod.rs +++ b/pumpkin-world/src/biome/mod.rs @@ -19,7 +19,6 @@ pub trait BiomeSupplier { fn biome(&self, x: i32, y: i32, z: i32, noise: &mut MultiNoiseSampler<'_>) -> &'static Biome; } -#[derive(Clone, Copy)] pub struct MultiNoiseBiomeSupplier { source: &'static BiomeTree, } diff --git a/pumpkin-world/src/biome/multi_noise.rs b/pumpkin-world/src/biome/multi_noise.rs index 41856e93e..ca85253ae 100644 --- a/pumpkin-world/src/biome/multi_noise.rs +++ b/pumpkin-world/src/biome/multi_noise.rs @@ -5,7 +5,7 @@ pub const fn to_long(float: f32) -> i64 { (float * 10000f32) as i64 } -#[derive(Clone, Serialize, Deserialize, Debug, PartialEq, Eq)] +#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)] pub struct NoiseValuePoint { pub temperature: i64, pub humidity: i64, diff --git a/pumpkin-world/src/chunk_system/schedule.rs b/pumpkin-world/src/chunk_system/schedule.rs index 95e3af032..b6da05290 100644 --- a/pumpkin-world/src/chunk_system/schedule.rs +++ b/pumpkin-world/src/chunk_system/schedule.rs @@ -586,42 +586,42 @@ impl GenerationSchedule { } } - fn save_all_chunk(&self, save_proto_chunk: bool) { + fn save_all_chunk(&mut self, save_proto_chunk: bool) { let mut chunks = Vec::with_capacity(self.chunk_map.len()); - for (pos, holder) in &self.chunk_map { - if let Some(chunk) = &holder.chunk { - match chunk { - Chunk::Level(sync_chunk) => { - if sync_chunk.is_dirty() { - chunks.push((*pos, Chunk::Level(sync_chunk.clone()))); - } - } - Chunk::Proto(proto) => { - if save_proto_chunk { - chunks.push((*pos, Chunk::Proto(proto.clone()))); - } - } + + for (pos, holder) in self.chunk_map.iter_mut() { + if let Some(chunk) = holder.chunk.take() { + let should_save = match &chunk { + Chunk::Level(sync_chunk) => sync_chunk.is_dirty(), + Chunk::Proto(_) => save_proto_chunk, + }; + + if should_save { + chunks.push((*pos, chunk)); + } else { + holder.chunk = Some(chunk); } } } + if chunks.is_empty() { return; } + info!( "Saving {} chunks (collected from {} holders)...", chunks.len(), self.chunk_map.len() ); + let mut data = self.io_lock.0.lock().unwrap(); - for (pos, _chunk) in &chunks { + for (pos, _) in &chunks { *data.entry(*pos).or_insert(0) += 1; } drop(data); + if let Err(e) = self.io_write.send(chunks) { - error!( - "Failed to send chunks to io write thread during unload (may have shut down): {:?}", - e - ); + error!("Failed to send chunks to io write thread: {:?}", e); } } diff --git a/pumpkin-world/src/generation/carver/mask.rs b/pumpkin-world/src/generation/carver/mask.rs index 5c84f0d37..f9ccd2773 100644 --- a/pumpkin-world/src/generation/carver/mask.rs +++ b/pumpkin-world/src/generation/carver/mask.rs @@ -1,4 +1,3 @@ -#[derive(Clone)] pub struct CarvingMask { min_y: i32, mask: Vec, diff --git a/pumpkin-world/src/generation/feature/features/spring_feature.rs b/pumpkin-world/src/generation/feature/features/spring_feature.rs index e61044ff3..1a445d3d0 100644 --- a/pumpkin-world/src/generation/feature/features/spring_feature.rs +++ b/pumpkin-world/src/generation/feature/features/spring_feature.rs @@ -12,7 +12,6 @@ pub struct SpringFeatureFeature { pub valid_blocks: BlockWrapper, } -#[derive(Clone)] pub enum BlockWrapper { Single(String), Multi(Vec), diff --git a/pumpkin-world/src/generation/noise/perlin.rs b/pumpkin-world/src/generation/noise/perlin.rs index eea185697..145d84e04 100644 --- a/pumpkin-world/src/generation/noise/perlin.rs +++ b/pumpkin-world/src/generation/noise/perlin.rs @@ -1,7 +1,6 @@ use pumpkin_data::chunk::DoublePerlinNoiseParameters; use pumpkin_util::{noise::perlin::OctavePerlinNoiseSampler, random::RandomImpl}; -#[derive(Clone)] pub struct DoublePerlinNoiseSampler { first_sampler: OctavePerlinNoiseSampler, second_sampler: OctavePerlinNoiseSampler, diff --git a/pumpkin-world/src/generation/noise/router/chunk_density_function.rs b/pumpkin-world/src/generation/noise/router/chunk_density_function.rs index 63ed58d54..6db7d0faa 100644 --- a/pumpkin-world/src/generation/noise/router/chunk_density_function.rs +++ b/pumpkin-world/src/generation/noise/router/chunk_density_function.rs @@ -472,7 +472,6 @@ impl FlatCache { } } -#[derive(Clone)] pub struct Cache2D { pub(crate) input_index: usize, last_sample_column: u64, diff --git a/pumpkin-world/src/generation/noise/router/density_function/math.rs b/pumpkin-world/src/generation/noise/router/density_function/math.rs index 05524df8c..c220282f3 100644 --- a/pumpkin-world/src/generation/noise/router/density_function/math.rs +++ b/pumpkin-world/src/generation/noise/router/density_function/math.rs @@ -10,7 +10,6 @@ use super::{ IndexToNoisePos, NoiseFunctionComponentRange, StaticIndependentChunkNoiseFunctionComponentImpl, }; -#[derive(Clone)] pub struct Constant { value: f64, } @@ -43,7 +42,6 @@ impl StaticIndependentChunkNoiseFunctionComponentImpl for Constant { } } -#[derive(Clone)] pub struct Linear { pub(crate) input_index: usize, min_value: f64, @@ -95,7 +93,6 @@ impl Linear { } } -#[derive(Clone)] pub struct Binary { pub(crate) input1_index: usize, pub(crate) input2_index: usize, @@ -275,7 +272,6 @@ impl Binary { } } -#[derive(Clone)] pub struct Unary { pub(crate) input_index: usize, min_value: f64, @@ -345,7 +341,6 @@ impl Unary { } } -#[derive(Clone)] pub struct Clamp { input_index: usize, data: &'static ClampData, diff --git a/pumpkin-world/src/generation/noise/router/density_function/misc.rs b/pumpkin-world/src/generation/noise/router/density_function/misc.rs index 2ad0473da..57b90df94 100644 --- a/pumpkin-world/src/generation/noise/router/density_function/misc.rs +++ b/pumpkin-world/src/generation/noise/router/density_function/misc.rs @@ -21,7 +21,6 @@ use super::{ IndexToNoisePos, NoiseFunctionComponentRange, StaticIndependentChunkNoiseFunctionComponentImpl, }; -#[derive(Clone)] pub struct EndIsland { sampler: Arc, } @@ -170,7 +169,6 @@ impl NoiseFunctionComponentRange for WeirdScaled { } } -#[derive(Clone)] pub struct ClampedYGradient { data: &'static ClampedYGradientData, } @@ -205,7 +203,6 @@ impl StaticIndependentChunkNoiseFunctionComponentImpl for ClampedYGradient { } } -#[derive(Clone)] pub struct RangeChoice { input_index: usize, pub(crate) when_in_index: usize, diff --git a/pumpkin-world/src/generation/noise/router/density_function/mod.rs b/pumpkin-world/src/generation/noise/router/density_function/mod.rs index f9408c141..11bba0422 100644 --- a/pumpkin-world/src/generation/noise/router/density_function/mod.rs +++ b/pumpkin-world/src/generation/noise/router/density_function/mod.rs @@ -43,7 +43,6 @@ pub trait StaticIndependentChunkNoiseFunctionComponentImpl: NoiseFunctionCompone } } -#[derive(Clone)] pub struct Wrapper { pub input_index: usize, pub wrapper_type: WrapperType, diff --git a/pumpkin-world/src/generation/noise/router/density_function/spline.rs b/pumpkin-world/src/generation/noise/router/density_function/spline.rs index 4cc534bd8..576af9c80 100644 --- a/pumpkin-world/src/generation/noise/router/density_function/spline.rs +++ b/pumpkin-world/src/generation/noise/router/density_function/spline.rs @@ -8,7 +8,6 @@ use crate::generation::noise::router::{ use super::NoiseFunctionComponentRange; -#[derive(Clone)] pub enum SplineValue { Spline(Spline), Fixed(f32), @@ -37,7 +36,6 @@ impl SplineValue { } } -#[derive(Clone)] pub struct SplinePoint { pub location: f32, pub value: SplineValue, @@ -67,7 +65,6 @@ pub enum Range { Below, } -#[derive(Clone)] pub struct Spline { pub input_index: usize, pub points: Box<[SplinePoint]>, @@ -201,7 +198,6 @@ impl Spline { } } -#[derive(Clone)] pub struct SplineFunction { spline: Spline, min_value: f64, diff --git a/pumpkin-world/src/generation/noise/router/find_top_surface.rs b/pumpkin-world/src/generation/noise/router/find_top_surface.rs index f586adc84..ab2e899f2 100644 --- a/pumpkin-world/src/generation/noise/router/find_top_surface.rs +++ b/pumpkin-world/src/generation/noise/router/find_top_surface.rs @@ -7,7 +7,6 @@ use crate::generation::noise::router::{ density_function::NoiseFunctionComponentRange, }; -#[derive(Clone)] pub struct FindTopSurface { density_index: usize, upper_bound_index: usize, diff --git a/pumpkin-world/src/generation/proto_chunk.rs b/pumpkin-world/src/generation/proto_chunk.rs index a39c1b7cd..ed438717d 100644 --- a/pumpkin-world/src/generation/proto_chunk.rs +++ b/pumpkin-world/src/generation/proto_chunk.rs @@ -150,7 +150,6 @@ impl FluidLevelSamplerImpl for StandardChunkFluidLevelSampler { /// /// 12. full: Generation is done and a chunk can now be loaded. The proto-chunk is now converted to a level chunk and all block updates deferred in the above steps are executed. /// -#[derive(Clone)] pub struct ProtoChunk { pub x: i32, pub z: i32, @@ -162,10 +161,10 @@ pub struct ProtoChunk { /// HEIGHTMAPS /// /// Top block that is not air - pub flat_surface_height_map: Box<[i16]>, - flat_ocean_floor_height_map: Box<[i16]>, - pub flat_motion_blocking_height_map: Box<[i16]>, - pub flat_motion_blocking_no_leaves_height_map: Box<[i16]>, + pub flat_surface_height_map: [i16; CHUNK_AREA], + flat_ocean_floor_height_map: [i16; CHUNK_AREA], + pub flat_motion_blocking_height_map: [i16; CHUNK_AREA], + pub flat_motion_blocking_no_leaves_height_map: [i16; CHUNK_AREA], structure_starts: FxHashMap, // Height of the chunk for indexing @@ -214,7 +213,7 @@ impl ProtoChunk { let height = dimension.logical_height as u16; let section_count = (height as usize) / 16; - let default_heightmap = vec![i16::MIN; CHUNK_AREA].into_boxed_slice(); + let default_heightmap = [i16::MIN; CHUNK_AREA]; Self { x, z, @@ -228,9 +227,9 @@ impl ProtoChunk { * biome_coords::from_block(height as i32) as usize ] .into_boxed_slice(), - flat_surface_height_map: default_heightmap.clone(), - flat_ocean_floor_height_map: default_heightmap.clone(), - flat_motion_blocking_height_map: default_heightmap.clone(), + flat_surface_height_map: default_heightmap, + flat_ocean_floor_height_map: default_heightmap, + flat_motion_blocking_height_map: default_heightmap, flat_motion_blocking_no_leaves_height_map: default_heightmap, structure_starts: FxHashMap::default(), height, diff --git a/pumpkin-world/src/generation/structure/shiftable_piece.rs b/pumpkin-world/src/generation/structure/shiftable_piece.rs index 95f752c8c..6caba9806 100644 --- a/pumpkin-world/src/generation/structure/shiftable_piece.rs +++ b/pumpkin-world/src/generation/structure/shiftable_piece.rs @@ -10,7 +10,6 @@ use crate::{ pub const DEFAULT_H_POS: i32 = -1; -#[derive(Clone)] pub struct ShiftableStructurePiece { pub piece: StructurePiece, h_pos: i32, diff --git a/pumpkin-world/src/generation/structure/structures/buried_treasure.rs b/pumpkin-world/src/generation/structure/structures/buried_treasure.rs index 96d131c71..b6b7e74fb 100644 --- a/pumpkin-world/src/generation/structure/structures/buried_treasure.rs +++ b/pumpkin-world/src/generation/structure/structures/buried_treasure.rs @@ -46,16 +46,11 @@ impl StructureGenerator for BuriedTreasureGenerator { } } -#[derive(Clone)] pub struct BuriedTreasurePiece { piece: StructurePiece, } impl StructurePieceBase for BuriedTreasurePiece { - fn clone_box(&self) -> Box { - Box::new((*self).clone()) - } - fn place( &mut self, chunk: &mut ProtoChunk, diff --git a/pumpkin-world/src/generation/structure/structures/desert_pyramid.rs b/pumpkin-world/src/generation/structure/structures/desert_pyramid.rs index cd1400f8d..07b820223 100644 --- a/pumpkin-world/src/generation/structure/structures/desert_pyramid.rs +++ b/pumpkin-world/src/generation/structure/structures/desert_pyramid.rs @@ -62,7 +62,6 @@ impl StructureGenerator for DesertPyramidGenerator { } } -#[derive(Clone)] pub struct DesertPyramidPiece { piece: StructurePiece, height_adjusted: bool, @@ -446,10 +445,6 @@ impl DesertPyramidPiece { } impl StructurePieceBase for DesertPyramidPiece { - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } - fn get_structure_piece(&self) -> &StructurePiece { &self.piece } diff --git a/pumpkin-world/src/generation/structure/structures/igloo.rs b/pumpkin-world/src/generation/structure/structures/igloo.rs index 7d48afedb..c93e014f9 100644 --- a/pumpkin-world/src/generation/structure/structures/igloo.rs +++ b/pumpkin-world/src/generation/structure/structures/igloo.rs @@ -129,7 +129,6 @@ impl StructureGenerator for IglooGenerator { } /// Single igloo structure piece containing dome and optional basement. -#[derive(Clone)] pub struct IglooPiece { shiftable_structure_piece: ShiftableStructurePiece, top_template: Arc, @@ -141,10 +140,6 @@ pub struct IglooPiece { } impl StructurePieceBase for IglooPiece { - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } - fn place( &mut self, chunk: &mut ProtoChunk, diff --git a/pumpkin-world/src/generation/structure/structures/jungle_temple.rs b/pumpkin-world/src/generation/structure/structures/jungle_temple.rs index 77a0a6d7a..6510509f4 100644 --- a/pumpkin-world/src/generation/structure/structures/jungle_temple.rs +++ b/pumpkin-world/src/generation/structure/structures/jungle_temple.rs @@ -68,7 +68,6 @@ impl StructureGenerator for JungleTempleGenerator { }) } } -#[derive(Clone)] pub struct JungleTemplePiece { // Composition: Rust uses a base struct to mimic the ScatteredFeaturePiece inheritance piece: StructurePiece, @@ -79,10 +78,6 @@ pub struct JungleTemplePiece { placed_trap_2: bool, } impl StructurePieceBase for JungleTemplePiece { - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } - fn get_structure_piece(&self) -> &StructurePiece { &self.piece } diff --git a/pumpkin-world/src/generation/structure/structures/mod.rs b/pumpkin-world/src/generation/structure/structures/mod.rs index 09158fc7c..131de3a9f 100644 --- a/pumpkin-world/src/generation/structure/structures/mod.rs +++ b/pumpkin-world/src/generation/structure/structures/mod.rs @@ -47,8 +47,6 @@ pub trait StructurePieceBase: Send + Sync { self.get_structure_piece_mut().translate(x, y, z); } - fn clone_box(&self) -> Box; - /// Places the blocks for this piece into the chunk. fn place( &mut self, @@ -449,10 +447,6 @@ impl StructurePiece { } impl StructurePieceBase for StructurePiece { - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } - fn place( &mut self, _chunk: &mut ProtoChunk, @@ -623,7 +617,6 @@ pub fn create_chunk_random(seed: i64, chunk_x: i32, chunk_z: i32) -> RandomGener RandomGenerator::Xoroshiro(Xoroshiro::from_seed(carver_seed)) } -#[derive(Clone)] pub enum StructureInstance { /// This chunk is the "owner" of the structure. Start(StructurePosition), diff --git a/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge.rs b/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge.rs index 3f6b8ea78..26364c4ac 100644 --- a/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge.rs +++ b/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge.rs @@ -20,7 +20,6 @@ use crate::{ }; /// Straight exterior bridge segment (5 × 10 × 19). -#[derive(Clone)] pub struct BridgePiece { pub piece: NetherFortressPiece, } @@ -148,8 +147,4 @@ impl StructurePieceBase for BridgePiece { chunk, &bb, false, 4, 1, 17, 4, 4, 17, fence_west, fence_west, ); } - - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge_crossing.rs b/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge_crossing.rs index 5e0d31d3d..d7c763a7c 100644 --- a/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge_crossing.rs +++ b/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge_crossing.rs @@ -18,7 +18,6 @@ use crate::{ /// 4-way exterior bridge crossing (19 × 10 × 19). /// Also serves as the generation start piece. -#[derive(Clone)] pub struct BridgeCrossingPiece { pub piece: NetherFortressPiece, } @@ -182,8 +181,4 @@ impl StructurePieceBase for BridgeCrossingPiece { } } } - - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge_end.rs b/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge_end.rs index 9919a1b13..cb9a47bde 100644 --- a/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge_end.rs +++ b/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge_end.rs @@ -19,7 +19,6 @@ use crate::{ /// Dead-end / terminator piece for the exterior bridge (5 × 10 × 8). /// Generated randomly on each side and used as a fallback when no valid piece /// can be placed. -#[derive(Clone)] pub struct BridgeEndPiece { pub piece: NetherFortressPiece, /// Seed used so the crumbling geometry is deterministic per world seed. @@ -113,8 +112,4 @@ impl StructurePieceBase for BridgeEndPiece { } } } - - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge_platform.rs b/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge_platform.rs index ac7c4669e..154d4ce40 100644 --- a/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge_platform.rs +++ b/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge_platform.rs @@ -17,7 +17,6 @@ use crate::{ }; /// Exterior platform with a Blaze mob-spawner (7 × 8 × 9). -#[derive(Clone)] pub struct BridgePlatformPiece { pub piece: NetherFortressPiece, pub has_blaze_spawner: bool, @@ -163,8 +162,4 @@ impl StructurePieceBase for BridgePlatformPiece { } } } - - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge_small_crossing.rs b/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge_small_crossing.rs index f671ebbe9..1d2117dfc 100644 --- a/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge_small_crossing.rs +++ b/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge_small_crossing.rs @@ -16,7 +16,6 @@ use crate::{ }; /// Small 3-way crossing for the exterior bridge network (7 × 9 × 7). -#[derive(Clone)] pub struct BridgeSmallCrossingPiece { pub piece: NetherFortressPiece, } @@ -156,8 +155,4 @@ impl StructurePieceBase for BridgeSmallCrossingPiece { } } } - - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge_stairs.rs b/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge_stairs.rs index db486ce70..2abedd8ae 100644 --- a/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge_stairs.rs +++ b/pumpkin-world/src/generation/structure/structures/nether_fortress/bridge_stairs.rs @@ -16,7 +16,6 @@ use crate::{ }; /// Stairway that transitions from bridge level to interior level (7 × 11 × 7). -#[derive(Clone)] pub struct BridgeStairsPiece { pub piece: NetherFortressPiece, } @@ -142,8 +141,4 @@ impl StructurePieceBase for BridgeStairsPiece { } } } - - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_balcony.rs b/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_balcony.rs index 2a377b14c..c52042e69 100644 --- a/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_balcony.rs +++ b/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_balcony.rs @@ -20,7 +20,6 @@ use crate::{ }; /// Interior corridor piece with a balcony overlook (9 × 7 × 9). -#[derive(Clone)] pub struct CorridorBalconyPiece { pub piece: NetherFortressPiece, } @@ -164,8 +163,4 @@ impl StructurePieceBase for CorridorBalconyPiece { } } } - - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_crossing.rs b/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_crossing.rs index df250eb6b..2bee87748 100644 --- a/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_crossing.rs +++ b/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_crossing.rs @@ -13,7 +13,6 @@ use crate::{ }; /// 4-way interior corridor crossing (5 × 7 × 5). -#[derive(Clone)] pub struct CorridorCrossingPiece { pub piece: NetherFortressPiece, } @@ -130,8 +129,4 @@ impl StructurePieceBase for CorridorCrossingPiece { } } } - - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_exit.rs b/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_exit.rs index 2aa2f08bc..53664e462 100644 --- a/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_exit.rs +++ b/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_exit.rs @@ -20,7 +20,6 @@ use crate::{ }; /// Large entrance tower connecting the bridge network to the interior (13 × 14 × 13). -#[derive(Clone)] pub struct CorridorExitPiece { pub piece: NetherFortressPiece, } @@ -229,8 +228,4 @@ impl StructurePieceBase for CorridorExitPiece { // chunk.schedule_fluid_tick(&lava_pos, 0); // } } - - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_left_turn.rs b/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_left_turn.rs index 0aaaa38ff..b2fc57b68 100644 --- a/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_left_turn.rs +++ b/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_left_turn.rs @@ -20,7 +20,6 @@ use crate::{ }; /// Interior corridor that turns left (NW), optionally containing a chest (5 × 7 × 5). -#[derive(Clone)] pub struct CorridorLeftTurnPiece { pub piece: NetherFortressPiece, pub contains_chest: bool, @@ -154,8 +153,4 @@ impl StructurePieceBase for CorridorLeftTurnPiece { } } } - - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_nether_warts_room.rs b/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_nether_warts_room.rs index c47582cb3..864f02e39 100644 --- a/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_nether_warts_room.rs +++ b/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_nether_warts_room.rs @@ -18,7 +18,6 @@ use crate::{ }; /// Large interior room with nether wart crops (13 × 14 × 13). -#[derive(Clone)] pub struct CorridorNetherWartsRoomPiece { pub piece: NetherFortressPiece, } @@ -274,8 +273,4 @@ impl StructurePieceBase for CorridorNetherWartsRoomPiece { } } } - - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_right_turn.rs b/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_right_turn.rs index 556080837..1fedd8923 100644 --- a/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_right_turn.rs +++ b/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_right_turn.rs @@ -20,7 +20,6 @@ use crate::{ }; /// Interior corridor that turns right (SE), optionally containing a chest (5 × 7 × 5). -#[derive(Clone)] pub struct CorridorRightTurnPiece { pub piece: NetherFortressPiece, pub contains_chest: bool, @@ -154,8 +153,4 @@ impl StructurePieceBase for CorridorRightTurnPiece { } } } - - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_stairs.rs b/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_stairs.rs index f529bb2fe..97041f146 100644 --- a/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_stairs.rs +++ b/pumpkin-world/src/generation/structure/structures/nether_fortress/corridor_stairs.rs @@ -18,7 +18,6 @@ use crate::{ }; /// Descending interior corridor staircase (5 × 14 × 10). -#[derive(Clone)] pub struct CorridorStairsPiece { pub piece: NetherFortressPiece, } @@ -145,8 +144,4 @@ impl StructurePieceBase for CorridorStairsPiece { } } } - - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/nether_fortress/mod.rs b/pumpkin-world/src/generation/structure/structures/nether_fortress/mod.rs index 3e671a4c9..2d869d314 100644 --- a/pumpkin-world/src/generation/structure/structures/nether_fortress/mod.rs +++ b/pumpkin-world/src/generation/structure/structures/nether_fortress/mod.rs @@ -46,8 +46,8 @@ impl StructureGenerator for NetherFortressGenerator { let start_z = section_coords::section_to_block(context.chunk_z) + 2; let start_piece = BridgeCrossingPiece::new_start(&mut random, start_x, start_z); - let start_box: Box = - Box::new(start_piece.clone()); + + let base_piece = start_piece.piece.piece.clone(); let mut pieces_to_process: Vec< Box, @@ -56,10 +56,8 @@ impl StructureGenerator for NetherFortressGenerator { let mut bridge_pieces = get_bridge_piece_weights(); let mut corridor_pieces = get_corridor_piece_weights(); - collector.add_piece(start_box); - start_piece.fill_openings( - &start_piece.piece.piece, + &base_piece, &mut random, &mut bridge_pieces, &mut corridor_pieces, @@ -67,17 +65,22 @@ impl StructureGenerator for NetherFortressGenerator { &mut pieces_to_process, ); + collector.add_piece(Box::new(start_piece)); + while !pieces_to_process.is_empty() { let idx = random.next_bounded_i32(pieces_to_process.len() as i32) as usize; let piece = pieces_to_process.remove(idx); + piece.fill_openings_nether( - &start_piece.piece.piece, + &base_piece, &mut random, &mut bridge_pieces, &mut corridor_pieces, &mut collector, &mut pieces_to_process, ); + + collector.add_piece(piece); } Some(StructurePosition { @@ -619,7 +622,6 @@ impl NetherFortressPiece { orientation, self.piece.chain_length + 1, ) { - collector.add_piece(p.clone_box()); pieces_to_process.push(p); } } diff --git a/pumpkin-world/src/generation/structure/structures/nether_fortress/small_corridor.rs b/pumpkin-world/src/generation/structure/structures/nether_fortress/small_corridor.rs index 0c547d2ee..caf820235 100644 --- a/pumpkin-world/src/generation/structure/structures/nether_fortress/small_corridor.rs +++ b/pumpkin-world/src/generation/structure/structures/nether_fortress/small_corridor.rs @@ -17,7 +17,6 @@ use crate::{ /// Straight interior corridor segment (5 × 7 × 5). /// This is also the fallback piece returned by the generation logic. -#[derive(Clone)] pub struct SmallCorridorPiece { pub piece: NetherFortressPiece, } @@ -122,8 +121,4 @@ impl StructurePieceBase for SmallCorridorPiece { } } } - - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/nether_fossil.rs b/pumpkin-world/src/generation/structure/structures/nether_fossil.rs index f4ee86365..cb316c84e 100644 --- a/pumpkin-world/src/generation/structure/structures/nether_fossil.rs +++ b/pumpkin-world/src/generation/structure/structures/nether_fossil.rs @@ -106,7 +106,6 @@ impl StructureGenerator for NetherFossilGenerator { } } -#[derive(Clone)] struct NetherFossilPiece { shiftable_structure_piece: ShiftableStructurePiece, template: Arc, @@ -156,10 +155,6 @@ impl NetherFossilPiece { } impl StructurePieceBase for NetherFossilPiece { - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } - fn place( &mut self, chunk: &mut ProtoChunk, diff --git a/pumpkin-world/src/generation/structure/structures/stronghold/chest_corridor.rs b/pumpkin-world/src/generation/structure/structures/stronghold/chest_corridor.rs index 499a5e7e3..0a25e9f62 100644 --- a/pumpkin-world/src/generation/structure/structures/stronghold/chest_corridor.rs +++ b/pumpkin-world/src/generation/structure/structures/stronghold/chest_corridor.rs @@ -19,7 +19,6 @@ use crate::{ }, }; -#[derive(Clone)] pub struct ChestCorridorPiece { pub piece: StrongholdPiece, pub chest_generated: bool, @@ -159,8 +158,4 @@ impl StructurePieceBase for ChestCorridorPiece { // } // } } - - fn clone_box(&self) -> Box { - Box::new((*self).clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/stronghold/corridor.rs b/pumpkin-world/src/generation/structure/structures/stronghold/corridor.rs index bd17fdaeb..f960e0f32 100644 --- a/pumpkin-world/src/generation/structure/structures/stronghold/corridor.rs +++ b/pumpkin-world/src/generation/structure/structures/stronghold/corridor.rs @@ -19,7 +19,6 @@ use crate::{ }, }; -#[derive(Clone)] pub struct CorridorPiece { piece: StrongholdPiece, left_exit: bool, @@ -164,13 +163,8 @@ impl StructurePieceBase for CorridorPiece { inner.fill_with_outline(chunk, &box_limit, false, 4, 1, 2, 4, 3, 4, air, air); } } - - fn clone_box(&self) -> Box { - Box::new((*self).clone()) - } } -#[derive(Clone)] pub struct SmallCorridorPiece { pub piece: StrongholdPiece, pub length: i32, @@ -238,10 +232,6 @@ impl SmallCorridorPiece { } impl StructurePieceBase for SmallCorridorPiece { - fn clone_box(&self) -> Box { - Box::new((*self).clone()) - } - fn get_structure_piece(&self) -> &crate::generation::structure::structures::StructurePiece { &self.piece.piece } diff --git a/pumpkin-world/src/generation/structure/structures/stronghold/five_way_crossing.rs b/pumpkin-world/src/generation/structure/structures/stronghold/five_way_crossing.rs index 705959dc5..40f89044a 100644 --- a/pumpkin-world/src/generation/structure/structures/stronghold/five_way_crossing.rs +++ b/pumpkin-world/src/generation/structure/structures/stronghold/five_way_crossing.rs @@ -22,7 +22,6 @@ use crate::{ }, }; -#[derive(Clone)] pub struct FiveWayCrossingPiece { pub piece: StrongholdPiece, pub lower_left_exists: bool, @@ -313,8 +312,4 @@ impl StructurePieceBase for FiveWayCrossingPiece { // let torch = Block::WALL_TORCH.default_state.with("facing", "south"); // inner.add_block(chunk, &torch, 6, 5, 6, &box_limit); } - - fn clone_box(&self) -> Box { - Box::new((*self).clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/stronghold/left_turn.rs b/pumpkin-world/src/generation/structure/structures/stronghold/left_turn.rs index aed434d79..acf36ca7f 100644 --- a/pumpkin-world/src/generation/structure/structures/stronghold/left_turn.rs +++ b/pumpkin-world/src/generation/structure/structures/stronghold/left_turn.rs @@ -19,7 +19,6 @@ use crate::{ }, }; -#[derive(Clone)] pub struct LeftTurnPiece { pub piece: StrongholdPiece, } @@ -138,8 +137,4 @@ impl StructurePieceBase for LeftTurnPiece { inner.fill_with_outline(chunk, &box_limit, false, 4, 1, 1, 4, 3, 3, air, air); } } - - fn clone_box(&self) -> Box { - Box::new((*self).clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/stronghold/library.rs b/pumpkin-world/src/generation/structure/structures/stronghold/library.rs index 01e45c70b..bbe3dc0c3 100644 --- a/pumpkin-world/src/generation/structure/structures/stronghold/library.rs +++ b/pumpkin-world/src/generation/structure/structures/stronghold/library.rs @@ -19,7 +19,6 @@ use crate::{ }, }; -#[derive(Clone)] pub struct LibraryPiece { pub piece: StrongholdPiece, pub tall: bool, @@ -237,8 +236,4 @@ impl StructurePieceBase for LibraryPiece { // inner.add_chest(chunk, &box_limit, random, 12, 8, 1, "stronghold_library"); // } } - - fn clone_box(&self) -> Box { - Box::new((*self).clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/stronghold/mod.rs b/pumpkin-world/src/generation/structure/structures/stronghold/mod.rs index 04d77984c..5ab12c603 100644 --- a/pumpkin-world/src/generation/structure/structures/stronghold/mod.rs +++ b/pumpkin-world/src/generation/structure/structures/stronghold/mod.rs @@ -71,27 +71,19 @@ impl StructureGenerator for StrongholdGenerator { let mut last_piece_type: Option = None; let mut has_portal_room = false; - // let attempt_seed = get_carver_seed( - // &mut context.random, - // context.seed as u64, - // context.chunk_x, - // context.chunk_z, - // ); - let start_x = section_coords::section_to_block(context.chunk_x) + 2; let start_z = section_coords::section_to_block(context.chunk_z) + 2; let start_piece = SpiralStaircasePiece::new_start(&mut random, start_x, start_z); - let start_box: Box = Box::new(start_piece.clone()); + + let base_piece = start_piece.piece.piece.clone(); // In Vanilla, pieces_to_process is 'start.pieces' let mut pieces_to_process: Vec> = Vec::new(); - collector.add_piece(start_box); - // Initial Fill start_piece.fill_openings( - &start_piece.piece.piece, + &base_piece, &mut random, &mut weights, &mut last_piece_type, @@ -100,12 +92,15 @@ impl StructureGenerator for StrongholdGenerator { &mut pieces_to_process, ); + collector.add_piece(Box::new(start_piece)); + // Growth Loop while !pieces_to_process.is_empty() { let idx = random.next_bounded_i32(pieces_to_process.len() as i32) as usize; let piece = pieces_to_process.remove(idx); + piece.fill_openings( - &start_piece.piece.piece, + &base_piece, &mut random, &mut weights, &mut last_piece_type, @@ -113,6 +108,9 @@ impl StructureGenerator for StrongholdGenerator { &mut collector, &mut pieces_to_process, ); + + // Move into collector AFTER processing its children + collector.add_piece(piece); } // Shift height @@ -252,7 +250,6 @@ fn get_initial_weights() -> Vec { ] } -#[derive(Clone)] pub struct StrongholdPiece { pub piece: StructurePiece, pub entry_door: EntranceType, @@ -617,7 +614,6 @@ impl StrongholdPiece { }; if let Some(p) = next_piece { - collector.add_piece(p.clone_box()); return Some(p); } diff --git a/pumpkin-world/src/generation/structure/structures/stronghold/portal_room.rs b/pumpkin-world/src/generation/structure/structures/stronghold/portal_room.rs index b7ace36ea..c4fa0737f 100644 --- a/pumpkin-world/src/generation/structure/structures/stronghold/portal_room.rs +++ b/pumpkin-world/src/generation/structure/structures/stronghold/portal_room.rs @@ -26,7 +26,6 @@ use crate::{ }, }; -#[derive(Clone)] pub struct PortalRoomPiece { pub piece: StrongholdPiece, pub spawner_placed: bool, @@ -372,8 +371,4 @@ impl StructurePieceBase for PortalRoomPiece { } } } - - fn clone_box(&self) -> Box { - Box::new((*self).clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/stronghold/prison_hall.rs b/pumpkin-world/src/generation/structure/structures/stronghold/prison_hall.rs index a6673b3c0..03597b0c2 100644 --- a/pumpkin-world/src/generation/structure/structures/stronghold/prison_hall.rs +++ b/pumpkin-world/src/generation/structure/structures/stronghold/prison_hall.rs @@ -22,7 +22,6 @@ use crate::{ }, }; -#[derive(Clone)] pub struct PrisonHallPiece { piece: StrongholdPiece, } @@ -222,8 +221,4 @@ impl StructurePieceBase for PrisonHallPiece { // inner.add_block(chunk, &door_bottom, 4, 1, 8, &box_limit); // inner.add_block(chunk, &door_top, 4, 2, 8, &box_limit); } - - fn clone_box(&self) -> Box { - Box::new((*self).clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/stronghold/right_turn.rs b/pumpkin-world/src/generation/structure/structures/stronghold/right_turn.rs index b208092bb..7aafa7451 100644 --- a/pumpkin-world/src/generation/structure/structures/stronghold/right_turn.rs +++ b/pumpkin-world/src/generation/structure/structures/stronghold/right_turn.rs @@ -19,7 +19,6 @@ use crate::{ }, }; -#[derive(Clone)] pub struct RightTurnPiece { pub piece: StrongholdPiece, } @@ -143,8 +142,4 @@ impl StructurePieceBase for RightTurnPiece { inner.fill_with_outline(chunk, &box_limit, false, 0, 1, 1, 0, 3, 3, air, air); } } - - fn clone_box(&self) -> Box { - Box::new((*self).clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/stronghold/spiral_staircase.rs b/pumpkin-world/src/generation/structure/structures/stronghold/spiral_staircase.rs index cf7cac5d0..47f9b0f21 100644 --- a/pumpkin-world/src/generation/structure/structures/stronghold/spiral_staircase.rs +++ b/pumpkin-world/src/generation/structure/structures/stronghold/spiral_staircase.rs @@ -28,20 +28,6 @@ pub struct SpiralStaircasePiece { pub portal_room_exists: bool, pub pieces: Vec>, } -impl Clone for SpiralStaircasePiece { - fn clone(&self) -> Self { - Self { - // StrongholdPiece and other types must derive Clone - piece: self.piece.clone(), - orientation: self.orientation, - is_structure_start: self.is_structure_start, - last_piece_data_idx: self.last_piece_data_idx, - portal_room_exists: self.portal_room_exists, - // Use the clone_box helper we added to the trait! - pieces: self.pieces.iter().map(|p| p.clone_box()).collect(), - } - } -} impl SpiralStaircasePiece { /// Matches Start(Random random, int i, int j) @@ -102,10 +88,6 @@ impl SpiralStaircasePiece { } impl StructurePieceBase for SpiralStaircasePiece { - fn clone_box(&self) -> Box { - Box::new((*self).clone()) - } - fn get_structure_piece(&self) -> &StructurePiece { &self.piece.piece } diff --git a/pumpkin-world/src/generation/structure/structures/stronghold/square_room.rs b/pumpkin-world/src/generation/structure/structures/stronghold/square_room.rs index 8abcfb648..900c6ff19 100644 --- a/pumpkin-world/src/generation/structure/structures/stronghold/square_room.rs +++ b/pumpkin-world/src/generation/structure/structures/stronghold/square_room.rs @@ -22,7 +22,6 @@ use crate::{ }, }; -#[derive(Clone)] pub struct SquareRoomPiece { piece: StrongholdPiece, room_type: u32, @@ -273,8 +272,4 @@ impl StructurePieceBase for SquareRoomPiece { _ => {} } } - - fn clone_box(&self) -> Box { - Box::new((*self).clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/stronghold/stairs.rs b/pumpkin-world/src/generation/structure/structures/stronghold/stairs.rs index 93babe49a..e4a2d372c 100644 --- a/pumpkin-world/src/generation/structure/structures/stronghold/stairs.rs +++ b/pumpkin-world/src/generation/structure/structures/stronghold/stairs.rs @@ -22,7 +22,6 @@ use crate::{ }, }; -#[derive(Clone)] pub struct StairsPiece { pub piece: StrongholdPiece, } @@ -144,8 +143,4 @@ impl StructurePieceBase for StairsPiece { } } } - - fn clone_box(&self) -> Box { - Box::new((*self).clone()) - } } diff --git a/pumpkin-world/src/generation/structure/structures/swamp_hut.rs b/pumpkin-world/src/generation/structure/structures/swamp_hut.rs index cbaeb3c89..78cf15585 100644 --- a/pumpkin-world/src/generation/structure/structures/swamp_hut.rs +++ b/pumpkin-world/src/generation/structure/structures/swamp_hut.rs @@ -55,16 +55,11 @@ impl StructureGenerator for SwampHutGenerator { } } -#[derive(Clone)] pub struct SwampHutPiece { shiftable_structure_piece: ShiftableStructurePiece, } impl StructurePieceBase for SwampHutPiece { - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } - fn place( &mut self, chunk: &mut ProtoChunk, diff --git a/pumpkin-world/src/generation/structure/template/template_piece.rs b/pumpkin-world/src/generation/structure/template/template_piece.rs index 6b419aa6a..beeb1e349 100644 --- a/pumpkin-world/src/generation/structure/template/template_piece.rs +++ b/pumpkin-world/src/generation/structure/template/template_piece.rs @@ -28,7 +28,6 @@ use super::{BlockMirror, BlockRotation, BlockStateResolver, StructureTemplate}; /// - Applying rotation and mirror transformations /// - Placing blocks at world coordinates /// - Skipping structure void blocks -#[derive(Clone)] pub struct TemplatePiece { /// The underlying structure piece metadata. pub piece: StructurePiece, @@ -159,10 +158,6 @@ impl TemplatePiece { } impl StructurePieceBase for TemplatePiece { - fn clone_box(&self) -> Box { - Box::new(self.clone()) - } - fn place( &mut self, chunk: &mut ProtoChunk, diff --git a/pumpkin-world/src/level.rs b/pumpkin-world/src/level.rs index 2e0075ae6..e8680a6c9 100644 --- a/pumpkin-world/src/level.rs +++ b/pumpkin-world/src/level.rs @@ -61,7 +61,7 @@ pub type SyncEntityChunk = Arc; pub struct Level { pub seed: Seed, pub world_portal: ArcSwap>>, - pub level_folder: LevelFolder, + pub level_folder: Arc, pub lighting_config: LightingEngineConfig, /// Counts the number of ticks that have been scheduled for this world @@ -117,26 +117,12 @@ pub struct RandomTickSample { pub tick_fluid: bool, } -#[derive(Clone)] pub struct LevelFolder { pub root_folder: PathBuf, pub region_folder: PathBuf, pub entities_folder: PathBuf, } -#[ignore] -#[cfg(feature = "tokio_taskdump")] -pub async fn dump() { - // let handle = Handle::current(); - // if let Ok(dump) = timeout(Duration::from_secs(100), handle.dump()).await { - // for (i, task) in dump.tasks().iter().enumerate() { - // let trace = task.trace(); - // log::error!("TASK {i}:"); - // log::error!("{trace}\n"); - // } - // } -} - impl Level { #[must_use] pub fn from_root_folder( @@ -152,11 +138,11 @@ impl Level { std::fs::create_dir_all(®ion_folder).expect("Failed to create Region folder"); std::fs::create_dir_all(&entities_folder).expect("Failed to create Entities folder"); - let level_folder = LevelFolder { + let level_folder = Arc::new(LevelFolder { root_folder, region_folder, entities_folder, - }; + }); let seed = Seed(seed as u64); let world_gen = get_world_gen(seed, dimension).into(); @@ -766,12 +752,6 @@ impl Level { } } - pub fn try_get_chunk(&self, coordinates: &Vector2) -> Option> { - self.loaded_chunks - .get(coordinates) - .map(|x| x.value().clone()) - } - pub fn is_chunk_loaded(&self, coordinates: &Vector2) -> bool { self.loaded_chunks.contains_key(coordinates) } @@ -784,6 +764,16 @@ impl Level { self.loaded_chunks.get(coordinates).map(|x| f(x.value())) } + pub fn read_entity_chunk_sync R>( + &self, + coordinates: &Vector2, + f: F, + ) -> Option { + self.loaded_entity_chunks + .get(coordinates) + .map(|x| f(x.value())) + } + pub fn get_rough_biome(&self, position: &BlockPos) -> &'static Biome { let (chunk_coordinate, relative) = position.chunk_and_chunk_relative_position(); let id = self.read_chunk_sync(&chunk_coordinate, |chunk| { @@ -796,16 +786,6 @@ impl Level { Biome::from_id(id.flatten().unwrap_or(0)).unwrap_or(&Biome::THE_VOID) } - pub fn read_entity_chunk_sync R>( - &self, - coordinates: &Vector2, - f: F, - ) -> Option { - self.loaded_entity_chunks - .get(coordinates) - .map(|x| f(x.value())) - } - pub fn get_entity_chunk_sync(&self, pos: &Vector2) -> Option { self.loaded_entity_chunks .get(pos) diff --git a/pumpkin/Cargo.toml b/pumpkin/Cargo.toml index 5fdd67841..af724153f 100644 --- a/pumpkin/Cargo.toml +++ b/pumpkin/Cargo.toml @@ -115,7 +115,6 @@ tempfile.workspace = true [features] console-subscriber = ["dep:console-subscriber"] -tokio_taskdump = ["pumpkin-world/tokio_taskdump"] [lints] workspace = true diff --git a/pumpkin/src/crash.rs b/pumpkin/src/crash.rs index c61588226..80bb49959 100644 --- a/pumpkin/src/crash.rs +++ b/pumpkin/src/crash.rs @@ -155,7 +155,7 @@ impl CrashReport { eprintln!( "{}\n{}", RED.console_color("Backtrace:"), - &self.captured_backtrace + self.captured_backtrace ); } } diff --git a/pumpkin/src/entity/mod.rs b/pumpkin/src/entity/mod.rs index 06aca8d3b..602de993f 100644 --- a/pumpkin/src/entity/mod.rs +++ b/pumpkin/src/entity/mod.rs @@ -2165,7 +2165,7 @@ impl Entity { } pub async fn set_fall_flying(&self, fall_flying: bool) { - assert!(self.fall_flying.load(Relaxed) != fall_flying); + assert_ne!(self.fall_flying.load(Relaxed), fall_flying); self.fall_flying.store(fall_flying, Relaxed); self.set_flag(Flag::FallFlying, fall_flying).await; } diff --git a/pumpkin/src/item/items/ender_eye.rs b/pumpkin/src/item/items/ender_eye.rs index b2ff39421..7ccfb6467 100644 --- a/pumpkin/src/item/items/ender_eye.rs +++ b/pumpkin/src/item/items/ender_eye.rs @@ -62,16 +62,14 @@ impl ItemBehaviour for EnderEyeItem { let new_state_id = block.from_properties(&props).to_state_id(block); world - .set_block_state(&location, new_state_id, BlockFlags::empty()) + .set_block_state(&location, new_state_id, BlockFlags::NOTIFY_LISTENERS) .await; - + // Consume one item. + item.decrement(1); world.sync_world_event(WorldEvent::EndPortalFrameFill, location, 0); // Try to complete the portal. EndPortal::get_new_portal(&world, location).await; - - // Consume one item. - item.decrement(1); }) } diff --git a/pumpkin/src/item/items/ignite/ignition.rs b/pumpkin/src/item/items/ignite/ignition.rs index 0e32ea157..fe53c0ad1 100644 --- a/pumpkin/src/item/items/ignite/ignition.rs +++ b/pumpkin/src/item/items/ignite/ignition.rs @@ -47,9 +47,9 @@ impl Ignition { } fn can_be_lit(block: &Block, state_id: u16) -> Option { - let mut props = match &block.properties(state_id) { - Some(props) => props.to_props(), - None => return None, + let mut props = { + let props = &block.properties(state_id)?; + props.to_props() }; if let Some((_, value)) = props.iter_mut().find(|(k, _)| *k == "extinguished") { diff --git a/pumpkin/src/net/bedrock/mod.rs b/pumpkin/src/net/bedrock/mod.rs index 9c2e87ecb..018e4e2ae 100644 --- a/pumpkin/src/net/bedrock/mod.rs +++ b/pumpkin/src/net/bedrock/mod.rs @@ -94,6 +94,8 @@ pub struct BedrockClient { output_split_number: AtomicU16, output_sequenced_index: AtomicU32, output_ordered_index: AtomicU32, + /// The next form ID to use for custom forms. + pub next_form_id: AtomicU32, /// An notifier that is triggered when this client is closed. close_token: CancellationToken, last_seen: Arc>, @@ -133,6 +135,7 @@ impl BedrockClient { output_split_number: AtomicU16::new(0), output_sequenced_index: AtomicU32::new(0), output_ordered_index: AtomicU32::new(0), + next_form_id: AtomicU32::new(0), compounds: Arc::new(Mutex::new(HashMap::new())), close_token: CancellationToken::new(), last_seen: Arc::new(AtomicCell::new(std::time::Instant::now())), @@ -789,6 +792,16 @@ impl BedrockClient { SAnimate::PACKET_ID => { self.handle_animate(player, server, &SAnimate::read(reader)?); } + pumpkin_protocol::bedrock::server::modal_form_response::SModalFormResponse::PACKET_ID => { + self.handle_modal_form_response( + player, + server, + pumpkin_protocol::bedrock::server::modal_form_response::SModalFormResponse::read( + reader, + )?, + ) + .await; + } SLoadingScreen::PACKET_ID => { // Ignore for now } diff --git a/pumpkin/src/net/bedrock/play.rs b/pumpkin/src/net/bedrock/play.rs index a7e9fae72..9cd28314e 100644 --- a/pumpkin/src/net/bedrock/play.rs +++ b/pumpkin/src/net/bedrock/play.rs @@ -411,4 +411,18 @@ impl BedrockClient { } }} } + + pub async fn handle_modal_form_response( + &self, + player: &Arc, + server: &Server, + packet: pumpkin_protocol::bedrock::server::modal_form_response::SModalFormResponse, + ) { + let event = crate::plugin::api::events::player::bedrock_form_response::BedrockFormResponseEvent::new( + player.clone(), + packet.form_id.0 as u32, + packet.form_data, + ); + let _ = server.plugin_manager.fire(event).await; + } } diff --git a/pumpkin/src/net/lan_broadcast.rs b/pumpkin/src/net/lan_broadcast.rs index 8932b98fe..d7b9fc590 100644 --- a/pumpkin/src/net/lan_broadcast.rs +++ b/pumpkin/src/net/lan_broadcast.rs @@ -60,7 +60,7 @@ impl LANBroadcast { let mut interval = time::interval(Duration::from_millis(1500)); - let advertisement = format!("[MOTD]{}[/MOTD][AD]{}[/AD]", &self.motd, bound_addr.port()); + let advertisement = format!("[MOTD]{}[/MOTD][AD]{}[/AD]", self.motd, bound_addr.port()); info!( "LAN broadcast running on {}", diff --git a/pumpkin/src/plugin/api/events/player/bedrock_form_response.rs b/pumpkin/src/plugin/api/events/player/bedrock_form_response.rs new file mode 100644 index 000000000..489992f7b --- /dev/null +++ b/pumpkin/src/plugin/api/events/player/bedrock_form_response.rs @@ -0,0 +1,37 @@ +use pumpkin_macros::Event; +use std::sync::Arc; + +use crate::entity::player::Player; + +use super::PlayerEvent; + +/// An event that occurs when a player responds to a Bedrock custom form. +#[derive(Event, Clone)] +pub struct BedrockFormResponseEvent { + /// The player who responded to the form. + pub player: Arc, + + /// The ID of the form. + pub form_id: u32, + + /// The response data as a JSON string. None if the form was closed. + pub response_data: Option, +} + +impl BedrockFormResponseEvent { + /// Creates a new instance of `BedrockFormResponseEvent`. + #[must_use] + pub const fn new(player: Arc, form_id: u32, response_data: Option) -> Self { + Self { + player, + form_id, + response_data, + } + } +} + +impl PlayerEvent for BedrockFormResponseEvent { + fn get_player(&self) -> &Arc { + &self.player + } +} diff --git a/pumpkin/src/plugin/api/events/player/mod.rs b/pumpkin/src/plugin/api/events/player/mod.rs index 480d46f22..d53159747 100644 --- a/pumpkin/src/plugin/api/events/player/mod.rs +++ b/pumpkin/src/plugin/api/events/player/mod.rs @@ -1,3 +1,4 @@ +pub mod bedrock_form_response; pub mod changed_main_hand; pub mod egg_throw; pub mod exp_change; diff --git a/pumpkin/src/plugin/loader/wasm/wasm_host/wit/v0_1/events/player.rs b/pumpkin/src/plugin/loader/wasm/wasm_host/wit/v0_1/events/player.rs index 08dc0dc10..c676e4f8f 100644 --- a/pumpkin/src/plugin/loader/wasm/wasm_host/wit/v0_1/events/player.rs +++ b/pumpkin/src/plugin/loader/wasm/wasm_host/wit/v0_1/events/player.rs @@ -11,8 +11,8 @@ use crate::plugin::{ }, player::to_wit_item_stack, pumpkin::plugin::event::{ - Event, InteractAction as WasmInteractAction, InventoryClickEventData, - InventoryCloseEventData, PlayerChangeWorldEventData, + BedrockFormResponseEventData, Event, InteractAction as WasmInteractAction, + InventoryClickEventData, InventoryCloseEventData, PlayerChangeWorldEventData, PlayerChangedMainHandEventData, PlayerChatEventData, PlayerCommandSendEventData, PlayerCustomPayloadEventData, PlayerEggThrowEventData, PlayerExpChangeEventData, PlayerFishEventData, PlayerFishState as WasmPlayerFishState, @@ -26,6 +26,7 @@ use crate::plugin::{ }, }, player::{ + bedrock_form_response::BedrockFormResponseEvent, changed_main_hand::PlayerChangedMainHandEvent, egg_throw::PlayerEggThrowEvent, exp_change::PlayerExpChangeEvent, @@ -733,3 +734,28 @@ impl ToFromWasmEvent for PlayerToggleSprintEvent { } } } + +impl ToFromWasmEvent for BedrockFormResponseEvent { + fn to_wasm_event(&self, state: &mut PluginHostState) -> Event { + let player = state + .add_player(self.player.clone()) + .expect("failed to add player resource"); + + Event::BedrockFormResponseEvent(BedrockFormResponseEventData { + player, + form_id: self.form_id, + response_data: self.response_data.clone(), + }) + } + + fn from_wasm_event(event: Event, state: &mut PluginHostState) -> Self { + match event { + Event::BedrockFormResponseEvent(data) => Self { + player: consume_player(state, &data.player), + form_id: data.form_id, + response_data: data.response_data, + }, + _ => panic!("unexpected event type"), + } + } +} diff --git a/pumpkin/src/plugin/loader/wasm/wasm_host/wit/v0_1/forms.rs b/pumpkin/src/plugin/loader/wasm/wasm_host/wit/v0_1/forms.rs new file mode 100644 index 000000000..2270de8c9 --- /dev/null +++ b/pumpkin/src/plugin/loader/wasm/wasm_host/wit/v0_1/forms.rs @@ -0,0 +1,129 @@ +use crate::net::ClientPlatform; +use crate::plugin::loader::wasm::wasm_host::state::PluginHostState; +use crate::plugin::loader::wasm::wasm_host::wit::v0_1::player::player_from_resource; +use crate::plugin::loader::wasm::wasm_host::wit::v0_1::player::text_component_from_resource; +use crate::plugin::loader::wasm::wasm_host::wit::v0_1::pumpkin::plugin::forms::{ + CustomForm, CustomFormElement, Form, Host, ImageType, ModalForm, SimpleForm, +}; +use pumpkin_protocol::bedrock::client::modal_form_request::CModalFormRequest; +use pumpkin_util::translation::Locale; +use serde_json::{Value, json}; +use std::str::FromStr; +use std::sync::atomic::Ordering; +use wasmtime::component::Resource; + +impl Host for PluginHostState { + async fn send_form( + &mut self, + player_res: Resource< + crate::plugin::loader::wasm::wasm_host::wit::v0_1::pumpkin::plugin::player::Player, + >, + form: Form, + ) -> wasmtime::Result { + let player = player_from_resource(self, &player_res)?; + + if let ClientPlatform::Bedrock(client) = &player.client { + let form_id = client.next_form_id.fetch_add(1, Ordering::Relaxed); + + let locale_str = player.config.load().locale.clone(); + let locale = Locale::from_str(&locale_str).unwrap_or(Locale::EnUs); + + let form_json = match form { + Form::Simple(simple) => self.serialize_simple_form(simple, locale), + Form::Modal(modal) => self.serialize_modal_form(&modal, locale), + Form::Custom(custom) => self.serialize_custom_form(custom, locale), + }; + + client + .send_game_packet(&CModalFormRequest { + form_id: pumpkin_protocol::codec::var_int::VarInt(form_id as i32), + form_data: form_json.to_string(), + }) + .await; + + Ok(form_id) + } else { + Ok(0) + } + } +} + +impl PluginHostState { + fn translate_res( + &self, + res: &Resource< + crate::plugin::loader::wasm::wasm_host::wit::v0_1::pumpkin::plugin::text::TextComponent, + >, + locale: Locale, + ) -> String { + let component = text_component_from_resource(self, res); + component.0.get_text(locale) + } + + fn serialize_simple_form(&self, form: SimpleForm, locale: Locale) -> Value { + let buttons: Vec = form + .buttons + .into_iter() + .map(|b| { + let mut obj = json!({ "text": self.translate_res(&b.text, locale) }); + if let Some(image) = b.image { + obj.as_object_mut().unwrap().insert( + "image".to_string(), + json!({ + "type": match image.type_ { + ImageType::Url => "url", + ImageType::Path => "path", + }, + "data": image.data + }), + ); + } + obj + }) + .collect(); + + json!({ + "type": "form", + "title": self.translate_res(&form.title, locale), + "content": self.translate_res(&form.content, locale), + "buttons": buttons + }) + } + + fn serialize_modal_form(&self, form: &ModalForm, locale: Locale) -> Value { + json!({ + "type": "modal", + "title": self.translate_res(&form.title, locale), + "content": self.translate_res(&form.content, locale), + "button1": self.translate_res(&form.button1, locale), + "button2": self.translate_res(&form.button2, locale) + }) + } + + fn serialize_custom_form(&self, form: CustomForm, locale: Locale) -> Value { + let elements: Vec = form.elements.into_iter().map(|e| { + match e { + CustomFormElement::Label(text) => json!({ "type": "label", "text": self.translate_res(&text, locale) }), + CustomFormElement::Toggle((text, default)) => json!({ "type": "toggle", "text": self.translate_res(&text, locale), "default": default }), + CustomFormElement::Slider((text, min, max, step, default)) => json!({ + "type": "slider", "text": self.translate_res(&text, locale), "min": min, "max": max, "step": step, "default": default + }), + CustomFormElement::StepSlider((text, steps, default)) => json!({ + "type": "step_slider", "text": self.translate_res(&text, locale), "steps": steps, "default": default + }), + CustomFormElement::Dropdown((text, options, default)) => json!({ + "type": "dropdown", "text": self.translate_res(&text, locale), "options": options, "default": default + }), + CustomFormElement::Input((text, placeholder, default)) => json!({ + "type": "input", "text": self.translate_res(&text, locale), "placeholder": placeholder, "default": default + }), + } + }).collect(); + + json!({ + "type": "custom_form", + "title": self.translate_res(&form.title, locale), + "content": elements + }) + } +} diff --git a/pumpkin/src/plugin/loader/wasm/wasm_host/wit/v0_1/mod.rs b/pumpkin/src/plugin/loader/wasm/wasm_host/wit/v0_1/mod.rs index 9f86646d4..68ed6e7ac 100644 --- a/pumpkin/src/plugin/loader/wasm/wasm_host/wit/v0_1/mod.rs +++ b/pumpkin/src/plugin/loader/wasm/wasm_host/wit/v0_1/mod.rs @@ -13,6 +13,7 @@ pub mod common; pub mod context; pub mod entity; pub mod events; +pub mod forms; pub mod generated_packets; pub mod gui; pub mod i18n; diff --git a/pumpkin/src/world/mod.rs b/pumpkin/src/world/mod.rs index 725d55cb0..9bd5aa157 100644 --- a/pumpkin/src/world/mod.rs +++ b/pumpkin/src/world/mod.rs @@ -424,13 +424,11 @@ impl World { } pub async fn flush_synced_block_events(self: &Arc) { - let events; // THIS IS IMPORTANT // it prevents deadlocks and also removes the need to wait for a lock when adding a new synced block - { + let events = { let mut queue = self.synced_block_event_queue.lock().await; - events = queue.clone(); - queue.clear(); + std::mem::take(&mut *queue) }; for event in events { @@ -1599,6 +1597,8 @@ impl World { (position, yaw, pitch) } else { let spawn_position = Vector2::new(level_info.spawn_x, level_info.spawn_z); + let chunk_pos = Vector2::new(level_info.spawn_x >> 4, level_info.spawn_z >> 4); + self.level.get_or_fetch_chunk(chunk_pos, |_| ()).await; let pos_y = self.get_top_block(spawn_position) + 1; // +1 to spawn on top of the block let position = Vector3::new( @@ -1937,6 +1937,8 @@ impl World { } else { let info = &self.level_info.load(); let spawn_position = Vector2::new(info.spawn_x, info.spawn_z); + let chunk_pos = Vector2::new(info.spawn_x >> 4, info.spawn_z >> 4); + self.level.get_or_fetch_chunk(chunk_pos, |_| ()).await; let pos_y = self.get_top_block(spawn_position) + 1; // +1 to spawn on top of the block let position = Vector3::new( @@ -2428,6 +2430,8 @@ impl World { // FIXME: This spawn position calculation is incorrect. Should use vanilla's // proper spawn position calculation (see #1381). The y-level calculation // needs to account for spawn radius and find a safe spawn position. + let chunk_pos = Vector2::new(spawn_x >> 4, spawn_z >> 4); + self.level.get_or_fetch_chunk(chunk_pos, |_| ()).await; let top = self.get_top_block(Vector2::new(spawn_x, spawn_z)); ( @@ -2496,6 +2500,8 @@ impl World { ); // FIXME: This spawn position calculation is incorrect. Should use vanilla's // proper spawn position calculation (see #1381). + let chunk_pos = Vector2::new(spawn_x >> 4, spawn_z >> 4); + self.level.get_or_fetch_chunk(chunk_pos, |_| ()).await; let top = self.get_top_block(Vector2::new(spawn_x, spawn_z)); let fallback_pos = Vector3::new( f64::from(spawn_x) + 0.5, diff --git a/pumpkin/src/world/portal/end.rs b/pumpkin/src/world/portal/end.rs index 9b9af788e..e4b0e9939 100644 --- a/pumpkin/src/world/portal/end.rs +++ b/pumpkin/src/world/portal/end.rs @@ -94,7 +94,7 @@ impl EndPortal { .set_block_state( &pos.offset(Vector3::new(x, 0, z)), Block::END_PORTAL.default_state.id, - BlockFlags::empty(), + BlockFlags::NOTIFY_LISTENERS, ) .await; }