Armure 3D



  • Bonjour

    je ne sais pas comment faire pour que l'armure s'adapte au animation (sneak, courir, tir a l'arc …)

    Code:

    package fr.kerlann.norialife;
    
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    import fr.kerlann.model.ArmorAlien;
    import fr.kerlann.proxy.ClientProxy;
    import net.minecraft.client.model.ModelBiped;
    import net.minecraft.client.renderer.texture.IIconRegister;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.EnumAction;
    import net.minecraft.item.ItemArmor;
    import net.minecraft.item.ItemStack;
    
    public class Alien extends ItemArmor {
    
    public ArmorAlien model;
    
    public Alien(ArmorMaterial material, int render_idx, int type) {
    super(material, render_idx, type);
    
    this.setMaxStackSize(1);
    this.setCreativeTab(noria.Noriaalienarmur);
    
    }
    
    @Override
    public String getUnlocalizedName() {
    return String.format("item.%s%s", Resource.RESOURCE_PREFIX,
    getUnwrappedUnlocalizedName(super.getUnlocalizedName()));
    }
    
    @Override
    public String getUnlocalizedName(ItemStack itemstack) {
    return String.format("item.%s%s", Resource.RESOURCE_PREFIX,
    getUnwrappedUnlocalizedName(super.getUnlocalizedName()));
    }
    
    protected String getUnwrappedUnlocalizedName(String unlocalizedName) {
    return unlocalizedName.substring(unlocalizedName.indexOf('.') + 1);
    }
    
    @Override
    @SideOnly(Side.CLIENT)
    public void registerIcons(IIconRegister iconRegister) {
    this.itemIcon = iconRegister
    .registerIcon(this.getUnlocalizedName().substring(this.getUnlocalizedName().indexOf('.') + 1));
    }
    
       @Override
       @SideOnly(Side.CLIENT)
       public ModelBiped getArmorModel(EntityLivingBase entityliving, ItemStack stack, int armor)
       {
           return new ArmorAlien(0.25F);
       }
    
    @Override
    public String getArmorTexture(ItemStack stack, Entity entity, int slot, String layer) {
    
    return "noria:textures/models/armor/alien_layer_1.png";
    }
    
    @SideOnly(Side.CLIENT)
    public void initModel() {
    if (model == null) {
    model = new ArmorAlien(0.25F);
    }
    }
    
    }
    

    Code clientProxy

    package fr.kerlann.proxy;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import cpw.mods.fml.common.FMLCommonHandler;
    import fr.kerlann.model.ArmorAlien;
    import fr.kerlann.norialife.Alien;
    import fr.kerlann.norialife.noria;
    import net.minecraft.client.model.ModelBiped;
    import net.minecraft.item.Item;
    
    public class ClientProxy
    extends CommonProxy {
    
    public static final Map <item, modelbiped="">armorModels = new HashMap<item, modelbiped="">();
    
    public static void register_renderers(){
    
    ArmorAlien custom_armor = new ArmorAlien(5F);
    ArmorAlien custom_legs = new ArmorAlien(0.5F);
    
    armorModels.put(noria.AlienHelm, custom_armor);
    armorModels.put(noria.Alienchest, custom_armor);
    armorModels.put(noria.Alienlegs, custom_legs);
    armorModels.put(noria.Alienboot, custom_armor);
    
    }
    
    }
    
    

    Code Rendu armor

    package fr.kerlann.model;
    
    import net.minecraft.client.model.ModelBiped;
    import net.minecraft.client.model.ModelRenderer;
    import net.minecraft.entity.Entity;
    
    public class ArmorAlien extends ModelBiped {
    ModelRenderer head;
    ModelRenderer body;
    ModelRenderer rightarm;
    ModelRenderer leftarm;
    ModelRenderer rightleg;
    ModelRenderer leftleg;
    ModelRenderer Shape1;
    ModelRenderer Shape2;
    ModelRenderer Shape3;
    ModelRenderer Shape4;
    ModelRenderer Shape5;
    ModelRenderer Shape6;
    ModelRenderer Shape7;
    ModelRenderer Shape9;
    ModelRenderer Shape10;
    ModelRenderer Shape11;
    ModelRenderer shape12;
    ModelRenderer Shape13;
    
    public ArmorAlien(float expand) {
    super(expand, 0, 64, 32);
    
    head = new ModelRenderer(this, 0, 0);
    head.addBox(-4F, -8F, -5F, 8, 8, 15);
    head.setRotationPoint(0F, 0F, 0F);
    head.setTextureSize(64, 32);
    head.mirror = true;
    setRotation(head, 0F, 0F, 0F);
    body = new ModelRenderer(this, 16, 16);
    body.addBox(-4F, 0F, -2F, 8, 12, 4);
    body.setRotationPoint(0F, 0F, 0F);
    body.setTextureSize(64, 32);
    body.mirror = true;
    setRotation(body, 0F, 0F, 0F);
    rightarm = new ModelRenderer(this, 40, 16);
    rightarm.addBox(-3F, -2F, -2F, 4, 12, 4);
    rightarm.setRotationPoint(-5F, 2F, 0F);
    rightarm.setTextureSize(64, 32);
    rightarm.mirror = true;
    setRotation(rightarm, 0F, 0F, 0F);
    leftarm = new ModelRenderer(this, 40, 16);
    leftarm.addBox(-1F, -2F, -2F, 4, 12, 4);
    leftarm.setRotationPoint(5F, 2F, 0F);
    leftarm.setTextureSize(64, 32);
    leftarm.mirror = true;
    setRotation(leftarm, 0F, 0F, 0F);
    rightleg = new ModelRenderer(this, 0, 16);
    rightleg.addBox(-2F, 0F, -2F, 4, 12, 4);
    rightleg.setRotationPoint(-2F, 12F, 0F);
    rightleg.setTextureSize(64, 32);
    rightleg.mirror = true;
    setRotation(rightleg, 0F, 0F, 0F);
    leftleg = new ModelRenderer(this, 0, 16);
    leftleg.addBox(-2F, 0F, -2F, 4, 12, 4);
    leftleg.setRotationPoint(2F, 12F, 0F);
    leftleg.setTextureSize(64, 32);
    leftleg.mirror = true;
    setRotation(leftleg, 0F, 0F, 0F);
    Shape1 = new ModelRenderer(this, 56, 22);
    Shape1.addBox(0F, 0F, 0F, 2, 8, 2);
    Shape1.setRotationPoint(-1F, 12.73333F, 0.5F);
    Shape1.setTextureSize(64, 32);
    Shape1.mirror = true;
    setRotation(Shape1, 0.7063936F, 0F, 0F);
    Shape2 = new ModelRenderer(this, 56, 17);
    Shape2.addBox(0F, 0F, 0F, 2, 4, 2);
    Shape2.setRotationPoint(-1F, 18.9F, 5.6F);
    Shape2.setTextureSize(64, 32);
    Shape2.mirror = true;
    setRotation(Shape2, 1.152537F, 0F, 0F);
    Shape3 = new ModelRenderer(this, 56, 18);
    Shape3.addBox(-1F, 0F, 0F, 2, 4, 2);
    Shape3.setRotationPoint(0F, 20.6F, 9.2F);
    Shape3.setTextureSize(64, 32);
    Shape3.mirror = true;
    setRotation(Shape3, 1.784573F, 0F, 0F);
    Shape4 = new ModelRenderer(this, 32, 0);
    Shape4.addBox(0F, 0F, 0F, 2, 4, 2);
    Shape4.setRotationPoint(-1F, 19.8F, 13F);
    Shape4.setTextureSize(64, 32);
    Shape4.mirror = true;
    setRotation(Shape4, 2.193538F, 0F, 0F);
    Shape5 = new ModelRenderer(this, 32, 0);
    Shape5.addBox(0F, 0F, 0F, 2, 2, 2);
    Shape5.setRotationPoint(-1F, 17.9F, 15.3F);
    Shape5.setTextureSize(64, 32);
    Shape5.mirror = true;
    setRotation(Shape5, 1.635859F, 0F, 0F);
    Shape6 = new ModelRenderer(this, 32, 0);
    Shape6.addBox(0F, 0F, 0F, 2, 4, 2);
    Shape6.setRotationPoint(4F, 24F, 9F);
    Shape6.setTextureSize(64, 32);
    Shape6.mirror = true;
    setRotation(Shape6, 1.93685F, 0F, 0F);
    Shape7 = new ModelRenderer(this, 32, 0);
    Shape7.addBox(0F, 0F, 0F, 2, 3, 2);
    Shape7.setRotationPoint(4F, 22.7F, 12.7F);
    Shape7.setTextureSize(64, 32);
    Shape7.mirror = true;
    setRotation(Shape7, 2.007081F, 0F, -0.0954183F);
    Shape9 = new ModelRenderer(this, 32, 0);
    Shape9.addBox(0F, 0F, 0F, 2, 2, 2);
    Shape9.setRotationPoint(4F, 21.6F, 15F);
    Shape9.setTextureSize(64, 32);
    Shape9.mirror = true;
    setRotation(Shape9, 2.007081F, 0F, -0.170666F);
    Shape10 = new ModelRenderer(this, 32, 0);
    Shape10.addBox(0F, -1.5F, 0F, 2, 2, 2);
    Shape10.setRotationPoint(0F, 18.1F, 18.2F);
    Shape10.setTextureSize(64, 32);
    Shape10.mirror = true;
    setRotation(Shape10, 1.495549F, 0.633335F, -0.1330422F);
    Shape11 = new ModelRenderer(this, 32, 0);
    Shape11.addBox(-1F, 0.1F, 0F, 2, 3, 2);
    Shape11.setRotationPoint(0.2F, 18F, 17.73333F);
    Shape11.setTextureSize(64, 32);
    Shape11.mirror = true;
    setRotation(Shape11, 1.42907F, 1.412035F, 0.0709785F);
    shape12 = new ModelRenderer(this, 32, 0);
    shape12.addBox(0F, 1F, 0F, 2, 2, 2);
    shape12.setRotationPoint(3.6F, 17.7F, 20.06667F);
    shape12.setTextureSize(64, 32);
    shape12.mirror = true;
    setRotation(shape12, 0.8898555F, 2.705022F, 0.0237365F);
    Shape13 = new ModelRenderer(this, 32, 0);
    Shape13.addBox(0F, 0F, 0F, 2, 2, 2);
    Shape13.setRotationPoint(5F, 19.4F, 18F);
    Shape13.setTextureSize(64, 32);
    Shape13.mirror = true;
    setRotation(Shape13, 0.8621664F, 2.859084F, 0.1654625F);
    
    }
    
    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);
    head.render(f5);
    body.render(f5);
    rightarm.render(f5);
    leftarm.render(f5);
    rightleg.render(f5);
    leftleg.render(f5);
    Shape1.render(f5);
    Shape2.render(f5);
    Shape3.render(f5);
    Shape4.render(f5);
    Shape5.render(f5);
    Shape6.render(f5);
    Shape7.render(f5);
    Shape9.render(f5);
    Shape10.render(f5);
    Shape11.render(f5);
    shape12.render(f5);
    Shape13.render(f5);
    }
    
    private void setRotation(ModelRenderer model, float x, float y, float z) {
    model.rotateAngleX = x;
    model.rotateAngleY = y;
    model.rotateAngleZ = z;
    }
    
    }
    
    

    si quel qu'un pourrait m'aider 
    Merci d'avance ! :)</item,></item,>



  • Salut,
    Alors je vois deux problèmes :

    • Dans la fonction getArmorModel de ton item, il faut paramétrer le modèle avec des variables comme sneak et d'autres, je ne sais plus exactement.
    • Dans la classe de ton modèle, il faut overide la fonction setRogationAngles en mettant toutes les rotations des parties de model comme body, head … à la valeur des rotations de bipedBody, bipedHead ...


  • ok merci j'ai fait sa et sa marche

    @Override
    @SideOnly(Side.CLIENT)
    public ModelBiped getArmorModel(EntityLivingBase entityliving, ItemStack stack, int armor) {
    
    ModelBiped armorModel = new ArmorAlien(1f);
    
    armorModel.isSneak = entityliving.isSneaking();
    armorModel.isRiding = entityliving.isRiding();
    armorModel.isChild = entityliving.isChild();
    
    armorModel.heldItemRight = 0;
    armorModel.aimedBow = false;
    
    EntityPlayer player = (EntityPlayer)entityliving;
    
    ItemStack held_item = player.getEquipmentInSlot(0);
    
    if (held_item != null){
    armorModel.heldItemRight = 1;
    
    if (player.getItemInUseCount() > 0){
    
    EnumAction enumaction = held_item.getItemUseAction();
    
    if (enumaction == EnumAction.bow){
    armorModel.aimedBow = true;
    }else if (enumaction == EnumAction.block){
    armorModel.heldItemRight = 3;
    }
    
    }
    
    }
    
    return armorModel;
    }
    

    et je voudrait agrandir la tête du joueur mais comment je pourrait le faire ?



  • Quand tu dis "la tête du joueur", tu veux dire réellement la tête de joueur ou la partie d'armure qui est sur la tête du joueur ?
    Dans le premier cas, je ne sais pas comment faire et dans le deuxième cas, en jouant avec les GL11.gl_scalef (ou quelque chose comme ça), ça doit être facile.



  • la tête réelle

    Mais sinon je vais essayer avec GL11.gl_scalef



  • @'Kerlann':

    la tête réelle

    Mais sinon je vais essayer avec GL11.gl_scalef

    Je pense avoir trouvé une solution : que le joueur met l'armure, tu prend le modèle et modifier la taille de la tête comme ça :

    ModelRenderer bipedHead = event.renderer.getMainModel().bipedHead;
    bipedHead.cubeList.remove(0);
    bipedHead.add(-4.0F, -8.0F, -4.0F, 8, 8, 8, modelSize); // Ici, tu remplace modelSize par la taille que tu veux
    

    Le problème va être quand tu veux remettre la taille normal, quand le joueur enlève l'armure, mais je pense que ça ne doit pas être compliqué à faire.



  • Il doit effectivement y avoir moyen de faire ça via l'event de rendu du joueur.



  • J'ai fait ça mais il y a rien qui change

       public void onRender(RenderPlayerEvent.Post event)
       {
        ModelRenderer bipedHead = event.renderer.modelArmor.bipedHead;
        bipedHead.cubeList.remove(0);
        bipedHead.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, 15);
    
       }
    


  • Tu as mis ceci avec un @SubscribeEvent au dessus, dans une classe enregistrée ?
    Changes le "Post" par "Pre".

    PS: utilises une balise java la prochaine fois 😉



  • Toujours pas

    @SubscribeEvent
    public void onRender(RenderPlayerEvent.Pre event) {
    ModelRenderer bipedHead = event.renderer.modelArmor.bipedHead;
    bipedHead.cubeList.remove(0);
    bipedHead.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, 15);
    }
    


  • Mets un "System.out.println("Quelque chose");" dans cette fonction, et regardes si ça apparaît dans la console.



  • non ça apparaît pas



  • Alors la fonction est pas appelée, montres comment tu as enregistrée la classe d'events où est la fonction.