• Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Créer un mob qui saute

    Les entités
    1.7.2
    5
    15
    5710
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Pchom
      Pchom last edited by robin4002

      Sommaire

      • Introduction
      • Pré-requis
      • Code
        • EntityJoomda
        • ModelJoomda
        • RenderJoomda
      • Résultat
      • Crédits

      Introduction

      Aujourd’hui nous allons apprendre à créer un mob qui ne se déplace pas normalement.
      Ce mob sautera pour se déplacer.

      Pré-requis

      • Créer un mob basique

      Code

      Déjà, vous devez déclarer votre mob dans la classe principale, rien n’a changé.
      Je vous laisse donc déclarer une nouvelle entité que nous nommerons Joomda.

      Créez donc une classe EntityJoomda qui hérite de la classe EntityAmbientCreature (net.minecraft.entity.passive.EntityAmbientCreature), nous allons principalement travailler dans celle-ci.

      EntityJoomda :

      Le constructeur ne change pas :

      public class EntityJoomda extends EntityAmbientCreature {
      
          public EntityJoomda(World par1World) {
              super(par1World);
          }
      }
      

      Votre entité peut désormais être utilisée, mais elle sera une entité de base, sans aucun modèle ni rien.

      Ajoutez la méthode onUpdate() :

          public void onUpdate() {
              super.onUpdate();
      
              if (this.worldObj.getTotalWorldTime() % 80 == 0) {
                  if (this.onGround) {
                      this.jump();
                  }
              }
          }
      

      Je vais tout expliquer petit à petit.

      public void onUpdate() {
      

      Tout le monde doit comprendre cette ligne je pense.

      super.onUpdate();
      

      Cette ligne est essentielle si vous souhaitez que votre mob marche normalement. Vous pouvez faire CTRL + Clic gauche pour voir la méthode onUpdate() de EntityAmbientCreature.

      if (this.worldObj.getTotalWorldTime() % 80 == 0) {
      

      Cette condition n’est vraie que lorsque le nombre de ticks du monde actuel divisé par 80 n’a aucun reste (le modulo, que vous devez connaître). Cette condition n’est vraie qu’une fois toutes les 4 secondes (1 seconde = 20 ticks), vous pouvez donc changer cette valeur si vous souhaitez que le mob saute plus ou moins souvent.

                  if (this.onGround) {
                      this.jump();
      

      Si le mob est au sol, on appelle la méthode qui le fera sauter. Cette condition est obligatoire car si le mob est en l’air il va sauter, ce qui fait quelque chose qui n’est absolument pas réaliste. Si vous tapez ce mob juste avant qu’il saute il n’y aura aucun problème avec cette condition. Vous pouvez très bien l’enlever et tester, mais le résultat sera moche.

      Normalement votre mob est utilisable, mais il ne sautera que de façon verticale, il ne bougera pas. Vous pouvez parer ce problème avec cette méthode :

          protected void jump()
          {
              this.motionY = 0.41999998688697815D;
      
              if (this.isPotionActive(Potion.jump))
              {
                  this.motionY += (double)((float)(this.getActivePotionEffect(Potion.jump).getAmplifier() + 1) * 0.1F);
              }
      
              float f = this.rotationYaw * 0.017453292F;
              this.motionX -= (double)(MathHelper.sin(f) * 0.5F);
              this.motionZ += (double)(MathHelper.cos(f) * 0.5F);
      
              this.isAirBorne = true;
              ForgeHooks.onLivingJump(this);
          }
      

      Expliquons cette méthode également ligne par ligne :

      this.motionY = 0.41999998688697815D;
      

      Cet élément permettra de choisir la hauteur de saut, une valeur trop grande fera sauter le mob trop haut et il despawnera. Une valeur élevée peut aussi infliger de grands dégâts au mob lorsqu’il sautera. Je vous conseille donc de ne pas toucher à cette valeur.

              if (this.isPotionActive(Potion.jump))
              {
                  this.motionY += (double)((float)(this.getActivePotionEffect(Potion.jump).getAmplifier() + 1) * 0.1F);
              }
      

      Cette condition permet d’augmenter la hauteur de saut si le mob a l’effet Jump actif. Cette condition est la condition de la fonction Jump de Minecraft de base.

              float f = this.rotationYaw * 0.017453292F;
              this.motionX -= (double)(MathHelper.sin(f) * 0.5F);
              this.motionZ += (double)(MathHelper.cos(f) * 0.5F);
      
              this.isAirBorne = true;
              ForgeHooks.onLivingJump(this);
      

      Le float f est intégré à la méthode de base mais je ne sais pas à quoi il sert, si vous savez son utilité, merci de me prévenir en réponse ^^
      motionX et motionZ permettent respectivement de modifier le déplacement en X et en Z lors du saut.
      this.isAirBorne = true permet de signaler à Minecraft que le mob est en train de voler.
      La dernière ligne permet de faire sauter le mob.

      ModelJoomda :

      Ce model est mon œuvre, si vous souhaitez l’utiliser merci de me citer.

      import net.minecraft.client.model.ModelBase;
      import net.minecraft.client.model.ModelRenderer;
      import net.minecraft.entity.Entity;
      
      public class ModelJoomda extends ModelBase
      {
          //fields
          ModelRenderer Base;
          ModelRenderer Foot;
          ModelRenderer Head;
      
          public ModelJoomda()
          {
              textureWidth = 32;
              textureHeight = 32;
      
              Base = new ModelRenderer(this, 0, 0);
              Base.addBox(-2.533333F, 0F, -2.466667F, 5, 1, 5);
              Base.setRotationPoint(0F, 23F, 0F);
              Base.setTextureSize(32, 32);
              Base.mirror = true;
              setRotation(Base, 0F, 0F, 0F);
              Foot = new ModelRenderer(this, 0, 6);
              Foot.addBox(-1.5F, 0F, -1.533333F, 3, 16, 3);
              Foot.setRotationPoint(0F, 8F, 0F);
              Foot.setTextureSize(32, 32);
              Foot.mirror = true;
              setRotation(Foot, 0F, 0F, 0F);
              Head = new ModelRenderer(this, 12, 6);
              Head.addBox(-0.5F, -8F, -3.5F, 1, 8, 7);
              Head.setRotationPoint(0F, 8F, 0F);
              Head.setTextureSize(32, 32);
              Head.mirror = true;
              setRotation(Head, 0F, 4.8F, 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);
              Base.render(f5);
              Foot.render(f5);
              Head.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);
          }
      
      }
      

      Je n’expliquerai pas le code, c’est un code généré par Techne que j’ai modifié pour qu’il fonctionne.

      RenderJoomda :

      import fr.minecraftforgefrance.modtutoriel.ModTutoriel;
      import net.minecraft.client.model.ModelBase;
      import net.minecraft.client.renderer.entity.RenderLiving;
      import net.minecraft.entity.Entity;
      import net.minecraft.util.ResourceLocation;
      
      public class RenderJoomda extends RenderLiving {
      
          public RenderJoomda(ModelBase par1ModelBase, float par2) {
              super(par1ModelBase, par2);
          }
      
          @Override
          protected ResourceLocation getEntityTexture(Entity var1) {
              return new ResourceLocation("modtutoriel", "textures/entity/joomda.png");
          }
      }
      

      Je vais juste expliquer cette fonction :

          @Override
          protected ResourceLocation getEntityTexture(Entity var1) {
              return new ResourceLocation("modtutoriel", "textures/entity/joomda.png");
          }
      

      Les première et deuxième ligne n’ont pas besoin d’explication.
      Le premier argument de la 3e ligne est le modid, que vous devez remplacer selon votre modid. Ensuite le deuxième argument signifie le chemin d’accès de la texture du model à partir du dossier assets/votremodid.

      Vous pouvez télécharger la texture ici.

      Vous devez ensuite enregistrer votre model dans la classe ClientProxy.

      Résultat

      Crédits

      Rédaction :

      • @Pchom

      Correction :

      • @Pchom

      Creative Commons
      Ce tutoriel de Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International

      retourRetour vers le sommaire des tutoriels

      > *Si vous ne pouvez expliquer un concept à un enfant de six ans, c’est que vous ne le comprenez pas c…

      1 Reply Last reply Reply Quote 0
      • M
        MrAzErTy31 last edited by

        Tutoriel très intéressant qui m’est passé inaperçu (désolé du up) ^^ Merci @Pchom ! 🙂

        Mes mods :

        >! GGButtonMod : http://minecraftforgefrance.fr/showthread.php?tid=1280
        CraftYourMenu : http://minecraftforgefrance.fr/showth…

        1 Reply Last reply Reply Quote 0
        • M
          MisterAlex95 last edited by

          Peut on utiliser un .obj ? Si oui comment ?

          1 Reply Last reply Reply Quote 0
          • Deleted
            Deleted last edited by

            https://www.minecraftforgefrance.fr/showthread.php?tid=584

            1 Reply Last reply Reply Quote 0
            • M
              MisterAlex95 last edited by

              Merci beaucoup 🙂
              edit: Il semblerai que cet lib soit outdated … 😕 Y a t il autre chose ?

              1 Reply Last reply Reply Quote 0
              • Deleted
                Deleted last edited by

                Tu peux sinon lire ce poste où l’auteur utilise uniquement forge et pas glutils : https://www.minecraftforgefrance.fr/showthread.php?tid=560

                1 Reply Last reply Reply Quote 0
                • SCAREX
                  SCAREX last edited by

                  @‘MisterAlex95’:

                  Merci beaucoup 🙂
                  edit: Il semblerai que cet lib soit outdated … 😕 Y a t il autre chose ?

                  Si tu utilises une version supérieure à la 1.7 tu dois pouvoir utiliser des .obj nativement sinon il y a plein de librairies sur internet

                  Site web contenant mes scripts : http://SCAREXgaming.github.io

                  Pas de demandes de support par MP ni par skype SVP.
                  Je n'accepte sur skype que l…

                  1 Reply Last reply Reply Quote 0
                  • M
                    MisterAlex95 last edited by

                    En fait je me suis mal exprimé. Je cherche a modifier un model de mob grace a un .obj.
                    Je trouve ça nul part, est ce que c’est possible ?

                    1 Reply Last reply Reply Quote 0
                    • Deleted
                      Deleted last edited by

                      Remplacer le model d’un mob déjà existant par un .obj, c’est bien cela ?

                      1 Reply Last reply Reply Quote 0
                      • M
                        MisterAlex95 last edited by

                        Non plutot créer un nouveau mob et utiliser un .obj comme model
                        Impossible de trouver comment faire 😕

                        1 Reply Last reply Reply Quote 0
                        • Deleted
                          Deleted last edited by

                          Heureusement que j’ai voulu, y’a pas mal de temps, faire la même chose que toi 🙂
                          https://www.minecraftforgefrance.fr/archive/index.php?thread-2985.html

                          1 Reply Last reply Reply Quote 0
                          • M
                            MisterAlex95 last edited by

                            @‘Plaigon’:

                            Heureusement que j’ai voulu, y’a pas mal de temps, faire la même chose que toi 🙂
                            https://www.minecraftforgefrance.fr/archive/index.php?thread-2985.html

                            il y a t il un moyen de te contacter plus facilement ? 🙂

                            1 Reply Last reply Reply Quote 0
                            • Deleted
                              Deleted last edited by

                              Non, le but d’un forum est d’utiliser les postes afin de résoudre les problèmes. Si on finit par résoudre le problème sur skype/discord/ts sans laisser de traces aux futurs membres en difficultes, cela n’aura servi à rien…

                              De plus, je vois difficilement comme t’aider davantage vu le lien que je t’ai déniché: tout le code est déjà servi, t’as plus qu’à faire un copier coller ^^’

                              1 Reply Last reply Reply Quote 0
                              • M
                                MisterAlex95 last edited by

                                D’accord, merci en tout cas 🙂
                                Il semblerai qu’en 1.10.2 il n’y ai plus IModelCustom ainsi que [color=#000000AdvancedModelLoader… qu’est ce qui les remplace actuellement ? ]

                                1 Reply Last reply Reply Quote 0
                                • Deleted
                                  Deleted last edited by

                                  Les fichiers json

                                  1 Reply Last reply Reply Quote 0
                                  • Referenced by  robin4002 robin4002 
                                  • Referenced by  robin4002 robin4002 
                                  • Referenced by  robin4002 robin4002 
                                  • 1 / 1
                                  • First post
                                    Last post
                                  Design by Woryk
                                  Contact / Mentions Légales

                                  MINECRAFT FORGE FRANCE © 2018

                                  Powered by NodeBB