Garden Drone Station
alaindustrial:garden_drone_station
Summary
The Garden Drone Station is a 1×1 dock block (like a robot-vacuum base) from which a drone lifts off and patrols the area around the station within a 4-block radius. The drone is not an Entity — it's an object drawn by the station's own. Visually it looks and moves like a flying craft, but physically it always "belongs" to the station block and can never leave its zone.
The player puts seeds and bone meal into the station and hooks up EU/FE — from there the drone tends the farm on its own: tilling free dirt, planting seeds into empty tiles above suitable soil, speeding up immature crops with bone meal, clearing the grass and bushes that keep the ground under them from being tilled, and hauling ripe harvest straight into its own output slots (no ItemEntity ever spawns in the world). It supersedes the planned-but-unbuilt "Crop Matron" and "Crop Harvester" — one block instead of two, no duplicated mechanics.
Energy
| Field | Value |
|---|---|
| Role | consumer with buffer |
| Buffer (EU/FE) | 4000 |
| Max input (EU/FE/tick) | 32 (LV) |
| Max output (EU/FE/tick) | n/a (does not emit) |
| EU/FE per action | 8 |
The station connects to the energy network like any consumer, on all its working faces. EU/FE is spent only for a completed action — tilling, planting, fertilizing, harvesting or weeding one tile — following the Electric Heater pattern: idling (nothing to do in the zone — out of seeds/fertilizer, or every tile already tended) costs 0 EU/FE, and the station goes into idle sleep instead of wasting energy or becoming a parasitic sink on the network.
Processing
The station doesn't use the crafting-recipe system — instead, on every drone flight (when a target is found) it performs one of five actions on a single zone tile.
| Field | Value |
|---|---|
| Recipe type | none (not a recipe machine) |
| Actions per flight | 1 (one action — one tile) |
| Auto-unload | yes (harvest lands directly in the station's output slots) |
The hoe is the tool of three actions. Tilling, harvesting and weeding each spend one point of the hoe's durability and will not run without one: a tool that an action consumes but does not require makes no sense to the player. Planting and fertilizing need no hoe.
Action priority (checked in this order, the first match runs):
- Harvest — a tile with a ripe crop in the zone (needs a hoe and an output that is not blocked).
- Plant — an empty tile above soil from
#minecraft:supports_crops, provided matching seeds sit in the seed slot. - Fertilize — a tile with an immature crop, provided bone meal sits in the fertilizer slot.
- Clear — grass or a bush from the weed tag (needs a hoe and an output that is not blocked).
- Till — a tile of vanilla dirt or grass block with nothing on top (needs a hoe; turns it into farmland).
This order keeps the "the farm tends itself" promise unbroken: without tilling as the last action, the promise would break the moment the player expands the farm, and weeding sits right before it because a weed is exactly what occupies the tile above the ground that needs tilling.
Weeding. The drone pulls up wild growth that would otherwise keep the ground under it from ever being tilled: without this a field in a swamp or a savanna stays overgrown for good. A weed is a block from the # tag: Short Grass and Tall Grass, Fern and Large Fern, Dead Bush, Bush, Firefly Bush, Short Dry Grass and Tall Dry Grass, Leaf Litter and (where the game has it) Red Shrub. The list is a tag, not a block class: every plant in the game, crops and the mod's own kok-sagyz and trellis included, is of the same class, and a class test would weed the farm itself. Never touched: flowers, saplings, leaves, mushrooms and vines (a player planted or left them there), and anything the drone harvests as a crop — crops, kok-sagyz and its root, the trellis. A datapack can extend the tag.
- Cost — the same as any action: one point of hoe durability and EU/FE. This is a deliberate departure from vanilla: in a player's hand a hoe does not wear on grass, while here every pull is tool work, like tilling and harvesting.
- Two-block plants (Tall Grass, Large Fern) go whole in one action: the target is always the lower half — only it pays out loot — and the upper half goes with it.
- The drop — whatever the plant gives when broken by hand without shears (wheat seeds from grass one time in eight, sticks from a dead bush, the firefly bush itself, leaf litter) — lands in the station's output slots; no
ItemEntityappears in the world. The plant makes its vanilla break sound and particles. - Some weeds drop nothing — and are cleared anyway. Bush and short and tall dry grass drop nothing without shears (their 26.3 loot tables require shears or silk touch), and grass and ferns drop nothing seven times in eight. They are pulled up for the clean tile under them, which tilling needs, not for loot; the hoe pays once per tile.
- A blocked output stops weeding just as it stops harvesting — see «Blocked output» below. Weeds that always drop something (Firefly Bush, Leaf Litter) can fill the output — a station in such a field needs emptying.
Blocked output. When the drop of a ripe crop or a weed does not fit in the output slots, the crop or weed stays put, neither the hoe nor EU/FE is spent, and the station remembers that its output is blocked: while it is, it neither harvests nor weeds and the drone does not fly to such tiles — before this change it flew to the same ripe crop forever while the status said «Working». The output is also blocked without a try when all four slots hold full stacks, since then nothing can land. Planting, fertilizing and tilling go on; when they have no work either and a ripe crop or a weed in range has nowhere to go, the screen shows «Output full» (over a tended farm the block holds nothing up, and the status stays «Farm tended» or «Out of supplies») (amber, like «Out of supplies», because the player fixes it; with an empty seed slot «Output full» wins, since it holds up the harvest, the first action by priority). The block lifts as soon as something is taken out of an output slot — by hand, by shift-click, by a hopper or a pipe: the station compares the item count in its output with a snapshot taken when it blocked, so every way of taking items works the same on both loaders; a sleeping station notices on its next full tick, at most 40 ticks later. The price: after one refusal the station waits to be emptied even if another tile's drop would still have fitted — guessing a random drop in advance would mean rolling the loot table an extra time. The state is saved with the station; a world saved before this change loads with the output open, and the first refusal blocks it again. If one tile's drop does not fit even an empty output (more than four stacks), there is nothing to take out — the station lifts such a block itself from idle, so it retries once every 40 ticks.
Planting soil is a vanilla tag, not a block. Planting (and the zone-cache tile selection) treats any block from #minecraft:supports_crops as soil — the same tag the crop itself uses to decide whether it can stand on a block. Drone and plant therefore never disagree about what counts as ground: rich soil farmland from Farmer's Delight (and any modded soil added to this tag) the drone tends as a native farm tile — without a single line that knows a foreign id. Tilling does not follow the tag: only vanilla dirt and grass are turned into vanilla farmland, foreign soil is never dug over — the player got that rich soil with bone meal, and the station must not destroy it.
Flight. The action lands when the drone arrives, not when the target is picked: it flies at = 11 ticks per block of distance and only then does the work. A leg is never shorter than MIN_FLIGHT_TICKS = 26 ticks — otherwise the drone would cover the tile next door faster than the eye can follow. The trip home takes as long as the trip out, plus the LANDING_PAUSE_TICKS = 6 ticks the drone spends standing on the tile it worked (below), so one action costs at least 58 ticks (≈2.9 seconds), not a tick: the station tends the plot at the pace of a machine, not instantly. Without that it would tend a whole farm within a couple of ticks, which reads as teleportation rather than as a machine doing work. On arrival the job is re-validated — the world may have changed mid-flight (the player harvested it by hand, a piston moved it), so the target is checked again rather than trusted.
Flight sound. While the drone is airborne a quiet rotor loop plays, and it comes from the drone itself — the source travels with it rather than sitting on the station. It has to: the drone ranges several blocks out and passes right over the player's head, and a buzz arriving from the pad instead would read as a bug. An 8-block audible radius and 0.22 volume make it the quietest loop in the mod, for two reasons — it is the only sound whose source comes to the player, and the only one that plays for most of a work cycle. On the pad, and during the beat spent standing on a worked tile, it is silent.
Tilling sound. As it turns a tile, the drone plays the same vanilla hoe sound (minecraft:item.hoe.till) a player hears tilling by hand, at the same volume and pitch. Only tilling has a hoe sound of its own: it is the one with an unambiguous vanilla counterpart, which planting, fertilizing and harvesting do not have. Weeding sounds the way the plant itself sounds when broken.
Once the work is done the drone stands on the tile for 6 ticks before it heads home. Without that beat the action and the return leg began on the same tick: the drone touched the plot and lifted off inside a single frame, which read as a bounce rather than as a machine doing a job. The pause is only at the far end — on the pad it would shift the tick the action lands on, and that tick is what every test scenario counts to.
Scan zone. A 4-block radius around the station is exactly one standard 9×9 plot (2 × 4 + 1): the dock sits at its centre and reaches every corner. This is the tier-1 drone and it tends one such plot — later tiers still have room to grow, into several plots at once or into a zone wider than one. The target list for the zone is cached and invalidated by block updates inside the radius; a full cache rebuild happens no more often than once every = 20 ticks. Touching any zone position requires an level.isLoaded check first — the station never forces a synchronous chunk load.
Crop maturity is decided by a shared predicate reused from the Scythe (the same class that already decides whether a crop is ready to cut — pumpkin/melon stems, cactus/sugar cane base-only, berry bushes, and vanilla CropBlocks are all handled identically in both places, with no risk of the edge cases drifting apart).
Fertilizing goes through the standard vanilla BonemealableBlock interface (the same trio of methods already used by the Trellis for cotton) — the effect matches manual bone meal, minus the player and the click-particle simulation.
Harvesting without a player. The station doesn't break a block through the ServerPlayer path (there is no player) — instead it computes the ripe crop's drop server-side, inserts it into its own output slots, and only removes the crop block on full success. Neither an ItemEntity nor block-break events are created — the same conscious trade-off already accepted by the Pump when it drains a fluid source.
Inventory
| Slot | Accepts | Count |
|---|---|---|
| Seeds (0) | items tagged as seeds for the matching crop | up to a stack |
| Fertilizer (1) | minecraft:bone_meal | up to a stack |
| Drone (6) | — the station is inert without it | 1 |
| Hoe (7) | any hoe (#minecraft:hoes); spent by tilling, harvesting and weeding | 1 |
| Output 1–4 (2–5) | insertion only by the station itself (harvest and weed drops); manual/automated insertion from outside is blocked | up to a stack each |
Four output slots, not one — a ripe crop can yield more than one item type in a single action (e.g. wheat drops both wheat and wheat seeds separately); the mod's base machine model doesn't support mixed contents in a single output slot. Inserting the drop into the output slots is a two-pass operation ("simulate room for every stack first, mutate only on full success") — no partial harvest loss when the output is full.
Interface
- Type: container (station GUI).
- Shows: energy buffer bar, seed/fertilizer/output slots and the station's status line on screen (out of resources / working / everything tended this cycle / no power / no drone / output full). A status light on the drone model that would make this readable from a distance is planned and not built yet.
Block properties
The dock is not a full cube: a thin 1×1-block plate with a lit landing outline, two charging contacts, and yellow corner lamps (see "Appearance" below). The drone is drawn on top of it by a and has no collision/hitbox separate from the station.
| Field | Value |
|---|---|
| Shape | a low-profile plate (not a full cube; occluder covers the lower part of the block) |
| Hardness | 3.0 |
| Blast resistance | 6.0 |
| Tool | pickaxe |
| Drops with energy NBT | no (buffer/inventory/drone state persist via ValueInput/ValueOutput, not an item NBT drop) |
Recipes
- Crafting: (iron/steel casing, electronic circuit, propellers — the exact composition is fixed during implementation).
- No processing recipes — the station doesn't process items.
Progression
- Tier: LV.
- Power: any LV source, e.g. Generator.
- Supersedes (no code): "Crop Matron" and "Crop Harvester" one block instead of two stationary ones with the same outcome.
- Requires: an electronic circuit to craft, like most of the mod's LV machines.
Related
- Sprinkler — the block next to it on the same plot; the two roles do not overlap. The station is a point worker: one action on one tile, paid in bone meal and EU/FE, and it tills, plants, weeds and harvests. The sprinkler is a passive zone: it touches neither the soil nor the crop, only speeds up everything growing around it, and pays in nutrient solution. They are meant to stand together.
- Scythe — source of the reused crop-maturity predicate.
- Trellis — the mod's existing
BonemealableBlockprecedent. - Incubator — reference for a multi-slot, index-tag-validated inventory with a wider-than-base
ContainerData. - Pump — reference for bounded zone scanning, and the only precedent of a machine mutating a world block from its own tick with no player involved.
- Electric Heater — reference for "EU/FE only on a useful tick" (demand-driven consumption).
Crafting
Shaped Crafting
▶
Garden Drone Station