Управлять окружением
Сделать панель управления подтверждёнными параметрами окружения.
Сделаем небольшое окно для настройки Minecraft-окружения: времени суток, фазы Луны,
гаммы и дальности. Все изменения выполняются через editorAPI.sky.
Скачать полный пример environment.js. После установки нажмите кнопку с иконкой солнца на панели инструментов. Открытие окна ничего не меняет в сцене; изменения применяются по кнопке.
Параметры панели
| Поле | Метод | Значения в примере |
|---|---|---|
| Время суток | setDayTime(ticks) |
0-23999 тиков внутри суток |
| Фаза Луны | setMoonPhase(index) |
Индекс из getMoonPhases() |
| Гамма | setGamma(value) |
0-1 |
| Дальность | setRenderDistance(chunks) |
2-250 чанков |
Время меняется только при действии пользователя. Здесь нет таймера, который
автоматически ведёт сутки. tick(delta) существует для пошагового продвижения,
но запуск и остановка такого цикла были бы ответственностью плагина.
Это параметры Minecraft-окружения редактора. Панель не настраивает сервер Minecraft, не записывает игровые команды и не управляет гаммой постобработки RT-изображения.
Подтвердить методы
const sky = window.editorAPI.sky;const state = sky.getState();if (!state) throw new Error('Окружение недоступно.');
console.log(state.dayTime, state.moonPhaseName, state.gamma);console.log(sky.getMoonPhases());getState() возвращает текущее состояние, включая active, owners, totalTicks,
dayTime, moonPhase, moonPhaseName, gamma и renderDistanceChunks.
Если подсистема отсутствует, возвращается null; список фаз в этом случае пустой.
setTime(ticks) устанавливает общее время с учётом дней. setDayTime(ticks) сохраняет
текущий день и меняет положение внутри суток, нормализуя значение по циклу 24000.
Для возврата к снимку состояния используйте totalTicks, а не только dayTime:
номер дня определяет фазу Луны.
setMoonPhase принимает индекс либо точное имя из getMoonPhases(). Внутри метод
переставляет день текущего лунного цикла, сохраняя время суток. setGamma ограничивает
число диапазоном 0-1, дальность ограничивается 2-250. В текущем окружении граница
тумана рассчитывается как min(chunks * 16, 512); это не дальность загрузки игровых чанков.
Состав состояния и остальные операции: справочник API окружения.
Панель и значения
Пример создаёт стандартное окно через createWindow, заполняет поля из getState()
и проверяет их встроенной валидацией HTML-формы. У него есть три действия:
- «Применить и включить» отправляет настройки и включает окружение от имени API.
- «Снять включение через API» снимает только включение от
editor-api. - «Восстановить значения при открытии» возвращает снимок, сделанный при открытии этого окна.
const initial = window.editorAPI.sky.getState();const panel = window.editorAPI.createWindow( 'Учебное окружение', 'my-plugin.environment', 'icon-sun', 520, 470, 320, 380);// Создайте input/select и добавьте их в panel.container.Как организовать своё окно и избежать повторных экземпляров: добавить кнопку и собственное окно.
Применение и состояние
Параметр {render: false} позволяет последовательно задать несколько значений
без отдельного рендера после каждого вызова. Последний enable() обновляет изображение:
const sky = window.editorAPI.sky;sky.setDayTime(18000, {render: false});sky.setMoonPhase(0, {render: false});sky.setGamma(0.5, {render: false});sky.setRenderDistance(16, {render: false});sky.enable();Если активация уже выполнена и нужно только обновить время и освещение, используйте
refresh(). Значения также можно менять при выключенном окружении; это само по себе
не означает его включения.
У окружения несколько владельцев. Например, оно может быть нужно режиму погружения,
Animator или Live Link. sky.disable() удаляет владельца editor-api, но окружение
может остаться активным из-за другого владельца. Кроме того, все плагины, вызывающие
публичный sky.enable(), используют одно имя editor-api, а не отдельное имя каждого плагина.
Не обещайте независимый переключатель для каждого расширения.
Полный пример восстанавливает время, гамму, дальность и прежнее участие editor-api.
Это возврат значений из снимка, а не отмена через историю. Если за это время пользователь
или другой плагин поменял окружение, восстановление заменит и эти более новые значения.
Поэтому действие оставлено явной кнопкой, а закрытие окна не меняет окружение.
Проверка границ
- Откройте окно и убедитесь, что поля отражают текущее состояние.
- Примените полдень и ночь, затем смените фазу Луны. После смены фазы время внутри суток должно сохраниться.
- Проверьте гамму
0и1, а также дальность2и32чанка. Дальнейшее повышение дальности не обязано отодвигать туман за предел512блоков. - Нажмите восстановление и сравните поля с исходными. Для чистой проверки приостановите другие механизмы, которые обновляют время.
- Снимите включение через API и проверьте
active/owners. Оставшийся владелец объясняет, почему окружение всё ещё отображается.
Вызовы этого API не создают запись Undo и сами не сериализуют настройки в проект. Если плагину нужно восстанавливать свои значения после перезапуска, продумайте отдельное хранение и явный момент применения. Не связывайте эти настройки автоматически с экспортом, RT или состоянием подключённого игрового мира.
Методы и диапазоны сверены с publicFunctions.js и MinecraftSky.js.
В примере нет обращения к внутреннему editor и нет таймеров, продолжающих менять сцену
после закрытия окна.