Skip to content

Commit dd1b152

Browse files
committed
inventory syncing
1 parent 7d404b2 commit dd1b152

File tree

2 files changed

+32
-16
lines changed

2 files changed

+32
-16
lines changed

src/lib/inventory/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ ferrumc-text = { workspace = true }
1111
ferrumc-ecs = { workspace = true }
1212
ferrumc-events = { workspace = true }
1313
ferrumc-macros = { workspace = true }
14+
ferrumc-core = { workspace = true }
1415
ferrumc-state = { workspace = true }
1516

1617
tokio = {workspace = true }

src/lib/inventory/src/inventory.rs

+31-16
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use crate::events::inventory_open::OpenInventoryEvent;
33
use crate::slot::Slot;
44
use std::collections::BTreeMap;
55

6+
use ferrumc_core::chunks::chunk_receiver::ChunkReceiver;
67
use ferrumc_ecs::entities::Entity;
78
use ferrumc_ecs::errors::ECSError;
89
use ferrumc_events::infrastructure::Event;
@@ -148,6 +149,36 @@ impl Inventory {
148149
}
149150
}
150151

152+
pub async fn sync_inventory(&mut self, state: Arc<ServerState>) -> Result<(), InventoryError> {
153+
let universe = &state.universe;
154+
let query = universe
155+
.get_component_manager()
156+
.get_entities_with::<ChunkReceiver>();
157+
158+
for entity_id in query {
159+
let inventory_result = universe.get_mut::<Inventory>(entity_id);
160+
match inventory_result {
161+
Ok(inventory) => {
162+
let mut writer = universe.get_mut::<StreamWriter>(entity_id)?;
163+
let contents = inventory.contents.construct_packet_contents();
164+
writer
165+
.send_packet(
166+
&SetContainerContentPacket::new(
167+
*inventory.id as u8,
168+
contents,
169+
NetworkSlot::empty(),
170+
),
171+
&NetEncodeOpts::WithLength,
172+
)
173+
.await?;
174+
}
175+
Err(err) => return Err(InventoryError::ECSError(err)),
176+
}
177+
}
178+
179+
Ok(())
180+
}
181+
151182
pub async fn add_viewer(
152183
self,
153184
state: Arc<ServerState>,
@@ -179,22 +210,6 @@ impl Inventory {
179210
)
180211
.await?;
181212

182-
// let contents = self.get_contents();
183-
// if !contents.is_empty() {
184-
// for (&slot_num, &slot) in contents.iter() {
185-
// writer
186-
// .send_packet(
187-
// &SetContainerSlotPacket::new(
188-
// id,
189-
// slot_num as i16,
190-
// slot.to_network_slot(),
191-
// ),
192-
// &NetEncodeOpts::WithLength,
193-
// )
194-
// .await?;
195-
// }
196-
// }
197-
198213
// handle event
199214
let event = OpenInventoryEvent::new(entity_id).inventory_id(*id);
200215
OpenInventoryEvent::trigger(event, state.clone()).await?;

0 commit comments

Comments
 (0)