
CropXp
Random experience drops when you harvest crops — fully compatible with LevelZ.
CropXp rewards farming: harvest a mature crop and there's a chance it drops a few experience orbs. Which crops count, how much XP, and the drop chance are all yours to configure.
✨ Highlights
- 🌾 XP for harvesting crops, with configurable amount and chance
- 🎚️ In-game settings screen (via Mod Menu + Cloth Config)
- 📦 Add, remove, or retune any crop with data pack files — great for modpacks and servers
- 📈 Optional LevelZ support — also grants LevelZ farming XP when LevelZ is installed
- ♻️
/reloadapplies changes instantly; Creative mode is opt-in
📦 Compatibility
Fabric 1.19.2, 1.20.1, 1.21.1
Required: Fabric API Optional: Mod Menu + Cloth Config (in-game settings), LevelZ (LevelZ XP)
⚙️ Configuration
Edit the settings in-game via Mod Menu → CropXp, or edit config/cropxp.json
directly. These are the global defaults used by every crop that doesn't
override them. Upgrading from a 1.x config is automatic.
{
"general": {
"enabled": true,
"dropInCreative": false,
"defaults": { "min": 1, "max": 2, "chance": 0.5 }
},
"levelz": {
"enabled": true,
"defaults": { "min": 1, "max": 1, "chance": 0.25 }
}
}
| Setting | Default | Meaning |
|---|---|---|
general.enabled | true | Master switch for vanilla XP drops. |
general.dropInCreative | false | If true, XP also drops while in Creative mode. |
general.defaults.min / max | 1 / 2 | Vanilla XP amount; a whole number is rolled evenly between min and max. |
general.defaults.chance | 0.5 | Chance per harvest to drop vanilla XP (0.0–1.0). 0 = never, 1 = always. |
levelz.enabled | true | Switch for LevelZ XP (only matters when LevelZ is installed). |
levelz.defaults.min / max | 1 / 1 | LevelZ XP amount range. |
levelz.defaults.chance | 0.25 | Chance per harvest to drop LevelZ XP. Rolled independently of vanilla XP. |
🌱 Custom crops (data packs)
Every recognized crop is a JSON file, so you can add, retune, or disable any crop — including modded ones — without changing the mod. Place files in a data pack at:
data/<namespace>/cropxp/crops/<name>.json
<namespace> can be anything (use your pack's name); cropxp/crops is the
fixed folder CropXp scans. Put the pack in a world's datapacks/ folder or ship
it inside a mod. Run /reload after editing — the Recognized Crops tab in
the config screen lists everything currently loaded.
| Field | Type | Required | Description |
|---|---|---|---|
block | string | ✅ | Block id, e.g. minecraft:carrots. |
conditions | object | — | Block-state values that must all match for XP to drop, e.g. { "age": 7 }. Omit to match any state. |
vanilla | object | — | Vanilla XP override { min, max, chance }. Any field omitted falls back to the global default. |
levelz | object | — | LevelZ XP override { min, max, chance }. |
requiresCorrectTool | boolean | — | If true, XP only drops when the block is broken with the correct tool. |
enabled | boolean | — | Set false to turn a crop off (e.g. to disable a built-in one). |
Conditions use the block's own state properties — for example age (0–7
for wheat, 0–3 for nether wart), or half (lower / upper). Only states
that match every listed condition grant XP, so unripe crops are skipped.
Examples
Mature carrots with custom XP:
{
"block": "minecraft:carrots",
"conditions": { "age": 7 },
"vanilla": { "min": 1, "max": 3, "chance": 0.6 }
}
Fully-grown nether wart, overriding both vanilla and LevelZ XP:
{
"block": "minecraft:nether_wart",
"conditions": { "age": 3 },
"vanilla": { "min": 2, "max": 4, "chance": 1.0 },
"levelz": { "min": 1, "max": 2, "chance": 0.5 }
}
Turn off a built-in crop:
{ "block": "minecraft:cocoa", "enabled": false }
The same pattern works for modded crops — use the modded block id and its own
growth property in conditions.
🧺 Built-in crops
Wheat, carrots, potatoes, beetroots, nether wart, cocoa, melon & pumpkin stems (including the attached-stem state), and pitcher crop (where that block exists).
Melon/pumpkin blocks and torchflower are excluded on purpose — they regrow or can be re-placed, which would allow infinite XP.
Originally built for my own modpack, now shared for everyone. 🌾
