Клиент и сервер
Всё, что касается самого клиента и подключения: сообщения игроку, экраны, камера, клавиши, таб-лист, 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 — или nilclient.close_screen()закрыть что угодноclient.window()размер окна в пикселях и в координатах HUD, fullscreen, focusedclient.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..1client.perspective()first, back или frontclient.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, f5client.key_held(code)зажата ли клавиша, только в игреclient.key_down(code)то же, но работает и в открытом GUIclient.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… или Vanillaclient.brand()ядро сервера из пакета brandclient.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 — другое: он крутит настоящую камеру.