- 12
- 1
Некорректные теги
Не пойму в чем дело, спавню моба, а вместо его модели и текстуры появляется белый прямоугольник. Помогите плиз!
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);
}
}
}