Да и опять в одной из тем просили выложить как делать нейтрального моба
Ну, для начала скажу, что в создании моба нет ничего сложно. Основная проблема, которая может у вас возникнуть, так это создание новой модельки. Я взяла обычного крипера и чуть-чуть перерисовала текстуру.
Создаем файл и указываем название mod_freeper.java.
Эта часть кода должна быть уже известна вам, если прошли предыдущие уроки конечно.
package net.minecraft.src;
import java.util.*;
import java.util.Map;
public class mod_freeper extends BaseMod
{
public String Version()
{
return "1.7.3";
}
}
Теперь в класс mod_freeper вставляем следующий код:
public mod_freeper()
{
ModLoader.RegisterEntityID(EntityFreeper.class, "Freeper", ModLoader.getUniqueEntityId());
ModLoader.AddSpawn(EntityFreeper.class, 500, EnumCreatureType.creature);
}
Регестрируем моба в нашем мире:
SLU писал(а):
ModLoader.AddSpawn(EntityFreeper.class, 500, EnumCreatureType.creature);Спавн моба. Число 500 обозначает их редкость:
SLU писал(а):
ModLoader.AddSpawn(EntityFreeper.class, 500, EnumCreatureType.creature);Размер тени мы сможем указать ври помощи этого кода:
public void AddRenderer(Map map)
{
map.put(EntityFreeper.class, new RenderFreeper(new ModelFreeper(), 1.0F));
}
Далее.
Создаем файл под названием EntityFreeper.java.
Вписываем туда этот код:
package net.minecraft.src;
Создаем класс EntityFreeper с указанием, что это нейтральный моб (животное).
public class EntityFreeper extends EntityAnimal
Вписываем в класс EntityFreeper следующий код:
public EntityFreeper(World world)
{
super(world);
texture = "/mob/freeper.png";
setSize(1.5F, 1.5F);
}
Тут мы объясняем мобу, что мир, в котором он будет жить, супер:
SLU писал(а):
super(world);Тут мы указываем путь к текстуре:
SLU писал(а):
texture = "/mob/freeper.png";(размеры не изменять!)
Тут размеры коллайдера на мобе:
SLU писал(а):
setSize(1F, 1F);Это просто скопируйте. Тут записываются и считываются данные.
SLU писал(а):
public void writeEntityToNBT(NBTTagCompound nbttagcompound) {
super.writeEntityToNBT(nbttagcompound);
}
public void readEntityFromNBT(NBTTagCompound nbttagcompound)
{
super.readEntityFromNBT(nbttagcompound);
}
Теперь мы указываем звуки, которые он будет издавать.
Это отвечает за то, что он будет издавать постоянно. В моем случае он будет кукарекать.
SLU писал(а):
protected String getLivingSound() {
return "mob.chicken";
}
Это отвечает за то, что он будет издавать при уменьшении HP.
SLU писал(а):
protected String getHurtSound() {
return "mob.creeper";
}
Это отвечает за то, что он будет издавать при смерти.
SLU писал(а):
protected String getDeathSound() {
return "mob.creeperdeath";
}
Устанавливаем громкость.
SLU писал(а):
protected float getSoundVolume() {
return 0.4F;
}
Вписываем ID предмета, который выпадет после смерти моба.
SLU писал(а):
protected int getDropItemId() {
return 289;
}
Проверяем.
Идем далее.
Назвав файл RenderFreeper.java, мы вписываем в него следующий код:
SLU писал(а):
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. Впоследствии, возможно мы и напишем пару уроков по “созданию” модели в этой программе. Но пока, скопируйте просто готовый код фрипера. Объяснять тут ничего не надо, так как программа сама все вам сгенерирует.
SLU писал(а):
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;
}