aboutsummaryrefslogtreecommitdiff
path: root/server/src/server.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/server.rs')
-rw-r--r--server/src/server.rs13
1 files changed, 9 insertions, 4 deletions
diff --git a/server/src/server.rs b/server/src/server.rs
index 6a310254..fd7db5b5 100644
--- a/server/src/server.rs
+++ b/server/src/server.rs
@@ -16,7 +16,7 @@
*/
use crate::{
- data::{DataIndex, Serverdata},
+ data::{index::GamedataIndex, DataIndex, Serverdata},
entity::{Entities, EntityContext},
interaction::{interact, tick_slot},
scoreboard::ScoreboardStore,
@@ -52,6 +52,7 @@ pub struct Server {
pub tx: Sender<PacketC>,
pub connections: HashMap<ConnectionID, HashSet<PlayerID>>,
pub scoreboard: ScoreboardStore,
+ pub gamedata_index: GamedataIndex,
}
pub trait GameServerExt {
@@ -304,7 +305,8 @@ impl Server {
packet_out: VecDeque::new(),
connections: HashMap::new(),
data: Serverdata::default().into(),
- entities: vec![],
+ gamedata_index: GamedataIndex::default(),
+ entities: Vec::new(),
player_id_counter: PlayerID(1),
score_changed: false,
packet_loopback: VecDeque::new(),
@@ -321,8 +323,6 @@ impl Server {
(gamedata, serverdata, entities): (Gamedata, Serverdata, Entities),
timer: Option<Duration>,
) {
- self.game
- .load(gamedata, &serverdata, timer, &mut self.packet_out);
for mut e in self.entities.drain(..) {
e.destructor(EntityContext {
game: &mut self.game,
@@ -334,6 +334,9 @@ impl Server {
load_map: &mut None,
});
}
+ self.game
+ .load(gamedata, &serverdata, timer, &mut self.packet_out);
+ self.gamedata_index.update(&self.game.data);
self.data = serverdata.into();
self.entities = entities;
}
@@ -579,6 +582,7 @@ impl Server {
tick_slot(
dt,
&self.game.data,
+ &self.gamedata_index,
Some(tile.kind),
&mut tile.item,
ItemLocation::Tile(pos),
@@ -618,6 +622,7 @@ impl Server {
tick_slot(
dt,
&self.game.data,
+ &self.gamedata_index,
None,
&mut player.item,
ItemLocation::Player(pid),