Craft Engine
Обзор
Craft Engine соединяет CraftEngine с TypeWriter. Ваши пользовательские блоки, мебель и предметы становятся тем, на что может реагировать квест: события, когда игрок ломает, ставит или кликает по ним, цели, которые их считают, факты и переменные, читающие то, что игрок держит или на что смотрит, и действия, которые их ставят, заменяют или удаляют.
Вторая половина расширения — квестовая зона. Квестовая зона даёт каждому игроку собственную версию области. То, что игрок ломает, ставит или меняет, записывается только для этого игрока, отправляется ему пакетами и возвращается, когда он приходит снова. В настоящий мир никогда ничего не записывается, поэтому выход из зоны ничего не стоит, а если сервер остановится посреди квеста, ничего не останется недоделанным. Зоной также может пользоваться группа, чтобы отряд вместе зачищал комнату.
Расширение написано для Paper и Folia: любое изменение мира или инвентаря выполняется в регионе, которому оно принадлежит.
Возможности
- События блоков и мебели — реагируйте на разрушение, установку, взаимодействие и удары по пользовательским блокам и мебели, включая отклонённые установки.
- Правила размещения — отклоняйте установку или удар, если у игрока нет права или он не соответствует criteria.
- Считающие цели — разрушение, установка или замена пользовательских блоков и мебели как цель квеста; каждая позиция засчитывается один раз для игрока.
- Действия над миром — установка, удаление или замена блока либо предмета мебели и хранение собственных данных на установленной мебели.
- Квестовые зоны — вид блоков и мебели для каждого игрока (или группы), запоминаемый между посещениями.
- Подмена инвентаря — забирайте весь инвентарь игрока или только выбранные предметы при входе в зону и возвращайте при выходе.
- Аудитория фальшивых блоков — показывайте аудитории фиксированный набор блоков и мебели, ничего не записывая.
- Инструменты для предметов — выдача и удаление предметов CraftEngine по id и реакция на их подбор, выброс или поедание.
- Факты, переменные и аудитории — чтение предмета в руке, блока или мебели, на которые смотрит игрок, перезарядок и группировка игроков по тому, что они держат или на чём сидят.
Установка
- Установите CraftEngine на сервер. Расширение собрано под CraftEngine 26.8.
- Убедитесь, что установлено расширение TypeWriter Quest. Оно предоставляет записи квестов и целей, используемые целями.
- Скачайте расширение в магазинах (см. кнопки в панели выше) и положите JAR-файл в
plugins/Typewriter/extensions/. - Перезапустите сервер. В логе вы должны увидеть
[CraftEngine] CraftEngineExtension initialized successfully.
Быстрый старт
В этом руководстве каждый игрок получает собственную разрушаемую печать в комнате-головоломке.
- В веб-панели откройте страницу manifest и добавьте Quest State Artifact. Оставьте
artifactIdсгенерированным. - Добавьте Quest Zone Audience и задайте
artifactравным только что созданному артефакту. ОставьтеzoneIdпустым, чтобы использовался id записи, и оставьтеtrackBlocksвключённым. - Вложите аудиторию зоны в аудиторию, определяющую, кто находится в комнате (например, аудиторию области или квестовую аудиторию). Игроки, входящие в неё, получают собственный вид.
- На странице sequence добавьте событие On Block Interact для блока вашей печати. Оно запускает действие Set Quest Block.
- В действии задайте
artifactиzoneIdтеми же значениями, что и у зоны (скопируйте id записи зоны), привяжитеlocationк позиции события и задайтеblockIdравным сломанной печати (namespace:broken_seal). Оставьте пустым, чтобы показывать воздух. - Добавьте действие Clear Quest State там, где квест заканчивается, чтобы комнату можно было пройти снова.
- Опубликуйте, затем проверьте с двумя игроками: каждый открывает свою печать, а другой по-прежнему видит свою целой.
Для простой считающей задачи зона не нужна: добавьте цель Break Block, заполните item id блока и задайте amount.
Как это работает
Изменение, сделанное в зоне, — это отклонение (deviation): блок, отправленный одному игроку поверх настоящего, предмет мебели мира, скрытый от одного игрока, либо призрак (ghost) — предмет мебели, существующий только для этого игрока. По призраку могут кликать правой кнопкой и ломать его те, кто его видит, но коллизии у него нет ни для кого.
Коллизия всегда следует за миром. Блок, который игрок сломал, всё ещё преграждает ему путь, блок, который он поставил, можно пройти насквозь, а скрытая мебель мира по-прежнему останавливает игрока, который её не видит. Стройте зоны там, где изменение нужно, чтобы его видеть и использовать, а не стоять на нём.
Состояние записывается в артефакт через пару секунд после последнего изменения и немедленно, когда игрок покидает зону или сервер останавливается. Сервер, который был убит, а не остановлен, может потерять последние секунды.
Конфигурация
У расширения нет файла конфигурации. Текст строк целей можно изменить с помощью сниппетов TypeWriter:
| Сниппет | По умолчанию |
|---|---|
craftengine.objective.display | <display> <dark_gray>(<gray><current><dark_gray>/<gray><required><dark_gray>) |
craftengine.objective.completed | <green>✔</green> <st><display></st> <dark_gray>(<gray><current><dark_gray>/<gray><required><dark_gray>) |
Записи
Записей: 49, сгенерированы из исходного кода расширения.
Действия10
- Craftengine Clear Quest StateDrop a player's own state for a quest zone
- Craftengine Give Item ActionGive a CraftEngine item to the player
- Craftengine Remove Item ActionRemove a CraftEngine item from the player
- Craftengine Set Quest BlockChange what one player sees at a spot, inside a quest zone — a block or a piece of furniture
- Craftengine Set Quest FurnitureHide or show one piece of the world's furniture, for one player, inside a quest zone
- Place Craftengine BlockPlace a CraftEngine block at a location
- Place Craftengine FurniturePlace a CraftEngine furniture at a location
- Remove Craftengine BlockRemove the CraftEngine block at a location
- Remove Craftengine FurnitureRemove the CraftEngine furniture at a location
- Replace Craftengine BlockReplace the block or furniture at a location with another one
События13
- Craftengine on Item Consume EventTriggers when the player consumes a CraftEngine item
- Craftengine on Item Drop EventTriggers when the player drops a CraftEngine item
- Craftengine on Item Pickup EventTriggers when the player picks up a CraftEngine item
- On Craftengine Block Attempt Place EventTriggers when a player attempts to place a CraftEngine block
- On Craftengine Block Break EventTriggers when a CraftEngine custom block is broken
- On Craftengine Block Interact EventTriggers when a CraftEngine custom block is interacted with
- On Craftengine Block Place EventTriggers when a CraftEngine custom block is placed
- On Craftengine Dispense Projectile EventTriggers when a dispenser shoots a CraftEngine projectile
- On Craftengine Furniture Attempt Place EventTriggers when a player attempts to place CraftEngine furniture
- On Craftengine Furniture Break EventTriggers when a CraftEngine furniture is broken
- On Craftengine Furniture Hit EventTriggers when a player hits CraftEngine furniture
- On Craftengine Furniture Interact EventTriggers when a CraftEngine furniture is interacted with
- On Craftengine Furniture Place EventTriggers when a CraftEngine furniture is placed
Цели5
- Break Craftengine Block ObjectiveAn objective to break CraftEngine custom blocks
- Break Craftengine Furniture ObjectiveAn objective to break CraftEngine furniture
- Place Craftengine Block ObjectiveAn objective to place CraftEngine custom blocks
- Place Craftengine Furniture ObjectiveAn objective to place CraftEngine furniture
- Replace Craftengine Block ObjectiveAn objective to replace a block with another one
Факты8
- Craftengine Cooldown Active FactWhether a CraftEngine cooldown is currently running
- Craftengine Cooldown Remaining FactSeconds left on a CraftEngine cooldown
- Craftengine Holding Item FactWhether the player is holding a CraftEngine item
- Craftengine Item Cooldown FactTicks left on the vanilla use cooldown of an item
- Craftengine Item Count FactHow many of a CraftEngine item the player carries
- Craftengine Looking at Block FactWhether the player is looking at a CraftEngine block
- Craftengine Looking at Furniture FactWhether the player is looking at CraftEngine furniture
- Craftengine Standing on Block FactWhether the player is standing on a CraftEngine block
Аудитории5
- Craftengine Fake Block AudienceShow blocks and furniture to this audience alone
- Craftengine Furniture Proximity AudienceIn audience while near a CraftEngine furniture
- Craftengine Holding Item AudienceIn audience while holding a CraftEngine item
- Craftengine Quest Zone AudienceKeep a player's own block, furniture and item state for a quest zone
- Craftengine Sitting on Furniture AudienceIn audience while sitting on a CraftEngine furniture
Переменные6
- Craftengine Item in Hand ID VariableThe CraftEngine ID of the item the player holds
- Craftengine Item Property VariableA property of the CraftEngine item the player holds
- Craftengine Looking at Block ID VariableThe CraftEngine ID of the block the player is looking at
- Craftengine Looking at Furniture ID VariableThe CraftEngine ID of the furniture the player is looking at
- Craftengine Registry Ids VariableThe list of IDs CraftEngine has loaded
- Craftengine Standing on Block ID VariableThe CraftEngine ID of the block the player stands on
Звуки1
- Craftengine SoundCraftEngine Sound
Артефакты1
- Craftengine Quest State ArtifactArtifact storing per-player quest block and item state
Устранение неполадок
Квестовая зона ничего не показывает, и ошибок нет. Действия и аудитория должны указывать одни и те же artifact, zoneId и group. Изменение, записанное под другим именем, записывается правильно, но никто его не читает. Если у аудитории zoneId пуст, нужно скопировать id записи самой аудитории.
Set Quest Block ничего не делает, а в логе написано «has no zone configured». У действия пуст zoneId. Задайте его. Для Set Quest Furniture то же самое.
В логе написано «cannot resolve» для id. blockId не является ни блоком CraftEngine, ни мебелью CraftEngine, ни ванильным материалом. Проверьте id с помощью Registry IDs. Если kind равен FURNITURE, id, не являющийся мебелью, отклоняется, а не показывается как блок.
Все в зоне видят одно и то же изменение. Действие записало изменение в мир. Действия Place и Remove, а также Replace Block со значением WORLD меняют настоящий блок. Внутри зоны используйте Set Quest Block, Set Quest Furniture или Replace Block с audience, равным AUTO или QUEST_ZONE.
Replace Block ничего не делает для игрока в двух зонах. При нескольких пересекающихся зонах и без zoneId действие отказывается работать и записывает строку в лог. Задайте zoneId нужной зоны.
Изменение мигает и возвращается после долгой прогулки. Клиенту, перезагружающему чанк, снова отдаётся настоящий мир, а зона заново отправляет свой вид каждые refreshInterval тиков в пределах refreshRadius блоков. Уменьшите refreshInterval или увеличьте refreshRadius.
События блоков не срабатывают для блока, сломанного в зоне. При включённом trackBlocks зона берёт действие на себя: разрушение или установка отменяются и записываются как отклонение. Продвигайте квест через события взаимодействия или через Set Quest Block.
Связанные расширения
- Nexo и ItemsAdder — такая же интеграция для других плагинов пользовательского контента.