Перейти к основному содержимому

Machine

Машины на основе данных для островов BTC Sky: рецепты, энергосеть, уровни, модули улучшений и голограммы.

Приватныеv0.1.1Экономика и крафт
ТребуетсяTypeWriter0.9.0-beta-177 (BTC build)Quest extensionRPG Bundle (RPG Core)BTC SkyBTCMobsGUI extension (GuiAndDialogs)CraftEngineнеобязательноMiniPlaceholdersнеобязательно

Создано для сети BornToCraft. Это расширение описано для справки и не распространяется.

Обзор​

Machine превращает проектирование машин в конфигурацию. Одна запись Machine Definition описывает тип машины: сколько у неё слотов для входа, выхода, топлива и улучшений, что она перерабатывает, сколько стоит в топливе и энергии, как выглядит, что написано на её голограмме и сколько копий может поставить игрок или остров. Расширение читает определение и запускает каждую размещённую копию. Печь, дробилка, генератор булыжника или мобофабрика — это запись, а не код.

Машины принадлежат островам BTC Sky. Машину можно поставить только на собственном острове игрока, она ограничена лимитами для каждого игрока и острова, а её уровень открывается деревом исследований острова. Энергия и жидкости общие для измерения острова: генераторы и ячейки образуют пул, и каждая подключённая машина этого измерения берёт из него.

Это закрытое расширение сборки BTC TypeWriter (BTC Core, Paper или Folia), документированное для справки. Среда выполнения безопасна для Folia: слоты кэшируются в памяти и сохраняются асинхронно.

Возможности​

  • Одна запись на машину — слоты, рецепты, топливо, энергия, внешний вид, голограмма, лимиты и автоматизация находятся в одной записи Machine Definition.
  • 27 типов обработки — машины с рецептами (плавка, измельчение, распил, смешивание, варка...), хранение, логистика, машины области, энергетические машины, спавнеры, измельчители и другое.
  • Несколько входов и случайные рецепты — дополнительные входы и выходы, выходы с шансом, жидкостные входы и выходы, предметы каталога и ванильные зелья.
  • Общая энергосеть и жидкостные баки — ячейки, генераторы и баки образуют пул для каждого измерения острова; машину можно отключить от сети.
  • Уровни и модули улучшений — постоянные уровни, открываемые исследованиями BTC Sky, плюс съёмные модули (скорость, выход, удача, дальность, фильтр, вместимость, жидкое топливо), которые суммируются с ними.
  • Защита острова и лимиты — размещение на собственном острове, флаг строительства, ограничения для каждого игрока, острова и измерения.
  • Редстоун и воронки — режим редстоуна, выброс, выход компаратора и импульсы завершения, передача воронками.
  • Голограммы — текст состояния с индикатором прогресса над каждой машиной, полностью в формате MiniMessage.
  • Меню-панель — меню, перечисляющее каждую машину измерения с её состоянием, энергией и статусом подключения.
  • Сохранение — размещённые машины, инвентари, энергия и прогресс сохраняются в Machine Data Artifact.

Установка​

  1. Установите TypeWriter со сборкой BTC (BTC Core на Paper или Folia).
  2. Установите расширения, от которых зависит Machine: Quest, RPGBundle (RPG Core), BTC Sky, BTCMobs и GuiAndDialogs (общий слой GUI).
  3. По желанию: установите CraftEngine, если определение использует внешний вид FURNITURE или CUSTOM_BLOCK, и MiniPlaceholders, чтобы использовать плейсхолдеры.
  4. Положите JAR-файл Machine в plugins/Typewriter/extensions/ и перезапустите сервер.
  5. Выход компаратора редстоуна и импульсы завершения работают, только когда BTC Core предоставляет излучение редстоуна.

Быстрый старт​

Создадим печь, плавящую железную руду в слитки:

  1. В веб-панели TypeWriter откройте страницу static и добавьте Machine Data Artifact. Он хранит каждую размещённую машину. Не меняйте его artifactId впоследствии, иначе сохранённые машины будут потеряны.
  2. На той же странице добавьте Machine Definition. Задайте name, оставьте processingType равным SMELTING.
  3. Задайте storageRef равным артефакту из шага 1.
  4. В recipes добавьте один рецепт: inputMaterial IRON_ORE, outputMaterial IRON_INGOT, outputAmount 1, cookTime 200 (тиков, то есть 10 секунд). Оставьте fuelCost равным 1 или больше, если машина должна сжигать топливо.
  5. В fuelTypes добавьте COAL с burnTime и fuelValue.
  6. Задайте spawnItem — предмет, который игроки ставят, чтобы создать машину. Определению нужен spawnItem или vanillaBlock, иначе оно отклоняется при публикации.
  7. По желанию задайте perIslandLimit, чтобы ограничить число копий на острове.
  8. Опубликуйте. Поставьте предмет на своём острове: машина появится со своей голограммой, а правый клик откроет её меню.
Преобразование ванильного блока

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.

Типы обработки​

СемействоТипы
Машины с рецептами, управляемые recipesSMELTING, 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
Команды3
Переменные1
Артефакты1
Манифесты2
Другие записи1

Устранение неполадок​

Определение отклоняется при публикации. Проверьте журнал сервера: 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 — острова, владение, исследования и измерения, на которые опираются машины.