API

Команды и права

Команды с типизированными аргументами, подкомандами, псевдонимами, подсказками и правами. Когда кто-то использует команду неправильно, он видит правильный синтаксис, и тебе не нужно писать это сообщение.

На CraftScript

Один файл на команду, в commands/, с тем же именем, что и у команды:

commands/pay.craftCraftScript
command pay(to: player, amount: int) requires "eco.pay" alias "send" describe "Отправить монеты" {
    if player == null { return "Только для игроков" }
    if amount <= 0 { return "&cСумма должна быть положительной" }
    return "Отправлено {amount} монет игроку {to.name}"
}
commands/announce.craftCraftScript
command announce(message: text) requires "eco.admin" describe "Объявить всем" {
    broadcast("&6[Объявление] {message}")
}

Если аргумента не хватает или у него не тот тип, игрок видит, например, Missing <amount>. Usage: /pay <to> <amount> или 'abc' is not a whole number.

Тип Принимает
player Игрока в сети, с подсказками
int, number Целое число, число
bool true/false, yes/no, on/off
string Одно слово или несколько в кавычках
text Остаток строки
id Игровой id (minecraft:stone)

Добавь ?, чтобы сделать аргумент необязательным (target: player?).

На Kotlin

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

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

    fun register() {
        Crafting.commands.command("home") {
            description = "Телепортироваться домой"
            alias("h")
            executes { c -> c.player.teleport(homes[c.player.uuid] ?: c.fail("&cДом не задан")) }
            sub("set") {
                executes { c -> homes[c.player.uuid] = c.player.location; c.reply("&aДом задан") }
            }
            sub("of") {
                permission = "homes.others"
                player("target")
                executes { c -> c.player.teleport(homes[c.player("target").uuid] ?: c.fail("&cДома нет")) }
            }
        }
    }
}

Аргументы: string, greedy, int, double, bool, player, identifier, каждый с optional. Внутри executes: c.player (кто её запускает), c.player("target"), c.int("n"), c.getOrNull<Int>("n"), c.reply(…) и c.fail(…), который останавливает выполнение с сообщением об ошибке.

Права

В Crafting есть права на основе групп, в config/crafting/permissions.json. У операторов сервера есть все права.

config/crafting/permissions.jsonJSON
{
  "groups": {
    "default": ["homes.use", "eco.pay"],
    "mod": ["homes.*", "chatguard.*", "-homes.others"],
    "admin": ["*"]
  },
  "players": {
    "Steve": { "groups": ["mod"], "permissions": ["homes.others"] }
  }
}
  • * даёт всё; homes.* — всё, что начинается с homes..
  • -permission запрещает право. Побеждает самое конкретное правило; при равенстве побеждает запрет.
  • Все игроки входят в группу default.
  • Начинай свои права с id своего мода (rubies.give), чтобы они не пересекались с правами других модов.

Команды Crafting

Они работают из игры и из консоли сервера.

Команда Что делает
/crafting (или /cf) Версия и справка.
/crafting mods Загруженные моды и их состояние.
/crafting reload <id> Перезагружает скрипт или плагин. Требует crafting.admin.
/crafting profile В первый раз начинает измерение; во второй — показывает время каждого мода.
/crafting info Время запуска, слушатели, задачи, память и контент.