API

Comandos y permisos

Comandos con argumentos tipados, subcomandos, alias, sugerencias y permisos. Si alguien los usa mal, ve el uso correcto sin que tengas que escribir ese mensaje.

En CraftScript

Un archivo por comando, en commands/, con el mismo nombre que el comando:

commands/pay.craftCraftScript
command pay(to: player, amount: int) requires "eco.pay" alias "send" describe "Send coins" {
    if player == null { return "Players only" }
    if amount <= 0 { return "&cThe amount must be positive" }
    return "Sent {amount} coins to {to.name}"
}
commands/announce.craftCraftScript
command announce(message: text) requires "eco.admin" describe "Announce to everyone" {
    broadcast("&6[Notice] {message}")
}

Si falta un argumento o no es del tipo pedido, el jugador ve, por ejemplo, Missing <amount>. Usage: /pay <to> <amount> o 'abc' is not a whole number.

Tipo Acepta
player Un jugador conectado, con sugerencias
int, number Entero, número
bool true/false, yes/no, on/off
string Una palabra, o varias entre comillas
text El resto de la línea
id Un id del juego (minecraft:stone)

Añade ? para hacer un argumento opcional (target: player?).

En Kotlin

commands/HomeCommand.ktKotlin
package com.example.homes.commands

object HomeCommand {
    private val homes = mutableMapOf<UUID, Location>()

    fun register() {
        Crafting.commands.command("home") {
            description = "Teleport home"
            alias("h")
            executes { c -> c.player.teleport(homes[c.player.uuid] ?: c.fail("&cNo home set")) }
            sub("set") {
                executes { c -> homes[c.player.uuid] = c.player.location; c.reply("&aHome set") }
            }
            sub("of") {
                permission = "homes.others"
                player("target")
                executes { c -> c.player.teleport(homes[c.player("target").uuid] ?: c.fail("&cNo home")) }
            }
        }
    }
}

Argumentos: string, greedy, int, double, bool, player, identifier, cada uno con optional. Dentro de executes: c.player (quien lo ejecuta), c.player("target"), c.int("n"), c.getOrNull<Int>("n"), c.reply(…) y c.fail(…), que corta con un mensaje de error.

Permisos

Crafting trae permisos por grupos, en config/crafting/permissions.json. Los operadores del servidor tienen todos.

config/crafting/permissions.jsonJSON
{
  "groups": {
    "default": ["homes.use", "eco.pay"],
    "mod": ["homes.*", "chatguard.*", "-homes.others"],
    "admin": ["*"]
  },
  "players": {
    "Steve": { "groups": ["mod"], "permissions": ["homes.others"] }
  }
}
  • * concede todo; homes.*, todo lo que empieza por homes..
  • -permiso lo niega. Gana la regla más específica; si empatan, gana la negación.
  • Todos los jugadores están en el grupo default.
  • Pon a los permisos el prefijo del id de tu mod (rubies.give): así no chocan con los de otros mods.

Comandos de Crafting

Funcionan desde el juego y desde la consola del servidor.

Comando Qué hace
/crafting (o /cf) Versión y ayuda.
/crafting mods Los mods cargados y su estado.
/crafting reload <id> Recarga un script o un plugin. Necesita crafting.admin.
/crafting profile La primera vez empieza a medir; la segunda, muestra el tiempo de cada mod.
/crafting info Tiempo de arranque, listeners, tareas, memoria y contenido.