Белый прямоугольник вместо модели и текстуры Entity.

Версия Minecraft
1.12.2
Некорректные теги
Не пойму в чем дело, спавню моба, а вместо его модели и текстуры появляется белый прямоугольник. Помогите плиз!Безымянный.png
MyBot:
package Kabal.MyBot;

import Kabal.MyBot.proxy.CommonProxy;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;





@Mod(modid = MyBot.MOD_ID, name = MyBot.NAME, version = MyBot.VERSION)
public class MyBot
{
   
    public static final String MOD_ID = "bot";
    public static final String NAME = "Best Bot";
    public static final String VERSION = "1.0";
    public static final String CLIENT = "Kabal.MyBot.proxy.ClientProxy";
    public static final String COMMON = "Kabal.MyBot.proxy.CommonProxy";
    public static final int ENTITY_BOT = 120;

    @SidedProxy(clientSide=MyBot.CLIENT, serverSide = MyBot.COMMON)
    public static CommonProxy proxy;
   
     @Mod.Instance(MOD_ID)
        public static MyBot instance;

        @Mod.EventHandler
        public void preInit(FMLPreInitializationEvent event)
        {
             proxy.preInit(event);
        }

        @Mod.EventHandler
        public void init(FMLInitializationEvent event)
        {
             proxy.init(event);
        }

        @Mod.EventHandler
        public void postInit(FMLPostInitializationEvent event)
        {
              proxy.postInit(event);
        }
}
ClientProxy:
package Kabal.MyBot.proxy;

import Kabal.MyBot.entity.EntityRegistry;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;


public class ClientProxy extends CommonProxy
{
   
    @Override
    public void registerItemRenderer(Item item, int meta, String id)
    {
        ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(item.getRegistryName(), id));
    }

    @Override
    public void preInit(FMLPreInitializationEvent event) {
        super.preInit(event);
    }

    @Override
    public void init(FMLInitializationEvent event) {
        super.init(event);
        EntityRegistry.initModels();
    }

    @Override
    public void postInit(FMLPostInitializationEvent event) {
        super.postInit(event);
    }



}
CommonProxy:
package Kabal.MyBot.proxy;

import net.minecraft.item.Item;
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 registerItemRenderer(Item item, int meta, String id)
    {
       
    }
    public void preInit(FMLPreInitializationEvent event)
    {

    }

    public void init(FMLInitializationEvent event)
    {

    }

    public void postInit(FMLPostInitializationEvent event) {

    }
}
EntityBot:
package Kabal.MyBot.entity;

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 EntityBot extends EntityMob {
    //Наш доп. урон(ниже о нём)
    public static int ADD_DAMAGE = 15;

    /[I]Конструктор[/I]/
    public EntityBot (World world) {
        super(world);
        setSize(0.6F, 1.98F);//Размер моба
    }

    /[I]Конструктор с установкой позиции[/I]/
    public EntityBot (World world, double x, double y, double z) {
        super(world);
    setSize(0.6F, 1.98F);//Размер моба
        setPositionAndUpdate(x, y, z);
    }

    @Override
    protected void applyEntityAttributes() {
        /[I]Строчка ниже нужна для регистрации атрибутов(Макс. ХП, скорость, сила атаки, броня, скорость полёта и тд.)[/I]/
        super.applyEntityAttributes();
        //Устанавливаем атрибуты
        this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(35.0D);//Радиус слежки = 35 блоков
        this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.5D);//Скорость моба(для примера: скорось Зомби = 0.23D)
        this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(3.0D);//Урон существа = 1.5 сердечка(у сердечко = 2D)
        this.getEntityAttribute(SharedMonsterAttributes.ARMOR).setBaseValue(2.0D);//Броня моба(от неё зависит урон по мобу)
        this.getEntityAttribute(SharedMonsterAttributes.ARMOR_TOUGHNESS).setBaseValue(2.0D);//Отбрасивание моба(больше число меньше отбрасование)
    }

    @Override
    protected void initEntityAI() {
        /*Делаем интелект мобу
         * 1 параметр - приоритет
         * 2 параметр - дочерный класс от EntityAIBase
         */
        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));//Смотрит на EntityPlayer(игрок)
        this.tasks.addTask(4, new EntityAILookIdle(this));//Грубо говоря - ленивое поварачивание головы
        this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true, new Class[]{EntityZombie.class, EntityPlayer.class}));//Охота за такими мобами: EntityZombie, EntityPlayer
    }

    @Override
    public boolean attackEntityAsMob(Entity entityIn) {
        /[I]Что происходит при атаке[/I]/
        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() {
        /[I]Сколько спавнится в чанке[/I]/
        return 25;
    }
}
EntityRegistry:
package Kabal.MyBot.entity;

import Kabal.MyBot.MyBot;
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 = MyBot.MOD_ID)//ОБЕЗАТЕЛЬНО! <-------------
public class EntityRegistry {
   

        private static int ID = 0;//Для айди

        public static EntityEntry MY_BOT = EntityEntryBuilder
                .create()//Создаём новый EntityEntry
                .entity(EntityBot.class)//Какой моб в EntityEntry
                .name("Mr. BOT")//Имя
                .id("bot_entity", ID++)//Айди и имя регистрации
                .egg(0xff4040, 0xd891ef)//Цвет яйца, первое значени фон, второе "точки"
                .tracker(160, 2, false)//Трекер моба
                .build();//Устанавливаем параметры

        @SubscribeEvent
        public static void registryEntity(RegistryEvent.Register<EntityEntry> event) {
           /[I]Новая регистрация от форджа[/I]/
            event.getRegistry().registerAll(
                    MY_BOT
            );
        }
        @SideOnly(Side.CLIENT)//Только клиент
        public static void initModels() {
            /*Регистрируем рендер, 1 параметр = класс моба, 2 параметр = НАШ РЕНДЕР ФЭКТОРИ */
            RenderingRegistry.registerEntityRenderingHandler(EntityBot.class, RenderEntityHerobrine.FACTORY);
        }

}
RenderEntityHerobrine:
package Kabal.MyBot.entity;

import javax.annotation.Nonnull;

import net.minecraft.client.model.ModelBiped;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.client.renderer.entity.RenderLiving;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.client.registry.IRenderFactory;
import Kabal.MyBot.MyBot;
import Kabal.MyBot.entity.EntityBot;


public class RenderEntityHerobrine extends RenderLiving<EntityBot>{
    /[I]Расположение текстуры моба(создаём новую папку в текстурах, имя её entity, туда и кладём наши текстуры)[/I]/
    private ResourceLocation mobTexture = new ResourceLocation(MyBot.MOD_ID+ ":textures/entity/skin_herobrine.png");

    /*
    Конструктор рендера,
    теперь о super:
        1 параметр - наш RenderManager,
        2 параметр - наша модель,
        3 параметр - размер тени(стандартно 0.5F)
    */
    public RenderEntityHerobrine(RenderManager manager) {
        super(manager, new ModelBiped(), 0.5F);
    }
    public static Factory FACTORY = new Factory();
    @Override
    @Nonnull
    protected ResourceLocation getEntityTexture(@Nonnull EntityBot entity) {
        /[I]Возвращаем текстуру моба[/I]/
        return mobTexture;
    }
    /[I]--------->НАШ РЕНДЕР ФЭКТОРИ <---------[/I]/
    public static class Factory implements IRenderFactory<EntityBot> {
        @Override
        public Render<? super EntityBot> createRenderFor(RenderManager manager) {
        /[I]И наконец-то из всего этого создаём рендер[/I]/
            return new RenderEntityHerobrine(manager);
        }
    }
   
}
 
Решение
ClientProxy:
package Kabal.MyBot.proxy;

import Kabal.MyBot.entity.EntityRegistry;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;


public class ClientProxy extends CommonProxy
{
  
    @Override
    public void registerItemRenderer(Item item, int meta, String id)
    {
        ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(item.getRegistryName(), id));
    }

    @Override
    public void...
586
32
136
ClientProxy:
package Kabal.MyBot.proxy;

import Kabal.MyBot.entity.EntityRegistry;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;


public class ClientProxy extends CommonProxy
{
  
    @Override
    public void registerItemRenderer(Item item, int meta, String id)
    {
        ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(item.getRegistryName(), id));
    }

    @Override
    public void preInit(FMLPreInitializationEvent event) {
        super.preInit(event);
         EntityRegistry.initModels();
    }

    @Override
    public void init(FMLInitializationEvent event) {
        super.init(event);
    }

    @Override
    public void postInit(FMLPostInitializationEvent event) {
        super.postInit(event);
    }
}
 
Java:
package Kabal.MyBot.proxy;

import Kabal.MyBot.entity.EntityRegistry;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;


public class ClientProxy extends CommonProxy
{

@Override
public void registerItemRenderer(Item item, int meta, String id)
{
ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(item.getRegistryName(), id));
}

@Override
public void preInit(FMLPreInitializationEvent event) {
super.preInit(event);
EntityRegistry.initModels();
}

@Override
public void init(FMLInitializationEvent event) {
super.init(event);
}

@Override
public void postInit(FMLPostInitializationEvent event) {
super.postInit(event);
}
}
спасибо большое! теперь появились текстуры, правда они странно отображаются
 

Вложения

  • Безымянный.png
    Безымянный.png
    1.5 MB · Просмотры: 12
Сверху