Eye | Дата: Среда, 24 Августа 2011, 06:53 | Сообщение # 1 |
заслуженный участник
Сейчас нет на сайте
| Глава 9. Создание нового нейтрального моба - Advanced.
Ну, для начала скажу, что в создании моба нет ничего сложно. Основная проблема, которая может у вас возникнуть, так это создание новой модельки. Я взял обычного крипера и чуть-чуть перерисовал текстуру.
Создаем файл и указываем название 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.7.3"; } }
Теперь в класс mod_freeper вставляем следующий код: Code public mod_freeper() { ModLoader.RegisterEntityID(EntityFreeper.class, "Freeper", ModLoader.getUniqueEntityId());
ModLoader.AddSpawn(EntityFreeper.class, 500, EnumCreatureType.creature); }
Регестрируем моба в нашем мире: Code ModLoader.AddSpawn(EntityFreeper.class, 500, EnumCreatureType.creature);
Спавн моба. Число 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 texture = "/mob/freeper.png";
(размеры не изменять!)
Тут размеры коллайдера на мобе:
Это просто скопируйте. Тут записываются и считываются данные. 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; }
Скриншот из игры:
От Eye: Мобы имеют АИ как у обычной свиньи. Бегают, прыгают, улыбаются. Чуть позже мы вместе с Максимом расскажем как сделать вражеского моба и дружелюбного по типу Волка. От Aswo: Всем привет, я Максим. С сегодняшнего дня я присоединяюсь к Вале, дабы помочь ему и вам в этом нелегком деле. Так же думаю, будет серия уроков по Techne, в которых вы научитесь моделировать объекты для игры. Ну и конечно же добавлять их в игру. В общем, зубрите пока первые девять глав
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
Сообщение отредактировал Eye - Среда, 24 Августа 2011, 06:59 |
|
| |