API

Commandes et permissions

Des commandes avec des arguments typés, des sous-commandes, des alias, des suggestions et des permissions. Quand quelqu’un en utilise une mal, il voit l’utilisation correcte sans que tu aies à écrire ce message.

En CraftScript

Un fichier par commande, dans commands/, avec le même nom que la commande :

commands/pay.craftCraftScript
command pay(to: player, amount: int) requires "eco.pay" alias "send" describe "Envoie des pièces" {
    if player == null { return "Réservé aux joueurs" }
    if amount <= 0 { return "&cLe montant doit être positif" }
    return "{amount} pièces envoyées à {to.name}"
}
commands/announce.craftCraftScript
command announce(message: text) requires "eco.admin" describe "Fait une annonce à tout le monde" {
    broadcast("&6[Annonce] {message}")
}

Si un argument manque ou n’est pas du type attendu, le joueur voit par exemple Missing <amount>. Usage: /pay <to> <amount> ou 'abc' is not a whole number.

Type Accepte
player Un joueur en ligne, avec des suggestions
int, number Entier, nombre
bool true/false, yes/no, on/off
string Un mot, ou plusieurs entre guillemets
text Le reste de la ligne
id Un id du jeu (minecraft:stone)

Ajoute ? pour rendre un argument facultatif (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 = "Te téléporte chez toi"
            alias("h")
            executes { c -> c.player.teleport(homes[c.player.uuid] ?: c.fail("&cAucun domicile défini")) }
            sub("set") {
                executes { c -> homes[c.player.uuid] = c.player.location; c.reply("&aDomicile défini") }
            }
            sub("of") {
                permission = "homes.others"
                player("target")
                executes { c -> c.player.teleport(homes[c.player("target").uuid] ?: c.fail("&cAucun domicile")) }
            }
        }
    }
}

Arguments : string, greedy, int, double, bool, player, identifier, chacun avec optional. Dans executes : c.player (celui qui l’exécute), c.player("target"), c.int("n"), c.getOrNull<Int>("n"), c.reply(…) et c.fail(…), qui s’arrête avec un message d’erreur.

Permissions

Crafting inclut des permissions par groupes, dans config/crafting/permissions.json. Les opérateurs du serveur les ont toutes.

config/crafting/permissions.jsonJSON
{
  "groups": {
    "default": ["homes.use", "eco.pay"],
    "mod": ["homes.*", "chatguard.*", "-homes.others"],
    "admin": ["*"]
  },
  "players": {
    "Steve": { "groups": ["mod"], "permissions": ["homes.others"] }
  }
}
  • * accorde tout ; homes.*, tout ce qui commence par homes..
  • -permission la refuse. La règle la plus précise l’emporte ; en cas d’égalité, c’est le refus qui l’emporte.
  • Tous les joueurs sont dans le groupe default.
  • Préfixe tes permissions avec l’id de ton mod (rubies.give) pour qu’elles n’entrent pas en conflit avec celles des autres mods.

Commandes de Crafting

Elles fonctionnent depuis le jeu et depuis la console du serveur.

Commande Ce qu’elle fait
/crafting (ou /cf) Version et aide.
/crafting mods Les mods chargés et leur état.
/crafting reload <id> Recharge un script ou un plugin. Nécessite crafting.admin.
/crafting profile La première fois, elle commence à mesurer ; la deuxième, elle affiche le temps de chaque mod.
/crafting info Temps de démarrage, écouteurs, tâches, mémoire et contenu.