From minestom-skills
Build and send rich text in Minestom with Kyori Adventure — Component, NamedTextColor/TextColor, TextDecoration, click/hover events, titles, action bars, boss bars, sounds, books, and MiniMessage. Use when sending chat/messages, formatting text, coloring names, building interactive components, showing titles/bossbars, or playing sounds to players.
How this skill is triggered — by the user, by Claude, or both
Slash command
/minestom-skills:minestom-adventure-textThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Minestom uses **Kyori Adventure** for all user-facing text. There are **no legacy `§` color codes** — build `Component`s instead. Adventure is bundled with Minestom (no extra dependency) except **MiniMessage**, which is separate.
Minestom uses Kyori Adventure for all user-facing text. There are no legacy § color codes — build Components instead. Adventure is bundled with Minestom (no extra dependency) except MiniMessage, which is separate.
Anything that can receive text/titles/sounds is an Audience: Player, Instance, CommandSender, Scoreboard, Team, and the global Audiences helpers.
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.format.TextColor;
import net.kyori.adventure.text.format.TextDecoration;
Component msg = Component.text("Hello", NamedTextColor.GREEN)
.append(Component.text(" world").color(TextColor.color(0xFF8800)))
.decorate(TextDecoration.BOLD);
player.sendMessage(msg);
instance.sendMessage(Component.text("broadcast")); // whole instance
Component.text(...) is immutable — every method returns a new copy. Build with .append(...), .color(...), .decoration(deco, false) to turn one off (e.g. kill the default italic on item names).
import net.minestom.server.adventure.audience.Audiences;
Audiences.players().sendMessage(Component.text("to everyone"));
Audiences.console().sendMessage(Component.text("to server log"));
Audiences.players(p -> p.getInstance() == lobby).sendMessage(...); // filtered
For a custom group, PacketGroupingAudience.of(collection) sends one packet to many viewers.
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.event.HoverEvent;
Component button = Component.text("[Teleport]", NamedTextColor.AQUA)
.clickEvent(ClickEvent.runCommand("/spawn"))
.hoverEvent(HoverEvent.showText(Component.text("Go to spawn")));
Click actions: runCommand, suggestCommand, openUrl, copyToClipboard, changePage. Hover: showText, showItem, showEntity.
import net.kyori.adventure.title.Title;
import net.kyori.adventure.bossbar.BossBar;
import java.time.Duration;
player.showTitle(Title.title(
Component.text("Welcome"),
Component.text("subtitle"),
Title.Times.times(Duration.ofMillis(500), Duration.ofSeconds(3), Duration.ofMillis(500))));
player.sendActionBar(Component.text("action bar text"));
BossBar bar = BossBar.bossBar(Component.text("Boss"), 1.0f,
BossBar.Color.RED, BossBar.Overlay.PROGRESS);
player.showBossBar(bar);
bar.progress(0.5f); // updates live for all viewers
player.hideBossBar(bar);
import net.kyori.adventure.sound.Sound;
import net.kyori.adventure.key.Key;
player.playSound(Sound.sound(Key.key("entity.experience_orb.pickup"),
Sound.Source.PLAYER, 1.0f, 1.0f));
// or emit at a position:
player.playSound(sound, x, y, z);
Minestom also exposes SoundEvent constants usable as the key.
import net.kyori.adventure.inventory.Book;
player.openBook(Book.book(
Component.text("Title"), Component.text("Author"),
Component.text("Page 1"), Component.text("Page 2")));
Add net.kyori:adventure-text-minimessage to parse tag-style strings:
implementation("net.kyori:adventure-text-minimessage:4.17.0") // match Adventure ver
import net.kyori.adventure.text.minimessage.MiniMessage;
Component c = MiniMessage.miniMessage()
.deserialize("<red>Hello <bold>world</bold> <gradient:#5e4fa2:#f79459>!</gradient>");
Great for config-driven / user-authored text. For hard-coded strings the builder API is fine.
.decoration(TextDecoration.ITALIC, false).MinestomAdventure.AUTOMATIC_COMPONENT_TRANSLATION = true and use Component.translatable(key) to render per player locale.Sources: https://minestom.net/docs/feature/adventure, https://docs.advntr.dev
Fetches 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.
npx claudepluginhub tjkdev1/minestom-skills --plugin minestom-skills