Commands Overview
Commands Overview
Section titled “Commands Overview”DaisyCore commands are designed for one normal path:
- define a
DaisyCommandGroup - mark it with
@DaisyCommandSet - let DaisyCore auto-load the active command tree during startup
Commands are global plugin features, so DaisyCore treats them differently from menus or sidebars. The runtime discovers the command set, filters availability, validates the remaining tree, and registers the final result.
@DaisyCommandSetobject IslandCommands : DaisyCommandGroup({ command("island") { description("Island management")
player { reply("<gradient:#7dd3fc:#c4b5fd>Opening your island tools.</gradient>") } }})Why this shape works
Section titled “Why this shape works”command(...)stays short because it is a DSL verbDaisyCommandGroupkeeps the whole tree in one clear runtime-owned unit- command sets auto-load, so normal plugin code does not need a manual registration call
- startup availability can be controlled with
enabled { ... }orignore() - the same DSL style stays consistent with the rest of DaisyCore
What to expect from the current implementation
Section titled “What to expect from the current implementation”- DaisyCore scans your plugin jar for
@DaisyCommandSetcommand groups - availability is evaluated before validation and registration
- disabled roots and subcommands are removed before collision checks
- full command replacement still requires a real plugin reload if the Paper registration set changes
Learn next
Section titled “Learn next”- Build the runtime flow first: Build a Plugin Flow
- Provider discovery: Auto-Loaded Commands
- Discovery explanation: Why Commands Auto-Load
- API reference: Command DSL