Станция дрона-садовника

Станция дрона-садовника

alaindustrial:garden_drone_station
Сельское хозяйствоLVРеализованоtier-lvagriculturedroneautomationber

Сводка

Станция дрона-садовника — блок-док 1×1 (как база робота-пылесоса), с которого поднимается дрон и облетает территорию вокруг станции радиусом 4 блока. Дрон не Entity, а объект, который отрисовывает самой станции — визуально он выглядит и двигается как летающий аппарат, но физически всегда «принадлежит» блоку станции и не может покинуть её зону.

Игрок кладёт в станцию семена и костную муку, подключает EU/FE — и дрон дальше сам поддерживает грядки: вспахивает свободную землю, сажает семена в пустые клетки над подходящим грунтом, ускоряет рост недозревших культур костной мукой и свозит спелый урожай прямо в свои выходные слоты (без ItemEntity в мире). Замещает запланированные, но нереализованные «Автоуход за культурами» и «Сборщик урожая» — один блок вместо двух, без дублирования механики.

Энергия

ПолеЗначение
Рольпотребитель с буфером
Буфер (EU/FE)4000
Макс. вход (EU/FE/такт)32 (LV)
Макс. выход (EU/FE/такт)н/п (не отдаёт)
EU/FE за действие8

Станция подключается к энергосети как обычный потребитель на всех рабочих гранях. EU/FE списывается только за фактически выполненное действие — вспашка, посадка, удобрение или сбор одной клетки — по паттерну Электрического обогревателя: простой (нечего делать в радиусе — семена/удобрение кончились, либо все клетки уже обслужены) стоит 0 EU/FE, и станция уходит в спящий режим, не тратя энергию впустую и не превращаясь в паразитный сток для сети.

Процессинг

Станция не использует систему рецептов переработки — вместо неё за каждый вылет дрона (когда цель найдена) выполняется одно из четырёх действий над одной клеткой зоны.

ПолеЗначение
Тип рецептанет (не рецептная машина)
Действий за вылет1 (одно действие — одна клетка)
Авто-выгрузкада (урожай сразу в выходные слоты станции)

Мотыга — инструмент двух действий. Вспашка и сбор урожая расходуют по 1 единице прочности мотыги из её слота и без мотыги не выполняются: инструмент, который тратится на действие, но не требуется для него, игроку непонятен. Посадка и удобрение мотыги не требуют.

Мотыга срабатывается до конца — и слот освобождается. Станция тратит последнюю единицу прочности, после чего мотыга ломается и исчезает из слота ровно так же, как в руках у игрока: со звуком поломки и частицами. Это не косметика, а условие автоматизации — пустой слот принимает новую мотыгу из хоппера, и ферма работает без присмотра. Износ идёт ванильным путём, поэтому Unbreaking учитывается: зачарованная мотыга живёт в станции столько же, сколько в руках. Уже сломанную мотыгу слот не принимает — иначе она заняла бы его навсегда.

Приоритет действий (проверяется в этом порядке, выполняется первое подошедшее):

  1. Собрать — клетка с созревшей культурой в радиусе (нужна мотыга).
  2. Посадить — пустая клетка над грунтом из #minecraft:supports_crops + есть подходящие семена в слоте.
  3. Удобрить — клетка с недозревшей культурой + есть костная мука в слоте.
  4. Вспахать — клетка с ванильной землёй или травой (нужна мотыга; переводит её в грядку).

Такой порядок гарантирует, что «ферма сама себя обслуживает» без разрывов: без вспашки как четвёртого действия обещание ломалось бы при первом расширении грядки игроком.

Грунт для посадки — ванильный тег, а не блок. Посадка (и отбор клеток в кэш зоны) считает грунтом любой блок из #minecraft:supports_crops — того же тега, по которому сама культура решает, может ли она стоять на блоке. Дрон и растение поэтому не расходятся в том, что считать землёй: rich soil farmland из Farmer's Delight (и грунт любого мода, добавленный в этот тег) дрон обрабатывает как родную грядку — без единой строчки, знающей про чужие id. Вспашка тегу не следует: во ванильную грядку переводятся только ванильные земля и трава, чужой грунт дрон не перекапывает никогда — rich soil игрок получил костной мукой, и станция не должна его уничтожать.

Полёт. Действие наступает не в момент выбора цели, а по прилёту дрона: дрон летит к клетке со скоростью = 11 тиков на блок пути, и только там выполняет работу. Плечо не короче MIN_FLIGHT_TICKS = 26 тиков — соседнюю клетку дрон иначе преодолевал бы быстрее, чем глаз успевает заметить. Обратный путь к доку занимает столько же, сколько путь к цели, плюс LANDING_PAUSE_TICKS = 6 тиков дрон стоит на обработанной клетке (см. ниже), так что один цикл «действие» стоит минимум 58 тиков (≈2.9 секунды), а не такт: станция ухаживает за грядкой темпом машины, а не мгновенно. Без этого она обслуживала бы всю ферму за пару тиков — визуально это читалось бы как телепортация, а не как машина, которая делает работу. По прилёту задание перепроверяется: мир мог измениться за время полёта (игрок сорвал урожай руками, поршень сдвинул блок), поэтому цель валидируется заново, а не принимается на веру.

Звук полёта. Пока дрон в воздухе, слышен тихий зацикленный звук винтов, и он исходит от самого дрона — источник движется вместе с ним, а не висит на станции. Так и должно быть: дрон уходит на несколько блоков и проходит прямо над головой, а жужжание, доносящееся с площадки, читалось бы как ошибка. Радиус слышимости 8 блоков и громкость 0.22 — самые низкие в моде: это единственный звук, который сам приезжает к игроку, и единственный, который звучит почти весь рабочий цикл. На доке и в те тики, что дрон стоит на обработанной клетке, — тишина.

Звук вспашки. Вспахивая клетку, дрон издаёт тот же ванильный звук мотыги (minecraft:item.hoe.till), что и игрок, работающий мотыгой вручную — с той же громкостью и тем же питчем. Из четырёх действий озвучена только вспашка: у неё есть однозначный ванильный эталон, а у посадки, удобрения и сбора его нет.

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

Зона сканирования. Радиус 4 блока вокруг станции — это ровно стандартная грядка 9×9 (2 × 4 + 1) целиком: док стоит в её центре и достаёт до любого угла. Дрон первого тира обслуживает одну такую грядку — следующим тирам есть куда расти: несколько грядок разом или зона шире одной. Список целей в зоне кэшируется и инвалидируется по блок-апдейту внутри радиуса; полная пересборка кэша происходит не чаще раза в = 20 тиков. Перед касанием любой позиции зоны обязательна проверка level.isLoaded — станция не форсирует синхронную загрузку невыгруженных чанков.

Зрелость культуры определяется общим предикатом, переиспользуемым из Косы (тот же класс, что решает, готов ли урожай к сбору — стебли тыквы/дыни, основание кактуса/тростника, ягодный куст и ванильные CropBlock обрабатываются одинаково в обоих местах, без риска разъехавшихся edge-кейсов).

Удобрение применяется через стандартный ванильный интерфейс BonemealableBlock (та же тройка методов, что уже использует Жердочка для хлопка) — эффект идентичен ручной костной муке, но без игрока и без частиц-имитации клика.

Сбор без игрока. Станция не ломает блок через ServerPlayer-путь (игрока нет) — вместо этого она server-side вычисляет дроп созревшей культуры, вставляет его в свои выходные слоты и только при полном успехе сносит блок урожая напрямую. Ни ItemEntity, ни события слома блока при этом не создаются — тот же осознанный компромисс, что уже принят у Насоса при осушении источника.

Инвентарь

СлотПринимаетКол-во
Семена (0)предметы с тегом семян соответствующей культурыдо стека
Удобрение (1)minecraft:bone_mealдо стека
Дрон (6)— без него станция не работает1
Мотыга (7)любая мотыга (#minecraft:hoes); тратится на вспашке и сборе1
Выход 1–4 (2–5)только автоматическая вставка станцией (урожай); ручная/автоматизированная вставка извне заблокированадо стека каждый

Четыре выходных слота, а не один — созревшая культура может дать больше одного типа предмета за одно действие (например, пшеница даёт саму пшеницу и семена пшеницы отдельно); один слот со смешанным содержимым в базовой модели машин мода не поддерживается. Вставка дропа в выходные слоты двухпроходная («симулировать вместимость всех стаков → мутировать только при полном успехе»), без частичной потери урожая при заполненном выходе.

Интерфейс

Тип: container (GUI станции). Показывает: буфер энергии (полоса), слоты семян/удобрения/выхода, состояние станции (нет ресурса / работает / всё сделано за цикл — читается издалека по цвету огонька на модели дрона).

Свойства блока

Станция-док — не полный куб: тонкая плита 1×1 блок с подсвеченным контуром посадки, двумя контактами зарядки и жёлтыми лампами по углам. Дрон рисуется поверх неё ом и физически не имеет коллизии/хитбокса отдельно от станции.

ПолеЗначение
Формаплита пониженной высоты (не полный куб; окклюдер по нижней части блока)
Прочность3.0
Взрывоустойчивость6.0
Инструменткирка
Дроп с NBT энергиинет (буфер/инвентарь/состояние дрона сохраняются через ValueInput/ValueOutput, не через NBT-дроп предмета)

Рецепты

Крафт: (железный/стальной корпус, электронная схема, воронка как «собирает в себя», медь как винты). Рецептов переработки нет — станция не перерабатывает предметы.

Прогрессия

Тир: LV. Питание: от любого LV-источника, например Генератор. Заменяет (в бэклоге, без кода): «Автоуход за культурами» и «Сборщик урожая» один блок вместо двух стационарных с тем же результатом. Требует: электронную схему для крафта (как большинство LV-машин мода).

Связанное

Опрыскиватель — соседний по грядке блок, роли не пересекаются. Дрон — точечный работник: одно действие на одну клетку, платит костной мукой и EU/FE, он пашет, сажает и собирает. Опрыскиватель — пассивная зона: не трогает ни грядку, ни урожай, только ускоряет рост всего живого вокруг и платит питательным раствором. Их ставят вместе. Коса — источник переиспользуемого предиката зрелости культуры. Жердочка — существующий в моде прецедент BonemealableBlock. Инкубатор — образец многослотового инвентаря с тег-валидацией по индексу и ContainerData шире базового. Насос — образец зонального сканирования с лимитами и единственный прецедент, где машина меняет блок мира из своего тика без игрока. Электрический обогреватель — образец «EU/FE только за полезный такт» (demand-driven).

Крафт

Крафт на верстаке
Любой медный слиток
Любой железный слиток
Любой медный слиток
Любой железный слиток
Электронная схема
Любой железный слиток
Любой железный слиток
Любой железный слиток
Любой железный слиток
Верстак
Станция дрона-садовника
Станция дрона-садовника