1. Le forum de Minecraft-France va définitivement fermer ses portes. Celui-ci restera en lecture seule mais vous ne pourrez plus y apporter de nouveaux topics. Nous vous invitons à nous rejoindre sur le Discord de Minecraft-France qui permet de présenter vos projets, discuter avec la communauté etc.. Merci à tous d'avoir fait vivre ce forum de nombreuses années. Pour nous rejoindre sur Discord, Cliquez ici

[1.5.2/1.6.x]Animer simplement son mob

Discussion dans 'Tutoriels' créé par Nolan-XX, 21 Juil 2013.

  1. Nolan-XX

    Nolan-XX Modérateur
    Staff

    Inscrit:
    29 Déc 2012
    Messages:
    10 234
    Points:
    304
    Sexe:
    Homme
    Bonjour a tous !
    Je vais vous apprendre a faire une animation simple pour un mob.
    1) Prérequis :
    Les proxies + la classe de votre mob
    Pour faire court , je vous donnerai les miens , a savoir notre cher Liquid Ocelot :
    LiquidE.png
    Et la texture :
    Liquid.png
    Liquid.java :
    Code (java):
    // Date: 20/07/2013 18:39:15
    // Template version 1.1
    // Java generated by Techne
    // Keep in mind that you still need to fill in some blanks
    // - ZeuX
     
     
     
     
     
     
    package mods.nono.MGSmod.client;
     
    import net.minecraft.client.model.ModelBase;
    import net.minecraft.client.model.ModelRenderer;
    import net.minecraft.entity.Entity;
    import net.minecraft.util.MathHelper;
     
    public class Liquid extends ModelBase
    {
      //fields
        ModelRenderer head;
        ModelRenderer body;
        ModelRenderer rightarm;
        ModelRenderer leftarm;
        ModelRenderer rightleg;
        ModelRenderer leftleg;
        ModelRenderer HairA;
        ModelRenderer HairD;
        ModelRenderer HairG;
     
      public Liquid()
      {
        textureWidth = 128;
        textureHeight = 128;
     
          head = new ModelRenderer(this, 0, 0);
          head.addBox(-4F, -8F, -4F, 8, 8, 8);
          head.setRotationPoint(0F, 0F, 0F);
          head.setTextureSize(128, 128);
          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(128, 128);
          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(128, 128);
          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(128, 128);
          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(128, 128);
          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(128, 128);
          leftleg.mirror = true;
          setRotation(leftleg, 0F, 0F, 0F);
          HairA = new ModelRenderer(this, 0, 38);
          HairA.addBox(-4F, 0F, 0F, 8, 8, 1);
          HairA.setRotationPoint(0F, -3F, 3F);
          HairA.setTextureSize(128, 128);
          HairA.mirror = true;
          setRotation(HairA, 0.2094395F, 0F, 0F);
          HairD = new ModelRenderer(this, 0, 65);
          HairD.addBox(0F, 0F, 0F, 1, 7, 1);
          HairD.setRotationPoint(3F, -1F, -3F);
          HairD.setTextureSize(128, 128);
          HairD.mirror = true;
          setRotation(HairD, 0F, 0F, 0F);
          HairG = new ModelRenderer(this, 0, 65);
          HairG.addBox(0F, 0F, 0F, 1, 7, 1);
          HairG.setRotationPoint(-4F, -1F, -3F);
          HairG.setTextureSize(128, 128);
          HairG.mirror = true;
          setRotation(HairG, 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);
        head.render(f5);
        body.render(f5);
        rightarm.render(f5);
        leftarm.render(f5);
        rightleg.render(f5);
        leftleg.render(f5);
        HairA.render(f5);
        HairD.render(f5);
        HairG.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);
     
    }
     
    LiquidRender.java
    Code (java):
    package mods.nono.MGSmod.client;
     
    import net.minecraft.client.model.ModelBase;
    import net.minecraft.client.renderer.entity.Render;
    import net.minecraft.client.renderer.entity.RenderLiving;
    import net.minecraft.entity.Entity;
     
    public class LiquidRender extends RenderLiving {
     
        private Liquid LiquidRender = new Liquid();
     
        public LiquidRender(Liquid LiquidRender, float par2)
        {
            super(new Liquid(), 0.5F);
        }
    }
    LiquidMob.Java
    Code (java):
    package mods.nono.MGSmod.common;
     
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.EnumCreatureAttribute;
    import net.minecraft.entity.monster.EntityMob;
    import net.minecraft.world.World;
     
    public class LiquidMob extends EntityMob
        {
        public LiquidMob(World par1World)
        {
            super(par1World);
            this.texture = "/mods/nono/MGSmod/textures/mob/Liquid.png";
            this.moveSpeed = 0.15F;
        }
     
        public int getMaxHealth()
        {
            return 100;
        }
     
        public int getAttackStrength(Entity par1Entity)
        {
        return 10;
        }
     
     
        public EnumCreatureAttribute getCreatureAttribute()
        {
            return EnumCreatureAttribute.UNDEFINED;
        }
    }
    A placer dans votre ClientProxy.java :
    Code (java):
    public void registerRenderEntity()
        {
     
            RenderingRegistry.registerEntityRenderingHandler(LiquidMob.class, new LiquidRender(new Liquid(), 0.5F));
     
        }
    Et dans votre classe principale , partie @Init :
    Code (java):
            EntityRegistry.registerGlobalEntityID(LiquidMob.class, "Liquid", EntityRegistry.findGlobalUniqueEntityId(), 74, 38);
            EntityRegistry.registerModEntity(LiquidMob.class, "Liquid", 6, this, 40, 1, true);
            LanguageRegistry.instance().addStringLocalization("entity.Liquid.name","Liquid Ocelot");
                proxy.registerRenderEntity();
     
    Vous pouvez tester , vous verrez que Liquid N'est pas animé , que c'est juste une planche.
    2) L'animation :
    Dans votre classe Liquid.Java , rendez vous à cette ligne :
    Code (java):
    super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
    Puis ajoutez :
    Code (java):
    this.Membre.rotateAngleX
    Ou Membre est à remplacer par le membre en question , ici on va le remplacer rightleg.
    Vous pouvez changer X par Y ou par Z.
    Ensuite , au bout de cette ligne , rajoutez :
    Code (java):
    = MathHelper.cos((180F / (float)Math.PI)) * -xF * f1;
    Pour avoir une animation de balancement ( ? ) sinon :
    Code (java):
    = MathHelper.cos((180F / (float)y)) * -xF * f1;
    Pour l'animation que d'un coté.
    Remplacez X et Y par une valeur quelconque. ( pour X j'ai mis 3.8 )
    Ensuite testez. Vous verrez que Liquid ne bouge qu'une seule jambe.
    Refaites la même opération pour chacun des membres qui bougent !
    Vous devriez avoir ça :
    Code (java):
        super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
        this.rightleg.rotateAngleX = MathHelper.cos((180F / (float)Math.PI)) * -3.8F * f1;
        this.leftleg.rotateAngleX = MathHelper.cos((180F / (float)Math.PI)) * -3.8F * f1;
        this.rightarm.rotateAngleX = MathHelper.cos((180F / (float)Math.PI)) * -3.8F * f1;
        this.leftarm.rotateAngleX = MathHelper.cos((180F / (float)Math.PI)) * -3.8F * f1;
    Testez. Vous verrez que le mouvement n'est pas naturel ...
    Enlevez tout simplement le - devant un membre inférieur ( les jambes ) et supérieur ( les bras ) :
    Code (java):
        super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
        this.rightleg.rotateAngleX = MathHelper.cos((180F / (float)Math.PI)) * -3.8F * f1;
        this.leftleg.rotateAngleX = MathHelper.cos((180F / (float)Math.PI)) * 3.8F * f1;
        this.rightarm.rotateAngleX = MathHelper.cos((180F / (float)Math.PI)) * 3.8F * f1;
        this.leftarm.rotateAngleX = MathHelper.cos((180F / (float)Math.PI)) * -3.8F * f1;
    Vous pouvez diminuer 3.8 ou l'augmenter si cela ne vous convient pas.
    Fin.

    (le tuto + le model + la texture sont de moi )
     
  2. BenCG3

    BenCG3 Nouveau

    Inscrit:
    24 Nov 2013
    Messages:
    2
    Points:
    30
    Sexe:
    Homme
    C'est beaux ça donne envie, mais le problème c'est que j'ai plusieurs problèmes avec ton code et en particulier avec
    Code (cpp):
    public int getMaxHealth()
        {
            return 100;
        }
    Impossible j'ai une erreur. J'ai essayé de mettre en float à la place mais ça ne change rien.
    Je débute dans le modding et je voulais simplement faire un nouveaux mob avec donc "techne" j'y arrive avec "MCreator 1.3.8" sans animation mais je ni arrive pas manuellement à en faire un avec animation.
    J'ai déjà eux du mal avec les préparatif, proxy ect mais là j'ai beaux cherché sur le net je ne trouve pas ce que je veux, ou alors je trouve mais c'est pour d'anciennes version ... (j'utilise Forge et Mcp pour Minecraft 1.6.4)
    Tu a l'air d'en connaitre un rayon, donc c'est possible pour toi de nous faire un vrais tuto complet de A à Z avec un fichier java d'un model 3d fait avec techne et la texture en suivant toutes les étapes, vraiment toutes les étapes faite sur Eclipse, création de package, class, reconstitution exportation et tous ces petits détail que je n'ai trouvé dans aucuns autres tuto !
     
  3. Nolan-XX

    Nolan-XX Modérateur
    Staff

    Inscrit:
    29 Déc 2012
    Messages:
    10 234
    Points:
    304
    Sexe:
    Homme
  4. BenCG3

    BenCG3 Nouveau

    Inscrit:
    24 Nov 2013
    Messages:
    2
    Points:
    30
    Sexe:
    Homme
    En 1.5.2 ok je vois pourquoi rien ne va alors ><
    Techne ce n'est pas le problème, je gère ;)
    Par contre merci pour ce lien c'est parfait ! http://www.minecraftforgefrance.fr/
    Exactement ce que je cherchais avec mise à jours des tutos, j'étais surement déjà tombé dessus mais il y a tellement de forum qui je me perd parfois !
     

Partager cette page