MFF

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

    [SANS SUITE] Crash Serveur

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    87 Messages 7 Publieurs 19.0k 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.
    • GabsG Hors-ligne
      Gabs
      dernière édition par

      Bonjour,
      Alors j’ai un soucis quand je met mon mod sur le serveur il fait crash mon serveur je crois que c’est en lien avec mon GuiScreen du coup je vous met le crash et la class merci d’avance 🙂

      Crash:

      http://pastebin.com/PdeP5Js3

      Class:

      
      package com.DeathDelay.net.Gui;
      
      import com.DeathDelay.net.Main;
      import com.DeathDelay.net.packet.PacketGui;
      import com.DeathDelay.net.packet.PacketMedecin;
      
      import net.minecraft.client.Minecraft;
      import net.minecraft.client.gui.GuiButton;
      import net.minecraft.client.gui.GuiScreen;
      import net.minecraft.entity.Entity;
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.server.MinecraftServer;
      import net.minecraft.util.ChatComponentText;
      import net.minecraft.util.ResourceLocation;
      
      public class Mort extends GuiScreen {
      
      private ResourceLocation ressource = new ResourceLocation("dd:textures/gui/death.png");
      
      private int medecin;
      
      private int spawn;
      
      public static int timer = 10000;
      
      int guiWidth = 256;
      
      int guiHeight = 256;
      
      public Mort() {
      
      }
      
      @Override
      public void initGui() {
      
      int guiX = (this.width - guiWidth) / 2;
      
      int guiY = (this.height - guiHeight) / 2;
      
      medecin = 0;
      
      spawn = 1;
      
      buttonList.clear();
      
      buttonList.add(new GuiButton(medecin, guiX + 170, guiY + 226 + 5, 58, 20, "§aAppeller un médecin"));
      
      buttonList.add(new GuiButton(spawn, guiX + 80, guiY, 120, 20, "§5Respawn possible dans"));
      
      super.initGui();
      }
      
      @Override
      protected void keyTyped(char typedChar, int keyCode) {
      super.keyTyped(typedChar, keyCode);
      }
      
      @Override
      protected void actionPerformed(GuiButton button) {
      
      switch(button.id) {
      case 0:
      Main.network.sendToServer(new PacketMedecin());
      break;
      case 1:
      if(timer > 0)
      {
      EntityPlayer player1 = Minecraft.getMinecraft().thePlayer;
      ChatComponentText text1 = new ChatComponentText("§7Vous ne pouvez pas respawn ! il vous reste: " + timer / 100 + " §7secondes");
      player1.addChatComponentMessage(text1);
      timer –;
      break;
      }
      else
      {
      
      EntityPlayer player1 = Minecraft.getMinecraft().thePlayer;
      player1.setDead();
      Minecraft.getMinecraft().thePlayer.closeScreen();
      break;
      }
      default:
      break;
      }
      
      super.actionPerformed(button);
      }
      
      @Override
      public void updateScreen() {
      super.updateScreen();
      }
      
      public void drawScreen(int mouseX, int mouseY, float partialTick) 
      
      {
      
      String tilename = "§5 : " + timer-- / 100;
      
      mc.getTextureManager().bindTexture(ressource);
      
      this.drawTexturedModalRect(this.width / 2 - 135, this.height / 2 - 127, 0, 0, 256, 255);
      if(timer > 0)
      {
      this.fontRendererObj.drawString(tilename, this.width / 2 + 95 - this.fontRendererObj.getStringWidth(tilename) / 2, 1, 0);
      }
      super.drawScreen(mouseX, mouseY, partialTick);
          }
      
      public static void settimer(int newtimer)
      {
      timer = newtimer;
      }
      
      @Override
      public void onGuiClosed() {
      
      Main.network.sendToServer(new PacketGui());
      
      }
      
      }
      
      
      1 réponse Dernière réponse Répondre Citer 0
      • DeletedD Hors-ligne
        Deleted
        dernière édition par

        Tu display ce custom gui sûrement côté client ET CÔTÉ SERVEUR, et donc fais appelle à une classe fille de GuiScreen, donc ne pouvant exister que côté client.
        Montre nous le bout de code où tu instancies cette classe, l’event quoi.

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

          @‘Plaigon’:

          Tu display ce custom gui sûrement côté client ET CÔTÉ SERVEUR, et donc fais appelle à une classe fille de GuiScreen, donc ne pouvant exister que côté client.
          Montre nous le bout de code où tu instancies cette classe, l’event quoi.

          Ah je savais pas d’acc bah je sais l’érreur du coup ^^

          
          @SubscribeEvent
          public void onDeath(LivingDeathEvent event)
          {
          Main.network.sendToServer(new PacketGui());
          }
          

          Vu que j’enregistre mon packet côté serveur bah … Sinon je peux utilisé Minecraft.getMinecraft.displayscreen un truc comme ça non?

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

            Peut-être qu’un @SideOnly(Side.CLIENT) serrait nécessaire avant la classe principale?

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

              Oui un displayGuiScreen serait nécessaire pour ce genre de problème.
              Mais après l’idéal serait que tu crées un méthode de l’event OpeGuiEvent, et que si le gui dont il est question est le GuiGameOver, alors tu cancel l’event et tu ouvres le tien à la place. C’est le même procédé que pour le remplacement du menu principal, je pense que sa te n’est pas inconnu 😛

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

                @‘floriangabet’:

                Vu que j’enregistre mon packet côté serveur bah … Sinon je peux utilisé Minecraft.getMinecraft.displayscreen un truc comme ça non?

                Sauf erreur de ma part, un packet doit être enregistrer des deux côtés (client et serveur), tu as bien fait. Mais ton gui ne doit être enregistrer uniquement que côté client. Tu peux, comme l’a évoqué ErkoZ, mettre un SideOnly, mais tu peux aussi le mettre dans un ClientProxy. Ca revient au même

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

                  Mais arrêtez avec vos packets, voyons 😮
                  L’event LivingDeathEvent est fired des 2 côtés, doc pas besoin d’envoyer un packet.

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

                    @‘Plaigon’:

                    Oui un displayGuiScreen serait nécessaire pour ce genre de problème.
                    Mais après l’idéal serait que tu crées un méthode de l’event OpeGuiEvent, et que si le gui dont il est question est le GuiGameOver, alors tu cancel l’event et tu ouvres le tien à la place. C’est le même procédé que pour le remplacement du menu principal, je pense que sa te n’est pas inconnu 😛

                    J’ai fais Minecraft.getMinecraft.displayguiScreen j’ai toujours le meme crash je vais essayer avec le @sideonly dans la main class .
                    Plaigon en fait le truc c’est que je veux pas cancelled l’event guigameover je met le joueur a 0.5 cœur et je lui ouvre le gui j’ai mal copier coller mon event ^^ .

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

                      Quand je parlait de la classe principale je parlais dem ettre un SideOnly juste avant ça public class Mort extends GuiScreen {
                      ^^

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

                        @‘ErkoZ’:

                        Quand je parlait de la classe principale je parlais dem ettre un SideOnly juste avant ça public class Mort extends GuiScreen {
                        ^^

                        D’acc x) J’avais pas compris .
                        edit:
                        Pareil toujours crash 😕

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

                          Et c’est toujours le même rapport de crash ? Renvoie le stp

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

                            Exprime toi + clairement sur ce que tu souhaites faire car à chaque poste que tu fais (et t’en fais beaucoup en plus) c’est toujours le même soucis : pas assez d’infos donc je peux pas toujours filer des réponses en or.

                            Si tu ne veux pas display le gui quand le joueur meurt, alors pourquoi par pitié, avoir sélectionné l’event LivingDeathEvent –’

                            D’autre part, si tu veux appeler la classe Minecraft dans un event both sides, alors il serait + judicieux de se mettre uniquement côté client a l’aide d’un if (event.entityLiving.worldObj.isRemote) !

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

                              @‘Plaigon’:

                              Exprime toi + clairement sur ce que tu souhaites faire car à chaque poste que tu fais (et t’en fais beaucoup en plus) c’est toujours le même soucis : pas assez d’infos donc je peux pas toujours filer des réponses en or.

                              Si tu ne veux pas display le gui quand le joueur meurt, alors pourquoi par pitié,  avoir sélectionné l’event LivingDeathEvent –’

                              D’autre part, si tu veux appeler la classe Minecraft dans un event both sides, alors il serait + judicieux de se mettre uniquement côté client a l’aide d’un if (event.entityLiving.worldObj.isRemote) !

                              D’acc alors je m’explique !

                              J’ai fais une sorte de “coma” , lorsque le joueur et sur le point de mourir je lui ajoute 0.5 cœur pour pas qu’il meure.
                              Une fois les 0.5 cœur ajouté le gui s’ouvre avec dedans deux choix: Appeler un samu ou alors respawn .
                              Si il choisit d’appeler un médecin un message est envoyer dans le chat avec les coordonnées etc… pour que le médecin puisse le réanimé.
                              Si il choisit de respawn il meurt et respawn, c’est donc pour cela que je ne veux pas cancelled le guigameover .

                              Tien ma classe event du coup:

                              @SubscribeEvent
                              public void onDeath(LivingDeathEvent event)
                              {
                              if(event.entityLiving instanceof EntityPlayer)
                              {
                              
                              event.entityLiving.setHealth(1);
                              Mort.settimer(10000);
                              
                              Minecraft.getMinecraft().displayGuiScreen(new Mort());
                              }
                              

                              Compris ? x)

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

                                Okay ! Toutes ces infos, j’aurai déjà dû en être informé dès le poste initial, on aurait perdu moins de temps 😉
                                Sa sert à quoi le Mort.setTimer () ? Sa définit la durée du coma ?
                                Et ensuite, pour la énième fois, isole côté client ton displayScreen, tu sais faire sa quand même ?!

                                Et pour le moment qu’est ce que ce code te fait in-game ? Je pense qu’il faudrait cancel l’eveng (Si c’est possible, je ne crois pas de mémoire…) afin que le GuiGameOver n’apparaisse pas (pas tout de suite en tout cas) et pour faire rester ton personnage en jeu, afin de donner l’effet de “coma”.

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

                                  @‘Plaigon’:

                                  Okay ! Toutes ces infos, j’aurai déjà dû en être informé dès le poste initial, on aurait perdu moins de temps 😉
                                  Sa sert à quoi le Mort.setTimer () ? Sa définit la durée du coma ?
                                  Et ensuite, pour la énième fois, isole côté client ton displayScreen, tu sais faire sa quand même ?!

                                  Et pour le moment qu’est ce que ce code te fait in-game ? Je pense qu’il faudrait cancel l’eveng (Si c’est possible, je ne crois pas de mémoire…) afin que le GuiGameOver n’apparaisse pas (pas tout de suite en tout cas) et pour faire rester ton personnage en jeu, afin de donner l’effet de “coma”.

                                  Alors le setTimer et le cooldown pour le bouton respawn, oui je sais faire pour isoler côté client world.isremote et mon code est fonctionnel le guiGameOver n’apparait en aucun cas sauf quand je clique sur respawn ^^ j’essaye d’isoler le displayscreen je te dis si ça crash toujours 🙂
                                  Merci en tout cas.

                                  edit: Crash.
                                  Tien je crois que c’est le même: http://pastebin.com/UsHR5DJF

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

                                    File ton code, il peut très bien venir d’autre part…

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

                                      Event:

                                      
                                      @SubscribeEvent
                                      public void onDeath(LivingDeathEvent event)
                                      {
                                      if(event.entityLiving instanceof EntityPlayer)
                                      {
                                      event.entityLiving.setHealth(1);
                                      Mort.settimer(10000);
                                      if(player.worldObj.isRemote){
                                      Minecraft.getMinecraft().displayGuiScreen(new Mort());
                                      }
                                      }
                                      
                                      

                                      Guiscreen:

                                      
                                      package com.DeathDelay.net.Gui;
                                      
                                      import com.DeathDelay.net.Main;
                                      import com.DeathDelay.net.packet.PacketGui;
                                      import com.DeathDelay.net.packet.PacketMedecin;
                                      
                                      import cpw.mods.fml.relauncher.Side;
                                      import cpw.mods.fml.relauncher.SideOnly;
                                      import net.minecraft.client.Minecraft;
                                      import net.minecraft.client.gui.GuiButton;
                                      import net.minecraft.client.gui.GuiScreen;
                                      import net.minecraft.entity.Entity;
                                      import net.minecraft.entity.player.EntityPlayer;
                                      import net.minecraft.server.MinecraftServer;
                                      import net.minecraft.util.ChatComponentText;
                                      import net.minecraft.util.ResourceLocation;
                                      
                                      public class Mort extends GuiScreen {
                                      
                                      @SideOnly(Side.CLIENT)
                                      
                                      private ResourceLocation ressource = new ResourceLocation("dd:textures/gui/death.png");
                                      
                                      private int medecin;
                                      
                                      private int spawn;
                                      
                                      public static int timer = 10000;
                                      
                                      int guiWidth = 256;
                                      
                                      int guiHeight = 256;
                                      
                                      public Mort() {
                                      
                                      }
                                      
                                      @Override
                                      public void initGui() {
                                      
                                      int guiX = (this.width - guiWidth) / 2;
                                      
                                      int guiY = (this.height - guiHeight) / 2;
                                      
                                      medecin = 0;
                                      
                                      spawn = 1;
                                      
                                      buttonList.clear();
                                      
                                      buttonList.add(new GuiButton(medecin, guiX + 170, guiY + 226 + 5, 58, 20, "§aAppeller un médecin"));
                                      
                                      buttonList.add(new GuiButton(spawn, guiX + 80, guiY, 120, 20, "§5Respawn possible dans"));
                                      
                                      super.initGui();
                                      }
                                      
                                      @Override
                                      protected void keyTyped(char typedChar, int keyCode) {
                                      super.keyTyped(typedChar, keyCode);
                                      }
                                      
                                      @Override
                                      protected void actionPerformed(GuiButton button) {
                                      
                                      switch(button.id) {
                                      case 0:
                                      Main.network.sendToServer(new PacketMedecin());
                                      break;
                                      case 1:
                                      if(timer > 0)
                                      {
                                      EntityPlayer player1 = Minecraft.getMinecraft().thePlayer;
                                      ChatComponentText text1 = new ChatComponentText("§7Vous ne pouvez pas respawn ! il vous reste: " + timer / 100 + " §7secondes");
                                      player1.addChatComponentMessage(text1);
                                      timer –;
                                      break;
                                      }
                                      else
                                      {
                                      
                                      EntityPlayer player1 = Minecraft.getMinecraft().thePlayer;
                                      player1.setDead();
                                      Minecraft.getMinecraft().thePlayer.closeScreen();
                                      break;
                                      }
                                      default:
                                      break;
                                      }
                                      
                                      super.actionPerformed(button);
                                      }
                                      
                                      @Override
                                      public void updateScreen() {
                                      super.updateScreen();
                                      }
                                      
                                      public void drawScreen(int mouseX, int mouseY, float partialTick) 
                                      
                                      {
                                      
                                      String tilename = "§5 : " + timer-- / 100;
                                      
                                      mc.getTextureManager().bindTexture(ressource);
                                      
                                      this.drawTexturedModalRect(this.width / 2 - 135, this.height / 2 - 127, 0, 0, 256, 255);
                                      if(timer > 0)
                                      {
                                      this.fontRendererObj.drawString(tilename, this.width / 2 + 95 - this.fontRendererObj.getStringWidth(tilename) / 2, 1, 0);
                                      }
                                      super.drawScreen(mouseX, mouseY, partialTick);
                                          }
                                      
                                      public static void settimer(int newtimer)
                                      {
                                      timer = newtimer;
                                      }
                                      
                                      @Override
                                      public void onGuiClosed() {
                                      
                                      Main.network.sendToServer(new PacketGui()); // possible que c'est ça ?
                                      
                                      }
                                      
                                      }
                                      
                                      
                                      1 réponse Dernière réponse Répondre Citer 0
                                      • robin4002R Hors-ligne
                                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                                        dernière édition par

                                        Envoies le code de ton paquet.

                                        Et dans l’event onDeath tu dois garder le paquet.
                                        Comme tu mets 0,5 de vie, ça doit être fait côté serveur et pas côté client.

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

                                          Le crash restant vient du Mort.setTimer.
                                          Je t’ai dit de ne laisser aucun code ayant rapport avec ton gui, qui pourrait alors être interprété par le serveur. Donc à mettre aussi danse isRemote.
                                          Ensuite je ne comprends pas trop @robin, si l’event LivingDeathEvent est client et server side, nullement besoin d’avoir recours au packet alors ??

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

                                            @‘robin4002’:

                                            Envoies le code de ton paquet.

                                            Et dans l’event onDeath tu dois garder le paquet.
                                            Comme tu mets 0,5 de vie, ça doit être fait côté serveur et pas côté client.

                                            Tien mon packet:

                                            public class PacketGui implements IMessage {
                                            
                                            public int i;
                                            
                                            public PacketGui(){
                                            
                                            }
                                            public PacketGui(int i){
                                            this.i = i;
                                            }
                                            
                                            @Override
                                            public void fromBytes(ByteBuf buf) {
                                            i = buf.readInt();
                                            }
                                            
                                            @Override
                                            public void toBytes(ByteBuf buf) {
                                            buf.writeInt(i);
                                            }
                                            
                                            public static class Handler implements IMessageHandler <packetgui, imessage="">{
                                               public IMessage onMessage(PacketGui message, MessageContext ctx) {
                                            
                                                    Minecraft.getMinecraft().displayGuiScreen(new Mort());
                                                    return message;
                                                   }
                                            
                                               }
                                            

                                            Comment ça je dois regarder lepacket ?? 
                                            Pour le 0.5 de heal je dois mettre un !world.isremote du coup?

                                            Parce que ça fait:

                                            
                                            1.  @SubscribeEvent
                                            2.  **public** **void** onDeath(LivingDeathEvent **event**)
                                            3.  {
                                            4.  **if**(**event**.entityLiving **instanceof** EntityPlayer && !world.isremote) // side serveur
                                            5.  {
                                            6.  **event**.entityLiving.setHealth(1);
                                            7.  Mort.settimer(10000);
                                            8.  }
                                            9.  **if**(player.worldObj.isRemote){ // side client 
                                            10.  Minecraft.getMinecraft().displayGuiScreen(**new** Mort());
                                            11.  }
                                            12.  }
                                            
                                            

                                            Comme ça?</packetgui,>

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

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB