68dfea27b5
Сервер умел принимать игроков и не умел ничего, что можно увидеть. Мир был не написан: ни чанков, ни генерации, ни сохранения, ни игровых пакетов. Сделано: - Пакет world: ChunkPos, Chunk, Blocks (теперь в протоколе), WorldGenerator, ChunkStorage, World. Генерация чистая функция от зерна и координат, без java.util.Random и без общего состояния, потому что чанк может появиться через месяц после соседнего, на другой машине, и обязан совпасть с ним побайтово. Сохранение — файл на чанк, запись во временный файл и перенос, версия и контрольная сумма: половина записанного файла это мир, который молча испортился. - Снимок чанка и запись блока теперь под одним замком. Раньше копия могла сняться посреди записи блока, и на диск уходила половина изменения. - Player: позиция, вид, список отправленных чанков, проверка досягаемости блока. Клиент не может переписать блок, до которого не дотянулся. - Сервер держит мир, крутит его по тику, выкидывает давно не тронутые чанки, шлет чанки вокруг игрока и рассылает изменения блоков и передвижения тем, кто их видит. - Клиентский сетевой слой в игре еще не тронут: это следующий шаг. Проверено: 45 тестов сервера. Из них 25 на мир (детерминизм, круг сохранения, автосохранение, вытеснение, отказ битому файлу) и 9 сквозных через настоящий сокет: игрок входит, получает 25 чанков, чанк совпадает с террейном сервера, блок ломается и остаётся сломанным после перезапуска сервера, два игрока видят друг друга.
46 lines
1.1 KiB
Plaintext
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 |