Вверх ↑
Ответов: 123
Eternity
Inactive
#1: 2011-08-30 10:09:14 ЛС | профиль | цитата
Хотела узнать из чего состоит наша Yana.
Да и опять в одной из тем просили выложить как делать нейтрального моба

Ну, для начала скажу, что в создании моба нет ничего сложно. Основная проблема, которая может у вас возникнуть, так это создание новой модельки. Я взяла обычного крипера и чуть-чуть перерисовала текстуру.

Создаем файл и указываем название 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;
}



карма: 18
8
Голосовали:petrocan, Archangel3998, Assasin, Analcunt, player$39240, freezy63, Letopisec, Flehska