Questions à propos des mobs



  • Bonjour à tous,
    Comme dit dans le titre, j'ai quelques questions sur les mobs, en particulier les animaux.

    1. J'ai créé un mod qui rajoute des animaux. Ils peuvent donc avoir des bébés. Cependant, le bébé est de la même taille que les deux parents. J'aimerais donc savoir comment faire pour que celui-ci soit plus petit que ses deux parents et qu'il grandisse au bout de 5 minutes, comme pour les mobs de minecraft (vache, cochon…) mais j'aimerais aussi qu'il ait une tête proportionnelle à son corps (donc pas une grosse tête comme les animaux de minecraft 😉 )
    2. Toujours pour ces mêmes animaux j'aimerais leur ajouter des sons customs, mais quand j'utilise le code ci-dessous (trouvé dans la classe EntityCow), dans la classe de mon animal, avec, à la place de "mob.cow.say", ceci: "animalia:sounds/mob/redwolf_howl.wav" (mon MODID puis les différents fichiers), ça ne fonctionne pas, il ne font aucun bruit  😕  Même chose pour getHurtSound et getDeathSound
       protected String getLivingSound()
          {
              return "mob.cow.say";
          }
      
      Que faut-il faire pour que ces sons fonctionnent?
    3. J'ai aussi créé mes propres modèles sur techne mais je les ai fais trop grand et je ne veux pas recommencer car si je les fais plus petit, ce sera impossible de mettre des petits détails comme les oreilles ou les pattes. J'ai donc essayé de réduire leur taille dans techne mais quand je diminue le GIScale et que je réexporte le model du mob, celui-ci garde la même taille qu'auparavant. Donc est-il possible de réduire leur taille?

    Merci d'avance pour vos réponses


  • Moddeurs confirmés Rédacteurs Administrateurs

    Salut et bienvenue sur MFF.

    Pour la question 1+3, tu peux gérer le scale dans la fonction render du modèle.
    Voici le code de ModelQuadruped :

       public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale)
       {
           this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn);
    
           if (this.isChild)
           {
               float f = 2.0F;
               GlStateManager.pushMatrix();
               GlStateManager.translate(0.0F, this.childYOffset * scale, this.childZOffset * scale);
               this.head.render(scale);
               GlStateManager.popMatrix();
               GlStateManager.pushMatrix();
               GlStateManager.scale(1.0F / f, 1.0F / f, 1.0F / f);
               GlStateManager.translate(0.0F, 24.0F * scale, 0.0F);
               this.body.render(scale);
               this.leg1.render(scale);
               this.leg2.render(scale);
               this.leg3.render(scale);
               this.leg4.render(scale);
               GlStateManager.popMatrix();
           }
           else
           {
               this.head.render(scale);
               this.body.render(scale);
               this.leg1.render(scale);
               this.leg2.render(scale);
               this.leg3.render(scale);
               this.leg4.render(scale);
           }
       }
    

    Comme tu peux le voir il y a un cas spécifique si l'entité est un enfant (this.isChild). La tête est rendu de façon normal puis il y a un GlStateManager.scale(1.0F / f, 1.0F / f, 1.0F / f); (ou f vaut 2.0, donc ça revient à faire un scale de 0.5, soit deux fois plus petit).

    Pour la qestion 2, dans le return mets "modid:id du son".
    Ensuite dans le dossier src/main/resources -> assets/modid/ créé un nouveau fichier nommé "sounds.json".
    Dans ce dernier ajoutes :

    {
       "id du son": {
           "category": "neutral",
           "sounds": [
               {
                   "name": "modid:nom du son",
                   "stream": false
               }
           ]
       }
    }
    

    Ensuite dans le dossier src/main/resources -> assets/modid/sounds ajoute le nom fichier nom du son.ogg.



  • Ok Merci beaucoup!
    Je vais aller tester tout ça 😉



  • Merci ça marche nickel pour les sons et les bébés 😄

    Par contre pour ma question 3, j'ai essayé ça, en changeant la valeur de f:

    
            if (this.isChild)
           {
               float f = 2.0F;
               GL11.glPushMatrix();
               GL11.glScalef(1.0F / f, 1.0F / f, 1.0F / f);
               GL11.glTranslatef(0.0F, 24.0F * scale, 0.0F);
               this.head.render(scale);
               this.body.render(scale);
               this.leg1.render(scale);
               this.leg2.render(scale);
               this.leg3.render(scale);
               this.leg4.render(scale);
               GL11.glPopMatrix();
           }
           else
           {
               float f = 2.0F;
               GL11.glPushMatrix();
               GL11.glScalef(1.0F / f, 1.0F / f, 1.0F / f);
               GL11.glTranslatef(0.0F, 24.0F * scale, 0.0F);
               this.head.render(scale);
               this.body.render(scale);
               this.leg1.render(scale);
               this.leg2.render(scale);
               this.leg3.render(scale);
               this.leg4.render(scale);
               GL11.glPopMatrix();
           }
    

    Sauf que j'arrive à des trucs bizarres. Voici les différentes valeurs que j'ai testé

    • Parent f=2.0F et enfant f=2.0 > Tout marche nickel: ils sont tous les deux plus petit mais ils ont la même taille, ce qui ne m'arrange pas.
    • Parent f=1.5F et enfant f=2.0 > Le parent est sous le sol
    • Parent f=2.0F et enfant f=3.0 > L'enfant est dans les air

    J'ai aussi ce problème sur techne quand je change la deuxième variable de GIScale

    Par contre, changer la taille du bébé m'a permis de voir un autre problème, pas trop dérangeant en soi mais qui est un peu spécial. C'est le parent qui suit l'enfant et non l'inverse pourtant pour l'ia du mob j'ai utilisé ça:

    this.tasks.addTask(4, new EntityAIFollowParent(this, 1.1D));
    

    que j'ai copier-coller de l'ia du cochon, chez qui tout est normal. Comment le résoudre?


  • Moddeurs confirmés Rédacteurs Administrateurs

    Il faut que tu ajoutes la hauteur avec GL11.glTranslatef

    Pour l'ia je ne sais pas.



  • Ou déplace le scale après la translation, l'ordre peut beaucoup influer



  • Merci beaucoup! Ça fonctionne en rajoutant de la hauteur.
    J'ai encore deux petites questions:

    1. Pour ajouter un deuxième son custom, pour, par exemple, un autre animal, je dois créer un second fichier sounds.json?
    2. Est-il possible d'avoir plusieurs sons dans le getLivingSound qui seraient random? Comment faut-il faire?

  • Moddeurs confirmés Rédacteurs

    Pour le son random :

    
    protected String getLivingSound()
    {
    Random rand = new Random();
    int song = rand.nextInt(5);
    switch(int) {
    case 0:
    return ….;
    case 1:
    return ....;
    case ....
    default:
    return ...;
    }
    }
    
    


  • Tu peux aussi remplacer le ```java
    Random rand = new Random(); //Par :
    Random rand = worldObj.rand;


  • Moddeurs confirmés Rédacteurs Administrateurs

    Tous doit être mit dans le même fichier sounds.json.
    Il suffit de suivre la structure du json.

    {
    "id du son": {
    "category": "neutral",
    "sounds": [
    {
    "name": "modid:nom du son",
    "stream": false
    }
    ]
    },
    {
    "id d'un autre son": {
    "category": "neutral",
    "sounds": [
    {
    "name": "modid:nom de cette autre son",
    "stream": false
    }
    ]
    }
    }
    

    Pour le random, le système de son de minecaft peut directement le gérer.
    Regardes par exemple les sons de la vache (extrait du fichier sounds.json de minecraft) :

    "mob.cow.hurt": {
    "category": "neutral",
    "sounds": [
    "mob/cow/hurt1",
    "mob/cow/hurt2",
    "mob/cow/hurt3"
    ]
    },
    "mob.cow.say": {
    "category": "neutral",
    "sounds": [
    "mob/cow/say1",
    "mob/cow/say2",
    "mob/cow/say3",
    "mob/cow/say4"
    ]
    },
    "mob.cow.step": {
    "category": "neutral",
    "sounds": [
    "mob/cow/step1",
    "mob/cow/step2",
    "mob/cow/step3",
    "mob/cow/step4"
    ]
    },
    

    Il suffit d'indiquer plusieurs fichier ogg.



  • Merci à vous pour vos réponses 🙂


Log in to reply