Custom Biome
Обзор
Custom Biome позволяет создавать собственные биомы из веб-панели TypeWriter: цвета травы, листвы, воды, неба и тумана, настройки облаков и солнца, температуру и осадки. Новый биом создаётся на основе ванильного базового биома, поэтому появление мобов, особенности генерации и другие свойства наследуются, а переопределяете вы только то, что хотите изменить.
Биом можно использовать двумя способами. Его можно нарисовать в мире: в радиусе блоков, в выделении WorldEdit или в захваченной области, а позже вернуть прежние биомы из снимка. Либо его можно показать только одному игроку или аудитории с помощью наложения для каждого игрока: мир остаётся нетронутым, и никто другой изменений не видит. Так, например, заражённый лес может появляться только во время квеста.
Возможности
- Определения биомов — цвета (трава, листва, сухая листва, вода, небо, туман, туман в воде, облака, свет неба, рассвет/закат), расстояния тумана и облаков, настройки солнца, луны и звёзд, температура и осадки.
- Пресеты — общая палитра для нескольких биомов, где переопределяется только отличающееся.
- Регистрация на лету — биомы по возможности вносятся в реестр сервера и записываются в генерируемый датапак, чтобы пережить перезапуски.
- Рисование в мире — применение биома вокруг игрока или по области с необязательным снимком для отмены.
- Наложения для каждого игрока — показ биома одному игроку или аудитории через действие, аудиторию или кинематографическую сцену.
- События входа и выхода — запуск записей, когда игрок входит в биом или покидает его.
- Открытия — запоминание того, какие биомы посетил каждый игрок, и использование этого в фактах и квестах.
- Факты, переменные и плейсхолдеры — чтение текущего биома, его свойств и числа открытых биомов.
- Команды оператора — список биомов, просмотр биома под игроком, рисование, обновление и захват области.
- Готов к Folia — запись планируется в регионе, которому принадлежит каждый чанк.
Установка
- Установите PacketEvents. С его помощью отправляются наложения и обновления чанков; без него наложения отключены.
- Установите расширение TypeWriter Quest на вкладке Extensions веб-панели (его использует цель).
- По желанию: установите WorldEdit или FastAsyncWorldEdit, чтобы рисовать по выделению, сделанному в игре.
- По желанию: установите PlaceholderAPI, чтобы использовать плейсхолдеры ниже.
- Положите JAR-файл Custom Biome в
plugins/Typewriter/extensions/и перезапустите сервер.
Определения биомов записываются в датапак typewriter_custom_biomes в папке datapacks мира.
Визуальные атрибуты (расстояния тумана, высота облаков, настройки солнца, луны и звёзд) в исходном коде помечены как относящиеся к Minecraft 1.21.11 и новее. В более старых версиях действуют только цвета и климат.
Быстрый старт
Создадим фиолетовый лес и покажем его игрокам на шаге квеста:
- В веб-панели TypeWriter откройте страницу manifest и добавьте запись Custom Biome Definition.
- Задайте
biomeId(строчные буквы, подчёркивания, напримерcorrupted_forest) и оставьтеnamespaceравнымtypewriter. УстановитеbaseBiomeвminecraft:forest. - Заполните цвета, которые хотите изменить, в формате hex, например
grassColor#6a3d9aиfoliageColor#4b2a73. Пустые поля наследуются от базового биома. - Опубликуйте, затем выполните в игре
/tw biome list, чтобы убедиться, что биом активен. Если он отображается как ожидающий перезапуска, перезапустите сервер. - На странице manifest добавьте Biome Overlay Audience, выберите определение в
biomeи поместите запись под аудиторию, соответствующую шагу вашего квеста. Игрок видит биом, пока находится в аудитории, а настоящий биом возвращается, когда он её покидает (restoreOnExit). - Чтобы ограничить биом зоной, задайте
cornerAиcornerBлибо встаньте в игре с выделением WorldEdit и выполните/tw biome region <entry>, чтобы заполнить углы.
Чтобы изменить сам мир, используйте Apply Biome или Paint Biome Region в последовательности действий. Задайте рисованию snapshotId, если хотите, чтобы Restore Biome мог его отменить.
Создайте Custom Biome Preset для семейства биомов с одинаковыми небом и туманом и выберите его в preset каждого определения. Значения, заданные в определении, приоритетнее пресета, а пресет приоритетнее базового биома.
Как это работает
Рисование записывает биом в данные мира, поэтому влияет на всех игроков и переживает перезапуск. Наложение отправляется только клиенту игрока: ничего не сохраняется, а его удаление возвращает настоящий биом. Если несколько наложений покрывают один чанк, показывается применённое последним, а его удаление открывает предыдущее.
Факты, переменные и плейсхолдеры по умолчанию читают биом, который игрок видит (PLAYER_VIEW, наложения включены). Задайте для фактов и переменных source равным REAL_WORLD, чтобы читать то, что на самом деле находится в мире.
Конфигурация
Данные времени выполнения хранятся в plugins/Typewriter/custombiome/:
| Папка | Содержимое |
|---|---|
discovery/ | По одному JSON-файлу на игрока (<uuid>.json) со списком посещённых им биомов. |
snapshots/ | Биомы, записанные Paint Biome Region, если задан snapshotId. |
Команды
Корневая команда — /tw biome, для неё нужно typewriter.biome. Каждой подкоманде также нужно собственное право.
| Команда | Описание |
|---|---|
/tw biome | Показывает список команд. |
/tw biome list | Выводит пользовательские биомы и показывает, активен ли каждый, ожидает ли перезапуска или не зарегистрирован. |
/tw biome info [player] | Показывает биом, в котором стоит игрок: название, ID, является ли он пользовательским, температуру, осадки и базовый биом. |
/tw biome apply <biome> [radius] | Рисует биом вокруг вас или целевого игрока в радиусе в блоках. |
/tw biome refresh [radius] | Заново отправляет данные биомов (радиус от 1 до 16 чанков) для чанков, нарисованных этим расширением рядом с игроком. |
/tw biome region <entry> | Копирует ваше выделение WorldEdit в cornerA и cornerB записи области, после чего опубликуйте страницу. |
Редактируемые тексты
Всё, что команды /tw biome выводят в игре, — это сниппеты TypeWriter, поэтому их можно переформулировать, перевести или перекрасить без пересборки. Откройте plugins/Typewriter/snippets.yml, найдите ключ в content.custombiome, измените значение и выполните /tw reload. Расширение регистрирует все свои сниппеты с текстом по умолчанию при запуске, поэтому после первого запуска они появляются в файле.
Тексты написаны в MiniMessage. {name} в тексте заменяется значением, указанным в таблице; пропущенный плейсхолдер просто не показывается, а несуществующий остаётся как написан. Плейсхолдеры PlaceholderAPI (%...%) тоже читаются, если команду выполняет игрок. Только префикс ответа Typewriter в коротких ответах (Typewriter ») приходит из движка и не входит в эти сниппеты, а журнал консоли сервера остаётся на английском.
Сниппет (в content.custombiome.) | По умолчанию | Плейсхолдеры |
|---|---|---|
command.list.empty | <yellow>No custom biomes registered.</yellow> | нет |
command.list.header | <gradient:#00d4ff:#0099ff><b>Custom Biomes ({count})</b></gradient>, с пустой строкой перед ним | {count} |
command.list.strategy | <dark_gray>Strategy: {strategy}</dark_gray>, с пустой строкой после него | {strategy} |
command.list.strategy_live | live registry injection (reflection) | нет |
command.list.strategy_unsupported | unsupported ({reason}) | {reason} (техническое, на английском) |
command.list.icon_live, icon_waiting, icon_missing | • зелёным, ⚠ жёлтым, ✖ красным | нет |
command.list.status_live, status_waiting, status_missing | тексты при наведении: Live in the registry, Written to the datapack — needs a restart, Not registered | нет |
command.list.entry | одна строка на биом, с текстом при наведении и копированием по клику | {icon}, {status}, {name}, {key}, {temperature}, {downfall} |
command.list.temperature, command.list.downfall | T:{value} и D:{value} серым | {value} |
command.info.header | Biome Info for {player} | {player} |
command.info.name, id, temperature, downfall, base_biome | Name:, ID:, Temperature:, Downfall:, Base Biome:, затем значение | {value} |
command.info.custom_yes, custom_no | Custom: Yes и Custom: No | нет |
command.help.title | Custom Biome Commands | нет |
command.help.list, info, apply, refresh, region | по одной строке справки на команду | нет |
command.region.no_selection | No WorldEdit selection (or WorldEdit is not installed). | нет |
command.region.page_not_found | Could not find the page holding '{entry}'. | {entry} |
command.region.write_failed | Could not write the region: {failures} | {failures} (техническое, на английском) |
command.region.done | Region of {entry} set to {min} → {max} in {world}. | {entry}, {min}, {max} (в виде x, y, z), {world} |
command.region.publish_hint | Publish the page for it to take effect. | нет |
command.refresh.none | No painted chunks near {player} to refresh. | {player} |
command.refresh.done | Resent biome data for {chunks} painted chunk(s) to {player}. | {chunks}, {player} |
command.apply.unknown | Unknown biome: {biome} | {biome} |
command.apply.unknown_hint | Use /tw biome list to see available custom biomes. | нет |
command.apply.nothing | Nothing to paint at that location. | нет |
command.apply.done | Painting {biome} over {cells} cell(s) across {chunks} chunk(s). | {biome}, {cells}, {chunks} |
placeholder.unknown | unknown | нет |
Три сниппета наведения для /tw biome list находятся внутри аргумента MiniMessage в одинарных кавычках, поэтому в них нельзя использовать одинарную кавычку.
placeholder.unknown — это то, что %typewriter_temperature%, %typewriter_downfall% и переменная Biome Property возвращают для биома, не являющегося пользовательским. true и false, возвращаемые %typewriter_is_custom%, остаются фиксированными, потому что условия сравнивают с ними.
Права
| Право | Даёт доступ к |
|---|---|
typewriter.biome | Доступ к дереву команд /tw biome. |
typewriter.biome.list | /tw biome list |
typewriter.biome.info | /tw biome info |
typewriter.biome.apply | /tw biome apply |
typewriter.biome.refresh | /tw biome refresh |
typewriter.biome.region | /tw biome region |
Плейсхолдеры
Плейсхолдеры PlaceholderAPI, обслуживаемые расширением typewriter. Плейсхолдеры игрока читают биом, который игроку показывается.
| Плейсхолдер | Возвращает |
|---|---|
%typewriter_current% или %typewriter_id% | Ключ биома под игроком, например minecraft:plains. |
%typewriter_name% | Читаемое название биома. |
%typewriter_key% | Только часть ключа. |
%typewriter_namespace% | Только часть пространства имён. |
%typewriter_is_custom% | true или false. |
%typewriter_temperature% | Температура пользовательского биома, иначе unknown. |
%typewriter_downfall% | Осадки пользовательского биома, иначе unknown. |
%typewriter_base% | Базовый биом пользовательского биома или сам ключ биома. |
%typewriter_count% | Число зарегистрированных пользовательских биомов. |
%typewriter_list% | Отображаемые названия пользовательских биомов через запятую. |
%typewriter_discovered_count% | Число биомов, которые посетил игрок. |
%typewriter_discovered_list% | Ключи биомов, которые посетил игрок. |
Расширение отвечает на указанные выше простые имена (%typewriter_current%, %typewriter_count% и так далее). В комментарии в его исходном коде упоминается префикс custombiome_, но код совпадает только с простыми именами.
Записи
Записей: 20, сгенерированы из исходного кода расширения.
Действия5
- Apply Biome ActionApply a biome to a location with optional radius
- Paint Biome Region ActionPaint a biome over a region, with an optional snapshot to undo it later
- Player Biome Overlay ActionShow a biome to a single player without changing the world
- Refresh Biome Chunks ActionRefresh biome data for chunks around the player
- Restore Biome ActionRestore biomes previously recorded by a paint snapshot
События2
- Enter Biome EventTriggered when a player enters a biome
- Leave Biome EventTriggered when a player leaves a biome
Цели1
- Explore Biome ObjectiveObjective completed by discovering one or more biomes
Факты4
- Biome Discovery FactHow many biomes the player has discovered, or whether specific ones were found
- Custom Biome Count FactReturns the number of registered custom biomes
- Is in Custom Biome FactReturns 1 if player is in a custom biome, 0 otherwise
- Player Biome FactExpose the player's current biome as a fact value
Аудитории2
- Biome Overlay AudienceShow a biome to the audience without changing the world
- Biome Region AudienceKeep the players standing inside a region defined by two captured corners
Кинематики1
- Biome Transition CinematicChange the biome a player sees during a cinematic
Переменные3
- Biome Property VariableReturns a property of the player's current biome
- Current Biome VariableReturns the player's current biome name
- Custom Biome List VariableReturns a list of registered custom biomes
Манифесты2
- Custom Biome DefinitionDefine a custom biome with colors and climate settings
- Custom Biome PresetA reusable set of colors and visual attributes shared by several biomes
Устранение неполадок
/tw biome list показывает значок предупреждения и «needs a restart». Серверу не удалось добавить биом в живой реестр, поэтому он существует только в сгенерированном датапаке. Перезапустите сервер. Причина один раз записывается в консоль.
Мой биом не находится действием или событием. Идентификаторы биомов имеют вид namespace:id, например typewriter:corrupted_forest. Точный ключ смотрите в /tw biome list. Неизвестный идентификатор записывается в лог как предупреждение (unknown biome '…'), и действие ничего не делает.
Игрок никогда не видит наложение. Для наложений нужен PacketEvents: иначе консоль выводит PacketEvents unavailable: per-player biome overlays are disabled. Также проверьте, что игрок находится в аудитории, что биом настроен (пользовательское определение или vanillaBiome) и, для области, что оба угла находятся в загруженном мире.
Paint Biome Region ничего не делает. Если region равно WORLDEDIT_SELECTION, у вызвавшего игрока должно быть выделение WorldEdit, а сам WorldEdit должен быть установлен; консоль выводит has no WorldEdit selection. В остальных случаях используйте RADIUS_AROUND_PLAYER.
Restore Biome сообщает, что снимка не существует. Снимки записываются, только если у действия рисования есть snapshotId, и восстановление должно использовать то же имя. Если включено consume, снимок удаляется после восстановления.