SashegDev 5a1ea2343e feat(void): persisted void counter and solo entry into the void world
Девятый этап и вход в пустоту: счётчик в файле плюс возможность войти в одиночку.

Счётчик void:
- живёт в plugins/BlackKnife/void.yml, по условию в файле, а не в PDC
- пишется через временный файл и атомарную подмену: при убийстве сервера в
  момент записи остаётся предыдущая целая версия, а не обрезанный файл
- сохранение раз в минуту асинхронно и синхронно при выключении, потому что
  после cancelTasks асинхронная задача уже не выполнится
- порог 20, команда /blackknife void get|set|add [player] — нужна и для
  настройки баланса, и для проверки: двадцать нор ждать долго

Вход в пустоту:
- при счётчике от 20 дыра работает и без ответа: в неё можно войти и оказаться
  в пустоте
- пускает ТОЛЬКО открывший. Иначе счётчик превратился бы в телепорт для всех,
  и весь смысл накопления теряется
- точка входа запоминается: обратный выход пойдёт по соотношению 1:2, поэтому
  выход не равен входу по координатам
- приземление ищется через getHighestBlockYAt, а не вычисляется: высота, на
  которую лягут слои барьера, зависит от версии, а поиск верхнего блока
  находит пол всегда

Voidness копится раз в секунду (период задачи эмбиента ровно 60 тиков) и
обнуляется на выходе: счётчик сессионный, рестарт его тоже убирает.

Найденное имя измерения: world_delta_void_void_world. Сервер добавляет
префикс папки мира и санитизирует путь, так что угадать его в коде было бы
верным способом не заработать. Проверка по имени мира, а не по флагам уровня.

Проверено на сервере: команда отвечает, измерение находится, генератор кладёт
барьерные слои на нескольких высотах. Сам перенос игрока не проверялся —
нужен живой игрок.
2026-10-17 15:52:28 +00:00
S
Description
BlackKnife plugin - DeltaMine
611 KiB
Languages
Java 100%