From 62d46bb8d6d6994a62002b6df5f6b04bf589a5e6 Mon Sep 17 00:00:00 2001 From: p2r3 Date: Wed, 13 Aug 2025 18:54:20 +0300 Subject: [PATCH] add daylight cycle and flight --- main.c | 6 ++++++ src/packets.c | 24 ++++++++++++++++++++++++ src/packets.h | 2 ++ 3 files changed, 32 insertions(+) diff --git a/main.c b/main.c index a81d3b7..2d6ebd2 100644 --- a/main.c +++ b/main.c @@ -16,6 +16,8 @@ #include "src/packets.h" #include "src/worldgen.h" +uint64_t world_time = 0; + void handlePacket (int client_fd, int length, int packet_id) { int state = getClientState(client_fd); @@ -79,6 +81,9 @@ void handlePacket (int client_fd, int length, int packet_id) { } sc_setHeldItem(client_fd, player->hotbar); + sc_playerAbilities(client_fd, 0x01 + 0x04); // invulnerability + flight + sc_updateTime(client_fd, world_time); + short _x = player->x / 16, _z = player->z / 16; sc_setDefaultSpawnPosition(client_fd, 8, 80, 8); sc_startWaitingForChunks(client_fd); @@ -275,6 +280,7 @@ int main () { clock_gettime(CLOCK_REALTIME, &time_now); if (time_now.tv_sec - keepalive_last.tv_sec > 10) { sc_keepAlive(client_fd); + sc_updateTime(client_fd, world_time += 200); clock_gettime(CLOCK_REALTIME, &keepalive_last); } } diff --git a/src/packets.c b/src/packets.c index 121771c..ed07eb5 100644 --- a/src/packets.c +++ b/src/packets.c @@ -230,6 +230,30 @@ int sc_setDefaultSpawnPosition (int client_fd, long x, long y, long z) { } +// S->C Player Abilities (clientbound) +int sc_playerAbilities (int client_fd, uint8_t flags) { + + writeVarInt(client_fd, 10); + writeByte(client_fd, 0x39); + + writeByte(client_fd, flags); + writeFloat(client_fd, 0.05f); + writeFloat(client_fd, 0.1f); + +} + +// S->C Update Time +int sc_updateTime (int client_fd, uint64_t ticks) { + + writeVarInt(client_fd, sizeVarInt(0x6A) + 17); + writeVarInt(client_fd, 0x6A); + + writeUint64(client_fd, ticks); + writeUint64(client_fd, ticks); + writeByte(client_fd, true); + +} + // S->C Game Event 13 (Start waiting for level chunks) int sc_startWaitingForChunks (int client_fd) { writeVarInt(client_fd, 6); diff --git a/src/packets.h b/src/packets.h index fe427b2..957c127 100644 --- a/src/packets.h +++ b/src/packets.h @@ -19,6 +19,8 @@ int sc_loginPlay (int client_fd); int sc_synchronizePlayerPosition (int client_fd, double x, double y, double z, float yaw, float pitch); int sc_setDefaultSpawnPosition (int client_fd, long x, long y, long z); int sc_startWaitingForChunks (int client_fd); +int sc_playerAbilities (int client_fd, uint8_t flags); +int sc_updateTime (int client_fd, uint64_t ticks); int sc_setCenterChunk (int client_fd, int x, int y); int sc_chunkDataAndUpdateLight (int client_fd, int _x, int _z); int sc_keepAlive (int client_fd);