Files
RustNotMC/rsx-server-core/scripts
sasheg dev 68dfea27b5 Мир на сервере: чанки, генерация, сохранение и поток игрока
Сервер умел принимать игроков и не умел ничего, что можно увидеть. Мир
был не написан: ни чанков, ни генерации, ни сохранения, ни игровых
пакетов.

Сделано:

- Пакет world: ChunkPos, Chunk, Blocks (теперь в протоколе), WorldGenerator,
  ChunkStorage, World. Генерация чистая функция от зерна и координат, без
  java.util.Random и без общего состояния, потому что чанк может
  появиться через месяц после соседнего, на другой машине, и обязан
  совпасть с ним побайтово. Сохранение — файл на чанк, запись во временный
  файл и перенос, версия и контрольная сумма: половина записанного файла
  это мир, который молча испортился.
- Снимок чанка и запись блока теперь под одним замком. Раньше копия могла
  сняться посреди записи блока, и на диск уходила половина изменения.
- Player: позиция, вид, список отправленных чанков, проверка досягаемости
  блока. Клиент не может переписать блок, до которого не дотянулся.
- Сервер держит мир, крутит его по тику, выкидывает давно не тронутые
  чанки, шлет чанки вокруг игрока и рассылает изменения блоков и передвижения
  тем, кто их видит.
- Клиентский сетевой слой в игре еще не тронут: это следующий шаг.

Проверено: 45 тестов сервера. Из них 25 на мир (детерминизм, круг
сохранения, автосохранение, вытеснение, отказ битому файлу) и 9 сквозных
через настоящий сокет: игрок входит, получает 25 чанков, чанк совпадает с
террейном сервера, блок ломается и остаётся сломанным после перезапуска
сервера, два игрока видят друг друга.
2026-10-19 18:58:07 +03:00
..