Создание мода на моба для Minecraft 1.21.1 с Fabric и DeepSeek

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

1. Подготовка среды разработки Fabric и экспорт модели из Blockbench

Подготовка среды разработки Fabric и экспорт модели из Blockbench

Добро пожаловать в первый урок курса по созданию модов для Minecraft 1.21.1! Наша цель — создать уникального моба с собственной моделью, текстурой и анимациями, используя мощь нейросети DeepSeek для написания кода. В этой статье мы заложим фундамент: настроим рабочее пространство и подготовим ресурсы нашего существа.

Почему именно этот стек технологий?

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

* Fabric — легкий и модульный загрузчик модов. Он идеально подходит для версии 1.21.1, так как обновляется быстрее других и проще в освоении. * DeepSeek — современная языковая модель, которая поможет нам писать сложную логику поведения моба (AI), рендеринг и регистрацию объектов, минимизируя рутину. * Blockbench — стандарт индустрии для создания 3D-моделей в стилистике Minecraft.

!Общая схема взаимодействия инструментов: от моделирования до готового мода

Шаг 1: Установка необходимого ПО

Прежде чем мы начнем творить, нужно подготовить инструменты. Minecraft 1.21.1 работает на современной версии Java, поэтому старые версии (Java 8 или 17) нам не подойдут.

1. Java Development Kit (JDK) 21

Для Minecraft 1.21.1 строго требуется JDK 21.

  • Скачайте JDK 21 (рекомендуется версия от Adoptium или Oracle).
  • Установите её, следуя инструкциям инсталлятора.
  • Убедитесь, что переменные среды настроены (обычно инсталлятор делает это автоматически).
  • 2. Среда разработки (IDE)

    Мы будем использовать IntelliJ IDEA Community Edition. Это бесплатная и самая удобная среда для Java-разработки.

    * Скачайте её с официального сайта JetBrains. * При установке убедитесь, что отмечена ассоциация с файлами .java.

    Шаг 2: Генерация шаблона мода

    Создавать структуру папок вручную — долго и чревато ошибками. Мы воспользуемся официальным генератором шаблонов Fabric.

  • Перейдите на сайт Fabric Template Generator.
  • Заполните поля следующим образом:
  • * Minecraft Version: 1.21.1 Mod Name: Название вашего мода (например, DeepSeekMob*). * Mod ID: Уникальный идентификатор. Используйте только строчные английские буквы, без пробелов (например, deepseekmob). Это критически важно! * Package: Ваш пакет Java (например, net.username.deepseekmob).
  • Нажмите кнопку Download Template.
  • Распакуйте скачанный архив в удобную папку на компьютере.
  • Шаг 3: Настройка проекта в IntelliJ IDEA

    Теперь откроем наш шаблон в среде разработки.

  • Запустите IntelliJ IDEA.
  • Нажмите Open и выберите папку с распакованным модом (там, где лежит файл build.gradle).
  • Подождите, пока IDEA проиндексирует проект и скачает зависимости. Это может занять несколько минут.
  • Важный этап: Генерация исходников Minecraft

    Чтобы DeepSeek и вы могли видеть код самого Майнкрафта (названия методов, классов), нужно декомпилировать игру.

  • В правой части окна IDEA найдите вкладку Gradle.
  • Раскройте дерево: Tasks -> fabric -> genSources.
  • Дважды кликните по genSources. Дождитесь окончания процесса (зеленая галочка в консоли).
  • Теперь, если вы напишете net.minecraft.world.entity.Entity, IDE поймет, о чем речь.

    Шаг 4: Экспорт модели из Blockbench

    Предполагается, что у вас уже есть готовая модель моба в Blockbench. Если нет — создайте простую модель для теста. Наша задача — правильно экспортировать её для кода.

    Подготовка модели

  • Откройте вашу модель в Blockbench.
  • Убедитесь, что имена всех групп (костей) написаны на латинице и не содержат пробелов. Например, вместо Right Arm используйте right_arm. Это важно для анимаций.
  • Перейдите в File -> Project и проверьте настройки:
  • * Model Identifier: имя моба (например, custom_zombie). * Texture Size: должно соответствовать размеру вашей текстуры.

    Экспорт Java-класса

    Minecraft (и Fabric) не понимают формат .bbmodel напрямую. Им нужен Java-код, описывающий геометрию.

  • В меню выберите File -> Export -> Export Java Class.
  • В появившемся окне настроек:
  • * Target Version: Выберите 1.17+ (Mojang Mappings) или просто Modded Entity. Для 1.21.1 структура классов немного изменилась, но DeepSeek поможет нам адаптировать старый формат, если потребуется. * Class Name: Назовите класс с большой буквы, например CustomZombieModel. * Package: Укажите путь, который мы создадим позже, например net.username.deepseekmob.client.model.
  • Нажмите Confirm и сохраните файл CustomZombieModel.java на рабочий стол.
  • Экспорт текстуры

  • В панели текстур (слева снизу) нажмите правой кнопкой на текстуру.
  • Выберите Save as.
  • Сохраните файл как custom_zombie.png (название должно быть строчными буквами, без пробелов).
  • !Меню экспорта модели в формат Java-класса в Blockbench

    Шаг 5: Интеграция ресурсов в проект

    Теперь самое главное — положить файлы в правильные места, чтобы Fabric их нашел.

    Структура папок Java (Код модели)

    В окне проекта IDEA (слева) найдите папку src/main/java/net/username/deepseekmob/.

  • Создайте новую папку (package) client.
  • Внутри client создайте папку model.
  • Перетащите ваш файл CustomZombieModel.java в эту папку.
  • Структура папок ресурсов (Текстура)

    Ресурсы лежат отдельно от кода. Найдите папку src/main/resources/assets/.

  • Внутри assets должна быть папка с вашим modid (например, deepseekmob). Если нет — создайте.
  • Внутри deepseekmob создайте папку textures.
  • Внутри textures создайте папку entity.
  • Перетащите файл custom_zombie.png в папку entity.
  • Итоговый путь к текстуре должен выглядеть так: src/main/resources/assets/deepseekmob/textures/entity/custom_zombie.png

    Заключение

    Мы успешно подготовили почву для разработки:

  • Установили JDK 21 и IntelliJ IDEA.
  • Сгенерировали и настроили проект Fabric.
  • Экспортировали модель в виде Java-кода и текстуру.
  • Разложили всё по полочкам.
  • В следующей статье мы начнем самое интересное: скормим наш класс модели нейросети DeepSeek и попросим её написать код регистрации энтити (сущности) и рендерера. Готовьтесь к магии кода!

    2. Промптинг DeepSeek: Генерация структуры мода и классов сущности

    Промптинг DeepSeek: Генерация структуры мода и классов сущности

    Добро пожаловать во вторую часть нашего курса! В предыдущей статье мы подготовили рабочее место, установили Fabric и экспортировали модель нашего CustomZombie из Blockbench. Теперь у нас есть «тело» моба (модель и текстура) и «скелет» проекта (пустой мод), но нет «мозгов» и кода, который свяжет всё воедино.

    В этом уроке мы научимся правильно формулировать запросы (промпты) для нейросети DeepSeek, чтобы она написала за нас сложный Java-код. Мы создадим класс сущности, настроим её атрибуты и зарегистрируем моба в игре.

    Философия работы с ИИ в моддинге

    Использование DeepSeek или любой другой LLM (Large Language Model) в программировании требует особого подхода. Нейросеть — это не волшебная палочка, а очень начитанный, но иногда рассеянный ассистент.

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

    !Процесс генерации кода через правильный промптинг

    Этап 1: Задание контекста

    Прежде чем просить код, нужно настроить DeepSeek на нужную волну. Если вы просто напишете «сделай моба», он может выдать код для Forge 1.16.5 или Fabric 1.19, который не заработает на версии 1.21.1 из-за изменений в названиях методов.

    Откройте чат с DeepSeek и отправьте следующий установочный промпт:

    > Ты — опытный разработчик модов для Minecraft на Java. Мы пишем мод для версии Minecraft 1.21.1, используя загрузчик Fabric и официальные маппинги Yarn (или Intermediary). Используй Java 21. Не используй устаревшие методы. Если API изменилось в 1.21, используй актуальный подход.

    Этот промпт задает «правила игры». Теперь нейросеть знает, что от неё требуется.

    Этап 2: Создание класса сущности (Entity)

    Сущность (Entity) — это логическое представление моба на сервере. Она отвечает за здоровье, скорость, поведение и звуки.

    В предыдущем уроке мы решили делать зомби-подобного моба. Давайте попросим DeepSeek создать класс CustomZombieEntity.

    Промпт для генерации Entity

    > Напиши Java-класс для новой сущности CustomZombieEntity. > 1. Он должен наследовать класс ZombieEntity (ванильный зомби). > 2. Пакет: net.username.deepseekmob.entity. > 3. Установи атрибуты: 50 единиц здоровья (MAX_HEALTH), скорость передвижения 0.3. > 4. Добавь метод createMobAttributes(), чтобы зарегистрировать эти атрибуты.

    Анализ полученного кода

    DeepSeek должен выдать код, похожий на этот (структура может отличаться, но суть одна):

    Что здесь важно: * Мы наследуемся от ZombieEntity, значит, наш моб автоматически получит поведение зомби (горение на солнце, атаку жителей). * Метод createMobAttributes использует Builder. Обратите внимание: в 1.21.1 названия атрибутов могут выглядеть как EntityAttributes.GENERIC_MAX_HEALTH (или Attributes.MAX_HEALTH в зависимости от маппингов). Если IDE подсвечивает ошибку красным, проверьте импорты.

    Создайте новый Java-класс в папке src/main/java/net/username/deepseekmob/entity/ (создайте папку entity, если её нет) и вставьте туда полученный код.

    Этап 3: Регистрация сущности

    Чтобы игра узнала о существовании нашего моба, его нужно зарегистрировать. В Fabric это делается в главном классе мода (который реализует ModInitializer).

    Промпт для регистрации

    > Теперь напиши код регистрации этой сущности в классе DeepseekMob (который реализует ModInitializer). > 1. Mod ID: deepseekmob. > 2. Имя сущности: custom_zombie. > 3. Нужно зарегистрировать саму сущность (EntityType) и её атрибуты (FabricDefaultAttributeRegistry). > 4. Используй Registry.register для Registries.ENTITY_TYPE.

    DeepSeek сгенерирует поля и код для метода onInitialize.

    Важный момент про хитбоксы: В коде регистрации вы увидите размеры моба. Например: EntityDimensions.fixed(0.6f, 1.95f)

    Здесь — это ширина, а — высота хитбокса. Если ваша модель из Blockbench больше или меньше обычного зомби, попросите DeepSeek изменить эти значения.

    Вставьте полученный код в ваш главный класс (обычно DeepseekMob.java).

    Этап 4: Связка модели и рендеринга

    Это самый сложный этап для новичков. Нам нужно связать класс модели (CustomZombieModel), который мы экспортировали из Blockbench в прошлом уроке, с нашей сущностью.

    Подготовка модели

    Убедитесь, что класс CustomZombieModel.java лежит в пакете net.username.deepseekmob.client.model. Если в коде, который сгенерировал Blockbench, указан другой пакет — измените первую строку файла вручную.

    Промпт для рендерера

    > Мне нужен класс рендерера CustomZombieRenderer. > 1. Он должен наследовать MobEntityRenderer. > 2. Он использует модель CustomZombieModel и текстуру textures/entity/custom_zombie.png. > 3. Напиши также код для регистрации рендерера в ClientModInitializer (используй EntityRendererRegistry).

    DeepSeek выдаст два фрагмента кода.

    1. Класс рендерера: Он отвечает за отрисовку. В методе getTexture он должен возвращать путь к вашему png-файлу.

    2. Клиентская инициализация: В Fabric клиентский код (рендер, модели) должен быть отделен от серверного. Найдите класс, реализующий ClientModInitializer (обычно DeepseekMobClient.java). Если его нет — создайте и пропишите в файле fabric.mod.json в секции entrypoints -> client.

    В методе onInitializeClient нужно связать сущность и рендерер:

    Исправление ошибок (Debug)

    Иногда DeepSeek может ошибаться. Вот частые проблемы:

  • Устаревшие методы: Если IDE подчеркивает метод красным, наведите курсор и посмотрите ошибку. Скопируйте текст ошибки и отправьте его DeepSeek со словами: «В 1.21.1 этот метод не работает, вот ошибка. Исправь код».
  • Проблемы с LayerLocation: В новых версиях Minecraft модели требуют регистрации слоев. Если игра падает при запуске с ошибкой No model registered for layer, попросите DeepSeek: «Добавь регистрацию EntityModelLayer для моей модели в ClientModInitializer».
  • Итоговая структура файлов

    К концу этого урока у вас должна получиться следующая структура Java-файлов:

    * net.username.deepseekmob * DeepseekMob.java (Регистрация сущности и атрибутов) * DeepseekMobClient.java (Регистрация рендерера и слоев модели) * entity * CustomZombieEntity.java (Логика моба) * client * model * CustomZombieModel.java (Геометрия из Blockbench) * renderer * CustomZombieRenderer.java (Отрисовка)

    Заключение

    Мы проделали огромную работу! Используя правильный промптинг, мы заставили нейросеть написать за нас 90% шаблонного кода. Мы создали сущность, наделили её характеристиками и научили игру её отрисовывать.

    В следующей статье мы займемся искусственным интеллектом (AI) нашего моба. Мы попросим DeepSeek написать уникальные цели (Goals) для поведения: заставим зомби атаковать только определенных животных или бояться воды.

    3. Внедрение логики: Регистрация, атрибуты и настройка спавна моба

    Внедрение логики: Регистрация, атрибуты и настройка спавна моба

    Приветствую вас на третьем уроке нашего курса! Мы уже проделали большой путь: настроили среду разработки, экспортировали модель из Blockbench и даже создали базовые классы с помощью DeepSeek. Но пока наш CustomZombie — это просто призрак в коде. Он не появляется в мире, у него нет яйца призыва, и мы не знаем, насколько сильно он бьет.

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

    Атрибуты сущности: Сила и Здоровье

    В Minecraft каждая живая сущность обладает набором характеристик, называемых атрибутами (Attributes). Это здоровье, скорость передвижения, сила атаки, дальность преследования и сопротивление отбрасыванию.

    В прошлом уроке DeepSeek сгенерировал нам метод createMobAttributes. Давайте расширим его, чтобы наш зомби стал опасным противником.

    Промптинг для настройки атрибутов

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

    > Промпт для DeepSeek: > В классе CustomZombieEntity обнови метод createMobAttributes. Установи следующие значения: > 1. Максимальное здоровье: 40.0 (в 2 раза больше обычного зомби). > 2. Скорость передвижения: 0.23 (чуть медленнее). > 3. Урон от атаки (GENERIC_ATTACK_DAMAGE): 6.0. > 4. Сопротивление отбрасыванию: 0.5. > 5. Дальность преследования (GENERIC_FOLLOW_RANGE): 35.0.

    Нейросеть вернет обновленный Builder. Код должен выглядеть примерно так:

    Важно: Этот метод нужно не только написать, но и зарегистрировать. В главном классе мода (DeepseekMob.java) в методе onInitialize должна быть строка:

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

    Яйцо призыва (Spawn Egg)

    Прежде чем настраивать спавн в лесах и полях, нам нужен инструмент для ручного тестирования. В Minecraft 1.21.1 регистрация предметов немного изменилась, и DeepSeek должен это учитывать.

    Промптинг для создания предмета

    > Промпт для DeepSeek: > Создай яйцо призыва для custom_zombie. > 1. Зарегистрируй предмет SpawnEggItem с ID custom_zombie_spawn_egg. > 2. Основной цвет: 0x000000 (черный), цвет пятен: 0xFF0000 (красный). > 3. Добавь этот предмет в стандартную вкладку креатива ItemGroups.SPAWN_EGGS. > 4. Используй ItemGroupEvents.modifyEntriesEvent для добавления в группу.

    DeepSeek сгенерирует код регистрации предмета. Обратите внимание на цвета: они задаются в шестнадцатеричном формате.

    Настройка естественного спавна

    Самая интересная часть — заставить моба появляться в мире самостоятельно. В Fabric API для этого используется класс BiomeModifications. Это мощный инструмент, позволяющий добавлять мобов в биомы без перезаписи файлов игры.

    !Диаграмма показывает, как Fabric внедряет моба в существующие биомы через систему модификаций.

    Вес спавна (Spawn Weight)

    Частота появления моба зависит от его "веса" в пуле спавна. Чем выше вес, тем чаще моб спавнится.

    Вероятность спавна конкретного моба можно выразить формулой:

    где — вероятность появления нашего моба, — вес нашего моба (например, 10), а — сумма весов всех мобов, которые могут заспавниться в этом биоме (зомби, скелеты, криперы и т.д.).

    Если общий вес всех монстров в биоме равен 400, а мы добавляем моба с весом 100, он будет появляться в случаев (100 из 500).

    Промптинг для спавна в биомах

    > Промпт для DeepSeek: > Напиши код для добавления custom_zombie в спавн. > 1. Используй BiomeModifications.addSpawn. > 2. Моб должен спавниться в биомах с тегом BiomeTags.IS_OVERWORLD (весь верхний мир). > 3. Категория спавна: SpawnGroup.MONSTER. > 4. Вес спавна: 80 (довольно часто). > 5. Минимальная группа: 2, максимальная: 4.

    Код будет выглядеть примерно так:

    Ограничения спавна (Spawn Restrictions)

    Просто добавить моба в биом недостаточно. Игра должна знать, на каком блоке он может появиться. Рыбы спавнятся в воде, монстры — на твердых блоках в темноте.

    Для этого используется SpawnRestriction. В версии 1.21 это делается через метод SpawnRestriction.register.

    Промптинг для правил размещения

    > Промпт для DeepSeek: > Зарегистрируй SpawnRestriction для custom_zombie. > 1. Используй правило SpawnRestriction.Location.ON_GROUND. > 2. Тип высоты: Heightmap.Type.MOTION_BLOCKING_NO_LEAVES. > 3. Предикат спавна: ZombieEntity::canSpawn (стандартные правила зомби: темнота, твердый блок).

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

    Сборка и тестирование

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

  • Запустите клиент Minecraft через IntelliJ IDEA (задача runClient).
  • Создайте новый мир в творческом режиме.
  • Откройте инвентарь, вкладку "Яйца призыва" и найдите ваше черно-красное яйцо.
  • Попробуйте заспавнить моба. Если он появился и не исчез мгновенно — атрибуты настроены верно.
  • Пропишите команду /time set midnight и полетайте по миру. Вы должны увидеть, как ваши мобы появляются естественным образом среди обычных зомби.
  • Возможные ошибки

    * Моб спавнится и сразу исчезает: Скорее всего, вы забыли зарегистрировать атрибуты (FabricDefaultAttributeRegistry). У моба 0 здоровья, и он умирает в тот же тик. * Моб не спавнится в мире: Проверьте SpawnRestriction. Если вы указали неверный тип поверхности, игра не найдет места для спавна. * Crash при запуске: Проверьте, что ID в BiomeModifications и в регистрации EntityType совпадают.

    В следующей статье мы займемся самым сложным и интересным — программированием искусственного интеллекта (AI). Мы научим нашего зомби уникальному поведению, используя систему целей (Goals).

    4. Клиентская часть: Связывание модели, текстур и анимаций с кодом

    Клиентская часть: Связывание модели, текстур и анимаций с кодом

    Добро пожаловать в четвертую часть нашего курса! В предыдущих уроках мы подготовили рабочее пространство, создали «мозги» нашего моба (класс сущности) и настроили его спавн в мире. Однако, если вы запустите игру сейчас, вы, скорее всего, увидите либо невидимого врага, либо белый куб, либо игра просто вылетит.

    Почему? Потому что Minecraft разделяет логику (сервер) и визуализацию (клиент). Наш CustomZombie умеет ходить и атаковать, но игра не знает, как он выглядит. В этой статье мы объединим модель из Blockbench, текстуру и код, чтобы наш монстр обрел плоть и кровь.

    Архитектура рендеринга в Fabric

    Прежде чем писать промпты для DeepSeek, важно понять, как устроена отрисовка. Это поможет вам проверять код, который выдает нейросеть.

    Цепочка отрисовки выглядит так:

  • Entity (Сущность): Логический объект в мире (координаты, здоровье).
  • Renderer (Рендерер): Класс, который связывает сущность с её визуальным представлением.
  • Model (Модель): Геометрия (кубы, кости), которую мы экспортировали из Blockbench.
  • Texture (Текстура): Картинка .png, которая «натягивается» на модель.
  • Animation (Анимация): Математические формулы, изменяющие поворот костей модели в каждом кадре.
  • !Диаграмма показывает стрелки от Entity к Renderer, затем от Renderer разветвление на Model и Texture, и в конце объединение в итоговое изображение на экране

    Шаг 1: Адаптация класса модели

    В первом уроке мы экспортировали файл CustomZombieModel.java из Blockbench. Однако «сырой» экспорт не всегда идеально подходит для Fabric 1.21.1. Нам нужно убедиться, что модель поддерживает систему слоев (EntityModelLayer).

    Промптинг для обновления модели

    Откройте ваш файл модели. Скорее всего, там есть методы createBodyLayer или просто конструктор. Давайте попросим DeepSeek привести его к стандарту.

    > Промпт для DeepSeek: > У меня есть класс CustomZombieModel, экспортированный из Blockbench. Адаптируй его под Fabric 1.21.1. > 1. Класс должен наследовать EntityModel<CustomZombieEntity>. > 2. Добавь статический метод getTexturedModelData(), который возвращает TexturedModelData. Это нужно для регистрации слоя. > 3. Убедись, что в методе setAngles (или setupAnim) есть базовая анимация ходьбы (как у зомби). > 4. Используй маппинги Yarn.

    DeepSeek вернет обновленный класс. Обратите внимание на метод getTexturedModelData. Он описывает структуру костей (голову, тело, руки) и их размеры. Это критически важно для того, чтобы текстура легла правильно.

    Шаг 2: Математика анимации

    Самая сложная часть для новичков — заставить моба двигаться. В Minecraft анимация — это изменение углов поворота костей (rotation angles) в зависимости от времени или движения.

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

    Формула угла поворота конечности выглядит так:

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

    В коде Minecraft это часто выглядит как MathHelper.cos(limbAngle 0.6662F) 1.4F * limbDistance. Вам не обязательно писать это вручную — DeepSeek отлично знает эти формулы.

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

    Шаг 3: Создание Рендерера (Renderer)

    Рендерер — это «менеджер» отрисовки. Он говорит игре: «Для этого моба используй вот эту модель и вот эту текстуру».

    Промптинг для Рендерера

    > Промпт для DeepSeek: > Напиши класс CustomZombieRenderer для Fabric 1.21.1. > 1. Он должен наследовать MobEntityRenderer<CustomZombieEntity, CustomZombieModel>. > 2. В конструкторе он должен принимать EntityRendererFactory.Context. > 3. Текстура лежит по пути: textures/entity/custom_zombie.png. > 4. Модель должна браться из слоя, который мы зарегистрируем позже (используй константу слоя).

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

    Обратите внимание на 0.5f в конструкторе super. Это размер тени под мобом.

    Шаг 4: Регистрация на клиенте

    Это тот этап, где чаще всего возникают ошибки. Если вы зарегистрировали моба на сервере, но забыли про клиент, игра вылетит с ошибкой No renderer registered или Layer not found.

    В Fabric клиентская инициализация происходит в отдельном классе, который реализует ClientModInitializer. Обычно он называется DeepseekMobClient.

    Регистрация слоя модели (Model Layer)

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

    > Промпт для DeepSeek: > Напиши код для DeepseekMobClient. > 1. Создай публичную статическую константу EntityModelLayer с именем MODEL_CUBE_LAYER. > 2. В методе onInitializeClient зарегистрируй этот слой, используя EntityModelLayerRegistry.register. Свяжи его с CustomZombieModel::getTexturedModelData.

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

    Там же, в onInitializeClient, нужно связать тип сущности с классом рендерера.

    Полный чек-лист файлов

    К этому моменту у вас должны быть заполнены следующие файлы:

  • CustomZombieModel.java (пакет client.model): Содержит геометрию и анимацию (setAngles).
  • CustomZombieRenderer.java (пакет client.renderer): Связывает модель и текстуру.
  • DeepseekMobClient.java: Регистрирует слой модели и рендерер.
  • custom_zombie.png: Лежит в assets/deepseekmob/textures/entity/.
  • Типичные ошибки и их решение

    При работе с графикой ошибки видны сразу. Вот как их интерпретировать:

    * Черно-фиолетовый квадрат вместо моба: Игра не может найти текстуру. Проверьте путь в методе getTexture в рендерере. Имя папки в assets должно в точности совпадать с вашим modid. * Моб выглядит как «каша» из пикселей: Неверная развертка UV. Скорее всего, в методе getTexturedModelData указаны размеры текстуры, не соответствующие реальному файлу (например, 64x64 в коде, а файл 64x32). * Crash: Layer definition not found: Вы забыли зарегистрировать слой в EntityModelLayerRegistry или сделали это не в клиентском инициализаторе.

    Заключение

    Поздравляю! Теперь ваш моб не просто существует в логике игры, но и полноценно отображается. Он ходит, машет руками и выглядит именно так, как вы задумали в Blockbench. Мы использовали DeepSeek, чтобы сгенерировать сложный код рендеринга и математику анимации, сэкономив часы ручной работы.

    В следующей статье мы перейдем к самому интересному — продвинутому Искусственному Интеллекту. Мы научим нашего зомби уникальным тактикам боя, используя систему Goals (Целей), и заставим его реагировать на окружающий мир по-новому.

    5. Отладка ошибок с помощью AI, тестирование и финальная сборка

    Отладка ошибок с помощью AI, тестирование и финальная сборка

    Поздравляю! Вы добрались до финала нашего курса. У нас есть код сущности, модель, текстуры и настроенный спавн. Но давайте будем честны: в программировании код редко работает идеально с первого раза. Скорее всего, при попытке запуска вы столкнулись с вылетами, фиолетовыми текстурами или странным поведением моба.

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

    Философия отладки с нейросетями

    Раньше, увидев ошибку, разработчик шел гуглить её текст, листал форумы и документацию. С появлением LLM (Large Language Models) процесс изменился. Нейросеть уже «прочитала» весь интернет за вас. Ваша задача — правильно «скормить» ей ошибку.

    !Диаграмма цикла отладки кода с использованием искусственного интеллекта

    Типичные ошибки и как их решать

    Разберем три самые частые проблемы, с которыми сталкиваются новички при создании модов на Fabric 1.21.1.

    #### 1. Crash Report (Вылет игры)

    Если игра закрывается при запуске или при загрузке мира, в консоли IntelliJ IDEA появляется много красного текста. Это Stack Trace. Он показывает, в каком именно месте кода произошел сбой.

    Как промптить DeepSeek: Не пишите просто «у меня ошибка». Скопируйте начало ошибки (обычно начинается с java.lang...) и строки, указывающие на ваш код (например, at net.username.deepseekmob...).

    > Промпт: > Мой майнкрафт крашится при запуске. Вот лог ошибки: > Caused by: java.lang.NullPointerException at net.username.deepseekmob.entity.CustomZombieEntity.createMobAttributes(CustomZombieEntity.java:25) > Объясни, почему это происходит и как исправить код.

    Частая причина: вы пытаетесь обратиться к объекту, который еще не был инициализирован (например, текстура или атрибут).

    #### 2. Фиолетово-черный куб (Missing Texture)

    Если ваш зомби выглядит как шахматная доска из черных и фиолетовых квадратов, значит, игра не может найти файл текстуры.

    Решение: Проверьте путь в классе рендерера. Метод getTexture должен возвращать Identifier.

    > Промпт: > У моего моба нет текстуры. Мой modiddeepseekmob. Файл лежит в src/main/resources/assets/deepseekmob/textures/entity/custom_zombie.png. Напиши правильный метод getTexture для рендерера.

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

    #### 3. Невидимый моб или вылет при рендере

    Если моб есть (его можно ударить, слышны звуки), но его не видно, или игра падает с ошибкой No renderer registered.

    Причина: Вы забыли зарегистрировать рендерер в клиентском инициализаторе или не зарегистрировали слой модели.

    > Промпт: > Я создал CustomZombieRenderer, но моб невидимый. Проверь мой класс DeepseekMobClient. Правильно ли я использую EntityRendererRegistry и EntityModelLayerRegistry для Fabric 1.21.1?

    Финальные штрихи: Локализация и Лут

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

    Локализация (Lang files)

    Сейчас, если вы наведете курсор на яйцо призыва, вы увидите что-то вроде item.deepseekmob.custom_zombie_spawn_egg. Исправим это.

  • Найдите папку src/main/resources/assets/deepseekmob/lang/.
  • Создайте файл en_us.json (для английского) и ru_ru.json (для русского).
  • Попросите DeepSeek сгенерировать содержимое:

    > Промпт: > Создай содержимое файла en_us.json для моего мода. > ID сущности: custom_zombie. > Название мода: DeepSeek Mob. > Мне нужны переводы для имени сущности и яйца призыва.

    Пример результата:

    Таблицы лута (Loot Tables)

    Когда моб умирает, он должен что-то дропать. В Minecraft это управляется JSON-файлами таблиц лута.

    > Промпт: > Напиши JSON таблицу лута для моего зомби. > 1. Он должен всегда дропать 1-3 гнилой плоти (rotten_flesh). > 2. С шансом 5% должен дропать железный слиток (iron_ingot). > 3. Куда мне сохранить этот файл в структуре папок?

    DeepSeek подскажет, что файл нужно сохранить по пути: data/deepseekmob/loot_table/entities/custom_zombie.json.

    Тестирование мода

    Перед сборкой нужно провести чек-лист тестов:

  • Креатив: Возьмите яйцо призыва. Моб спавнится? Текстура на месте? Анимация ходьбы работает?
  • Выживание: Позвольте мобу ударить вас. Наносит ли он урон? Умирает ли он, если его бить?
  • Спавн: Используйте команду /locate biome minecraft:plains (или другой биом, где вы настроили спавн), телепортируйтесь туда и полетайте ночью. Спавнится ли моб сам?
  • Если что-то не работает — возвращайтесь к этапу отладки с DeepSeek.

    Сборка проекта (Build)

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

  • В IntelliJ IDEA откройте панель Gradle (справа).
  • Раскройте список: Tasks -> build.
  • Дважды кликните по задаче build.
  • IDEA начнет компиляцию. Это может занять минуту. Если всё прошло успешно, вы увидите сообщение BUILD SUCCESSFUL.

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

    Готовый мод лежит в папке проекта: build/libs/

    Там будет несколько файлов. Вам нужен тот, который не содержит слов sources или dev. Обычно он называется modid-version.jar (например, deepseekmob-1.0.0.jar).

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

    Мы прошли путь от пустой папки до готового мода для Minecraft 1.21.1.

    * Мы настроили Fabric и Java 21. * Мы использовали Blockbench для создания модели. * Мы научились писать Промпты для DeepSeek, чтобы генерировать сложный Java-код. * Мы разобрались с регистрацией, рендерингом и атрибутами.

    Теперь у вас есть навык, позволяющий создавать любых существ: от простых животных до сложных боссов. Главное — не бойтесь ошибок и используйте ИИ как напарника, а не как замену вашему пониманию процесса.

    Удачи в моддинге, и пусть ваши криперы не взрываются раньше времени!