1
0
mirror of https://github.com/p2r3/bareiron.git synced 2025-10-02 07:35:08 +02:00

fix block updates

This commit is contained in:
2025-09-27 19:29:06 +02:00
parent 6f8888bd34
commit 436a640339
4 changed files with 13 additions and 19 deletions

View File

@@ -281,7 +281,6 @@ extern int block_changes_count;
extern DeferredBlockUpdate deferred_block_updates[MAX_DEFERRED_BLOCK_UPDATES]; extern DeferredBlockUpdate deferred_block_updates[MAX_DEFERRED_BLOCK_UPDATES];
extern int deferred_block_updates_count; extern int deferred_block_updates_count;
extern uint8_t is_processing_deferred_block_updates; extern uint8_t is_processing_deferred_block_updates;
extern uint8_t had_too_many_deferred_block_updates;
extern PlayerData player_data[MAX_PLAYERS]; extern PlayerData player_data[MAX_PLAYERS];
extern int player_data_count; extern int player_data_count;

View File

@@ -53,7 +53,6 @@ int block_changes_count = 0;
DeferredBlockUpdate deferred_block_updates[MAX_DEFERRED_BLOCK_UPDATES]; DeferredBlockUpdate deferred_block_updates[MAX_DEFERRED_BLOCK_UPDATES];
int deferred_block_updates_count = 0; int deferred_block_updates_count = 0;
uint8_t is_processing_deferred_block_updates = 0; uint8_t is_processing_deferred_block_updates = 0;
uint8_t had_too_many_deferred_block_updates = false;
PlayerData player_data[MAX_PLAYERS]; PlayerData player_data[MAX_PLAYERS];
int player_data_count = 0; int player_data_count = 0;

View File

@@ -595,9 +595,8 @@ int main () {
// Check if it's time to yield to the idle task // Check if it's time to yield to the idle task
task_yield(); task_yield();
if (had_too_many_deferred_block_updates) { if (deferred_block_updates_count == MAX_DEFERRED_BLOCK_UPDATES) {
printf("WARNING: Too many deferred block updates\n"); printf("WARNING: Deferred block update queue maxed out\n");
had_too_many_deferred_block_updates = 0;
} }
// Attempt to accept a new connection // Attempt to accept a new connection

View File

@@ -1180,7 +1180,6 @@ void processBlockUpdate (short x, uint8_t y, short z, uint8_t block) {
void deferBlockUpdate (short x, uint8_t y, short z, uint8_t awaitTicks) { void deferBlockUpdate (short x, uint8_t y, short z, uint8_t awaitTicks) {
if (deferred_block_updates_count == MAX_DEFERRED_BLOCK_UPDATES) { if (deferred_block_updates_count == MAX_DEFERRED_BLOCK_UPDATES) {
had_too_many_deferred_block_updates = true;
return; return;
} }
@@ -1241,12 +1240,11 @@ void handlePlayerAction (PlayerData *player, int action, short x, short y, short
} }
// Update nearby blocks // Update nearby blocks
uint8_t block_above = getBlockAt(x, y + 1, z); deferBlockUpdate(x, y + 1, z, 0);
processBlockUpdate(x, y + 1, z, block_above); deferBlockUpdate(x - 1, y, z, 0);
processBlockUpdate(x - 1, y, z, getBlockAt(x - 1, y, z)); deferBlockUpdate(x + 1, y, z, 0);
processBlockUpdate(x + 1, y, z, getBlockAt(x + 1, y, z)); deferBlockUpdate(x, y, z - 1, 0);
processBlockUpdate(x, y, z - 1, getBlockAt(x, y, z - 1)); deferBlockUpdate(x, y, z + 1, 0);
processBlockUpdate(x, y, z + 1, getBlockAt(x, y, z + 1));
} }
void handlePlayerUseItem (PlayerData *player, short x, short y, short z, uint8_t face) { void handlePlayerUseItem (PlayerData *player, short x, short y, short z, uint8_t face) {
@@ -1382,8 +1380,7 @@ void handlePlayerUseItem (PlayerData *player, short x, short y, short z, uint8_t
(y == player->y || y == player->y + 1) && (y == player->y || y == player->y + 1) &&
z == player->z z == player->z
) && ) &&
isReplaceableBlock(getBlockAt(x, y, z)) && isReplaceableBlock(getBlockAt(x, y, z))
(!isColumnBlock(block) || getBlockAt(x, y - 1, z) != B_air)
) { ) {
// Apply server-side block change // Apply server-side block change
if (makeBlockChange(x, y, z, block)) return; if (makeBlockChange(x, y, z, block)) return;
@@ -1393,11 +1390,11 @@ void handlePlayerUseItem (PlayerData *player, short x, short y, short z, uint8_t
if (*count == 0) *item = 0; if (*count == 0) *item = 0;
// Send updates // Send updates
processBlockUpdate(x, y, z, block); processBlockUpdate(x, y, z, block);
processBlockUpdate(x, y + 1, z, getBlockAt(x, y + 1, z)); deferBlockUpdate(x, y + 1, z, 0);
processBlockUpdate(x - 1, y, z, getBlockAt(x - 1, y, z)); deferBlockUpdate(x - 1, y, z, 0);
processBlockUpdate(x + 1, y, z, getBlockAt(x + 1, y, z)); deferBlockUpdate(x + 1, y, z, 0);
processBlockUpdate(x, y, z - 1, getBlockAt(x, y, z - 1)); deferBlockUpdate(x, y, z - 1, 0);
processBlockUpdate(x, y, z + 1, getBlockAt(x, y, z + 1)); deferBlockUpdate(x, y, z + 1, 0);
} }
// Sync hotbar contents to player // Sync hotbar contents to player