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

    Joueur tp dans un monde au respawn s'il a tué

    Sans suite
    1.7.x
    3
    8
    1708
    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.
    • Axaurus
      Axaurus dernière édition par

      Salut
      J’ai un problème pour le tp dans un monde que j’ai créer.
      J’ai créer une variable qui dit que si le joueur tue un animal, une créature aquatique, une créature ambiante, ça met une variable de type boolean sur true (au départ j’ai fait un int qui ajoute 1, mais pour la suite j’ai mis ça en pensant que c’était ça mon problème). J’ai aussi fait (ou plutôt voulu faire) que si le joueur meurt alors qu’il a tuer une créature autre qu’un monstre (donc si la variable vaut true), ça le tp dans un monde quand il respawn. Mais voilà mon problème : il respawn dans l’Overworld.
      Voilà ce que j’ai mis :

      package This_is_Halloween;
      
      import This_is_Halloween.World.Frightful.TeleporterFrightful;
      import This_is_Halloween.World.Underworld.TeleporterUnderworld;
      import cpw.mods.fml.common.eventhandler.SubscribeEvent;
      import cpw.mods.fml.common.gameevent.PlayerEvent;
      import net.minecraft.client.entity.EntityClientPlayerMP;
      import net.minecraft.client.entity.EntityPlayerSP;
      import net.minecraft.entity.Entity;
      import net.minecraft.entity.EntityAgeable;
      import net.minecraft.entity.passive.EntityAmbientCreature;
      import net.minecraft.entity.passive.EntityAnimal;
      import net.minecraft.entity.passive.EntityWaterMob;
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.entity.player.EntityPlayerMP;
      import net.minecraft.server.MinecraftServer;
      import net.minecraftforge.event.entity.EntityJoinWorldEvent;
      import net.minecraftforge.event.entity.living.LivingDeathEvent;
      import net.minecraftforge.event.entity.living.LivingSpawnEvent;
      
      public class CommonEventHandler {
      
      boolean killed = false;
      
      @SubscribeEvent
      public void OnPlayerKill(LivingDeathEvent event)
      {
      if (event.entity instanceof EntityAmbientCreature && event.source.getEntity() instanceof EntityPlayer)
      {
      killed = true;
      }
      
      else if (event.entity instanceof EntityAnimal && event.source.getEntity() instanceof EntityPlayer)
      {
      killed = true;
      }
      
      else if (event.entity instanceof EntityWaterMob && event.source.getEntity() instanceof EntityPlayer)
      {
      killed = true;
      }
      
      else if (event.entity instanceof EntityAgeable && event.source.getEntity() instanceof EntityPlayer)
      {
      killed = true;
      }
      
      System.out.println(killed);
      }
      
      @SubscribeEvent
      public void OnPlayerDead(LivingSpawnEvent event)
      {
      System.out.println("test fonction");
      if (event.entity != null & event.entity instanceof EntityPlayerMP)
      {
      System.out.println("test joueur 'détécté'");
      if (killed = true)
      {
      System.out.println("test boolean vaut true");
      EntityPlayerMP player = (EntityPlayerMP)event.entity;
      player.mcServer.getConfigurationManager().transferPlayerToDimension(player, This_is_Halloween.dimension2ID, new TeleporterUnderworld(player.mcServer.worldServerForDimension(This_is_Halloween.dimension2ID)));
      killed = false;
      }
      }
      }
      
      }
      
      

      Si vous regarder à la deuxième fonction, vous verrez que la console doit afficher 3 messages différents. Or, vient ici le probème : ça n’affiche que le 1er message. En gros, la fonction marche, mais pas le reste. Le problème doit probablement être au niveau de la condition que le joueur soit EntityPlayerMP. Sauf que c’est censé être ça normalement  😕 . J’ai quand même essayé de remplacer par EntityPlayer, EntityPlayerSP, EntityClientPlayerMP, mais rien.

      Au départ j’avais cru que c’est le tp qui ne marchais pas, mais si il marche bien. J’ai tester de créer un bloc de tp pour y aller et ça m’y emmène bien.

      L’erreur est sur la condition, mais je ne vois pas quoi mettre d’autre

      Si vous savez comment faire pour régler ce bug, ou si vous avez un autre moyen pour faire ce que je veux faire je suis preneur.

      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

        Salut,
        Essaies sinon avec PlayerEvent.Clone en vérifiant que event.wasDeath a pour valeur true.

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

          Salut
          Merci. Mais ça marche plus ou moins : quand je tue un animal et que je meurs, je suis tp. C’est bien ce que je voulais. Mais je suis tp dans le Nether. Pourtant le monde marche bien puisque j’ai créer un portail juste pour test et ça m’y emmène bien.
          Le 2ème problème est que quand je meurs sans avoir tuer (donc quand ma variable vaut false), ça me tp quand même dans le nether mais il ne s’affiche pendant une demi-seconde avant de me déconnecter en ayant comme message Illegal Stance. Dans la console, il y a ceci :

          [17:52:36] [Server thread/WARN]: Player735 had an illegal stance: 0.0
          [17:52:36] [Server thread/INFO]: Player735 lost connection: TextComponent{text='Illegal stance', siblings=[], style=Style{hasParent=false, color=null, bold=null, italic=null, underlined=null, obfuscated=null, clickEvent=null, hoverEvent=null}}
          [17:52:36] [Server thread/INFO]: Player735 left the game
          [17:52:36] [Server thread/INFO]: Stopping singleplayer server as player logged out
          

          Déjà je ne comprend pas pourquoi ça veut me tp alors que normalement je doit pas bouger. Ensuite, je vois pas pourquoi ça me dit position illégal

          EDIT : j’ai testé de dire que si la variable vaut false, ça me tp dans l’Overworld au respawn grâce à cette ligne :

          player.mcServer.getConfigurationManager().transferPlayerToDimension(player, 0, new TeleporterUnderworld(player.mcServer.worldServerForDimension(0)));
          
          

          Résultats : dans le jeu, ça me marque que j’ai été déconnecté, mais dans la console ça me marque quand même illegal stance sans que je puisse rien voir en jeu. Du coup, je sais même pas où ça me tp 😕

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

            Pour le tp c’est en effet étrange. Il faudrait print avant et après le tp la dimension du joueur.

            Et pour la déconnexion c’est pareil, s’il ne devrait pas être tp c’est qu’il y a un problème avec une de tes conditions. Il faut print dans la console les valeurs des booléennes utilisés dans la condition pour comprendre pourquoi ça ne veut pas.

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

              Quand la variable vaut true et que je me tue, ça me donne ça (sans déco) :

              true
              [18:20:47] [Server thread/INFO]: Player814 fell out of the world
              [18:20:47] [Client thread/INFO]: [CHAT] Player814 fell out of the world
              [18:20:47] [Client thread/INFO]: [CHAT] Ouch! That looked like it hurt
              [18:20:49] [Server thread/INFO] [STDOUT]: [This_is_Halloween.CommonEventHandler:OnPlayerDead:58]: test boolean vaut true : le joueur a tué, ce n'est pas bien !
              [18:20:49] [Server thread/INFO] [STDOUT]: [This_is_Halloween.CommonEventHandler:OnPlayerDead:61]: est (ou doit être) tp dans l'Underworld
              [18:20:52] [Server thread/INFO]: Saving and pausing game…
              [18:20:52] [Server thread/INFO]: Saving chunks for level 'New World'/Overworld
              [18:20:52] [Server thread/INFO]: Saving chunks for level 'New World'/Nether
              [18:20:52] [Server thread/INFO]: Saving chunks for level 'New World'/The End
              [18:20:52] [Server thread/INFO]: Saving chunks for level 'New World'/Frightful
              [18:20:52] [Server thread/INFO]: Saving chunks for level 'New World'/Underworld
              
              

              et quand la variable vaut false et que je me tue, ça me donne ça (avec déco) :

              false
              [18:23:30] [Server thread/INFO]: Player814 fell out of the world
              [18:23:30] [Client thread/INFO]: [CHAT] Player814 fell out of the world
              [18:23:30] [Client thread/INFO]: [CHAT] Ouch! That looked like it hurt
              false
              false
              [18:23:33] [Server thread/INFO] [STDOUT]: [This_is_Halloween.CommonEventHandler:OnPlayerDead:58]: test boolean vaut true : le joueur a tué, ce n'est pas bien !
              [18:23:33] [Server thread/INFO] [STDOUT]: [This_is_Halloween.CommonEventHandler:OnPlayerDead:61]: est (ou doit être) tp dans l'Underworld
              [18:23:33] [Server thread/WARN]: Fetching addPacket for removed entity
              [18:23:34] [Server thread/WARN]: Player814 had an illegal stance: 0.0
              [18:23:34] [Server thread/WARN]: Player814 had an illegal stance: 0.0
              [18:23:34] [Server thread/WARN]: Player814 had an illegal stance: 0.0
              [18:23:34] [Server thread/WARN]: Player814 had an illegal stance: 0.0
              [18:23:34] [Server thread/WARN]: Player814 had an illegal stance: 0.0
              [18:23:34] [Server thread/INFO]: Player814 lost connection: TextComponent{text='Illegal stance', siblings=[], style=Style{hasParent=false, color=null, bold=null, italic=null, underlined=null, obfuscated=null, clickEvent=null, hoverEvent=null}}
              [18:23:34] [Server thread/INFO]: Player814 left the game
              [18:23:34] [Server thread/INFO]: Stopping singleplayer server as player logged out
              [18:23:34] [Server thread/INFO]: Stopping server
              [18:23:34] [Server thread/INFO]: Saving players
              [18:23:34] [Server thread/INFO]: Saving worlds
              [18:23:34] [Server thread/INFO]: Saving chunks for level 'New World'/Overworld
              [18:23:34] [Server thread/INFO]: Saving chunks for level 'New World'/Nether
              [18:23:34] [Server thread/INFO]: Saving chunks for level 'New World'/The End
              [18:23:34] [Server thread/INFO]: Saving chunks for level 'New World'/Frightful
              [18:23:34] [Server thread/INFO]: Saving chunks for level 'New World'/Underworld
              [18:23:36] [Server thread/INFO] [FML]: Unloading dimension 0
              [18:23:36] [Server thread/INFO] [FML]: Unloading dimension -1
              [18:23:36] [Server thread/INFO] [FML]: Unloading dimension 1
              [18:23:36] [Server thread/INFO] [FML]: Unloading dimension -5
              [18:23:36] [Server thread/INFO] [FML]: Unloading dimension -10
              [18:23:36] [Server thread/INFO] [FML]: Applying holder lookups
              [18:23:36] [Server thread/INFO] [FML]: Holder lookups applied
              

              Et voilà mon code java :

              package This_is_Halloween;
              
              import This_is_Halloween.World.Frightful.TeleporterFrightful;
              import This_is_Halloween.World.Underworld.TeleporterUnderworld;
              import cpw.mods.fml.common.eventhandler.SubscribeEvent;
              import net.minecraft.client.entity.EntityClientPlayerMP;
              import net.minecraft.client.entity.EntityPlayerSP;
              import net.minecraft.entity.Entity;
              import net.minecraft.entity.EntityAgeable;
              import net.minecraft.entity.passive.EntityAmbientCreature;
              import net.minecraft.entity.passive.EntityAnimal;
              import net.minecraft.entity.passive.EntityWaterMob;
              import net.minecraft.entity.player.EntityPlayer;
              import net.minecraft.entity.player.EntityPlayerMP;
              import net.minecraft.server.MinecraftServer;
              import net.minecraftforge.event.entity.EntityJoinWorldEvent;
              import net.minecraftforge.event.entity.living.LivingDeathEvent;
              import net.minecraftforge.event.entity.living.LivingSpawnEvent;
              import net.minecraftforge.event.entity.player.PlayerEvent;
              
              public class CommonEventHandler {
              
              boolean killed = false;
              
              @SubscribeEvent
              public void OnPlayerKill(LivingDeathEvent event)
              {
              if (event.entity instanceof EntityAmbientCreature && event.source.getEntity() instanceof EntityPlayer)
              {
              killed = true;
              }
              
              else if (event.entity instanceof EntityAnimal && event.source.getEntity() instanceof EntityPlayer)
              {
              killed = true;
              }
              
              else if (event.entity instanceof EntityWaterMob && event.source.getEntity() instanceof EntityPlayer)
              {
              killed = true;
              }
              
              else if (event.entity instanceof EntityAgeable && event.source.getEntity() instanceof EntityPlayer)
              {
              killed = true;
              }
              
              System.out.println(killed);
              }
              
              @SubscribeEvent
              public void OnPlayerDead(PlayerEvent.Clone event)
              {
              if (event.wasDeath == true)
              {
              if (killed = true)
              {
              System.out.println("test boolean vaut true : le joueur a tué, ce n'est pas bien !");
              EntityPlayerMP player = (EntityPlayerMP)event.entity;
              player.mcServer.getConfigurationManager().transferPlayerToDimension(player, This_is_Halloween.dimension2ID, new TeleporterUnderworld(player.mcServer.worldServerForDimension(This_is_Halloween.dimension2ID)));
              System.out.println("est (ou doit être) tp dans l'Underworld");
              killed = false;
              }
              else if (killed = false)
              {
              System.out.println("test boolean vaut false : le joueur n'a pas tué, c'est bien !");
              EntityPlayerMP player = (EntityPlayerMP)event.entity;
              player.mcServer.getConfigurationManager().transferPlayerToDimension(player, 0, new TeleporterUnderworld(player.mcServer.worldServerForDimension(0)));
              System.out.println("n'est pas censé être tp");
              }
              }
              }
              
              }
              
              

              Si on compare les 2, on peut voir que quand la variable est false et qu’on meurs, ça éxecute quand même la condition true, comme si la variable vallait true. Ca doit être dû à ça la position illégale. Ca exécute la mauvaise partie du code je ne comprend pas 😕

              Pour ce qui est du tp quand la variable vaut true, c’est un mystère.

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

                if(killed)
                {
                …
                }
                else
                {
                }
                Ou encore
                if(killed == true)

                == -> test de condition.
                = -> affectation de valeur.

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

                  Salut
                  Désolé de la réponse si tardive
                  Effectivement, c’est mieux avec deux égales

                  Mais maintenant, que j’ai tué ou pas ça m’emmène dans le Nether (qu’est ce qu’il viens faire là lui ?). Sans doute une erreur dans le code du monde, ou celui du tp.

                  Mais j’ai changé mes plans, j’ai une autre idée pour le mod. Dans ma tête ça a l’air bien, j’espère dans le jeu aussi. En tout cas, je n’ai plus besoin d’être tp comme je voulais faire au début de ce post.

                  Merci pour tes réponses 🙂

                  PS : du coup, j’en fais quoi du topic ? je le met en résolu ou pas (vu que ça bug encore) ?

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

                    Sans suite conviendrait je pense

                    Envoyé de mon RAINBOW LITE 4G en utilisant Tapatalk

                    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
                    • 1 / 1
                    • Premier message
                      Dernier message
                    Design by Woryk
                    Contact / Mentions Légales

                    MINECRAFT FORGE FRANCE © 2018

                    Powered by NodeBB