Как добавить нового моба в Minecraft

Узнайте, как работать с Forge API, писать код на Java, создавать 3D-модели и добавлять уникальное поведение существам. Идеально для тех, кто хочет начать свой путь в геймдеве и изучить ООП на реальном проекте.

Разработка

6 мин

Minecraft — это не просто игра, это целая платформа для творчества и обучения программированию! Сегодня мы разберёмся, как создать своего собственного моба с нуля. Это отличный способ познакомиться с Java и понять основы игровой разработки.

Что нам понадобится?

Перед началом работы убедитесь, что у вас установлено:

  • Java Development Kit (JDK) версии 17 или выше

  • IntelliJ IDEA (Community Edition подойдёт)

  • Minecraft Forge MDK (Mod Development Kit)

  • Базовые знания Java (переменные, классы, методы)

Шаг 1: Настройка окружения

Сначала скачайте Forge MDK с официального сайта files.minecraftforge.net. Распакуйте архив в отдельную папку и откройте проект в IntelliJ IDEA.

Выполните команду в терминале IDE:

./gradlew genIntellijRuns

💡 Совет: Это настроит проект для разработки. Подождите, пока Gradle скачает все зависимости — это может занять несколько минут.

Шаг 2: Создаём класс моба

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

В папке src/main/java/com/yourname/yourmod/entity создайте файл FireflyEntity.java:

package com.yourname.yourmod.entity;

import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.PathfinderMob;
import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.entity.ai.goal.FloatGoal;
import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal;
import net.minecraft.world.level.Level;

public class FireflyEntity extends PathfinderMob {
    
    public FireflyEntity(EntityType<? extends PathfinderMob> type, Level world) {
        super(type, world);
    }
    
    // Регистрируем поведение моба
    @Override
    protected void registerGoals() {
        this.goalSelector.addGoal(0, new FloatGoal(this));
        this.goalSelector.addGoal(1, new WaterAvoidingRandomStrollGoal(this, 1.0D));
    }
    
    // Настраиваем атрибуты (здоровье, скорость)
    public static AttributeSupplier.Builder createAttributes() {
        return PathfinderMob.createMobAttributes()
            .add(Attributes.MAX_HEALTH, 5.0D)
            .add(Attributes.MOVEMENT_SPEED, 0.25D);
    }
}

Что здесь происходит?

  • PathfinderMob — базовый класс для мобов, которые умеют ходить

  • registerGoals() — метод, где мы определяем поведение моба (плавать, ходить, атаковать)

  • createAttributes() — здесь задаём характеристики: здоровье, скорость, урон

Шаг 3: Регистрируем моба

Теперь нужно "рассказать" игре о нашем мобе. Создайте класс ModEntities.java:

package com.yourname.yourmod.entity;

import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.MobCategory;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;

public class ModEntities {
    public static final DeferredRegister<EntityType<?>> ENTITIES = 
        DeferredRegister.create(ForgeRegistries.ENTITY_TYPES, "yourmod");
    
    public static final RegistryObject<EntityType<FireflyEntity>> FIREFLY = 
        ENTITIES.register("firefly", () -> EntityType.Builder
            .of(FireflyEntity::new, MobCategory.CREATURE)
            .sized(0.4F, 0.3F) // размер хитбокса
            .build("firefly"));
}

Не забудьте зарегистрировать ENTITIES в главном классе вашего мода:

@Mod("yourmod")
public class YourMod {
    public YourMod() {
        IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
        ModEntities.ENTITIES.register(bus);
    }
}

Шаг 4: Создаём модель и текстуру

Моб есть, но он невидимый! Нужно создать 3D-модель. Можно использовать программу Blockbench — бесплатный редактор для Minecraft моделей.

  1. Создайте простую модель (куб для тела, маленькие кубики для крыльев)

  2. Экспортируйте как Java файл

  3. Поместите модель в src/main/java/com/yourname/yourmod/client/model/

  4. Создайте текстуру (16x16 пикселей) и сохраните в src/main/resources/assets/yourmod/textures/entity/

Шаг 5: Рендерер моба

Создайте класс FireflyRenderer.java:

package com.yourname.yourmod.client.renderer;

import com.yourname.yourmod.entity.FireflyEntity;
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.client.renderer.entity.MobRenderer;
import net.minecraft.resources.ResourceLocation;

public class FireflyRenderer extends MobRenderer<FireflyEntity, FireflyModel> {
    
    private static final ResourceLocation TEXTURE = 
        new ResourceLocation("yourmod", "textures/entity/firefly.png");
    
    public FireflyRenderer(EntityRendererProvider.Context context) {
        super(context, new FireflyModel(context.bakeLayer(FireflyModel.LAYER)), 0.3F);
    }
    
    @Override
    public ResourceLocation getTextureLocation(FireflyEntity entity) {
        return TEXTURE;
    }
}

Шаг 6: Спаун моба в мире

Добавим моба в естественный спаун игры. В главном классе мода добавьте обработчик события:

@SubscribeEvent
public static void onBiomeLoading(BiomeLoadingEvent event) {
    if (event.getCategory() == Biome.BiomeCategory.FOREST) {
        event.getSpawns().getSpawner(MobCategory.CREATURE)
            .add(new MobSpawnSettings.SpawnerData(
                ModEntities.FIREFLY.get(), 15, 2, 4));
    }
}

✅ Отлично! Теперь светлячки будут появляться в лесных биомах!

Шаг 7: Тестирование

Запустите игру через IntelliJ IDEA (используйте конфигурацию runClient). Создайте новый мир и проверьте:

  • Появляется ли моб в лесу?

  • Корректно ли отображается модель?

  • Работает ли поведение (ходьба, плавание)?

💡 Совет: Если что-то не работает — проверьте логи в консоли. Forge подробно описывает все ошибки.

Дополнительные возможности

Вы можете добавить мобу:

  • Собственные звуки (шаги, атака, смерть)

  • Анимации (взмах крыльев, свечение)

  • Уникальное поведение (атака, побег, поиск еды)

  • Дроп предметов при смерти

  • Спавн через яйцо призыва

@Override
protected void dropCustomDeathLoot(DamageSource source, int looting, boolean recentlyHit) {
    super.dropCustomDeathLoot(source, looting, recentlyHit);
    this.spawnAtLocation(Items.GLOWSTONE_DUST, 1);
}

Частые ошибки новичков

  1. Забыли зарегистрировать моба — проверьте, что ENTITIES.register(bus) вызывается

  2. Неправильный путь к текстуре — убедитесь, что пути в коде и файловой системе совпадают

  3. Не сгенерировали рабочее окружение — выполните gradlew genIntellijRuns заново

  4. Устаревшая версия Forge — используйте последнюю стабильную версию для вашей версии Minecraft

Хотите разобрать эту тему глубже и создать по-настоящему крутого моба с уникальной механикой?

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

У нас вы научитесь:

  • Работать с Java на реальных примерах

  • Создавать моды, плагины и игры

  • Понимать архитектуру кода и писать чистый код

  • Решать задачи как настоящий разработчик

А если возникнут вопросы или нужна поддержка — добро пожаловать в наш активный Telegram-канал, где уже собралась большая команда единомышленников! Мы всегда поможем разобраться с проблемой, подскажем лучшее решение и поддержим на пути обучения.

Присоединяйся к Кодику — программирование может быть понятным и увлекательным! 🚀

Комментарии