prevent players from leaving world boundaries

This commit is contained in:
p2r3
2025-08-23 02:30:05 +03:00
parent d0dfa01d9d
commit bbbf137388
3 changed files with 15 additions and 4 deletions

View File

@@ -167,7 +167,7 @@ void handlePacket (int client_fd, int length, int packet_id) {
// Handle fall damage
if (on_ground) {
int8_t damage = player->grounded_y - player->y - 3;
int16_t damage = player->grounded_y - player->y - 3;
if (damage > 0 && getBlockAt(player->x, player->y, player->z) != B_water) {
hurtEntity(client_fd, -1, D_fall, damage);
}
@@ -224,6 +224,15 @@ void handlePacket (int client_fd, int length, int packet_id) {
short dx = _x - (player->x < 0 ? player->x - 16 : player->x) / 16;
short dz = _z - (player->z < 0 ? player->z - 16 : player->z) / 16;
// Prevent players from leaving the world
if (cy < 0) {
cy = 0;
sc_synchronizePlayerPosition(client_fd, cx, 0, cz, player->yaw * 180 / 127, player->pitch * 90 / 127);
} else if (cy > 255) {
cy = 255;
sc_synchronizePlayerPosition(client_fd, cx, 255, cz, player->yaw * 180 / 127, player->pitch * 90 / 127);
}
// Update position in player data
player->x = cx;
player->y = cy;

View File

@@ -47,7 +47,8 @@ void resetPlayerData (PlayerData *player) {
player->hunger = 20;
player->x = 8;
player->z = 8;
player->y = -32767;
player->y = 0;
player->flags &= 0x02;
player->grounded_y = 0;
for (int i = 0; i < 41; i ++) {
player->inventory_items[i] = 0;
@@ -203,7 +204,7 @@ void spawnPlayer (PlayerData *player) {
float spawn_x = 8.5f, spawn_y = 80.0f, spawn_z = 8.5f;
float spawn_yaw = 0.0f, spawn_pitch = 0.0f;
if (player->y == -32767) { // Is this a new player?
if ((player->flags & 0x02) == 0) { // Is this a new player?
// Determine spawning Y coordinate based on terrain height
spawn_y = getHeightAt(8, 8) + 1;
} else { // Not a new player