Modpack developers
Everything in Plantations is data: tags, data maps, datapack registries and recipe types. A datapack, KubeJS or CraftTweaker can change all of it. The examples on this page are in docs/examples and are tested (see Testing the examples).
Two op commands show how the mod sits in a pack; both print to chat and the log, so they also work from a server console:
/plantations diagnose: the mod's recipes per type, the compat recipes that loaded for each mod (with their ids), what the input tags resolve to, and which plants are on./plantations scan <chunks>: counts the ores and the Plantations plants in the chunks around the position (it generates missing chunks, so keep the radius small).
Config
config/plantations-common.toml (all options in CONFIG.md). The ones packs usually touch:
| Option | What for |
|---|---|
plants.<plant>.enabled / .wild / .wildRarity | Remove a plant entirely (its recipes switch off through the plantations:plant_enabled condition), or only its wild patches |
worldgen.saltpeter / apatite / potash / sulfur | Skip our ores when another mod already provides the mineral; the c: tags keep the recipes working |
balance.mineralStrength, balance.livingSoilGrowth | Shift the two tech trees against each other |
pests.enabled | Turn off the pest system |
effects.dependency, effects.overdose | How harsh repeated use is |
blackMarket.enabled, .currency, .heat | The Dealer, which coins it pays in (NUMISMATICS, LIGHTMANS, CUSTOM), and raids |
Screen effects are per player in config/plantations-client.toml (visuals.intensity, visuals.photosensitive, visuals.hallucinations).
Tags
Exported: other mods' recipes find Plantations items through these.
| Tag | Contents |
|---|---|
c:seeds/cannabis, c:seeds/opium_poppy, c:seeds/coca, c:seeds/datura (in c:seeds) | The seeds; coca drupes are coca's seeds |
c:crops/cannabis, c:crops/coca, c:crops/khat, c:crops/salvia, c:crops/opium_poppy, c:crops/datura (in c:crops) | The harvests: fresh bud, fresh coca leaves, khat bundle, fresh salvia leaf, green poppy pod, datura pod |
c:dusts/saltpeter, c:dusts/potash, c:dusts/sulfur, c:dusts/wood_ash, c:gems/apatite | The minerals |
c:ores/saltpeter, c:ores/apatite, c:ores/potash, c:ores/sulfur (+ c:ores_in_ground/*) | The ores, items and blocks |
c:drinks, c:foods | Coca tea, mushroom tea; poppy seed cake |
c:tools/knife | The Harvest Knife (Farmer's Delight's cutting board takes it) |
Consumed: recipes take conventional tags wherever one exists, for example:
c:crops/wheat,c:crops/sugar_cane,c:crops/cocoa_bean,c:crops/potato,c:crops/ricec:eggs,c:bones,c:mushrooms,c:foods/fruit,c:foodsc:buckets/water,c:buckets/milk,c:buckets/emptyc:dyes/*,c:dusts/glowstone,c:dusts/redstone,c:ingots/*,c:tools/shear- the mineral tags above
Machines and mechanics read these mod tags. Add your items to them:
| Tag | Used by |
|---|---|
plantations:fertilizer_inputs/nitrogen · /phosphorus · /potassium | Fertilizer Mixer slots (the c: minerals plus Urea and Superphosphate) |
plantations:steamable | Steamed Rice for the IMO Box (c:crops/rice, wheat as the fallback) |
plantations:imo_baits | What baits the IMO Box (Steamed Rice, Farmer's Delight's cooked rice) |
plantations:young_shoots | Fermented Plant Juice |
plantations:ohn_herbs | Oriental Herbal Nutrient (c:crops/garlic, c:crops/ginger, c:crops/cinnamon, beetroot) |
plantations:compost_tea/bases · /sugars | Compost Tea Brewer |
plantations:mulch/leaf · /straw | Mulch layers on garden beds |
plantations:weed_repellents | Liquids that keep weeds off a bed for a day (OHN) |
plantations:mycorrhizal_inoculants | Items that give a bed mycorrhiza |
plantations:smokable | What a Pipe can be packed with |
plantations:manure | Manure for the mushroom bulk substrate (bone meal by default) |
plantations:growing_media (block tag) | Blocks crops stand on, unless a plant sets its own soil tag |
plantations:rich_soils (block tag) | Rich organic soils without tracked stats: 85 % quality cap (Farmer's Delight's rich soil) |
Data maps
All are in data/<namespace>/data_maps/item/<name>.json. Entries merge across packs; set "replace": true to override an entry.
| Data map | What it sets | Format |
|---|---|---|
plantations:soil_amendment | What right-clicking a bed (or a watering-can use of a liquid) does | SOIL.md |
plantations:dilution | Makes an item a concentrate for the Mixing Barrel | PROCESSING.md |
plantations:pest_control | Which pests an item clears, for how long, at what cost | SOIL.md |
plantations:dose | Which substance an item carries, and how much | EFFECTS.md |
plantations:market_value | Black market value (harvest, resource or derived) | BLACK_MARKET.md |
neoforge:compostables | The Compost Bin uses the vanilla composter's list | NeoForge |
Example, tested through the KubeJS data folder (kubejs/data/plantations/data_maps/item/soil_amendment.json):
{
"values": {
"minecraft:rotten_flesh": { "n": 1, "organic": 2, "life": 1 }
}
}
Datapack registries
| Registry | Defines | Docs |
|---|---|---|
plantations:plant | Plants: climate, light, nutrients, propagation, harvest | PLANTS.md |
plantations:landrace | Regional strains and the biomes they grow in | PLANTS.md |
plantations:substance | Effects, tolerance, dependency, overdose | EFFECTS.md |
plantations:microbe_profile | IMO profiles per biome | SOIL.md |
plantations:black_market/offer · /contract_template | What the Dealer sells, contracts | BLACK_MARKET.md |
Recipe types
| Type | Fields (defaults) |
|---|---|
plantations:drying | ingredient, result, drying_time (2400) |
plantations:curing | ingredient, result, cycle_ticks, gain_per_cycle (0.03), cap (1.0) |
plantations:grinding | ingredient, result, grinds |
plantations:fermenting | ingredients (1-4, all different), result, time (24000) |
plantations:pressing | ingredient, count (1), result, presses (4), heated (false) |
plantations:extracting | ingredient, count (1), result, time |
plantations:fertilizer_blend | parts (n, p, k), result |
plantations:quality_shapeless and plantations:microbe_shapeless are shapeless crafting recipes that carry the quality or microbe profile of their inputs into the result. Plant recipes carry the plantations:plant_enabled condition, so they switch off with their plant.
KubeJS
Every recipe type works through event.custom with the JSON above. The tested example is examples/kubejs/server_scripts/plantations_examples.js. It adds one recipe of every type and removes one; an excerpt:
ServerEvents.recipes(event => {
event.custom({
type: 'plantations:fermenting',
ingredients: [{ item: 'minecraft:carrot' }, { item: 'minecraft:sugar' }, { item: 'minecraft:glass_bottle' }],
result: { id: 'plantations:fermented_plant_juice', count: 2 },
time: 12000
}).id('plantations:kubejs/fermenting_carrot')
event.remove({ id: 'plantations:campfire/charred_bone' })
})
Data maps and registries go in kubejs/data/<namespace>/… like any datapack.
Black market
The market is data too (details in BLACK_MARKET.md §11). The tested examples are in examples/kubejs/data:
// data/plantations/data_maps/item/market_value.json: the Dealer buys sweet berries (merges with the mod's own file)
{ "values": { "minecraft:sweet_berries": { "value": 0.5, "tier": "t0", "capacity": 128 } } }
// data/kubejs/plantations/black_market/offer/glowstone_dust.json: the Dealer sells 8 glowstone dust from tier 1
{ "item": "minecraft:glowstone_dust", "count": 8, "value_each": 2.5, "min_tier": 1, "stock": 4 }
// data/kubejs/plantations/black_market/contract_template/berry_rush.json: a contract from tier 2
{ "item": "minecraft:sweet_berries", "count_min": 32, "count_max": 64, "days": 2, "reward_multiplier": 1.3, "min_tier": 2 }
To remove one of the mod's offers or templates, override its file (same id) in a datapack with a NeoForge neoforge:false condition ("neoforge:conditions": [{ "type": "neoforge:false" }]). For quest mods there is the plantations:reputation_tier criterion (and one advancement per tier) and the plantations:contracts_completed statistic; INTEGRATIONS.md has an FTB Quests chapter.
CraftTweaker
Decision: no native ZenScript handlers. CraftTweaker's addJsonRecipe takes the same JSON for any recipe type, so handlers would only duplicate it. The tested example is examples/crafttweaker/scripts/plantations_examples.zs; an excerpt:
<recipetype:plantations:pressing>.addJsonRecipe("plantations_pressing_sunflower", {
type: "plantations:pressing",
ingredient: {item: "minecraft:sunflower"},
count: 2,
result: {id: "minecraft:yellow_dye", count: 3},
presses: 2,
heated: false
});
<recipetype:minecraft:campfire_cooking>.removeByName("plantations:campfire/roasted_eggshells");
The recipe ids are crafttweaker:<name>. Data maps and registries need a datapack.