events.on(event, callback) -> id
Подписаться: load/unload/tick/render/render3d/key/mouse/world.
Создавайте свои модули, HUD и интерфейсы. Рисуйте в мире, управляйте ротациями и используйте данные клиента из Lua.
Nameless передаёт скрипту готовые пространства имён: events, modules, render, render3d, player, world, rotation и другие. Импортировать их не нужно.
print(client.version()). Старый JAR не получает API при обновлении сайта.Среда: Lua 5.2, LuaJ Figura 3.0.8. Вызовы API выполняются на клиентском потоке. os, io, произвольная Java и сетевые запросы не открыты.
.lua в корне папки.Стандартная папка Windows: C:\NamelessDLC\client26_3\lua. Параметр nameless.dataDir меняет корень данных.
ЛКМ переключает загрузку, R перезагружает, ПКМ раскрывает настройки ui.*. Скрипты не загружаются автоматически. Ошибки отображаются в Lua-разделе и журнале Minecraft.
require("helpers.math") читает lua/helpers/math.lua. Кэш импортов отдельный для каждого скрипта. Выход за пределы папки запрещён.
Сохраните как hello.lua и загрузите через Lua-раздел. Эта надпись появится в игре.
events.on("render", function(e)
if not player.get() then return end
render.text("Hello, Nameless", 20, 20, 12, 0xFFFFFFFF)
end)Функции пространств имён вызываются через точку: player.get(). Методы объектов — через двоеточие: module:is_enabled(). Массивы Lua начинаются с 1, слоты инвентаря — с 0.
modules.create(name, category, description) регистрирует настоящий модуль в клиенте. Он начинается выключенным и появляется в стандартном ClickGUI. Категории: COMBAT, MOVEMENT, PLAYER, OTHER, RENDER.
local m = modules.create("My Module", "RENDER", "My Lua module")
local enabled = m:boolean("Show text", true)
local size = m:slider("Font size", 12, 8, 24, 1)
local mode = m:choice("Mode", "Simple", {"Simple", "Detailed"})
local tint = m:color("Tint", 0xFFFFFFFF)
m:set_key(75) -- K
m:on_enable(function() print("Enabled") end)
m:on_disable(function() print("Disabled") end)
m:on("render", function(e)
if enabled:get() then
render.text(mode:get(), 20, 80, size:get(), tint:get())
end
end)m:on(event, callback) вызывает обработчик только при включённом модуле. Обычный events.on работает независимо от состояния модулей.
is_enabled(), set_enabled(bool), toggle(), get_key(), set_key(code), settings(), setting(name). У созданного модуля также есть on, on_enable, on_disable, boolean, slider, choice, color.
get([option]), set(value[, option]), info(), visible(), press(). press применим к кнопкам. Значения проверяются по типу и диапазону; выбор должен существовать в choices.
Настройки модулей сохраняются в стандартных конфигах клиента. Загружайте скрипт перед применением конфига с его настройками. ui.* создаёт отдельные постоянные настройки в карточке Lua-скрипта.
events.on(name, callback) возвращает id подписки. events.off(id) удаляет её.
| Событие | Аргумент | Когда |
|---|---|---|
load / unload | нет | После загрузки / перед штатной выгрузкой |
tick | нет | Тик локального игрока в мире |
world | нет | Смена или загрузка мира |
key | integer | Нажатие bind при закрытом GUI |
mouse | button, action, x, y | Штатные mouse hooks клиента |
render | width, height, partial_ticks | Отрисовка HUD |
render3d | partial_ticks | Отрисовка мира |
gui_render | width, height, mouse_x, mouse_y, partial_ticks | Отрисовка собственного экрана |
gui_mouse | x, y, button, action | Нажатие / отпускание мыши на своём экране |
gui_key | key, action | Нажатие / отпускание клавиши на своём экране |
gui_char | string | Текстовый ввод на своём экране |
gui_scroll | x, y, horizontal, vertical | Прокрутка на своём экране |
gui_close | нет | Закрытие / замена своего экрана |
action=1 — нажатие, action=0 — отпускание. Коды клавиш совместимы с GLFW: K=75, Insert=260, Escape=256. Кнопки мыши начинаются с 0.
Для повторных действий используйте tick, для задержки — client.after(ms, callback). Таймеры обслуживаются только на тиках игрока. Не задерживайте поток циклами ожидания.
hud.create(id, x, y, width, height, callback) создаёт HUD. Откройте чат и перетащите элемент мышью. Позиция сохраняется для этого скрипта.
-- Drag in chat. The position is saved for this script.
hud.create("status", 20, 40, 180, 48, function(e)
local p = player.get()
if not p then return end
render.panel(e.x, e.y, e.width, e.height)
render.text("Nameless / Lua", e.x + 10, e.y + 8, 10, 0xFFFFFFFF)
render.text(string.format("%s HP %.0f", p.name, p.health),
e.x + 10, e.y + 26, 9, 0xFFB8B8B8)
end)Callback получает x, y, width, height, partial_ticks, editing. Рисуйте с учётом e.x/e.y. Handle поддерживает position(), set_position(x,y), set_visible(bool), remove().
Все 2D-координаты используют фиксированный масштаб 2: окно 1920×1080 даёт область 960×540 независимо от GUI scale Minecraft.
gui.open(title) открывает экран вашего скрипта и освобождает курсор. В gui_render доступны все функции render.*. Вы можете нарисовать любую компоновку и обработать ввод через события.
ui.boolean("Show HUD", true)
ui.slider("Size", 12, 8, 20)
-- GLFW-compatible code for Insert. Escape closes the screen.
events.on("key", function(key)
if key == 260 then gui.open("My Click GUI") end
end)
events.on("gui_render", function(e)
local x, y = (e.width - 260) / 2, (e.height - 150) / 2
render.panel(x, y, 260, 150)
render.text("My Click GUI", x + 16, y + 16, 13, 0xFFFFFFFF)
local enabled = gui.checkbox("hud", "Show HUD", ui.get("Show HUD"), x + 16, y + 50, 228)
if enabled ~= ui.get("Show HUD") then ui.set("Show HUD", enabled) end
local size = gui.slider("size", "Font size", ui.get("Size"), 8, 20, x + 16, y + 76, 228)
if size ~= ui.get("Size") then ui.set("Size", size) end
if gui.button("close", "Close", x + 16, y + 106, 228, 26) then gui.close() end
end)
events.on("render", function(e)
if ui.get("Show HUD") then render.text("Lua HUD", 20, 20, ui.get("Size"), 0xFFFFFFFF) end
end)gui.button возвращает true один раз за клик, gui.checkbox — новое значение. Вызовы делайте каждый кадр в gui_render. id задаёт имя элемента. Встроенного автоматического размещения нет: координаты и размеры задаёт скрипт.
Для текстового поля используйте gui_char, для Backspace — gui_key, для прокрутки — gui_scroll. Escape закрывает экран; gui.close() возвращает предыдущий экран. Скрипт управляет только своим экраном.
Рисуйте в render, gui_render или callback HUD. Доступны прямоугольники, обводки, текст, линии, круги, градиенты, стекло, общий материал HUD и clipping.
events.on("render", function(e)
render.rect(20, 100, 180, 60, 0xE0181818, 6)
render.outline(20, 100, 180, 60, 1, 0xFF444444, 6)
render.with_clip(20, 100, 180, 60, function()
render.text("Custom rendering", 30, 120, 12, color.rgba(255,255,255))
end)
end)Цвета имеют формат 0xAARRGGBB. color.rgba, color.alpha, color.mix помогают собирать и смешивать их. render.with_clip закрывает scissor даже при ошибке.
Сначала render3d.push(x,y,z) задаёт абсолютную точку мира. Дальнейшие координаты локальные. Парный pop() восстанавливает матрицу. Внутри доступны translate, rotate_x/y/z и scale.
local mod = modules.create("Lua World Marker", "RENDER", "3D marker at the local player")
local height = mod:slider("Height", 1, 0.2, 3, 0.1)
local tint = mod:color("Color", 0x704AC7A1)
mod:set_key(75) -- K. Module starts disabled.
mod:on("render3d", function(e)
local p = player.get()
if not p then return end
render3d.push(p.x - 0.35, p.y, p.z - 0.35)
render3d.box(0.7, height:get(), 0.7, tint:get())
render3d.pop()
end)render3d.mesh(vertices) создаёт меш: плоский массив, по девять чисел на треугольник. Создавайте его один раз при загрузке. render3d.draw(id,argb) рисует в текущей матрице. triangle и quad строят геометрию напрямую.
render3d.camera() возвращает координаты и углы камеры, light(x,y,z) — освещённость, shade(factor) — множитель яркости. Геометрия имеет тест глубины: блоки её закрывают. Состояние матриц сбрасывается между скриптами.
API 2.1 даёт контроллер с состоянием и возможность полностью описать алгоритм в Lua. Контроллер принимает EntityHandle другого игрока или точку {x,y,z}.
local r = rotation.controller({
mode = "spring", -- также linear, exponential, custom
yaw_speed = 240, -- градусы в секунду
pitch_speed = 120,
acceleration = 1000, -- градусы / секунду²
response = 10,
damping = 1,
point = "chest",
prediction = 0.5, -- тики наблюдаемого движения цели
visible = true,
silent = true,
quantize = true,
respect_owner = true
})
events.on("tick", function()
if input.key_down(74) then
r:update(entities.nearest({range = 16, friends = false}))
else
r:release(true)
end
end)spring учитывает скорость, ускорение, response и damping. linear использует ограниченную скорость с разгоном. exponential сближается с целью по экспоненте. В режиме custom следующие углы определяет ваш callback.
Callback получает желаемые углы, ошибки по осям, текущую угловую скорость, dt, цель, точку наведения и постоянную таблицу state. Верните {yaw,pitch} либо nil, чтобы пропустить применение. Дополнительное сглаживание к результату custom не применяется.
-- Hold J to follow another player. Vanilla transmits the resulting rotation.
-- The callback below defines the angular dynamics entirely in Lua.
local controller = rotation.controller({
mode = "custom",
point = "chest",
prediction = 0.5, -- observed target motion, half a tick ahead
visible = true,
silent = true,
quantize = true, -- continuous state retains fractions of a mouse count
respect_owner = true, -- yield to another active rotation owner
callback = function(c)
local s = c.state
local dt = c.dt
local distance = c.target and c.target:get_distance() or 4
local response = distance < 4 and 10 or 7
-- Critically damped response with a Lua-defined acceleration limit.
local function axis(error, velocity, speed)
local acceleration = response * response * error - 2 * response * velocity
acceleration = math.max(-1200, math.min(1200, acceleration))
return math.max(-speed, math.min(speed, velocity + acceleration * dt))
end
s.yaw_velocity = axis(c.delta_yaw, s.yaw_velocity or 0, 200)
s.pitch_velocity = axis(c.delta_pitch, s.pitch_velocity or 0, 100)
return {
yaw = c.continuous_yaw + s.yaw_velocity * dt,
pitch = c.continuous_pitch + s.pitch_velocity * dt
}
end
})
local target
events.on("tick", function()
if not input.key_down(74) then
target = nil
controller:release(true)
return
end
if not target or not target:is_valid() or not target:is_alive()
or target:get_distance() > 16 or target:is_friend() then
target = entities.nearest({range = 16, friends = false, fov = 120, sort = "angle"})
end
controller:update(target) -- one update per game tick, dt defaults to 0.05 s
end)
events.on("world", function() target = nil; controller:release(false) end)Контекст: yaw, pitch, continuous_yaw, continuous_pitch, target_yaw, target_pitch, delta_yaw, delta_pitch, yaw_velocity, pitch_velocity, dt, sensitivity, target, point, state. Для накопления движений меньше шага мыши рассчитывайте следующий угол от continuous_yaw/continuous_pitch.
point: nearest, center, eyes, chest, feet, relative. Для relative задайте x/y/z от 0 до 1 внутри хитбокса. Prediction — от 0 до 5 тиков наблюдаемого движения. Partial_ticks — от 0 до 1. Visible=true проверяет выбранную точку и при необходимости ищет доступную точку внутри хитбокса. При отсутствии такой точки update вернёт nil и отпустит свою ротацию.
update(target[,dt=.05]) — расчёт и применение в tick. Повторный вызов за тот же тик не умножает скорость.calculate(target[,dt]) — расчёт без применения.step(yaw,pitch[,dt]) — расчёт по готовым целевым углам без применения.reset([yaw,pitch]) — сброс скорости и Lua-state.configure(options) — изменить параметры.release([smooth=true]) — отпустить только свою ротацию, сбросить состояние.state() — углы, непрерывные углы, скорости, owns_rotation, target_uuid и state.Dt задаётся в секундах: 0.000001–0.25, по умолчанию 0.05. Контроллер сам не подписывается на события. До 32 контроллеров на скрипт. При respect_owner=true чужая активная ротация не перехватывается: результат содержит blocked=true.
rotation.apply(yaw,pitch,{silent=true,quantize=false}) применяет ваши углы без скрытого сглаживания и округления. Есть wrap, delta, lerp, angles, direction, quantize. rotation.trace(yaw,pitch,range,entity) проверяет луч по хитбоксу с учётом блока перед целью.
Плавные контроллеры сохраняют доли шага чувствительности отдельно от отправленного угла. Pitch остаётся в пределах −90..90, переход yaw через −180/180 идёт по короткой дуге. При выгрузке освобождается только ротация, принадлежащая этому скрипту или его контроллеру.
entities.players() возвращает других загруженных игроков. Себя он исключает по умолчанию. Это handles с методами для чтения актуальных данных конкретного игрока.
for _, enemy in ipairs(entities.players({range = 64})) do
print(enemy.name,
enemy:get_health(), -- текущее HP
enemy:get_max_health(), -- максимальное HP
enemy:get_absorption(), -- жёлтые сердца
enemy:get_armor()) -- очки брони
local armor = enemy:get_equipment()
print(armor.chest.id, armor.chest.durability_percent)
endlocal enemy = entities.nearest({
range = 16, friends = false, fov = 120,
sort = "angle", visible = true
})
if enemy and enemy:is_valid() then
local hp = enemy:get_health()
local helmet = enemy:get_item("head")
end
local named = entities.by_name("PlayerName")
local same_player = entities.by_uuid("00000000-0000-0000-0000-000000000000")entities.query выбирает также мобов и другие сущности. Общие фильтры: range, alive, visible, friends, spectators, invisible, fov, sort, limit, predicate. Для query также доступны players_only, living_only, type.
Значения по умолчанию: range=64, alive=true, visible=false, friends=true, spectators=false, invisible=true, fov=360, include_self=false, limit=128. friends=false исключает друзей. Сортировка: distance, health, armor, angle. Predicate получает handle и возвращает boolean.
| Методы | Данные |
|---|---|
get_health / get_max_health / get_absorption / get_total_health | HP, предел HP, поглощение и HP вместе с поглощением |
get_armor / get_armor_toughness | Очки брони и её твёрдость |
get_equipment / get_item(slot) | Предметы в head/chest/legs/feet/mainhand/offhand |
get_effects / get_ping | Эффекты, усилитель и длительность; пинг из списка игроков |
get_position([partial_ticks]) / get_eye_position / get_bounds | Интерполированная позиция, глаза и хитбокс |
get_velocity / get_distance / get_rotation | Наблюдаемое перемещение за тик, дистанция и углы |
is_valid / is_alive / is_player / is_visible / is_friend | Проверки текущего состояния |
get_aim_point([options]) / snapshot | Точка наведения и полный обновлённый снимок |
Предмет содержит id, name, count, empty, damage, max_damage, remaining_durability, durability_percent, enchanted. get_armor() возвращает очки защиты, а get_equipment() — сами предметы и их прочность.
Методы каждый раз находят сущность по id, UUID и исходному миру. После удаления или смены мира is_valid() вернёт false, методы данных — nil. Handle не начнёт ссылаться на нового игрока с повторно использованным id.
Поля вроде enemy.health и enemy.x остаются снимком момента получения. Для актуального значения вызывайте enemy:get_health(), enemy:get_position() или enemy:snapshot(). world.players() остаётся прежним API снимков, включая себя.
HP и экипировка берутся из данных, переданных сервером клиенту Minecraft. Скрытые сервером значения API восстановить не может. get_velocity() рассчитывает наблюдаемое движение удалённого игрока, чья локальная физическая velocity может быть нулевой.
-- Other players only. No local-player health is used for this HUD.
local target
events.on("tick", function()
target = entities.nearest({range = 64, players_only = true})
end)
events.on("world", function() target = nil end)
hud.create("other_player", 20, 140, 240, 94, function(e)
if not target or not target:is_valid() then return end
local hp, absorption = target:get_health(), target:get_absorption()
local armor, equipment = target:get_armor(), target:get_equipment()
if not hp or not equipment then return end
render.panel(e.x, e.y, e.width, e.height)
render.text(target.name, e.x + 10, e.y + 8, 11, 0xFFFFFFFF)
render.text(string.format("HP %.1f / %.1f + %.1f | Armor %d",
hp, target:get_max_health(), absorption, armor), e.x + 10, e.y + 29, 9, 0xFFCCCCCC)
local chest = equipment.chest
render.text(chest.empty and "Chest: empty" or string.format("%s: %.0f%% durability",
chest.name, chest.durability_percent), e.x + 10, e.y + 49, 9, 0xFFCCCCCC)
render.text(string.format("Distance %.1f | Ping %s ms", target:get_distance(),
tostring(target:get_ping() or "?")), e.x + 10, e.y + 69, 9, 0xFFCCCCCC)
end)Через modules.list() и module:settings() можно исследовать реальные модули и настройки установленной сборки. Не угадывайте названия режимов — читайте setting:info().
local sprint = modules.get("Sprint")
print(sprint.name, sprint:is_enabled())
for _, setting in ipairs(sprint:settings()) do
print(setting.name, setting.type)
end
ui.slider("Opacity", 0.8, 0, 1)
local opacity = ui.get("Opacity")
storage.set("counter", storage.get("counter", 0) + 1)Также доступны инвентарь и контейнеры, локальный и серверный чат, друзья, темы и конфиги. client.window() сообщает FPS и размеры окна, client.server() — текущий сервер, client.screen() — название экрана.
storage хранит собственные числа, строки и boolean в lua/.settings/<filename>.json. Произвольные таблицы не сохраняются. Значения ui.* используют то же хранилище и проходят проверку типа.
При ошибке или выгрузке удаляются собственные модули, HUD, таймеры, обработчики и экран. Принадлежащая скрипту ротация освобождается.
unload вызывается при штатной выгрузке. После ошибки скрипт уже остановлен: Java-очистка выполнится, но Lua unload не гарантируется. Изменения встроенных модулей, тем, друзей и конфигов автоматически не откатываются.
Компиляция и автономные проверки движка не подтверждают внешний вид и поведение на сервере. Свои скрипты проверяйте в отдельном мире.
Справочник функций, сформированный из Java-регистраций API 2.1.
events.on(event, callback) -> idПодписаться: load/unload/tick/render/render3d/key/mouse/world.
events.off(id) -> booleanУдалить свою подписку.
Справочник функций, сформированный из Java-регистраций API 2.1.
client.log(text)Сообщение в локальный чат с именем скрипта.
client.name() -> stringИмя текущего Lua-файла.
client.version() -> stringВерсия Lua API.
client.in_game() -> booleanЗагружены ли игрок и мир.
client.time() -> millisecondsТекущее время Unix в миллисекундах.
client.ticks() -> numberКоличество клиентских тиков после запуска LuaManager.
client.screen() -> string|nilЗаголовок открытого экрана.
client.after(delay_ms, callback) -> idОдноразовый таймер, выполняемый на клиентском тике.
client.cancel(id) -> booleanОтменить таймер своего скрипта.
client.command(text) -> booleanВыполнить существующую локальную команду клиента с префиксом.
client.api() -> arrayВсе зарегистрированные функции API с сигнатурами.
client.export_api()Обновить Lua_API.txt, включая все реальные модули и их настройки.
client.window() -> tableРазмер framebuffer, GUI scale, FPS и фокус окна.
client.server() -> table|nilИмя и адрес текущего сервера; nil в одиночной игре и меню.
Справочник функций, сформированный из Java-регистраций API 2.1.
chat.print(text)Показать текст только локальному игроку.
chat.send(text)Отправить обычное сообщение на сервер.
chat.command(command)Отправить серверную команду, начальный / необязателен.
Справочник функций, сформированный из Java-регистраций API 2.1.
modules.list() -> arrayВсе модули клиента; каждый элемент является ModuleHandle.
modules.get(name) -> ModuleHandleПолучить любой модуль по имени, регистр и пробелы несущественны.
modules.enabled(name) -> booleanСостояние любого модуля.
modules.set_enabled(name, enabled)Включить/выключить любой зарегистрированный модуль.
modules.toggle(name)Вызвать штатное переключение или действие модуля.
modules.create(name [,category='OTHER', description='']) -> ModuleHandleСоздать собственный модуль; до 32 на скрипт. Удаляется при выгрузке.
Справочник функций, сформированный из Java-регистраций API 2.1.
settings.list(module) -> arrayВсе настройки модуля как SettingHandle.
settings.get(module, setting [, option]) -> valueЧитать любую настройку; option — пункт MultiBooleanSetting.
settings.set(module, setting, value [, option])Записать настройку с проверкой типа, диапазона и допустимых значений.
settings.info(module, setting) -> tableИмя, тип, значение, видимость, min/max/step либо choices.
settings.press(module, setting)Нажать настройку ButtonSetting.
Справочник функций, сформированный из Java-регистраций API 2.1.
player.get() -> table|nilСнимок игрока: координаты, поворот, здоровье, еда, скорость и состояния.
player.position() -> {x,y,z}Координаты игрока.
player.velocity() -> {x,y,z}Текущая скорость игрока.
player.set_velocity(x, y, z)Установить локальную скорость; сервер может её корректировать.
player.rotation() -> {yaw,pitch}Текущий поворот.
player.set_rotation(yaw, pitch)Повернуть локальную камеру, pitch ограничен -90..90.
player.jump()Обычный прыжок игрока.
player.set_sprinting(enabled)Установить состояние спринта.
player.set_sneaking(enabled)Установить локальное приседание.
player.effects() -> arrayАктивные эффекты: id, amplifier, duration (тики).
player.target() -> table|nilСущность под прицелом.
Справочник функций, сформированный из Java-регистраций API 2.1.
world.info() -> table|nilИзмерение, игровое время и число игроков.
world.players() -> arrayСнимки всех загруженных игроков.
world.entities([radius=32]) -> arrayДо 512 загруженных сущностей в радиусе 0..256 блоков.
world.block(x, y, z) -> tableСостояние блока: id, air, hardness.
world.raycast(x1,y1,z1,x2,y2,z2) -> tableТрассировка блоков, до 256 блоков: hit,x,y,z,block_x,block_y,block_z,side.
Справочник функций, сформированный из Java-регистраций API 2.1.
inventory.get(slot) -> tableСлот инвентаря игрока, индекс начинается с 0.
inventory.list() -> arrayВсе слоты игрока; запись содержит slot, id, name, count, damage, max_damage, empty.
inventory.selected() -> 0..8Выбранный слот хотбара.
inventory.select(slot)Выбрать слот хотбара 0..8.
inventory.count(item_id) -> numberКоличество предметов с точным registry-id.
inventory.click(slot, button [, action='PICKUP'])Штатный clickSlot открытого контейнера; индексы относятся к ScreenHandler.
inventory.container() -> tablesync_id и список слотов открытого контейнера.
Справочник функций, сформированный из Java-регистраций API 2.1.
input.key_down(glfw_key) -> booleanФизическое состояние клавиши GLFW 32..348.
input.mouse_down(button) -> booleanФизическое состояние кнопки мыши 0..7.
input.mouse() -> {x,y}Курсор в координатах HUD с фиксированным GUI scale 2.
Справочник функций, сформированный из Java-регистраций API 2.1.
render.size() -> {width,height}Размер HUD в координатах фиксированного GUI scale 2.
render.rect(x,y,w,h,argb [,radius=0])Прямоугольник; только внутри render callback.
render.outline(x,y,w,h,thickness,argb [,radius=0])Обводка прямоугольника.
render.text(text,x,y,size,argb [,centered=false])Текст существующим SF Regular шрифтом клиента.
render.text_width(text,size) -> numberШирина текста; вызывать в render.
render.text_height(size) -> numberВысота текста; вызывать в render.
render.glass(x,y,w,h,radius,argb,strength)Жидкое стекло, strength 0..100; только в render.
render.panel(x,y,w,h [,scale=1,alpha=1])Общий фон HUD с текущей темой и настройкой стекла.
render.line(x1,y1,x2,y2,thickness,argb)Линия поверх HUD.
render.circle(cx,cy,radius,argb)Круг поверх HUD.
render.gradient(x,y,w,h,radius,argb1,argb2 [,horizontal=false])Градиентная заливка.
render.with_clip(x,y,w,h,callback)Временный scissor; автоматически закрывается даже при ошибке.
Справочник функций, сформированный из Java-регистраций API 2.1.
render3d.push([x, y, z])С координатами — новая точка прямо в мире (абсолютные x,y,z); без — копия текущей матрицы. Закрывать через render3d.pop(); только в render3d.
render3d.pop()Вернуть матрицу, сохранённую последним render3d.push.
render3d.translate(x, y, z)Сдвиг в локальных осях текущей матрицы (блоки).
render3d.rotate_x(degrees)Поворот вокруг локальной оси X, градусы (правая система координат).
render3d.rotate_y(degrees)Поворот вокруг локальной оси Y (вверх), градусы.
render3d.rotate_z(degrees)Поворот вокруг локальной оси Z, градусы.
render3d.scale(sx [, sy, sz])Масштаб локальных осей; с одним числом — равномерный; отрицательное значение зеркалит.
render3d.shade(factor)Множитель яркости 0..2 для следующих рисунков; сбрасывается в начале каждого render3d.
render3d.triangle(x1,y1,z1, x2,y2,z2, x3,y3,z3, argb)Закрашенный треугольник в локальных координатах текущей матрицы; двусторонний, с глубиной и плоским освещением.
render3d.quad(x1,y1,z1, x2,y2,z2, x3,y3,z3, x4,y4,z4, argb)Четырёхугольник из двух треугольников (вершины по кругу).
render3d.mesh(vertices) -> idСоздать меш из плоского массива: 9 чисел на треугольник (до 4096 треугольников, до 64 мешей на скрипт). Можно вызывать при загрузке.
render3d.draw(mesh_id, argb)Нарисовать меш в текущей матрице одним цветом.
render3d.light(x, y, z) -> 0..1Освещённость мира в точке: максимум из небесного света (с учётом времени суток и погоды) и света блоков.
render3d.camera() -> {x,y,z,yaw,pitch}Положение и поворот камеры (в том числе от третьего лица).
render3d.box(width,height,depth,argb)Закрашенный параллелепипед от локального (0,0,0); перед вызовом render3d.push(x,y,z).
Справочник функций, сформированный из Java-регистраций API 2.1.
color.rgba(r,g,b [,a=255]) -> argbСобрать цвет из каналов 0..255.
color.alpha(argb,alpha) -> argbЗаменить альфу (0..255).
color.mix(argb1,argb2,factor) -> argbСмешать каналы, factor 0..1.
Справочник функций, сформированный из Java-регистраций API 2.1.
theme.list() -> arrayНазвания всех тем клиента.
theme.current() -> stringНазвание активной темы.
theme.select(name)Выбрать существующую тему.
theme.color(slot) -> argbЦвет темы по имени слота: accent/background/outline/text/text2/hud/separator/light_bg/module_on/slider/common/button/esp.
theme.set_color(slot,argb)Изменить цвет; встроенная тема автоматически копируется и сохраняется.
theme.get(name) -> number|booleanopacity/blur/common_strength/hud_glass/clickgui_glass/shadow/distortion.
theme.set(name,value)Записать параметр темы; glass имеет диапазон 0..100; сохранить.
Справочник функций, сформированный из Java-регистраций API 2.1.
friends.list() -> arrayСписок друзей клиента.
friends.contains(name) -> booleanПроверить друга.
friends.add(name) -> booleanДобавить друга и сохранить.
friends.remove(name) -> booleanУдалить друга и сохранить.
Справочник функций, сформированный из Java-регистраций API 2.1.
config.list() -> arrayСуществующие конфиги клиента.
config.save(name) -> booleanСохранить конфиг клиента.
config.load(name) -> booleanЗагрузить конфиг клиента.
Справочник функций, сформированный из Java-регистраций API 2.1.
storage.get(key [,default]) -> valueЧитать значение настроек собственного скрипта.
storage.set(key,value)Сохранить собственное число/строку/boolean; зарегистрированные UI-настройки проверяются.
Справочник функций, сформированный из Java-регистраций API 2.1.
ui.boolean(name,default) -> valueСоздать boolean-настройку скрипта в Lua-колонке.
ui.slider(name,default,min,max) -> valueСоздать ползунок собственного скрипта.
ui.choice(name,default,choices) -> valueСоздать выбор из списка собственного скрипта.
ui.get(name) -> valueТекущее значение UI-настройки скрипта.
ui.set(name,value)Изменить и сохранить UI-настройку скрипта.
Справочник функций, сформированный из Java-регистраций API 2.1.
gui.open([title='Lua GUI'])Открыть собственный экран; рисование gui_render, ввод gui_mouse/gui_key/gui_char/gui_scroll, Escape закрывает.
gui.close()Закрыть экран своего скрипта.
gui.is_open() -> booleanОткрыт ли экран этого скрипта.
gui.button(id,label,x,y,w,h) -> booleanКнопка immediate-mode в gui_render; true один раз за клик. id — уникальное имя.
gui.checkbox(id,label,value,x,y,w) -> booleanЧекбокс в gui_render; возвращает новое значение, сохранение через ui.set/storage.set.
gui.slider(id,label,value,min,max,x,y,width) -> numberПолзунок в gui_render; возвращает значение. Сохраняйте через ui.set/storage.set при изменении.
Справочник функций, сформированный из Java-регистраций API 2.1.
hud.create(id,x,y,width,height,callback) -> HudHandleСоздать HUD с callback(event). handle:position(), :set_position(x,y), :set_visible(bool), :remove(). Перетаскивается в чате.
Справочник функций, сформированный из Java-регистраций API 2.1.
rotation.get() -> {yaw,pitch,camera_yaw,camera_pitch,active}Текущая серверная ротация и независимая камера.
rotation.look_at(x,y,z) -> {yaw,pitch}Рассчитать углы от глаз игрока до точки; не меняет поворот.
rotation.set(yaw,pitch [,silent=true,yaw_speed=180,pitch_speed=90])Поворот с ограничением скорости и сеткой чувствительности. silent=true использует CombatRotation. Обновлять в tick; release освобождает свою ротацию.
rotation.release([smooth=true])Освободить только ротацию этого скрипта. Вызывается автоматически при выгрузке.
rotation.sensitivity() -> numberРазмер шага чувствительности мыши в градусах.
rotation.controller([options]) -> RotationControllerКонтроллер spring/linear/exponential/custom: :update(target[,dt]), :calculate(target[,dt]), :step(yaw,pitch[,dt]), :reset([yaw,pitch]), :release([smooth]), :state(), :configure(options). Угловые скорости в градусах/сек.
rotation.apply(yaw,pitch [,options])Применить вычисленные Lua углы без скрытого сглаживания. options: silent=true,quantize=true. Для накопления долей мышиного шага используйте контроллер.
rotation.wrap(angle) -> numberНормализовать угол в [-180,180).
rotation.delta(from,to) -> numberКратчайшая знаковая разница углов, в том числе через -180/180.
rotation.lerp(from,to,factor) -> numberИнтерполяция угла по короткой дуге; factor 0..1.
rotation.direction(yaw,pitch) -> {x,y,z}Единичное направление по yaw/pitch в градусах.
rotation.angles(from,to) -> {yaw,pitch}Рассчитать углы между двумя {x,y,z}; независимо от локального игрока.
rotation.quantize(yaw,pitch,base_yaw,base_pitch [,step]) -> {yaw,pitch}Округлить углы на сетку мыши относительно базы. Для аккумуляции малых движений используйте controller.
rotation.trace(yaw,pitch,range [,entity]) -> tableПроверить луч из глаз: block_hit,entity_hit,distance,x,y,z. entity — handle/id; entity_hit учитывает перекрытие блоком.
rotation.is_owner() -> booleanПринадлежит ли текущая ротация прямым вызовам этого скрипта. У controller есть свой state().owns_rotation.
Справочник функций, сформированный из Java-регистраций API 2.1.
entities.get(id) -> EntityHandle|nilЗагруженная сущность: снимок полей и живые методы get_health/get_armor/get_equipment/snapshot/is_valid. nil вне мира или после удаления.
entities.visible(id) -> booleanПроверить прямую видимость от игрока до сущности.
entities.players([options]) -> EntityHandle[]Другие загруженные игроки, себя исключает по умолчанию. options: range,alive,visible,friends,spectators,invisible,fov,sort,limit,predicate,include_self.
entities.query([options]) -> EntityHandle[]Сущности с фильтрами как entities.players; players_only/living_only/type. sort: distance/health/armor/angle. Вне мира пустой массив.
entities.nearest([options]) -> EntityHandle|nilБлижайший другой игрок по тем же фильтрам; players_only=false разрешает другие типы.
entities.by_uuid(uuid) -> EntityHandle|nilНайти загруженную сущность по UUID. Handle безопасен при смене мира и повторном использовании id.
entities.by_name(name) -> EntityHandle|nilНайти другого загруженного игрока по точному имени без учёта регистра.
entities.aim_point(entity [,options]) -> {x,y,z}|nilТочка хитбокса: point=nearest/center/eyes/chest/feet/relative; x,y,z=0..1 для relative; prediction=0..5 тиков, partial_ticks=0..1, visible=true ищет видимую точку.