diff --git a/package.json b/package.json index 9901f069..0693fee7 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "title": "Animated Java", "icon": "icon.svg", "description": "Effortlessly craft complex animations for Minecraft: Java Edition", - "version": "1.8.0", + "version": "1.8.1", "min_blockbench_version": "4.12.0", "max_blockbench_version": "4.12.6", "variant": "desktop", diff --git a/src/assets/vanillaAssetOverrides/minecraft/models/block/chest.json b/src/assets/vanillaAssetOverrides/minecraft/models/block/chest.json index 91c7f281..73a8d454 100644 --- a/src/assets/vanillaAssetOverrides/minecraft/models/block/chest.json +++ b/src/assets/vanillaAssetOverrides/minecraft/models/block/chest.json @@ -1,4 +1,5 @@ { + "parent": "block/block", "textures": { "0": "entity/chest/normal" }, @@ -8,25 +9,25 @@ "to": [15, 14, 15], "rotation": { "angle": 0, "axis": "y", "origin": [8, 11.5, 8] }, "faces": { - "north": { "uv": [10.5, 3.5, 14, 4.75], "rotation": 180, "texture": "#0" }, - "east": { "uv": [0, 3.5, 3.5, 4.75], "rotation": 180, "texture": "#0" }, - "south": { "uv": [3.5, 3.5, 7, 4.75], "rotation": 180, "texture": "#0" }, - "west": { "uv": [7, 3.5, 10.5, 4.75], "rotation": 180, "texture": "#0" }, - "up": { "uv": [7, 0, 10.5, 3.5], "texture": "#0" }, - "down": { "uv": [3.5, 0, 7, 3.5], "texture": "#0" } + "north": { "uv": [7, 3.5, 3.5, 4.75], "rotation": 180, "texture": "#0" }, + "east": { "uv": [3.5, 3.5, 0, 4.75], "rotation": 180, "texture": "#0" }, + "south": { "uv": [14, 3.5, 10.5, 4.75], "rotation": 180, "texture": "#0" }, + "west": { "uv": [10.5, 3.5, 7, 4.75], "rotation": 180, "texture": "#0" }, + "up": { "uv": [7, 3.5, 10.5, 0], "texture": "#0" }, + "down": { "uv": [3.5, 3.5, 7, 0], "texture": "#0" } } }, { - "from": [7, 8, 0], - "to": [9, 12, 1], - "rotation": { "angle": 0, "axis": "y", "origin": [8, 10, 0.5] }, + "from": [7, 8, 15], + "to": [9, 12, 16], + "rotation": { "angle": 0, "axis": "y", "origin": [8, 10, 15.5] }, "faces": { - "north": { "uv": [0.5, 1.25, 1, 0.25], "texture": "#0" }, - "east": { "uv": [0.25, 1.25, 0.5, 0.25], "texture": "#0" }, - "south": { "uv": [0.5, 1.25, 1, 0.25], "texture": "#0" }, - "west": { "uv": [1, 1.25, 1.25, 0.25], "texture": "#0" }, - "up": { "uv": [0.5, 0, 1, 0.25], "texture": "#0" }, - "down": { "uv": [0.5, 0, 1, 0.25], "texture": "#0" } + "north": { "uv": [1, 1.25, 0.5, 0.25], "texture": "#0" }, + "east": { "uv": [0.5, 1.25, 0.25, 0.25], "texture": "#0" }, + "south": { "uv": [1, 1.25, 0.5, 0.25], "texture": "#0" }, + "west": { "uv": [1.25, 1.25, 1, 0.25], "texture": "#0" }, + "up": { "uv": [0.5, 0.25, 1, 0], "texture": "#0" }, + "down": { "uv": [0.5, 0.25, 1, 0], "texture": "#0" } } }, { @@ -34,12 +35,12 @@ "to": [15, 10, 15], "rotation": { "angle": 0, "axis": "y", "origin": [8, 5, 8] }, "faces": { - "north": { "uv": [10.5, 8.25, 14, 10.75], "rotation": 180, "texture": "#0" }, - "east": { "uv": [7, 8.25, 10.5, 10.75], "rotation": 180, "texture": "#0" }, - "south": { "uv": [3.5, 8.25, 7, 10.75], "rotation": 180, "texture": "#0" }, - "west": { "uv": [0, 8.25, 3.5, 10.75], "rotation": 180, "texture": "#0" }, - "up": { "uv": [7, 4.75, 10.5, 8.25], "texture": "#0" }, - "down": { "uv": [3.5, 4.75, 7, 8.25], "rotation": 180, "texture": "#0" } + "north": { "uv": [7, 8.25, 3.5, 10.75], "rotation": 180, "texture": "#0" }, + "east": { "uv": [10.5, 8.25, 7, 10.75], "rotation": 180, "texture": "#0" }, + "south": { "uv": [14, 8.25, 10.5, 10.75], "rotation": 180, "texture": "#0" }, + "west": { "uv": [3.5, 8.25, 0, 10.75], "rotation": 180, "texture": "#0" }, + "up": { "uv": [7, 8.25, 10.5, 4.75], "texture": "#0" }, + "down": { "uv": [3.5, 8.25, 7, 4.75], "rotation": 180, "texture": "#0" } } } ] diff --git a/src/assets/vanillaAssetOverrides/minecraft/models/item/template_chest.json b/src/assets/vanillaAssetOverrides/minecraft/models/item/template_chest.json new file mode 100644 index 00000000..70769b4c --- /dev/null +++ b/src/assets/vanillaAssetOverrides/minecraft/models/item/template_chest.json @@ -0,0 +1,47 @@ +{ + "parent": "block/block", + "textures": { + "0": "entity/chest/normal" + }, + "elements": [ + { + "from": [1, 9, 1], + "to": [15, 14, 15], + "rotation": { "angle": 0, "axis": "y", "origin": [8, 11.5, 8] }, + "faces": { + "north": { "uv": [10.5, 3.5, 14, 4.75], "rotation": 180, "texture": "#0" }, + "east": { "uv": [0, 3.5, 3.5, 4.75], "rotation": 180, "texture": "#0" }, + "south": { "uv": [3.5, 3.5, 7, 4.75], "rotation": 180, "texture": "#0" }, + "west": { "uv": [7, 3.5, 10.5, 4.75], "rotation": 180, "texture": "#0" }, + "up": { "uv": [7, 0, 10.5, 3.5], "texture": "#0" }, + "down": { "uv": [3.5, 0, 7, 3.5], "texture": "#0" } + } + }, + { + "from": [7, 8, 0], + "to": [9, 12, 1], + "rotation": { "angle": 0, "axis": "y", "origin": [8, 10, 0.5] }, + "faces": { + "north": { "uv": [0.5, 1.25, 1, 0.25], "texture": "#0" }, + "east": { "uv": [0.25, 1.25, 0.5, 0.25], "texture": "#0" }, + "south": { "uv": [0.5, 1.25, 1, 0.25], "texture": "#0" }, + "west": { "uv": [1, 1.25, 1.25, 0.25], "texture": "#0" }, + "up": { "uv": [0.5, 0, 1, 0.25], "texture": "#0" }, + "down": { "uv": [0.5, 0, 1, 0.25], "texture": "#0" } + } + }, + { + "from": [1, 0, 1], + "to": [15, 10, 15], + "rotation": { "angle": 0, "axis": "y", "origin": [8, 5, 8] }, + "faces": { + "north": { "uv": [10.5, 8.25, 14, 10.75], "rotation": 180, "texture": "#0" }, + "east": { "uv": [7, 8.25, 10.5, 10.75], "rotation": 180, "texture": "#0" }, + "south": { "uv": [3.5, 8.25, 7, 10.75], "rotation": 180, "texture": "#0" }, + "west": { "uv": [0, 8.25, 3.5, 10.75], "rotation": 180, "texture": "#0" }, + "up": { "uv": [7, 4.75, 10.5, 8.25], "texture": "#0" }, + "down": { "uv": [3.5, 4.75, 7, 8.25], "rotation": 180, "texture": "#0" } + } + } + ] +} diff --git a/src/components/vanillaItemDisplayElementPanel.svelte b/src/components/vanillaItemDisplayElementPanel.svelte index 8eb3304e..c16fe472 100644 --- a/src/components/vanillaItemDisplayElementPanel.svelte +++ b/src/components/vanillaItemDisplayElementPanel.svelte @@ -11,6 +11,8 @@ let item = selected.item let error = selected.error + ITEM_DISPLAY_ITEM_DISPLAY_SELECT.set(selected.itemDisplay) + $: { $error = '' if (selected.item !== item) { diff --git a/src/interface/panel/vanillaItemDisplayElement.ts b/src/interface/panel/vanillaItemDisplayElement.ts index 6837ee1c..96f7d76a 100644 --- a/src/interface/panel/vanillaItemDisplayElement.ts +++ b/src/interface/panel/vanillaItemDisplayElement.ts @@ -100,9 +100,11 @@ ITEM_DISPLAY_ITEM_DISPLAY_SELECT.set = function ( if (VanillaItemDisplay.selected.length > 1) { for (const display of VanillaItemDisplay.selected) { display.itemDisplay = value + void display.updateItem() } } else { selected.itemDisplay = value + void selected.updateItem() } Project!.saved = false Undo.finishEdit(`Change Item Display Node's Item Display Mode to ${value}`, { diff --git a/src/lang/ru.yml b/src/lang/ru.yml new file mode 100644 index 00000000..882f9f5e --- /dev/null +++ b/src/lang/ru.yml @@ -0,0 +1,760 @@ +animated_java.menubar.label: Animated Java + +animated_java.format.blueprint.name: Чертёж + +### Actions +animated_java.action.open_blueprint_settings.name: Настройки чертежа +animated_java.action.open_documentation.name: Документация +animated_java.action.open_changelog.name: Список изменений +animated_java.action.open_about.name: О нас +animated_java.action.open_display_entity_config.name: Настройка дисплей-сущности +animated_java.action.open_locator_config.name: Настройка локатора +animated_java.action.export.name: Экспорт +animated_java.action.export_debug.name: Экспорт (Отладка) +animated_java.action.export_all.name: Экспорт всего +animated_java.action.export_all.description: |- + Экспортировать все открытые чертежи. +animated_java.action.export_all_debug.name: Экспорт всего (Отладка) +animated_java.action.export_all_debug.description: |- + Экспортировать все открытые чертежи в режиме отладки. +animated_java.action.extract.name: Извлечь +animated_java.action.extract.confirm: Подтвердить извлечение +animated_java.action.create_text_display.title: Добавление текст дисплея +animated_java.action.create_vanilla_item_display.title: Добавление предмет дисплея +animated_java.action.create_vanilla_block_display.title: Добавление блок дисплея +animated_java.action.copy_display_entity_config.name: Копировать настройку дисплей-сущности +animated_java.action.copy_display_entity_config.message: Скопирована настройка дисплей-сущности из "{0}" +animated_java.action.paste_display_entity_config.name: Вставить настройку дисплей-сущности +animated_java.action.paste_display_entity_config.message: Вставлена настройка дисплей-сущности из "{0}" + +### Popups +animated_java.popup.loading.loading: Загрузка Animated Java... +animated_java.popup.loading.success: Animated Java загружена успешно! +animated_java.popup.loading.offline: |- + Animated Java не удалось подключить! + Некоторый функционал может быть недоступен. + +animated_java.popup.installed_popup.title: Спасибо за установку! +animated_java.popup.installed_popup.close_button: Начнём анимировать! + +animated_java.popup.incompatability_popup.title: Animated Java Обнаружена несовместимость +animated_java.popup.incompatability_popup.description: |- + У вас установлены плагины которые вызывают проблемы с Animated Java. + Пожалуйста отключите или удалите эти плагин(ы) и перезапустите Blockbench чтобы использовать Animated Java: +animated_java.popup.incompatability_popup.disable_button: Отключить плагин +animated_java.popup.incompatability_popup.button.disable_all: Отключить все несовместимые плагины +animated_java.popup.incompatability_popup.button.ignore: Игнорировать и продолжить (Не Рекомендуется) +animated_java.plugin_dialog.incompatability_notice: |- + Этот плагин вызывает проблемы с Animated Java. + + Вы не сможете установить этот плагин пока Animated Java установлен. + +### Dialogs +animated_java.dialog.reset: Сброс к настройкам по умолчанию + +## About +animated_java.dialog.about.title: Про Animated Java +animated_java.dialog.about.close_button: Закрыть + +## Changelog +animated_java.dialog.changelog_dialog.title: Animated Java Список изменений + +## Unexpected Error Dialog +animated_java.dialog.unexpected_error.title: Произошла непредвиденная ошибка! +animated_java.dialog.unexpected_error.close_button: Закрыть +animated_java.dialog.unexpected_error.copy_error_message_button.message: Сообщение с ошибкой скопировано в буфер обмена! +animated_java.dialog.unexpected_error.copy_error_message_button.description: Нажмите чтобы скопировать сообщение с ошибкой. +animated_java.dialog.unexpected_error.paragraph: 'Пожалуйста сообщите об этой ошибке в нашем {0} и создайте тикет в #animated-java-support канале, или создав задачу на нашем {1}. Спасибо!' + +## Blueprint Settings Dialog +animated_java.dialog.blueprint_settings.title: Настройки чертежа +animated_java.dialog.blueprint_settings.project_settings.title: Проект + +animated_java.dialog.blueprint_settings.advanced_settings_warning: Продвинутые настройки должны быть использованы только при необходимости! + +animated_java.dialog.blueprint_settings.project_name.title: Название +animated_java.dialog.blueprint_settings.project_name.description: |- + Имя файла чертежа. + + Это будет перезаписано, если вы сохраните чертёж по другим именем. + +animated_java.dialog.blueprint_settings.texture_size.title: Размер Текстуры +animated_java.dialog.blueprint_settings.texture_size.description: |- + Разрешение редактора UV. + + Это должно соответствовать размеру самой большой текстуры в вашем чертеже. +animated_java.dialog.blueprint_settings.texture_size.warning.not_square: Размер Текстуры должен быть квадратным! +animated_java.dialog.blueprint_settings.texture_size.warning.not_a_power_of_2: Размер текстуры должен быть степенью числа 2, если это возможно! +animated_java.dialog.blueprint_settings.texture_size.warning.does_not_match_largest_texture: Выбранный Размер Текстуры не соответствует размеру самой большой текстуры в вашем чертеже! + +# Export Settings +animated_java.dialog.blueprint_settings.export_settings.title: Экспорт + +animated_java.dialog.blueprint_settings.export_namespace.title: Пространство имен +animated_java.dialog.blueprint_settings.export_namespace.description: |- + Пространство имён которое будет использовано при генерации Ресурспака и Датапака. + + Рекомендовано использовать уникальное пространство имён чтобы избежать конфликтов с другими Ресурспаками и Датапаками. +animated_java.dialog.blueprint_settings.export_namespace.error.empty: Пространство имён экспорта не может быть пустым! +animated_java.dialog.blueprint_settings.export_namespace.error.reserved: Пространство имён экспорта "{0}" зарезервировано для внутренней работы плагина! Пожалуйста выберите другое пространство имён. +animated_java.dialog.blueprint_settings.export_namespace.error.invalid_characters: Пространство имён экспорта имеет запрещённые символы! Пространства имён могут содержать только буквы, цифры и нижние подчёркивания. + +animated_java.dialog.blueprint_settings.show_render_box.title: Показать Область Рендера +animated_java.dialog.blueprint_settings.show_render_box.description: Когда включено, отображает рендер коробку в редакторе. + +animated_java.dialog.blueprint_settings.auto_render_box.title: Авто-размер Области Рендера +animated_java.dialog.blueprint_settings.auto_render_box.description: |- + Когда включено, область рендера будет автоматически рассчитываться на основе геометрии модели. +animated_java.dialog.blueprint_settings.render_box.title: Размер Области Рендера +animated_java.dialog.blueprint_settings.render_box.description: |- + [Размер и Высота](https://minecraft.wiki/w/Display#Entity_data) дисплей сущностей рига. + +animated_java.dialog.blueprint_settings.view_range.title: Область обзора +animated_java.dialog.blueprint_settings.view_range.description: |- + [Область обзора](https://minecraft.wiki/w/Display#Entity_data) рига по умолчанию. + +animated_java.dialog.blueprint_settings.enable_plugin_mode.title: Режим Плагина +animated_java.dialog.blueprint_settings.enable_plugin_mode.description: |- + Когда включено, проект будет экспортирован как JSON файл специально для использования плагинами. + +animated_java.dialog.blueprint_settings.resource_pack_export_mode.title: Режим Экспорта Ресурспака +animated_java.dialog.blueprint_settings.resource_pack_export_mode.options.folder: Папка +animated_java.dialog.blueprint_settings.resource_pack_export_mode.options.zip: Zip Архив +animated_java.dialog.blueprint_settings.resource_pack_export_mode.options.none: Ничего + +animated_java.dialog.blueprint_settings.data_pack_export_mode.title: Режим Экспорта Датапака +animated_java.dialog.blueprint_settings.data_pack_export_mode.options.folder: Папка +animated_java.dialog.blueprint_settings.data_pack_export_mode.options.zip: Zip Архив +animated_java.dialog.blueprint_settings.data_pack_export_mode.options.none: Ничего + +animated_java.dialog.blueprint_settings.target_minecraft_version.title: Выбранная Майнкрафт версия +animated_java.dialog.blueprint_settings.target_minecraft_version.description: |- + Версия Майнкрафта для которой будет экспортирован проект. + + Если версия которую вы используете недоступна, выберите ближайшую версию ниже нужной. + + Т.е Если вы используете `1.21.8`, выберите `1.21.5`. + + Некоторые функции могут быть изменены, или недоступны в зависимости от выбранной версии. + + Animated Java уведомит вас о любых изменениях, которые будут востребованы. + +# Resource Pack Settings +animated_java.dialog.blueprint_settings.resource_pack_settings.title: Ресурспак + +animated_java.dialog.blueprint_settings.enable_advanced_resource_pack_settings.title: Продвинутые настройки + +animated_java.dialog.blueprint_settings.enable_advanced_resource_pack_folders.title: Продвинутые папки + +animated_java.dialog.blueprint_settings.display_item.title: Предмет дисплей +animated_java.dialog.blueprint_settings.display_item.description: |- + Предмет используемый для моделей рига. + + Множество чертежей в одном и том же проекте могут использовать один и тот же предмет, и они будут автоматически объединены при экспорте. +animated_java.dialog.blueprint_settings.display_item.error.no_item_selected: Не выбран предмет! +animated_java.dialog.blueprint_settings.display_item.error.invalid_item_id.no_namespace: Выбран недопустимый ID предмета! ID предметов должны быть в формате`namespace:item_id`. +animated_java.dialog.blueprint_settings.display_item.error.invalid_item_id.whitespace: Выбран недопустимый ID предмета! ID предметов не должны содержать пробелов. +animated_java.dialog.blueprint_settings.display_item.warning.item_does_not_exist: Выбранный предмет не существует в ванильной игре! +animated_java.dialog.blueprint_settings.display_item.warning.item_model_not_generated: Выбранный предмет не использует `minecraft:item/generated` в форме своего родителя. Это может привести к проблемам в игре. +animated_java.dialog.blueprint_settings.display_item.error.item_model_not_found: |- + Выбранный предмет не имеет файла модели в ванильном ресурспаке! + + Если вы предполагаете, что это ошибка, попробуйте перезапустить Blockbench, и подождать пока загрузка AJ пропадёт перед открытием чертежа. + +animated_java.dialog.blueprint_settings.custom_model_data_offset.title: CMD Смещение +animated_java.dialog.blueprint_settings.custom_model_data_offset.description: |- + Смещает Custom Model Data (CMD) значения использованные в предикатах предмет дисплея на указанное значение. + +animated_java.dialog.blueprint_settings.resource_pack.title: Ресурспак +animated_java.dialog.blueprint_settings.resource_pack.description: |- + Основная папка Ресурспака для экспорта. + + Выбранный ресурспак должен иметь файл `pack.mcmeta`. +animated_java.dialog.blueprint_settings.resource_pack.warning.missing_assets_folder: Выбранный ресурспак не содержит папку `assets`! +animated_java.dialog.blueprint_settings.resource_pack.error.no_folder_selected: Папка не выбрана! +animated_java.dialog.blueprint_settings.resource_pack.error.folder_does_not_exist: Выбранная папка не существует! +animated_java.dialog.blueprint_settings.resource_pack.error.not_a_folder: Указанный путь не является папкой! +animated_java.dialog.blueprint_settings.resource_pack.error.missing_pack_mcmeta: Выбранная папка не содержит файл pack.mcmeta! + +animated_java.dialog.blueprint_settings.resource_pack_zip.title: Ресурспак Zip Архив +animated_java.dialog.blueprint_settings.resource_pack_zip.description: Путь к .zip архиву для экспорта. +animated_java.dialog.blueprint_settings.resource_pack_zip.error.no_file_selected: Файл не выбран! +animated_java.dialog.blueprint_settings.resource_pack_zip.error.not_a_file: Указанный путь не является файлом! + +# Data Pack Settings +animated_java.dialog.blueprint_settings.data_pack_settings.title: Датапак + +animated_java.dialog.blueprint_settings.data_pack.title: Датапак +animated_java.dialog.blueprint_settings.data_pack.description: |- + Основная папка Датапака для экспорта. + + Выбранный датапак должен иметь файл `pack.mcmeta`. +animated_java.dialog.blueprint_settings.data_pack.warning.missing_data_folder: Выбранный датапак не содержит папку `data`! +animated_java.dialog.blueprint_settings.data_pack.error.no_folder_selected: Папка не выбрана! +animated_java.dialog.blueprint_settings.data_pack.error.folder_does_not_exist: Выбранная папка не существует! +animated_java.dialog.blueprint_settings.data_pack.error.not_a_folder: Указанный путь не является папкой! +animated_java.dialog.blueprint_settings.data_pack.error.missing_pack_mcmeta: Выбранная папка не содержит файл pack.mcmeta! + +animated_java.dialog.blueprint_settings.data_pack_zip.title: Датапак Zip Архив +animated_java.dialog.blueprint_settings.data_pack_zip.description: Путь к .zip архиву для экспорта. +animated_java.dialog.blueprint_settings.data_pack_zip.error.no_file_selected: Файл не выбран! +animated_java.dialog.blueprint_settings.data_pack_zip.error.not_a_file: Указанный путь не является файлом! + +animated_java.dialog.blueprint_settings.on_summon_function.title: Функция при вызове +animated_java.dialog.blueprint_settings.on_summon_function.description: |- + Команды выполняемые `as` (от лица) и `at` (на месте) сущности при вызове. + + Воспринимайте это поле как `.mcfunction` файл. + + Поддерживает [MC-Build](https://mcbuild.dev) синтакс. + +animated_java.dialog.blueprint_settings.on_remove_function.title: Функция при удалении +animated_java.dialog.blueprint_settings.on_remove_function.description: |- + Команды выполняемые `as` (от лица) и `at` (на месте) сущности при удалении. + + Воспринимайте это поле как `.mcfunction` файл. + + Поддерживает [MC-Build](https://mcbuild.dev) синтакс. + +animated_java.dialog.blueprint_settings.on_pre_tick_function.title: Функция до тика +animated_java.dialog.blueprint_settings.on_pre_tick_function.description: |- + Команды выполняемые `as` (от лица) и `at` (на месте) сущности *перед* тик логикой Animated Java. + + Воспринимайте это поле как `.mcfunction` файл. + + Поддерживает [MC-Build](https://mcbuild.dev) синтакс. + +animated_java.dialog.blueprint_settings.on_post_tick_function.title: Функция после тика +animated_java.dialog.blueprint_settings.on_post_tick_function.description: |- + Команды выполняемые `as` (от лица) и `at` (на месте) сущности *после* тик логики Animated Java. + + Воспринимайте это поле как `.mcfunction` файл. + + Поддерживает [MC-Build](https://mcbuild.dev) синтакс. + +animated_java.dialog.blueprint_settings.interpolation_duration.title: Длительность Интерполяции +animated_java.dialog.blueprint_settings.interpolation_duration.description: |- + [Длительность интерполяции](https://minecraft.wiki/w/Display#Entity_data) рига по умолчанию. + + Чем выше значение тем плавнее анимация, но меньше отзывчивость. + +animated_java.dialog.blueprint_settings.teleportation_duration.title: Длительность Телепортации +animated_java.dialog.blueprint_settings.teleportation_duration.description: |- + [Длительность телепортации](https://minecraft.wiki/w/Display#Entity_data) рига по умолчанию. + + Чем выше значение тем плавнее крупные движения, но меньше отзывчивость. + +animated_java.dialog.blueprint_settings.auto_update_rig_orientation.title: Автообновление ориентации рига +animated_java.dialog.blueprint_settings.auto_update_rig_orientation.description: |- + Когда **включено**, синхронизирует позиции и повороты всех нодовых сущностей с корневой сущностью каждый тик. + Позволяет просто телепортировать сущность чтобы перемещать риг. + + Когда **выключено**, вам стоит использовать move функцию для перемещения рига: + + ``` + execute as @e[tag=aj.<пространство_имён>_root] \ + positioned rotated run \ + function animated_java:<пространство_имён>/move + ``` + + Синхронизировать позиции и повороты нодов каждый тик может давать нагрузку, особенно для больших ригов. + Отключение этого параметра может улучшить производительность жертвуя удобством. + +animated_java.dialog.blueprint_settings.use_storage_for_animation.title: Использовать хранилище для анимации +animated_java.dialog.blueprint_settings.use_storage_for_animation.description: |- + Когда включено, NBT хранилище будет использовано для хранения данных анимации вместо функций. + + Это значительно уменьшает количество файлов экспортированного датапака, будучи в разы менее производительным. + +# Plugin Settings +animated_java.dialog.blueprint_settings.baked_animations.title: Запечённые анимации +animated_java.dialog.blueprint_settings.baked_animations.description: |- + Запекать или нет экспортированные анимации. + Запечённые кадры анимаций заранее обрабатываются и сохраняются в экспортированный JSON файл, уменьшая сложности рендера модели в игре. + Некоторые Плагины будут требовать эту опцию чтобы работать правильно. + +animated_java.dialog.blueprint_settings.json_file.title: JSON Файл +animated_java.dialog.blueprint_settings.json_file.description: Путь к JSON файлу для экспорта. +animated_java.dialog.blueprint_settings.json_file.error.no_file_selected: Файл не выбран! +animated_java.dialog.blueprint_settings.json_file.error.not_a_file: Указанный путь не является файлом! + +## Bone Config Dialog +animated_java.dialog.display_entity.title: Настройка дисплей-сущности для "{0}" + +animated_java.dialog.display_entity.node_options.title: Нод +animated_java.dialog.display_entity.per_variant_options.title: Для каждого варианта + +animated_java.dialog.display_entity.on_summon_function.title: Функция при вызове +animated_java.dialog.display_entity.on_summon_function.description: |- + Команды выполняемые `as` (от лица) и `at` (на месте) дисплей-сущности при вызове. + + Воспринимайте это поле как `.mcfunction` файл. + + Поддерживает [MC-Build](https://mcbuild.dev) синтакс. + +animated_java.dialog.display_entity.on_apply_function.title: Функция при применении +animated_java.dialog.display_entity.on_apply_function.description: |- + Команды выполняемые `as` (от лица) дисплей-сущности при применении варианта. + + Воспринимайте это поле как `.mcfunction` файл. + + Поддерживает [MC-Build](https://mcbuild.dev) синтакс. + +animated_java.dialog.display_entity.custom_name.title: Имя +animated_java.dialog.display_entity.custom_name.description: Пользовательское имя нода. +animated_java.dialog.display_entity.custom_name.invalid_json.error: |- + Неверный JSON текст! + {0} + +animated_java.dialog.display_entity.custom_name_visible.title: Видимость имени +animated_java.dialog.display_entity.custom_name_visible.description: Включать ли видимость имени. + +animated_java.dialog.display_entity.glowing.title: Свечение +animated_java.dialog.display_entity.glowing.description: Включать ли свечение нода в игре. + +animated_java.dialog.display_entity.override_glow_color.title: Собственный цвет свечения +animated_java.dialog.display_entity.override_glow_color.description: Использовать ли собственный цвет свечения. + +animated_java.dialog.display_entity.glow_color.title: Цвет свечения +animated_java.dialog.display_entity.glow_color.description: Определяет окрас свечения нода. + +animated_java.dialog.display_entity.shadow_radius.title: Радиус тени +animated_java.dialog.display_entity.shadow_radius.description: Определяет радиус тени. + +animated_java.dialog.display_entity.shadow_strength.title: Интенсивность тени +animated_java.dialog.display_entity.shadow_strength.description: Определяет интенсивность тени. + +animated_java.dialog.display_entity.override_brightness.title: Собственная яркость +animated_java.dialog.display_entity.override_brightness.description: Устанавливает собственную яркость нода. + +animated_java.dialog.display_entity.brightness_override.title: Яркость +animated_java.dialog.display_entity.brightness_override.description: Определяет яркость нода. Значение должно быть от 0 до 15. + +animated_java.dialog.display_entity.use_custom_brightness.title: Использовать собственную яркость +animated_java.dialog.display_entity.use_custom_brightness.description: Устанавливает собственную яркость нода.. + +animated_java.dialog.display_entity.custom_brightness.title: Собственная яркость +animated_java.dialog.display_entity.custom_brightness.description: Определяет яркость нода. Значение должно быть от 0 до 15. + +animated_java.dialog.display_entity.enchanted.title: Зачарованный +animated_java.dialog.display_entity.enchanted.description: Включать ли блеск зачарованности нода. + +animated_java.dialog.display_entity.invisible.title: Невидимость +animated_java.dialog.display_entity.invisible.description: Включать ли видимость нода в игре. + +animated_java.dialog.display_entity.billboard.title: Билборд +animated_java.dialog.display_entity.billboard.description: |- + Настраивает поворот к взгляду игрока при рендере. + - **Фиксированный**: Вертикальные и горизонтальные оси фиксированы. + - **Вертикальный**: Поворачивается по вертикали. + - **Горизонтальный**: Поворачивается по горизонтали. + - **Центрированный**: Поворачивается по центру. +animated_java.dialog.display_entity.billboard.options.fixed: Фиксированный +animated_java.dialog.display_entity.billboard.options.vertical: Вертикальный +animated_java.dialog.display_entity.billboard.options.horizontal: Горизонтальный +animated_java.dialog.display_entity.billboard.options.center: Центрированный + +## Locator Config Dialog +animated_java.dialog.locator_config.title: Настройки локатора + +animated_java.dialog.locator_config.plugin_mode_warning: |- + Режим Плагина включен! Локаторы не имеют настроек в режиме Плагина. + Вместо этого используйте Plugin API чтобы добавить функционал вашим Локаторам. + Подробнее о Plugin API можно узнать в Официальной Plugin API документации. + +animated_java.dialog.locator_config.use_entity.title: Использовать сущность +animated_java.dialog.locator_config.use_entity.description: |- + Когда включено, локатор создаст и будет использовать сущность вместо координат в игре. + +animated_java.dialog.locator_config.entity_type.title: Тип сущности +animated_java.dialog.locator_config.entity_type.description: Тип сущности который будет привязан к локатору. +animated_java.dialog.locator_config.entity_type.error.empty: Тип сущности не может быть пустым! +animated_java.dialog.locator_config.entity_type.warning.invalid: Выбранный тип сущности не существует в майнкрафте {0} + +animated_java.dialog.locator_config.sync_passenger_rotation.title: Синхронизировать Поворот Пассажиров +animated_java.dialog.locator_config.sync_passenger_rotation.description: Автоматически синхронизирует поворот пассажиров локатора. + +animated_java.dialog.locator_config.on_summon_function.title: Функция при вызове +animated_java.dialog.locator_config.on_summon_function.description: |- + Команды выполняемые `as` (от лица) корневой сущности и `at` (на месте) локатора при вызове. + + Поддерживает [MC-Build](https://mcbuild.dev) синтакс. +animated_java.dialog.locator_config.on_summon_function.description_with_use_entity: |- + Команды выполняемые `as` (от лица) корневой сущности и `at` (на месте) сущности локатора при вызове. + + Поддерживает [MC-Build](https://mcbuild.dev) синтакс. + +animated_java.dialog.locator_config.on_remove_function.title: Функция при удалении +animated_java.dialog.locator_config.on_remove_function.description: |- + Команды выполняемые `as` (от лица) корневой сущности и `at` (на месте) локатора при удалении. + + Поддерживает [MC-Build](https://mcbuild.dev) синтакс. +animated_java.dialog.locator_config.on_remove_function.description_with_use_entity: |- + Команды выполняемые `as` (от лица) корневой сущности и `at` (на месте) сущности локатора при удалении. + + Поддерживает [MC-Build](https://mcbuild.dev) синтакс. + +animated_java.dialog.locator_config.on_tick_function.title: Тик функция +animated_java.dialog.locator_config.on_tick_function.description: |- + Команды выполняемые `at` (на месте) локатора каждый тик. + + Поддерживает [MC-Build](https://mcbuild.dev) синтакс. +animated_java.dialog.locator_config.on_tick_function.description_with_use_entity: |- + Команды выполняемые `at` (на месте) сущности локатора каждый тик. + + Поддерживает [MC-Build](https://mcbuild.dev) синтакс. + +## Text Display Config Dialog +animated_java.dialog.text_display_config.title: Настройка текст дисплея + +animated_java.dialog.bone_config.vanilla_item_model.title: Ванильная модель предмета +animated_java.dialog.bone_config.vanilla_item_model.description: |- + Если предмет выбран, кость будет рендериться как ванильный предмет. + Это перезапишет существующие кубы кости. + +animated_java.dialog.text_display_config.use_nbt.title: Использовать NBT +animated_java.dialog.text_display_config.use_nbt.description: Использует NBT чтобы настроить текст дисплей сущность вместо настроек. +animated_java.dialog.text_display_config.use_nbt.use_nbt_warning: Использование NBT перезапишет все другие настройки, и любые изменения не будут отображены в редакторе. Используйте только при необходимости! + +animated_java.dialog.text_display_config.inherit_settings.title: Наследовать настройки +animated_java.dialog.text_display_config.inherit_settings.description: Наследует настройки от родительской текст дисплей-сущности. + +animated_java.dialog.text_display_config.glowing.title: Свечение +animated_java.dialog.text_display_config.glowing.description: Включает свечение текст дисплей-сущности в игре. + +animated_java.dialog.text_display_config.override_glow_color.title: Собственный цвет свечения +animated_java.dialog.text_display_config.override_glow_color.description: Включает собственный цвет свечения в игре. + +animated_java.dialog.text_display_config.glow_color.title: Цвет свечения +animated_java.dialog.text_display_config.glow_color.description: Цвет свечения текст дисплей-сущности. + +animated_java.dialog.text_display_config.shadow_radius.title: Радиус тени +animated_java.dialog.text_display_config.shadow_radius.description: Определяет радиус тени. + +animated_java.dialog.text_display_config.shadow_strength.title: Интенсивность тени +animated_java.dialog.text_display_config.shadow_strength.description: Определяет интенсивность тени. + +animated_java.dialog.text_display_config.override_brightness.title: Собственная яркость +animated_java.dialog.text_display_config.override_brightness.description: Включает собственную яркость. + +animated_java.dialog.text_display_config.brightness_override.title: Яркость +animated_java.dialog.text_display_config.brightness_override.description: Яркость текст дисплей-сущности. Значение должно быть от 0 до 15. + +animated_java.dialog.text_display_config.use_custom_brightness.title: Использовать Собственную Яркость +animated_java.dialog.text_display_config.use_custom_brightness.description: Включает собственную яркость для кости. + +animated_java.dialog.text_display_config.custom_brightness.title: Собственная яркость +animated_java.dialog.text_display_config.custom_brightness.description: Использует собственную яркость для кости. Значение должно быть от 0 до 15. + +animated_java.dialog.text_display_config.invisible.title: Невидимость +animated_java.dialog.text_display_config.invisible.description: Включать ли видимость текст дисплей-сущности в игре. + +animated_java.dialog.text_display_config.nbt.title: NBT +animated_java.dialog.text_display_config.nbt.description: NBT применимое к текст дисплей-сущности. + +## Block Display Config Dialog +animated_java.dialog.vanilla_block_display_config.title: Настройки блок дисплея +animated_java.dialog.vanilla_block_display.custom_name.title: Имя +animated_java.dialog.vanilla_block_display.custom_name.description: Пользовательское имя блок дисплея. +animated_java.dialog.vanilla_block_display.custom_name.invalid_json.error: |- + Неверный JSON текст! + {0} + +animated_java.dialog.vanilla_block_display.custom_name_visible.title: Видимость имени +animated_java.dialog.vanilla_block_display.custom_name_visible.description: Включать ли видимость имени. + +## Item Display Config Dialog +animated_java.dialog.vanilla_item_display_config.title: Настройки предмет дисплея +animated_java.dialog.vanilla_item_display.custom_name.title: Имя +animated_java.dialog.vanilla_item_display.custom_name.description: Пользовательское имя блок дисплея. +animated_java.dialog.vanilla_item_display.custom_name.invalid_json.error: |- + Неверный JSON текст! + {0} + +animated_java.dialog.vanilla_item_display.custom_name_visible.title: Видимость имени +animated_java.dialog.vanilla_item_display.custom_name_visible.description: Включать ли постоянную видимость имени. + +## Variant Config Dialog +animated_java.dialog.variant_config.title: Настройки вариантов + +animated_java.dialog.variant_config.variant_display_name: Отображаемое имя +animated_java.dialog.variant_config.variant_display_name.description: Используется в редакторе и в сообщениях ошибок. + +animated_java.dialog.variant_config.generate_name_from_display_name: Сгенерировать имя из отображаемого имени +animated_java.dialog.variant_config.generate_name_from_display_name.description: Автоматически генерирует имя на основе отображаемого имени. + +animated_java.dialog.variant_config.variant_name: Имя +animated_java.dialog.variant_config.variant_name.description: Используется в датапаке и ресурспаке. + +animated_java.dialog.variant_config.texture_map.title: Текстурная карта +animated_java.dialog.variant_config.texture_map.description: Карта текстур, которые будут заменены при применении этого варианта. +animated_java.dialog.variant_config.texture_map.create_new_mapping: Создать новый маппинг +animated_java.dialog.variant_config.texture_map.no_mappings: У варианта нет заменяемых текстур. + +animated_java.dialog.variant_config.bone_lists.description: |- + Укажите ноды которые должны быть изменены при применении варианта. + + Ноды указанные в списке будут изменены при применении варианта. + + Ноды не указанные в списке останутся нетронутыми. +animated_java.dialog.variant_config.excluded_nodes.title: Исключенные ноды +animated_java.dialog.variant_config.excluded_nodes.description: Список нодов которые вариант должен игнорировать. Эти ноды останутся нетронутыми. +animated_java.dialog.variant_config.included_nodes.title: Включенные ноды +animated_java.dialog.variant_config.included_nodes.description: Список нодов которые вариант должен изменить. Только эти ноды будут изменены. +animated_java.dialog.variant_config.swap_columns_button.tooltip: Поменять местами + +## Old AJModel Loader Dialog +animated_java.action.upgrade_old_aj_model_loader.name: Обновить .ajmodel +animated_java.dialog.upgrade_old_aj_model_loader.title: Обновить .ajmodel +animated_java.action.upgrade_old_aj_model_loader.select_file: Выбрать .ajmodel файл +animated_java.action.upgrade_old_aj_model_loader.body: Обновите свои устаревшие .ajmodel файлы на новый .ajblueprint формат. +animated_java.action.upgrade_old_aj_model_loader.button: Выберите .ajmodel файл для обновления + +## Animation Properties Dialog +animated_java.dialog.animation_properties.title: Свойства анимации ({0}) + +animated_java.dialog.animation_properties.animation_name.title: Название анимации +animated_java.dialog.animation_properties.animation_name.description: Используется в датапаке. + +animated_java.dialog.animation_properties.loop_mode.title: Режим цикла +animated_java.dialog.animation_properties.loop_mode.description: |- + - Одноразовый: Анимация воспроизведётся единожды, затем вернется к первому кадру. + - Удержание: Анимация воспроизведётся единожды и останется на последнем кадре. + - Цикл: Анимация будет бесконечно повторяться. +animated_java.dialog.animation_properties.loop_mode.options.once: Одноразовый +animated_java.dialog.animation_properties.loop_mode.options.hold: Удержание +animated_java.dialog.animation_properties.loop_mode.options.loop: Цикл +animated_java.dialog.animation_properties.animation_name.error.empty: Название анимации не может быть пустым! +animated_java.dialog.animation_properties.animation_name.error.invalid_characters: Название анимации содержит недопустимые символы! Названия анимаций могут содержать только буквы, числа, нижние подчёркивания и точки. + +animated_java.dialog.animation_properties.loop_delay.title: Задержка цикла +animated_java.dialog.animation_properties.loop_delay.description: |- + Задержка в тиках перед повторным запуском анимации в режиме Цикл. + + Т.е. Значение 20 значит, что анимация застынет на 1 секунду перед повторным запуском. + +animated_java.dialog.animation_properties.bone_lists.description: |- + Укажите ноды которые анимация должна изменить. + + Ноды указанные в списке будут изменены анимацией. + + Ноды не указанные в списке останутся нетронутыми. +animated_java.dialog.animation_properties.excluded_nodes.title: Исключенные ноды +animated_java.dialog.animation_properties.excluded_nodes.description: Список нодов которые анимация будет игнорировать. Эти ноды останутся нетронутыми. +animated_java.dialog.animation_properties.included_nodes.title: Включенные ноды +animated_java.dialog.animation_properties.included_nodes.description: Список нодов которые анимация будет изменять. Только эти ноды будут изменены. +animated_java.dialog.animation_properties.swap_columns_button.tooltip: Поменять местами + +## Export Progress Dialog +animated_java.dialog.export_progress.title: Экспортирование... + +## Blueprint Loading Dialog +animated_java.dialog.blueprint_loading.title: Загрузка чертежа... + +### Panels + +## Variants Panel +animated_java.panel.variants.title: Варианты +animated_java.panel.variants.tool.create_new_variant: Создать новый вариант +animated_java.panel.variants.tool.edit_variant: Настроить вариант +animated_java.panel.variants.tool.duplicate_selected_variant: Дублировать выбранный вариант +animated_java.panel.variants.tool.delete_selected_variant: Удалить выбранный вариант +animated_java.panel.variants.tool.variant_visible: Вариант выбран +animated_java.panel.variants.tool.variant_not_visible: Вариант не выбран +animated_java.panel.variants.tool.cannot_delete_default_variant: Удалить вариант по умолчанию нельзя! +animated_java.panel.variants.tool.cannot_edit_default_variant: Изменить вариант по умолчанию нельзя! + +animated_java.action.variants.create: Создать вариант +animated_java.action.variants.duplicate: Дублировать вариант +animated_java.action.variants.open_config: Открыть настройки варианта +animated_java.action.variants.delete: Удалить вариант + +### Animator + +## Properties +animated_java.animation.excluded_nodes: Исключённые ноды +animated_java.animation.invert_excluded_nodes: Инвертировать исключённые ноды + +## Timeline +animated_java.effect_animator.timeline.variant: Вариант +animated_java.effect_animator.timeline.function: Функция + +## Keyframes +animated_java.effect_animator.keyframe_data_point.variant: Вариант +animated_java.effect_animator.keyframe_data_point.function: Функция +animated_java.effect_animator.keyframe_data_point.execute_condition: Условие Execute +animated_java.effect_animator.keyframe_data_point.repeat: Повтор +animated_java.effect_animator.keyframe_data_point.repeat_frequency: Интервал повтора + +# Keyframe Panel +animated_java.panel.keyframe.keyframe_title: Ключевой кадр ({0}) + +animated_java.panel.keyframe.variant.title: Вариант +animated_java.panel.keyframe.variant.description: Вариант применимый к ключевому кадру. + +animated_java.panel.keyframe.function.title: Функция +animated_java.panel.keyframe.function.description: |- + Команды выполняемые при достижении ключевого кадра. + + Воспринимайте это поле как `.mcfunction` файл. + + Поддерживает [MC-Build](https://mcbuild.dev) синтакс. +animated_java.panel.keyframe.execute_condition.title: Условие Execute +animated_java.panel.keyframe.execute_condition.description: |- + Условие при котором ключевой кадр будет выполнен. + + Воспринимайте это поле как `execute if` команду. + + Т.е. `if score @s myScore matches 1..` + +animated_java.panel.keyframe.repeat.title: Повтор +animated_java.panel.keyframe.repeat.description: |- + Когда включено, команды в этом ключевом кадре будут повторяться в указанном интервале. +animated_java.panel.keyframe.repeat_frequency.title: Интервал +animated_java.panel.keyframe.repeat_frequency.description: |- + Количество тиков между повтором команды. + + Поставьте 1 чтобы запускать каждый тик анимации. + +animated_java.panel.keyframe.easing_type.title: Тип сглаживания +animated_java.panel.keyframe.easing_type.description: The type of easing to apply to the keyframe. +animated_java.panel.keyframe.easing_type.options.linear: Линейное +animated_java.panel.keyframe.easing_type.options.sine: Синусоидальное +animated_java.panel.keyframe.easing_type.options.quad: Квадратичное +animated_java.panel.keyframe.easing_type.options.cubic: Кубическое +animated_java.panel.keyframe.easing_type.options.quart: Биквадратичное +animated_java.panel.keyframe.easing_type.options.quint: Бикубическое +animated_java.panel.keyframe.easing_type.options.expo: Экспоненциальное +animated_java.panel.keyframe.easing_type.options.circ: Круговое +animated_java.panel.keyframe.easing_type.options.elastic: Эластичное +animated_java.panel.keyframe.easing_type.options.back: Отскок назад +animated_java.panel.keyframe.easing_type.options.bounce: Прыгающее + +animated_java.panel.keyframe.easing_mode.title: Режим сглаживания +animated_java.panel.keyframe.easing_mode.description: Режим применения сглаживания к ключевому кадру. +animated_java.panel.keyframe.easing_mode.options.in: В начале +animated_java.panel.keyframe.easing_mode.options.out: В конце +animated_java.panel.keyframe.easing_mode.options.inout: В начале и в конце + +animated_java.panel.keyframe.easing_args.title: Аргументы сглаживания +animated_java.panel.keyframe.easing_args.description: Агрументы применимые к функции сглаживания. +animated_java.panel.keyframe.easing_args.easing_arg.elastic.title: Эластичность +animated_java.panel.keyframe.easing_args.easing_arg.elastic.description: Эластичность функции сглаживания. +animated_java.panel.keyframe.easing_args.easing_arg.back.title: Перерастяжение +animated_java.panel.keyframe.easing_args.easing_arg.back.description: Определяет степень перерастяжения функции сглаживания. +animated_java.panel.keyframe.easing_args.easing_arg.bounce.title: Прыгучесть +animated_java.panel.keyframe.easing_args.easing_arg.bounce.description: Определяет степень прыгучести функции сглаживания. + +animated_java.panel.keyframe.nonlinear_interpolation: |- + Продвинутые настройки сглаживания отключены. + Смените режим интерполяции ключевого кадра на линейный для включения. + +# Text Display Panel +animated_java.panel.text_display.title: Текст дисплей + +animated_java.tool.text_display.line_width.title: Длина строки +animated_java.tool.text_display.line_width.description: Ширина текст дисплея в пикселях. + +animated_java.tool.text_display.background_color.title: Цвет фона +animated_java.tool.text_display.background_color.description: Цвет фона текст дисплея. + +animated_java.tool.text_display.text_shadow.title: Тень текста +animated_java.tool.text_display.text_shadow.description: Включает отображение тени текста. + +animated_java.tool.text_display.text_alignment.title: Выравнивание текста +animated_java.tool.text_display.text_alignment.description: Определяет выравнивание текста. +animated_java.tool.text_display.text_alignment.options.left: По левому краю +animated_java.tool.text_display.text_alignment.options.center: По центру +animated_java.tool.text_display.text_alignment.options.right: По правому краю + +animated_java.tool.text_display.see_through.title: Сквозная видимость +animated_java.tool.text_display.see_through.description: Определяет, будет ли текст виден сквозь блоки. + +animated_java.tool.text_display.copy_text.title: Копировать экспортированный текстовый компонент +animated_java.tool.text_display.copy_text.description: Копирует экспортированный текстовый компонент в буфер обмена. +animated_java.tool.text_display.copy_text.copied: Текст скопирован в буфер обмена! + +# Item Display Panel +animated_java.panel.vanilla_item_display.title: Отображаемый предмет +animated_java.panel.vanilla_item_display.description: Предмет, который будет отображаться. +animated_java.tool.item_display.item_display.title: Режим отображения предмета +animated_java.tool.item_display.item_display.description: Определяет, какая трансформация модели будет применена к предмету (как указано в поле "display" JSON-файла модели). +animated_java.tool.item_display.item_display.options.none: Нет +animated_java.tool.item_display.item_display.options.thirdperson_lefthand: От третьего лица (левая рука) +animated_java.tool.item_display.item_display.options.thirdperson_righthand: От третьего лица (правая рука) +animated_java.tool.item_display.item_display.options.firstperson_lefthand: От первого лица (левая рука) +animated_java.tool.item_display.item_display.options.firstperson_righthand: От первого лица (правая рука) +animated_java.tool.item_display.item_display.options.head: Голова +animated_java.tool.item_display.item_display.options.gui: Интерфейс (GUI) +animated_java.tool.item_display.item_display.options.ground: На земле +animated_java.tool.item_display.item_display.options.fixed: Фиксированно + +# Block Display Panel +animated_java.panel.vanilla_block_display.title: Отображаемый блок +animated_java.panel.vanilla_block_display.description: Блок, который будет отображаться. Поддерживаются состояния блоков! + +### Custom Elements +## Item Display +animated_java.vanilla_item_display.title: Предмет дисплей + +## Block Display + +### Misc + +# Blueprint Setting Errors - Failed to Export Message Box +animated_java.misc.failed_to_export.title: Не удалось экспортировать +animated_java.misc.failed_to_export.custom_models.message: Вы отключили экспорт ресурспака, но в вашем проекте есть пользовательские модели! Пожалуйста включите экспорт ресурспака или удалите модели перед экспортом. +animated_java.misc.failed_to_export.blueprint_settings.message: В настройках чертежа найдены ошибки! Пожалуйста исправьте их перед экспортом. +animated_java.misc.failed_to_export.blueprint_settings.error_item: 'Найдена ошибка с {0}:' +animated_java.misc.failed_to_export.button: Ок +animated_java.misc.failed_to_export.invalid_rotation.message: |- + Некоторые кубы в вашей модели имеют неправильные повороты! + + Кубы должны иметь поворот в -45, -22.5, 0, 22.5, или 45 градусов, и могут быть повёрнуты только на одной оси при выборе Майнкрафт версий ниже 1.21.6. + + Если хотите повернуть куб более точно, или на множистве осей, переместите куб в кость и поворачивайте её вместо куба. + + Все недопустимые кубы подсвечены красным. Пожалуйста исправьте их перед экспортом. +animated_java.misc.failed_to_export.invalid_rotation.message_post_1_21_6: |- + Некоторые кубы в вашей модели имеют неправильные повороты! + + Кубы могут быть повёрнуты только на одной оси при выборе Майнкрафт версии 1.21.6 или выше. + + Если хотите повернуть куб на множистве осей, переместите куб в кость и поворачивайте её вместо куба. + + Все недопустимые кубы подсвечены красным. Пожалуйста исправьте их перед экспортом. +animated_java.misc.failed_to_export.rig_has_textures_but_no_custom_models.message: |- + У вашей модели есть текстуры, но нет пользовательских моделей (Кубов) к которым их можно применить! + Пожалуйста создайте кубы и используйте эти текстуры, или удалите текстуры перед экспортом. +animated_java.misc.failed_to_export.rig_has_custom_models_but_no_textures.message: |- + У вашей модели есть пользовательские модели (Кубы), но нет текстур которые можно применить к ним! + Пожалуйста добавьте текстуры к вашим кубам, или удалите их перед экспортом. + +animated_java.toast.invalid_rotations: |- + Неверный поворот кубов! + + Кубы должны иметь поворот в -45, -22.5, 0, 22.5, или 45 градусов, и могут быть повёрнуты только на одной оси при выборе Майнкрафт версий ниже 1.21.6. + + Все недопустимые кубы подсвечены красным. + +animated_java.toast.invalid_rotations_post_1_21_6: |- + Неверный поворот кубов! + + Кубы могут быть повёрнуты только на одной оси при выборе Майнкрафт версии 1.21.6 и выше. + + Все недопустимые кубы подсвечены красным. + +# Format Category +animated_java.format_category.animated_java: Animated Java + +# Model Manager Warnings +animated_java.block_model_manager.fluid_warning: Жидкости не рендерятся в блок дисплеях. +animated_java.block_model_manager.mob_head_warning: Головы мобов не рендерятся в блок дисплеях. Используйте предмет дисплей. +animated_java.block_model_manager.facing_warning: Состояние "facing" не поддерживается в блок дисплеях. + +# Project Errors +animated_java.error.blueprint_export_path_doesnt_exist.title: Путь экспорта чертежа не существует. +animated_java.error.blueprint_export_path_doesnt_exist.description: |- + Путь экспорта чертежа '{0}' не существует! + + Убедитесь что папка в которую происходит экспорт существует и попробуйте снова. diff --git a/src/outliner/vanillaItemDisplay.ts b/src/outliner/vanillaItemDisplay.ts index 2b8215a1..42f111b3 100644 --- a/src/outliner/vanillaItemDisplay.ts +++ b/src/outliner/vanillaItemDisplay.ts @@ -202,7 +202,7 @@ export const PREVIEW_CONTROLLER = new NodePreviewController(VanillaItemDisplay, updateGeometry(el: VanillaItemDisplay) { if (!el.mesh) return - void getItemModel(el.item) + void getItemModel(el.item, el.itemDisplay) .then(result => { if (!result) return const mesh = el.mesh as THREE.Mesh @@ -213,11 +213,11 @@ export const PREVIEW_CONTROLLER = new NodePreviewController(VanillaItemDisplay, mesh.add(result.mesh) mesh.add(result.outline) mesh.outline = result.outline + mesh.outline.visible = el.selected el.preview_controller.updateHighlight(el) el.preview_controller.updateTransform(el) mesh.visible = el.visibility - TickUpdates.selection = true }) .catch(err => { if (typeof err.message === 'string') { diff --git a/src/pluginPackage/changelog.json b/src/pluginPackage/changelog.json index 6c09b82e..cff2b2cd 100644 --- a/src/pluginPackage/changelog.json +++ b/src/pluginPackage/changelog.json @@ -579,5 +579,29 @@ ] } ] + }, + "1.8.1": { + "title": "v1.8.1", + "author": "Titus Evans (SnaveSutit)", + "date": "2025-11-2", + "categories": [ + { + "title": "Changes", + "list": [ + "💬 Added Russian localization - Thanks Koishem!", + "Added previewing for Item Display's `item_display` transforms." + ] + }, + { + "title": "Fixes", + "list": [ + "Fixed [#465](https://github.com/Animated-Java/animated-java/issues/465)", + "Fixed `global/on_tick` function being placed at start of `minecraft:tick` function tag.", + "Fixed backwards / missing chest model.", + "Fixed block models on Item Displays using the wrong pivot point.", + "Fixed item display panel losing focus when a valid item is entered." + ] + } + ] } } diff --git a/src/systems/datapackCompiler/1.20.4/animation.mcb b/src/systems/datapackCompiler/1.20.4/animation.mcb index f641b8e6..8309ccd1 100644 --- a/src/systems/datapackCompiler/1.20.4/animation.mcb +++ b/src/systems/datapackCompiler/1.20.4/animation.mcb @@ -283,8 +283,12 @@ dir animations { execute \ if score @s <%OBJECTIVES.FRAME(animation.storage_name)%> \ matches <%animation.duration-1%> \ - run return run \ - function ../stop + run return run block loop_mode_stop { + scoreboard players set @s <%OBJECTIVES.FRAME(animation.storage_name)%> 0 + tag @s add <%TAGS.TRANSFORMS_ONLY()%> + execute at @s run function ./zzz/set_frame {frame: 0} + tag @s remove <%TAGS.TRANSFORMS_ONLY()%> + } } scoreboard players add @s <%OBJECTIVES.FRAME(animation.storage_name)%> 1 } diff --git a/src/systems/datapackCompiler/1.20.5/animation.mcb b/src/systems/datapackCompiler/1.20.5/animation.mcb index 853fb960..69aaa48f 100644 --- a/src/systems/datapackCompiler/1.20.5/animation.mcb +++ b/src/systems/datapackCompiler/1.20.5/animation.mcb @@ -283,8 +283,12 @@ dir animations { execute \ if score @s <%OBJECTIVES.FRAME(animation.storage_name)%> \ matches <%animation.duration-1%> \ - run return run \ - function ../stop + run return run block loop_mode_stop { + scoreboard players set @s <%OBJECTIVES.FRAME(animation.storage_name)%> 0 + tag @s add <%TAGS.TRANSFORMS_ONLY()%> + execute at @s run function ./zzz/set_frame {frame: 0} + tag @s remove <%TAGS.TRANSFORMS_ONLY()%> + } } scoreboard players add @s <%OBJECTIVES.FRAME(animation.storage_name)%> 1 } diff --git a/src/systems/datapackCompiler/1.21.2/animation.mcb b/src/systems/datapackCompiler/1.21.2/animation.mcb index b3ce3027..80196da2 100644 --- a/src/systems/datapackCompiler/1.21.2/animation.mcb +++ b/src/systems/datapackCompiler/1.21.2/animation.mcb @@ -283,8 +283,12 @@ dir animations { execute \ if score @s <%OBJECTIVES.FRAME(animation.storage_name)%> \ matches <%animation.duration-1%> \ - run return run \ - function ../stop + run return run block loop_mode_stop { + scoreboard players set @s <%OBJECTIVES.FRAME(animation.storage_name)%> 0 + tag @s add <%TAGS.TRANSFORMS_ONLY()%> + execute at @s run function ./zzz/set_frame {frame: 0} + tag @s remove <%TAGS.TRANSFORMS_ONLY()%> + } } scoreboard players add @s <%OBJECTIVES.FRAME(animation.storage_name)%> 1 } diff --git a/src/systems/datapackCompiler/1.21.4/animation.mcb b/src/systems/datapackCompiler/1.21.4/animation.mcb index f497c374..797ca19f 100644 --- a/src/systems/datapackCompiler/1.21.4/animation.mcb +++ b/src/systems/datapackCompiler/1.21.4/animation.mcb @@ -283,8 +283,12 @@ dir animations { execute \ if score @s <%OBJECTIVES.FRAME(animation.storage_name)%> \ matches <%animation.duration-1%> \ - run return run \ - function ../stop + run return run block loop_mode_stop { + scoreboard players set @s <%OBJECTIVES.FRAME(animation.storage_name)%> 0 + tag @s add <%TAGS.TRANSFORMS_ONLY()%> + execute at @s run function ./zzz/set_frame {frame: 0} + tag @s remove <%TAGS.TRANSFORMS_ONLY()%> + } } scoreboard players add @s <%OBJECTIVES.FRAME(animation.storage_name)%> 1 } diff --git a/src/systems/minecraft/blockModelManager.ts b/src/systems/minecraft/blockModelManager.ts index 6b84ac52..82eab15c 100644 --- a/src/systems/minecraft/blockModelManager.ts +++ b/src/systems/minecraft/blockModelManager.ts @@ -1,3 +1,4 @@ +import { ItemDisplayMode } from 'src/outliner/vanillaItemDisplay' import { mergeGeometries } from '../../util/bufferGeometryUtils' import { type IParsedBlock, @@ -8,6 +9,7 @@ import { import { translate } from '../../util/translation' import { assetsLoaded, getJSONAsset, getPngAssetAsDataUrl, hasAsset } from './assetManager' import type { BlockStateValue } from './blockstateManager' +import { applyModelDisplayTransform } from './itemModelManager' import type { IBlockModel, IBlockState, @@ -77,7 +79,8 @@ export async function getBlockModel(block: string): Promise { const modelPath = getPathFromResourceLocation(variant.model, 'models') const model = getJSONAsset(modelPath + '.json') as IBlockModel @@ -97,10 +100,12 @@ export async function parseBlockModel( if (model.parent) { const parentVariant = { ...variant, model: model.parent } - return await parseBlockModel(parentVariant, model) + return await parseBlockModel(parentVariant, model, itemDisplay) } - return await generateModelMesh(variant, model) + const mesh = await generateModelMesh(variant, model) + applyModelDisplayTransform(mesh, model, itemDisplay) + return mesh } async function generateModelMesh( @@ -189,9 +194,7 @@ async function generateModelMesh( if (variant.x) geometry.rotateX(Math.degToRad(variant.x)) if (variant.y) geometry.rotateY(-Math.degToRad(variant.y)) geometry.rotateY(Math.degToRad(-180)) // Rotate back after mirroring - if (variant.isItemModel) { - geometry.translate(0, 8, 0) - } else { + if (!variant.isItemModel) { geometry.translate(8, 8, 8) } diff --git a/src/systems/minecraft/itemModelManager.ts b/src/systems/minecraft/itemModelManager.ts index 462a344e..4f3bb696 100644 --- a/src/systems/minecraft/itemModelManager.ts +++ b/src/systems/minecraft/itemModelManager.ts @@ -1,3 +1,4 @@ +import { ItemDisplayMode } from 'src/outliner/vanillaItemDisplay' import { mergeGeometries } from '../../util/bufferGeometryUtils' import { getPathFromResourceLocation, parseResourceLocation } from '../../util/minecraftUtil' import { assetsLoaded, getJSONAsset, getPngAssetAsDataUrl } from './assetManager' @@ -5,7 +6,7 @@ import { parseBlockModel } from './blockModelManager' import type { IItemModel } from './model' import { TEXTURE_FRAG_SHADER, TEXTURE_VERT_SHADER } from './textureShaders' -interface ItemModelMesh { +interface ItemMesh { mesh: THREE.Mesh outline: THREE.LineSegments boundingBox: THREE.BufferGeometry @@ -13,15 +14,18 @@ interface ItemModelMesh { } const LOADER = new THREE.TextureLoader() -const ITEM_MODEL_CACHE = new Map() +const ITEM_MODEL_CACHE = new Map() -export async function getItemModel(item: string): Promise { +export async function getItemModel( + item: string, + itemDisplay: ItemDisplayMode +): Promise { await assetsLoaded() - let result = ITEM_MODEL_CACHE.get(item) + const cacheKey = item + '|' + itemDisplay + let result = ITEM_MODEL_CACHE.get(cacheKey) if (!result) { - // console.warn(`Found no cached item model mesh for '${item}'`) - result = await parseItemModel(getItemResourceLocation(item)) - ITEM_MODEL_CACHE.set(item, result) + result = await parseItemModel(getItemResourceLocation(item), itemDisplay) + ITEM_MODEL_CACHE.set(cacheKey, result) } if (!result) return undefined result = { @@ -48,9 +52,78 @@ function getItemResourceLocation(item: string) { return resource.namespace + ':' + 'item/' + resource.path } -async function parseItemModel(location: string, childModel?: IItemModel): Promise { +const GENERATED_ITEM_DISPLAY_SETTINGS: NonNullable = { + thirdperson_righthand: { translation: [0, 3, 1], scale: [0.55, 0.55, 0.55] }, + thirdperson_lefthand: { translation: [0, 3, 1], scale: [0.55, 0.55, 0.55] }, + firstperson_righthand: { + rotation: [0, -90, 25], + translation: [1.13, 3.2, 1.13], + scale: [0.68, 0.68, 0.68], + }, + firstperson_lefthand: { + rotation: [0, -90, 25], + translation: [1.13, 3.2, 1.13], + scale: [0.68, 0.68, 0.68], + }, + ground: { translation: [0, 2, 0], scale: [0.5, 0.5, 0.5] }, + head: { rotation: [0, -180, 0], translation: [0, 13, 7] }, + fixed: { rotation: [0, -180, 0] }, +} + +export function applyModelDisplayTransform( + itemModel: ItemMesh, + model: IItemModel, + itemDisplay: ItemDisplayMode +) { + if (itemDisplay === 'none' || !model.display) return + + // default to right hand if left hand display is not defined + if (!model.display.thirdperson_lefthand && model.display.thirdperson_righthand) { + model.display.thirdperson_lefthand = structuredClone(model.display.thirdperson_righthand) + } + if (!model.display.firstperson_lefthand && model.display.firstperson_righthand) { + model.display.firstperson_lefthand = structuredClone(model.display.thirdperson_righthand) + } + + const display = model.display[itemDisplay] + if (!display) return + + const matrix = new THREE.Matrix4() + if (display.rotation) { + const rot = display.rotation.map((n: number) => (n * Math.PI) / 180) + matrix.makeRotationFromEuler(Reusable.euler1.set(-rot[0], -rot[1], rot[2])) + } + if (display.translation) { + matrix.setPosition( + Reusable.vec1.set( + display.translation[0], + display.translation[1], + display.translation[2] + ) + ) + } + if (display.scale) { + matrix.scale(Reusable.vec2.set(...display.scale)) + } + + itemModel.boundingBox.applyMatrix4(matrix) + itemModel.outline.geometry.applyMatrix4(matrix) + itemModel.mesh.applyMatrix4(matrix) +} + +async function parseItemModel( + location: string, + itemDisplay: ItemDisplayMode, + childModel?: IItemModel +): Promise { const modelPath = getPathFromResourceLocation(location, 'models') - const model = getJSONAsset(modelPath + '.json') as IItemModel + let model: IItemModel + try { + model = getJSONAsset(modelPath + '.json') + } catch { + // Fallback to block model if item model doesn't exist + model = getJSONAsset(modelPath.replace('item/', 'block/') + '.json') + } if (childModel) { // if (childModel.ambientocclusion !== undefined) @@ -70,20 +143,26 @@ async function parseItemModel(location: string, childModel?: IItemModel): Promis if (model.parent) { const resource = parseResourceLocation(model.parent) if (resource.type === 'block') { - return await parseBlockModel({ model: model.parent, isItemModel: true }, model) - } - if (resource.path === 'item/generated') { - return await generateItemMesh(location, model) + return await parseBlockModel( + { model: model.parent, isItemModel: true }, + model, + itemDisplay + ) + } else if (resource.path === 'item/generated') { + const itemMesh = await generateItemMesh(location, model) + model.display ??= GENERATED_ITEM_DISPLAY_SETTINGS + applyModelDisplayTransform(itemMesh, model, itemDisplay) + return itemMesh } else { - return await parseItemModel(model.parent, model) + return await parseItemModel(model.parent, itemDisplay, model) } } else { // The block model parser handles custom item models made from elements just fine, so we can use it here - return await parseBlockModel({ model: location, isItemModel: true }, model) + return await parseBlockModel({ model: location, isItemModel: true }, model, itemDisplay) } } -async function generateItemMesh(location: string, model: IItemModel): Promise { +async function generateItemMesh(location: string, model: IItemModel): Promise { const masterMesh = new THREE.Mesh() const boundingBoxes: THREE.BufferGeometry[] = [] const outlineGeos: THREE.BufferGeometry[] = [] diff --git a/src/systems/minecraft/model.d.ts b/src/systems/minecraft/model.d.ts index f1ee553b..39ce37bc 100644 --- a/src/systems/minecraft/model.d.ts +++ b/src/systems/minecraft/model.d.ts @@ -41,10 +41,10 @@ export interface IItemModelElementFace { } export interface IModelELement { - from: [number, number, number] - to: [number, number, number] + from: ArrayVector3 + to: ArrayVector3 rotation?: { - origin: [number, number, number] + origin: ArrayVector3 axis: 'x' | 'y' | 'z' angle: number rescale: boolean @@ -56,13 +56,15 @@ export interface IModelELement { export interface IItemModel { parent?: string textures: Record & Record<`layer${number}`, string> & { particle?: string } - display?: Record< - ModelDisplaySlot, - { - rotation: [number, number, number] - translation: [number, number, number] - scale: [number, number, number] - } + display?: Partial< + Record< + ModelDisplaySlot, + { + rotation?: ArrayVector3 + translation?: ArrayVector3 + scale?: ArrayVector3 + } + > > gui_light?: 'front' | 'side' elements?: IModelELement[] @@ -75,13 +77,15 @@ export interface IItemModel { export interface IBlockModel { parent?: string textures: Record & Record<`layer${number}`, string> & { particle?: string } - display?: Record< - ModelDisplaySlot, - { - rotation: [number, number, number] - translation: [number, number, number] - scale: [number, number, number] - } + display?: Partial< + Record< + ModelDisplaySlot, + { + rotation?: ArrayVector3 + translation?: ArrayVector3 + scale?: ArrayVector3 + } + > > ambientocclusion?: boolean elements?: IModelELement[] diff --git a/src/util/minecraftUtil.ts b/src/util/minecraftUtil.ts index 8fd808dd..ca94a908 100644 --- a/src/util/minecraftUtil.ts +++ b/src/util/minecraftUtil.ts @@ -211,6 +211,8 @@ export class DataPackTag { this.values.sort((a, b) => { const idA = DataPackTag.getEntryId(a) const idB = DataPackTag.getEntryId(b) + if (idA === 'animated_java:global/on_tick') return 1 + if (idB === 'animated_java:global/on_tick') return -1 return idA.localeCompare(idB, 'en') }) diff --git a/test-packs/1.20.4/blueprints/item_displays_1.20.4.ajblueprint b/test-packs/1.20.4/blueprints/item_displays_1.20.4.ajblueprint new file mode 100644 index 00000000..01d67ed9 --- /dev/null +++ b/test-packs/1.20.4/blueprints/item_displays_1.20.4.ajblueprint @@ -0,0 +1,167 @@ +{ + "meta": { + "format": "animated-java:format/blueprint", + "format_version": "1.8.0", + "uuid": "b826aacd-866a-0b17-7e71-9de81b709a63", + "save_location": "D:\\github-repos\\animated-java\\old-animated-java\\test-packs\\1.20.4\\blueprints\\item_displays_1.20.4.ajblueprint", + "last_used_export_namespace": "item" + }, + "resolution": { + "width": 16, + "height": 16 + }, + "blueprint_settings": { + "export_namespace": "item", + "render_box": [48, 48], + "resource_pack_export_mode": "none", + "target_minecraft_version": "1.20.4", + "data_pack": "../datapacks/animated_java", + "auto_update_rig_orientation": false + }, + "elements": [ + { + "uuid": "760ae20b-4811-dff3-9c63-d838ea733106", + "type": "animated_java:vanilla_item_display", + "name": "item_display", + "position": [-16, 32, 0], + "rotation": [0, 0, 0], + "scale": [1, 1, 1], + "visibility": true, + "locked": false, + "export": true, + "item": "minecraft:chest", + "itemDisplay": "thirdperson_righthand", + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } + }, + { + "uuid": "c1a6d48c-53c1-a345-9748-c64c45d38519", + "type": "animated_java:vanilla_block_display", + "name": "block_display", + "position": [8, 0, -8], + "rotation": [0, 0, 0], + "scale": [1, 1, 1], + "visibility": true, + "locked": false, + "export": true, + "block": "minecraft:chest", + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } + }, + { + "uuid": "24f03937-7f78-8706-e0fd-6983e91b2be2", + "type": "animated_java:vanilla_item_display", + "name": "item_display1", + "position": [0, 7, 0], + "rotation": [0, 0, 0], + "scale": [1, 1, 1], + "visibility": true, + "locked": false, + "export": true, + "item": "minecraft:diamond", + "itemDisplay": "none", + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } + }, + { + "uuid": "ffeada48-0b0c-95cd-c39b-fb755ed9528d", + "type": "animated_java:vanilla_item_display", + "name": "item_display3", + "position": [0, 32, 0], + "rotation": [0, 0, 0], + "scale": [1, 1, 1], + "visibility": true, + "locked": false, + "export": true, + "item": "minecraft:chest", + "itemDisplay": "thirdperson_lefthand", + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } + }, + { + "uuid": "6c7bba89-d341-ddd3-3fdd-1b19454d98fc", + "type": "animated_java:vanilla_item_display", + "name": "item_display2", + "position": [-16, 23, 0], + "rotation": [0, 0, 0], + "scale": [1, 1, 1], + "visibility": true, + "locked": false, + "export": true, + "item": "minecraft:diamond", + "itemDisplay": "ground", + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } + }, + { + "uuid": "a5c49a54-cd70-7516-e5ed-94642c88d3fd", + "type": "animated_java:vanilla_block_display", + "name": "block_display2", + "position": [-24, 0, -8], + "rotation": [0, 0, 0], + "scale": [1, 1, 1], + "visibility": true, + "locked": false, + "export": true, + "block": "minecraft:cyan_bed", + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } + } + ], + "outliner": [ + "760ae20b-4811-dff3-9c63-d838ea733106", + "ffeada48-0b0c-95cd-c39b-fb755ed9528d", + "c1a6d48c-53c1-a345-9748-c64c45d38519", + "a5c49a54-cd70-7516-e5ed-94642c88d3fd", + "24f03937-7f78-8706-e0fd-6983e91b2be2", + "6c7bba89-d341-ddd3-3fdd-1b19454d98fc" + ], + "textures": [], + "variants": { + "default": { + "name": "default", + "display_name": "Default", + "uuid": "789ba6c9-7bed-41be-3fc4-fd271a4dc00d", + "texture_map": {}, + "excluded_nodes": [], + "is_default": true + }, + "list": [] + }, + "collections": [ + { + "uuid": "75aa7f41-1c57-be69-db96-478d11df81e9", + "name": "cobblestone_stairs", + "export_codec": "", + "children": [ + "27a5728f-1868-35b0-ddf2-94f58e7305bd", + "e42645c7-89b3-198d-dce6-8cd5e2dbccb6", + "9e758d97-f302-a2f5-1147-ef03c323ba27", + "47608e95-885c-7f7c-5331-49d9fb70c979", + "39d33f52-142e-60c8-5912-38b3466c4a3f", + "2e72601c-6d12-cd2f-e14d-35ac2e7da732", + "487e7ddd-0d55-a188-cc02-15e5025ac19f", + "1dc76a78-955a-f71b-ae83-b332d3aa3196" + ], + "visibility": false + } + ] +} \ No newline at end of file diff --git a/test-packs/1.20.4/blueprints/rotated_blockstates_1.20.4.ajblueprint b/test-packs/1.20.4/blueprints/rotated_blockstates_1.20.4.ajblueprint index 4e9a7d30..1ff72497 100644 --- a/test-packs/1.20.4/blueprints/rotated_blockstates_1.20.4.ajblueprint +++ b/test-packs/1.20.4/blueprints/rotated_blockstates_1.20.4.ajblueprint @@ -30,15 +30,11 @@ "locked": false, "export": true, "block": "minecraft:lever[facing=north]", - "config": {}, - "item": "minecraft:diamond", - "itemDisplay": "none", - "text": "\"Hello World!\"", - "lineWidth": 200, - "backgroundColor": "#000000", - "align": "center", - "shadow": false, - "seeThrough": false + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } }, { "uuid": "22ad5245-d92c-7f66-6578-bc4f2ca565ec", @@ -51,15 +47,11 @@ "locked": false, "export": true, "block": "minecraft:lever[facing=south]", - "config": {}, - "item": "minecraft:diamond", - "itemDisplay": "none", - "text": "\"Hello World!\"", - "lineWidth": 200, - "backgroundColor": "#000000", - "align": "center", - "shadow": false, - "seeThrough": false + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } }, { "uuid": "2ecf5cb0-eae7-5434-d5c2-85f686edcaf0", @@ -72,15 +64,11 @@ "locked": false, "export": true, "block": "minecraft:lever[facing=east]", - "config": {}, - "item": "minecraft:diamond", - "itemDisplay": "none", - "text": "\"Hello World!\"", - "lineWidth": 200, - "backgroundColor": "#000000", - "align": "center", - "shadow": false, - "seeThrough": false + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } }, { "uuid": "d509630d-9540-1113-a879-03ce6793117d", @@ -93,15 +81,11 @@ "locked": false, "export": true, "block": "minecraft:lever[facing=west]", - "config": {}, - "item": "minecraft:diamond", - "itemDisplay": "none", - "text": "\"Hello World!\"", - "lineWidth": 200, - "backgroundColor": "#000000", - "align": "center", - "shadow": false, - "seeThrough": false + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } }, { "uuid": "f7e90b05-553d-be8a-0a74-a10f3c40f905", @@ -114,15 +98,11 @@ "locked": false, "export": true, "block": "minecraft:stone_button[facing=north]", - "config": {}, - "item": "minecraft:diamond", - "itemDisplay": "none", - "text": "\"Hello World!\"", - "lineWidth": 200, - "backgroundColor": "#000000", - "align": "center", - "shadow": false, - "seeThrough": false + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } }, { "uuid": "db073962-3077-37c3-a53d-5acc41e31500", @@ -135,15 +115,11 @@ "locked": false, "export": true, "block": "minecraft:stone_button[facing=south]", - "config": {}, - "item": "minecraft:diamond", - "itemDisplay": "none", - "text": "\"Hello World!\"", - "lineWidth": 200, - "backgroundColor": "#000000", - "align": "center", - "shadow": false, - "seeThrough": false + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } }, { "uuid": "ae5551bd-088a-8861-524d-9914984bae41", @@ -156,15 +132,11 @@ "locked": false, "export": true, "block": "minecraft:stone_button[facing=east]", - "config": {}, - "item": "minecraft:diamond", - "itemDisplay": "none", - "text": "\"Hello World!\"", - "lineWidth": 200, - "backgroundColor": "#000000", - "align": "center", - "shadow": false, - "seeThrough": false + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } }, { "uuid": "19d912ba-80b5-1c18-41d0-857ee8b4d590", @@ -177,15 +149,11 @@ "locked": false, "export": true, "block": "minecraft:stone_button[facing=west]", - "config": {}, - "item": "minecraft:diamond", - "itemDisplay": "none", - "text": "\"Hello World!\"", - "lineWidth": 200, - "backgroundColor": "#000000", - "align": "center", - "shadow": false, - "seeThrough": false + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } }, { "uuid": "260e05ee-918f-b242-1570-7cc241284acb", @@ -198,15 +166,11 @@ "locked": false, "export": true, "block": "minecraft:wall_torch[facing=north]", - "config": {}, - "item": "minecraft:diamond", - "itemDisplay": "none", - "text": "\"Hello World!\"", - "lineWidth": 200, - "backgroundColor": "#000000", - "align": "center", - "shadow": false, - "seeThrough": false + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } }, { "uuid": "5290f4fe-83b8-0c33-81b4-f0407db57738", @@ -219,15 +183,11 @@ "locked": false, "export": true, "block": "minecraft:wall_torch[facing=south]", - "config": {}, - "item": "minecraft:diamond", - "itemDisplay": "none", - "text": "\"Hello World!\"", - "lineWidth": 200, - "backgroundColor": "#000000", - "align": "center", - "shadow": false, - "seeThrough": false + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } }, { "uuid": "b8918e92-660b-9728-6415-6de83f8b14f1", @@ -240,15 +200,11 @@ "locked": false, "export": true, "block": "minecraft:wall_torch[facing=east]", - "config": {}, - "item": "minecraft:diamond", - "itemDisplay": "none", - "text": "\"Hello World!\"", - "lineWidth": 200, - "backgroundColor": "#000000", - "align": "center", - "shadow": false, - "seeThrough": false + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } }, { "uuid": "fd962fbf-1279-4871-adee-50664bb02c85", @@ -261,15 +217,11 @@ "locked": false, "export": true, "block": "minecraft:wall_torch[facing=west]", - "config": {}, - "item": "minecraft:diamond", - "itemDisplay": "none", - "text": "\"Hello World!\"", - "lineWidth": 200, - "backgroundColor": "#000000", - "align": "center", - "shadow": false, - "seeThrough": false + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } }, { "uuid": "27a5728f-1868-35b0-ddf2-94f58e7305bd", @@ -282,15 +234,11 @@ "locked": false, "export": true, "block": "minecraft:cobblestone_stairs[facing=north]", - "config": {}, - "item": "minecraft:diamond", - "itemDisplay": "none", - "text": "\"Hello World!\"", - "lineWidth": 200, - "backgroundColor": "#000000", - "align": "center", - "shadow": false, - "seeThrough": false + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } }, { "uuid": "9e758d97-f302-a2f5-1147-ef03c323ba27", @@ -303,15 +251,11 @@ "locked": false, "export": true, "block": "minecraft:cobblestone_stairs[facing=south]", - "config": {}, - "item": "minecraft:diamond", - "itemDisplay": "none", - "text": "\"Hello World!\"", - "lineWidth": 200, - "backgroundColor": "#000000", - "align": "center", - "shadow": false, - "seeThrough": false + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } }, { "uuid": "39d33f52-142e-60c8-5912-38b3466c4a3f", @@ -324,15 +268,11 @@ "locked": false, "export": true, "block": "minecraft:cobblestone_stairs[facing=east]", - "config": {}, - "item": "minecraft:diamond", - "itemDisplay": "none", - "text": "\"Hello World!\"", - "lineWidth": 200, - "backgroundColor": "#000000", - "align": "center", - "shadow": false, - "seeThrough": false + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } }, { "uuid": "487e7ddd-0d55-a188-cc02-15e5025ac19f", @@ -345,15 +285,11 @@ "locked": false, "export": true, "block": "minecraft:cobblestone_stairs[facing=west]", - "config": {}, - "item": "minecraft:diamond", - "itemDisplay": "none", - "text": "\"Hello World!\"", - "lineWidth": 200, - "backgroundColor": "#000000", - "align": "center", - "shadow": false, - "seeThrough": false + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } }, { "uuid": "e42645c7-89b3-198d-dce6-8cd5e2dbccb6", @@ -366,15 +302,11 @@ "locked": false, "export": true, "block": "minecraft:cobblestone_stairs[facing=north,shape=inner_left]", - "config": {}, - "item": "minecraft:diamond", - "itemDisplay": "none", - "text": "\"Hello World!\"", - "lineWidth": 200, - "backgroundColor": "#000000", - "align": "center", - "shadow": false, - "seeThrough": false + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } }, { "uuid": "1dc76a78-955a-f71b-ae83-b332d3aa3196", @@ -387,15 +319,11 @@ "locked": false, "export": true, "block": "minecraft:cobblestone_stairs[facing=west,shape=inner_left]", - "config": {}, - "item": "minecraft:diamond", - "itemDisplay": "none", - "text": "\"Hello World!\"", - "lineWidth": 200, - "backgroundColor": "#000000", - "align": "center", - "shadow": false, - "seeThrough": false + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } }, { "uuid": "47608e95-885c-7f7c-5331-49d9fb70c979", @@ -408,15 +336,11 @@ "locked": false, "export": true, "block": "minecraft:cobblestone_stairs[facing=south,shape=inner_left]", - "config": {}, - "item": "minecraft:diamond", - "itemDisplay": "none", - "text": "\"Hello World!\"", - "lineWidth": 200, - "backgroundColor": "#000000", - "align": "center", - "shadow": false, - "seeThrough": false + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } }, { "uuid": "2e72601c-6d12-cd2f-e14d-35ac2e7da732", @@ -429,15 +353,11 @@ "locked": false, "export": true, "block": "minecraft:cobblestone_stairs[facing=east,shape=inner_left]", - "config": {}, - "item": "minecraft:diamond", - "itemDisplay": "none", - "text": "\"Hello World!\"", - "lineWidth": 200, - "backgroundColor": "#000000", - "align": "center", - "shadow": false, - "seeThrough": false + "onSummonFunction": "", + "configs": { + "default": {}, + "variants": {} + } } ], "outliner": [