Skip to content

Commands Overview

DaisyCore commands are designed to feel clean in plugin code while still making it obvious which library they come from.

Commands are global plugin features, so DaisyCore treats them differently from menus or sidebars. You define providers, DaisyCore discovers them at startup, then the command registry registers the active tree.

@DaisyCommandSet
object IslandCommands : DaisyCommandProvider {
override fun commands(): List<DaisyCommand> =
listOf(
command("island") {
description("Island management")
executePlayer {
reply("Hi from DaisyCore.")
}
},
)
}
  • command(...) stays short because it is a DSL verb
  • DaisyCommand and DaisyCommandProvider make library ownership obvious
  • providers auto-load, so normal plugin code does not need a manual registration call
  • startup availability can be controlled with enabled { ... } or ignore(true)

What to expect from the current implementation

Section titled “What to expect from the current implementation”
  • DaisyCore scans your plugin jar for @DaisyCommandSet providers
  • 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