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:
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user