@@ -3,6 +3,7 @@ use crate::events::inventory_open::OpenInventoryEvent;
3
3
use crate :: slot:: Slot ;
4
4
use std:: collections:: BTreeMap ;
5
5
6
+ use ferrumc_core:: chunks:: chunk_receiver:: ChunkReceiver ;
6
7
use ferrumc_ecs:: entities:: Entity ;
7
8
use ferrumc_ecs:: errors:: ECSError ;
8
9
use ferrumc_events:: infrastructure:: Event ;
@@ -148,6 +149,36 @@ impl Inventory {
148
149
}
149
150
}
150
151
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
+
151
182
pub async fn add_viewer (
152
183
self ,
153
184
state : Arc < ServerState > ,
@@ -179,22 +210,6 @@ impl Inventory {
179
210
)
180
211
. await ?;
181
212
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
-
198
213
// handle event
199
214
let event = OpenInventoryEvent :: new ( entity_id) . inventory_id ( * id) ;
200
215
OpenInventoryEvent :: trigger ( event, state. clone ( ) ) . await ?;
0 commit comments