Description
# Melius Commands
[](https://discord.gg/HeZayd6SxF)
A fabric server side mod to create custom, and modify existing commands
## Custom Commands
To add custom commands, create a json file in `./config/melius-commands/commands`.
For example files, see [examples/commands](https://github.com/DrexHD/MeliusCommands/tree/1.21/examples/commands)! Apply your changes, by running `/reload` in-game.
### JSON Format
Json format includes comments for clarification (don't copy `//` in your files)
#### Command node (literal / argument)
Check out the [online generator](https://drexhd.vercel.app/melius-commands/commands/) to create your custom commands
quick and easy! This will also make sure your syntax is valid.
The root node must always be a literal node.
```json5
{
"id": "...",
// Command id (command name for literal command nodes) (required)
"type": "...",
// Argument type, see below. (argument node only, required)
"executes": [
// A list of command node executions, see below.
],
"require": {
// See https://github.com/Patbox/PredicateAPI/ for further information.
// If this evaluates to true for a Command Source, it will have access to this command node!
},
"literals": [
// A list of literal children nodes
],
"arguments": [
// A list of argument children nodes
],
"redirect": "..."
// If specified the command will copy execution, requirements and children from the specified node.
// This can effectively create an alias for another command
}
```
#### Execution
This can either be a simple string, which will be executed silent, as console with op level 4 or manually configured
like this:
```json5
{
"command": "...",
// The command that will be executed (can reference argument values, with ${id})
"silent": false,
// Disable command output if set to true
"as_console": false,
// Whether this command should be executed as console command source
"op_level": 4
// The operator level of the command source (optional) (Possible values: 0 - 4)
}
```
The `command` execution value can use placeholders from command arguments and
global placeholders, by using this format `${PLACEHOLDER}`, where `PLACEHOLDER`
can either be the argument id, or a global placeholder
like [player:name](https://placeholders.pb4.eu/user/default-placeholders/).
#### Argument Type
For a full list of all argument types refer to the [Argument types wiki](https://minecraft.wiki/w/Argument_types).
Some argument types require additional arguments, which must be appended seperated by spaces.
## Command Modifiers
To add command requirements, create a json file in `./config/melius-commands/modifiers`.
For example files, see [examples/modifiers](https://github.com/DrexHD/MeliusCommands/tree/1.21/examples/modifiers)!
### JSON Format
Check out the [online generator](https://drexhd.vercel.app/melius-commands/modifiers/) to create your custom command
modifiers quick and easy! This will also make sure your syntax is valid.
Json format includes comments for clarification (don't copy `//` in your files)
#### Command modifier
The syntax depends on the modifier type you choose. The most important thing to note is that there are two types of
command matchers:
- Node matchers will match command nodes (the structure used by brigadier to represent commands internally) by their
path (for example `teleport.location`, will match any command like this `/teleport 0 100 0`)
- Command matchers will match against the string used during command execution (for example `warp end` will
match `/warp end`)
Both of these types come with three different flavours:
- `strict` modifiers will only be applied to that exact node / that exact command input
- `starts_with` modifiers will be applied to the specified node / command and anything that is "longer" than it
- `regex` modifiers will be applied to everything matching the regular expression
Node matchers have an extra field called `requirement_modifier`, which allows you to modify the requirement of the node,
which will completely remove the command from players / command sources that don't meet the requirement!
### Command node paths
You can use `/melius-commands path ` command to determine command node paths of any command.
Example: to check the path of `/tp DrexHD 0 100 0` (teleporting an entity to a block location) you type
`/melius-commands path tp DrexHD 0 100 0` and will receive `teleport.targets.location`, which you can use in command
modifiers.
## Placeholders
- `%melius-commands:cooldown [id]%` / `%melius-commands:cooldown [id] [formatting]%` - Player command cooldowns.
- `[id]` is the id specified in the cooldown modifier.
- `[formatting]` is the [duration formatting](https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DurationFormatUtils.html),
make sure to escape properly.