AdvancementAPI is library made to easily create Advancement for your server using built in Bukkit/Spigot API features.
Creating root advancement unlocked by collecting 3 cobblestone
public class CobblestoneAdvancement implements AdvancementCreator {
public static final String ID = "some_cobblestone";
@Override
public @NotNull Advancement create(@NotNull Context context) {
Advancement advancement = new Advancement(context.getPlugin(), ID);
advancement.setDisplay(x -> {
x.setTitle("Some Cobblestone");
x.setDescription("Get 3 cobblestone");
x.setBackground(BackgroundType.STONE);
x.setIcon(Material.COBBLESTONE);
});
advancement.addCriteria("cobblestone", TriggerType.INVENTORY_CHANGED, trigger -> {
trigger.hasItemMatching(item -> {
item.setType(Material.COBBLESTONE);
item.setCount(3);
});
});
return advancement;
}
}
Creating child advancement of previous one unlocked by crafting a stone pickaxe
public class StonePickaxeAdvancement implements AdvancementCreator {
public static final String ID = "stone_pickaxe";
@Override
public @NotNull Advancement create(@NotNull Context context) {
Advancement advancement = new Advancement(context.getPlugin(), ID);
advancement.setParent(new NamespacedKey(context.getPlugin(), CobblestoneAdvancement.ID));
advancement.setDisplay(x -> {
x.setTitle("Stone Pickaxe");
x.setDescription("Craft a stone pickaxe with your 3 cobblestone");
x.setIcon(Material.STONE_PICKAXE);
});
advancement.addCriteria("pickaxe", TriggerType.INVENTORY_CHANGED, trigger -> {
trigger.hasItem(Material.STONE_PICKAXE);
});
return advancement;
}
}
Register previously created advancements
public class MyPlugin extends JavaPlugin {
private final AdvancementManager manager = new AdvancementManager(this);
@Override
public void onEnable() {
manager.register(new CobblestoneAdvancement());
manager.register(new StonePickaxeAdvancement());
manager.createAll();
}
}