summaryrefslogtreecommitdiffstats
path: root/game/server/receive.cc
diff options
context:
space:
mode:
authoruntodesu <kirill@untode.su>2025-03-16 21:29:35 +0500
committeruntodesu <kirill@untode.su>2025-03-16 21:29:35 +0500
commit68b0b663514d1a5dcf79cfbdeea544b5d69ed1ed (patch)
treee9b58a03b2b1004d05a3094655dc8537c00b44d8 /game/server/receive.cc
parentfd50a3687d8859764aa6c038545e93fa0ce7bd46 (diff)
downloadvoxelius-68b0b663514d1a5dcf79cfbdeea544b5d69ed1ed.tar.bz2
voxelius-68b0b663514d1a5dcf79cfbdeea544b5d69ed1ed.zip
Attempt to fix ghosted chunks
Diffstat (limited to 'game/server/receive.cc')
-rw-r--r--game/server/receive.cc34
1 files changed, 10 insertions, 24 deletions
diff --git a/game/server/receive.cc b/game/server/receive.cc
index d2862e2..780ae53 100644
--- a/game/server/receive.cc
+++ b/game/server/receive.cc
@@ -85,41 +85,27 @@ static void on_set_voxel_packet(const protocol::SetVoxel &packet)
auto index = coord::to_index(lpos);
if(worldgen::is_generating(session->dimension, cpos)) {
- // The chunk is currently being
- // generated, so we must ignore any
- // requests from players to build there
+ // The chunk is currently being generated;
+ // ignore all requests from players to build there
return;
}
auto chunk = session->dimension->find_chunk(cpos);
- auto created = false;
if(chunk == nullptr) {
- chunk = universe::load_chunk(session->dimension, cpos);
- created = true;
+ // The chunk is not loaded, so we must
+ // ignore any requests from players to build there
+ return;
}
- if(chunk == nullptr) {
- chunk = session->dimension->create_chunk(cpos);
- created = true;
- }
-
chunk->set_voxel(packet.voxel, index);
- if(created) {
- session->dimension->chunks.emplace_or_replace<InhabitedComponent>(chunk->get_entity());
+ session->dimension->chunks.emplace_or_replace<InhabitedComponent>(chunk->get_entity());
- protocol::ChunkVoxels response;
- response.voxels = chunk->get_voxels();
- response.chunk = cpos;
- sessions::broadcast(session->dimension, protocol::encode(response));
- }
- else {
- protocol::SetVoxel response;
- response.vpos = packet.vpos;
- response.voxel = packet.voxel;
- sessions::broadcast(session->dimension, protocol::encode(response), session->peer);
- }
+ protocol::SetVoxel response;
+ response.vpos = packet.vpos;
+ response.voxel = packet.voxel;
+ sessions::broadcast(session->dimension, protocol::encode(response), session->peer);
return;
}