From minestom-skills
Work with Minestom blocks — the immutable Block type, block states/properties, NBT/block handlers (signs, chests, custom tile entities), reading/writing blocks in an instance, and batch edits. Use when placing/reading blocks, setting block states, attaching block data/handlers, or doing bulk world edits.
How this skill is triggered — by the user, by Claude, or both
Slash command
/minestom-skills:minestom-blocksThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
`Block` is an **immutable, flyweight** value. `Block.GRASS_BLOCK`, `Block.OAK_STAIRS`, etc. are shared constants; `with*` methods return new variants. Comparisons: `block.compare(Block.STONE)` (ignores nbt/handler by default).
Block is an immutable, flyweight value. Block.GRASS_BLOCK, Block.OAK_STAIRS, etc. are shared constants; with* methods return new variants. Comparisons: block.compare(Block.STONE) (ignores nbt/handler by default).
instance.setBlock(0, 41, 0, Block.GOLD_BLOCK);
Block here = instance.getBlock(0, 41, 0);
if (here.isAir()) { /* ... */ }
setBlock/getBlock accept x,y,z or a Point. The chunk must be loaded; on an unloaded chunk reads return air and writes may be lost.
Stairs facing, slab type, redstone power, etc. are block states:
Block stairs = Block.OAK_STAIRS
.withProperty("facing", "north")
.withProperties(Map.of("half", "top", "waterlogged", "true"));
String facing = stairs.getProperty("facing");
Property names/values mirror vanilla blockstates. Wrong names throw — check the vanilla blockstate for that block.
Attach data (sign text, custom marker) — also immutable:
Block sign = Block.OAK_SIGN.withTag(Tag.String("custom_id"), "quest_giver");
instance.setBlock(x, y, z, sign);
See minestom-...tags concepts: Tag<T> is the typed accessor for NBT on blocks, items, and entities.
A BlockHandler gives a block server-side behavior + the block-entity id the client needs (chests, signs, skulls, spawners). Implement it for interactive/custom blocks:
public class MyChestHandler implements BlockHandler {
@Override public Key getKey() { return Key.key("minecraft:chest"); }
@Override public void onPlace(Placement placement) { /* ... */ }
@Override public boolean onInteract(Interaction interaction) {
interaction.getPlayer().sendMessage("opened");
return true;
}
}
Block chest = Block.CHEST.withHandler(new MyChestHandler());
Register handlers so saved/loaded blocks reattach them: MinecraftServer.getBlockManager().registerHandler(key, supplier). Without a registered handler, block entities load as plain blocks.
Handler interface method names (
getKey/getNamespaceId,Placement/Interactionshapes) shift between releases — verify against https://javadoc.minestom.net for your version.
For large region writes use the batch/generation path instead of per-block setBlock to avoid repeated chunk updates — see minestom-instances-worlds (Generator) and the batch docs.
Sources: https://minestom.net/docs/world/blocks, /docs/feature/tags, /docs/world/batch
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