Agent skill

Dominion Addon Dev

by LunaDeerMC in LunaDeerMC/Dominion

Develop Dominion addon plugins using the DominionAPI. An agent skill from LunaDeerMC/Dominion.

MITAuto-check passedBackend & APIs

Install Dominion Addon Dev

skills CLI
$ npx skills add LunaDeerMC/Dominion --skill dominion-addon-dev -a claude-code

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

GitHub CLI
$ gh skill install LunaDeerMC/Dominion dominion-addon-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/LunaDeerMC/Dominion.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/dominion-addon-dev .claude/skills/dominion-addon-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
dominion-addon-dev
GitHub stars
134
Token cost
~2.6k tokens
SKILL.md length
432 words
Files
2 (incl. references)
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

Develop Dominion addon plugins using the DominionAPI. An agent skill from LunaDeerMC/Dominion.

  • Works in 5 steps: Query Dominion Data (Read-Only) → Check Flags → Modify Data via Providers → …
  • Creating new Dominion addon plugins
  • SKILL.md covers Key References, Project Setup, Getting the API Instance and Core API Patterns, plus 2 more sections
  • Reaches oss.sonatype.org and repo.papermc.io

What it does

Dominion Addon Dev is an agent skill from LunaDeerMC/Dominion. Develop Dominion addon plugins using the DominionAPI. Use when creating new Dominion addon plugins, writing code that interacts with the Dominion land-claim system, listening to Dominion events, operating on dominion/group/member data via Providers, registering custom flags, or checking privilege/environment flags within dominions. Also use when setting up Gradle/Maven build files for DominionAPI dependency, creating plugin.yml for Dominion addons, or debugging Dominion API integration issues.

Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/dominion-api-reference.md`). Compatibility notes: ["DominionProtect"]

It sits in Backend & APIs, covering Third-party API integration. It works with Gradle. The repository describes itself as: Dominion is a completely open-source, free, future-proof, territory anti-grief plugin developed specifically for high-versions minecraft server. The licence is MIT.

When your agent uses it

  • Creating new Dominion addon plugins
  • Writing code that interacts with the Dominion land-claim system
  • Listening to Dominion events
  • Operating on dominion/group/member data via Providers

Example prompts

  • “/dominion-addon-dev”

Requirements

  • Compatibility (from SKILL.md): ["DominionProtect"]

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Query Dominion Data (Read-Only)
  2. Check Flags
  3. Modify Data via Providers
  4. Listen to Dominion Events
  5. Register Custom Flags (since 4.7.0)

What it can do on your machine

Read from SKILL.md and the folder at commit b80ace4. 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

    No scripts in the folder and no shell commands in SKILL.md (its code samples are java, kotlin, groovy, xml and yaml).

    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:

    • oss.sonatype.org
    • repo.papermc.io
    • jitpack.io

    Also links to:

    • lunadeermc.github.io
    • github.com

    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.

  • Compatibility

    ["DominionProtect"]

    From compatibility in the SKILL.md frontmatter.

Context cost

Dominion Addon Dev loads about 2.6k tokens when it runs, and up to ~7.6k if it reads all its reference files. Until then it costs about 129 tokens; SKILL.md has 432 words of instructions outside code blocks.

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

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); files beside SKILL.md are not scanned.

SKILL.md

The full file from LunaDeerMC/Dominion at commit b80ace4, republished under its MIT licence (© LunaDeerMC). 432 words, ~2,580 tokens.

Download SKILL.mdSave it as .claude/skills/dominion-addon-dev/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
dominion-addon-dev
description
Develop Dominion addon plugins using the DominionAPI. Use when creating new Dominion addon plugins, writing code that interacts with the Dominion land-claim system, listening to Dominion events, operating on dominion/group/member data via Providers, registering custom flags, or checking privilege/environment flags within dominions. Also use when setting up Gradle/Maven build files for DominionAPI dependency, creating plugin.yml for Dominion addons, or debugging Dominion API integration issues.
compatibility
["DominionProtect"]

Dominion Addon Development Skill

You are an expert developer for Dominion addon plugins (Minecraft Paper/Spigot). Dominion is a land-claim protection plugin; addons extend it using the DominionAPI.

Key References

Project Setup

kotlin
repositories {
    mavenLocal()
    mavenCentral()
    maven("https://oss.sonatype.org/content/groups/public")
    maven("https://repo.papermc.io/repository/maven-public/")
    maven("https://jitpack.io")
}

dependencies {
    compileOnly("io.papermc.paper:paper-api:1.20.1-R0.1-SNAPSHOT")
    compileOnly("cn.lunadeer:DominionAPI:4.7.3")
}
Gradle (Groovy)
groovy
dependencies {
    compileOnly 'cn.lunadeer:DominionAPI:4.7.3'
}
Maven
xml
<dependency>
    <groupId>cn.lunadeer</groupId>
    <artifactId>DominionAPI</artifactId>
    <version>4.7.3</version>
    <scope>provided</scope>
</dependency>
plugin.yml Requirements

The addon's plugin.yml MUST include Dominion in the depend list:

yaml
name: YourAddonPlugin
version: '1.0.0'
main: com.example.yourplugin.YourPlugin
api-version: '1.20'
depend:
  - Dominion

Set folia-supported: true if your addon supports Folia.

Getting the API Instance

Always obtain DominionAPI in onEnable() after verifying the Dominion plugin is loaded:

java
import cn.lunadeer.dominion.api.DominionAPI;

public final class YourPlugin extends JavaPlugin {
    private DominionAPI dominionAPI;

    @Override
    public void onEnable() {
        if (Bukkit.getPluginManager().isPluginEnabled("Dominion")) {
            dominionAPI = DominionAPI.getInstance();
            getLogger().info("DominionAPI loaded successfully");
        } else {
            throw new IllegalStateException("Dominion plugin is not enabled.");
        }
        getServer().getPluginManager().registerEvents(this, this);
    }
}

Core API Patterns

1. Query Dominion Data (Read-Only)

Use DominionAPI methods for all read operations — they read from cache and are safe on any thread.

java
// Get dominion at a location
DominionDTO dom = dominionAPI.getDominion(player.getLocation());

// Get dominion by name or ID
DominionDTO dom = dominionAPI.getDominion("myDominion");
DominionDTO dom = dominionAPI.getDominion(42);

// Get player's current dominion
DominionDTO current = dominionAPI.getPlayerCurrentDominion(player);

// Get all dominions owned by a player
List<DominionDTO> owned = dominionAPI.getAllDominionsOfPlayer(player.getUniqueId());

// Get player info
PlayerDTO playerDTO = dominionAPI.getPlayer(player.getUniqueId());

// Get member in a dominion
MemberDTO member = dominionAPI.getMember(dom, player);

// Get group of a member
GroupDTO group = dominionAPI.getGroup(member);
2. Check Flags
java
// Check privilege flag (with player notification on denial)
boolean canBuild = dominionAPI.checkPrivilegeFlag(location, priFlag, player);

// Check privilege flag silently (no notification)
boolean canBuild = dominionAPI.checkPrivilegeFlagSilence(location, priFlag, player);

// Check environment flag
boolean hasFire = dominionAPI.checkEnvironmentFlag(location, envFlag);

Important (since 4.5.0): Always prefer the Location-based overloads over DominionDTO-based overloads. The Location-based methods also check world-wide flags.

3. Modify Data via Providers

All data modifications MUST go through Providers to ensure consistency and trigger events. Provider methods are asynchronous and return CompletableFuture.

The operator parameter controls permission checks:

  • Pass a Player to enforce permission checks
  • Pass Bukkit.getConsoleSender() to bypass permission checks (console-level access)
java
// DominionProvider — create, delete, rename, resize, transfer dominions
DominionProvider domProvider = dominionAPI.getDominionProvider();

CompletableFuture<DominionDTO> future = domProvider.createDominion(
    Bukkit.getConsoleSender(),  // operator
    "newDominion",              // name
    playerUUID,                 // owner
    world,                      // world
    new CuboidDTO(x1,y1,z1, x2,y2,z2), // boundaries
    null,                       // parent (null = top-level)
    false                       // skipEconomy
);
DominionDTO created = future.get(); // null means failure

// GroupProvider — create, delete, rename groups; manage group members and flags
GroupProvider groupProvider = dominionAPI.getGroupProvider();

// MemberProvider — add, remove members; set member flags
MemberProvider memberProvider = dominionAPI.getMemberProvider();
4. Listen to Dominion Events

Register listeners the standard Bukkit way. All events extend CallableEvent.

java
import cn.lunadeer.dominion.events.dominion.DominionCreateEvent;
import cn.lunadeer.dominion.events.member.MemberAddedEvent;

public class MyListener implements Listener {

    @EventHandler
    public void onDominionCreate(DominionCreateEvent event) {
        if (event.isCancelled()) return;
        // React to dominion creation
    }

    @EventHandler
    public void onMemberAdded(MemberAddedEvent event) {
        if (event.isCancelled()) return;
        // Use callback to get the result after data is processed
        event.afterAdded(memberDTO -> {
            if (memberDTO == null) return; // addition failed
            DominionDTO dominion = event.getDominion();
            Player player = Bukkit.getPlayer(memberDTO.getPlayerUUID());
            if (player != null) {
                player.teleportAsync(dominion.getTpLocation());
            }
        });
    }
}

Key event categories:

PackageEvents
cn.lunadeer.dominion.eventsPlayerMoveInDominionEvent, PlayerMoveOutDominionEvent, PlayerCrossDominionBorderEvent, FlagRegisterEvent
cn.lunadeer.dominion.events.dominionDominionCreateEvent, DominionDeleteEvent
cn.lunadeer.dominion.events.dominion.modifyDominionRenameEvent, DominionSizeChangeEvent, DominionSetEnvFlagEvent, DominionSetGuestFlagEvent, DominionSetMapColorEvent, DominionSetMessageEvent, DominionSetTpLocationEvent, DominionTransferEvent
cn.lunadeer.dominion.events.groupGroupCreateEvent, GroupDeleteEvent, GroupRenamedEvent, GroupSetFlagEvent, GroupAddMemberEvent, GroupRemoveMemberEvent
cn.lunadeer.dominion.events.memberMemberAddedEvent, MemberRemovedEvent, MemberSetFlagEvent

Data operation events (like DominionCreateEvent, MemberAddedEvent) process the actual data after all listeners run. Use provided callback methods (e.g., event.afterAdded(...)) to access results.

Show full SKILL.md (183 more words)Show less
5. Register Custom Flags (since 4.7.0)

Two flag types exist:

  • EnvFlag — environment flags (not player-specific, e.g., weather control)
  • PriFlag — privilege flags (player-specific, e.g., can-build)
java
import cn.lunadeer.dominion.api.dtos.flag.EnvFlag;
import cn.lunadeer.dominion.api.dtos.flag.PriFlag;
import cn.lunadeer.dominion.api.dtos.flag.Flags;

// Define custom flags
public static EnvFlag NO_RAIN = new EnvFlag(
    "no_rain",           // unique flag_name (no spaces)
    "No Rain",           // display_name
    "Prevents rain in this dominion.",  // description
    false,               // default_value
    true,                // enabled
    Material.SUNFLOWER   // CUI material icon
);

public static PriFlag CUSTOM_ACTION = new PriFlag(
    "custom_action",     // unique flag_name (no spaces)
    "Custom Action",     // display_name
    "Allows custom action in dominion.", // description
    false,               // default_value
    true,                // enabled
    Material.RED_BED     // CUI material icon
);

// Register and apply in onEnable()
Flags.registerEnvFlag(NO_RAIN);
Flags.registerPriFlag(CUSTOM_ACTION);
Flags.applyNewCustomFlags();  // Must call after registration

DTO Quick Reference

DTOKey Methods
DominionDTOgetId(), getName(), getOwner(), getWorld(), getCuboid(), getTpLocation(), getEnvFlagValue(flag), getGuestFlagValue(flag), getGroups(), getMembers(), getParentDomId(), getJoinMessage(), getLeaveMessage()
PlayerDTOgetId(), getUuid(), getLastKnownName(), getSkinUrl()
MemberDTOgetId(), getPlayerUUID(), getDomID(), getGroupId(), getFlagValue(flag), getPlayer()
GroupDTOgetId(), getDomID(), getNamePlain(), getNameRaw(), getFlagValue(flag), getMembers()
CuboidDTOgetPos1(), getPos2(), x1()..z2(), xLength(), yLength(), zLength(), getSquare(), getVolume(), contain(...), intersectWith(...)

Rules

  1. DominionAPI is a compileOnly / provided dependency — never shade it into your jar.
  2. Always verify Dominion is enabled before calling DominionAPI.getInstance().
  3. Use Location-based flag checks over DominionDTO-based ones (since 4.5.0) to include world-wide flags.
  4. All Provider operations are async (CompletableFuture) — handle appropriately.
  5. Event callbacks (e.g., afterAdded) run after actual data processing — use them for post-operation logic.
  6. Custom flag names must be unique and contain no spaces.
  7. Call Flags.applyNewCustomFlags() after registering all custom flags.
  8. Never modify DTO data directly — always use Providers for writes.
  9. Paper API 1.20.1+ is the minimum supported version.
  10. The plugin must declare depend: [Dominion] in plugin.yml.

© LunaDeerMC, 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 1 other file (references) in .github/skills/dominion-addon-dev of LunaDeerMC/Dominion.

  • SKILL.md
  • references/dominion-api-reference.md

Open the folder on GitHubat commit b80ace4

Compare with similar skills

Dominion Addon 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.

Dominion Addon Dev compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Dominion Addon Dev this skillLunaDeerMC/Dominion134—~2.6kAutomated safety check: PassMIT
Tiger Brokers Java SDKqusong0627/QuantMind1.7k—~1.2kAutomated safety check: PassApache-2.0
ToolJet Marketplace Plugin BuilderToolJet/ToolJet41k—~2.1kAutomated safety check: PassAGPL-3.0
WxJava API Contributorbinarywang/WxJava33k—~154Automated safety check: PassApache-2.0
fp-go HTTP Client PatternsIBM/fp-go2k—~4.4kAutomated safety check: PassApache-2.0
Read The Damn DocsBuilderIO/skills4.5k—~1.8kAutomated safety check: PassMIT

Similar skills

  • Tiger Brokers Java SDK

    qusong0627/QuantMind

    Reference guides for the Tiger Brokers OpenAPI Java SDK: setup, market data, stock, futures and options trading, real-time push, account queries and strategy examples.

    1.7k GitHub stars~1.2k tokensUpdated today
    Backend & APIsAuto-check passed
  • Turns an API description, such as an OpenAPI file or a Postman collection, into a connector plugin for ToolJet's marketplace and checks it with the repo's validator.

    41k GitHub stars~2.1k tokensUpdated today
    Backend & APIsAuto-check passed
  • WxJava API Contributor

    binarywang/WxJava

    Steps for adding or maintaining a WeChat official API in the WxJava SDK, following its Maven multi-module layout, Java 8 compatibility and TestNG test conventions.

    33k GitHub stars~154 tokensUpdated 12 days ago
    Backend & APIsAuto-check passed
  • Official

    Shows how to build composable, context-aware HTTP pipelines in Go using fp-go's ReaderIOResult monad instead of raw net/http calls.

    2k GitHub stars~4.4k tokensUpdated yesterday
    Backend & APIsAuto-check passed
  • Read The Damn Docs

    BuilderIO/skills

    A skill your agent uses when implementing, integrating, upgrading, debugging, or answering anything involving third-party APIs, libraries, frameworks, CLIs, cloud services, model/provider SDKs…

    4.5k GitHub stars~1.8k tokensUpdated today
    Backend & APIsAuto-check passed
  • DisCatSharp Discord Development

    Aiko-IT-Systems/DisCatSharp

    Helps build, explain and troubleshoot C# Discord apps on DisCatSharp, answering from the project's installed version and the library's documentation rather than guesses.

    140 GitHub stars~1.2k tokensUpdated 2 days ago
    Backend & APIsAuto-check passed

Works with

Questions about Dominion Addon Dev

What does Dominion Addon Dev do?

Develop Dominion addon plugins using the DominionAPI. An agent skill from LunaDeerMC/Dominion. Dominion Addon Dev is an agent skill from LunaDeerMC/Dominion. Develop Dominion addon plugins using the DominionAPI.

When should I use Dominion Addon Dev?

Dominion Addon Dev fits situations like: creating new Dominion addon plugins; writing code that interacts with the Dominion land-claim system; listening to Dominion events; operating on dominion/group/member data via Providers.

How do I install Dominion Addon Dev in Claude Code?

Run `npx skills add LunaDeerMC/Dominion --skill dominion-addon-dev -a claude-code`. Or copy the skill folder (.github/skills/dominion-addon-dev in LunaDeerMC/Dominion) into .claude/skills/dominion-addon-dev in your project. Claude Code loads it when a task matches its description.

How do I install Dominion Addon Dev in Codex?

Run `npx skills add LunaDeerMC/Dominion --skill dominion-addon-dev -a codex`. Or copy the skill folder (.github/skills/dominion-addon-dev in LunaDeerMC/Dominion) into .agents/skills/dominion-addon-dev in your project. Codex loads it when a task matches its description.

Can I use Dominion Addon 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 LunaDeerMC/Dominion --skill dominion-addon-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/dominion-addon-dev, .gemini/skills/dominion-addon-dev, .github/skills/dominion-addon-dev and .opencode/skills/dominion-addon-dev in your project.

What does Dominion Addon Dev need to run?

SKILL.md names no scripts, command-line tools or credentials: Dominion Addon Dev is instructions for the agent only. Compatibility (from SKILL.md): ["DominionProtect"].

Does Dominion Addon Dev access the network?

SKILL.md names 5 domains. In commands or code: oss.sonatype.org, repo.papermc.io and jitpack.io; the agent is likely to contact these when it follows the instructions. As links in the text: lunadeermc.github.io and github.com. This is read from the text; nothing was executed.

Is Dominion Addon 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. Review the folder before installing.

What licence does Dominion Addon Dev use?

Dominion Addon 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 Dominion Addon Dev use?

About 2.6k tokens (SKILL.md is roughly 10k 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 5k tokens, read only when the agent opens those files.

What are the alternatives to Dominion Addon Dev?

Skills that share tags, products or a category with Dominion Addon Dev: Tiger Brokers Java SDK (qusong0627/QuantMind, 1.7k stars), ToolJet Marketplace Plugin Builder (ToolJet/ToolJet, 41k stars), WxJava API Contributor (binarywang/WxJava, 33k stars) and fp-go HTTP Client Patterns (IBM/fp-go, 2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Dominion Addon Dev?

LunaDeerMC (a GitHub organization) maintains it in LunaDeerMC/Dominion, which has 134 GitHub stars. The repository was last updated on October 8, 2026.

Source: LunaDeerMC/Dominion on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.