minecraft-plugin-development
A development framework for Minecraft plugins, covering command registration, event listeners, player state management, and configuration.
Install
mkdir -p .claude/skills/minecraft-plugin-development && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/15024" && unzip -o skill.zip -d .claude/skills/minecraft-plugin-development && rm skill.zipInstalls to .claude/skills/minecraft-plugin-development
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Use this skill when building or modifying Minecraft server plugins for Paper, Spigot, or Bukkit, including plugin.yml setup, commands, listeners, schedulers, player state, team or arena systems, persistent progression, economy or profile data, configuration files, Adventure text, and version-safe API usage. Trigger for requests like "build a Minecraft plugin", "add a Paper command", "fix a Bukkit listener", "create plugin.yml", "implement a minigame mechanic", "add a perk or quest system", or "debug server plugin behavior".Key capabilities
- →Develop plugins for Paper, Spigot, and Bukkit servers
- →Configure `plugin.yml` for Minecraft plugins
- →Implement commands, listeners, and schedulers
- →Manage player state and persistent progression data
- →Design minigame mechanics and arena systems
- →Handle configuration files and Adventure text
How it works
This skill provides implementation patterns and architectural guidance for developing Minecraft server plugins within the Paper, Spigot, and Bukkit ecosystem. It covers various aspects from `plugin.yml` setup to complex gameplay mechanics and persistent data management.
Inputs & outputs
When to use minecraft-plugin-development
- →Create a new Minecraft plugin
- →Add a custom command to a server
- →Implement a minigame mechanic
- →Debug server plugin behavior
About this skill
Minecraft Plugin Development
Use this skill for Minecraft server plugin work in the Paper, Spigot, and Bukkit ecosystem.
This skill is especially useful for gameplay-heavy plugins such as combat systems, wave or boss encounters, war or team modes, arenas, kit systems, cooldown-based abilities, scoreboards, and config-driven game rules.
For grounded implementation patterns drawn from real Paper plugins, load these references as needed:
references/project-patterns.mdfor high-level architecture patterns seen in real gameplay pluginsreferences/bootstrap-registration.mdforonEnable, command wiring, listener registration, and shutdown expectationsreferences/state-sessions-and-phases.mdfor player session modeling, game phases, match state, and reconnect-safe logicreferences/config-data-and-async.mdfor config managers, database-backed player data, async flushes, and UI refresh tasksreferences/maps-heroes-and-feature-modules.mdfor map rotation, hero or class systems, and modular feature growthreferences/minigame-instance-flow.mdfor arena instances, countdowns, loot refreshes, wave systems, visibility isolation, and entity-to-game ownershipreferences/persistent-progression-and-events.mdfor long-running PvP servers with profiles, perks, buffs, quests, economy, custom domain events, and extension registriesreferences/build-test-and-runtime-validation.mdfor Maven or Gradle packaging, shaded dependencies, generated resources, soft dependencies, config validation commands, and first-round server test plans
Scope
- In scope: Paper, Spigot, Bukkit plugin development
- In scope:
plugin.yml, commands, tab completion, listeners, schedulers, configs, permissions, Adventure text, player state, minigame flow, arena instances, map copies, loot, waves, persistent profiles, perks, buffs, quests, economy, and PvP/PvE game loops - In scope: Java-based server plugin architecture, debugging, refactoring, and feature implementation
- Out of scope by default: Fabric mods, Forge mods, client mods, Bedrock add-ons
If the user says "Minecraft plugin" but the stack is unclear, first determine whether the project is Paper/Spigot/Bukkit or a modding stack.
Default Working Style
When this skill triggers:
- Identify the server API and version target.
- Identify the build system and Java version.
- Inspect
plugin.yml, the main plugin class, and command or listener registration. - Map the gameplay flow before editing code:
- player lifecycle
- game phases
- timers and scheduled tasks
- team, arena, or match state
- config and persistence
- Make the smallest coherent change that keeps registration, config, and runtime behavior aligned.
If the plugin is gameplay-heavy or stateful, read references/project-patterns.md and references/state-sessions-and-phases.md before editing.
If the task touches arena isolation, map instances, chest or resource refills, wave spawning, route voting, spectator visibility, or game-specific chat, also read references/minigame-instance-flow.md.
If the task touches persistent player progression, profile saves, economy rewards, perks, buffs, quests, custom combat events, or long-running shared PvP servers, also read references/persistent-progression-and-events.md.
If the task touches build files, plugin.yml metadata, shaded dependencies, generated resource output, deployment to a test server, optional plugin integrations, or release validation, also read references/build-test-and-runtime-validation.md.
Project Discovery Checklist
Check these first when present:
plugin.ymlpom.xml,build.gradle, orbuild.gradle.kts- the plugin main class extending
JavaPlugin - command executors and tab completers
- listener classes
- config bootstrap code for
config.yml, messages, kits, arenas, or custom YAML files - generated resource output such as
target/classes,build/resources, or copied plugin jars - scheduler usage through Bukkit scheduler APIs
- any player data, team state, arena state, or match state containers
Core Rules
Prefer the concrete server API in the repo
- If the project already targets Paper APIs, keep using Paper-first APIs instead of downgrading to generic Bukkit unless compatibility is explicitly required.
- Do not assume an API exists across all versions. Check the existing dependency and surrounding code style first.
Keep registration in sync
When adding commands, permissions, or listeners, update the relevant registration points in the same change:
plugin.yml- plugin startup registration in
onEnable - any permission checks in code
- any related config or message keys
Respect main-thread boundaries
- Do not touch world state, entities, inventories, scoreboards, or most Bukkit API objects from async tasks unless the API explicitly permits it.
- Use async tasks for external I/O, heavy computation, or database work, then switch back to the main thread before applying gameplay changes.
Model gameplay as state, not scattered booleans
For gameplay plugins, prefer explicit state objects over duplicated flags:
- match or game phase
- player role or class
- cooldown state
- team membership
- arena assignment
- alive, eliminated, spectating, or queued state
When the feature affects match-heavy minigames or persistent-brawl gameplay, look for hidden state transitions first before patching symptoms.
For multi-arena plugins, isolate per-game visibility, chat recipients, scoreboards, loot, and entity ownership. Do not let one arena observe or mutate another arena by accident.
Favor config-driven values
When the feature includes damage, cooldowns, rewards, durations, messages, map settings, or toggles:
- prefer config-backed values over hardcoding
- provide sensible defaults
- keep key names stable and readable
- validate or sanitize missing values
Be careful with reload behavior
- Avoid promising safe hot reload unless the code already supports it well.
- On config reload, ensure in-memory caches, scheduled tasks, and gameplay state are handled consistently.
Implementation Patterns
Commands
For new commands:
- add the command to
plugin.yml - implement executor and tab completion when needed
- validate sender type before casting to
Player - separate parsing, permission checks, and gameplay logic
- send clear player-facing feedback for invalid usage
Minimal registration shape:
commands:
arena:
description: Join or leave an arena
usage: /arena <join|leave>
@Override
public void onEnable() {
ArenaCommand command = new ArenaCommand(gameService);
PluginCommand arena = getCommand("arena");
if (arena != null) {
arena.setExecutor(command);
arena.setTabCompleter(command);
}
}
Listeners
For event listeners:
- guard early and return early
- check whether the current player, arena, or game phase should handle the event
- avoid doing expensive work in hot events such as move, damage, or interact spam
- centralize repeated checks where practical
Scheduled Tasks
For timers, rounds, countdowns, cooldowns, or periodic checks:
- store task handles when cancellation matters
- cancel tasks on plugin disable and when a match or arena ends
- avoid multiple overlapping tasks for the same gameplay concern unless explicitly intended
- prefer one authoritative game loop over many loosely coordinated repeating tasks
- ensure countdown or refill tasks self-cancel when the game leaves the expected state
Main-thread handoff shape:
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
PlayerData data = repository.load(playerId);
Bukkit.getScheduler().runTask(plugin, () -> {
Player player = Bukkit.getPlayer(playerId);
if (player != null && player.isOnline()) {
scoreboard.update(player, data);
}
});
});
Player and Match State
For per-player or per-match state:
- define ownership clearly
- clean up on quit, kick, death, match end, and plugin disable
- avoid memory leaks from stale maps keyed by
Player - prefer
UUIDfor persistent tracking unless a live player object is strictly needed
Text and Messages
When the project uses Adventure or MiniMessage:
- follow the existing formatting approach
- avoid mixing legacy color codes and Adventure styles without a reason
- keep message templates configurable when messages are gameplay-facing
High-Risk Areas
Pay extra attention when editing:
- damage handling and custom combat logic
- death, respawn, spectator, and elimination flow
- arena join and leave flow
- scoreboard or boss bar updates
- inventory mutation and kit distribution
- async database or file access
- economy, quest, perk, and profile mutation
- custom event dispatch or extension registries
- version-sensitive API calls
- shutdown and cleanup in
onDisable - cross-arena visibility, chat, and broadcast isolation
- map copy, unload, and folder deletion logic
- mob, NPC, projectile, or temporary entity ownership
- chest or resource refill systems
Output Expectations
When implementing or revising plugin code:
- produce runnable Java code, not pseudo-code, unless the user asks for design only
- mention any required updates to
plugin.yml, config files, build files, or resources - call out version assumptions explicitly
- point out thread
Content truncated.
When not to use it
- →When developing Fabric mods
- →When developing Forge mods
- →When developing client mods or Bedrock add-ons
Limitations
- →Out of scope for Fabric mods
- →Out of scope for Forge mods
- →Out of scope for client mods or Bedrock add-ons
How it compares
This skill offers specific patterns for gameplay-heavy plugins and persistent player data, unlike general Java development or modding for other Minecraft platforms.
Compared to similar skills
minecraft-plugin-development side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| minecraft-plugin-development (this skill) | 0 | 2mo | No flags | Intermediate |
| csharp-developer | 43 | 3mo | No flags | Advanced |
| minecraft-bukkit-pro | 90 | 4mo | No flags | Advanced |
| java-coding-standards | 16 | 4mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by TorchiaHub
View all by TorchiaHub →You might also like
csharp-developer
zenobi-us
Expert C# developer specializing in modern .NET development, ASP.NET Core, and cloud-native applications. Masters C# 12 features, Blazor, and cross-platform development with emphasis on performance and clean architecture.
minecraft-bukkit-pro
sickn33
Master Minecraft server plugin development with Bukkit, Spigot, and Paper APIs. Specializes in event-driven architecture, command systems, world manipulation, player management, and performance optimization. Use PROACTIVELY for plugin architecture, gameplay mechanics, server-side features, or cross-version compatibility.
java-coding-standards
affaan-m
Java coding standards for Spring Boot services: naming, immutability, Optional usage, streams, exceptions, generics, and project layout.
python-pro
sickn33
Master Python 3.12+ with modern features, async programming, performance optimization, and production-ready practices. Expert in the latest Python ecosystem including uv, ruff, pydantic, and FastAPI. Use PROACTIVELY for Python development, optimization, or advanced Python patterns.
csharp-pro
sickn33
Write modern C# code with advanced features like records, pattern matching, and async/await. Optimizes .NET applications, implements enterprise patterns, and ensures comprehensive testing. Use PROACTIVELY for C# refactoring, performance optimization, or complex .NET solutions.
dotnet-architect
sickn33
Expert .NET backend architect specializing in C#, ASP.NET Core, Entity Framework, Dapper, and enterprise application patterns. Masters async/await, dependency injection, caching strategies, and performance optimization. Use PROACTIVELY for .NET API development, code review, or architecture decisions.