• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Créer un mob qui saute

    Les entités
    1.7.2
    5
    15
    6435
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • Pchom
      Pchom dernière édition par 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 réponse Dernière réponse Répondre Citer 0
      • M
        MrAzErTy31 dernière édition par

        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 réponse Dernière réponse Répondre Citer 0
        • M
          MisterAlex95 dernière édition par

          Peut on utiliser un .obj ? Si oui comment ?

          1 réponse Dernière réponse Répondre Citer 0
          • Deleted
            Deleted dernière édition par

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

            1 réponse Dernière réponse Répondre Citer 0
            • M
              MisterAlex95 dernière édition par

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

              1 réponse Dernière réponse Répondre Citer 0
              • Deleted
                Deleted dernière édition par

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

                1 réponse Dernière réponse Répondre Citer 0
                • SCAREX
                  SCAREX dernière édition par

                  @‘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 réponse Dernière réponse Répondre Citer 0
                  • M
                    MisterAlex95 dernière édition par

                    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 réponse Dernière réponse Répondre Citer 0
                    • Deleted
                      Deleted dernière édition par

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

                      1 réponse Dernière réponse Répondre Citer 0
                      • M
                        MisterAlex95 dernière édition par

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

                        1 réponse Dernière réponse Répondre Citer 0
                        • Deleted
                          Deleted dernière édition par

                          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 réponse Dernière réponse Répondre Citer 0
                          • M
                            MisterAlex95 dernière édition par

                            @‘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 réponse Dernière réponse Répondre Citer 0
                            • Deleted
                              Deleted dernière édition par

                              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 réponse Dernière réponse Répondre Citer 0
                              • M
                                MisterAlex95 dernière édition par

                                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 réponse Dernière réponse Répondre Citer 0
                                • Deleted
                                  Deleted dernière édition par

                                  Les fichiers json

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • Référencé par  robin4002 robin4002 
                                  • Référencé par  robin4002 robin4002 
                                  • Référencé par  robin4002 robin4002 
                                  • 1 / 1
                                  • Premier message
                                    Dernier message
                                  Design by Woryk
                                  Contact / Mentions Légales

                                  MINECRAFT FORGE FRANCE © 2018

                                  Powered by NodeBB