Разработка аддонов для мода Create в Minecraft

Практический курс по созданию дополнений к популярному моду Create с использованием Java. Вы научитесь работать с кинетической энергией, создавать уникальные механизмы и интегрировать их в экосистему Create.

1. Настройка рабочей среды и подключение зависимостей Create API

Настройка рабочей среды и подключение зависимостей Create API

Добро пожаловать в курс по разработке аддонов для мода Create! Если вы читаете эту статью, значит, вы готовы перейти от простого игрока к творцу, способному расширять границы возможного в Minecraft. Create — это не просто мод, это целая инженерная экосистема. Создание аддонов для него требует понимания того, как взаимодействовать с его API (Application Programming Interface).

В этой первой статье мы заложим фундамент: установим необходимый софт, развернем проект и научим его «видеть» код мода Create.

Необходимый инструментарий

Прежде чем писать код, нам нужно подготовить верстак. Для разработки модов под современные версии Minecraft (мы будем ориентироваться на версию 1.20.1, так как она является одной из самых стабильных для Create на данный момент) нам понадобятся следующие инструменты:

  • Java Development Kit (JDK)
  • Интегрированная среда разработки (IDE)
  • Исходный код Minecraft Forge (MDK)
  • Установка Java Development Kit (JDK)

    Minecraft написан на Java, и для разных версий игры требуются разные версии Java. Для версии 1.20.1 стандартом является Java 17.

    > Важно использовать именно JDK, а не JRE. JDK (Development Kit) содержит инструменты для компиляции кода, в то время как JRE (Runtime Environment) позволяет только запускать программы.

    Рекомендуется использовать дистрибутивы от Eclipse Adoptium, так как они наиболее стабильны для моддинга.

    Выбор среды разработки (IDE)

    IDE — это ваш главный инструмент, «умный блокнот», который будет подсказывать ошибки, автодополнять код и помогать в навигации. Существует два основных лидера:

    * IntelliJ IDEA (рекомендуется) * Eclipse

    В рамках этого курса мы будем использовать IntelliJ IDEA Community Edition. Она бесплатна, имеет отличную интеграцию с Gradle и Minecraft, а также более современный интерфейс.

    !Схема необходимых компонентов для начала разработки: Java, IDE и Forge.

    Создание проекта на базе Forge

    Разработка аддона начинается с создания обычного мода. Мы будем использовать Minecraft Forge — самый популярный загрузчик модов, на котором базируется Create.

    Шаг 1: Скачивание MDK

  • Перейдите на официальный сайт Minecraft Forge.
  • Выберите версию 1.20.1.
  • Скачайте MDK (Mod Development Kit). Это архив с шаблоном проекта.
  • Шаг 2: Распаковка и импорт

  • Распакуйте архив в пустую папку. Назовите её именем вашего будущего аддона (например, MyCreateAddon).
  • Запустите IntelliJ IDEA.
  • Выберите Open и укажите путь к файлу build.gradle в вашей папке.
  • Выберите Open as Project.
  • После этого IDE начнет процесс индексации и скачивания библиотек. Это может занять от 5 до 20 минут в зависимости от скорости вашего интернета. Gradle скачает Minecraft, декомпилирует его и подготовит среду.

    Структура проекта

    После завершения настройки вы увидите структуру папок слева. Нас интересуют следующие элементы:

    * src/main/java — здесь будет лежать весь ваш Java-код. * src/main/resources — здесь хранятся текстуры, модели и конфигурационные файлы. * build.gradle — скрипт сборки проекта. Это «паспорт» вашего мода и инструкция для компилятора. * gradle.properties — файл с переменными (версия мода, версия игры и т.д.).

    Подключение Create API

    Самый важный этап — объяснить нашему проекту, что мы хотим использовать код мода Create. Если мы этого не сделаем, мы не сможем обращаться к шестеренкам, конвейерам и кинетической энергии в нашем коде.

    Для этого нам нужно отредактировать файл build.gradle.

    Добавление репозитория

    Gradle скачивает библиотеки из репозиториев. По умолчанию там есть только официальные сервера Minecraft и Forge. Нам нужно добавить репозиторий, где хранится Create.

    Откройте build.gradle и найдите блок repositories. Добавьте туда ссылку на Maven-репозиторий tterrag (разработчика библиотек для Create):

    Добавление зависимостей

    Теперь, когда Gradle знает, где искать, нужно сказать ему, что искать. Найдите блок dependencies.

    Нам нужно добавить сам Create и библиотеку Flywheel (движок рендеринга, который использует Create). Лучшей практикой является вынос версий в файл gradle.properties, но для простоты мы пропишем их напрямую или используем переменные, если они уже заданы.

    Вставьте следующие строки в блок dependencies:

    Разбор элементов: * implementation — говорит Gradle, что эта библиотека нужна для компиляции и работы. * fg.deobf — специальная команда ForgeGradle. Она «деосфусцирует» (расшифровывает) имена методов и полей в скачанном моде, чтобы вы видели понятные названия вроде getSpeed(), а не func_12345_a(). * slim — версия Create без встроенных библиотек (мы подключаем их отдельно для надежности).

    Чтобы этот код заработал, вам нужно добавить соответствующие версии в файл gradle.properties. Откройте его и добавьте:

    После внесения изменений обязательно нажмите кнопку Reload Gradle Changes (значок слона с синими стрелками) в правой панели IntelliJ IDEA.

    !Визуализация процесса загрузки зависимостей через Gradle.

    Настройка метаданных (mods.toml)

    Последний штрих — настроить информацию о вашем моде. Она находится в файле src/main/resources/META-INF/mods.toml.

    Найдите этот файл и измените следующие поля:

    * modId: Уникальный идентификатор вашего мода (только латиница, нижний регистр, без пробелов). Например: my_create_addon. * displayName: Красивое название, которое игроки увидят в меню модов. * authors: Ваше имя. * description: Краткое описание мода.

    Также крайне важно добавить зависимость от Create в этом файле, чтобы игра не запускалась, если у пользователя не установлен Create. Найдите блок [[dependencies.modId]] (или создайте его) внизу файла:

    Первый запуск

    Теперь всё готово к первому тесту. Нам нужно убедиться, что игра запускается, и Create загружается вместе с нашим пустым аддоном.

  • В IntelliJ IDEA справа откройте панель Gradle.
  • Перейдите в Tasks -> forgegradle runs -> runClient.
  • Дважды кликните по runClient.
  • Запустится Minecraft. В главном меню нажмите кнопку Mods. В списке вы должны увидеть: * Minecraft * Forge * Create * Ваш аддон

    Если вы видите этот список — поздравляю! Вы успешно настроили рабочую среду. Теперь ваш проект «знает» о существовании Create, и вы можете использовать его классы в своем коде.

    Возможные проблемы

    * Ошибка "Could not find method fg.deobf": Убедитесь, что вы не удалили плагин ForgeGradle в начале файла build.gradle. * Игра крашится при запуске: Проверьте совместимость версий в gradle.properties. Версии Flywheel и Create должны строго соответствовать версии Minecraft. * IntelliJ не видит классы Create: Попробуйте выполнить команду File -> Invalidate Caches / Restart.

    В следующей статье мы перейдем к самому интересному — созданию нашего первого блока и регистрации его в системе Create.

    2. Основы кинетики: создание блоков, передающих и потребляющих вращение

    Основы кинетики: создание блоков, передающих и потребляющих вращение

    В предыдущей статье мы успешно настроили рабочую среду и подключили Create API. Теперь наш проект готов к работе, и пришло время вдохнуть жизнь в наши творения. Сердце мода Create — это кинетическая энергия. Шестеренки, валы, конвейеры — все они работают в единой сети, передавая вращение от источника к потребителю.

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

    Теория кинетической сети

    Прежде чем писать код, важно понять, как Create «думает». В ванильном Minecraft блоки обновляются через tick(). В Create же существует понятие Кинетической Сети (Kinetic Network).

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

    Чтобы ваш блок стал частью этой системы, он должен соответствовать двум критериям:

  • Блок (Block) должен наследовать специальный класс KineticBlock.
  • Сущность блока (BlockEntity) должна наследовать KineticBlockEntity.
  • !Схема передачи вращения от источника к потребителю через кинетическую сеть.

    Создание класса блока: KineticBlock

    В обычной разработке модов вы бы наследовали класс Block. В аддонах для Create мы используем KineticBlock. Этот класс уже содержит логику для определения оси вращения и соединения с другими кинетическими механизмами.

    Создайте новый класс SimpleKineticBlock в пакете blocks вашего проекта:

    Разбор методов: * getRotationAxis: Определяет, вокруг какой оси вращается ваш блок. Это критически важно для визуализации и соединения. Если вы хотите, чтобы ось зависела от того, как игрок поставил блок, вам нужно будет использовать свойства состояния блока (BlockState), например HORIZONTAL_AXIS. * getBlockEntityClass: Указывает игре, какая сущность (TileEntity) привязана к этому блоку.

    Создание сущности блока: KineticBlockEntity

    Сам по себе блок — это просто декорация. Вся логика вращения, скорости и нагрузки хранится в BlockEntity. Create предоставляет мощный базовый класс KineticBlockEntity.

    Создайте класс SimpleKineticBlockEntity:

    На данном этапе этот код позволяет блоку хранить информацию о своей скорости (getSpeed()) и нагрузке (getStress()), которые автоматически обновляются движком Create.

    Регистрация с помощью Registrate

    В первой статье мы подключили библиотеку Registrate. Это стандарт де-факто для аддонов Create. Она позволяет регистрировать блоки, предметы, модели и текстуры в несколько строчек кода, избавляя от гигантских JSON-файлов.

    В вашем главном классе мода (где инициализируется ModEventBus), добавьте следующий код:

    > CreateRegistrate — это мощная обертка. Метод .block(...) не только регистрирует блок, но и может автоматически генерировать простые модели и файлы локализации, если настроить генераторы данных (Data Generators).

    Математика стресса (Stress Impact)

    Одной из ключевых механик Create является баланс стресса (нагрузки). Если нагрузка превышает выработку, система останавливается. Как разработчик аддона, вы должны определить, сколько стресса потребляет ваш блок.

    Формула расчета влияния на сеть выглядит следующим образом:

    Где: * — итоговое влияние на сеть (Impact) в единицах стресса (su). * — абсолютное значение скорости вращения (RPM — обороты в минуту). Мы берем модуль, так как направление вращения (знак минус) не уменьшает нагрузку. * — коэффициент потребления (Capacity/Config), заданный для конкретного блока.

    Например, если ваш блок имеет базовое потребление 2 su на 1 RPM, а игрок раскрутил его до 32 RPM, то нагрузка составит:

    Где: * — итоговая нагрузка в su. * — скорость вращения. * — коэффициент потребления.

    Чтобы реализовать это в коде, нам нужно переопределить метод calculateStressApplied в классе SimpleKineticBlockEntity:

    Теперь, если подключить этот блок к системе, вы увидите на очках инженера (Goggles), что он потребляет энергию.

    Визуализация вращения

    Даже если код работает, игрок не увидит вращения, если модель статична. Create использует библиотеку Flywheel для рендеринга движущихся частей. Однако для простых блоков KineticBlock автоматически пытается вращать модель блока вокруг оси, заданной в getRotationAxis.

    Для корректного отображения текстура вашего блока должна быть ориентирована правильно относительно оси вращения. Если вы указали Axis.Y, то «лицо» вращения должно быть сверху.

    Практическое задание: Проверка в игре

  • Запустите клиент (runClient).
  • Возьмите в творческом режиме ваш Simple Kinetic Block.
  • Поставьте Творческий мотор (Creative Motor) из Create.
  • Присоедините ваш блок к валу мотора.
  • Наденьте Очки инженера.
  • Если вы всё сделали правильно, при наведении на блок вы увидите его скорость и потребление стресса.

    В следующей статье мы углубимся в рендеринг и создадим сложные модели с несколькими вращающимися частями, используя частичные модели (Partials) системы Create.

    3. Механики обработки: добавление рецептов для миксера, пресса и последовательной сборки

    Механики обработки: добавление рецептов для миксера, пресса и последовательной сборки

    Приветствую вас, коллеги-инженеры! Мы уже научились создавать блоки, которые вращаются и передают кинетическую энергию. Но энергия ради энергии — это не наш путь. Настоящая магия Create заключается в автоматизации производства. В этой статье мы разберем, как научить ваши механизмы создавать новые предметы, используя API рецептов Create.

    Мы отойдем от стандартных JSON-файлов и воспользуемся мощью генерации данных (Data Generation), которую предоставляет Create. Это позволит нам писать рецепты прямо на Java, избегая синтаксических ошибок и дублирования кода.

    Архитектура рецептов в Create

    В ванильном Minecraft рецепты — это просто набор ингредиентов и результат. В Create рецепт — это процесс. Он может требовать времени, определенных условий (например, нагрева) или последовательности действий.

    Для создания рецептов мы будем использовать класс ProcessingRecipeBuilder. Это универсальный строитель, который позволяет конфигурировать:

    * Входные данные: предметы, жидкости (FluidTags). * Выходные данные: предметы с вероятностью, жидкости. * Условия: длительность обработки, требования к нагреву.

    Для организации кода в вашем аддоне рекомендуется создать отдельный класс, наследующий ProcessingRecipeGen. Это специальная обертка Create над стандартным RecipeProvider из Forge.

    Механический пресс (Mechanical Press)

    Прессование — одна из самых простых механик. Обычно она используется для превращения слитков в пластины или уплотнения материалов.

    Анатомия рецепта прессования

    Рецепт пресса принимает один входной предмет и выдает один или несколько выходных. Давайте создадим рецепт, который превращает наш Simple Kinetic Block (из прошлого урока) в плоскую пластину.

    Разбор методов: * create: Метод родительского класса, начинающий построение рецепта. * require: Указывает входной ингредиент. Можно использовать Item, TagKey<Item> или Ingredient. * output: Указывает результат. Можно добавить вероятность: .output(0.5f, MyItems.CHANCE_RESULT.get()) (50% шанс). * duration: Время, которое пресс тратит на опускание. Стандартное значение — 100 тиков.

    !Схема процесса прессования: преобразование блока в пластину.

    Механический миксер (Mechanical Mixer)

    Миксер — более сложный механизм. Он позволяет смешивать твердые предметы и жидкости, а также требует контроля температуры.

    Тепловые условия

    В Create есть три уровня нагрева, которые обеспечиваются Горелкой (Blaze Burner):

  • None (Нет нагрева): Горелка не нужна или пуста.
  • Heated (Нагрето): Горелка зажжена любым топливом (уголь, дерево).
  • Superheated (Сверхнагрев): Горелка питается тортом-блейзом (Blaze Cake).
  • Создание рецепта смешивания

    Допустим, мы хотим создать особый сплав, смешивая наш Simple Kinetic Block с водой при нагревании.

    Обратите внимание, что для миксера мы используем тот же билдер, но он автоматически понимает тип рецепта, если мы регистрируем его в соответствующей категории (об этом чуть позже).

    !Уровни нагрева горелки, необходимые для работы миксера.

    Последовательная сборка (Sequenced Assembly)

    Это вершина инженерного искусства в Create. Последовательная сборка — это цепочка операций, которые должны быть выполнены над предметом в строгом порядке. Примером служит создание Точного механизма (Precision Mechanism).

    Логика конвейера

    Рецепт последовательной сборки состоит из:

  • Базового предмета: То, с чего начинается процесс.
  • Транзитного предмета: Промежуточная стадия (обычно выглядит как незавершенная версия предмета).
  • Последовательности шагов: Нажатие, нарезка, наполнение или использование механической руки (Deployer).
  • Результата: Финальный предмет.
  • Циклов: Сколько раз нужно повторить последовательность.
  • Реализация в коде

    Для этого типа рецептов используется SequencedAssemblyRecipeBuilder. Это отдельный класс, отличный от ProcessingRecipeBuilder.

    Важные нюансы: * Transition Item: Вы должны создать отдельный предмет для промежуточной стадии. Если игрок снимет предмет с конвейера раньше времени, он получит именно этот транзитный предмет. * Loops: Если указано 3 цикла, то предмет должен пройти через все шаги 3 раза. Конвейер сам вернет предмет в начало, если цикл не завершен.

    Вероятность успеха

    В последовательной сборке можно добавить элемент риска. Например, механизм может сломаться в процессе.

    Регистрация генератора рецептов

    Чтобы все написанные выше рецепты появились в игре, нужно зарегистрировать ваш класс-генератор в главном классе мода или в обработчике событий GatherDataEvent.

    После этого необходимо запустить задачу Gradle runData. Это сгенерирует JSON-файлы в папке generated/resources. Create автоматически подхватит их при запуске игры.

    Заключение

    Теперь ваш аддон не просто добавляет блоки, но и встраивается в производственные цепочки Create. Вы можете заставлять игроков строить огромные заводы для создания ваших предметов, используя прессы, миксеры и сложные конвейерные линии.

    В следующей статье мы поговорим о том, как добавить визуальную красоту вашим механизмам: мы разберем создание сцен для Ponder (системы обучения «Задуматься»), чтобы игроки могли видеть красивые 3D-инструкции прямо в игре.

    4. Визуализация и система Ponder: создание 3D-сцен обучения для ваших механизмов

    Визуализация и система Ponder: создание 3D-сцен обучения для ваших механизмов

    Добро пожаловать в четвёртую часть нашего курса по разработке аддонов для Create! Мы уже прошли путь от настройки среды до создания сложных кинетических блоков и рецептов. Теперь у нас есть работающие механизмы, но есть одна проблема: игроки не знают, как ими пользоваться.

    В ванильном Minecraft игрокам приходится лезть в википедию. В моде Create есть философия: «Всё должно быть понятно внутри игры». Для этого существует система Ponder (от англ. «обдумывать», «размышлять»). Это та самая красивая 3D-анимация, которая появляется, когда вы зажимаете клавишу W, наводясь на механизм.

    В этой статье мы научимся создавать собственные сцены Ponder, работать со схематиками (schematics) и режиссировать обучающие мини-фильмы прямо в коде.

    Что такое Ponder?

    Технически, Ponder — это не видеофайл. Это рендеринг реального мира Minecraft в изолированной сцене на клиенте игрока. Это означает, что:

  • Сцена полностью интерактивна (можно вращать камеру).
  • Она использует реальные ресурсы игры (текстуры, модели).
  • Размер аддона не увеличивается на гигабайты видеофайлов.
  • Создание сцены Ponder состоит из трёх этапов:

  • Подготовка сцены (Schematic): Постройка декораций в игре.
  • Написание сценария (StoryBoard): Код, управляющий действиями.
  • Регистрация: Привязка сценария к конкретному блоку или предмету.
  • Этап 1: Создание схематики (.nbt)

    Прежде чем писать код, нам нужна «сцена» — набор блоков, которые будут показаны игроку. Мы не расставляем блоки кодом (это было бы мучительно долго), мы строим их в креативе.

  • Зайдите в Minecraft с установленным Create.
  • Постройте небольшую структуру, демонстрирующую работу вашего блока (например, наш Simple Kinetic Block, подключенный к творческому мотору).
  • Возьмите в руки Схематичную пушку (Schematicannon) или используйте команды Create.
  • Выделите зону постройки.
  • Сохраните схематику командой: /create schematic save <имя_файла> (например, intro_scene).
  • Файл .nbt появится в папке schematics вашего Minecraft. Скопируйте его в папку ресурсов вашего проекта: src/main/resources/assets/my_create_addon/ponder/intro_scene.nbt.

    > Важно: Старайтесь делать сцены компактными, обычно 3x3 или 5x5 блоков. Основание (пол) лучше делать из блоков Create: Casing для единообразия стиля.

    Этап 2: Написание сценария

    Теперь самое интересное — режиссура. В Create для этого используются два основных объекта: * SceneBuilder: Управляет миром, блоками, сущностями и камерой. * SceneUI: Управляет текстовыми подсказками, иконками и элементами интерфейса.

    Создайте класс MyPonderScenes:

    Работа с координатами и векторами

    В Ponder очень важно точно указывать, куда должна указывать стрелка текста или где должен появиться эффект. Для этого часто используется векторная математика.

    Чтобы указать точку в пространстве для текстовой выноски, мы рассчитываем итоговый вектор позиции:

    Где: * — итоговая точка в 3D-пространстве, куда будет указывать стрелка. * — координаты угла блока (целые числа). * — смещение к центру или верху блока (например, ).

    В коде Create есть удобные утилиты util.vector, которые делают эти расчеты за вас, например util.vector.topOf(pos) автоматически добавляет смещение к верхней грани блока.

    !Визуализация расчета вектора цели для привязки текстовых подсказок к блокам.

    Этап 3: Анимация механизмов

    Статичная сцена скучна. Мы хотим, чтобы наш блок вращался. В Ponder кинетика не работает «сама по себе», мы должны принудительно задать скорость.

    Вы также можете управлять вводом игрока, показывая, какие кнопки нужно нажимать:

    Этап 4: Регистрация сцены

    Create использует систему плагинов для регистрации Ponder. Нам нужно создать класс, реализующий PonderPlugin (в версиях 1.20.1 структура может немного отличаться в зависимости от используемой версии API, но принцип один).

    Обычно мы регистрируем теги (категории) и сами сцены.

    Не забудьте вызвать метод регистрации в вашем главном классе клиента (FMLClientSetupEvent).

    Продвинутые техники: SceneBuilder

    SceneBuilder — это мощный инструмент. Вот несколько полезных методов:

    * scene.world.modifyBlock(pos, state -> state.setValue(...), true): Позволяет менять состояние блока прямо во время сцены (например, включить лампу). * scene.world.replaceBlocks(selection, newState, spawnParticles): Заменяет одни блоки на другие. * scene.special.createBirb(pos, FacePointOfInterest::new): Создает птичку Create, которая смотрит на указанную точку. Отлично подходит для привлечения внимания.

    Структура идеальной сцены

    Хорошая сцена Ponder строится по правилам драматургии:

  • Экспозиция: Показать пустую сцену или базовый блок.
  • Завязка: Показать проблему или необходимое действие (например, «Блоку нужно вращение»).
  • Действие: Показать решение (подключение вала).
  • Кульминация: Механизм заработал, пошли частицы.
  • Развязка: Текстовое пояснение результата.
  • Заключение

    Система Ponder — это то, что отличает профессиональный аддон от любительской поделки. Она показывает заботу разработчика об игроке. Потратив время на создание красивых инструкций, вы избавите себя от сотен вопросов «А как это работает?» в комментариях.

    Теперь ваш аддон имеет блоки, рецепты и встроенную документацию. В следующей, заключительной статье курса, мы поговорим о полировке, локализации и подготовке вашего мода к публикации на CurseForge и Modrinth.

    5. Работа с движущимися структурами (Contraptions) и финальная сборка мода

    Работа с движущимися структурами (Contraptions) и финальная сборка мода

    Поздравляю! Мы добрались до финальной статьи нашего курса. Мы уже умеем создавать кинетические блоки, прописывать сложные рецепты и даже обучать игроков с помощью сцен Ponder. Но в мире Create есть одна особенность, которая выделяет его среди всех остальных технических модов: Contraptions (Движущиеся структуры).

    Поезда, лифты, буры, ветряные мельницы — всё это структуры, которые могут двигаться, вращаться и взаимодействовать с миром. В этой статье мы разберем, как заставить ваши блоки работать, даже когда они превращаются в сущность, а также подготовим ваш мод к релизу.

    Анатомия Contraption: когда блок перестает быть блоком

    В ванильном Minecraft блок — это статичный объект, привязанный к координатной сетке. Когда поршень толкает блок, он на долю секунды исчезает и появляется в новом месте. Create же делает иначе.

    Когда структура начинает движение (например, вы активировали подшипник ветряной мельницы), происходит следующее:

  • Все блоки, приклеенные к структуре, удаляются из мира.
  • Создается специальная Сущность (Entity), которая содержит копию этих блоков.
  • Эта сущность движется плавно, вне сетки координат.
  • Когда движение останавливается, сущность исчезает, и блоки снова размещаются в мир на новые координаты.
  • !Процесс преобразования статических блоков в динамическую сущность Contraption.

    Для разработчика аддона это создает проблему: ваш BlockEntity (TileEntity) перестает существовать во время движения. Если в нем была логика (например, таймер или хранилище энергии), она «замораживается» или исчезает.

    Поведение при движении: MovementBehaviour

    Чтобы ваш блок делал что-то полезное, пока он летит на поезде или вращается на карусели, вам нужно реализовать интерфейс MovementBehaviour. Это мост между вашим блоком и движущейся сущностью.

    Create предоставляет удобный реестр поведений. Вам не обязательно менять класс самого блока, вы можете «навесить» поведение извне.

    Создание своего поведения

    Давайте создадим поведение для нашего блока, который будет оставлять след из частиц дыма, когда структура движется. Создайте класс SmokingMovementBehaviour:

    Разбор MovementContext: * context.position: Текущие координаты блока в мире (дробные, так как он движется). * context.motion: Вектор скорости движения. * context.state: Состояние блока (BlockState). * context.data: Специальное хранилище данных (NBT), которое путешествует вместе с блоком. Используйте его вместо полей класса, так как один экземпляр MovementBehaviour используется для всех блоков этого типа.

    Регистрация поведения

    Теперь нужно привязать это поведение к нашему блоку. Это делается в главном классе мода или там, где вы регистрируете блоки, обычно в методе FMLCommonSetupEvent.

    Теперь, если игрок поставит ваш блок на поезд или вертушку, он будет дымить во время движения.

    Математика движения

    Иногда вам нужно знать, где окажется блок в следующий момент времени, или рассчитать его смещение. Позиция блока в движущейся структуре рассчитывается векторно.

    Формула обновления позиции выглядит следующим образом:

    Где: * — новая позиция блока (вектор ). * — предыдущая позиция блока. * — вектор скорости движения (velocity). * — время, прошедшее с последнего обновления (обычно 1 тик или доля тика при рендеринге).

    Если структура вращается, формула усложняется использованием кватернионов или матриц поворота, но Create берет эти сложные вычисления на себя, предоставляя вам готовый вектор context.position.

    Полировка мода: Локализация и Текстуры

    Код написан, механики работают. Но если игрок видит item.my_addon.strange_alloy вместо красивого названия, магия рушится. Перед релизом необходимо заняться локализацией.

    Файлы локализации

    В папке src/main/resources/assets/my_create_addon/lang должны лежать JSON-файлы: * en_us.json (Английский — обязателен как запасной вариант) * ru_ru.json (Русский)

    Пример ru_ru.json:

    Творческая вкладка (Creative Tab)

    Чтобы игроки не искали ваши предметы через поиск, создайте свою вкладку в креативе или добавьте их во вкладку Create.

    В версии 1.20.1 регистрация вкладок изменилась и теперь использует CreativeModeTab.builder(). Если вы используете Registrate (как мы делали в прошлых уроках), он может сделать это автоматически:

    Финальная сборка (Build)

    Когда всё готово, пришло время превратить ваш проект в .jar файл, который можно выложить в интернет.

  • Откройте панель Gradle в IntelliJ IDEA.
  • Перейдите в Tasks -> build.
  • Запустите задачу build.
  • Gradle скомпилирует код, соберет ресурсы и упакует всё в архив. Процесс может занять пару минут.

    Где искать файл?

    После успешного завершения, перейдите в папку вашего проекта: build/libs/

    Там вы увидите несколько файлов. Вам нужен тот, который НЕ содержит слов sources или slim (если вы не настраивали иначе). Обычно он называется my_create_addon-1.0.0.jar.

    > Важно: Обязательно протестируйте этот файл на чистом клиенте Minecraft, где установлены только Forge и Create, чтобы убедиться, что вы не забыли включить какие-то ресурсы.

    Публикация

    Теперь вы готовы поделиться своим творением с миром. Основные платформы для модов:

  • CurseForge — самая старая и популярная платформа.
  • Modrinth — более современная, открытая и удобная платформа, набирающая популярность.
  • При публикации вам понадобятся: * Скомпилированный .jar файл. * Красивая иконка мода. * Описание (можно использовать текст из нашей первой статьи про идею мода). * Скриншоты (используйте сцены Ponder или красивые постройки).

    Заключение курса

    Мы прошли долгий путь. Вы начали с пустой папки и закончили собственным аддоном, который расширяет возможности одного из самых сложных модов в истории Minecraft.

    Вы научились: * Настраивать среду разработки. * Работать с кинетической энергией и сетью Create. * Создавать рецепты для миксеров и прессов. * Визуализировать механики через Ponder. * Оживлять блоки на движущихся поездах.

    Разработка модов — это бесконечный процесс обучения. Не бойтесь смотреть в исходный код самого Create (он открыт!), экспериментировать и ошибаться. Удачи в ваших инженерных изысканиях, и пусть ваши шестеренки никогда не ломаются от перенапряжения!