Документация
Скрипты
К скриптам
Данные

Клиент и сервер

Всё, что касается самого клиента и подключения: сообщения игроку, экраны, камера, клавиши, таб-лист, TPS и распознавание сервера.

Сообщения игроку

print(...) / client.log(...)консоль скрипта в редакторе
client.notify(text, ms)нотификация клиента
client.chat(text)строка в чат, видна только вам
client.title(title, subtitle, in, stay, out)титл по центру экрана, время в тиках
client.actionbar(text)строка над хотбаром
client.play_sound(id, volume, pitch)звук через менеджер клиента
events.on("totem_pop", function(ev)
    if ev.entity.is_player then
        client.title("§cТОТЕМ", ev.entity.name(), 5, 30, 10)
    end
end)

Всё это локально: сервер и другие игроки ничего не видят. Писать в общий чат — player.send_chat, команды — player.send_command.

Экраны и окно

client.in_game()в мире и никакой экран не открыт
client.screen()class, title, chat, container, inventory, pause — или nil
client.close_screen()закрыть что угодно
client.window()размер окна в пикселях и в координатах HUD, fullscreen, focused
client.paused()пауза в одиночной игре
events.on("screen_open", function()
    local s = client.screen()
    if s and s.container and s.title:find("Аукцион") then
        client.notify("открыт аукцион")
    end
end)

class — имя Java-класса экрана: GenericContainerScreen для сундуков и серверных меню, InventoryScreen, ChatScreen. Когда окно свёрнуто, window().focused равно false — удобно, чтобы не делать ничего, пока игрок в другом приложении.

Камера

client.fov()поле зрения из настроек
client.sensitivity()чувствительность мыши 0..1
client.perspective()first, back или front
client.set_perspective(name)переключить вид, как F5
-- вид сзади, пока летим на элитрах
events.on("tick", function()
    if not player.exists() then return end
    local want = player.state().gliding and "back" or "first"
    if client.perspective() ~= want then client.set_perspective(want) end
end)

Клавиши

client.key_code(name)код клавиши по имени: r, space, left.shift, f5
client.key_held(code)зажата ли клавиша, только в игре
client.key_down(code)то же, но работает и в открытом GUI
client.bind_name(code)код клавиши → читаемое имя
local R = client.key_code("r")

events.on("key", function(ev)
    if ev.pressed and ev.key == R then
        client.notify("нажата R")
    end
end)

Если клавишу должен выбирать пользователь — используйте ui.keybind, а не зашитый код.

Сервер

client.server()адрес из списка серверов
client.server_name()FunTime, HolyWorld, SpookyTime, CopyTime… или Vanilla
client.brand()ядро сервера из пакета brand
client.singleplayer()одиночный мир
client.ping() / client.tps()задержка и TPS сервера
client.online()игроков в таб-листе
client.tab_list()name, display, ping, gamemode каждого
client.in_pvp()игрок в режиме боя
client.anarchy()номер анархии, 0 — не определён
client.disconnect(reason)выйти с сервера
-- ливнуть, если в табе появился кто-то из списка
local WATCH = { Admin = true, Moder = true }

events.on("tick", function()
    if client.in_pvp() then return end
    for _, e in ipairs(client.tab_list()) do
        if WATCH[e.name] then
            client.disconnect("в сети " .. e.name)
            return
        end
    end
end)

tab_list() собирает таблицу заново при каждом вызове. На больших серверах это сотни записей — не зовите её каждый кадр, хватит раза в секунду.

Силент-ротация

client.silent.set(yaw, pitch) отправляет серверу углы, не трогая камеру. Пока скрипт держит ротацию, её видят античит и другие игроки; камера остаётся за вами. Снять — client.silent.clear(), она снимается и сама при выключении скрипта.

events.on("tick", function()
    local t = world.nearest_player(6)
    if not t then return client.silent.clear() end
    local yaw, pitch = util.rotation_to(t.x(), t.y() + 1.5, t.z())
    client.silent.set(yaw, pitch)
end)

player.set_rotation — другое: он крутит настоящую камеру.