MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    [SEMI TUTO] Création de mon mob hostile: spawn, attaque etc.

    Planifier Épinglé Verrouillé Déplacé Résolu 1.8.x
    1.8.8
    110 Messages 9 Publieurs 20.9k Vues 1 Watching
    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.
    • DeletedD Hors-ligne
      Deleted
      dernière édition par

      Est-ce que avec ça dans sa classe, il spawn le jour ?

      
      @Override
         public boolean getCanSpawnHere()
         {
             int i = MathHelper.floor_double(posX);
             int j = MathHelper.floor_double(this.getEntityBoundingBox().minY);
             int k = MathHelper.floor_double(posZ);
             int l = worldObj.getLight(new BlockPos(i, j, k));
             return worldObj.getCollidingBoundingBoxes(this, getEntityBoundingBox()).size() == 0 && worldObj.checkNoEntityCollision(this.getEntityBoundingBox()) && worldObj.canSeeSky(new BlockPos(i, j, k)) && rand.nextInt(5) == 0 && l > 10;
         }
      
      
      1 réponse Dernière réponse Répondre Citer 1
      • conquerorguepardC Hors-ligne
        conquerorguepard
        dernière édition par

        Pour le fichier son:
        C’est bon?

        Et en tant que “CREATURE”, mon mob spawn déjà de jour :). Il faut juste qu’il puisse sauter et qu’il ose s’éloigner à plus de 10 blocs de son spawn d’apparition.

        package Handlers;
        
        import java.util.Random;
        
        import fr.minecraftforgefrance.modzoic.common.Modzoic;
        import net.minecraft.entity.EntityList;
        import net.minecraft.entity.EnumCreatureType;
        import net.minecraft.world.biome.BiomeGenBase;
        import net.minecraftforge.fml.common.registry.EntityRegistry;
        
        public class EntityHandler
        {
            public static void RegisterMonster(Class entityClass, String name)
            {
                int entityID = EntityRegistry.findGlobalUniqueEntityId();
                long x = name.hashCode();
                Random random = new Random(x);
                int mainColor = random.nextInt() * 16777215;
                int subColor = random.nextInt() * 16777215;
        
                EntityRegistry.registerGlobalEntityID(entityClass, name, entityID);
                EntityRegistry.addSpawn(entityClass, 70, 1, 3, EnumCreatureType.CREATURE, BiomeGenBase.forest, BiomeGenBase.beach, BiomeGenBase.birchForest, BiomeGenBase.birchForestHills ,BiomeGenBase.coldBeach ,BiomeGenBase.coldTaiga ,BiomeGenBase.coldTaigaHills ,BiomeGenBase.desert ,BiomeGenBase.desertHills ,BiomeGenBase.extremeHills ,BiomeGenBase.forestHills ,BiomeGenBase.frozenRiver ,BiomeGenBase.iceMountains ,BiomeGenBase.icePlains ,BiomeGenBase.jungle ,BiomeGenBase.jungleEdge ,BiomeGenBase.jungleHills ,BiomeGenBase.megaTaiga ,BiomeGenBase.megaTaigaHills ,BiomeGenBase.mesa ,BiomeGenBase.mesaPlateau ,BiomeGenBase.mesaPlateau_F ,BiomeGenBase.plains ,BiomeGenBase.roofedForest ,BiomeGenBase.savanna ,BiomeGenBase.savannaPlateau ,BiomeGenBase.taigaHills ,BiomeGenBase.taiga ,BiomeGenBase.stoneBeach);
                EntityRegistry.registerModEntity(entityClass, name, entityID, Modzoic.instance, 64, 1, true);
                EntityList.entityEggs.put(Integer.valueOf(entityID), new EntityList.EntityEggInfo(entityID, mainColor, subColor));
            }
        }
        
        1 réponse Dernière réponse Répondre Citer 0
        • DeletedD Hors-ligne
          Deleted
          dernière édition par

          Ouais mais toi tu veux qu’il spawn de jour comme de nuit, nan ?
          Dans ce cas faudrait en fait complétement revoir la fonction getCanSpawn()

          Et au fait pourquoi lui rajoute-tu des IA ? Sais-tu au moins à quoi elles te servent ? Car clairement ton mob n’a pas du tout besoin d’IA…

          Y’a des chances que ça soit ça qui l’empêchent de sauter et de s’éloigner 😃

          1 réponse Dernière réponse Répondre Citer 0
          • conquerorguepardC Hors-ligne
            conquerorguepard
            dernière édition par

            package Entity;
            
            import fr.minecraftforgefrance.modzoic.common.Modzoic;
            import net.minecraft.entity.SharedMonsterAttributes;
            import net.minecraft.entity.ai.EntityAIAttackOnCollide;
            import net.minecraft.entity.ai.EntityAIHurtByTarget;
            import net.minecraft.entity.ai.EntityAILookIdle;
            import net.minecraft.entity.ai.EntityAIMoveThroughVillage;
            import net.minecraft.entity.ai.EntityAIMoveTowardsRestriction;
            import net.minecraft.entity.ai.EntityAINearestAttackableTarget;
            import net.minecraft.entity.ai.EntityAISwimming;
            import net.minecraft.entity.ai.EntityAIWander;
            import net.minecraft.entity.ai.EntityAIWatchClosest;
            import net.minecraft.entity.monster.EntityIronGolem;
            import net.minecraft.entity.monster.EntityMob;
            import net.minecraft.entity.monster.EntityPigZombie;
            import net.minecraft.entity.passive.EntityChicken;
            import net.minecraft.entity.passive.EntityCow;
            import net.minecraft.entity.passive.EntityHorse;
            import net.minecraft.entity.passive.EntityOcelot;
            import net.minecraft.entity.passive.EntityPig;
            import net.minecraft.entity.passive.EntityRabbit;
            import net.minecraft.entity.passive.EntityVillager;
            import net.minecraft.entity.player.EntityPlayer;
            import net.minecraft.pathfinding.PathNavigateGround;
            import net.minecraft.util.BlockPos;
            import net.minecraft.util.MathHelper;
            import net.minecraft.world.World;
            
            public class Entityclass extends EntityMob
            {
                public Entityclass(World world)
                {
                    super(world);
                    ((PathNavigateGround)this.getNavigator()).setBreakDoors(true);
                    this.tasks.addTask(0, new EntityAISwimming(this));
                    this.tasks.addTask(2, new EntityAIAttackOnCollide(this, EntityPlayer.class, 1.0D, false));
                    this.tasks.addTask(5, new EntityAIMoveTowardsRestriction(this, 1.0D));
                    this.tasks.addTask(7, new EntityAIWander(this, 1.0D));
                    this.tasks.addTask(8, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F));
                    this.tasks.addTask(8, new EntityAILookIdle(this));
                    this.setSize(2, 3);
            
                }
            
                public void applyEntityAttributes()
                {
                    super.applyEntityAttributes();
                    this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(62D);
                    this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(9D);
                    this.getEntityAttribute(SharedMonsterAttributes.knockbackResistance).setBaseValue(2D);
                    this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.36D);
                    this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(120D);
                }
            
                public void dropFewItems(boolean b, int looting)
                {
                    this.dropItem(Modzoic.meatEpanterias, 6);
                }
            
                protected String getLivingSound()
                {
                    return "modzoic" + ":carnotausaurus_living";
                }
            
                @Override
                public boolean canDespawn()
                {
                return false;
                }
            
                @Override
                public boolean getCanSpawnHere()
                {
                    int i = MathHelper.floor_double(posX);
                    int j = MathHelper.floor_double(this.getEntityBoundingBox().minY);
                    int k = MathHelper.floor_double(posZ);
                    int l = worldObj.getLight(new BlockPos(i, j, k));
                    return worldObj.getCollidingBoundingBoxes(this, getEntityBoundingBox()).size() == 0 && worldObj.checkNoEntityCollision(this.getEntityBoundingBox()) && worldObj.canSeeSky(new BlockPos(i, j, k)) && rand.nextInt(5) == 0 && l > 10;
                }
            }
            

            Et je l’ai mis en monster.

            Résultat : Je n’ai aucun son, je ne sais pas s’il saute les blocs, vu qu’il ne bouge pas, et il ne m’attaque pas. Je sais qu’il spawn de jour, pour la nuit aussi. Mais du coup il ne m’attaque plus, comme la dernière fois… Je suis pas sûr mais je crois que l’AI en 1.8 est vitale pour le mob… Et j’ai aussi un mal fou à les frapper, comme si il n’y avait plus vraiment de boite de collision.
            Sinon j’ai une grosse chute de fps

            1 réponse Dernière réponse Répondre Citer 0
            • Superloup10S Hors-ligne
              Superloup10 Modérateurs
              dernière édition par

              Pour ton fichier sounds.json, voici la bonne version http://pastebin.com/rjPUGLyn

              Du coup ta méthode devrait ressembler à ça :

              
              protected String getLivingSound()
              {
              return "modzoic" + ":mob.nanuqsaurus.living";
              }
              

              Si vous souhaitez me faire un don, il vous suffit de cliquer sur le bouton situé en dessous.

              Je suis un membre apprécié et joueur, j'ai déjà obtenu 17 points de réputation.

              1 réponse Dernière réponse Répondre Citer 1
              • conquerorguepardC Hors-ligne
                conquerorguepard
                dernière édition par

                Comme ça?
                {
                “mob.nanuqsaurus.living”: { nanuqsaurus
                “category”: “hostile”,
                “sounds”: [
                “dinosaurs/Nanuqsaurus/carnotaurus_living_1” “:sounds/dinosaurs/Nanuqsaurus/carnotaurus_living_1.ogg”
                ]
                }
                }
                Et pour les autres problèmes, tu sais?

                1 réponse Dernière réponse Répondre Citer 0
                • isadorI Hors-ligne
                  isador Moddeurs confirmés Modérateurs
                  dernière édition par

                  Les commentaires sur le pastebin de Superloup servait juste d’indication pas besoin de les remplacer par des valeurs, de plus tu ne lit pas ce qu’il ta dit:
                  “voici la bonne version”

                  Il faudrait peut-être revoir ta façon de chercher des informations/solutions, car dans les code fournis par forge et sur minecraftforge.net/google tu trouve un paquet de fois des exemple pour les json relatif au sons.

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

                    Ouais et puis je t’ai tout dit aussi –’
                    Tout ce que t’avais fait avant, c’était bon. T’avais juste à corriger 1 seule erreur (la virgule). Après FAIS des tests pour voir ce qui va et ce qui ne va pas. Faut pas attendre qu’on te dise “Oui c’est bon” ou alors “Non regarde des exemples, t’as oublié telle chose”…

                    1 réponse Dernière réponse Répondre Citer 0
                    • conquerorguepardC Hors-ligne
                      conquerorguepard
                      dernière édition par

                      D’accord, merci! Et pour le reste?

                      1 réponse Dernière réponse Répondre Citer 0
                      • Superloup10S Hors-ligne
                        Superloup10 Modérateurs
                        dernière édition par

                        Je suis aller regarder le code des entités vanilla et je peut t’assurer que ton entitée saute déjà. Car le saut est défini dans EntityLiving.class et ton mob est une class qui hérite de EntityMob qui hérite de EntityCreature qui hérite de EntityLiving.

                        Si vous souhaitez me faire un don, il vous suffit de cliquer sur le bouton situé en dessous.

                        Je suis un membre apprécié et joueur, j'ai déjà obtenu 17 points de réputation.

                        1 réponse Dernière réponse Répondre Citer 0
                        • conquerorguepardC Hors-ligne
                          conquerorguepard
                          dernière édition par

                          Le son marche ^^. Le saut semble marcher :). Mais il n’attaque pas. Vous êtes sûrs qu’il ne faut pas rajouter d’AI?

                          1 réponse Dernière réponse Répondre Citer 0
                          • AymericRedA Hors-ligne
                            AymericRed
                            dernière édition par

                            Si il te manque au moins une AI (nearest attackable target).

                            Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                            AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                            Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                            Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                            1 réponse Dernière réponse Répondre Citer 0
                            • conquerorguepardC Hors-ligne
                              conquerorguepard
                              dernière édition par

                              C’est à dire? Je la mets en forme comment? Je dois refaire la partie AI (que tout le monde me déconseille de faire)? Ou autrement?
                              Une fois que je saurais ce sera bon et assimilé :). Faut juste que je vois l’exemple :/.
                              Et cela va lui faire attaquer tous les mobs non hostiles?

                              PS: C’est la dernière chose qui manque pour que le mob soit près :D!

                              1 réponse Dernière réponse Répondre Citer 0
                              • AymericRedA Hors-ligne
                                AymericRed
                                dernière édition par

                                Il faut que tu reprennes la fonction applyEntityAi() que tu avais (elle est dans le code du Zombie), c’est elle qui s’occupe de ça, ajouté son appel à la fin de ton constructeur et pour mettre que ça attaque tous les mobs, change EntityPlayer.class par EntityCreature.class.

                                Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                                AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                                Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                                Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                                1 réponse Dernière réponse Répondre Citer 0
                                • conquerorguepardC Hors-ligne
                                  conquerorguepard
                                  dernière édition par

                                  package Entity;
                                  
                                  import fr.minecraftforgefrance.modzoic.common.Modzoic;
                                  import net.minecraft.entity.EntityCreature;
                                  import net.minecraft.entity.SharedMonsterAttributes;
                                  import net.minecraft.entity.ai.EntityAIAttackOnCollide;
                                  import net.minecraft.entity.ai.EntityAIHurtByTarget;
                                  import net.minecraft.entity.ai.EntityAILookIdle;
                                  import net.minecraft.entity.ai.EntityAIMoveThroughVillage;
                                  import net.minecraft.entity.ai.EntityAIMoveTowardsRestriction;
                                  import net.minecraft.entity.ai.EntityAINearestAttackableTarget;
                                  import net.minecraft.entity.ai.EntityAISwimming;
                                  import net.minecraft.entity.ai.EntityAIWander;
                                  import net.minecraft.entity.ai.EntityAIWatchClosest;
                                  import net.minecraft.entity.monster.EntityIronGolem;
                                  import net.minecraft.entity.monster.EntityMob;
                                  import net.minecraft.entity.monster.EntityPigZombie;
                                  import net.minecraft.entity.passive.EntityChicken;
                                  import net.minecraft.entity.passive.EntityCow;
                                  import net.minecraft.entity.passive.EntityHorse;
                                  import net.minecraft.entity.passive.EntityOcelot;
                                  import net.minecraft.entity.passive.EntityPig;
                                  import net.minecraft.entity.passive.EntityRabbit;
                                  import net.minecraft.entity.passive.EntityVillager;
                                  import net.minecraft.entity.player.EntityPlayer;
                                  import net.minecraft.pathfinding.PathNavigateGround;
                                  import net.minecraft.util.BlockPos;
                                  import net.minecraft.util.MathHelper;
                                  import net.minecraft.world.World;
                                  
                                  public class Entityclass extends EntityMob
                                  {
                                      public Entityclass(World world)
                                      {
                                          super(world);
                                          ((PathNavigateGround)this.getNavigator()).setBreakDoors(true);
                                          this.tasks.addTask(0, new EntityAISwimming(this));
                                          this.tasks.addTask(2, new EntityAIAttackOnCollide(this, EntityPlayer.class, 1.0D, false));
                                          this.tasks.addTask(5, new EntityAIMoveTowardsRestriction(this, 1.0D));
                                          this.tasks.addTask(7, new EntityAIWander(this, 1.0D));
                                          this.tasks.addTask(8, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F));
                                          this.tasks.addTask(8, new EntityAILookIdle(this));
                                          this.setSize(2, 3);
                                          this.applyEntityAI();
                                  
                                      }
                                  
                                      public void applyEntityAttributes()
                                      {
                                          super.applyEntityAttributes();
                                          this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(62D);
                                          this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(9D);
                                          this.getEntityAttribute(SharedMonsterAttributes.knockbackResistance).setBaseValue(2D);
                                          this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.36D);
                                          this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(120D);
                                      }
                                  
                                      protected void applyEntityAI()
                                      {
                                          this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityCreature.class, true));
                                      }
                                  
                                      public void dropFewItems(boolean b, int looting)
                                      {
                                          this.dropItem(Modzoic.meatEpanterias, 6);
                                      }
                                  
                                      protected String getLivingSound()
                                      {
                                          return "modzoic" + ":mob.nanuqsaurus.living";
                                      }
                                  
                                      @Override
                                      public boolean canDespawn()
                                      {
                                      return false;
                                      }
                                  
                                      @Override
                                      public boolean getCanSpawnHere()
                                      {
                                          int i = MathHelper.floor_double(posX);
                                          int j = MathHelper.floor_double(this.getEntityBoundingBox().minY);
                                          int k = MathHelper.floor_double(posZ);
                                          int l = worldObj.getLight(new BlockPos(i, j, k));
                                          return worldObj.getCollidingBoundingBoxes(this, getEntityBoundingBox()).size() == 0 && worldObj.checkNoEntityCollision(this.getEntityBoundingBox()) && worldObj.canSeeSky(new BlockPos(i, j, k)) && rand.nextInt(5) == 0 && l > 10;
                                      }
                                  }
                                  

                                  Il n’attaque toujours personne, même pas moi 😕

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

                                    Et si tu retires toutes les IA, toutes les lignes commençant par targetTasks ou tasks…Quel résultat obtiens-tu ? Ton mob t’attaque-t-il ?

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • AymericRedA Hors-ligne
                                      AymericRed
                                      dernière édition par

                                      @Plaigon, il ne va pas bouger sans AI. (Et les super classes ne servent qu’à gérer les réglés de spawn des mobs). Essaye plutôt avec EntityPlayer.class. Et tu pourras dire à quoi correspond le true (ai pas le code en face(.

                                      Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                                      AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                                      Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                                      Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • conquerorguepardC Hors-ligne
                                        conquerorguepard
                                        dernière édition par

                                        Cela ne changera rien c’était justement comme ça avant.
                                        Vous n’avez pas de mob hostile 1.8 vous?

                                        1 réponse Dernière réponse Répondre Citer 0
                                        • AymericRedA Hors-ligne
                                          AymericRed
                                          dernière édition par

                                          Si j’ai un mob qui marche très bien (en 1.8 du moins).
                                          Et c’est bizarre que ça ne marche pas. Essaye de voir si il te prend comme cible (donc pb de déplacement) ou pas, ajoutes ça dans ton code :

                                              @Override
                                              public void onUpdate()
                                              {
                                                  super.onUpdate(); //On laisse la fonction de EntityMob s'exécuter
                                                  System.out.println("Cible : " + this.getAttackTarget()); //On print la cible
                                              }
                                          

                                          Si ça met null, c’est que ça marche pas, sinon c’est qu’il arrive à te choisir comme cible.

                                          PS : ça va te l’afficher 20 fois par seconde tant que le mob est en vie alors le test pas pendant des heures ^^

                                          Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                                          AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                                          Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                                          Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                                          1 réponse Dernière réponse Répondre Citer 0
                                          • isadorI Hors-ligne
                                            isador Moddeurs confirmés Modérateurs
                                            dernière édition par

                                            Petite question conne, mais quand tu teste tu es en creatif? si oui normal, les mob ne target pas les joueurs en créatif

                                            1 réponse Dernière réponse Répondre Citer 0
                                            • 1
                                            • 2
                                            • 3
                                            • 4
                                            • 5
                                            • 6
                                            • 2 / 6
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            ContactMentions Légales

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB