Cmdibuzz Commands

How to write custom commands with JSON configuration

Updated August 12, 2026

Command File Structure

Each command is a separate .json file in the commands/ directory. The filename (minus .json) becomes the command ID if not specified in the file.

config/cmdibuzz/commands/
├── discord.json
├── heal.json
└── welcome.json

Minimal Example

{
  "id": "discord",
  "command": "discord",
  "type": "text",
  "runcmd": ["text: <blue>Join our Discord: <aqua>discord.gg/example"]
}

This creates /discord that sends a message to the executor.

Full Command Definition

{
  "id": "heal",
  "command": "heal",
  "type": "text",
  "aliases": ["healme", "health"],
  "register": true,
  "override": false,
  "permission": "cmdibuzz.heal",
  "error-message": "<red>You cannot use this command right now.",
  "cooldown-message": "<yellow>Please wait {remaining}s before using this command again.",
  "cost_money": 10.0,
  "cost_items": [
    { "material": "minecraft:emerald", "amount": 2 }
  ],
  "cooldown_seconds": 60,
  "trigger": "",
  "arguments": [
    { "name": "player", "type": "player", "optional": false }
  ],
  "runcmd": [
    "text: <green>Healing $arg1...",
    "delay: 40",
    "run_command: /effect give $arg1 minecraft:regeneration 5 2",
    "run_console: /say $player_name healed $arg1!"
  ]
}

Fields Reference

FieldRequiredDescription
idYesUnique identifier for cooldown tracking and logs
commandYesThe command name (what players type after /)
typeNoFallback action type when no runcmd is provided; defaults to text
aliasesNoAlternative command names
registerNoWhether to register this command (default true)
overrideNoReplace an existing command with the same name (default false)
permissionNoRequired permission node (empty = default allowed)
error-messageNoMessage for blocked one-time-use, money-cost, or item-cost attempts
cooldown-messageNoMessage shown during cooldown; supports {remaining} seconds
cost_moneyNoMoney cost to use the command
cost_itemsNoArray of item costs
cooldown_secondsNoPer-player cooldown in seconds
triggerNoBind to an event (see Event Triggers)
argumentsNoArgument definitions for the command
roulette_commandsNoArray of weighted commands for the roulette action
onetime_useNoIf true, each player can only use this once (default false)
runcmdSee noteArray of action strings to execute in order

Splitting Commands Across Files

You can split commands across multiple files and subfolders. Each file should contain a single command object (not an array). The filename becomes the command ID if no id field is set.

Command Names and Arguments

Literal words in command are separated by spaces. Placeholders in angle brackets become Brigadier arguments, and their names must match the entries in arguments:

{
  "id": "random_pokeball",
  "command": "random_pokeball <target>",
  "arguments": [{ "name": "target", "type": "player" }],
  "runcmd": ["roulette:"]
}

Use $arg1, $arg2, or $<name> in actions. Set optional: true to allow an argument to be omitted. An argument-level permission restricts only that argument path.