Добавление RenderPlayerAPI в проект eclipse 1.7.10

7
0
Заранее прошу простить мою некомпетентность. 
Я знаю, что я ничерта не понимаю в яве и темболее в программировании.
Просто решил потихоньку учиться этому мастерству.

1.7.10

Ну прилюдии соблюдены, можно приступить к главному. Прошу помочь советом, как подключить RenderPlayerAPI.java к проекту minecraft. Я облазил все старые темы, но одни уже потёрты, другие не раскрывают тонкостей сия дела. Гуглил, но мой английский не позволил мне тоже понять, что от меня требуется.

Затем кланяясь уповаю на милость народа. :p

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

главный класс
Код:
package com.ihti.armorhd;

import api.player.render.RenderPlayerAPI;
import net.minecraft.client.model.ModelBiped;





public class ClientProxy extends CommonProxy  
{
    public String getText()
    {
        return "This is client side!";
    }
    
    public static ModelBiped knighthelmet = new ModelBiped();
    public static ModelKnighHelmet knighthelmet2 = new ModelKnighHelmet();
    
    @Override
     public void init() {
         super.init();
         
         knighthelmet.bipedHead.showModel = false;
         knighthelmet.bipedHeadwear.showModel = false;
         knighthelmet.bipedBody.showModel = false;
         knighthelmet.bipedLeftArm.showModel = false;
         knighthelmet.bipedRightArm.showModel = false;
         knighthelmet.bipedLeftLeg.showModel = false;
         knighthelmet.bipedRightLeg.showModel = false;
         knighthelmet.bipedCloak.showModel = false;
    }
    
    public static ModelKnighHelmet getArmorModel() 
    {
        return knighthelmet2;
    }
    
    public void renderSetup()
    {
        RenderPlayerAPI.register("armorhd", RenderPlayerMOD.class);


    }
     
}

класс предмета-шлема
Код:
package com.ihti.armorhd;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;




public class KnightHelmet extends ItemArmor {

    public KnightHelmet(int par1, ArmorMaterial par2ArmorMaterial, int par3, int par4)
    {
        super(par2ArmorMaterial, 0, 0);
        this.setCreativeTab(ArmorHD.tabArmorHD);
        this.setMaxStackSize(1);
        this.setFull3D();
    }
    
    /*
     * Иконка
     */
    @SideOnly(Side.CLIENT)
    public void registerIcons(IIconRegister par1IconRegister)
    {
        this.itemIcon = par1IconRegister.registerIcon("armorhd:KnightHelmet"); 
    }
    
    /*
     * Текстура брони на игроке
     */
    public String getArmorTexture(ItemStack itemstack, Entity entity, int slot, String type)
    {
        return "armorhd:textures/armor/KnightArmor.png";
    }
    
    
    @SideOnly(Side.CLIENT)
    @Override 
    public ModelKnighHelmet getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, int armorSlot) {
        if (armorSlot != 0)
            return null;
       
        if (itemStack != null && itemStack.getItem() instanceof KnightHelmet) {
            ModelKnighHelmet model = ClientProxy.getArmorModel(); //Я сохранил инстанс модельки в клиентском прокси
            model.isSneak = entityLiving.isSneaking();
            return model;
        }
        else
            return null;
    }
    
    
    public void onArmorTickUpdate(World world, EntityPlayer player, ItemStack itemStack)
    {
        /*
         * Любой эффект, когда броня одета (не вся, а только определенный предмет(в данном случае - шлем))
         */
    }
    
 
}

Класс модели шлема
Код:
package com.ihti.armorhd;

import java.util.ArrayList;

import net.minecraft.client.model.ModelBiped;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;

import org.lwjgl.opengl.GL11;






public class ModelKnighHelmet extends ModelBiped
{
  //fields
    ModelRenderer head1;
    ModelRenderer head2;
    ModelRenderer head3;
    ModelRenderer head4;
    ModelRenderer head5;
    ModelRenderer head6;
    ModelRenderer head7;
    ModelRenderer head8;
    ModelRenderer head9;
    ModelRenderer head10;
    ModelRenderer head11;
    
    private ArrayList<ModelRenderer> modelList = new ArrayList<ModelRenderer>();
    {
        modelList.add(head1);
        modelList.add(head2);
        modelList.add(head3);
        modelList.add(head4);
        modelList.add(head5);
        modelList.add(head6);
        modelList.add(head7);
        modelList.add(head8);
        modelList.add(head9);
        modelList.add(head10);
        modelList.add(head11);
        
    }
    
    //ResourceLocation knighttexture = new ResourceLocation("armorhd:textures/items/armor/KnightHelmet.png");
    
    
  public ModelKnighHelmet()
  {
    super.textureWidth = 256;
    super.textureHeight = 64;
    
    this.head1 = new ModelRenderer(this, 34, 22);
    this.head1.addBox(-5F, -8.5F, -5F, 10, 7, 10);
    this.head1.setRotationPoint(0F, 0F, 0F);
    this.head1.setTextureSize(256, 64);
    this.head1.mirror = true;
    this.setRotation(head1, 0F, 0F, 0F);
    this.head2 = new ModelRenderer(this, 74, 12);
    this.head2.addBox(-4.5F, -9.5F, -4.5F, 9, 2, 9);
    this.head2.setRotationPoint(0F, 0F, 0F);
    this.head2.setTextureSize(256, 64);
    this.head2.mirror = true;
    this.setRotation(head2, 0F, 0F, 0F);
    this.head3 = new ModelRenderer(this, 112, 9);
    this.head3.addBox(3.7F, -5.7F, 5.1F, 1, 2, 7);
    this.head3.setRotationPoint(0F, 0F, 0F);
    this.head3.setTextureSize(256, 64);
    this.head3.mirror = true;
    this.setRotation(head3, 0.9098432F, 0.2117115F, 0.1418984F);
    this.head4 = new ModelRenderer(this, 122, 32);
    this.head4.addBox(-1F, -14F, -5.5F, 2, 13, 1);
    this.head4.setRotationPoint(0F, 0F, 0F);
    this.head4.setTextureSize(256, 64);
    this.head4.mirror = true;
    this.setRotation(head4, 0F, 0F, 0F);
    this.head5 = new ModelRenderer(this, 102, 5);
    this.head5.addBox(3F, -5.2F, 7F, 1, 1, 4);
    this.head5.setRotationPoint(0F, 0F, 0F);
    this.head5.setTextureSize(256, 64);
    this.head5.mirror = true;
    this.setRotation(head5, 1.22173F, 0.1373543F, 0.2010743F);
    this.head6 = new ModelRenderer(this, 112, 0);
    this.head6.addBox(-4.6F, -6.5F, 4.5F, 1, 2, 7);
    this.head6.setRotationPoint(0F, 0F, 0F);
    this.head6.setTextureSize(256, 64);
    this.head6.mirror = true;
    this.setRotation(head6, 0.8726646F, -0.1745329F, -0.1745329F);
    this.head7 = new ModelRenderer(this, 102, 0);
    this.head7.addBox(-4.5F, -5F, 7F, 1, 1, 4);
    this.head7.setRotationPoint(0F, 0F, 0F);
    this.head7.setTextureSize(256, 64);
    this.head7.mirror = true;
    this.setRotation(head7, 1.256637F, -0.1396263F, -0.1570796F);
    this.head8 = new ModelRenderer(this, 92, 23);
    this.head8.addBox(-1F, -4F, 8F, 2, 2, 3);
    this.head8.setRotationPoint(0F, 0F, 0F);
    this.head8.setTextureSize(256, 64);
    this.head8.mirror = true;
    this.setRotation(head8, 0.7853982F, 0F, 0F);
    this.head9 = new ModelRenderer(this, 74, 23);
    this.head9.addBox(-2F, -5F, 11F, 4, 4, 4);
    this.head9.setRotationPoint(0F, 0F, 0F);
    this.head9.setTextureSize(256, 64);
    this.head9.mirror = true;
    this.setRotation(head9, 0.7853982F, 0F, 0F);
    this.head10 = new ModelRenderer(this, 74, 31);
    this.head10.addBox(-1.5F, -8.7F, 9F, 3, 5, 3);
    this.head10.setRotationPoint(0F, 0F, 0F);
    this.head10.setTextureSize(256, 64);
    this.head10.mirror = true;
    this.setRotation(head10, 0.2230717F, 0F, 0F);
    this.head11 = new ModelRenderer(this, 26, 40);
    this.head11.addBox(-1F, -6.7F, 8F, 2, 5, 2);
    this.head11.setRotationPoint(0F, 0F, 0F);
    this.head11.setTextureSize(256, 64);
    this.head11.mirror = true;
    this.setRotation(head11, 0F, 0F, 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);
    setRotationAngles(f, f1, f2, f3, f4, f5, entity);
    //FMLClientHandler.instance().getClient().getTextureManager().bindTexture(knighttexture);
    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();
       }
    }
    head1.render(f5);
    head2.render(f5);
    head3.render(f5);
    head4.render(f5);
    head5.render(f5);
    head6.render(f5);
    head7.render(f5);
    head8.render(f5);
    head9.render(f5);
    head10.render(f5);
    head11.render(f5);
  }
  
  public void render(float f5) {
      this.head1.render(f5);
      this.head2.render(f5);
      this.head3.render(f5);
      this.head4.render(f5);
      this.head5.render(f5);
      this.head6.render(f5);
      this.head7.render(f5);
      this.head8.render(f5);
      this.head9.render(f5);
      this.head10.render(f5);
      this.head11.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 entity)
  {
    super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
  }
  
  
 /*private void setRotationAngleX(float angle) 
  {
      for (ModelRenderer modelRenderer : modelList) 
      {
          modelRenderer.rotateAngleX = angle;
      }
  }

  private void setRotationAngleY(float angle) 
  {
      for (ModelRenderer modelRenderer : modelList) 
      {
          modelRenderer.rotateAngleY = angle;
      }
  }
  
  private void setRotationPointY (float par) 
  {
        for (ModelRenderer modelRenderer : modelList) 
        {
            modelRenderer.rotationPointY = par;
        }
  }
  
  public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity)
  {
    super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); 
    
    setRotationAngleY(f3 / (180F / (float)Math.PI));
    setRotationAngleX(f4 / (180F / (float)Math.PI));
    
    if (isSneak) 
        setRotationPointY(1.0F);
    else 
        setRotationPointY(0.0F);
  }*/
  
  

}

Класс рендера шлема для RenderPlayerAPI
Код:
package com.ihti.armorhd;

import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.AbstractClientPlayer;
import net.minecraft.util.ResourceLocation;
import api.player.render.RenderPlayerAPI;
import api.player.render.RenderPlayerBase;






public class RenderPlayerMOD extends RenderPlayerBase {

       private Minecraft mc = Minecraft.getMinecraft();

       private static final ResourceLocation knighttexture = new ResourceLocation("armorhd:textures/items/armor/KnightHelmet.png");

       private ModelKnighHelmet knighthelmet = new ModelKnighHelmet();
       

       public RenderPlayerMOD(RenderPlayerAPI renderPlayerAPI) {
          super(renderPlayerAPI);
       }
       
       
       public void renderSpecials(AbstractClientPlayer par1AbstractClientPlayer, float par1, float par2, float par3, float par4, float par5, float par6) 
       {
           super.renderSpecials(par1AbstractClientPlayer, par2);
           
           if(par1AbstractClientPlayer.getCurrentArmor(0) != null) 
           {
                   this.mc.getTextureManager().bindTexture(knighttexture);
                   super.renderPlayerAPI.getModelBipedMainField().bipedHead.postRender(0.0625F);
                   this.knighthelmet.render(par1AbstractClientPlayer, par1, par2, par3, par4, par5, par6);

               
          }
       }
}

Класс прокси сервер
Код:
package com.ihti.armorhd;



public class CommonProxy {
    public void registerRenderers() 
    {
        // Здесь ничего, так как сервер не рендерит графику или существ!    
    }
    

    public void init() 
    {
        
    }
}

Класс прокси клиент
Код:
package com.ihti.armorhd;

import api.player.render.RenderPlayerAPI;
import net.minecraft.client.model.ModelBiped;





public class ClientProxy extends CommonProxy  
{
    public String getText()
    {
        return "This is client side!";
    }
    
    public static ModelBiped knighthelmet = new ModelBiped();
    public static ModelKnighHelmet knighthelmet2 = new ModelKnighHelmet();
    
    @Override
     public void init() {
         super.init();
         
         knighthelmet.bipedHead.showModel = false;
         knighthelmet.bipedHeadwear.showModel = false;
         knighthelmet.bipedBody.showModel = false;
         knighthelmet.bipedLeftArm.showModel = false;
         knighthelmet.bipedRightArm.showModel = false;
         knighthelmet.bipedLeftLeg.showModel = false;
         knighthelmet.bipedRightLeg.showModel = false;
         knighthelmet.bipedCloak.showModel = false;
    }
    
    public static ModelKnighHelmet getArmorModel() 
    {
        return knighthelmet2;
    }
    
    public void renderSetup()
    {
        RenderPlayerAPI.register("armorhd", RenderPlayerMOD.class);


    }
     
}

Результаты этой ереси пока таковы:

Пока я остановился на решении проблемы с PlayerAPI  так как понял, что что-то тут явно не так с ним.
Пока имею отрисованную модель шлема, которая движется за телом игрока и не убранные части ModelBiped в ней.
При подключении как external JARs, RenderPlayerAPI-1.7.10-1.3.jar(скачан с оф. сайта), проект вроде как принял его и перестал ругаться на импорты.
Проект так же запускается на клиенте, если jar файл лежит вне папки eclipse/mods, но скомпилировать проект через .bat файл как обычно- не выходит. Пишет ошибку с PlayerAPI 

Я его декомпилировал с помощью decompile Java и куда только не пытался положить и добавить, но у меня не очень вышло...

Сетую на вашу помощь, бояре.
 
Dovakin написал(а):
Надо в src и в eclipse/mods
Ясно. .jar значит я кидаю в /mods(надо ли добавлять его через Build Path проекта как external JAR?), а в scr мне надо кинуть его же или исходники(по видимому). И в какую из них кидать, каким образом и в каком виде(.zip или распаковать в папку, внутри которой будет 2 папки META-INF и api)- руками или через Buildh Path по директории в eclipse( как что добавить если папка или архив).


Кинул .jar в mods, добавил в проект как сторонний jar файл. Кинул в src папку декомпилированный api и при запуске получаю ошибку обнаружения класса: 
java.lang.NoClassDefFoundError: net/minecraft/client/renderer/entity/RenderPlayer
 
Dovakin написал(а):
Я нашёл тему(сохранённую в кеше гугла) ещё до создания  этой темы, но там примерно так же написано- это туда, это сюда. Куда именно исходя из многих вариантов и в каком виде я так и не понял... попробовал все возможные варианты... не получилось что-то, что именно не могу понять.

Если мне всё таки удастся запилить мод, то обязательно скину исходники и сам мод на всеобщее обозрение. ^.^

Это будет пак 3д брони, шляп и одежды. Начал делать, потому что среди остальных модов, сколько не искал, просто нету интересной одежды для серверов.
 
Dovakin написал(а):
Решено? Если что то просто закинуть сорцы а src и deobf в eclipse/mods
Ну почему вы так плохо обьясняете
why+oh+why.png

Что подразумевается под "сорцами", какие такие scr и deobf(что это?) ложить в mods...
Надо начать с начала, у меня есть проект Minecraft в eclipse и файл RenderPlayerAPI-1.7.10-1.3.jar , что мне необходимо делать?
 
Сорцы-исходники API/мода т.е исходный код.
В твоем случаи закинуть исходники RenderPlayerAPI в src А deobf  в eclipse/mods
IHTI написал(а):
Dovakin написал(а):
Решено? Если что то просто закинуть сорцы а src и deobf в eclipse/mods
Ну почему вы так плохо обьясняете
why+oh+why.png

Что подразумевается под "сорцами", какие такие scr и deobf(что это?) ложить в mods...
Надо начать с начала, у меня есть проект Minecraft в eclipse и файл RenderPlayerAPI-1.7.10-1.3.jar , что мне необходимо делать?
 
XuPuPG написал(а):
Сорцы-исходники API/мода т.е исходный код.
В твоем случаи закинуть исходники RenderPlayerAPI в src А deobf  в eclipse/mods
IHTI написал(а):
Dovakin написал(а):
Решено? Если что то просто закинуть сорцы а src и deobf в eclipse/mods
Ну почему вы так плохо обьясняете
why+oh+why.png

Что подразумевается под "сорцами", какие такие scr и deobf(что это?) ложить в mods...
Надо начать с начала, у меня есть проект Minecraft в eclipse и файл RenderPlayerAPI-1.7.10-1.3.jar , что мне необходимо делать?
Вот, начинает проясняться! :lol:
Прочитал что такое обфускация... Целая система. Получается, мне надо декомпилировать RenderPlayerAPI-1.7.10-1.3.jar я получу его обфускацию, затем мне надо сделать его деобфускацию и я получу исходники... Как всё сложно.
Может есть добрый человек, у которого на 1.7.10 есть готовые исходники RenderPlayerAPI, взамен готов тоже помочь с чем-либо(могу нарисовать иконки, текстуры).
 
Никогда не занимался реобусфикацией/декомпиляцией мода.
Чесно-если ты элементарного не знаешь - то и таким как RenderPlayerAPI заниматься не стоит.Я сам пока не понимаю с чем его едят.А вот помочь могу
Авто деобфусцификация и декомпиляция мода .jar http://www.rubukkit.org/threads/minecraft-reverse-kit-javafx.72065/#post-915847 (не реклама.Я просто помогаю) пошевелись.Времени у тебя до 13 апреля
Если будут проблемы-пиши.Все инструкции по ссылке

IHTI написал(а):
XuPuPG написал(а):
Сорцы-исходники API/мода т.е исходный код.
В твоем случаи закинуть исходники RenderPlayerAPI в src А deobf  в eclipse/mods
IHTI написал(а):
Dovakin написал(а):
Решено? Если что то просто закинуть сорцы а src и deobf в eclipse/mods
Ну почему вы так плохо обьясняете
why+oh+why.png

Что подразумевается под "сорцами", какие такие scr и deobf(что это?) ложить в mods...
Надо начать с начала, у меня есть проект Minecraft в eclipse и файл RenderPlayerAPI-1.7.10-1.3.jar , что мне необходимо делать?
Вот, начинает проясняться! :lol:
Прочитал что такое обфускация... Целая система. Получается, мне надо декомпилировать RenderPlayerAPI-1.7.10-1.3.jar я получу его обфускацию, затем мне надо сделать его деобфускацию и я получу исходники... Как всё сложно.
Может есть добрый человек, у которого на 1.7.10 есть готовые исходники RenderPlayerAPI, взамен готов тоже помочь с чем-либо(могу нарисовать иконки, текстуры).
 
Dovakin написал(а):
Там в архиве с этим модом 3 версии. Deobf, собранная,src
Тема которая была давно потерялась просто. Я её через кеш в гугле только смог обнаружить, с которого не скачать.
[merge_posts_bbcode]Добавлено: 17.03.2015 22:16:43[/merge_posts_bbcode]

annalifegame написал(а):
В общем скачал на 1.7.10 архив. Внутри лежит сам .jar файл мода и архив декомпилированный его. 
В readme файле нашёл такое:

Development Installation
========================

Copy the file "%plugin.file%" inside this Render Player API installation package to the "mods" folder of the runtime environment of your Minecraft Forge development installation. In case this folder does not exist, run your development environment's Minecraft at least once.

In case you want to debug into the Render Player API source code add the file "%source.file%" to the source lookup path of the run/debug configurations of your Minecraft Forge development installation.

Я примерно понимаю что написано, но не понимаю... переводчик несёт ахинею.
 
IHTI написал(а):
Dovakin написал(а):
Там в архиве с этим модом 3 версии. Deobf, собранная,src
Тема которая была давно потерялась просто. Я её через кеш в гугле только смог обнаружить, с которого не скачать.
[merge_posts_bbcode]Добавлено: 17.03.2015 22:16:43[/merge_posts_bbcode]

annalifegame написал(а):
В общем скачал на 1.7.10 архив. Внутри лежит сам .jar файл мода и архив декомпилированный его. 
В readme файле нашёл такое:

Development Installation
========================

Copy the file "%plugin.file%" inside this Render Player API installation package to the "mods" folder of the runtime environment of your Minecraft Forge development installation. In case this folder does not exist, run your development environment's Minecraft at least once.

In case you want to debug into the Render Player API source code add the file "%source.file%" to the source lookup path of the run/debug configurations of your Minecraft Forge development installation.

Я примерно понимаю что написано, но не понимаю... переводчик несёт ахинею.
Господи, деобфусцированный кидай в src/java свой естессна
А мод сам в jar/mods - не знаю как на 1.7.10
 
Распаковал исходники api и кинул в src/main/java
.jar файл кинул в eclipse/mods
Если ничего не подключать, ошибки не пропадают, но проект компилируется теперь.
Если подключить .jar как external JAR, то ошибки пропадают.
В любом случае клиент из под рабочей среды не запускается ссылаясь на невозможность найти класс RenderPlayer.

Как-то надо подключить исходники api к проекту... попробовал некоторые способы и чот ноль реакции
 
Назад
Сверху