API

Comandi e permessi

Comandi con argomenti tipizzati, sottocomandi, alias, suggerimenti e permessi. Quando qualcuno ne usa uno in modo sbagliato, vede l’uso corretto senza che tu debba scrivere quel messaggio.

In CraftScript

Un file per comando, in commands/, con lo stesso nome del comando:

commands/pay.craftCraftScript
command pay(to: player, amount: int) requires "eco.pay" alias "send" describe "Invia monete" {
    if player == null { return "Solo per giocatori" }
    if amount <= 0 { return "&cL’importo deve essere positivo" }
    return "Hai inviato {amount} monete a {to.name}"
}
commands/announce.craftCraftScript
command announce(message: text) requires "eco.admin" describe "Annuncia a tutti" {
    broadcast("&6[Avviso] {message}")
}

Se un argomento manca o non è del tipo atteso, il giocatore vede, per esempio, Missing <amount>. Usage: /pay <to> <amount> o 'abc' is not a whole number.

Tipo Accetta
player Un giocatore online, con suggerimenti
int, number Intero, numero
bool true/false, yes/no, on/off
string Una parola, o più parole tra virgolette
text Il resto della riga
id Un id del gioco (minecraft:stone)

Aggiungi ? per rendere un argomento facoltativo (target: player?).

In Kotlin

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

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

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

Argomenti: string, greedy, int, double, bool, player, identifier, ognuno con optional. Dentro executes: c.player (chi lo esegue), c.player("target"), c.int("n"), c.getOrNull<Int>("n"), c.reply(…) e c.fail(…), che si interrompe con un messaggio di errore.

Permessi

Crafting include permessi basati su gruppi, in config/crafting/permissions.json. Gli operatori del server li hanno tutti.

config/crafting/permissions.jsonJSON
{
  "groups": {
    "default": ["homes.use", "eco.pay"],
    "mod": ["homes.*", "chatguard.*", "-homes.others"],
    "admin": ["*"]
  },
  "players": {
    "Steve": { "groups": ["mod"], "permissions": ["homes.others"] }
  }
}
  • * concede tutto; homes.*, tutto ciò che inizia con homes..
  • -permesso lo nega. Vince la regola più specifica; a parità, vince il divieto.
  • Tutti i giocatori sono nel gruppo default.
  • Fai precedere i tuoi permessi dall’id della tua mod (rubies.give) così non entrano in conflitto con quelli di altre mod.

Comandi di Crafting

Funzionano dal gioco e dalla console del server.

Comando Cosa fa
/crafting (o /cf) Versione e aiuto.
/crafting mods Mod caricate e il loro stato.
/crafting reload <id> Ricarica uno script o un plugin. Richiede crafting.admin.
/crafting profile La prima volta inizia a misurare; la seconda, mostra il tempo di ogni mod.
/crafting info Tempo di avvio, listener, attività, memoria e contenuti.