Files
RustNotMC/.gitignore
T
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

46 lines
1.1 KiB
Plaintext

# The fork is rebuilt from the verified vanilla jar, and everything under these
# paths is either Mojang-derived or generated from it. None of it is ours to
# publish: game-fork/src is decompiled Mojang code, game-fork/classes and
# game-fork/mappings are the remapped jar. What we wrote is in src-overlay,
# patches and scripts, and that is what belongs in this repository.
game-fork/src/
game-fork/classes/
game-fork/build/
game-fork/mappings/
game-fork/struct-diff.json
# A game directory: saves, logs, screenshots, native libraries, installed mods.
run/
# build output
build/
dist/
out/
target/
*.class
# what a running server leaves behind. The patterns are anchored on purpose:
# a bare "world/" would also match the world package under
# rsx-server-core/src/main/java/net/rustnotmc/server/world, which is ours.
/rsx-server-core/world/
/rsx-server-core/accounts*.txt
/rsx-server-core/*.txt
# jars are build products; the third-party ones we redistribute are un-ignored
*.jar
!rsx-client/third_party/**/*.jar
# python
__cache__/
__pycache__/
*.pyc
# editors
.idea/
.vscode/
*.iml
# os
Thumbs.db
desktop.ini
.DS_Store