5a1ea2343ec93e38604e754e80b38aee2e932e0d
Девятый этап и вход в пустоту: счётчик в файле плюс возможность войти в одиночку. Счётчик 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. Сервер добавляет префикс папки мира и санитизирует путь, так что угадать его в коде было бы верным способом не заработать. Проверка по имени мира, а не по флагам уровня. Проверено на сервере: команда отвечает, измерение находится, генератор кладёт барьерные слои на нескольких высотах. Сам перенос игрока не проверялся — нужен живой игрок.
Description
BlackKnife plugin - DeltaMine
Languages
Java
100%