A full custom trigger setup for Fabric mods using the Minecraft Java API.
This trigger tracks breaking 10 logs. Swap yourmod with your mod ID throughout.
How to Use?
Create the trigger class, register it in ModTriggers,
call registerModTriggers() from your mod initializer,
and add the advancement JSON to data/yourmod/advancements.
Requirements
Fabric API, Minecraft 1.20+, Java 17+.
package com.yourmod.trigger;
import net.minecraft.advancement.criterion.AbstractCriterion;
import net.minecraft.advancement.criterion.CriterionConditions;
import net.minecraft.server.network.ServerPlayerEntity;
public class BreakLogsTrigger extends AbstractCriterion {
public BreakLogsTrigger() {
super();
}
public void trigger(ServerPlayerEntity player, int logsBroken) {
if (logsBroken >= 10) {
this.test(player, new CriterionConditions());
}
}
}
package com.yourmod.trigger;
import com.yourmod.YourMod;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.util.Identifier;
public class ModTriggers {
public static final BreakLogsTrigger BREAK_10_LOGS = register("break_10_logs", new BreakLogsTrigger());
private static BreakLogsTrigger register(String name, BreakLogsTrigger trigger) {
return Registry.register(Registries.CUSTOM_STAT, new Identifier(YourMod.MOD_ID, name), trigger);
}
public static void registerModTriggers() {
YourMod.LOGGER.info("Registering triggers for " + YourMod.MOD_ID);
}
}
{
"criteria": {
"break_logs": {
"trigger": "yourmod:break_10_logs"
}
},
"rewards": {
"experience": 50,
"loot": ["yourmod:example_loot"]
},
"display": {
"icon": { "item": "minecraft:oak_log" },
"title": "Lumberjack",
"description": "Break 10 logs in survival",
"frame": "task",
"show_toast": true,
"announce_to_chat": true
}
}