Mob model personnalisé



  • Salut, j'ai suivi le tutoriel pour créer un mob basique, seulement je souhaiterais créer un mob avec un rendu personnalisé créé grâce à Techne, j'ai suivi ce post : https://www.minecraftforgefrance.fr/archive/index.php?thread-366.html mais le mob n'a pas de texture, il est invisible.

    Ci-dessous mes classes avant d'avoir suivi le post :

    La classe du mob

    public class Bouftou extends EntityMob
    {
        public Bouftou(World world)
        {
            super(world);
        }
    
        public void applyEntityAttributes()
        {
            super.applyEntityAttributes();
            this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(20D);
            this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(4D);
            this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.8D);
        }
    }
    

    Le model :

    public class ModelBouftou extends ModelBase
    {
      //fields
        ModelRenderer Shape24;
        ModelRenderer Shape25;
        ModelRenderer Shape26;
        ModelRenderer Shape27;
        ModelRenderer Shape28;
        ModelRenderer Shape29;
        ModelRenderer Shape30;
        ModelRenderer Shape31;
        ModelRenderer Shape32;
        ModelRenderer Shape33;
        ModelRenderer Shape23;
        ModelRenderer Shape1;
        ModelRenderer Shape6;
        ModelRenderer Shape7;
        ModelRenderer Shape8;
        ModelRenderer Shape9;
        ModelRenderer Shape18;
        ModelRenderer Shape10;
        ModelRenderer Shape11;
        ModelRenderer Shape17;
        ModelRenderer Shape12;
        ModelRenderer Shape16;
        ModelRenderer Shape13;
        ModelRenderer Shape15;
        ModelRenderer Shape14;
        ModelRenderer Shape3;
        ModelRenderer Shape4;
        ModelRenderer Shape5;
        ModelRenderer Shape2;
        ModelRenderer Shape21;
        ModelRenderer Shape19;
    
      public ModelBouftou()
      {
        textureWidth = 128;
        textureHeight = 128;
    
          Shape24 = new ModelRenderer(this, 0, 0);
          Shape24.addBox(0F, 0F, 0F, 1, 1, 1);
          Shape24.setRotationPoint(0F, 0F, 0F);
          Shape24.setTextureSize(128, 128);
          Shape24.mirror = true;
          setRotation(Shape24, 0F, 0F, 0F);
          Shape25 = new ModelRenderer(this, 110, 0);
          Shape25.addBox(0F, 0F, 0F, 4, 3, 3);
          Shape25.setRotationPoint(11F, 4F, -6F);
          Shape25.setTextureSize(128, 128);
          Shape25.mirror = true;
          setRotation(Shape25, 0.3490659F, 0F, 0F);
          Shape26 = new ModelRenderer(this, 110, 0);
          Shape26.addBox(0F, 0F, 0F, 3, 4, 3);
          Shape26.setRotationPoint(15F, 3.1F, -6.3F);
          Shape26.setTextureSize(128, 128);
          Shape26.mirror = true;
          setRotation(Shape26, 0.3490659F, 0F, 0F);
          Shape27 = new ModelRenderer(this, 110, 0);
          Shape27.addBox(0F, 0F, 0F, 2, 3, 2);
          Shape27.setRotationPoint(15.6F, 1F, -6.7F);
          Shape27.setTextureSize(128, 128);
          Shape27.mirror = true;
          setRotation(Shape27, 0.3490659F, 0F, 0F);
          Shape28 = new ModelRenderer(this, 110, 0);
          Shape28.addBox(0F, 0F, 0F, 4, 3, 3);
          Shape28.setRotationPoint(-15F, 4F, -6F);
          Shape28.setTextureSize(128, 128);
          Shape28.mirror = true;
          setRotation(Shape28, 0.3490659F, 0F, 0F);
          Shape29 = new ModelRenderer(this, 110, 0);
          Shape29.addBox(0F, 0F, 0F, 3, 4, 3);
          Shape29.setRotationPoint(-18F, 3.1F, -6.3F);
          Shape29.setTextureSize(128, 128);
          Shape29.mirror = true;
          setRotation(Shape29, 0.3490659F, 0F, 0F);
          Shape30 = new ModelRenderer(this, 110, 0);
          Shape30.addBox(0F, 0F, 0F, 2, 3, 2);
          Shape30.setRotationPoint(-17.5F, 1F, -6.7F);
          Shape30.setTextureSize(128, 128);
          Shape30.mirror = true;
          setRotation(Shape30, 0.3490659F, 0F, 0F);
          Shape31 = new ModelRenderer(this, 0, 0);
          Shape31.addBox(0F, 0F, 0F, 15, 13, 1);
          Shape31.setRotationPoint(-7F, 4F, 19F);
          Shape31.setTextureSize(128, 128);
          Shape31.mirror = true;
          setRotation(Shape31, 0F, 0F, 0F);
          Shape32 = new ModelRenderer(this, 0, 0);
          Shape32.addBox(0F, 0F, 0F, 4, 4, 4);
          Shape32.setRotationPoint(-0.8F, 6F, 19F);
          Shape32.setTextureSize(128, 128);
          Shape32.mirror = true;
          setRotation(Shape32, 0.2230717F, 0F, 0F);
          Shape33 = new ModelRenderer(this, 0, 0);
          Shape33.addBox(0F, 0F, 0F, 3, 3, 3);
          Shape33.setRotationPoint(-0.5F, 5.5F, 22.8F);
          Shape33.setTextureSize(128, 128);
          Shape33.mirror = true;
          setRotation(Shape33, 0.2230717F, 0.1858931F, 0F);
          Shape23 = new ModelRenderer(this, 70, 80);
          Shape23.addBox(0F, 0F, 0F, 3, 3, 1);
          Shape23.setRotationPoint(-1F, 9F, -12.5F);
          Shape23.setTextureSize(128, 128);
          Shape23.mirror = true;
          setRotation(Shape23, 0F, 0F, 0F);
          Shape1 = new ModelRenderer(this, 0, 0);
          Shape1.addBox(0F, 0F, 0F, 21, 20, 29);
          Shape1.setRotationPoint(-10F, 1F, -10F);
          Shape1.setTextureSize(128, 128);
          Shape1.mirror = true;
          setRotation(Shape1, 0F, 0F, 0F);
          Shape6 = new ModelRenderer(this, 70, 80);
          Shape6.addBox(0F, 0F, 0F, 1, 17, 25);
          Shape6.setRotationPoint(-11F, 3F, -8F);
          Shape6.setTextureSize(128, 128);
          Shape6.mirror = true;
          setRotation(Shape6, 0F, 0F, 0F);
          Shape7 = new ModelRenderer(this, 0, 0);
          Shape7.addBox(0F, 0F, 0F, 2, 15, 17);
          Shape7.setRotationPoint(-12F, 4F, 0F);
          Shape7.setTextureSize(128, 128);
          Shape7.mirror = true;
          setRotation(Shape7, 0F, 0F, 0F);
          Shape8 = new ModelRenderer(this, 70, 80);
          Shape8.addBox(0F, 0F, 0F, 1, 9, 11);
          Shape8.setRotationPoint(-13F, 7F, 2F);
          Shape8.setTextureSize(128, 128);
          Shape8.mirror = true;
          setRotation(Shape8, 0F, 0F, 0F);
          Shape9 = new ModelRenderer(this, 70, 80);
          Shape9.addBox(0F, 0F, 0F, 1, 11, 9);
          Shape9.setRotationPoint(-13F, 6F, 3F);
          Shape9.setTextureSize(128, 128);
          Shape9.mirror = true;
          setRotation(Shape9, 0F, 0F, 0F);
          Shape18 = new ModelRenderer(this, 0, 0);
          Shape18.addBox(0F, 0F, 0F, 8, 8, 1);
          Shape18.setRotationPoint(-3.5F, 6F, -12F);
          Shape18.setTextureSize(128, 128);
          Shape18.mirror = true;
          setRotation(Shape18, 0F, 0F, 0F);
          Shape10 = new ModelRenderer(this, 70, 80);
          Shape10.addBox(0F, 0F, 0F, 1, 17, 25);
          Shape10.setRotationPoint(11F, 3F, -9F);
          Shape10.setTextureSize(128, 128);
          Shape10.mirror = true;
          setRotation(Shape10, 0F, 0F, 0F);
          Shape11 = new ModelRenderer(this, 0, 0);
          Shape11.addBox(0F, 0F, 0F, 2, 15, 17);
          Shape11.setRotationPoint(11F, 4F, 0F);
          Shape11.setTextureSize(128, 128);
          Shape11.mirror = true;
          setRotation(Shape11, 0F, 0F, 0F);
          Shape17 = new ModelRenderer(this, 70, 80);
          Shape17.addBox(0F, 0F, 0F, 17, 12, 2);
          Shape17.setRotationPoint(-8F, 4.5F, -11.5F);
          Shape17.setTextureSize(128, 128);
          Shape17.mirror = true;
          setRotation(Shape17, 0F, 0F, 0F);
          Shape12 = new ModelRenderer(this, 70, 80);
          Shape12.addBox(0F, 0F, 0F, 1, 11, 9);
          Shape12.setRotationPoint(13F, 6F, 3F);
          Shape12.setTextureSize(128, 128);
          Shape12.mirror = true;
          setRotation(Shape12, 0F, 0F, 0F);
          Shape16 = new ModelRenderer(this, 70, 80);
          Shape16.addBox(0F, 0F, 0F, 14, 14, 1);
          Shape16.setRotationPoint(-6.5F, 3.5F, -11F);
          Shape16.setTextureSize(128, 128);
          Shape16.mirror = true;
          setRotation(Shape16, 0F, 0F, 0F);
          Shape13 = new ModelRenderer(this, 70, 80);
          Shape13.addBox(0F, 0F, 0F, 1, 9, 11);
          Shape13.setRotationPoint(13F, 7F, 2F);
          Shape13.setTextureSize(128, 128);
          Shape13.mirror = true;
          setRotation(Shape13, 0F, 0F, 0F);
          Shape15 = new ModelRenderer(this, 39, 80);
          Shape15.addBox(0F, 0F, 0F, 18, 1, 26);
          Shape15.setRotationPoint(-8.5F, 0.5F, -9F);
          Shape15.setTextureSize(128, 128);
          Shape15.mirror = true;
          setRotation(Shape15, 0F, 0F, 0F);
          Shape14 = new ModelRenderer(this, 0, 0);
          Shape14.addBox(0F, 0F, 0F, 17, 1, 24);
          Shape14.setRotationPoint(-8F, 0F, -8F);
          Shape14.setTextureSize(128, 128);
          Shape14.mirror = true;
          setRotation(Shape14, 0F, 0F, 0F);
          Shape3 = new ModelRenderer(this, 110, 0);
          Shape3.addBox(0F, 0F, 0F, 3, 5, 3);
          Shape3.setRotationPoint(-8F, 19F, 13F);
          Shape3.setTextureSize(128, 128);
          Shape3.mirror = true;
          setRotation(Shape3, 0F, 0F, 0F);
          Shape4 = new ModelRenderer(this, 110, 0);
          Shape4.addBox(0F, 0F, 0F, 3, 5, 3);
          Shape4.setRotationPoint(6F, 19F, -7F);
          Shape4.setTextureSize(128, 128);
          Shape4.mirror = true;
          setRotation(Shape4, 0F, 0F, 0F);
          Shape5 = new ModelRenderer(this, 110, 0);
          Shape5.addBox(0F, 0F, 0F, 3, 5, 3);
          Shape5.setRotationPoint(6F, 19F, 13F);
          Shape5.setTextureSize(128, 128);
          Shape5.mirror = true;
          setRotation(Shape5, 0F, 0F, 0F);
          Shape2 = new ModelRenderer(this, 110, 0);
          Shape2.addBox(0F, 0F, 0F, 3, 5, 3);
          Shape2.setRotationPoint(-8F, 19F, -7F);
          Shape2.setTextureSize(128, 128);
          Shape2.mirror = true;
          setRotation(Shape2, 0F, 0F, 0F);
          Shape21 = new ModelRenderer(this, 3, 100);
          Shape21.addBox(0F, 0F, 0F, 4, 4, 1);
          Shape21.setRotationPoint(-8F, 7F, -11.5F);
          Shape21.setTextureSize(128, 128);
          Shape21.mirror = true;
          setRotation(Shape21, 0F, 0.0371786F, 0F);
          Shape19 = new ModelRenderer(this, 21, 100);
          Shape19.addBox(0F, 0F, 0F, 4, 4, 1);
          Shape19.setRotationPoint(4.9F, 7F, -11.7F);
          Shape19.setTextureSize(128, 128);
          Shape19.mirror = true;
          setRotation(Shape19, 0F, -0.0349066F, 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);
        Shape24.render(f5);
        Shape25.render(f5);
        Shape26.render(f5);
        Shape27.render(f5);
        Shape28.render(f5);
        Shape29.render(f5);
        Shape30.render(f5);
        Shape31.render(f5);
        Shape32.render(f5);
        Shape33.render(f5);
        Shape23.render(f5);
        Shape1.render(f5);
        Shape6.render(f5);
        Shape7.render(f5);
        Shape8.render(f5);
        Shape9.render(f5);
        Shape18.render(f5);
        Shape10.render(f5);
        Shape11.render(f5);
        Shape17.render(f5);
        Shape12.render(f5);
        Shape16.render(f5);
        Shape13.render(f5);
        Shape15.render(f5);
        Shape14.render(f5);
        Shape3.render(f5);
        Shape4.render(f5);
        Shape5.render(f5);
        Shape2.render(f5);
        Shape21.render(f5);
        Shape19.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);
      }
    
    }
    
    

    Le render :

    public class RenderBouftou extends RenderBiped
    {
        public final ResourceLocation texture = new ResourceLocation(DCEDO.MODID, "textures/entity/TextureBouftou.png"); 
    
        public RenderBouftou(ModelBiped model, float shadow)
        {
            super(model, shadow);
        }
    
        protected ResourceLocation getEntityTexture(EntityLiving living)
        {
            return this.getMobBouftouTexture((Bouftou)living);
        }
    
        private ResourceLocation getMobBouftouTexture(Bouftou mobTutoriel)
        {
            return texture;
        }
    }
    

    Mon proxy côté client :

    RenderingRegistry.registerEntityRenderingHandler(Bouftou.class, new RenderBouftou(new ModelBiped(), 0.5F));
    

    Merci 🙂


  • Correcteurs

    au lieu de

    RenderingRegistry.registerEntityRenderingHandler(Bouftou.class, new RenderBouftou(new ModelBiped(), 0.5F));
    

    tu devrais avoir

    RenderingRegistry.registerEntityRenderingHandler(Bouftou.class, new RenderBouftou(new ModelBouftou(), 0.5F));
    

    Enfin il me semble hein



  • RenderingRegistry.registerEntityRenderingHandler(Bouftou.class, new RenderBouftou(new ModelBiped(), 0.5F));
    

    Tu n'utilises pas ton Model custom mais un autre model.

    EDIT : Grugé par toutoune ^^



  • Tu n'appliques pas ton model, en revanche pour ce qui est de la texture je crains que tu n'aies pas enregistré correctement ton rendu


  • Correcteurs

    En tout cas moyen d'avoir un screen de ton model? Parce qu'un Bouftou en 33shapes, il doit avoir de la gueule

    GROS PS: On ne voit rien qui va gérer les rotations, je prédis des questions à ce sujet
    De plus j'espère que tu as pensé aux axes de rotations avant d'exporter ton .java


  • Rédacteurs

    Balise de version ?



  • Quand je remplace ModelBiped par ModelBouftou, j'ai l'erreur : The constructor RenderBouftou(ModelBouftou, float) is undefined

    Je dois changer ma class RenderBouftou extends RenderBiped certainement mais je ne sait pas en quoi.

    Pour la texture, quel est le problème ? J'ai suivi le tutoriel à la lettre.

    Pour les axes de rotations, j'aurais l'occasion de modifier tout ca, c'est le premier mob que j'exporte sur eclipse, la je voudrais juste voir le mob, je l'animerai plus tard.


  • Correcteurs

    J'ai un modèle de quadripède dont le render est ainsi:

    public class RenderBullDog extends RenderLiving
    {  
        public RenderBullDog(ModelBullDog BullDogRender, float par2)
        {
            super(new ModelBullDog(), 0.5F);
        }
        public final ResourceLocation texture = new ResourceLocation("ModPowerDeco:textures/entity/BullDog.png");
    
        private ResourceLocation getBullDogTexture(EntityBullDog bullDog)
        {
            return texture;
        }
    
        @Override
        protected ResourceLocation getEntityTexture(Entity living)
        {
            return this.getBullDogTexture((EntityBullDog)living);
        }
    }
    

    C'est à dire extends RenderLiving (en me basant sur le code du loup)



  • @'Toutoune1008':

    J'ai un modèle de quadripède dont le render est ainsi:

    public class RenderBullDog extends RenderLiving
    {  
        public RenderBullDog(ModelBullDog BullDogRender, float par2)
        {
            super(new ModelBullDog(), 0.5F);
        }
        public final ResourceLocation texture = new ResourceLocation("ModPowerDeco:textures/entity/BullDog.png");
    
        private ResourceLocation getBullDogTexture(EntityBullDog bullDog)
        {
            return texture;
        }
    
        @Override
        protected ResourceLocation getEntityTexture(Entity living)
        {
            return this.getBullDogTexture((EntityBullDog)living);
        }
    }
    

    C'est à dire extends RenderLiving (en me basant sur le code du loup)

    Ca fonctionne, merci beaucoup.

    J'en profite pour demander, si je veux que mon mob effectue des actions particulières du style tirer une flèche ou autre, y'a-t-il des tutos disponibles ?


  • Correcteurs

    Si tu parles de l'animation je pense pas qu'il y ait de tuto sur ce point précis, mais il y a bien un tuto sur l'animation basique (mouvements des membres).

    Maintenant si tu parles d'une action à proprement parler, c'est à dire que ton mob tire des flèches, regarde le code du skeleton. Moi-même débutant en modding j'ai pu obtenir des mobs qui tirent des choses (ils ont armes à feu en main et te dégomment).

    Le principal étant que tu regardes bien et que tu saches le résultat voulu, pour ne pas perdre trop de temps à chercher au hasard.



  • @'Toutoune1008':

    Si tu parles de l'animation je pense pas qu'il y ait de tuto sur ce point précis, mais il y a bien un tuto sur l'animation basique (mouvements des membres).

    Maintenant si tu parles d'une action à proprement parler, c'est à dire que ton mob tire des flèches, regarde le code du skeleton. Moi-même débutant en modding j'ai pu obtenir des mobs qui tirent des choses (ils ont armes à feu en main et te dégomment).

    Le principal étant que tu regardes bien et que tu saches le résultat voulu, pour ne pas perdre trop de temps à chercher au hasard.

    Je sais exactement ce que je veux, par ailleurs j'ai lu ce tuto : https://www.minecraftforgefrance.fr/showthread.php?tid=129 pour animer les 4 pattes de mon mob seulement, le mouvement de balancier ne fonctionne pas, les pattes bougent et reste en position "tendu" pendant le mouvement du mob puis reviennent en position initiale quand le mob s'arrête. Je voudrais le même mouvement que les pattes du cochon par exemple.


  • Correcteurs

    Je n'ai rien vu concernant la méthode

    public void setLivingAnimations(EntityLivingBase living, float f, float f1, float f2){ }
    

    Dans la classe de ton modèle. Personnellement en utilisant la classe du loup comme base, j'ai pu obtenir le résultat voulu (mouvement de la queue, position assise etc)

    Maintenant tu parles d'articulations complexes(plus d'un shape, c'pas ouf mais si tu n'as pas même fais d'animation basique, tu commences déjà un cran au dessus), ce sera à toi de tout doser niveau amplitude des mouvements et il faudra que tu ais bien placé tes axes de rotations sur ton modèle.



  • @'Toutoune1008':

    Je n'ai rien vu concernant la méthode

    public void setLivingAnimations(EntityLivingBase living, float f, float f1, float f2){ }
    

    Dans la classe de ton modèle. Personnellement en utilisant la classe du loup comme base, j'ai pu obtenir le résultat voulu (mouvement de la queue, position assise etc)

    Maintenant tu parles d'articulations complexes(plus d'un shape, c'pas ouf mais si tu n'as pas même fais d'animation basique, tu commences déjà un cran au dessus), ce sera à toi de tout doser niveau amplitude des mouvements et il faudra que tu ais bien placé tes axes de rotations sur ton modèle.

    L'animation se fait dans la classe du Model :

    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);
        this.Shape3.rotateAngleX = MathHelper.cos((180F / (float)Math.PI)) * -1F * f1;
        this.Shape4.rotateAngleX = MathHelper.cos((180F / (float)Math.PI)) * 1F * f1;
        this.Shape5.rotateAngleX = MathHelper.cos((180F / (float)Math.PI)) * 1F * f1;
        this.Shape2.rotateAngleX = MathHelper.cos((180F / (float)Math.PI)) * -1F * f1;
      }
    

    Enfin du moins d'après le tutoriel que j'ai suivi. Shape 3 4 5 2 correspondent aux pattes


  • Correcteurs

    C'est ce que je te dis. Regarde plutôt la classe du loup et son modèle.

    La méthode dont je te parle permet d'animer ton mob comme un loup, c'est à dire dès qu'il se déplace la méthode est appelée, ce qui te simplifie l'apprentissage.

    Et tu pourras regarder la classe de l'entité pour l'update justement



  • @'Toutoune1008':

    C'est ce que je te dis. Regarde plutôt la classe du loup et son modèle.

    La méthode dont je te parle permet d'animer ton mob comme un loup, c'est à dire dès qu'il se déplace la méthode est appelée, ce qui te simplifie l'apprentissage.

    Et tu pourras regarder la classe de l'entité pour l'update justement

    J'ai regardé "EntityWolf.class" seulement, je n'ai pas trouvé la méthode dont tu me parlais. En fait moi je veux seulement animer les pattes pour qu'elles aient le même mouvement que le cochon, j'ai réussi à les faire avoir une rotation seulement je voudrais un mouvement plus naturel car actuellement, quand le mob est en mouvement elles se déplacent puis reviennent en position quand celui-ci s'arrête. Je voudrais le mouvement de balancier de la marche.

    Je ne trouve pas l'emplacement des modèles des mobs du minecraft de base, sinon je n'aurais qu'a copier coller la partie qui m'intéresse par exemple celle du cochon en remplaçant par le nom de mes Shape.


  • Correcteurs

    package net.minecraft.client.model;
    
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    
    @SideOnly(Side.CLIENT)
    public class ModelPig extends ModelQuadruped
    {
        private static final String __OBFID = "CL_00000849";
    
        public ModelPig()
        {
            this(0.0F);
        }
    
        public ModelPig(float p_i1151_1_)
        {
            super(6, p_i1151_1_);
            this.head.setTextureOffset(16, 16).addBox(-2.0F, 0.0F, -9.0F, 4, 3, 1, p_i1151_1_);
            this.field_78145_g = 4.0F;
        }
    }
    

    On regarde donc ModelQuadruped

    package net.minecraft.client.model;
    
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    import net.minecraft.entity.Entity;
    import net.minecraft.util.MathHelper;
    import org.lwjgl.opengl.GL11;
    
    @SideOnly(Side.CLIENT)
    public class ModelQuadruped extends ModelBase
    {
        public ModelRenderer head = new ModelRenderer(this, 0, 0);
        public ModelRenderer body;
        public ModelRenderer leg1;
        public ModelRenderer leg2;
        public ModelRenderer leg3;
        public ModelRenderer leg4;
        protected float field_78145_g = 8.0F;
        protected float field_78151_h = 4.0F;
        private static final String __OBFID = "CL_00000851";
    
        public ModelQuadruped(int p_i1154_1_, float p_i1154_2_)
        {
            this.head.addBox(-4.0F, -4.0F, -8.0F, 8, 8, 8, p_i1154_2_);
            this.head.setRotationPoint(0.0F, (float)(18 - p_i1154_1_), -6.0F);
            this.body = new ModelRenderer(this, 28, 8);
            this.body.addBox(-5.0F, -10.0F, -7.0F, 10, 16, 8, p_i1154_2_);
            this.body.setRotationPoint(0.0F, (float)(17 - p_i1154_1_), 2.0F);
            this.leg1 = new ModelRenderer(this, 0, 16);
            this.leg1.addBox(-2.0F, 0.0F, -2.0F, 4, p_i1154_1_, 4, p_i1154_2_);
            this.leg1.setRotationPoint(-3.0F, (float)(24 - p_i1154_1_), 7.0F);
            this.leg2 = new ModelRenderer(this, 0, 16);
            this.leg2.addBox(-2.0F, 0.0F, -2.0F, 4, p_i1154_1_, 4, p_i1154_2_);
            this.leg2.setRotationPoint(3.0F, (float)(24 - p_i1154_1_), 7.0F);
            this.leg3 = new ModelRenderer(this, 0, 16);
            this.leg3.addBox(-2.0F, 0.0F, -2.0F, 4, p_i1154_1_, 4, p_i1154_2_);
            this.leg3.setRotationPoint(-3.0F, (float)(24 - p_i1154_1_), -5.0F);
            this.leg4 = new ModelRenderer(this, 0, 16);
            this.leg4.addBox(-2.0F, 0.0F, -2.0F, 4, p_i1154_1_, 4, p_i1154_2_);
            this.leg4.setRotationPoint(3.0F, (float)(24 - p_i1154_1_), -5.0F);
        }
    
        /**
         * Sets the models various rotation angles then renders the model.
         */
        public void render(Entity p_78088_1_, float p_78088_2_, float p_78088_3_, float p_78088_4_, float p_78088_5_, float p_78088_6_, float p_78088_7_)
        {
            this.setRotationAngles(p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, p_78088_7_, p_78088_1_);
    
            if (this.isChild)
            {
                float f6 = 2.0F;
                GL11.glPushMatrix();
                GL11.glTranslatef(0.0F, this.field_78145_g * p_78088_7_, this.field_78151_h * p_78088_7_);
                this.head.render(p_78088_7_);
                GL11.glPopMatrix();
                GL11.glPushMatrix();
                GL11.glScalef(1.0F / f6, 1.0F / f6, 1.0F / f6);
                GL11.glTranslatef(0.0F, 24.0F * p_78088_7_, 0.0F);
                this.body.render(p_78088_7_);
                this.leg1.render(p_78088_7_);
                this.leg2.render(p_78088_7_);
                this.leg3.render(p_78088_7_);
                this.leg4.render(p_78088_7_);
                GL11.glPopMatrix();
            }
            else
            {
                this.head.render(p_78088_7_);
                this.body.render(p_78088_7_);
                this.leg1.render(p_78088_7_);
                this.leg2.render(p_78088_7_);
                this.leg3.render(p_78088_7_);
                this.leg4.render(p_78088_7_);
            }
        }
    
        /**
         * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms
         * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how
         * "far" arms and legs can swing at most.
         */
        public void setRotationAngles(float p_78087_1_, float p_78087_2_, float p_78087_3_, float p_78087_4_, float p_78087_5_, float p_78087_6_, Entity p_78087_7_)
        {
            float f6 = (180F / (float)Math.PI);
            this.head.rotateAngleX = p_78087_5_ / (180F / (float)Math.PI);
            this.head.rotateAngleY = p_78087_4_ / (180F / (float)Math.PI);
            this.body.rotateAngleX = ((float)Math.PI / 2F);
            this.leg1.rotateAngleX = MathHelper.cos(p_78087_1_ * 0.6662F) * 1.4F * p_78087_2_;
            this.leg2.rotateAngleX = MathHelper.cos(p_78087_1_ * 0.6662F + (float)Math.PI) * 1.4F * p_78087_2_;
            this.leg3.rotateAngleX = MathHelper.cos(p_78087_1_ * 0.6662F + (float)Math.PI) * 1.4F * p_78087_2_;
            this.leg4.rotateAngleX = MathHelper.cos(p_78087_1_ * 0.6662F) * 1.4F * p_78087_2_;
        }
    }
    

    Dans tous les cas pour ta recherche c'est dans "package net.minecraft.client.model"

    Après moi j'aime la classe modèle du loup alors je la mets de nouveau en avant Xd

    package net.minecraft.client.model;
    
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.entity.passive.EntityWolf;
    import net.minecraft.util.MathHelper;
    import org.lwjgl.opengl.GL11;
    
    @SideOnly(Side.CLIENT)
    public class ModelWolf extends ModelBase
    {
        /** main box for the wolf head */
        public ModelRenderer wolfHeadMain;
        /** The wolf's body */
        public ModelRenderer wolfBody;
        /** Wolf'se first leg */
        public ModelRenderer wolfLeg1;
        /** Wolf's second leg */
        public ModelRenderer wolfLeg2;
        /** Wolf's third leg */
        public ModelRenderer wolfLeg3;
        /** Wolf's fourth leg */
        public ModelRenderer wolfLeg4;
        /** The wolf's tail */
        ModelRenderer wolfTail;
        /** The wolf's mane */
        ModelRenderer wolfMane;
        private static final String __OBFID = "CL_00000868";
    
        public ModelWolf()
        {
            float f = 0.0F;
            float f1 = 13.5F;
            this.wolfHeadMain = new ModelRenderer(this, 0, 0);
            this.wolfHeadMain.addBox(-3.0F, -3.0F, -2.0F, 6, 6, 4, f);
            this.wolfHeadMain.setRotationPoint(-1.0F, f1, -7.0F);
            this.wolfBody = new ModelRenderer(this, 18, 14);
            this.wolfBody.addBox(-4.0F, -2.0F, -3.0F, 6, 9, 6, f);
            this.wolfBody.setRotationPoint(0.0F, 14.0F, 2.0F);
            this.wolfMane = new ModelRenderer(this, 21, 0);
            this.wolfMane.addBox(-4.0F, -3.0F, -3.0F, 8, 6, 7, f);
            this.wolfMane.setRotationPoint(-1.0F, 14.0F, 2.0F);
            this.wolfLeg1 = new ModelRenderer(this, 0, 18);
            this.wolfLeg1.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, f);
            this.wolfLeg1.setRotationPoint(-2.5F, 16.0F, 7.0F);
            this.wolfLeg2 = new ModelRenderer(this, 0, 18);
            this.wolfLeg2.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, f);
            this.wolfLeg2.setRotationPoint(0.5F, 16.0F, 7.0F);
            this.wolfLeg3 = new ModelRenderer(this, 0, 18);
            this.wolfLeg3.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, f);
            this.wolfLeg3.setRotationPoint(-2.5F, 16.0F, -4.0F);
            this.wolfLeg4 = new ModelRenderer(this, 0, 18);
            this.wolfLeg4.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, f);
            this.wolfLeg4.setRotationPoint(0.5F, 16.0F, -4.0F);
            this.wolfTail = new ModelRenderer(this, 9, 18);
            this.wolfTail.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, f);
            this.wolfTail.setRotationPoint(-1.0F, 12.0F, 8.0F);
            this.wolfHeadMain.setTextureOffset(16, 14).addBox(-3.0F, -5.0F, 0.0F, 2, 2, 1, f);
            this.wolfHeadMain.setTextureOffset(16, 14).addBox(1.0F, -5.0F, 0.0F, 2, 2, 1, f);
            this.wolfHeadMain.setTextureOffset(0, 10).addBox(-1.5F, 0.0F, -5.0F, 3, 3, 4, f);
        }
    
        /**
         * Sets the models various rotation angles then renders the model.
         */
        public void render(Entity p_78088_1_, float p_78088_2_, float p_78088_3_, float p_78088_4_, float p_78088_5_, float p_78088_6_, float p_78088_7_)
        {
            super.render(p_78088_1_, p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, p_78088_7_);
            this.setRotationAngles(p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, p_78088_7_, p_78088_1_);
    
            if (this.isChild)
            {
                float f6 = 2.0F;
                GL11.glPushMatrix();
                GL11.glTranslatef(0.0F, 5.0F * p_78088_7_, 2.0F * p_78088_7_);
                this.wolfHeadMain.renderWithRotation(p_78088_7_);
                GL11.glPopMatrix();
                GL11.glPushMatrix();
                GL11.glScalef(1.0F / f6, 1.0F / f6, 1.0F / f6);
                GL11.glTranslatef(0.0F, 24.0F * p_78088_7_, 0.0F);
                this.wolfBody.render(p_78088_7_);
                this.wolfLeg1.render(p_78088_7_);
                this.wolfLeg2.render(p_78088_7_);
                this.wolfLeg3.render(p_78088_7_);
                this.wolfLeg4.render(p_78088_7_);
                this.wolfTail.renderWithRotation(p_78088_7_);
                this.wolfMane.render(p_78088_7_);
                GL11.glPopMatrix();
            }
            else
            {
                this.wolfHeadMain.renderWithRotation(p_78088_7_);
                this.wolfBody.render(p_78088_7_);
                this.wolfLeg1.render(p_78088_7_);
                this.wolfLeg2.render(p_78088_7_);
                this.wolfLeg3.render(p_78088_7_);
                this.wolfLeg4.render(p_78088_7_);
                this.wolfTail.renderWithRotation(p_78088_7_);
                this.wolfMane.render(p_78088_7_);
            }
        }
    
        /**
         * Used for easily adding entity-dependent animations. The second and third float params here are the same second
         * and third as in the setRotationAngles method.
         */
        public void setLivingAnimations(EntityLivingBase p_78086_1_, float p_78086_2_, float p_78086_3_, float p_78086_4_)
        {
            EntityWolf entitywolf = (EntityWolf)p_78086_1_;
    
            if (entitywolf.isAngry())
            {
                this.wolfTail.rotateAngleY = 0.0F;
            }
            else
            {
                this.wolfTail.rotateAngleY = MathHelper.cos(p_78086_2_ * 0.6662F) * 1.4F * p_78086_3_;
            }
    
            if (entitywolf.isSitting())
            {
                this.wolfMane.setRotationPoint(-1.0F, 16.0F, -3.0F);
                this.wolfMane.rotateAngleX = ((float)Math.PI * 2F / 5F);
                this.wolfMane.rotateAngleY = 0.0F;
                this.wolfBody.setRotationPoint(0.0F, 18.0F, 0.0F);
                this.wolfBody.rotateAngleX = ((float)Math.PI / 4F);
                this.wolfTail.setRotationPoint(-1.0F, 21.0F, 6.0F);
                this.wolfLeg1.setRotationPoint(-2.5F, 22.0F, 2.0F);
                this.wolfLeg1.rotateAngleX = ((float)Math.PI * 3F / 2F);
                this.wolfLeg2.setRotationPoint(0.5F, 22.0F, 2.0F);
                this.wolfLeg2.rotateAngleX = ((float)Math.PI * 3F / 2F);
                this.wolfLeg3.rotateAngleX = 5.811947F;
                this.wolfLeg3.setRotationPoint(-2.49F, 17.0F, -4.0F);
                this.wolfLeg4.rotateAngleX = 5.811947F;
                this.wolfLeg4.setRotationPoint(0.51F, 17.0F, -4.0F);
            }
            else
            {
                this.wolfBody.setRotationPoint(0.0F, 14.0F, 2.0F);
                this.wolfBody.rotateAngleX = ((float)Math.PI / 2F);
                this.wolfMane.setRotationPoint(-1.0F, 14.0F, -3.0F);
                this.wolfMane.rotateAngleX = this.wolfBody.rotateAngleX;
                this.wolfTail.setRotationPoint(-1.0F, 12.0F, 8.0F);
                this.wolfLeg1.setRotationPoint(-2.5F, 16.0F, 7.0F);
                this.wolfLeg2.setRotationPoint(0.5F, 16.0F, 7.0F);
                this.wolfLeg3.setRotationPoint(-2.5F, 16.0F, -4.0F);
                this.wolfLeg4.setRotationPoint(0.5F, 16.0F, -4.0F);
                this.wolfLeg1.rotateAngleX = MathHelper.cos(p_78086_2_ * 0.6662F) * 1.4F * p_78086_3_;
                this.wolfLeg2.rotateAngleX = MathHelper.cos(p_78086_2_ * 0.6662F + (float)Math.PI) * 1.4F * p_78086_3_;
                this.wolfLeg3.rotateAngleX = MathHelper.cos(p_78086_2_ * 0.6662F + (float)Math.PI) * 1.4F * p_78086_3_;
                this.wolfLeg4.rotateAngleX = MathHelper.cos(p_78086_2_ * 0.6662F) * 1.4F * p_78086_3_;
            }
    
            this.wolfHeadMain.rotateAngleZ = entitywolf.getInterestedAngle(p_78086_4_) + entitywolf.getShakeAngle(p_78086_4_, 0.0F);
            this.wolfMane.rotateAngleZ = entitywolf.getShakeAngle(p_78086_4_, -0.08F);
            this.wolfBody.rotateAngleZ = entitywolf.getShakeAngle(p_78086_4_, -0.16F);
            this.wolfTail.rotateAngleZ = entitywolf.getShakeAngle(p_78086_4_, -0.2F);
        }
    
        /**
         * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms
         * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how
         * "far" arms and legs can swing at most.
         */
        public void setRotationAngles(float p_78087_1_, float p_78087_2_, float p_78087_3_, float p_78087_4_, float p_78087_5_, float p_78087_6_, Entity p_78087_7_)
        {
            super.setRotationAngles(p_78087_1_, p_78087_2_, p_78087_3_, p_78087_4_, p_78087_5_, p_78087_6_, p_78087_7_);
            this.wolfHeadMain.rotateAngleX = p_78087_5_ / (180F / (float)Math.PI);
            this.wolfHeadMain.rotateAngleY = p_78087_4_ / (180F / (float)Math.PI);
            this.wolfTail.rotateAngleX = p_78087_3_;
        }
    }