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 Час запуску, слухачі, завдання, пам’ять і вміст.