Better Lib ยท JsonVillagerLoader
Load professions from JSON, not Java trade chains.
The Villager Trade Ledger writes files that Better Lib can load. Nothing is uploaded โ the tool runs in your browser.
26.1+
Modern loader
Package: com.reggarf.mods.better_lib.villager.json
public static final SimpleVillagerLib VILLAGERS = new SimpleVillagerLib(YourMod.MODID);
JsonVillagerLoader.loadAll(VILLAGERS, YourMod.class, "/data/your_modid/villagers");
VILLAGERS.register();
Save JSON as src/main/resources/data/your_modid/villagers/<name>.json. POI id is your_modid:profession_name (no _poi suffix).
1.21.1 โ 1.21.11
Legacy loader
Package: com.reggarf.mods.better_lib.villagers
VILLAGERS.loadJsonProfessions(YourMod.class, "/data/your_modid/villagers");
VILLAGERS.register();
POI id uses your_modid:profession_name_poi. Add it to data/minecraft/tags/point_of_interest_type/acquirable_job_site.json.
Format
Profession JSON
{
"name": "andesite_worker",
"workstation": "minecraft:smooth_stone",
"max_villagers": 1,
"search_range": 1,
"work_sound": "minecraft:entity.villager.work_armorer",
"enabled": true,
"trades": {
"1": [
{
"cost": { "item": "minecraft:emerald", "count": 9 },
"cost2": { "item": "minecraft:cobblestone", "count": 6 },
"result": { "item": "minecraft:iron_ingot", "count": 2 },
"max_trades": 5,
"xp": 3,
"price_multiplier": 0.07
}
]
}
}
Scaffolding ยท Gradle Multi-Project
Multi-Loader & Multi-Version Modding
Modular multi-loader workspace structured identically to Reggarf Multi-Dev (e.g. Create_Easy_Villagers). Combines a shared common module with dedicated subprojects per loader and Minecraft version (e.g. neoforge-1.21.1, forge-1.20.1).
Architecture
Common & ServiceLoader
The common subproject holds all platform-independent registry logic, recipes, and block/item models.
// In common: com/example/mod/platform/Services.java
public static final IPlatformHelper PLATFORM =
ServiceLoader.load(IPlatformHelper.class)
.findFirst()
.orElseThrow();
// Use anywhere in Common:
if (Services.PLATFORM.isDevelopmentEnvironment()) {
Constants.LOG.info("In Dev Environment");
}
Multi-Version Synchronization
Multi-Dev Workflow
Every targeted loader and version gets its own dedicated subproject:
# Launch NeoForge 1.21.1 dev client:
./gradlew neoforge-1.21.1:runClient
# Launch Forge 1.20.1 dev client:
./gradlew forge-1.20.1:runClient
# Launch Fabric dev client:
./gradlew fabric-1.21.1:runClient
# Build all mod JARs at once:
./gradlew build
Project Structure
Generated Directory Layout
your_mod/
โโโ build.gradle # Root build script & shared repositories
โโโ settings.gradle # Includes: common, neoforge-1.21.1, forge-1.20.1, etc.
โโโ gradle.properties # Common & per-subproject configuration
โโโ common/ # Shared resources (assets, lang/en_us.json, pack.mcmeta)
โโโ neoforge-1.21.1/ # NeoForge 1.21.1 subproject (net.neoforged.moddev)
โโโ forge-1.20.1/ # Forge 1.20.1 subproject (Loom / ForgeGradle)
โโโ fabric-1.21.1/ # Fabric 1.21.1 subproject (Loom)
*
IDE Import Tip
When opening the extracted project in IntelliJ IDEA or VS Code, ensure your Project SDK matches your primary Minecraft version (e.g. Java 21 for 1.20.5+ / 1.21+, or Java 17 for 1.18โ1.20.4). Allow Gradle to complete its initial sync so that Loom and ModDev source sets are fully indexed.