Agent skill

Minecraft Plugin Dev

by Jahrome907 in Jahrome907/minecraft-agent-skills

Create, modify, and debug server plugins for current Paper 26.x on Java 25 or legacy Bukkit-derived 1.21.x servers on Java 21.

MITAuto-check passed

Install Minecraft Plugin Dev

skills CLI
$ npx skills add Jahrome907/minecraft-agent-skills --skill minecraft-plugin-dev -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Jahrome907/minecraft-agent-skills minecraft-plugin-dev --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Jahrome907/minecraft-agent-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.codex/skills/minecraft-plugin-dev .claude/skills/minecraft-plugin-dev && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
minecraft-plugin-dev
GitHub stars
166
Token cost
~4.3k tokens
SKILL.md length
1,096 words
Files
6 (incl. scripts, references)
Skills in repo
13
Repo updated
First seen
Licence
MIT

At a glance

Create, modify, and debug server plugins for current Paper 26.x on Java 25 or legacy Bukkit-derived 1.21.x servers on Java 21.

  • Works in 4 steps: Build the plugin JAR → Run the bundled validator to catch… → Fix any reported errors and re-run until… → …
  • JavaPlugin APIs
  • SKILL.md covers Platform Overview, Bundled References, Project Setup and Project Layout, plus 10 more sections
  • Runs Shell and JavaScript scripts from its folder; reaches github.com and repo.papermc.io

What it does

Minecraft Plugin Dev is an agent skill from Jahrome907/minecraft-agent-skills. Create, modify, and debug server plugins for current Paper 26.x on Java 25 or legacy Bukkit-derived 1.21.x servers on Java 21. Use for JavaPlugin APIs, events, commands, schedulers, configuration, PDC, and Adventure, not client mods or vanilla datapacks.

Its SKILL.md is about 4.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including scripts and reference files (for example `references/paper-plugin-commands.md`, `references/runtime-patterns.md` and `scripts/validate-plugin-layout.sh`).

It works with Java and Gradle. The repository describes itself as: Minecraft AI agent skills and dual-target plugin bundle for Codex and Claude Code. The licence is MIT.

When your agent uses it

  • JavaPlugin APIs
  • Not client mods
  • Vanilla datapacks

Example prompts

  • “/minecraft-plugin-dev”

Requirements

  • Node.js
  • A Bash shell

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Build the plugin JAR
  2. Run the bundled validator to catch config and layout errors
  3. Fix any reported errors and re-run until clean.
  4. Deploy: copy the built JAR to server/plugins/ and restart the Paper server.

What it can do on your machine

Read from SKILL.md and the folder at commit dd57c5a. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 3 files in scripts/ (Shell and JavaScript), which the agent can run.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • github.com
    • repo.papermc.io

    Also links to:

    • docs.advntr.dev
    • docs.papermc.io
    • jd.papermc.io
    • docs.gradle.org
    • javadoc.io

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Minecraft Plugin Dev loads about 4.3k tokens when it runs, and up to ~6.9k if it reads all its reference files. Until then it costs about 69 tokens; SKILL.md has 1,096 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~69
When it runs · the whole SKILL.md, loaded when a task matches
~4.3k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~6.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from Jahrome907/minecraft-agent-skills at commit dd57c5a, republished under its MIT licence (© Jahrome907). 1,096 words, ~4,268 tokens.

Download SKILL.mdSave it as .claude/skills/minecraft-plugin-dev/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.
name
minecraft-plugin-dev
description
Create, modify, and debug server plugins for current Paper 26.x on Java 25 or legacy Bukkit-derived 1.21.x servers on Java 21. Use for JavaPlugin APIs, events, commands, schedulers, configuration, PDC, and Adventure, not client mods or vanilla datapacks.

Minecraft Plugin Development Skill

Platform Overview

PlatformBase APINotes
PaperBukkit/Spigot + Paper extensionsRecommended; async chunk loading, Adventure native
SpigotBukkit + Spigot extensionsLegacy; fewer APIs, slower
BukkitBase API onlyAvoid for new plugins
FoliaPaper forkRegion-threaded; requires special scheduler APIs

Paper is the recommended target. Paper includes all Bukkit and Spigot APIs plus significant performance improvements and additional APIs.

Routing Boundaries
  • Use when: the target is server-side Paper/Bukkit/Spigot plugin behavior with JavaPlugin APIs.
  • Do not use when: the task requires client-side installable mods or loader APIs (minecraft-modding / minecraft-multiloader).
  • Do not use when: the task is pure vanilla datapack/command content (minecraft-datapack / minecraft-commands-scripting).

Bundled References

  • Read references/runtime-patterns.md when the task touches scheduling, Folia support, PDC, Adventure/MiniMessage, YAML config, Vault, or Paper-specific APIs.
  • Read references/paper-plugin-commands.md for a Paper-only paper-plugin.yml project or Brigadier command registration.

Project Setup

The examples below target current Paper 26.2 and Java 25. For an existing 1.21.x plugin, preserve its 1.21.x-R0.1-SNAPSHOT dependency, Java 21 toolchain, and matching api-version until the project is intentionally ported.

settings.gradle.kts
kotlin
rootProject.name = "my-plugin"
build.gradle.kts
kotlin
plugins {
    java
}

group = "com.example"
version = "1.0.0-SNAPSHOT"

repositories {
    mavenCentral()
    maven("https://repo.papermc.io/repository/maven-public/")
}

dependencies {
    compileOnly("io.papermc.paper:paper-api:26.2.build.+")
}

java {
    toolchain.languageVersion.set(JavaLanguageVersion.of(25))
}

tasks {
    processResources {
        // Substitutes ${version} in plugin.yml with the Gradle project version
        filesMatching(listOf("plugin.yml", "paper-plugin.yml")) {
            expand("version" to project.version)
        }
    }
}

Add Shadow only when the plugin has runtime libraries that must be bundled and relocated. Paper and optional plugin APIs such as Vault remain compileOnly and must not be shaded into the plugin JAR.

gradle/wrapper/gradle-wrapper.properties
properties
distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip

Gradle 8.8 cannot run on Java 25. Use Gradle 9.1 or newer for a current Java 25 project. Preserve the existing wrapper and Java 21 toolchain for a legacy 1.21.x project unless its build is intentionally upgraded and verified.


Project Layout

my-plugin/
├── build.gradle.kts
├── settings.gradle.kts
├── gradle/
│   └── wrapper/
│       └── gradle-wrapper.properties
└── src/main/
    ├── java/com/example/myplugin/
    │   ├── MyPlugin.java          ← main class (extends JavaPlugin)
    │   ├── listeners/
    │   │   └── PlayerListener.java
    │   ├── commands/
    │   │   └── MyCommand.java
    │   └── managers/
    │       └── DataManager.java
    └── resources/
        ├── plugin.yml            ← Bukkit-compatible descriptor
        ├── paper-plugin.yml      ← active descriptor for a Paper plugin
        └── config.yml

Core Files

plugin.yml (Bukkit-compatible default)
yaml
name: MyPlugin
version: "${version}"
main: com.example.myplugin.MyPlugin
description: An example Paper plugin
author: YourName
website: https://github.com/example/my-plugin
api-version: '26.2'

commands:
  myplugin:
    description: Main plugin command
    usage: /myplugin <subcommand>
    permission: myplugin.use
    aliases: [mp]

permissions:
  myplugin.use:
    description: Allows use of /myplugin
    default: true
  myplugin.admin:
    description: Admin access
    default: op

Match api-version to the oldest Paper API the plugin intentionally supports. Current Paper examples use 26.2; legacy 1.21 and positive 1.21.<patch> values remain valid for older servers. A server older than the declared value refuses to load the plugin.

paper-plugin.yml (experimental Paper-only format)

Prefer plugin.yml for Bukkit-compatible plugins. Use paper-plugin.yml only when the JAR is intentionally Paper-only and needs Paper-plugin behavior such as bootstrapping, loaders, or classloading isolation. It can be the only descriptor, but is not a drop-in replacement: Paper plugins do not use a commands field or getCommand(...) registration. Read references/paper-plugin-commands.md for the paired descriptor, main class, and Brigadier lifecycle registration.

When one JAR ships both descriptors, keep their shared metadata and main class aligned. Do not combine the Paper-only sample with the Bukkit-compatible MyPlugin sample below.

Bukkit-compatible main class
java
package com.example.myplugin;

import com.example.myplugin.commands.MyCommand;
import com.example.myplugin.listeners.PlayerListener;
import org.bukkit.plugin.java.JavaPlugin;

public final class MyPlugin extends JavaPlugin {

    @Override
    public void onEnable() {
        saveDefaultConfig();

        // Register listeners
        getServer().getPluginManager().registerEvents(new PlayerListener(), this);

        // Register commands
        var cmd = getCommand("myplugin");
        if (cmd == null) {
            throw new IllegalStateException("myplugin command is missing from plugin.yml");
        }
        var handler = new MyCommand(this);
        cmd.setExecutor(handler);
        cmd.setTabCompleter(handler);

        getLogger().info("MyPlugin enabled!");
    }

    @Override
    public void onDisable() {
        getLogger().info("MyPlugin disabled.");
    }

}

Event Listeners

java
package com.example.myplugin.listeners;

import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;

public class PlayerListener implements Listener {

    @EventHandler(priority = EventPriority.NORMAL)
    public void onPlayerJoin(PlayerJoinEvent event) {
        event.joinMessage(
            Component.text(event.getPlayer().getName() + " joined!", NamedTextColor.GREEN)
        );
    }

    @EventHandler
    public void onPlayerQuit(PlayerQuitEvent event) {
        event.quitMessage(
            Component.text(event.getPlayer().getName() + " left.", NamedTextColor.YELLOW)
        );
    }

    @EventHandler
    public void onPlayerDeath(PlayerDeathEvent event) {
        // Modify death message using Adventure components
        event.deathMessage(
            Component.text("☠ ", NamedTextColor.RED)
                .append(Component.text(event.getPlayer().getName(), NamedTextColor.WHITE))
                .append(Component.text(" died!", NamedTextColor.RED))
        );
    }
}
EventPriority order

LOWEST → LOW → NORMAL → HIGH → HIGHEST → MONITOR
Use MONITOR for logging only (never modify outcome). On events that implement Cancellable, use ignoreCancelled = true unless you need cancelled events.

Cancellable events
java
@EventHandler
public void onBlockBreak(BlockBreakEvent event) {
    if (event.getPlayer().hasPermission("myplugin.break.deny")) {
        event.setCancelled(true);
        event.getPlayer().sendMessage(Component.text("You cannot break blocks!", NamedTextColor.RED));
    }
}

Commands

This section is for the plugin.yml path above. Its declared command enables getCommand("myplugin"). For a Paper-only descriptor, use the Brigadier lifecycle example in references/paper-plugin-commands.md.

java
package com.example.myplugin.commands;

import com.example.myplugin.MyPlugin;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.List;
import java.util.Locale;

public class MyCommand implements CommandExecutor, TabCompleter {

    private final MyPlugin plugin;

    public MyCommand(MyPlugin plugin) {
        this.plugin = plugin;
    }

    @Override
    public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command,
                             @NotNull String label, @NotNull String[] args) {
        if (!(sender instanceof Player player)) {
            sender.sendMessage(Component.text("Only players can use this command.", NamedTextColor.RED));
            return true;
        }

        if (!player.hasPermission("myplugin.use")) {
            player.sendMessage(Component.text("No permission.", NamedTextColor.RED));
            return true;
        }

        if (args.length == 0) {
            player.sendMessage(Component.text("Usage: /myplugin <reload|info>", NamedTextColor.YELLOW));
            return true;
        }

        return switch (args[0].toLowerCase(Locale.ROOT)) {
            case "reload" -> {
                plugin.reloadConfig();
                player.sendMessage(Component.text("Config reloaded.", NamedTextColor.GREEN));
                yield true;
            }
            case "info" -> {
                player.sendMessage(Component.text("Version: " + plugin.getDescription().getVersion(), NamedTextColor.AQUA));
                yield true;
            }
            default -> {
                player.sendMessage(Component.text("Unknown subcommand.", NamedTextColor.RED));
                yield true;
            }
        };
    }

    @Override
    public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command,
                                                @NotNull String label, @NotNull String[] args) {
        if (args.length == 1) {
            return List.of("reload", "info").stream()
                .filter(s -> s.startsWith(args[0].toLowerCase(Locale.ROOT)))
                .toList();
        }
        return List.of();
    }
}

Schedulers

For classic Paper plugins, BukkitScheduler is still fine. If you claim Folia support, route player, entity, region, global, and async work through the matching Folia-aware scheduler. Keep scheduling behind a small project-local interface when one plugin must support both Paper and Folia.

See references/runtime-patterns.md for copy-ready sync, async, cancelable, and Folia-safe scheduler examples.


Persistent Data Container (PDC)

PDC stores arbitrary data on any PersistentDataHolder (players, entities, items, chunks). Data is saved with the world and persists across restarts.

Create NamespacedKey instances once, keep data types stable after release, and use PDC for small metadata rather than large datasets. Prefer config files or a database for large or query-heavy plugin state.

See references/runtime-patterns.md for player, item, chunk, and world PDC examples.


Adventure Text Components

Paper uses Adventure natively for all text. No legacy chat colors. Use Component builders for code-owned messages and MiniMessage for config-driven messages. Avoid legacy ChatColor unless the target project already depends on it for compatibility.

See references/runtime-patterns.md for simple messages, hover/click events, MiniMessage parsing, titles, and action bars.


Configuration (YAML)

src/main/resources/config.yml
yaml
# Default config
settings:
  max-players: 20
  welcome-message: "<green>Welcome to the server!"
  cooldown-seconds: 30

database:
  host: localhost
  port: 3306
  name: myplugin_db
Accessing config values

Call saveDefaultConfig() in onEnable(), provide explicit defaults when reading values, and validate config shape before starting long-running tasks.

Custom config file

Use custom YAML files only when separating user config from mutable plugin data is worth the extra file handling. Keep blocking disk writes off hot event paths.

See references/runtime-patterns.md for config read/write and custom YAML examples.


Show full SKILL.md (439 more words)Show less

Vault Integration (Economy / Permissions)

Declare Vault as compileOnly, soft-depend on it in plugin metadata, and disable economy features cleanly when the service provider is unavailable. Never assume a Vault-compatible economy plugin is installed just because Vault itself is present.

When Vault support is required, add the JitPack repository and compileOnly("com.github.MilkBowl:VaultAPI:1.7") to the Gradle build.

See references/runtime-patterns.md for a minimal economy setup and charge example.


Paper-Specific APIs

Use Paper APIs when they remove main-thread blocking or simplify Adventure-native behavior. Keep optional plugin integrations behind presence checks and metadata soft-dependencies.

See references/runtime-patterns.md for async chunk loading, custom item meta, profile lookup, and protection-plugin integration examples.


Common Tasks Checklist

Creating a new event listener
  • Create class implementing Listener
  • Annotate methods with @EventHandler
  • Call getServer().getPluginManager().registerEvents(listener, plugin) in onEnable()
  • On cancellable events, add ignoreCancelled = true unless you need cancelled events
Adding a new command
  • For a Bukkit-compatible plugin, define the command in plugin.yml, create a CommandExecutor, and register it with getCommand("name")
  • For a Paper-only plugin, register the command through LifecycleEvents.COMMANDS; do not add a commands field
Saving plugin data
  • For simple values: use config.yml via getConfig() / saveConfig()
  • For per-entity data: use PDC with a NamespacedKey
  • For large datasets: use async scheduler + file I/O or a database
Scheduling a repeating task
  • Determine if task needs main thread (use runTaskTimer) or is I/O (use runTaskTimerAsynchronously)
  • Store the BukkitTask reference so you can cancel in onDisable()
  • Cancel all tasks in onDisable() or use getServer().getScheduler().cancelTasks(plugin)

Build, Validate, and Run

  1. Build the plugin JAR:
    bash
    ./gradlew build
    # Output: build/libs/my-plugin-1.0.0-SNAPSHOT.jar
  2. Run the bundled validator to catch config and layout errors:
    bash
    ./scripts/validate-plugin-layout.sh --root /path/to/plugin-project
    # Strict mode treats warnings as failures:
    ./scripts/validate-plugin-layout.sh --root /path/to/plugin-project --strict
    The validator requires Node and includes its own YAML parser for descriptor checks.
  3. Fix any reported errors and re-run until clean.
  4. Deploy: copy the built JAR to server/plugins/ and restart the Paper server. If the real project already applies a Paper dev-server plugin such as xyz.jpenilla.run-paper, use that project's documented dev task instead of assuming ./gradlew runServer exists.

The validator checks:

  • active plugin.yml or paper-plugin.yml required keys (name, version, main, api-version) and repo-supported current 26.<release> or legacy 1.21 / positive 1.21.<patch> values, with warnings for versions newer than the documented examples
  • cross-descriptor metadata consistency when both descriptors are present; paper-plugin.yml is selected as active
  • Active main class path exists and extends JavaPlugin
  • actual server /reload anti-patterns such as Bukkit.reload() or dispatching the server reload command

References

© Jahrome907, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 5 other files (scripts, references) in .codex/skills/minecraft-plugin-dev of Jahrome907/minecraft-agent-skills.

  • SKILL.md
  • references/paper-plugin-commands.md
  • references/runtime-patterns.md
  • scripts/validate-plugin-layout.sh
  • scripts/vendor/LICENSE.js-yaml
  • scripts/vendor/js-yaml.min.cjs

Open the folder on GitHubat commit dd57c5a

Compare with similar skills

Minecraft Plugin Dev next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Minecraft Plugin Dev compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Minecraft Plugin Dev this skillJahrome907/minecraft-agent-skills166—~4.3kAutomated safety check: PassMIT
Android API Diffgkd-kit/gkd43k—~796Automated safety check: PassGPL-3.0
Caffeine Cache Optimization Experimentsben-manes/caffeine18k—~2.6kAutomated safety check: NotesApache-2.0
Groovy 5 Developer Guideapache/grails-core2.9k—~3kAutomated safety check: PassApache-2.0
Jspecify Skillsivaprasadreddy/sivalabs-agent-skills188—~1.2kAutomated safety check: PassMIT
Releasesol4k/sol4k135—~949Automated safety check: PassApache-2.0

Similar skills

  • Android API Diff

    gkd-kit/gkd

    Looks up Android framework Java and AIDL APIs across versions with the android-api-diff CLI: signatures, availability, source files and hidden-API access code.

    43k GitHub stars~796 tokensUpdated yesterday
    MobileAuto-check passed
  • Runs controlled JMH experiments on the Caffeine cache to find shared contention and hot-path waste, then reviews correctness and returns a reviewable patch.

    18k GitHub stars~2.6k tokensUpdated 2 days ago
    DevelopmentAuto-check: notes
  • Groovy 5 Developer Guide

    apache/grails-core

    Guidance for Groovy 5 work in Grails projects: syntax, closures, traits, DSLs, metaprogramming, Spock tests, static compilation and Java 21 integration.

    2.9k GitHub stars~3k tokensUpdated today
    DevelopmentAuto-check passed
  • Jspecify Skill

    sivaprasadreddy/sivalabs-agent-skills

    A skill your agent uses when asked to perform any of the following actions in a Java project: - To add jspecify support - To prevent NullPointerExceptions - To better handle Nullability This skill…

    188 GitHub stars~1.2k tokensUpdated 3 days ago
    Backend & APIsAuto-check passed
  • Release

    sol4k/sol4k

    Bump the sol4k library version everywhere, open a release PR, and draft GitHub release notes.

    135 GitHub stars~949 tokensUpdated 10 days ago
    DevelopmentAuto-check passed
  • Android Audio E2E

    hyochan/react-native-nitro-sound

    Build and run device-backed Android end-to-end checks for react-native-nitro-sound permissions, recording, playback, listeners, pause/resume, seek, speed, audio focus, lifecycle behavior, and rapid…

    961 GitHub stars~814 tokensUpdated 8 days ago
    MobileAuto-check passed

More from Jahrome907/minecraft-agent-skills

All 13 skills in this repo
  • Minecraft CI Release

    Jahrome907/minecraft-agent-skills

    Set up and review CI, artifact publishing, versioning, and release management for Minecraft 26.x or legacy 1.21.x mods and Paper plugins.

    166 GitHub stars~3.6k tokensUpdated 25 days ago
    Auto-check passed
  • Minecraft Commands Scripting

    Jahrome907/minecraft-agent-skills

    Write and debug Minecraft Java 26.x and 1.21.x commands, selectors, execute chains, scoreboards, NBT, and RCON scripts.

    166 GitHub stars~1.3k tokensUpdated 25 days ago
    Auto-check passed
  • Minecraft Datapack

    Jahrome907/minecraft-agent-skills

    Create, edit, and debug vanilla Minecraft 26.x and 1.21.x datapacks, including functions, advancements, recipes, loot tables, predicates, tags, and pack metadata.

    166 GitHub stars~2.7k tokensUpdated 25 days ago
    Auto-check passed
  • Minecraft Modding

    Jahrome907/minecraft-agent-skills

    Create, modify, debug, or migrate Minecraft mods for current NeoForge or Fabric 26.x, legacy 1.21.x, and Forge 1.20.1.

    166 GitHub stars~4.3k tokensUpdated 25 days ago
    Auto-check passed
  • Minecraft Resource Pack

    Jahrome907/minecraft-agent-skills

    Create and debug Minecraft 26.x and 1.21.x resource packs, including pack metadata, textures, models, blockstates, item definitions, sounds, fonts, animations, and shaders.

    166 GitHub stars~3.2k tokensUpdated 25 days ago
    Auto-check passed
  • Minecraft Testing

    Jahrome907/minecraft-agent-skills

    Design and implement automated tests for current Minecraft 26.x or legacy 1.21.x mods and plugins using JUnit, MockBukkit, NeoForge Game Tests, or Fabric Game Tests.

    166 GitHub stars~3.8k tokensUpdated 25 days ago
    Auto-check passed

Works with

Questions about Minecraft Plugin Dev

What does Minecraft Plugin Dev do?

Create, modify, and debug server plugins for current Paper 26.x on Java 25 or legacy Bukkit-derived 1.21.x servers on Java 21. Minecraft Plugin Dev is an agent skill from Jahrome907/minecraft-agent-skills.x servers on Java 21.

When should I use Minecraft Plugin Dev?

Minecraft Plugin Dev fits situations like: javaPlugin APIs; not client mods; vanilla datapacks.

How do I install Minecraft Plugin Dev in Claude Code?

Run `npx skills add Jahrome907/minecraft-agent-skills --skill minecraft-plugin-dev -a claude-code`. Or copy the skill folder (.codex/skills/minecraft-plugin-dev in Jahrome907/minecraft-agent-skills) into .claude/skills/minecraft-plugin-dev in your project. Claude Code loads it when a task matches its description.

How do I install Minecraft Plugin Dev in Codex?

Run `npx skills add Jahrome907/minecraft-agent-skills --skill minecraft-plugin-dev -a codex`. Or copy the skill folder (.codex/skills/minecraft-plugin-dev in Jahrome907/minecraft-agent-skills) into .agents/skills/minecraft-plugin-dev in your project. Codex loads it when a task matches its description.

Can I use Minecraft Plugin Dev in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Jahrome907/minecraft-agent-skills --skill minecraft-plugin-dev -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/minecraft-plugin-dev, .gemini/skills/minecraft-plugin-dev, .github/skills/minecraft-plugin-dev and .opencode/skills/minecraft-plugin-dev in your project.

What does Minecraft Plugin Dev need to run?

Going by SKILL.md and its folder, Minecraft Plugin Dev needs a shell and JavaScript for the scripts in its folder. Our summary lists: Node.js; A Bash shell.

Does Minecraft Plugin Dev access the network?

SKILL.md names 7 domains. In commands or code: github.com and repo.papermc.io; the agent is likely to contact these when it follows the instructions. As links in the text: docs.advntr.dev, docs.papermc.io, jd.papermc.io, docs.gradle.org and javadoc.io. This is read from the text; nothing was executed.

Is Minecraft Plugin Dev safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Minecraft Plugin Dev use?

Minecraft Plugin Dev is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Minecraft Plugin Dev use?

About 4.3k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.6k tokens, read only when the agent opens those files.

What are the alternatives to Minecraft Plugin Dev?

Skills that share tags, products or a category with Minecraft Plugin Dev: Android API Diff (gkd-kit/gkd, 43k stars), Caffeine Cache Optimization Experiments (ben-manes/caffeine, 18k stars), Groovy 5 Developer Guide (apache/grails-core, 2.9k stars) and Jspecify Skill (sivaprasadreddy/sivalabs-agent-skills, 188 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Minecraft Plugin Dev?

Jahrome907 (a GitHub user) maintains it in Jahrome907/minecraft-agent-skills, which has 166 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on September 13, 2026.

Source: Jahrome907/minecraft-agent-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.