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.
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.
$ npx skills add Jahrome907/minecraft-agent-skills --skill minecraft-plugin-dev -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Jahrome907/minecraft-agent-skills minecraft-plugin-dev --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "minecraft-plugin-dev" agent skill from https://github.com/Jahrome907/minecraft-agent-skills/tree/main/.codex/skills/minecraft-plugin-dev into .claude/skills/minecraft-plugin-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "minecraft-plugin-dev", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Jahrome907/minecraft-agent-skills/tree/main/.codex/skills/minecraft-plugin-devType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Jahrome907/minecraft-agent-skills --skill minecraft-plugin-dev -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Jahrome907/minecraft-agent-skills minecraft-plugin-dev --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Jahrome907/minecraft-agent-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.codex/skills/minecraft-plugin-dev .agents/skills/minecraft-plugin-dev && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "minecraft-plugin-dev" agent skill from https://github.com/Jahrome907/minecraft-agent-skills/tree/main/.codex/skills/minecraft-plugin-dev into .agents/skills/minecraft-plugin-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "minecraft-plugin-dev", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Jahrome907/minecraft-agent-skills --skill minecraft-plugin-dev -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Jahrome907/minecraft-agent-skills minecraft-plugin-dev --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Jahrome907/minecraft-agent-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.codex/skills/minecraft-plugin-dev .cursor/skills/minecraft-plugin-dev && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "minecraft-plugin-dev" agent skill from https://github.com/Jahrome907/minecraft-agent-skills/tree/main/.codex/skills/minecraft-plugin-dev into .cursor/skills/minecraft-plugin-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "minecraft-plugin-dev", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Jahrome907/minecraft-agent-skills.git --path .codex/skills/minecraft-plugin-dev--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Jahrome907/minecraft-agent-skills --skill minecraft-plugin-dev -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Jahrome907/minecraft-agent-skills minecraft-plugin-dev --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Jahrome907/minecraft-agent-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.codex/skills/minecraft-plugin-dev .gemini/skills/minecraft-plugin-dev && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "minecraft-plugin-dev" agent skill from https://github.com/Jahrome907/minecraft-agent-skills/tree/main/.codex/skills/minecraft-plugin-dev into .gemini/skills/minecraft-plugin-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "minecraft-plugin-dev", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Jahrome907/minecraft-agent-skills minecraft-plugin-devInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Jahrome907/minecraft-agent-skills --skill minecraft-plugin-dev -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Jahrome907/minecraft-agent-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/.codex/skills/minecraft-plugin-dev .github/skills/minecraft-plugin-dev && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "minecraft-plugin-dev" agent skill from https://github.com/Jahrome907/minecraft-agent-skills/tree/main/.codex/skills/minecraft-plugin-dev into .github/skills/minecraft-plugin-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "minecraft-plugin-dev", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Jahrome907/minecraft-agent-skills --skill minecraft-plugin-dev -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Jahrome907/minecraft-agent-skills minecraft-plugin-dev --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Jahrome907/minecraft-agent-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.codex/skills/minecraft-plugin-dev .opencode/skills/minecraft-plugin-dev && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "minecraft-plugin-dev" agent skill from https://github.com/Jahrome907/minecraft-agent-skills/tree/main/.codex/skills/minecraft-plugin-dev into .opencode/skills/minecraft-plugin-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "minecraft-plugin-dev", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
minecraft-plugin-devCreate, 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. 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.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit dd57c5a. It shows what the files ask for, not the result of running them.
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.
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.
Hosts in commands or code, which the agent is likely to contact:
github.comrepo.papermc.ioAlso links to:
docs.advntr.devdocs.papermc.iojd.papermc.iodocs.gradle.orgjavadoc.ioFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
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.
The full file from Jahrome907/minecraft-agent-skills at commit dd57c5a, republished under its MIT licence (© Jahrome907). 1,096 words, ~4,268 tokens.
.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.| Platform | Base API | Notes |
|---|---|---|
| Paper | Bukkit/Spigot + Paper extensions | Recommended; async chunk loading, Adventure native |
| Spigot | Bukkit + Spigot extensions | Legacy; fewer APIs, slower |
| Bukkit | Base API only | Avoid for new plugins |
| Folia | Paper fork | Region-threaded; requires special scheduler APIs |
Paper is the recommended target. Paper includes all Bukkit and Spigot APIs plus significant performance improvements and additional APIs.
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).references/runtime-patterns.md when the task touches scheduling, Folia support, PDC, Adventure/MiniMessage, YAML config, Vault, or Paper-specific APIs.references/paper-plugin-commands.md for a Paper-only paper-plugin.yml project or Brigadier command registration.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.ktsrootProject.name = "my-plugin"build.gradle.ktsplugins {
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.propertiesdistributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zipGradle 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.
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.ymlplugin.yml (Bukkit-compatible default)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: opMatch
api-versionto the oldest Paper API the plugin intentionally supports. Current Paper examples use26.2; legacy1.21and positive1.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.
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.");
}
}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))
);
}
}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.
@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));
}
}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.
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();
}
}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.
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.
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.
src/main/resources/config.yml# Default config
settings:
max-players: 20
welcome-message: "<green>Welcome to the server!"
cooldown-seconds: 30
database:
host: localhost
port: 3306
name: myplugin_dbCall saveDefaultConfig() in onEnable(), provide explicit defaults when reading
values, and validate config shape before starting long-running tasks.
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.
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.
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.
Listener@EventHandlergetServer().getPluginManager().registerEvents(listener, plugin) in onEnable()ignoreCancelled = true unless you need cancelled eventsplugin.yml, create a CommandExecutor, and register it with getCommand("name")LifecycleEvents.COMMANDS; do not add a commands fieldconfig.yml via getConfig() / saveConfig()NamespacedKeyrunTaskTimer) or is I/O (use runTaskTimerAsynchronously)BukkitTask reference so you can cancel in onDisable()onDisable() or use getServer().getScheduler().cancelTasks(plugin)./gradlew build
# Output: build/libs/my-plugin-1.0.0-SNAPSHOT.jar./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 --strictserver/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:
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 examplespaper-plugin.yml is selected as activeJavaPlugin/reload anti-patterns such as Bukkit.reload() or dispatching the server reload command© Jahrome907, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files (scripts, references) in .codex/skills/minecraft-plugin-dev of Jahrome907/minecraft-agent-skills.
Open the folder on GitHubat commit dd57c5a
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Minecraft Plugin Dev this skillJahrome907/minecraft-agent-skills | 166 | — | ~4.3k | Automated safety check: Pass | MIT | |
| Android API Diffgkd-kit/gkd | 43k | — | ~796 | Automated safety check: Pass | GPL-3.0 | |
| Caffeine Cache Optimization Experimentsben-manes/caffeine | 18k | — | ~2.6k | Automated safety check: Notes | Apache-2.0 | |
| Groovy 5 Developer Guideapache/grails-core | 2.9k | — | ~3k | Automated safety check: Pass | Apache-2.0 | |
| Jspecify Skillsivaprasadreddy/sivalabs-agent-skills | 188 | — | ~1.2k | Automated safety check: Pass | MIT | |
| Releasesol4k/sol4k | 135 | — | ~949 | Automated safety check: Pass | Apache-2.0 |
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.
ben-manes/caffeine
Runs controlled JMH experiments on the Caffeine cache to find shared contention and hot-path waste, then reviews correctness and returns a reviewable patch.
apache/grails-core
Guidance for Groovy 5 work in Grails projects: syntax, closures, traits, DSLs, metaprogramming, Spock tests, static compilation and Java 21 integration.
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…
sol4k/sol4k
Bump the sol4k library version everywhere, open a release PR, and draft GitHub release notes.
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…
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.
Jahrome907/minecraft-agent-skills
Write and debug Minecraft Java 26.x and 1.21.x commands, selectors, execute chains, scoreboards, NBT, and RCON scripts.
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.
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.
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.
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.
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.
Minecraft Plugin Dev fits situations like: javaPlugin APIs; not client mods; vanilla datapacks.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.