Понедельник, 23 Декабря 2024, 06:02

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
[ModLoader] Основы программирования для Minecraft [Часть 3]
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
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;
}


Скриншот из игры:



От Eye: Мобы имеют АИ как у обычной свиньи. Бегают, прыгают, улыбаются. Чуть позже мы вместе с Максимом расскажем как сделать вражеского моба и дружелюбного по типу Волка.
От Aswo: Всем привет, я Максим. С сегодняшнего дня я присоединяюсь к Вале, дабы помочь ему и вам в этом нелегком деле. Так же думаю, будет серия уроков по Techne, в которых вы научитесь моделировать объекты для игры. Ну и конечно же добавлять их в игру. В общем, зубрите пока первые девять глав biggrin


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
PoPutДата: Воскресенье, 05 Февраля 2012, 22:09 | Сообщение # 2
был не раз
Сейчас нет на сайте
Если что моба враждебного делать так же как и дружелюбного.
Достаточно в этой строке
Code
public class EntityFreeper extends EntityAnimal
вместо animal написать mob или living(как житель деревни)


Жизнь коротка но она того стоит.

В жизни нет муки старашнее любви.

Век живи,век учись.

Я не обычайно не адекватен не смотря на мои сообщения.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг