20 KiB
Скриптинг
В качестве языка сценариев используется LuaJIT
Подразделы:
- События движка
- Пользовательский ввод
- Файловая система и сериализация
- Свойства и методы UI элементов
- Сущности и компоненты
- Библиотеки
- Модуль core:bit_converter
- Модуль core:data_buffer
- Модули core:vector2, core:vector3
require "контентпак:имя_модуля" -- загружает lua модуль из папки modules (расширение не указывается)
Библиотека pack
pack.is_installed(packid: str) -> bool
Проверяет наличие установленного пака в мире
pack.data_file(packid: str, filename: str) -> str
Возвращает путь к файлу данных по типу: world:data/packid/filename
и создает недостающие директории в пути.
Используйте эту функцию при сохранении настроек пака или иных данных в мире.
Пример:
file.write(pack.data_file(PACK_ID, "example.txt"), text)
Для пака containermod запишет текст в файл world:data/containermod/example.txt
Библиотека player
player.get_pos(playerid: int) -> number, number, number
Возвращает x, y, z координаты игрока
player.set_pos(playerid: int, x: number, y: number, z: number)
Устанавливает x, y, z координаты игрока
player.get_rot(playerid: int) -> number, number, number
Возвращает x, y, z вращения камеры (в радианах)
player.set_rot(playerid: int, x: number, y: number, z: number)
Устанавливает x, y вращения камеры (в радианах)
player.get_inventory(playerid: int) -> int, int
Возвращает id инвентаря игрока и индекс выбранного слота (от 0 до 9)
player.is_flight() -> bool
player.set_flight(bool)
Геттер и сеттер режима полета
player.is_noclip() -> bool
player.set_noclip(bool)
Геттер и сеттер noclip режима (выключенная коллизия игрока)
player.set_spawnpoint(playerid: int, x: number, y: number, z: number)
player.get_spawnpoint(playerid: int) -> number, number, number
Сеттер и геттер точки спавна игрока
player.get_selected_block(playerid: int) -> x,y,z
Возвращает координаты выделенного блока, либо nil
player.get_selected_entity(playerid: int) -> int
Возвращает уникальный идентификатор сущности, на которую нацелен игрок
player.get_entity(playerid: int) -> int
Возвращает уникальный идентификатор сущности игрока
Библиотека world
world.get_list() -> массив таблиц {
name: str,
icon: str
}
Возвращает информацию о мирах: название и предпросмотр (автоматически загружаемая текстура).
world.get_day_time() -> number
Возвращает текущее игровое время от 0.0 до 1.0, где 0.0 и 1.0 - полночь, 0.5 - полдень.
world.set_day_time(time: number)
Устанавливает указанное игровое время.
world.set_day_time_speed(value: number)
Устанавливает указанную скорость для игрового времени.
world.get_day_time_speed() -> number
Возвращает скорость для игрового времени.
world.get_total_time() -> number
Возвращает общее суммарное время, прошедшее в мире
world.get_seed() -> int
Возвращает зерно мира.
world.exists() -> bool
Проверяет существование мира по имени.
world.is_day() -> bool
Проверяет является ли текущее время днём. От 0.2(8 утра) до 0.8(8 вечера)
world.is_night() -> bool
Проверяет является ли текущее время ночью. От 0.8(8 вечера) до 0.2(8 утра)
Библиотека pack
pack.get_folder(packid: str) -> str
Возвращает путь к папке установленного контент-пака.
pack.is_installed(packid: str) -> bool
Проверяет наличие контент-пака в мире
pack.get_installed() -> массив строк
Возращает id всех установленных в мире контент-паков.
pack.get_available() -> массив строк
Возвращает id всех доступных, но не установленных в мире контент-паков.
pack.get_base_packs() -> массив строк
Возвращает id всех базовых паков (неудаляемых)
pack.get_info(packid: str) -> {
id: str,
title: str,
creator: str,
description: str,
version: str,
icon: str,
dependencies: опциональный массив строк
}
Возвращает информацию о паке (не обязательно установленном).
- icon - название текстуры предпросмотра (загружается автоматически)
- dependencies - строки в формате
{lvl}{id}, где lvl:!- required?- optional~- weak например!teal
Библиотека gui
Библиотека содержит функции для доступа к свойствам UI элементов. Вместо gui следует использовать объектную обертку, предоставляющую доступ к свойствам через мета-методы __index, __newindex:
print(document.some_button.text) -- где 'some_button' - id элемета
document.some_button.text = "новый текст"
В скрипте макета layouts/файл_макета.xml - layouts/файл_макета.xml.lua уже доступна переменная document содержащая объект класса Document
gui.str(text: str, context: str) -> str
Возращает переведенный текст.
gui.get_viewport() -> {int, int}
Возвращает размер главного контейнера (окна).
gui.get_env(document: str) -> table
Возвращает окружение (таблица глобальных переменных) указанного документа.
get_locales_info() -> таблица таблиц где
ключ - id локали в формате isolangcode_ISOCOUNTRYCODE
значение - таблица {
name: str # название локали на её языке
}
Возвращает информацию о всех загруженных локалях (res/texts/*).
Библиотека inventory
Библиотека функций для работы с инвентарем.
inventory.get(invid: int, slot: int) -> int, int
Принимает id инвентаря и индекс слота. Возвращает id предмета и его количество. id = 0 (core:empty) обозначает, что слот пуст.
inventory.set(invid: int, slot: int, itemid: int, count: int)
Устанавливает содержимое слота.
inventory.size(invid: int) -> int
Возращает размер инвентаря (число слотов). Если указанного инвентаря не существует, бросает исключение.
inventory.add(invid: int, itemid: int, count: int) -> int
Добавляет предмет в инвентарь. Если не удалось вместить все количество, возвращает остаток.
inventory.get_block(x: int, y: int, z: int) -> int
Функция возвращает id инвентаря указанного блока. Если блок не может иметь инвентарь - возвращает 0.
inventory.bind_block(invid: int, x: int, y: int, z: int)
Привязывает указанный инвентарь к блоку.
inventory.unbind_block(x: int, y: int, z: int)
Отвязывает инвентарь от блока.
Warning
Инвентари, не привязанные ни к одному из блоков, удаляются при выходе из мира.
inventory.clone(invid: int) -> int
Создает копию инвентаря и возвращает id копии. Если копируемого инвентаря не существует, возвращает 0.
inventory.move(invA: int, slotA: int, invB: int, slotB: int)
Перемещает предмет из slotA инвентаря invA в slotB инвентаря invB. invA и invB могут указывать на один инвентарь. slotB будет выбран автоматически, если не указывать явно.
Библиотека block
block.name(blockid: int) -> str
Возвращает строковый id блока по его числовому id.
block.index(name: str) -> int
Возвращает числовой id блока, принимая в качестве агрумента строковый.
block.material(blockid: int) -> str
Возвращает id материала блока.
block.caption(blockid: int) -> str
Возвращает название блока, отображаемое в интерфейсе.
block.get(x: int, y: int, z: int) -> int
Возвращает числовой id блока на указанных координатах. Если чанк на указанных координатах не загружен, возвращает -1.
block.get_states(x: int, y: int, z: int) -> int
Возвращает состояние (поворот + доп. информация) в виде целого числа
block.set(x: int, y: int, z: int, id: int, states: int)
Устанавливает блок с заданным числовым id и состоянием (0 - по-умолчанию) на заданных координатах.
Warning
block.setне вызывает событие on_placed.
block.is_solid_at(x: int, y: int, z: int) -> bool
Проверяет, является ли блок на указанных координатах полным
block.is_replaceable_at(x: int, y: int, z: int) -> bool
Проверяет, можно ли на заданных координатах поставить блок (примеры: воздух, трава, цветы, вода)
block.defs_count() -> int
Возвращает количество id доступных в движке блоков
block.get_picking_item(id: int) -> int
Возвращает числовой id предмета, указанного в свойстве picking-item.
block.raycast(start: vec3, dir: vec3, max_distance: number, [опционально] dest: table) -> {
block: int, -- id блока
endpoint: vec3, -- точка касания луча
iendpoint: vec3, -- позиция блока, которого касается луч
length: number, -- длина луча
normal: vec3 -- вектор нормали поверхности, которой касается луч
} или nil
Бросает луч из точки start в направлении dir. Max_distance указывает максимальную длину луча.
Функция возвращает таблицу с результатами или nil, если луч не касается блока.
Для результата будет использоваться целевая (dest) таблица вместо создания новой, если указан опциональный аргумент.
Вращение
Следующие функции используется для учёта вращения блока при обращении к соседним блокам или других целей, где направление блока имеет решающее значение.
-- Возвращает целочисленный единичный вектор X блока на указанных координатах с учётом его вращения (три целых числа).
-- Если поворот отсутствует, возвращает 1, 0, 0
block.get_X(x: int, y: int, z: int) -> int, int, int
-- То же, но для оси Y (по-умолчанию 0, 1, 0)
block.get_Y(x: int, y: int, z: int) -> int, int, int
-- То же, но для оси Z (по-умолчанию 0, 0, 1)
block.get_Z(x: int, y: int, z: int) -> int, int, int
-- Возвращает индекс поворота блока в его профиле вращения (не превышает 7).
block.get_rotation(x: int, y: int, z: int) -> int
-- Устанавливает вращение блока по индексу в его профиле вращения.
block.set_rotation(x: int, y: int, z: int, rotation: int)
-- Возвращает имя профиля вращения (none/pane/pipe)
block.get_rotation_profile(id: int) -> str
Расширенные блоки
Расширенные блоки - те, размер которых превышает 1x1x1
block.is_extended(id: int) -> bool
Проверяет, является ли блок расширенным.
block.get_size(id: int) -> int, int, int
Возвращает размер блока.
block.is_segment(x: int, y: int, z: int) -> bool
Проверяет является ли блок сегментом расширенного блока, не являющимся главным.
block.seek_origin(x: int, y: int, z: int) -> int, int, int
Возвращает позицию главного сегмента расширенного блока или исходную позицию, если блок не являющийся расширенным.
Пользовательские биты
Выделенная под использования в скриптах часть поля voxel.states хранящего доп-информацию о вокселе, такую как вращение блока. На данный момент выделенная часть составляет 8 бит.
block.get_user_bits(x: int, y: int, z: int, offset: int, bits: int) -> int
Возвращает выбранное число бит с указанного смещения в виде целого беззнакового числа
block.set_user_bits(x: int, y: int, z: int, offset: int, bits: int, value: int) -> int
Записывает указанное число бит значения value в user bits по выбранному смещению
Физика
Информация свойствах блока, используемых физическим движком.
-- Возвращает массив из двух векторов (массивов из 3 чисел):
-- 1. Минимальная точка хитбокса
-- 2. Размер хитбокса
-- rotation_index - индекс поворота блока
block.get_hitbox(id: int, rotation_index: int) -> {vec3, vec3}
Модель
Информация о модели блока.
-- возвращает тип модели блока (block/aabb/custom/...)
block.get_model(id: int) -> str
-- возвращает массив из 6 текстур, назначенных на стороны блока
block.get_textures(id: int) -> таблица строк
Библиотека item
item.name(itemid: int) -> str
Возвращает строковый id предмета по его числовому id (как block.name)
item.index(name: str) -> int
Возвращает числовой id предмета по строковому id (как block_index)
item.stack_size(itemid: int) -> int
Возвращает максимальный размер стопки для предмета.
item.defs_count() -> int
Возвращает общее число доступных предметов (включая сгенерированные)
item.icon(itemid: int) -> str
Возвращает имя иконки предмета для использования в свойстве 'src' элемента image
Библиотека hud
hud.open_inventory()
Открывает инвентарь
hud.close_inventory()
Закрывает инвентарь
hud.open_block(x: int, y: int, z: int) -> int, str
Открывает инвентарь и UI блока. Если блок не имеет макета UI - бросается исключение.
Возвращает id инвентаря блока (при "inventory-size"=0 создаётся виртуальный инвентарь, который удаляется после закрытия), и id макета UI.
hud.show_overlay(layoutid: str, playerinv: bool)
Показывает элемент в режиме оверлея. Также показывает инвентарь игрока, если playerinv - true
Note
Одновременно может быть открыт только один блок
hud.open_permanent(layoutid: str)
Добавляет постоянный элемент на экран. Элемент не удаляется при закрытии инвентаря. Чтобы не перекрывать затенение в режиме инвентаря нужно установить z-index элемента меньшим чем -1. В случае тега inventory, произойдет привязка слотов к инвентарю игрока.
hud.close(layoutid: str)
Удаляет элемент с экрана.
hud.get_block_inventory() -> int
Дает ID инвентаря открытого блока или 0.
hud.get_player() -> int
Дает ID игрока, к которому привязан пользовательский интерфейс.
hud.pause()
Открывает меню паузы.
hud.resume()
Закрывает меню паузы.
hud.is_paused() -> bool
Возвращает true если открыто меню паузы.
hud.is_inventory_open() -> bool
Возвращает true если открыт инвентарь или оверлей.
Библиотека time
time.uptime() -> float
Возвращает время с момента запуска движка в секундах.
time.delta() -> float
Возвращает дельту времени (время прошедшее с предыдущего кадра)