[{"data":1,"prerenderedAt":259},["ShallowReactive",2],{"docs-\u002Fmodules\u002Fcommands-cheatsheet":3},{"id":4,"title":5,"body":6,"description":249,"extension":250,"meta":251,"navTitle":252,"navigation":253,"path":254,"rawbody":255,"seo":256,"stem":257,"__hash__":258},"docs\u002Fmodules\u002Fcommands-cheatsheet.md","Commands Cheat Sheet",{"type":7,"value":8,"toc":232},"minimark",[9,13,17,22,33,37,43,47,53,57,63,67,73,76,99,103,109,113,119,123,129,132,154,158,164,167,192,196,202,206,212,216,222,226],[10,11,5],"h1",{"id":12},"commands-cheat-sheet",[14,15,16],"p",{},"Quick reference for the MagicUtils command system.",[18,19,21],"h2",{"id":20},"minimal-registry-setup","Minimal Registry Setup",[23,24,30],"pre",{"className":25,"code":27,"language":28,"meta":29},[26],"language-java","CommandRegistry registry = CommandRegistry.create(plugin, \"myplugin\", logger);\nregistry.registerCommand(new DonateCommand());\n","java","",[31,32,27],"code",{"__ignoreMap":29},[18,34,36],{"id":35},"minimal-annotated-command","Minimal Annotated Command",[23,38,41],{"className":39,"code":40,"language":28,"meta":29},[26],"@CommandInfo(name = \"donate\", description = \"Main command\")\npublic final class DonateCommand extends MagicCommand {\n    public CommandResult execute(@Sender MagicSender sender) {\n        return CommandResult.success(\"ok\");\n    }\n}\n",[31,42,40],{"__ignoreMap":29},[18,44,46],{"id":45},"threading-async","Threading (Async)",[23,48,51],{"className":49,"code":50,"language":28,"meta":29},[26],"@CommandInfo(name = \"donate\", threading = CommandThreading.ASYNC)\npublic final class DonateCommand extends MagicCommand {\n    @SubCommand(name = \"give\", threading = CommandThreading.ASYNC)\n    public CommandResult give(@Sender MagicSender sender, Player target) { ... }\n}\n",[31,52,50],{"__ignoreMap":29},[18,54,56],{"id":55},"subcommands-and-nested-paths","Subcommands And Nested Paths",[23,58,61],{"className":59,"code":60,"language":28,"meta":29},[26],"@SubCommand(name = \"give\")\npublic CommandResult give(@Sender MagicSender sender, Player target) { ... }\n\n@SubCommand(path = {\"npc\", \"commands\"}, name = \"add\")\npublic CommandResult addNpcCommand(...) { ... }\n",[31,62,60],{"__ignoreMap":29},[18,64,66],{"id":65},"options-flags","Options \u002F Flags",[23,68,71],{"className":69,"code":70,"language":28,"meta":29},[26],"public CommandResult give(\n        @Option(shortNames = {\"a\"}, longNames = {\"amount\"}) int amount,\n        @Option(shortNames = {\"s\"}, longNames = {\"silent\"}, flag = true) boolean silent\n) { ... }\n",[31,72,70],{"__ignoreMap":29},[14,74,75],{},"Accepted forms:",[77,78,79,85,90],"ul",{},[80,81,82],"li",{},[31,83,84],{},"--amount 5",[80,86,87],{},[31,88,89],{},"-a 5",[80,91,92,95,96],{},[31,93,94],{},"--silent"," \u002F ",[31,97,98],{},"-s",[18,100,102],{"id":101},"optional-default-values","Optional + Default Values",[23,104,107],{"className":105,"code":106,"language":28,"meta":29},[26],"public CommandResult set(\n        @DefaultValue(\"en\") String lang,\n        @OptionalArgument Player target\n) { ... }\n",[31,108,106],{"__ignoreMap":29},[18,110,112],{"id":111},"greedy-text","Greedy Text",[23,114,117],{"className":115,"code":116,"language":28,"meta":29},[26],"public CommandResult say(@Greedy String message) { ... }\n",[31,118,116],{"__ignoreMap":29},[18,120,122],{"id":121},"suggestions","Suggestions",[23,124,127],{"className":125,"code":126,"language":28,"meta":29},[26],"@Suggest(\"@players\") Player target\n@Suggest(\"{easy,hard}\") String mode\n@Suggest(\"getItems\") String item\n",[31,128,126],{"__ignoreMap":29},[14,130,131],{},"Suggestion methods can be:",[77,133,134,139,144,149],{},[80,135,136],{},[31,137,138],{},"List\u003CString> getItems()",[80,140,141],{},[31,142,143],{},"List\u003CString> getItems(Player player)",[80,145,146],{},[31,147,148],{},"List\u003CString> getItems(ServerCommandSource sender)",[80,150,151],{},[31,152,153],{},"List\u003CString> getItems(CommandSource sender)",[18,155,157],{"id":156},"sender-injection","Sender Injection",[23,159,162],{"className":160,"code":161,"language":28,"meta":29},[26],"public CommandResult execute(@Sender MagicSender sender) { ... }\n",[31,163,161],{"__ignoreMap":29},[14,165,166],{},"Allowed senders:",[14,168,169,172,173,172,176,172,179,172,182,172,185,172,188,191],{},[31,170,171],{},"ANY",", ",[31,174,175],{},"PLAYER",[31,177,178],{},"CONSOLE",[31,180,181],{},"BLOCK",[31,183,184],{},"MINECART",[31,186,187],{},"PROXIED",[31,189,190],{},"REMOTE",".",[18,193,195],{"id":194},"builder-api-snippet","Builder API Snippet",[23,197,200],{"className":198,"code":199,"language":28,"meta":29},[26],"MagicCommand command = MagicCommand.\u003CCommandSender>builder(\"donate\")\n        .description(\"Main command\")\n        .aliases(\"d\")\n        .threading(CommandThreading.ASYNC)\n        .execute(ctx -> CommandResult.success(\"ok\"))\n        .subCommand(SubCommandSpec.\u003CCommandSender>builder(\"give\")\n                .argument(CommandArgument.builder(\"player\", Player.class).build())\n                .threading(CommandThreading.ASYNC)\n                .execute(ctx -> CommandResult.success(\"ok\"))\n                .build())\n        .build();\n\nregistry.registerCommand(command);\n",[31,201,199],{"__ignoreMap":29},[18,203,205],{"id":204},"mount-existing-command-tree","Mount Existing Command Tree",[23,207,210],{"className":208,"code":209,"language":28,"meta":29},[26],"MagicCommand admin = MagicCommand.\u003CCommandSender>builder(\"admin\")\n        .mount(\"punish\", new BanCommand())   \u002F\u002F \u002Fadmin punish \u003Csub>\n        .build();\n",[31,211,209],{"__ignoreMap":29},[18,213,215],{"id":214},"flat-mount-sub-commands","Flat-Mount Sub-Commands",[23,217,220],{"className":218,"code":219,"language":28,"meta":29},[26],"\u002F\u002F \u002Froot \u003Csub> — carrier's own name never appears as a level\nroot.mountSubCommands(new GreetCommand());\n",[31,221,219],{"__ignoreMap":29},[18,223,225],{"id":224},"extend-a-registered-command","Extend A Registered Command",[23,227,230],{"className":228,"code":229,"language":28,"meta":29},[26],"\u002F\u002F Registration freezes a command; copy() gives an unfrozen duplicate.\nMagicCommand copy = manager.getCommand(\"root\").copy();\ncopy.mount(\"punish\", new BanCommand());\nmanager.register(copy, copy.resolveInfo());  \u002F\u002F replaces the old owner by name\n",[31,231,229],{"__ignoreMap":29},{"title":29,"searchDepth":233,"depth":233,"links":234},3,[235,237,238,239,240,241,242,243,244,245,246,247,248],{"id":20,"depth":236,"text":21},2,{"id":35,"depth":236,"text":36},{"id":45,"depth":236,"text":46},{"id":55,"depth":236,"text":56},{"id":65,"depth":236,"text":66},{"id":101,"depth":236,"text":102},{"id":111,"depth":236,"text":112},{"id":121,"depth":236,"text":122},{"id":156,"depth":236,"text":157},{"id":194,"depth":236,"text":195},{"id":204,"depth":236,"text":205},{"id":214,"depth":236,"text":215},{"id":224,"depth":236,"text":225},"A quick reference for the MagicUtils command framework: annotations, options, type parsers, permissions, and Brigadier integration at a glance.","md",{},null,true,"\u002Fmodules\u002Fcommands-cheatsheet","---\ntitle: Commands Cheat Sheet\ndescription: 'A quick reference for the MagicUtils command framework: annotations, options, type parsers, permissions, and Brigadier integration at a glance.'\n---\n\n# Commands Cheat Sheet\n\nQuick reference for the MagicUtils command system.\n\n## Minimal Registry Setup\n\n```java\nCommandRegistry registry = CommandRegistry.create(plugin, \"myplugin\", logger);\nregistry.registerCommand(new DonateCommand());\n```\n\n## Minimal Annotated Command\n\n```java\n@CommandInfo(name = \"donate\", description = \"Main command\")\npublic final class DonateCommand extends MagicCommand {\n    public CommandResult execute(@Sender MagicSender sender) {\n        return CommandResult.success(\"ok\");\n    }\n}\n```\n\n## Threading (Async)\n\n```java\n@CommandInfo(name = \"donate\", threading = CommandThreading.ASYNC)\npublic final class DonateCommand extends MagicCommand {\n    @SubCommand(name = \"give\", threading = CommandThreading.ASYNC)\n    public CommandResult give(@Sender MagicSender sender, Player target) { ... }\n}\n```\n\n## Subcommands And Nested Paths\n\n```java\n@SubCommand(name = \"give\")\npublic CommandResult give(@Sender MagicSender sender, Player target) { ... }\n\n@SubCommand(path = {\"npc\", \"commands\"}, name = \"add\")\npublic CommandResult addNpcCommand(...) { ... }\n```\n\n## Options \u002F Flags\n\n```java\npublic CommandResult give(\n        @Option(shortNames = {\"a\"}, longNames = {\"amount\"}) int amount,\n        @Option(shortNames = {\"s\"}, longNames = {\"silent\"}, flag = true) boolean silent\n) { ... }\n```\n\nAccepted forms:\n\n- `--amount 5`\n- `-a 5`\n- `--silent` \u002F `-s`\n\n## Optional + Default Values\n\n```java\npublic CommandResult set(\n        @DefaultValue(\"en\") String lang,\n        @OptionalArgument Player target\n) { ... }\n```\n\n## Greedy Text\n\n```java\npublic CommandResult say(@Greedy String message) { ... }\n```\n\n## Suggestions\n\n```java\n@Suggest(\"@players\") Player target\n@Suggest(\"{easy,hard}\") String mode\n@Suggest(\"getItems\") String item\n```\n\nSuggestion methods can be:\n\n- `List\u003CString> getItems()`\n- `List\u003CString> getItems(Player player)`\n- `List\u003CString> getItems(ServerCommandSource sender)`\n- `List\u003CString> getItems(CommandSource sender)`\n\n## Sender Injection\n\n```java\npublic CommandResult execute(@Sender MagicSender sender) { ... }\n```\n\nAllowed senders:\n\n`ANY`, `PLAYER`, `CONSOLE`, `BLOCK`, `MINECART`, `PROXIED`, `REMOTE`.\n\n## Builder API Snippet\n\n```java\nMagicCommand command = MagicCommand.\u003CCommandSender>builder(\"donate\")\n        .description(\"Main command\")\n        .aliases(\"d\")\n        .threading(CommandThreading.ASYNC)\n        .execute(ctx -> CommandResult.success(\"ok\"))\n        .subCommand(SubCommandSpec.\u003CCommandSender>builder(\"give\")\n                .argument(CommandArgument.builder(\"player\", Player.class).build())\n                .threading(CommandThreading.ASYNC)\n                .execute(ctx -> CommandResult.success(\"ok\"))\n                .build())\n        .build();\n\nregistry.registerCommand(command);\n```\n\n## Mount Existing Command Tree\n\n```java\nMagicCommand admin = MagicCommand.\u003CCommandSender>builder(\"admin\")\n        .mount(\"punish\", new BanCommand())   \u002F\u002F \u002Fadmin punish \u003Csub>\n        .build();\n```\n\n## Flat-Mount Sub-Commands\n\n```java\n\u002F\u002F \u002Froot \u003Csub> — carrier's own name never appears as a level\nroot.mountSubCommands(new GreetCommand());\n```\n\n## Extend A Registered Command\n\n```java\n\u002F\u002F Registration freezes a command; copy() gives an unfrozen duplicate.\nMagicCommand copy = manager.getCommand(\"root\").copy();\ncopy.mount(\"punish\", new BanCommand());\nmanager.register(copy, copy.resolveInfo());  \u002F\u002F replaces the old owner by name\n```\n",{"title":5,"description":249},"modules\u002Fcommands-cheatsheet","gV7THaYXErFNHKswm6XDQv1oL_N7_DjxNa7HY22DnD8",1783944488145]