Skip to content

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.

@DaisyCommandSet
object IslandCommands : DaisyCommandGroup({
command("island") {
description("Island management")
player {
reply("<gradient:#7dd3fc:#c4b5fd>Opening your island tools.</gradient>")
}
}
})
  • command(...) stays short because it is a DSL verb
  • DaisyCommandGroup keeps 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 { ... } or ignore()
  • 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 @DaisyCommandSet command 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