Документация по JS-плагинам для BDEngine

Раздел в процессе написания и будет часто обновляться.

Важно: стабильным и официально поддерживаемым считается только API из window.editorAPI.

Объект window.editor доступен для изучения и экспериментов, но его структура может меняться без предупреждения и не гарантируется совместимость между версиями.

Функции официального API

Описание
Создание окна

Создаёт пользовательское окно внутри редактора, в котором плагин может отражать любой пользовательский HTML контент.

Удаляется после закрытия.

Сигнатура

editorAPI.createWindow(
    name = 'Window',
    name_id = 'default',
    icon = 'icon-layout-grid',
    width = 1100,
    height = 550,
    minWidth = 500,
    minHeight = 400,
    closeFunc = () => {}
);

Пример использования:

// ==UserScript==
// @name         Example window
// @namespace    example-window
// @description  Demonstration editorAPI.createWindow
// ==/UserScript==

(() => {
    const log = (...args) => console.log('[Example Window]', ...args);

    const win = editorAPI.createWindow(
        'My window',
        'my-window',
        'icon-anchor',
        800,
        500,
        400,
        300,
        () => log('The window is closed')
    );

    win.container.innerHTML = `Hello World!`;

})();
Создание модального окна

Создает модальное окно внутри окна сцены, в котором плагин может отражать любой пользовательский HTML контент.

Не удаляется после закрытия(скрытия).

Сигнатура

editorAPI.createModalWindow(name = 'Window');

Пример использования:

// ==UserScript==
// @name         Example modal window
// @namespace    example-modal-window
// @description  Demonstration editorAPI.createModalWindow
// ==/UserScript==

(() => {
    const log = (...args) => console.log('[Example Window]', ...args);

    const win = editorAPI.createModalWindow('My window');

    win.container.innerHTML = 'Hello World!';

    win.showModal();

    // win.hideModal(); - To hide the window

})();
Вставка проекта

Вставляет JSON-проект в формате BDEngine в текущий открытый проект. Как зашифрованный в base64+gzip, так и чистый JSON.

Сигнатура

await editorAPI.mergeContent(content, decode = false);
Добавление встроенных объектов редактора

Создает и добавляет встроенный объект редактора, например BlockDisplay, ItemDisplay или TextDisplay.

Если передан parent, объект сразу добавляется в этого родителя.

Сигнатура

await editorAPI.add(
    identifier,
    type,
    parent = null,
    save = true,
    objPos,
    noReply = false
);

Пример:

const text = await editorAPI.add('Hello', 'TextDisplay');
const item = await editorAPI.add('player_head', 'ItemDisplay');
const block = await editorAPI.add('stone', 'BlockDisplay');
Добавление кастомных объектов плагина

Добавляет в сцену редактора ваш собственный уже созданный объект.

Используйте этот метод для кастомных объектов плагина, например классов на базе Selectable.

Сигнатура

editorAPI.addObject(object, parent = null);

Пример:

class ExampleSelectable extends Selectable {
    constructor(editor) {
        super(editor);
    }
}

const obj = new ExampleSelectable(editor);
editorAPI.addObject(obj);
Добавление кнопки в dock menu

Добавляет кнопку в основное dock menu редактора.

Сигнатура

editorAPI.addButtonDockMenu(
    icon = 'icon-box',
    name = 'New button',
    func = () => {},
    sound = true
);
Добавление кнопки в панель инструментов

Добавляет кнопку в левую или правую панель инструментов.

Сигнатура

editorAPI.addButtonTool(
    icon,
    func,
    right = false,
    sound = true
);
Поиск объектов редактора

Ищет объекты внутри редактора по свойству и значению.

Сигнатура

editorAPI.find(key, val = true);
Получение выбранных объектов

Возвращает массив объектов, которые сейчас выбраны в редакторе.

Сигнатура

editorAPI.getSelectedObjects();

Пример:

const selected = editorAPI.getSelectedObjects();

if (selected.length > 0) {
    console.log('Selected objects:', selected);
    console.log('First selected object:', selected[0]);
}
Получение мешей

Возвращает массив временных объектов THREE.Mesh, собранных из текущей сцены редактора.

Инстансы при этом разворачиваются в обычные объекты THREE.Mesh.

В возвращаемый массив не входят editor helpers, gizmo-объекты и RT-свет.

Сигнатура

editorAPI.getMeshes();

Пример:

const meshes = editorAPI.getMeshes();
console.log('Meshes:', meshes.length);
console.log('First mesh:', meshes[0] || null);
Удаление объектов

Удаляет указанные объекты через стандартный workflow редактора.

Это предпочтительный способ удаления объектов, потому что он использует обычную логику удаления редактора.

Сигнатура

editorAPI.delete(objects);
Удаление выбранных объектов

Удаляет объекты, которые сейчас выделены в редакторе.

Сигнатура

editorAPI.deleteSelected();
Удаление одного объекта

Удобный wrapper для удаления одного объекта.

Сигнатура

editorAPI.removeObject(object);
Обновление редактора

Принудительно обновляет состояние редактора и при необходимости обновляет transform controls.

Сигнатура

editorAPI.update(withControl = false);
Переводы плагина

Плагины могут регистрировать собственные ключи перевода и затем использовать их через gT(...).

Сигнатура

editorAPI.registerTranslations(namespace, translations = {});

Пример:

// ==UserScript==
// @name         Example translations
// @namespace    example-translations
// @description  Demonstration of plugin translations
// ==/UserScript==

(() => {
    editorAPI.registerTranslations('example-translations', {
        en: {
            button: 'Open example window'
        },
        ru: {
            button: 'Открыть окно примера'
        }
    });

    editorAPI.addButtonDockMenu(
        'icon-box',
        gT('example-translations.button', 'Open example window'),
        () => {
            const win = editorAPI.createWindow('Example', 'example-window');
            win.container.innerHTML = '<div>Hello!</div>';
        }
    );
})();

Рекомендуемый вариант: регистрируйте простые ключи вроде button, а затем обращайтесь к ним через gT('your-namespace.button', fallback).

Используйте уникальные ключи перевода, например с префиксом из namespace плагина: my-plugin.some-key.

Sign up to create and share content. Sign up
Студия
Сообщения
Войти
Обзор