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

    [1.4.7] Spawn de mob dans une structure & NPE MinecraftServer playerEntityList

    Sans suite
    2
    7
    1406
    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.
    • Deleted
      Deleted dernière édition par

      Bonsoir à tous
      Vieille version, je sais 🙂 mais à mon avis le code est sensiblement le même que dans la 1.7x
      Alors j’ai 2 problèmes :
      1)J’ai ce code :

      
      public class ShrineWorldGen implements IWorldGenerator
      {
      public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider)
      {
      switch (world.provider.dimensionId)
      {
      case -1:
      generateNether(world, random, chunkX * 16, chunkZ * 16);
      case 0:
      generateSurface(world, random, chunkX * 16, chunkZ * 16);
      }
      }
      
      private void generateSurface(World world, Random random, int blockX, int blockZ)
      {
      for (int i = 0; i < 25; i++)
      {
      int Xcoord = blockX + random.nextInt(16);
      int Ycoord = random.nextInt(60);
      int Zcoord = blockZ + random.nextInt(16);
      new SlenderShrine().generate(world, random, Xcoord, Ycoord, Zcoord);
      for(int a = 0; i < 10; i++)
      {
      EntityBlaze blaze= new EntityBlaze(world);
      blaze.texture = "/slendyBlaze.png";
      blaze.setLocationAndAngles(Xcoord, Ycoord + 2D, Zcoord, 0F, 0F);
      //blaze.persistenceRequired = true;
      world.spawnEntityInWorld(blaze);
      }
      }
      }
      
      private void generateNether(World world, Random random, int blockX, int blockZ)
      {
      }
      }
      
      

      Avec lequel j’essaie de faire générer une certaine structure avec dedans 10 blaze. Mais bizarre ! Pas un seul ne spawn. J’ai suspecté dans 1 premier temps le fait qu’ils pourrait despawn. Donc j’ai voulu me servir du boolean persistenceRequired mais aucun changement 😕 J’ai essayé avec d’autres mobs, mais rien….Alors je vous laisse la main x)

      2)J’ai ce code :

      
      protected Entity findPlayerToAttack()
      {
      EntityPlayer var1 = this.worldObj.getClosestPlayerToEntity(this, 200.0D);
      if ((var1 != null) && (this.tellingtimer == 300))
      {
      String targetUsername = var1.username;
      var1.sendChatToPlayer("§l§k§4H§4e §4f§ko§4un§kd y§4ou");
      for (int i = 0; i < MinecraftServer.getServer().getConfigurationManager().playerEntityList.size(); i++)
      {
      if(((EntityPlayerMP) MinecraftServer.getServer().getConfigurationManager().playerEntityList.get(i)).username != targetUsername)
      {
      ((EntityPlayerMP) MinecraftServer.getServer().getConfigurationManager().playerEntityList.get(i)).sendChatToPlayer("§l§k§4H§4e §4f§ko§4un§kd §l§k§4" + targetUsername);
      }
      }
      this.tellingtimer = 0;
      }
      return (var1 != null) && (canSlendermanBeSeen(var1)) ? var1 : null;
      }
      
      

      Mon but est d’envoyer un message au joueur ciblé, et un autre différent à tous les autres joueurs présents sur le serveur. Mais le problème, c’est que ça marche une fois sur 2…Voici le crash report :

      2016-01-24 12:54:03 [INFOS] [STDERR] Caused by: java.lang.NullPointerException
      2016-01-24 12:54:03 [INFOS] [STDERR] at fr.plaigon.slenderman.common.entities.EntitySlenderMan.findPlayerToAttack(EntitySlenderMan.java:103)
      2016-01-24 12:54:03 [INFOS] [STDERR] at fr.plaigon.slenderman.common.entities.EntitySlenderMan.onUpdate(EntitySlenderMan.java:132)
      2016-01-24 12:54:03 [INFOS] [STDERR] at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2293)
      2016-01-24 12:54:03 [INFOS] [STDERR] at net.minecraft.world.World.updateEntity(World.java:2255)
      2016-01-24 12:54:03 [INFOS] [STDERR] at net.minecraft.world.World.updateEntities(World.java:2109)
      

      Le crash report pointe sur cette ligne là :
      var1.sendChatToPlayer(“§l§k§4H§4e §4f§ko§4un§kd y§4ou”);
      Je pense que var1 est null. Ce qui est bizarre, c’est qu’il y a un null check juste avant o_O
      Ou alors cette méthode est uniquement gérée côté client, or findPlayerToAttack est server side only, par-conséquent je ferai comme les autres joueurs sur le serveur, pour qui il n’y a aucun problème (le message est bien reçu sans crash…) !

      Merci d’avance 😃

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

        1. Je pense que les blaze ne spawn pas du tout cas il n’y a pas de joueur proche. À vérifier.

        2. Étrange en effet. Essaies avec un if(!worldObj.isRemote)

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

          1. J ai essayé avec tous les mobs. Si sa continue, je vais devoir penser à faire autrement

          2)La méthode findPlayerToAttack est server side only, du coup la condition ne servirait pas à grand chose….

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

            2)J’ai essayé cette ligne
            ((EntityPlayerMP)var1).sendChatToPlayer(“§l§k§4H§4e §4f§ko§4un§kd y§4ou”);
            Mais crash report le var1 repart avec un cast exception du genre EntityClientPlayerMP can’t be casted to EntityPlayerMP
            Et les autres joueurs c’est pas EntityClientPlayerMP, c’est EntityOtherPlayerMP
            C’est bizarre moi qui croyait qu’on était seulement côté serveur, qu’il me sorte du EntityClientPlayerMP ???
            Je pense que mon soucis vient de la méthode ICommandSender#void sendChatToPlayer(String var1)
            Devrais-je envoyer un packet ? Le système des packets est bien différent en 1.4x qu’en 1.7. J’ai regardé un tuto vite fait, ça m’a l’air bien plus compliqué, donc j’aimerai évité. Le pire c’est que je sais qu’on peut sûrement faire sans… Sachant si je laisse cette ligne :
            var1.sendChatToPlayer(“§l§k§4H§4e §4f§ko§4un§kd y§4ou”);
            J’ai ça par la suite :

            2016-01-25 17:07:12 [INFOS] [STDERR] Caused by: java.lang.NullPointerException
            2016-01-25 17:07:12 [INFOS] [STDERR] at fr.plaigon.slenderman.common.entities.EntitySlenderMan.findPlayerToAttack(EntitySlenderMan.java:104)
            2016-01-25 17:07:12 [INFOS] [STDERR] at fr.plaigon.slenderman.common.entities.EntitySlenderMan.onUpdate(EntitySlenderMan.java:133)
            2016-01-25 17:07:12 [INFOS] [STDERR] at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2293)
            2016-01-25 17:07:12 [INFOS] [STDERR] at net.minecraft.world.World.updateEntity(World.java:2255)
            2016-01-25 17:07:12 [INFOS] [STDERR] at net.minecraft.world.World.updateEntities(World.java:2109)
            

            Qui pointe sur cette ligne :
            for (int i = 0; i < MinecraftServer.getServer().getConfigurationManager().playerEntityList.size(); i++)

            Sa me quand même rigoler de savoir qu’on sur serveur et qu’il me fait un NPE quand je parle du MinecraftServer …

            EDIT = Alors j’ai débuggé, et en fait il semblerait que la méthode est des 2 côtés…1 console m’indique cela, l’autre qui crash (puisque c’est celle qui reçoit le second message) m’indique le contraire (server side only). Je comprends pas tellement ^^’
            Toute aide sera appréciée 🙂

            EDIT 2 = Après bcp de blabla inutile, j’ai remarqué que c’était configurationManager qui était null. Je pense en fait que quand je fais référence à getConfigurationManager, DedicatedServer ou IntegratedServer ne sont pas encore instanciées et vu que c’est eux qui set configurationManager, je ne vois pas trop comment faire 😕

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

              Ta méthode findPlayerToAttack est appelé des deux côtés, c’est pour ça que tu te retrouve avec ce npe et avec des EntityClientPlayerMP/
              Et c’est aussi pour ça que je t’ai dit de tout mettre dans un !if(world.isRemote).

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

                Ok nikel, j’sais pas pourquoi je ne t’ai pas écouté + tôt ….
                Et pour le premier problème ? J’ai essayé avec d’autres mobs, même soucis …

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

                  Faudrait voir comment fait mc dans les structures du nether

                  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