1.6.4 | Гайд по рендеру Techne моделей в качестве брони.

Sup, дорогуши.

Предисловие:
1. Вам необходимо уметь создавать главный класс мода.
2. Вам необходимо уметь регистрировать прокси.
3. Вам необходимо уметь делать предметы брони.
4. Вам необходимо уметь создавать ПРАВИЛЬНУЮ модель брони в Techne. Об этом напишу в следующем туториале.

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

Основа.
 Вам необходимо иметь скачанный API RenderPlayerAPI, он нужен для того, что бы делать броню совместимую с SmartMoving. Я лично делал вместе с ним, сразу.

Далее нам нужен какой нибудь простейший предмет брони, допустим у меня это будет нагрудник.
Теперь в классе ClientProxy мы пишем следующее:
Код:
package somePackage
...
import api.player.render.RenderPlayerAPI;
...

public class ClientProxy extends CommonProxy {

   public static Renders renders = new Renders();
   private ModelBackPack backpack = new ModelBackPack();

   public void renderSetup()
   {
      RenderPlayerAPI.register("BackpackMod", RenderPlayerMOD.class);
   }
...
//дальше какой нибудь ваш код.
}
Затем, создаем наш тот самый RenderPlayerMOD
Код:
import api.player.render.RenderPlayerAPI;
...
public class RenderPlayerMOD extends RenderPlayerBase {

   private Minecraft mc = Minecraft.getMinecraft();

   private static final ResourceLocation backpack_texture = new ResourceLocation("backpackmod:textures/models/bp_texture.png");

   private ModelBackPack backpack = new ModelBackPack();

   public RenderPlayerMOD(RenderPlayerAPI renderPlayerAPI) {
      super(renderPlayerAPI);
   }

public void renderSpecials(AbstractClientPlayer par1AbstractClientPlayer, float par2) {
      super.renderSpecials(par1AbstractClientPlayer, par2);
      if(par1AbstractClientPlayer.getCurrentArmor(2) != null) {
         if(par1AbstractClientPlayer.getCurrentArmor(2).itemID == Backpackmod.bp.itemID) {
            this.mc.getTextureManager().bindTexture(bp_texture);
            super.renderPlayer.getModelBipedMainField().bipedBody.postRender(0.0625F);
            this.backpack.render(0.0625F);
         }
}
Далее нам надо сделать саму модель.
Код:
package backpackmod.client.models;

import cpw.mods.fml.client.FMLClientHandler;
import net.minecraft.client.model.ModelBiped;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;

public class ModelBackpack extends ModelBiped {

   ModelRenderer Shape1;
   ModelRenderer Shape2;
   ModelRenderer Shape4;
   ModelRenderer Shape41;
   ModelRenderer Shape5;
   ModelRenderer Shape6;
   ModelRenderer Shape7;
   ResourceLocation backpack_texture = new ResourceLocation("backpackmod:textures/models/bp_texture.png");


   public ModelBackpack() {
      super.textureWidth = 128;
      super.textureHeight = 64;
      this.Shape1 = new ModelRenderer(this, 34, 0);
      this.Shape1.addBox(0.0F, 0.0F, 0.0F, 8, 12, 4);
      this.Shape1.setRotationPoint(-4.0F, 0.0F, 2.0F);
      this.Shape1.setTextureSize(128, 64);
      this.Shape1.mirror = true;
      this.setRotation(this.Shape1, 0.0F, 0.0F, 0.0F);
      this.Shape2 = new ModelRenderer(this, 59, 0);
      this.Shape2.addBox(0.0F, 0.0F, 0.0F, 6, 2, 3);
      this.Shape2.setRotationPoint(-3.0F, -2.0F, 2.0F);
      this.Shape2.setTextureSize(128, 64);
      this.Shape2.mirror = true;
      this.setRotation(this.Shape2, 0.0F, 0.0F, 0.0F);
      this.Shape4 = new ModelRenderer(this, 83, 10);
      this.Shape4.addBox(0.0F, 0.0F, 0.0F, 1, 5, 3);
      this.Shape4.setRotationPoint(-5.0F, 6.0F, 2.0F);
      this.Shape4.setTextureSize(128, 64);
      this.Shape4.mirror = true;
      this.setRotation(this.Shape4, 0.0F, 0.0F, 0.0F);
      this.Shape41 = new ModelRenderer(this, 59, 10);
      this.Shape41.addBox(0.0F, 0.0F, 0.0F, 1, 5, 3);
      this.Shape41.setRotationPoint(4.0F, 6.0F, 2.0F);
      this.Shape41.setTextureSize(128, 64);
      this.Shape41.mirror = true;
      this.setRotation(this.Shape41, 0.0F, 0.0F, 0.0F);
      this.Shape5 = new ModelRenderer(this, 68, 10);
      this.Shape5.addBox(0.0F, 0.0F, 0.0F, 6, 2, 1);
      this.Shape5.setRotationPoint(-3.0F, 9.0F, 6.0F);
      this.Shape5.setTextureSize(128, 64);
      this.Shape5.mirror = true;
      this.setRotation(this.Shape5, 0.0F, 0.0F, 0.0F);
      this.Shape6 = new ModelRenderer(this, 68, 14);
      this.Shape6.addBox(0.0F, 0.0F, 0.0F, 4, 1, 1);
      this.Shape6.setRotationPoint(-2.0F, 8.0F, 6.0F);
      this.Shape6.setTextureSize(128, 64);
      this.Shape6.mirror = true;
      this.setRotation(this.Shape6, 0.0F, 0.0F, 0.0F);
      this.Shape7 = new ModelRenderer(this, 58, 26);
      this.Shape7.addBox(0.0F, 0.0F, 0.0F, 6, 4, 1);
      this.Shape7.setRotationPoint(-3.0F, 1.0F, 6.0F);
      this.Shape7.setTextureSize(128, 64);
      this.Shape7.mirror = true;
      this.setRotation(this.Shape7, 0.0F, 0.0F, 0.0F);
   }

   public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) {
      super.render(entity, f, f1, f2, f3, f4, f5);
      this.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
      FMLClientHandler.instance().getClient().getTextureManager().bindTexture(this.bp_texture);
      if(entity instanceof EntityPlayer) {
         EntityPlayer ep = (EntityPlayer)entity;
         if(ep.isSneaking() && !ep.isInWater()) {
            GL11.glPushMatrix();
            GL11.glTranslatef(0.0F, 0.1F, 0.0F);
            GL11.glRotatef(25.0F, 1.0F, 0.0F, 0.0F);
            GL11.glPopMatrix();
         }
      }

      this.Shape1.render(f5);
      this.Shape2.render(f5);
      this.Shape4.render(f5);
      this.Shape41.render(f5);
      this.Shape5.render(f5);
      this.Shape6.render(f5);
      this.Shape7.render(f5);
   }

   public void render(float f5) {
      this.Shape1.render(f5);
      this.Shape2.render(f5);
      this.Shape4.render(f5);
      this.Shape41.render(f5);
      this.Shape5.render(f5);
      this.Shape6.render(f5);
      this.Shape7.render(f5);
   }

   private void setRotation(ModelRenderer model, float x, float y, float z) {
      model.rotateAngleX = x;
      model.rotateAngleY = y;
      model.rotateAngleZ = z;
   }

   public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity ent) {
      super.setRotationAngles(f, f1, f2, f3, f4, f5, ent);
   }
}
Вот собственно вроде и все.
Анти, перенеси тему в туториалы, если сочтешь нужным. Надеюсь кому-то да пригодится.
Картинка готового варианта - тык.
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
Ну ладно, ладно, хотя если не нужен этот ваш мувинг то можно и без апи.
 
329
13
minecraftsrv написал(а):
Всем привет. Наверняка кого-то да пекло, как сделать эту самую злополучную броню, без багов, вылетов и прочих нелепостей. Сегодня я вам это и расскажу, итак, приступим.

Основа.
 Вам необходимо иметь скачанный API RenderPlayerAPI...
И тут я закрываю страницу... А жаль.

Есть где-нибудь в сети гайд без сторонних программных изысков?
 
509
2
Dragon2488 написал(а):
Вообще очень легко без этой хрени, просто уметь надо.
Не работала с этим,но по коду видно. Просто крутить и двигать уметь надо =)
 
905
5
Раз уж все отметились, напишу бреда и я.
Всегда можно расширить ModelBiped и подсунуть в getArmorModel. Так даже попроще слегка.
 
Ну товарищи, знаете ли, написал как смог, насколько знаний хватает :). Далее возможно буду совершенствовать, но пока вроде и так устраивает. Если кто знает варианты получше - отпишитесь сюда с примером, мне даже не лень по вами выданной информации будет гайд написать.
 
Сверху