fix delayed fall damage from swimming

Closes #61
This commit is contained in:
p2r3
2025-09-14 03:23:50 +03:00
parent 39f5c69bc3
commit 1f9aa50573

View File

@@ -213,16 +213,18 @@ void handlePacket (int client_fd, int length, int packet_id, int state) {
PlayerData *player; PlayerData *player;
if (getPlayerData(client_fd, &player)) break; if (getPlayerData(client_fd, &player)) break;
uint8_t block_feet = getBlockAt(player->x, player->y, player->z);
uint8_t swimming = block_feet >= B_water && block_feet < B_water + 8;
// Handle fall damage // Handle fall damage
if (on_ground) { if (on_ground) {
int16_t damage = player->grounded_y - player->y - 3; int16_t damage = player->grounded_y - player->y - 3;
if (damage > 0 && (GAMEMODE == 0 || GAMEMODE == 2)) { if (damage > 0 && (GAMEMODE == 0 || GAMEMODE == 2) && !swimming) {
uint8_t block_feet = getBlockAt(player->x, player->y, player->z); hurtEntity(client_fd, -1, D_fall, damage);
if (block_feet < B_water || block_feet > B_water + 7) {
hurtEntity(client_fd, -1, D_fall, damage);
}
} }
player->grounded_y = player->y; player->grounded_y = player->y;
} else if (swimming) {
player->grounded_y = player->y;
} }
// Don't continue if all we got were flags // Don't continue if all we got were flags