Новые сообщения · Участники · Правила форума · Поиск · RSS
  • Страница 1 из 1
  • 1
Создание нового нейтрального моба
Fyral Дата: Суббота, 08.10.2011, 16:38 | Сообщение # 1
Администраторы
Сообщений: 10
Репутация: 2
Offline
Ну, для начала скажу, что в создании моба нет ничего сложно. Основная проблема, которая может у вас возникнуть, так это создание новой модельки. Я взял обычного криппера и чуть-чуть перерисовал текстуру.

Создаем файл и указываем название mod_freeper.java.
Эта часть кода должна быть уже известна вам, если прошли предыдущие уроки конечно.
Code
package net.minecraft.src;

import java.util.*;
import java.util.Map;

public class mod_freeper extends BaseMod
{

  public String Version()
  {
  return "1.8.1";
  }
}


Теперь в класс mod_freeper вставляем следующий код:
Code
public mod_freeper()
  {
  ModLoader.RegisterEntityID(EntityFreeper.class, "Freeper", ModLoader.getUniqueEntityId());

  ModLoader.AddSpawn(EntityFreeper.class, 500, EnumCreatureType.creature);
  }


Регестрируем моба в нашем мире:
Code
ModLoader.RegisterEntityID(EntityFreeper.class, "Freeper", ModLoader.getUniqueEntityId());


Спавн моба. Число 500 обозначает их редкость:
Code
ModLoader.AddSpawn(EntityFreeper.class, 500, EnumCreatureType.creature);


Размер тени мы сможем указать ври помощи этого кода:
Code
public void AddRenderer(Map map)
  {
  map.put(EntityFreeper.class, new RenderFreeper(new ModelFreeper(), 1.0F));
  }


Далее.

Создаем файл под названием EntityFreeper.java.

Вписываем туда этот код:
Code
package net.minecraft.src;


Создаем класс EntityFreeper с указанием, что это нейтральный моб (животное).
Code
public class EntityFreeper extends EntityAnimal


Вписываем в класс EntityFreeper следующий код:
Code
public EntityFreeper(World world)
     {
         super(world);
         texture = "/mob/freeper.png";
         setSize(1.5F, 1.5F);
     }


Тут мы объясняем мобу, что мир, в котором он будет жить, супер:
Code
super(world);


Тут мы указываем путь к текстуре:
Code
texture = "/mob/freeper.png";



(размеры не изменять!)

Тут размеры коллайдера на мобе:
Code
setSize(1F, 1F);


Это просто скопируйте. Тут записываются и считываются данные.
Code
public void writeEntityToNBT(NBTTagCompound nbttagcompound)
     {
         super.writeEntityToNBT(nbttagcompound);
     }

     public void readEntityFromNBT(NBTTagCompound nbttagcompound)
     {
         super.readEntityFromNBT(nbttagcompound);
     }


Теперь мы указываем звуки, которые он будет издавать.

Это отвечает за то, что он будет издавать постоянно. В моем случае он будет КУКАРЕКАТЬ как петушок.
Code
protected String getLivingSound()
{
         return "mob.chicken";
     }


Это отвечает за то, что он будет издавать при уменьшении HP.
Code
protected String getHurtSound()
     {
         return "mob.creeper";
     }


Это отвечает за то, что он будет издавать при смерти.
Code
    protected String getDeathSound()
     {
         return "mob.creeperdeath";
     }


Устанавливаем громкость.
Code
    protected float getSoundVolume()
     {
         return 0.4F;
     }


Вписываем ID предмета, который выпадет после смерти моба.
Code
    protected int getDropItemId()
     {
         return 289;
     }


Проверяем.


Идем далее.

Назвав файл RenderFreeper.java, мы вписываем в него следующий код:
Code
package net.minecraft.src;

public class RenderFreeper extends RenderLiving
{

     public RenderFreeper(ModelBase modelbase, float f)
     {
         super(modelbase, f);
     }

     public void func_177_a(EntityFreeper ebs, double d, double d1, double d2,  
             float f, float f1)
     {
         super.doRenderLiving(ebs, d, d1, d2, f, f1);
     }

     public void doRenderLiving(EntityLiving entityliving, double d, double d1, double d2,  
             float f, float f1)
     {
         func_177_a((EntityFreeper)entityliving, d, d1, d2, f, f1);
     }

     public void doRender(Entity entity, double d, double d1, double d2,  
             float f, float f1)
     {
         func_177_a((EntityFreeper)entity, d, d1, d2, f, f1);
     }
}


Собственно это он генерирует нашего моба в мире (отображает). Думаю и вам, и мне будет легче, если вы просто скопируете его к себе.

Начинаем, как всегда с того, что создаем файл и даем ему имя. В данном случае, имя ему будет ModelFreeper.java.
Ну и, наконец, самое главное... модель нашего моба. Чтобы делать модели для minecraft'a, нужна специальная программа, она называется Techne. Впоследствии, возможно мы и напишем пару уроков по “созданию” модели в этой программе. Но пока, скопируйте просто готовый код фрипера. Объяснять тут ничего не надо, так как программа сама все вам сгенерирует.
Code
package net.minecraft.src;

public class ModelFreeper extends ModelBase
{

     public ModelFreeper()
     {
         this(0.0F);
     }

     public ModelFreeper(float f)
     {
         int i = 4;
         head = new ModelRenderer(0, 0);
         head.addBox(-4F, -8F, -4F, 8, 8, 8, f);
         head.setRotationPoint(0.0F, i, 0.0F);
         field_1270_b = new ModelRenderer(32, 0);
         field_1270_b.addBox(-4F, -8F, -4F, 8, 8, 8, f + 0.5F);
         field_1270_b.setRotationPoint(0.0F, i, 0.0F);
         body = new ModelRenderer(16, 16);
         body.addBox(-4F, 0.0F, -2F, 8, 12, 4, f);
         body.setRotationPoint(0.0F, i, 0.0F);
         leg1 = new ModelRenderer(0, 16);
         leg1.addBox(-2F, 0.0F, -2F, 4, 6, 4, f);
         leg1.setRotationPoint(-2F, 12 + i, 4F);
         leg2 = new ModelRenderer(0, 16);
         leg2.addBox(-2F, 0.0F, -2F, 4, 6, 4, f);
         leg2.setRotationPoint(2.0F, 12 + i, 4F);
         leg3 = new ModelRenderer(0, 16);
         leg3.addBox(-2F, 0.0F, -2F, 4, 6, 4, f);
         leg3.setRotationPoint(-2F, 12 + i, -4F);
         leg4 = new ModelRenderer(0, 16);
         leg4.addBox(-2F, 0.0F, -2F, 4, 6, 4, f);
         leg4.setRotationPoint(2.0F, 12 + i, -4F);
     }

     public void render(float f, float f1, float f2, float f3, float f4, float f5)
     {
         setRotationAngles(f, f1, f2, f3, f4, f5);
         head.render(f5);
         body.render(f5);
         leg1.render(f5);
         leg2.render(f5);
         leg3.render(f5);
         leg4.render(f5);
     }

     public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5)
     {
         head.rotateAngleY = f3 / 57.29578F;
         head.rotateAngleX = f4 / 57.29578F;
         leg1.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1;
         leg2.rotateAngleX = MathHelper.cos(f * 0.6662F + 3.141593F) * 1.4F * f1;
         leg3.rotateAngleX = MathHelper.cos(f * 0.6662F + 3.141593F) * 1.4F * f1;
         leg4.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1;
     }

     public ModelRenderer head;
     public ModelRenderer field_1270_b;
     public ModelRenderer body;
     public ModelRenderer leg1;
     public ModelRenderer leg2;
     public ModelRenderer leg3;
     public ModelRenderer leg4;
}


Скриншот из игры:
  • Страница 1 из 1
  • 1
Поиск: