API

Comandos e permissões

Comandos com argumentos tipados, subcomandos, aliases, sugestões e permissões. Quando alguém usa um errado, vê o uso correto sem você precisar escrever essa mensagem.

Em CraftScript

Um arquivo por comando, em commands/, com o mesmo nome do comando:

commands/pay.craftCraftScript
command pay(to: player, amount: int) requires "eco.pay" alias "send" describe "Enviar moedas" {
    if player == null { return "Apenas jogadores" }
    if amount <= 0 { return "&cA quantia precisa ser positiva" }
    return "{amount} moedas enviadas para {to.name}"
}
commands/announce.craftCraftScript
command announce(message: text) requires "eco.admin" describe "Anunciar para todos" {
    broadcast("&6[Aviso] {message}")
}

Se faltar um argumento ou ele não for do tipo esperado, o jogador vê, por exemplo, Missing <amount>. Usage: /pay <to> <amount> ou 'abc' is not a whole number.

Tipo Aceita
player Um jogador online, com sugestões
int, number Inteiro, número
bool true/false, yes/no, on/off
string Uma palavra, ou várias entre aspas
text O resto da linha
id Um id do jogo (minecraft:stone)

Adicione ? para tornar um argumento opcional (target: player?).

Em Kotlin

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

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

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

Argumentos: string, greedy, int, double, bool, player, identifier, cada um com optional. Dentro de executes: c.player (quem o executa), c.player("target"), c.int("n"), c.getOrNull<Int>("n"), c.reply(…) e c.fail(…), que para com uma mensagem de erro.

Permissões

O Crafting vem com permissões por grupos, em config/crafting/permissions.json. Os operadores do servidor têm todas.

config/crafting/permissions.jsonJSON
{
  "groups": {
    "default": ["homes.use", "eco.pay"],
    "mod": ["homes.*", "chatguard.*", "-homes.others"],
    "admin": ["*"]
  },
  "players": {
    "Steve": { "groups": ["mod"], "permissions": ["homes.others"] }
  }
}
  • * concede tudo; homes.*, tudo o que começa com homes..
  • -permissão a nega. A regra mais específica vence; em caso de empate, a negação vence.
  • Todos os jogadores estão no grupo default.
  • Prefixe suas permissões com o id do seu mod (rubies.give) para que não colidam com as de outros mods.

Comandos do Crafting

Funcionam no jogo e no console do servidor.

Comando O que faz
/crafting (ou /cf) Versão e ajuda.
/crafting mods Mods carregados e seu estado.
/crafting reload <id> Recarrega um script ou um plugin. Requer crafting.admin.
/crafting profile Na primeira vez, começa a medir; na segunda, mostra o tempo de cada mod.
/crafting info Tempo de inicialização, listeners, tarefas, memória e conteúdo.