Machine
Обзор
Machine превращает проектирование машин в конфигурацию. Одна запись Machine Definition описывает тип машины: сколько у неё слотов для входа, выхода, топлива и улучшений, что она перерабатывает, сколько стоит в топливе и энергии, как выглядит, что написано на её голограмме и сколько копий может поставить игрок или остров. Расширение читает определение и запускает каждую размещённую копию. Печь, дробилка, генератор булыжника или мобофабрика — это запись, а не код.
Машины принадлежат островам BTC Sky. Машину можно поставить только на собственном острове игрока, она ограничена лимитами для каждого игрока и острова, а её уровень открывается деревом исследований острова. Энергия и жидкости общие для измерения острова: генераторы и ячейки образуют пул, и каждая подключённая машина этого измерения берёт из него.
Это закрытое расширение сборки BTC TypeWriter (BTC Core, Paper или Folia), документированное для справки. Среда выполнения безопасна для Folia: слоты кэшируются в памяти и сохраняются асинхронно.
Возможности
- Одна запись на машину — слоты, рецепты, топливо, энергия, внешний вид, голограмма, лимиты и автоматизация находятся в одной записи Machine Definition.
- 27 типов обработки — машины с рецептами (плавка, измельчение, распил, смешивание, варка...), хранение, логистика, машины области, энергетические машины, спавнеры, измельчители и другое.
- Несколько входов и случайные рецепты — дополнительные входы и выходы, выходы с шансом, жидкостные входы и выходы, предметы каталога и ванильные зелья.
- Общая энергосеть и жидкостные баки — ячейки, генераторы и баки образуют пул для каждого измерения острова; машину можно отключить от сети.
- Уровни и модули улучшений — постоянные уровни, открываемые исследованиями BTC Sky, плюс съёмные модули (скорость, выход, удача, дальность, фильтр, вместимость, жидкое топливо), которые суммируются с ними.
- Защита острова и лимиты — размещение на собственном острове, флаг строительства, ограничения для каждого игрока, острова и измерения.
- Редстоун и воронки — режим редстоуна, выброс, выход компаратора и импульсы завершения, передача воронками.
- Голограммы — текст состояния с индикатором прогресса над каждой машиной, полностью в формате MiniMessage.
- Меню-панель — меню, перечисляющее каждую машину измерения с её состоянием, энергией и статусом подключения.
- Сохранение — размещённые машины, инвентари, энергия и прогресс сохраняются в Machine Data Artifact.
Установка
- Установите TypeWriter со сборкой BTC (BTC Core на Paper или Folia).
- Установите расширения, от которых зависит Machine: Quest, RPGBundle (RPG Core), BTC Sky, BTCMobs и GuiAndDialogs (общий слой GUI).
- По желанию: установите CraftEngine, если определение использует внешний вид
FURNITUREилиCUSTOM_BLOCK, и MiniPlaceholders, чтобы использовать плейсхолдеры. - Положите JAR-файл Machine в
plugins/Typewriter/extensions/и перезапустите сервер. - Выход компаратора редстоуна и импульсы завершения работают, только когда BTC Core предоставляет излучение редстоуна.
Быстрый старт
Создадим печь, плавящую железную руду в слитки:
- В веб-панели TypeWriter откройте страницу static и добавьте Machine Data Artifact. Он хранит каждую размещённую машину. Не меняйте его
artifactIdвпоследствии, иначе сохранённые машины будут потеряны. - На той же странице добавьте Machine Definition. Задайте
name, оставьтеprocessingTypeравнымSMELTING. - Задайте
storageRefравным артефакту из шага 1. - В
recipesдобавьте один рецепт:inputMaterialIRON_ORE,outputMaterialIRON_INGOT,outputAmount1,cookTime200(тиков, то есть 10 секунд). ОставьтеfuelCostравным1или больше, если машина должна сжигать топливо. - В
fuelTypesдобавьтеCOALсburnTimeиfuelValue. - Задайте
spawnItem— предмет, который игроки ставят, чтобы создать машину. Определению нуженspawnItemилиvanillaBlock, иначе оно отклоняется при публикации. - По желанию задайте
perIslandLimit, чтобы ограничить число копий на острове. - Опубликуйте. Поставьте предмет на своём острове: машина появится со своей голограммой, а правый клик откроет её меню.
vanillaBlock (например BREWING_STAND) заставляет определение перехватывать этот ванильный блок: при его установке создаётся машина. Ванильные преобразования не ограничиваются предупреждением о лимите размещения, потому что ограничение ограничило бы и сам ванильный блок.
Как это работает
Машина — это определение (запись) плюс экземпляры (копии, размещённые в мире). Определение во время работы не меняется; у каждого экземпляра свои инвентарь, заряд энергии и прогресс.
Модель определения
Каждое поле Machine Definition относится к одной из этих групп:
| Группа | Поля | Чем управляет |
|---|---|---|
| Тип | processingType, behaviors | Что делает машина. behaviors необязательно и определяется по типу, если пусто. |
| Слоты | inputSlots, outputSlots, hasFuelSlot, upgradeSlots, essenceSlots, filterSlots, shearsSlots, maxPerSlot | Раскладка инвентаря. Макет машины ограничен 54 слотами. |
| Рецепты и топливо | recipes, fuelTypes | Что входит и что выходит, сколько это занимает и сколько стоит. |
| Энергия и жидкости | energyCapacity, energyGenerationPerTick, liquidTankCapacity, liquidFuelName | Вклад в пул и работа с жидкостями. |
| Прогрессия | tiers, allowedUpgrades, upgradeSpecs | Постоянные уровни и съёмные модули. |
| Внешний вид | spawnItem, visualType, furnitureId, customBlockId, alignWithPlayerYaw, hologram* | Предмет, модель и голограмма. |
| Размещение | machineLimit, perIslandLimit, islandLimitUpgradeKey, dimensionScope, vanillaBlock | Кто может разместить, где и сколько. |
| Автоматизация | hopperInterval, hopperTransferAmount, redstoneMode, ejectWhenPowered, redstoneComparatorOutput, redstonePulseOnComplete, redstonePulseTicks | Воронки и редстоун. |
| Сохранение | storageRef, guiStorageRef | Где сохраняются экземпляры и содержимое STORAGE. |
Типы обработки
| Семейство | Типы |
|---|---|
Машины с рецептами, управляемые recipes | SMELTING, LIQUID_SMELTING, MULTI_SMELTING, GRINDING, SAWING, MIXING, COMPACTING, ENRICHING, RECYCLING, BREWING, AUTO_CRAFTING, INDUSTRIAL, GENERIC |
| Производство | GENERATOR (без входа: со временем производит выходы рецепта, необязательная стоимость энергии) |
| Хранение и логистика | STORAGE, SORTING (каждый слот фильтра занимает сторону), CONVEYOR (направленная лента) |
| Машины области | VACUUM (vacuumRange), SHEARING (shearRange, shearInterval, shearsSlots) |
| Энергия | ENERGY_CELL, ENERGY_GENERATOR, CHARGING (chargeables, chargeRatePerSecond) |
| Сущности | ASSEMBLER (assemblerMode SPAWN или COLLECT, assemblerEntityType, assemblerMobId, assemblerIngredients, assemblerEnergyCost, assemblerInterval, assemblerRange, spawnerUpgrades), MOB_GRINDING (поля grinder*), EXPERIENCE_TANK (experienceCapacity) |
| Особые | CONTROL_PANEL (выполняет panelOpenCommand / panelAltCommand, его нельзя подобрать), TRANSMUTATION (переносит самое высокое зачарование предмета на книгу за пузырьки опыта) |
SMELTING и AUTO_CRAFTING переходят на ванильные рецепты, когда рецепты не объявлены. Все остальные машины с рецептами при нулевом числе рецептов принимают предметы и навсегда остаются в простое; расширение записывает предупреждение при публикации.
Энергия и жидкости
Энергия хранится в машинах ENERGY_CELL. Пул измерения острова — это сумма его подключённых ячеек. Машины ENERGY_GENERATOR пополняют его, а потребители берут из него. Машина присоединяется к сети своего измерения сразу после размещения; кнопка Machine Link (или панель) отключает и подключает её обратно. Ячейка в Верхнем мире никогда не питает машину в Незере.
Жидкостные баки работают так же: подключённая машина достаёт до каждого бака своего измерения, а отключённая видит только свой. Рецепт потребляет или производит жидкости через liquidInputName/liquidInputAmount и liquidOutputName/liquidOutputAmount.
Уровни и модули улучшений
- Уровень (
tiers) постоянный. Каждый уровень называет узел исследований BTC Sky (researchNode), который его открывает, и задаёт множители скорости, выхода и энергии, шанс удачи и дополнительные слоты. Перечисляйте уровни по возрастанию: действует самый высокий открытый для каждой копии машины на острове. Уровень с пустымresearchNodeотклоняется. - Модуль улучшения (
upgradeSpecs) — предмет, помещаемый в слот улучшений.itemId— id предмета BTC (рекомендуется),material— запасной вариант. Егоtype(SPEED,YIELD,ENERGY_EFFICIENCY,FORTUNE,RANGE,FILTER,CAPACITY,LIQUID_FUEL) учитывается, только если указан вallowedUpgrades. - Уровень и модули умножаются друг на друга.
Меню
Machine Menu — это GUI, построенный из макетов общего расширения GUI (layoutPool, mainLayoutId, inventoryRows). Предметы макета, у которых buttonType является кнопкой Machine, заполняются живыми данными:
| Тип кнопки | Эффект |
|---|---|
MACHINE_OPEN, MACHINE_SMELT, MACHINE_COLLECT, MACHINE_STATUS, MACHINE_FUEL | Стандартные действия машины и отображение состояния. |
MACHINE_LINK | Подключает машину к сети её измерения или отключает. |
MACHINE_PICKUP | Убирает открытую машину и возвращает её как предмет. |
NAV_BACK, NAV_CLOSE | Назад или закрыть. |
MACHINE_GRID_INFO | Сводка по измерению: число машин, накопленная энергия, вместимость, произведённая, потреблённая и баланс. |
MACHINE_ENTRY | Одна машина измерения на каждый помеченный слот. Левый клик переключает её голограмму, правый клик — подключение к сети. |
MACHINE_LIST_ARROW | Стрелка прокрутки списка машин со счётчиком страниц. |
Две дополнительные записи завершают набор. Open Machine GUI связывает определение с заголовком и размером меню, но в текущем коде его действие при срабатывании ничего не делает: машины открывают своё меню по правому клику. Machine Position Variable возвращает позицию собственной машины смотрящего игрока заданного определения в его измерении, поэтому одна запись NPC может следовать за машиной каждого острова.
Подписи, показываемые панелью (состояния, подключение, голограмма), берутся из Machine Dashboard Wording. Прокрутка и команда открытия берутся из Machine Dashboard Command.
Команды
| Команда | Описание |
|---|---|
/typewriter machine give | Выводит все зарегистрированные машины. |
/typewriter machine give <machine> | Выдаёт вам предмет машины по id или по части названия (акценты и регистр игнорируются). |
/typewriter machine liquide | Показывает жидкости, содержащиеся в машине, на которую вы смотрите (в пределах 6 блоков). |
/typewriter machine liquide <liquid> <millibuckets> | Заливает жидкость в целевую машину. Инструмент для тестирования: ни одно действие игрока не наполняет бак. |
Дерево /machine регистрируется под командой TypeWriter, поэтому вводится как /typewriter machine … (псевдоним /tw machine …). Всё оно требует machine.admin. Записи могут регистрировать дополнительные команды как команды верхнего уровня:
| Команда | Описание |
|---|---|
/<commandName> scroll <delta>, reset | Прокручивает список панели или возвращает его в начало. Название по умолчанию machines. |
/<commandName> dashboard | Открывает меню, указанное в dashboardMenuId. |
/<commandName> link <instanceId>, hologram <instanceId> | Переключает подключение к сети или голограмму машины. Используется слотами панели. |
/<commandName> записи Machine Test Command | Запускает её triggers, если criteria совпадают. Название по умолчанию machine-test. |
/<commandName>, clear, bench записи Machine Test Platform Command | Строят витрину машин там, где вы стоите, удаляют её или создают миры loadbench_*. Название по умолчанию machine-test-platform. |
Права
| Право | Даёт доступ к |
|---|---|
machine.admin | Командам /typewriter machine. |
machine.protection.bypass | Размещению, разрушению и взаимодействию с машинами где угодно, игнорируя владение островом, флаг строительства и лимиты. |
Плейсхолдеры
Теги MiniPlaceholders расширения machine, предоставляемые через TypeWriter. <instance> — id размещённой машины, <slot> — индекс логического слота (по умолчанию 0).
| Плейсхолдер | Возвращает |
|---|---|
<machine_input:instance:slot> | true, если во входном слоте есть предмет. |
<machine_input_name:instance:slot> | Название материала входного предмета. |
<machine_input_amount:instance:slot> | Количество во входном слоте. |
<machine_output:instance:slot> | true, если в выходном слоте есть предмет. |
<machine_output_name:instance:slot> | Название материала выходного предмета. |
<machine_output_amount:instance:slot> | Количество в выходном слоте. |
<machine_tier:instance> | Название активного уровня. |
<machine_dimension> | Читаемое название измерения, в котором стоит игрок. |
<machine_grid_count>, <machine_grid_active>, <machine_grid_stalled> | Машины в измерении: всего, активные и простаивающие. |
<machine_energy_stored>, <machine_energy_capacity> | Накопленная энергия и общая вместимость измерения. |
<machine_energy_produced>, <machine_energy_consumed>, <machine_energy_balance> | Энергия в секунду: произведённая, потреблённая и чистая. |
Плейсхолдеры игрока возвращают пустое значение без игрока (консоль).
Сообщения голограмм допускают %machine%, %tier%, %energy%, %bar%, %percent% и %time_left%.
Записи
Записей: 10, сгенерированы из исходного кода расширения.
Действия2
- Machine MenuMachine Menu
- Open Machine GUIOpen Machine GUI
Команды3
- Machine Dashboard CommandMachine dashboard commands
- Machine Test CommandRegister a Machine test command
- Machine Test Platform CommandProvision the Machine BTC test platform
Переменные1
- Machine Position VariablePosition of the viewer's machine of a given definition
Артефакты1
- Machine Data ArtifactStores machine runtime state (placed instances, energy, progress) as JSON data
Манифесты2
- Machine Dashboard ConfigMachine Dashboard Wording
- Machine Protection ConfigMachines : messages de protection
Другие записи1
- Machine DefinitionMachine Definition
Устранение неполадок
Определение отклоняется при публикации. Проверьте журнал сервера: no way to obtain this machine означает, что не задан ни spawnItem, ни vanillaBlock; tier[n].researchNode is blank означает, что у уровня нет узла исследований; the machine layout needs N slots, maximum is 54 означает слишком много слотов.
Машина принимает предметы и никогда не работает. У машины с рецептами (например MIXING, GRINDING, BREWING) с пустым списком recipes нет ванильного запасного варианта. Ванильные рецепты используют только SMELTING и AUTO_CRAFTING.
Размещение отклоняется. Сообщения берутся из Machine Protection Config: машина должна стоять на вашем собственном острове BTC Sky, вам нужен флаг строительства, и действуют лимиты игрока, острова и измерения и dimensionScope. CONTROL_PANEL требует стабилизирующий кристалл в измерении. Персонал с machine.protection.bypass пропускает все проверки.
Машина сообщает, что не подключена или нет энергии. Ей нужны машины ENERGY_CELL и ENERGY_GENERATOR в том же измерении, и она должна быть подключена (используйте кнопку подключения). Пул никогда не пересекает измерения.
Модуль улучшения ничего не меняет. Его type должен быть в allowedUpgrades, а CAPACITY работает только на STORAGE, EXPERIENCE_TANK и ENERGY_CELL. LIQUID_FUEL требует liquidFuelName.
Уровень никогда не применяется. researchNode должен совпадать с id узла исследований BTC Sky, и остров должен его открыть.
Меню открывается пустым или не открывается. Сверьте mainLayoutId с id в layoutPool; при несовпадении лог называет id пула.
Внешний вид мебели или пользовательского блока не работает. FURNITURE и CUSTOM_BLOCK требуют CraftEngine и существующий furnitureId или customBlockId.
Связанные расширения
- BTC Sky — острова, владение, исследования и измерения, на которые опираются машины.