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

    Résolu Mob custom qui meurt en spawnant

    Anciennes versions
    1.6.x
    5
    16
    4512
    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.
    • A
      Aerath dernière édition par

      Bonjour, je suis en train d’apprendre le modding Forge et suis donc en train de créer un mod contenant un exemple de “tout” ce que l’on peut faire, avec des commentaires. Ayant déjà de bonnes bases en Java, il s’agit principalement de “vocabulaire”. Bref. 😛

      Mon problème est la création d’une entité (pour le moment) basique de type Biped. J’ai pour cela suivi divers tutos et la doc. Mon mob ne spawn pas naturellement, uniquement grâce a un œuf. Cependant, lorsque j’utilise ce dernier le mob apparaît déjà mort :s

      Au fait je suis en 1.6.4, Forge 9.11.1…964

      RESOLU : ne faites pas comme moi : écoutez elias54 !

      Voici ma classe :

      
      import net.minecraft.entity.EnumCreatureAttribute;
      import net.minecraft.entity.SharedMonsterAttributes;
      import net.minecraft.entity.ai.EntityAISwimming;
      import net.minecraft.entity.ai.EntityAIWander;
      import net.minecraft.entity.ai.EntityAIWatchClosest;
      import net.minecraft.entity.monster.EntityMob;
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.world.World;[/bt]
      
      public class CustomMob extends EntityMob
      {
         private double movementSpeed = 0.7D;
         private double knockbackResistance = 1.0D;
         private double attackDamage = 1.0D;
         private double maxHealth = 20.0D;
         public String  name = "Aerath44";
      
         public CustomMob(World world)
         {
             super(world);
      
             this.setSize(1.5F, 2.0F);
      
             this.getNavigator().setAvoidsWater(true);
      
             this.tasks.addTask(0, new EntityAISwimming(this));
             this.tasks.addTask(1, new EntityAIWander(this, 0.5D));
             this.tasks.addTask(2, new EntityAIWatchClosest(this, EntityPlayer.class, 150.0F));
         }
      
         @Override
         protected void applyEntityAttributes()
         {
             super.applyEntityAttributes();
      
             this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setAttribute(maxHealth);
             this.getEntityAttribute(SharedMonsterAttributes.knockbackResistance).setAttribute(knockbackResistance);
             this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setAttribute(movementSpeed);
         }
      
         public EnumCreatureAttribute getCreatureAttribute()
         {
             return EnumCreatureAttribute.UNDEFINED;
         }
      
         @Override
         protected boolean isValidLightLevel()
         {
             return true;
         }
      
         protected boolean isAIEnabled()
         {
             return true;
         }
      
         protected boolean canDespawn()
         {
             return true;
         }
      }
      
      

      Je suppose qu’il apparaît avec 0❤ mais normalement un mob sans vie disparaît simplement non :huh:
      En tout cas je l’avais constaté il y a quelques temps.

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

        dans ce ce bout de code ->

        
        this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setAttribute(maxHealt?h);
        this.getEntityAttribute(SharedMonsterAttributes.knockbackResistance).setAttribut?e(knockbackResistance);
        this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setAttribute(move?mentSpeed);
        
        

        teste “.setBaseValue” aulieux de “.setAttribute”

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

          Wow, quelle rapidité o_0
          Malheureusement, cette fonction n’existe pas pour moi. (Elle date de la 1.7 je crois)

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

            Déjà deux gros problèmes :

            
            private double movementSpeed = 0.7D;
            private double knockbackResistance = 1.0D;
            private double attackDamage = 1.0D;
            private double maxHealth = 20.0D;
            public String name = "Aerath44";
            
            

            et

            
            @Override
            protected void applyEntityAttributes()
            {
            super.applyEntityAttributes();
            
            this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setAttribute(maxHealth);
            this.getEntityAttribute(SharedMonsterAttributes.knockbackResistance).setAttribute(knockbackResistance);
            this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setAttribute(movementSpeed);
            }
            
            

            Quel intérêt de déclarer des fields alors que tu peux mettre directement la valeur ?

            Mon site | GitHub

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

              Je prépare d’autres mobs donc je vais ajouter deux constructeurs à cette classe qui permettront de faire :
              … = new CustomMob(world, 0.7D, 1.0D, 1.0D, 20.0D, “Aerath44”);
              ou
              … = new CustomMob(world, 0.7D, 1.0D, 1.0D, 20.0D);

              1 réponse Dernière réponse Répondre Citer 0
              • robin4002
                robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                ça ne serait pas ça :

                public EnumCreatureAttribute getCreatureAttribute()
                {
                return EnumCreatureAttribute.UNDEFINED;
                }
                

                Qui cause problème ?

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

                  Ah effectivement… Mais non. J’ai essayé d’enlever toute la fonction, ça n’a rien changé. J’ai changé à UNDEAD, rien non plus.
                  Comme il n’y a pas d’attribut autre que UNDEAD et ARTHROPOD, j’ai supposé qu’il fallait UNDEFINED pour avoir ni l’un ni l’autre.

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

                    PS : lorsque j’enlève la ligne ```java
                    this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setAttribute(maxHealt​h);

                    De plus si je quitte le monde avec ces mobs, puis que je remet cette ligne le problème revient mais les mobs existants restent.
                    1 réponse Dernière réponse Répondre Citer 0
                    • Zak
                      Zak dernière édition par

                      C’est bizarre… Fait des System.out.println(maxHealth); un peu partout. Si ton entité meurt en spawnant c’est que max Health est égal à 0. Comment tu as enregistré ton entité ?

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

                        @‘Aerath’:

                        Je prépare d’autres mobs donc je vais ajouter deux constructeurs à cette classe qui permettront de faire :
                        … = new CustomMob(world, 0.7D, 1.0D, 1.0D, 20.0D, “Aerath44”);
                        ou
                        … = new CustomMob(world, 0.7D, 1.0D, 1.0D, 20.0D);

                        Sauf que ce n’est pas possible.

                        Mon site | GitHub

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

                          Et pourquoi ? Bien entendu, je dois les enregistrer une par une mais à par ça je vois pas le problème.

                          Zak : depuis la fonction Init : j’appelle la fonction suivante placée dans mon proxy commun :

                          public void registerEntities()
                          {
                          EntityRegistry.registerGlobalEntityID(CustomMob.class, "template_Mob", EntityRegistry.findGlobalUniqueEntityId(), new Color(0, 255, 0).getRGB(), new Color(255, 0, 0).getRGB());
                          EntityRegistry.registerModEntity(CustomMob.class, "template_mob", 420, Sanctumine.instance, 40, 1, true);
                          }
                          

                          Quand à l’idée de logger la vie, ça n’as rien donné :
                          System.out.println(this.getMaxHealth() + “nom pour se repérer”);
                          me retourne 0.0 que ce soit dans le constructeur ou dans applyEntityAttributes().

                          1 réponse Dernière réponse Répondre Citer 0
                          • robin4002
                            robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                            Heu 420 ça m’a pas l’air bon, essaye avec une autre id plus faible ( < 255)

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

                              Les ID des mobs apparemment je viens de vérifier : pas de limite…
                              Mais en ce qui concerne tes fields dans ta classe, ils retournent bien 0.0D … le système d’Attributes de mojang ne semble pas aimer.

                              Mon site | GitHub

                              1 réponse Dernière réponse Répondre Citer 1
                              • A
                                Aerath dernière édition par

                                Elias pourrait-tu m’expliquer en quoi le fait d’utiliser des fields et/ou un constructeur comme je l’ai suggéré poserait problème ? J’ai dû passer à coté d’un truc important ^^’

                                1 réponse Dernière réponse Répondre Citer 0
                                • robin4002
                                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                                  Ah en effet, elias a raison. Tu pourra jamais faire ça :
                                  @‘Aerath’:

                                  Je prépare d’autres mobs donc je vais ajouter deux constructeurs à cette classe qui permettront de faire :
                                  … = new CustomMob(world, 0.7D, 1.0D, 1.0D, 20.0D, “Aerath44”);
                                  ou
                                  … = new CustomMob(world, 0.7D, 1.0D, 1.0D, 20.0D);

                                  Pour la simple est bonne raison que dans ton code, tu n’aura jamais à spécifier le constructeur du mob. Pour le faire spawner (que ce soit via un œuf ou le spawn naturel) minecraft utilise le constructeur qui contient juste word, donc tes variables n’auront pas la bonne valeur ce qui explique les problèmes rencontrés.

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

                                    Je vois… Dommage. Je teste ça dès que possible.


                                    Effectivement, l’utilisation de fields dans les fonctions .setAttribute() ne fonctionne pas… Comme ne cessait de me le répéter Elias >_<
                                    Merci pour votre patience à tous 🙂

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

                                    MINECRAFT FORGE FRANCE © 2018

                                    Powered by NodeBB