Кулинарная книга (рецепты)¶
Короткие готовые куски. Каждый — вставка в .fs-файл; команды не забудьте
дублировать в plugin.yml.
При входе и выходе¶
on player join:
broadcast sender-name() + " joined!"
on quit:
broadcast sender-name() + " left."
Прощание с причиной смерти¶
on death:
broadcast sender-name() + " died."
#deaths = #deaths + 1
#deaths = #deaths + 1 упадёт для новичка (null + 1)! Добавьте выше:
if #deaths is null: #deaths = 0. См. учебник 2.
Лечение себя и еда¶
command feed:
heal 20
message "Yum! (food setter есть только в Java-API: PlayerAccess.set)"
command healme:
let me = sender()
set-health(me, me.max-health)
message "Healed."
Проверка прав без permission:¶
command vipkit:
let me = sender()
if has-permission(me, "shop.vip") == false:
message "VIP only."
stop
give "DIAMOND" 5
message "Enjoy!"
Телепорт к спавну мира¶
command spawn:
teleport(0, 100, 0)
message "Back to spawn."
Список онлайна одной строкой¶
command online:
let names = ""
for p in online-players():
names = names + p + ", "
message "Online: " + names
Конкатенация объектов
names + p превращает объект игрока в текст через toText.
Получится что-то вроде CraftPlayer{name=Steve}, а не ник!
Для ников нужен name(p):
names = names + name(p) + ", ".
Правильный вариант:
command online:
let names = ""
for p in online-players():
names = names + name(p) + ", "
message "Online: " + names
Разбор строки по словам¶
let words = split("a b c", " ")
message first(words) # "a"
message last(words) # "c"
message size(words) # 3 (размер списка)
size(x) / length(x) — размер списка, мапы или длина текста.
first / last — пустой список даёт null.
Регистр и чистка ввода¶
let nick = trim(arg(2))
if lower(nick) == "admin":
message "Nice try."
Случайность¶
command roll:
let me = sender()
let r = random(1, 6)
message "Rolled: " + r
if r == 6:
give "GOLD_INGOT" 1
Одноаргументный random/1 тоже есть (диспетчер), но в командах используйте
двухаргументный — он компилируется в прямой вызов.
Время суток¶
command day:
set-time(6000)
message "Set to noon."
command clock:
message "Time: " + time()
time() — тики мира игрока события (вне контекста игрока — 0).
Титул победителю¶
command win:
title("Victory!", sender-name() + " wins!")
Отмена урона себе¶
on damage:
cancel-event
message "You are protected."
Блок неделимого спавна (заглушка под координаты)¶
on place block:
message "Block placed. (coords unavailable in DSL v1)"
Честно: координат блока в DSL v1 нет — только факт события. Не пишите проверки «если блок в регионе» — нечем сравнивать.
Счётчик убийств общий¶
$ kills = 0
Пробел после $?
Нет! $ kills — ошибка. Только $kills. Пробел допустим только
вокруг операторов: $kills = $kills + 1.
$kills = 0
on death:
$kills = $kills + 1
broadcast "Total deaths: " + $kills + "."