- 2,955
- 12
Ну, типо первый туториал по мобам (и вообще первый на форуме).
Многим хотелось создать моба и рендерить его, но туториала не было на сайте. Ну что же, давайте начнем.
Тема будут дополняться, но не сейчас.
Многим хотелось создать моба и рендерить его, но туториала не было на сайте. Ну что же, давайте начнем.
Для начала в главном классе мода пишите:
111 - айди вашего моба последние 2 - цвет яйца.
Класс моба
Я думаю в коде все понятно.
Код:
EntityList.addMapping(EntityYouMob.class, "YourMob", 156, 0x0033FF, 0x00CCFF);
Класс моба
Код:
public class EntityYouMob extends EntityMob //Еще тут может быть EntityAnimal для пассивного моба, еще есть IAnimal и EntityCreature, но о них позже.
{
public EntityYouMob(World par1World)
{
super(par1World);
this.setSize(0.9F, 1.3F); //Размерчики
this.setEquipmentDropChance(1, 1.0F); //Шанс дропа экипировки
this.setCanPickUpLoot(true); //Может подбирать лут
//AI.... Тут тупо поможет перевод названий классов.
this.tasks.addTask(1, new EntityAISwimming(this)); //Плавает
this.tasks.addTask(5, new EntityAIWander(this, 0.8D));//Хрен от вас отстанет
this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); //Смотрит на вас
this.tasks.addTask(6, new EntityAILookIdle(this)); //Просто смотрит
this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 0, true)); //Подходит
}
@Override
protected void applyEntityAttributes()
{
super.applyEntityAttributes();
this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setAttribute(10.0D); //Макс хп у моба.
this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setAttribute(0.20000000298023224D);//Скорость передвижения
}
@Override
protected String getLivingSound()
{
return "yourmod:MobLiving";//Это обычные звуки, их в yourmod/sound/MobLiving.
}
@Override
protected String getHurtSound()
{
return "yourmod:HurtLiving";//Это звуки урона, их туда же.
}
@Override
protected String getDeathSound()
{
return "yourmod:DeathLiving";//Типо звуки смерти.
}
@Override
protected float getSoundVolume() //Громкость звуков
{
return 0.4F;
}
}
Клиент прокси (у меня оно такое)
Сделали модель? Хорошо.
Теперь создаем файл рендера
Вот, у вас есть рендер.
И последнее, событие звуков
Все! У вас есть свой моб со своей моделью!
Код:
public class ClientProxy extends CommonProxy{
public void preLoad() {
}
public void load(){
MinecraftForge.EVENT_BUS.register(new YourSoundEvent()); //Событие ваших звуков.
RenderingRegistry.registerEntityRenderingHandler(EntityYouMob.class, new RenderYourMob(new YourModel(),2.0F));
//YourModel - модель вашего моба, делается в програмке Teche. RenderYourMob - класс рендера вашего моба. EntityYouMob - класс вашего моба.
}
public void postLoad(){
}
}
Теперь создаем файл рендера
Код:
@SideOnly(Side.CLIENT)
public class RenderYourMob extends RenderLiving
{
private static final ResourceLocation Your_Texture = new ResourceLocation("yourmod", "textures/entity/yourtexture.png"); //Текстуру в assets/yourmod/textures/entity/yourtexture.png
public RenderYourMob(ModelBase par1ModelBase, float par2)
{
super(par1ModelBase, par2);
}
@Override
protected ResourceLocation getEntityTexture(Entity par1Entity)
{
return Your_Texture;
}
}
И последнее, событие звуков
Код:
public class YourSoundEvent
{
@ForgeSubscribe
public void onSoundLoad(SoundLoadEvent event) {
event.manager.addSound("yourmod:MobLiving.ogg");
event.manager.addSound("yourmod:HurtLiving.ogg");
event.manager.addSound("yourmod:DeathLiving.ogg");
//Я думаю вы поняли как изменять под себя.
}
}
У вас моб с моделью игрока. Вы хотите чтоб в руке был виден предмет а на нем броня. Легко!
Файл рендера:
В клиент прокси, вместо Вашей модели (YourModel) пишите ModelBiped.
Вот и все. Можете смело надеть на него броню и дать меч.
Файл рендера:
Код:
public class RenderYouMob extends RenderBiped //Вот он, рендерит все за вас, хвалю его. xD
{
private static final ResourceLocation Your_Texture = new ResourceLocation("textures/entity/steve.png"); //Изменяйте на свою текстуру, рисовать по такому же принцапу, как скин.
public RenderYourMob(ModelBiped par1ModelBiped, float par2) {
super(par1ModelBiped, par2);
}
@Override
protected ResourceLocation getEntityTexture(Entity par1Entity)
{
return Your_Texture;
}
}
Вот и все. Можете смело надеть на него броню и дать меч.
Хотите сделать босса? Давайте начнем.
В файле вашего моба дописываем implements IBossDisplayData.
А в файл вашего рендера добавляем метод:
Вот и все. У вас есть босс.
В файле вашего моба дописываем implements IBossDisplayData.
А в файл вашего рендера добавляем метод:
Код:
public void doRenderLiving(EntityLiving entity, double par2, double par4, double par6, float par8, float par9)
{
super.doRenderLiving(entity, par2, par4, par6, par8, par9);
BossStatus.setBossStatus((EntityYouMob)entity, true);
}