A full custom advancement setup for Minecraft using a custom trigger.
Covers the advancement JSON, the custom criterion class, and the registration class.
Swap yourmod with your namespace throughout.
How to Use?
Create the custom criterion class, register it in
ModAdvancements, and create the advancement JSON
in data/yourmod/advancements.
Requirements
Fabric API, Minecraft 1.20+, Java 17+.
{
"display": {
"icon": { "item": "minecraft:diamond" },
"title": "Example Advancement",
"description": "Awarded for clicking the diamond block",
"frame": "task",
"show_toast": true,
"announce_to_chat": true,
"hidden": false
},
"criteria": {
"clicked_diamond": {
"trigger": "yourmod:clicked_diamond_block"
}
},
"rewards": { "experience": 100 }
}
package com.yourmod.advancement;
import net.minecraft.advancement.criterion.AbstractCriterion;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.Identifier;
public class ClickedDiamondCriterion extends AbstractCriterion {
public ClickedDiamondCriterion() {
super(new Identifier("yourmod", "clicked_diamond_block"));
}
@Override
public Conditions conditionsFromJson(com.google.gson.JsonObject json) {
return new Conditions();
}
public void trigger(ServerPlayerEntity player) {
this.test(player, Conditions::new);
}
public static class Conditions extends AbstractCriterion.Conditions {
public Conditions() { super(); }
}
}
package com.yourmod.advancement;
import com.yourmod.YourMod;
import net.minecraft.advancement.criterion.CriterionRegistry;
public class ModAdvancements {
public static void registerAdvancements() {
YourMod.LOGGER.info("Registering custom advancements...");
CriterionRegistry.register(new ClickedDiamondCriterion());
}
}