API

Befehle und Berechtigungen

Befehle mit typisierten Argumenten, Unterbefehlen, Aliasen, Vorschlägen und Berechtigungen. Benutzt jemand einen falsch, sieht er die richtige Verwendung, ohne dass du diese Meldung schreiben musst.

In CraftScript

Eine Datei pro Befehl, in commands/, mit demselben Namen wie der Befehl:

commands/pay.craftCraftScript
command pay(to: player, amount: int) requires "eco.pay" alias "send" describe "Münzen senden" {
    if player == null { return "Nur für Spieler" }
    if amount <= 0 { return "&cDer Betrag muss positiv sein" }
    return "{amount} Münzen an {to.name} gesendet"
}
commands/announce.craftCraftScript
command announce(message: text) requires "eco.admin" describe "An alle ankündigen" {
    broadcast("&6[Hinweis] {message}")
}

Fehlt ein Argument oder hat es nicht den erwarteten Typ, sieht der Spieler zum Beispiel Missing <amount>. Usage: /pay <to> <amount> oder 'abc' is not a whole number.

Typ Akzeptiert
player Einen Spieler, der online ist, mit Vorschlägen
int, number Ganzzahl, Zahl
bool true/false, yes/no, on/off
string Ein Wort oder mehrere in Anführungszeichen
text Den Rest der Zeile
id Eine Spiel-ID (minecraft:stone)

Häng ? an, um ein Argument optional zu machen (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 = "Nach Hause teleportieren"
            alias("h")
            executes { c -> c.player.teleport(homes[c.player.uuid] ?: c.fail("&cKein Zuhause gesetzt")) }
            sub("set") {
                executes { c -> homes[c.player.uuid] = c.player.location; c.reply("&aZuhause gesetzt") }
            }
            sub("of") {
                permission = "homes.others"
                player("target")
                executes { c -> c.player.teleport(homes[c.player("target").uuid] ?: c.fail("&cKein Zuhause")) }
            }
        }
    }
}

Argumente: string, greedy, int, double, bool, player, identifier, jeweils mit optional. Innerhalb von executes: c.player (wer ihn ausführt), c.player("target"), c.int("n"), c.getOrNull<Int>("n"), c.reply(…) und c.fail(…), das mit einer Fehlermeldung abbricht.

Berechtigungen

Crafting bringt gruppenbasierte Berechtigungen mit, in config/crafting/permissions.json. Serveroperatoren haben alle.

config/crafting/permissions.jsonJSON
{
  "groups": {
    "default": ["homes.use", "eco.pay"],
    "mod": ["homes.*", "chatguard.*", "-homes.others"],
    "admin": ["*"]
  },
  "players": {
    "Steve": { "groups": ["mod"], "permissions": ["homes.others"] }
  }
}
  • * erlaubt alles, homes.* alles, was mit homes. beginnt.
  • -permission verweigert sie. Die spezifischste Regel gewinnt, bei Gleichstand gewinnt die Verweigerung.
  • Alle Spieler sind in der Gruppe default.
  • Stell deinen Berechtigungen die ID deiner Mod voran (rubies.give), damit sie nicht mit denen anderer Mods kollidieren.

Crafting-Befehle

Sie funktionieren im Spiel und in der Serverkonsole.

Befehl Was er macht
/crafting (oder /cf) Version und Hilfe.
/crafting mods Geladene Mods und ihr Status.
/crafting reload <id> Lädt ein Skript oder ein Plugin neu. Erfordert crafting.admin.
/crafting profile Beim ersten Mal beginnt die Messung, beim zweiten Mal zeigt er die Zeit jeder Mod.
/crafting info Startzeit, Listener, Aufgaben, Speicher und Inhalte.