Как настроить естественный спавн моба

6
0
Я пересмотрел все подходящие темы на форуме, но так и не понял, как же установить спавн моба в определенных биомах. Во всех подобных темах люди указывали код подходящий для версии 1.7.10, но не для 1.12.2.
 
7,099
324
1,509
Вызови этот метод во время инициализации мода
 
6
0
CommonProxy:
package com.example.examplemod;

import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;

public class CommonProxy
{
    public void preInit(FMLPreInitializationEvent event)
    {
    }

    public void init(FMLInitializationEvent event)
    {
    }

    public void postInit(FMLPostInitializationEvent event)
    {
    }
}
EntityRegistry:
package com.example.examplemod;
 
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.client.registry.RenderingRegistry;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.registry.EntityEntry;
import net.minecraftforge.fml.common.registry.EntityEntryBuilder;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

@Mod.EventBusSubscriber(modid = dndmod.MODID)
public class EntityRegistry {

    @SideOnly(Side.CLIENT)
    public static void initModels() {
        
        RenderingRegistry.registerEntityRenderingHandler(Goblin.class, RenderGoblin.FACTORY);
    }
    
  
    
    public static void removeSpawn()
    {
        
    }

    private static int ID = 0;

    public static EntityEntry GOBLIN = EntityEntryBuilder
            .create()
            .entity(Goblin.class)
            .name("Goblin")
            .id("goblin", ID++)
            .egg(0xff4040, 0xd891ef)
            .tracker(160, 2, false)
            .build();

    @SubscribeEvent
    public static void registryEntity(RegistryEvent.Register<EntityEntry> event)
    {
      
        event.getRegistry().registerAll(GOBLIN);
    
    
    }
  
    }
Goblin:
package com.example.examplemod;

import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.EntityAIAttackMelee;
import net.minecraft.entity.ai.EntityAIHurtByTarget;
import net.minecraft.entity.ai.EntityAILookIdle;
import net.minecraft.entity.ai.EntityAISwimming;
import net.minecraft.entity.ai.EntityAIWander;
import net.minecraft.entity.ai.EntityAIWatchClosest;
import net.minecraft.entity.monster.EntityMob;
import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;


public class Goblin extends EntityMob {
        
        public static int ADD_DAMAGE = 15;

      
        
        
        public Goblin(World world) {
            super(world);
            setSize(0.7F, 1.45F);
        }

      
        public Goblin(World world, double x, double y, double z) {
            super(world);
        setSize(0.7F, 1.45F);
            setPositionAndUpdate(x, y, z);
        }

        @Override
        protected void applyEntityAttributes() {
            
            super.applyEntityAttributes();
          
            this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(30.0D);
            this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.25D);
            this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(3.0D);
            this.getEntityAttribute(SharedMonsterAttributes.ARMOR).setBaseValue(2.0D);
            this.getEntityAttribute(SharedMonsterAttributes.ARMOR_TOUGHNESS).setBaseValue(3.0D);
            this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(12);
        }

        @Override
        protected void initEntityAI() {
          
            this.tasks.addTask(0, new EntityAISwimming(this));
            this.tasks.addTask(1, new EntityAIAttackMelee(this, 1.0D, false));
            this.tasks.addTask(2, new EntityAIWander(this, 1.0D));
            this.tasks.addTask(3, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F));
            this.tasks.addTask(4, new EntityAILookIdle(this));
            this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true, new Class[]{EntityZombie.class, EntityPlayer.class}));
        }

        @Override
        public boolean attackEntityAsMob(Entity entityIn) {
          
            if (super.attackEntityAsMob(entityIn)) {
                if (entityIn instanceof EntityLivingBase) {
                    ((EntityLivingBase) entityIn).attackEntityAsMob(this);
                    entityIn.attackEntityFrom(((EntityLivingBase) entityIn).getLastDamageSource(), rand.nextInt(ADD_DAMAGE));
                }
                return true;
            } else {
                return false;
            }
        }
        @Override
        public int getMaxSpawnedInChunk() {
            
            return 25;
        }
    
}

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