From minestom-skills
Build the advancement (achievement) screen in Minestom — AdvancementManager.createTab, AdvancementRoot vs Advancement, FrameType (TASK/GOAL/CHALLENGE), parent/child trees, addViewer to show a tab, setAchieved progress, and toast notifications. Use when adding custom advancements/achievements, building an advancement tree UI, or showing achievement toasts to players.
How this skill is triggered — by the user, by Claude, or both
Slash command
/minestom-skills:minestom-advancementsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Advancements render the vanilla achievements screen. A **tab** holds a tree: one `AdvancementRoot` plus child `Advancement`s linked by parent. Get the manager from the server.
Advancements render the vanilla achievements screen. A tab holds a tree: one AdvancementRoot plus child Advancements linked by parent. Get the manager from the server.
AdvancementManager manager = MinecraftServer.getAdvancementManager();
import net.minestom.server.advancements.*;
import net.minestom.server.item.Material;
import net.kyori.adventure.text.Component;
AdvancementRoot root = new AdvancementRoot(
Component.text("Getting Started"), // title
Component.text("Your first steps"), // description
Material.GRASS_BLOCK, // icon
FrameType.TASK, // TASK | GOAL | CHALLENGE
0f, 0f, // x, y in the tree
"minecraft:textures/block/stone.png"); // background texture
AdvancementTab tab = manager.createTab("myserver:main", root);
Add children, linking each to its parent:
Advancement first = new Advancement(
Component.text("First Blood"),
Component.text("Defeat an enemy"),
Material.IRON_SWORD,
FrameType.GOAL,
1f, 0f); // x offset from root
tab.createAdvancement("myserver:first_blood", first, root);
tab.addViewer(player);
tab.removeViewer(player);
first.setAchieved(true); // marks complete (and pops the toast if enabled)
first.showToast(true); // show the toast popup on completion
All viewers of one AdvancementTab share the same progress. To give players independent progress, create a separate AdvancementTab per player (e.g. build it in AsyncPlayerConfigurationEvent/spawn and addViewer only that player). Don't share one tab across players if their states differ.
events.addListener(PlayerSpawnEvent.class, e -> {
Player p = e.getPlayer();
AdvancementTab tab = manager.createTab("myserver:" + p.getUuid(), buildRoot());
// ... populate ...
tab.addViewer(p);
});
namespace:id.(x, y) are tree layout positions, not world coords; space children out so lines don't overlap.FrameType.CHALLENGE renders the fancy purple frame + completion sound.minestom-adventure-text for titles/components used in advancement names, and minestom-events for hooking grant logic onto gameplay events.npx claudepluginhub tjkdev1/minestom-skills --plugin minestom-skillsFetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Applies a firm's KYC/AML rules grid to parsed onboarding records: assigns risk rating, checks required documents, outputs rule outcomes with citations, and routes for escalation.
Generates daily or weekly digests of activity from connected sources (chat, email, docs, tasks, CRM), highlighting action items, decisions, mentions, and project updates.