All pluginsMC Skylines

Farming, food & rural businesses

MCSkylines-Agriculture

Version 0.2.3 · Documentation refreshed October 23, 2026

Crops, working farm machinery, cooperative rosters, processing, balanced meals and batch-preserving food spoilage.

Required plugins: MCSkylines-Core, MCSkylines-Property, MCSkylines-Health, MCSkylines-Vehicles, MCSkylines-Utilities, WorldGuard. Optional integrations: MCSkylines-Industry, MCSkylines-Narcotics.

01

Feature reference

What it handles

Feature overview

Fields and machinery

Grow vanilla and custom crops with soil care, fertilizer, irrigation and pests. Implements check their driver’s land permissions; operators can blacklist regions.

Food businesses

Permissioned cooks prepare filling meals with meaningful nutrient groups. Processing and preservation connect farms to shops and restaurants.

Freshness and storage

Food retains batch age through sales and handling. Utilities cold rooms slow deterioration only while supplied with power.

Shared farm work

Property cooperatives, owned equipment, cargo handling and maintenance support player-run agricultural businesses.

02

Mechanics, workflows & reference

Encyclopedia

Contents · jump to a topic

Agriculture provides managed vanilla and custom crops, soil, fertilizer, food spoilage, permissioned cooking, nutrient-balanced meals, farm cooperatives and working machinery. It ships inside the combined MCSkylines JAR. Install its matching complete client pack. Values below are bundled defaults; operator definitions take precedence.

Installation and ownership

Enable Agriculture, Core, Property, Health, Vehicles and Utilities in the suite configuration. WorldGuard is required. Industry supplies industrial fertilizer; Narcotics is optional. Keep the existing module folders and databases. Restart after changing Agriculture definitions. The module registers /agriculture, /agri and /farm and its agriculture:* item provider.

Farming does not require a registered Property or a WorldGuard region. An empty fields.enabled-worlds list enables Agriculture in every world. On enabled land, hand work and implements use the acting player's current WorldGuard build access. Planting also respects block-place; harvesting respects block-break; cultivation respects both. WorldGuard's player bypass is honored after the farming blacklist is checked. Agriculture admin permission alone does not grant land access. Vehicle ownership and approved drivers are checked separately; implements use the actual tractor/combine driver, not the equipment owner. Each block of the working swath is checked, so denied blocks are skipped without spending seed, fertilizer or irrigation water there.

Configure regions where farming is always forbidden with fields.blacklist-regions:

fields:
  enabled-worlds: []
  blacklist-regions:
    - spawn
    - world:city_center

A bare region ID applies in every world; world:region applies only in that named world. World names are exact; region IDs are case-insensitive. Any overlapping blacklisted region or parent region blocks farming regardless of region priority, ownership, cooperative status or WorldGuard bypass. world:__global__ blacklists that world's global region when present. Blacklists also apply in worlds excluded from Agriculture management. Restart after editing. Cooking and processing remain available in blacklisted regions and excluded worlds, with their own cook/process permissions and WorldGuard build/use access at the station. A city farming ban therefore leaves its restaurants open. If protection data is unavailable, farming and processing are blocked until it becomes available.

Blacklisted land rejects crop planting, tilling, fertilizer, hand/machine/water harvesting and natural crop growth. Existing tracked crops remain in place with progress paused; they do not accumulate growth time while blocked. The blacklist also covers native food crops such as berry bushes, cocoa, melon/pumpkin stems, sugar cane and nether wart. Other excluded-world land retains vanilla farming behavior. Previously tracked crops need their world re-enabled to resume.

Cooperatives are optional rosters for registered properties. The current tenant controls an active rental; otherwise the landlord controls the roster. A controller change resets the old roster on its next management operation. Membership does not grant or restrict land access; grant build rights through WorldGuard/Property. Cooperatives do not transfer land, money or vehicle registrations. Use existing Economy tools for sales and arrangements, and Vehicles ownership groups/approved drivers for shared machines. Utilities grids and cold rooms still use their own registered-property requirements; farming in wilderness does not create a grid.

, and default to players. , and default to operators. Grant the cook permission to the intended restaurant/catering roles. Eating needs no cook permission.

Crops and soil

Existing wheat, carrots, potatoes and beetroot retain their vanilla block appearance. Loaded chunks are scanned with a configurable per-tick budget, and existing maturity is adopted. Natural growth is replaced with persisted Agriculture progress on managed land. Custom corn, tomato, beans, onion, lettuce, cannabis and fictional precursor plants use tagged seeds, server-owned planting locations and staged client-pack models over tripwire hosts. Custom host blocks are not decorative tripwire and must not be moved by pistons.

Use ordinary wheat/beetroot seeds, carrots and potatoes for those crops. Issue custom seed stock through /skylines give agriculture:seed_corn (and the corresponding crop IDs), then sell it using Economy shops. Mature crops return planting stock for the next harvest. Custom seeds are planted by right-clicking farmland; seeders accept the same items.

Growth depends on fertility, moisture, crop-family rotation and pests. Repeating a family reduces the growth multiplier. Harvesting gradually consumes fertility. Water buckets, Utilities irrigation, compost and industrial fertilizer provide field care. /agri inspect reports the targeted field's fertility, moisture, pests and fertilizer reserve. Field soil is shared across each 16-by-16 horizontal area; it is not a per-block chemistry model.

Apply genuine Industry/Utilities fertilizer by right-clicking managed soil/crops, or load it into a spreader. It restores some fertility and enables a 1.5x growth multiplier for 1,800 server-running seconds. Reapplication refreshes the bounded reserve; speed never stacks. Plain bone meal does not instantly grow managed crops. Spoiled food becomes compost through /agri compost; compost restores fertility without the fertilizer speed bonus. Pest treatment reduces infestation and is prepared through its configured cauldron recipe.

/agri irrigate draws ten liters from the property's Utilities grid and restores moisture. The irrigator attachment draws measured water from that grid as it passes. Neither forces chunks to load. Pests accumulate gradually; they reduce growth and yield rather than suddenly deleting the field. Logical growth continues in unloaded chunks while the server runs. Shutdown time does not advance crops or spoilage. Visual blocks catch up when loaded.

Hand harvesting and water harvesting use the managed yield rules. Water can harvest wilderness or a protected field only when source and target have the same complete WorldGuard region set. It cannot cross a protection boundary or enter blacklisted land, and other plugins' cancelled flow events remain cancelled. Water has no player whose permissions could authorize a crossing. Only ripe crops produce a full harvest; breaking immature plants returns planting stock. Immature carrot/potato returns retain the original seed freshness and continue aging while planted, so immediate replanting cannot refresh old produce. Machines check the current driver's land access at every affected block.

Processing and meals

Look at an authorized station, then use /agri recipes and /agri prepare <recipe> [batches]. Each operation supports one to sixteen batches. The full ingredient and output-capacity check finishes before the inventory changes. Oldest usable ingredients are selected first. Milk recipes return buckets. Full meals consume the configured coal and require the cook role.

StationStock recipes
GrindstoneWheat to flour; service kits from plain metal ingots
SmokerBread, dried beans, full meals and optional cannabis processing
CauldronCheese, preserved vegetables and fictional pest treatment
Brewing standFictional precursor processing into a configured Narcotics item

Farmer's plates and bean bowls combine grain, protein and vegetables. Garden sandwiches add dairy; fruit breakfasts add fruit and dairy. A full serving restores 16–18 hunger points and 18–20 saturation by default. Nutrient contributions are meaningful fractional portions, not one diversity credit for each differently named dish. Health stores one profile per serving in its existing recent-food history. A tiny vegetable addition cannot make a meat-heavy history balanced. Better nutrition supports fitness earned through activity and stamina recovery. Eating meals does not directly add fitness or stack strength effects.

The bundled raw foods and cooked staples remain edible where their native material permits it. Tracked perishable ingredients cannot pass through ordinary crafting recipes; use Agriculture processing. Smoker processing recipes preserve the ingredient's remaining freshness fraction. Ordinary furnace, smoker and campfire food conversion is blocked, including furnace fuel ignition for these inputs; use /agri prepare cook_beef and the corresponding staple recipes. Spoiled ingredients cannot be cooked. Stale ingredients shorten the finished product's shelf life, including preserved products, preventing repeated processing from restoring freshness.

Spoilage, storage and shops

Freshness uses a saved server-running clock. Player logout and chunk unload do not pause aging; server shutdown does. Food batches carry their original age. Movement, renaming, trading and refrigeration never make old food fresh. Spoiled food cannot be eaten or sold through food shops. Use /agri inspect while holding food to see remaining ambient shelf life.

CategoryDefault ambient life
Full meals6–8 server-running hours
Raw meat/fish18–24 hours
Cooked meat/fish and milk24 hours
Fresh produce3–7 days, depending on crop
Dry wheat, flour, dried beans and preserved vegetables14 days

Utilities cold rooms slow deterioration to 25% of the ambient rate during their actual powered seconds. They do not freeze food permanently. Stock must be placed/accessed through an inventory after the cold room is commissioned so its storage relationship is registered. Keep the cold room commissioned while stock remains inside; removing its counter conservatively loses any unsettled cooling credit. Ordinary chests, carried food, equipment cargo and ender chests age normally. Refrigerator coverage is a four-block cube around its controller within the same property. It must not be confused with arbitrary ice blocks or an uncommissioned build.

Economy food listings match a stable product identity while preserving all other significant metadata. Expiration, batch and storage bookkeeping are excluded from product comparison. Actual stock batches are sold oldest first and delivered/refunded with their age intact. The default minimum remaining ambient shelf life at sale is 300 seconds, configured in food.minimum-sale-seconds. Listing samples can outlive the original sample batch. Other items retain exact metadata matching. Different food batches generally occupy separate inventory stacks; portions from one preparation operation share a batch identity.

Existing plain vanilla ingredients have no historical harvest date. First adoption gives them one configured shelf life; subsequent access never re-dates them. Custom items from other providers are not adopted by material alone. Add desired food types explicitly in foods. Foods with adopt-vanilla: true keep their vanilla item appearance while still using Agriculture nutrition and spoilage. New custom foods retain their own models. Previously issued suite food-model bindings resolve to vanilla through compatibility aliases in the matching pack and are removed on normal preparation/inspection/transfer. This changes only the suite-owned appearance: batch identity, age, cooling and shop product identity are kept. Models supplied by another provider are preserved.

Machinery and handling

Vehicles supplies the tractor and persistent registrations for the combine harvester, cultivator, seeder, fertilizer spreader, irrigator, root harvester and grain tipper. Each is a normal owned vehicle registration. Issue/sell/deploy it through existing Vehicles tools. Farm trailers have no seats and cannot be driven independently. Tractor hitches require authorization to both registrations, aligned stationary equipment and sufficient clearance. Recovery/impound permission is not granted by farm machinery permission.

  1. Park the implement behind the tractor and use /agri hitch <trailer-plate> from its driver seat.
  2. Step out and use /agri cargo while looking at the equipment to load seeds/fertilizer or remove stock.
  3. Return to the tractor and use /agri work [crop-id] to select planting stock and lower/activate it.
  4. Drive forward slowly. Working width is three blocks and the default work speed limit is 5 m/s.
  5. Use /agri work to raise/disable it, then /agri unhitch while stopped to disconnect.

The combine harvests grain/legume crops. The root harvester collects root crops. Hand-picked vegetables and illicit herbs still require hand labor. Implements operate over their actual swept paths; they do not repeatedly work an entire field at a distance. Seeds and fertilizer must be genuine stock in the attached implement. Harvest output enters its 27-slot cargo. The harvester leaves ripe plants standing when space for produce and seeds is unavailable. /agri unload <tipper-plate> moves cargo that fits to an authorized grain trailer within eight blocks, including while the combine and trailer move together. Cargo remains attached to its registration through storage/redeployment and clean restart, not to a tow connection.

Working equipment wears with distance. A warning appears below 20% condition and it breaks down at 5% by default, stopping the working tractor/combine until serviced. Hold a genuine service kit and use /agri service beside stopped equipment. Service restores condition and raises the tool. These controls are separate from Vehicles' existing fuel, hull and tire maintenance.

Custom artwork

The matching client pack contains textured 3D models for the new custom foods, seven custom seed packets, compost, pest treatment, service kits and hay bales. Each custom crop has four growth models. The combine and six implements have distinct textured models and working heads; the grain tipper has its own cargo body. The stock tractor keeps its existing Vehicles artwork. View the model and crop previews in the Agriculture artwork gallery. Each preview can be opened at full size from a phone or desktop. Nitrogen, hydrogen, anhydrous ammonia and fertilizer have distinct commodity models. All 17 bundled Utilities/Industry machine types have separate dashboard icons. Those icons identify commissioned multiblocks; build the physical machines from their live block blueprints. The air separator, electrolyzer, ammonia reactor and fertilizer mixer use distinct silhouettes. Vanilla ingredients and cooked vanilla foods keep their original item appearance.

Maintainers can regenerate the artwork with python tools/generate_agriculture_art.py from the suite checkout using Python with Pillow and NumPy. Studio preview generation also needs Blender 4.2 or newer; set VALORYN_BLENDER to its executable when it is not on the default path. --assets-only exports the models, face atlases and editable sources without Blender; --render-only refreshes previews of the exported models. --check verifies model/texture references, vanilla aliases, atlas UVs, machine coverage, dish support/contact geometry, editable-source parity and hashes without rewriting files. Editable Blockbench files and their embedded textures live in Agriculture/artwork/blockbench; exact face data, model metrics and field-density reports are beside the review sheets in Agriculture/artwork. The full content generator invokes the same artwork pipeline. Previews use the exported faces and UVs without extra smoothing or geometry. Run node tools/sync_agriculture_gallery.mjs after refreshing the review images to update the public gallery assets, then validate and publish the website. Preview URLs contain a content hash so phones receive the current artwork. Module pack patches are merged into the complete curated pack during release packaging.

Cooperative commands and persistence

The current property controller can use /agri coop add <uuid>, remove <uuid> and list on the farm. Up to 32 roster members are retained per property. Membership is optional for field work; grant WorldGuard build access separately. /agri save requests an administrator snapshot. All names/messages and content definitions live in the module's YAML files; restart for gameplay-definition changes.

state.yml stores the clock, crops, soil, cooperative grants, equipment wear and cargo using ordered snapshots and atomic replacement. Storage errors fence further Agriculture operations. The state file and Minecraft inventory/world save files do not share one crash transaction. Back up them together with the existing module data. Validate on an isolated server before introducing the module into an established economy; abrupt host/process failure can expose cross-file rollback differences, as with the current Utilities production prototype.

Operator walkthrough

On an isolated copy of the server, first plant on unregistered wilderness and verify farming works without a region. Verify ordinary wheat retains its initial growth stage, then plant corn and check stage changes after a short test growth period. Test mature hand and machine harvests. Drive an implement across allowed and denied plots, including a swath that straddles the border; only permitted blocks should change and denied blocks must consume no supplies. Revoke the driver's build rights and verify field work stops immediately, including block-place and block-break overrides. Test a blacklisted region overlapping an allowed child plot, and verify planting, growth, harvesting and WorldGuard bypass cannot evade it. Verify water harvests within one region set (including wilderness) but not across region edges. Test the optional property cooperative roster and controller changes independently of build rights. Register a Utilities meter/grid for irrigation and cold-room checks.

Prepare two batches of the same meal at different times and stock one sell shop. Confirm both batches are offered, the oldest valid batch sells first, and its remaining life is retained. Test a full buyer inventory, insufficient funds, buy shops and normal non-food custom items. Expire a batch and verify eating, shop sale, crafting and cooking cannot refresh it.

Commission a cold room, open/restock its chest, and compare its food age with carried food. Unload its chunks, interrupt power and restore power; only powered intervals earn cooling credit. Restart and verify crop stages, cargo, wear, cooperative grants and the clock persist without advancing through shutdown. Test a full harvester, authorization loss, towing disconnect, and service/breakdown behavior before increasing limits.

Machinery audio

Install the matching complete resource pack to hear the farm attachments. Each of the six working mechanisms renews a three-second clip at pitch 1. The tractor engine continues to use Vehicles' existing engine profile. An attachment becomes audible only after successful tilling, paid seed placement, fertilizer application, water consumption or a matching harvest. A short lease bridges work samples; it expires within half a second without more work. Stopped, disengaged, unavailable or missing equipment is silenced. Empty/full cargo and denied actions do not produce work audio.

Successful engage/disengage, deliberate hitch/unhitch, service, breakdown and real cargo transfers have separate short effects. Simply towing a tipper stays silent.

Agriculture config.yml has sounds.enabled and sounds.types.<type> entries with enabled, sound, volume, range (blocks) and loop-ticks. The six attachment loops use 60 ticks; zero means a one-shot. Keep pitch at 1 and match loop timing to the actual file length. Custom loop keys need matching .voice0 through .voice7 pack events, each pointing to the same file. The first upgrade adds the sound section without replacing an existing operator-defined section; restart after changes.

Core's machinery-audio configuration controls the shared farm/industrial budget: three loops per listener by default, at most two from the same sound type. The driven attachment gets priority; nearby selections have hysteresis to avoid rapid swapping. Each listener/source owns a distinct stoppable event, so stopping one implement does not stop a neighbouring implement. Source/listener world changes, unloaded chunks, module shutdown and lost availability end playback. Sounds never load chunks.

03

Registered entry points

Command roots

Use the command syntax sections above for every required argument and subcommand. The short usage below is the plugin’s registered help text.

CommandUsageDescriptionPermission
/agricultureAliases: agri, farm/agri helpFields, food, cooperative access and agricultural machinery.

04

LuckPerms reference

Permissions

NodeDefaultDescription / children
trueNo additional description.
opNo additional description.
trueNo additional description.
trueNo additional description.
opNo additional description.
opNo additional description.
Next pluginMCSkylines

Command and permission references reflect the current plugin.yml manifests in this workspace.