Раздел в процессе написания и будет часто обновляться.
Важно: стабильным и официально поддерживаемым считается только API из window.editorAPI.
Объект window.editor доступен для изучения и экспериментов, но его структура может меняться без предупреждения и не гарантируется совместимость между версиями.
Создаёт пользовательское окно внутри редактора, в котором плагин может отражать любой пользовательский 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 редактора.
Сигнатура
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.