VillagerFarm
A Fabric mod for Minecraft 1.21.11 that overhauls villager farming behavior.
Quick challenge
How far can you run before the mobs catch you?
Minecraft check
Confirm your run
Complete the quick check to get your code.
VillagerFarm
Villager Farm
A Fabric mod for Minecraft 1.21.11 that overhauls villager farming behavior.
Features
- WTHIT + Jade tooltip integration — villager harvest, replant, and pickup now ignore the global mob_griefing gamerule (toggle in config). Set `mob_griefing=false` to stop creepers/endermen damaging the world while villagers keep farming. - WTHIT + Jade tooltip integration — when a farmer breaks a mature crop, the seedling goes back in the same tick. Yields are vanilla loot minus one seed-equivalent. - WTHIT + Jade tooltip integration — sugar cane, nether wart, pumpkin, melon, and cocoa. Pumpkins and melons are only harvested when stem-grown (verified via WTHIT + Jade tooltip integration) so player-placed decorations are left alone. Sugar cane harvest leaves the bottom stalk so the column regrows. Each crop is independently toggleable. - WTHIT + Jade tooltip integration — pumpkin (food=4 by default), melon slice / sugar cane / cocoa beans (food=1) all count toward villager breeding readiness. Custom share path lets farmers throw any of these to neighbors as soon as they have ≥2 in a slot, so the new crops actually circulate. - WTHIT + Jade tooltip integration — picking up sugar cane gives Speed (configurable duration + amplifier per cane). Cocoa beans give Regeneration. A cleric picking up nether wart rolls one of the configured positive effects. - WTHIT + Jade tooltip integration — farmer-profession villagers stop wrecking their own farmland by jumping. Other entities still trample normally. - WTHIT + Jade tooltip integration — vanilla's farmer brain only scans ±1 around the villager. The mod adds a configurable wider scan for extended crops (default ±2). Includes a fallback that populates `SECONDARY_JOB_SITE` for soul-sand and jungle-log farms; without it, the brain framework would refuse to even consider the farming task. - WTHIT + Jade tooltip integration — hovering a villager shows their current activity (Working / Resting / Meeting / Idle / etc.) plus their inventory contents. Optional; works with either tooltip mod, or none.
Every feature has a config toggle, and every magic number is editable.
Installation
1. Install Fabric Loader ≥ 0.19.2 and Fabric API for Minecraft 1.21.11. 2. Download `blockorigin` (required runtime dep — provides the cause-tracking that makes the stem-grown pumpkin/melon detection work). 3. Download `villagerfarm-x.y.z.jar` from the releases page and drop it into your `mods/` folder alongside `blockorigin`. 4. Optional: install WTHIT or Jade to get the villager tooltip overlay.
Configuration
On first launch the mod creates `config/villagerfarm.json` with sensible defaults. Edit the file and restart the game/server to apply changes. There's no hot-reload command.
The schema is a single JSON object with two top-level sections:
`features` — toggles
| Key | Default | Effect | |---|---|---| | `gamerule_split` | `true` | When true, villager farming + pickup ignore vanilla's `mob_griefing` gamerule. Set false to revert to vanilla coupling. | | `atomic_harvest_replant` | `true` | Vanilla wheat/beetroot/potato/carrot harvested + replanted in the same tick. Disable for vanilla two-step behavior. | | `anti_trample` | `true` | Farmer-profession villagers don't trample farmland by jumping. | | `secondary_job_site_patcher` | `true` | Forces farmers near soul-sand / jungle-log / etc. to consider the FarmerVillagerTask. Without this, vanilla brain refuses to run the task for non-farmland farms. | | `tooltip_integration` | `true` | WTHIT/Jade villager tooltip displays activity + inventory. | | `extended_crops.enabled` | `true` | Master switch for the five extra crops. | | `extended_crops.sugar_cane / nether_wart / cocoa / pumpkin / melon` | `true` | Per-crop toggles, layered under the master switch. | | `food_sharing.enabled` | `true` | Master switch for the custom low-threshold share path. | | `food_sharing.share_pumpkin / share_melon_slice / share_sugar_cane / share_cocoa_beans / share_nether_wart_to_cleric` | `true` | Per-item share toggles. Wart is farmer→cleric only when its toggle is on. | | `pickup_effects.sugar_cane.enabled` | `true` | Effect on sugar-cane pickup. | | `pickup_effects.sugar_cane.effect` | `"minecraft:speed"` | Status effect identifier rolled. Any vanilla/modded effect id works. | | `pickup_effects.sugar_cane.ticks_per_item` | `200` | Ticks added per cane (20t/s, so 200 = 10s). | | `pickup_effects.sugar_cane.amplifier` | `0` | 0 = level I, 1 = level II, etc. | | `pickup_effects.cocoa_beans.*` | `true / "minecraft:regeneration" / 100 / 0` | Same shape as sugar cane, 5s/bean of Regen by default. | | `pickup_effects.nether_wart.enabled` | `true` | Random positive effect on nether-wart pickup. | | `pickup_effects.nether_wart.cleric_only` | `true` | Only fires for cleric villagers. | | `pickup_effects.nether_wart.duration_ticks` | `600` | 30 seconds at 20 t/s. | | `pickup_effects.nether_wart.amplifier` | `0` | Effect level. | | `pickup_effects.nether_wart.allowed_effects` | 11 entries | Identifier list rolled from. Bad ids are silently dropped. |
`values` — numeric knobs
| Key | Default | Effect | |---|---|---| | `food_values` | pumpkin=4, melon_slice=1, sugar_cane=1, cocoa_beans=1 | Map of `minecraft:item_id` → food points. Items not in this map are not villager food. | | `search.extended_radius_xyz` | `2` | The outer search shell for extended crops (vanilla is 1). | | `search.extended_harvest_distance_squared` | `16.0` | Max squared distance the villager will harvest an extended crop from. | | `search.unstuck_min/max_distance_squared` | `1.0 / 6.25` | Vanilla CropBlock targets in this squared-distance window get an unstuck-harvest so the brain doesn't lock onto unreachable wheat. | | `search.secondary_job_site_radius_xz / radius_y / tick_interval` | `4 / 2 / 40` | Patcher scan dimensions and refresh interval (ticks). | | `sharing.min_stack_size_to_toss` | `2` | Farmer needs at least this count in a slot to toss it to a neighbor. | | `sharing.max_share_distance_squared` | `5.0` | Max squared distance between farmer and target villager for the custom share path. |
The config does not validate its inputs. If you set `ticks_per_item: -50` or rename `enabled` to `enabled_lol`, you get whatever fallback Gson decides — usually defaults for missing fields, weird behavior for nonsense values. Edit responsibly.
yes its made by claude