From 042af42a0e1863ece2d4be2e2d79ae1669957131 Mon Sep 17 00:00:00 2001 From: tn-lorenz Date: Fri, 28 Aug 2026 14:27:30 +0200 Subject: [PATCH 1/4] incomplete init --- steel-core/src/behavior/items/empty_map.rs | 44 ++++++++++++++++++++++ steel-core/src/behavior/items/map_item.rs | 21 +++++++++++ steel-core/src/behavior/items/mod.rs | 3 ++ 3 files changed, 68 insertions(+) create mode 100644 steel-core/src/behavior/items/empty_map.rs create mode 100644 steel-core/src/behavior/items/map_item.rs diff --git a/steel-core/src/behavior/items/empty_map.rs b/steel-core/src/behavior/items/empty_map.rs new file mode 100644 index 000000000000..a6a317e53c06 --- /dev/null +++ b/steel-core/src/behavior/items/empty_map.rs @@ -0,0 +1,44 @@ +use steel_macros::item_behavior; +use steel_registry::sound_events; +use steel_registry::stat::vanilla_stat_types; +use crate::behavior::{InteractionResult, ItemBehavior, UseItemContext}; +use crate::entity::Entity; + +/// The empty map item +#[item_behavior] +pub struct EmptyMapItem; + +impl ItemBehavior for EmptyMapItem { + fn use_item(&self, context: &mut UseItemContext) -> InteractionResult { + let world = context.world; + let player = context.player; + + let (item_ref, hand_empty) = context.inv.with_item(|item| { + item.shrink(1); + (item.item(), item.is_empty()) + }); + + player.award_stat(&vanilla_stat_types::ITEM_USED, item_ref); + + world.play_sound_at( + &sound_events::UI_CARTOGRAPHY_TABLE_TAKE_RESULT, + player.sound_source(), + player.position(), + 1.0, + 1.0, + None, + ); + + let map = + + if hand_empty { + // TODO + } + + if !player.inventory.lock().add(map) { + player.drop_item(map, false, false) + } + + InteractionResult::Success + } +} \ No newline at end of file diff --git a/steel-core/src/behavior/items/map_item.rs b/steel-core/src/behavior/items/map_item.rs new file mode 100644 index 000000000000..7ede8cc432c4 --- /dev/null +++ b/steel-core/src/behavior/items/map_item.rs @@ -0,0 +1,21 @@ +use std::sync::Arc; +use steel_macros::item_behavior; +use steel_registry::item_stack::ItemStack; +use steel_registry::vanilla_items; +use crate::behavior::ItemBehavior; +use crate::world::World; + +/// The non-empty map item +#[item_behavior] +pub struct MapItem; + +impl MapItem { + fn create(level: Arc, origin_x: i32, origin_z: i32, scale: i8, track_position: bool, unlimited_tracking: bool) -> ItemStack { + let mut map = ItemStack::new(&vanilla_items::FILLED_MAP); + + } +} + +impl ItemBehavior for MapItem { + +} \ No newline at end of file diff --git a/steel-core/src/behavior/items/mod.rs b/steel-core/src/behavior/items/mod.rs index f5dacf44abfa..4cae505f2347 100644 --- a/steel-core/src/behavior/items/mod.rs +++ b/steel-core/src/behavior/items/mod.rs @@ -39,6 +39,8 @@ mod tipped_arrow; mod flint_and_steel; mod lead; +mod empty_map; +mod map_item; pub use air::AirItem; pub use axe::AxeItem; @@ -73,3 +75,4 @@ pub use spyglass::SpyglassItem; pub use standing_and_wall_block_item::StandingAndWallBlockItem; pub use throwable_potion::{LingeringPotionItem, SplashPotionItem}; pub use tipped_arrow::TippedArrowItem; +pub use empty_map::EmptyMapItem; From 61ed33277813737cd5d8b2f25f87587461a19df4 Mon Sep 17 00:00:00 2001 From: tn-lorenz Date: Fri, 28 Aug 2026 14:32:28 +0200 Subject: [PATCH 2/4] refactor name --- steel-core/src/behavior/items/{map_item.rs => map.rs} | 0 steel-core/src/behavior/items/mod.rs | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename steel-core/src/behavior/items/{map_item.rs => map.rs} (100%) diff --git a/steel-core/src/behavior/items/map_item.rs b/steel-core/src/behavior/items/map.rs similarity index 100% rename from steel-core/src/behavior/items/map_item.rs rename to steel-core/src/behavior/items/map.rs diff --git a/steel-core/src/behavior/items/mod.rs b/steel-core/src/behavior/items/mod.rs index 4cae505f2347..2e2ae6e256c5 100644 --- a/steel-core/src/behavior/items/mod.rs +++ b/steel-core/src/behavior/items/mod.rs @@ -40,7 +40,7 @@ mod tipped_arrow; mod flint_and_steel; mod lead; mod empty_map; -mod map_item; +mod map; pub use air::AirItem; pub use axe::AxeItem; From 6db94159e29ceab94adab9a4b1e14f118c99dd9a Mon Sep 17 00:00:00 2001 From: tn-lorenz Date: Fri, 28 Aug 2026 14:55:59 +0200 Subject: [PATCH 3/4] basic empty_map setup --- steel-core/src/behavior/items/empty_map.rs | 23 +++++++++++++++------- steel-core/src/behavior/items/map.rs | 18 ++++++++++------- steel-core/src/behavior/items/mod.rs | 4 ++-- 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/steel-core/src/behavior/items/empty_map.rs b/steel-core/src/behavior/items/empty_map.rs index a6a317e53c06..8f251c8e4ae2 100644 --- a/steel-core/src/behavior/items/empty_map.rs +++ b/steel-core/src/behavior/items/empty_map.rs @@ -1,8 +1,12 @@ +use crate::behavior::items::map::MapItem; +use crate::behavior::{InteractionResult, ItemBehavior, UseItemContext}; +use crate::entity::Entity; +use crate::inventory::container::Container; +use crate::world::World; +use std::sync::Arc; use steel_macros::item_behavior; use steel_registry::sound_events; use steel_registry::stat::vanilla_stat_types; -use crate::behavior::{InteractionResult, ItemBehavior, UseItemContext}; -use crate::entity::Entity; /// The empty map item #[item_behavior] @@ -29,16 +33,21 @@ impl ItemBehavior for EmptyMapItem { None, ); - let map = + let map = MapItem::create( + world, + player.block_position().x(), + player.block_position().z(), + 0, + true, + false, + ); if hand_empty { // TODO } - if !player.inventory.lock().add(map) { - player.drop_item(map, false, false) - } + player.add_item_or_drop(map); InteractionResult::Success } -} \ No newline at end of file +} diff --git a/steel-core/src/behavior/items/map.rs b/steel-core/src/behavior/items/map.rs index 7ede8cc432c4..2c5ef0b9efaf 100644 --- a/steel-core/src/behavior/items/map.rs +++ b/steel-core/src/behavior/items/map.rs @@ -1,21 +1,25 @@ +use crate::behavior::ItemBehavior; +use crate::world::World; use std::sync::Arc; use steel_macros::item_behavior; use steel_registry::item_stack::ItemStack; use steel_registry::vanilla_items; -use crate::behavior::ItemBehavior; -use crate::world::World; /// The non-empty map item #[item_behavior] pub struct MapItem; impl MapItem { - fn create(level: Arc, origin_x: i32, origin_z: i32, scale: i8, track_position: bool, unlimited_tracking: bool) -> ItemStack { + pub(crate) fn create( + level: &Arc, + origin_x: i32, + origin_z: i32, + scale: i8, + track_position: bool, + unlimited_tracking: bool, + ) -> ItemStack { let mut map = ItemStack::new(&vanilla_items::FILLED_MAP); - } } -impl ItemBehavior for MapItem { - -} \ No newline at end of file +impl ItemBehavior for MapItem {} diff --git a/steel-core/src/behavior/items/mod.rs b/steel-core/src/behavior/items/mod.rs index 2e2ae6e256c5..86eaa2715b74 100644 --- a/steel-core/src/behavior/items/mod.rs +++ b/steel-core/src/behavior/items/mod.rs @@ -37,9 +37,9 @@ mod standing_and_wall_block_item; mod throwable_potion; mod tipped_arrow; +mod empty_map; mod flint_and_steel; mod lead; -mod empty_map; mod map; pub use air::AirItem; @@ -53,6 +53,7 @@ pub use compass::CompassItem; pub use default::DefaultItemBehavior; pub use dye::DyeItem; pub use egg::EggItem; +pub use empty_map::EmptyMapItem; pub use ender_eye::EnderEyeItem; pub use ender_pearl::EnderPearlItem; pub use firework_rocket::FireworkRocketItem; @@ -75,4 +76,3 @@ pub use spyglass::SpyglassItem; pub use standing_and_wall_block_item::StandingAndWallBlockItem; pub use throwable_potion::{LingeringPotionItem, SplashPotionItem}; pub use tipped_arrow::TippedArrowItem; -pub use empty_map::EmptyMapItem; From fe78a1838c90ab51ad37e78a30a05ed18cd82096 Mon Sep 17 00:00:00 2001 From: tn-lorenz Date: Fri, 28 Aug 2026 15:28:35 +0200 Subject: [PATCH 4/4] create fn --- steel-core/src/behavior/items/map.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/steel-core/src/behavior/items/map.rs b/steel-core/src/behavior/items/map.rs index 2c5ef0b9efaf..c20bf742d5ed 100644 --- a/steel-core/src/behavior/items/map.rs +++ b/steel-core/src/behavior/items/map.rs @@ -2,6 +2,9 @@ use crate::behavior::ItemBehavior; use crate::world::World; use std::sync::Arc; use steel_macros::item_behavior; +use steel_registry::data_components::vanilla_components::MAP_ID; +use steel_registry::data_components::{DataComponentType, MapId, vanilla_components}; +use steel_registry::dimension_type::DimensionTypeRef; use steel_registry::item_stack::ItemStack; use steel_registry::vanilla_items; @@ -19,6 +22,28 @@ impl MapItem { unlimited_tracking: bool, ) -> ItemStack { let mut map = ItemStack::new(&vanilla_items::FILLED_MAP); + let new_id = MapItem::create_new_saved_data( + level, + origin_x, + origin_z, + scale, + track_position, + unlimited_tracking, + level.dimension_type, + ); + map.set(MAP_ID, new_id); + map + } + + fn create_new_saved_data( + level: &Arc, + origin_x: i32, + origin_z: i32, + scale: i8, + track_position: bool, + unlimited_tracking: bool, + dimension: DimensionTypeRef, + ) -> MapId { } }