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

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

    Sans suite
    2
    7
    1295
    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.
    • Deleted
      Deleted last edited by

      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 Reply Last reply Reply Quote 0
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

        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 Reply Last reply Reply Quote 0
        • Deleted
          Deleted last edited by

          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 Reply Last reply Reply Quote 0
          • Deleted
            Deleted last edited by

            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 Reply Last reply Reply Quote 0
            • robin4002
              robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

              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 Reply Last reply Reply Quote 0
              • Deleted
                Deleted last edited by

                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 Reply Last reply Reply Quote 0
                • robin4002
                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                  Faudrait voir comment fait mc dans les structures du nether

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

                  MINECRAFT FORGE FRANCE © 2018

                  Powered by NodeBB