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

    NPE : Saving entity NBT

    Sans suite
    1.11.x
    2
    3
    1014
    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.
    • BrokenSwing
      BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par

      Salut,
      J’ai un crash lors de la sauvegarde du joueur dans les tags NBT.
      J’ai réussi à identifier la raison du crash et la ligne qui pose problème.

      • EntityPlayer#writeEntityToNBT
      
      net.minecraftforge.fml.common.FMLCommonHandler.instance().getDataFixer().writeVersionData(compound);
      
      
      • getDataFixer() renvoie null

      Et FMLServerHandler#getDataFixer (voir stackstrace pour comprendre pourquoi je donne FMLServerHandler et non FMLCommonHandler)

      
      @Override
      public CompoundDataFixer getDataFixer()
      {
      return (CompoundDataFixer)this.server.getDataFixer();
      }
      
      
      • this.server est null (je suis en solo)

      Le rapport de crash :

      
      –-- Minecraft Crash Report ----
      // Would you like a cupcake?
      
      Time: 12/28/16 12:07 AM
      Description: Saving entity NBT
      
      java.lang.NullPointerException: Saving entity NBT
      at net.minecraftforge.fml.server.FMLServerHandler.getDataFixer(FMLServerHandler.java:338)
      at net.minecraftforge.fml.common.FMLCommonHandler.getDataFixer(FMLCommonHandler.java:758)
      at net.minecraft.entity.player.EntityPlayer.writeEntityToNBT(EntityPlayer.java:1024)
      at net.minecraft.entity.player.EntityPlayerMP.writeEntityToNBT(EntityPlayerMP.java:246)
      at net.minecraft.entity.Entity.writeToNBT(Entity.java:1908)
      at net.minecraft.server.integrated.IntegratedPlayerList.writePlayerData(IntegratedPlayerList.java:30)
      at net.minecraft.server.management.PlayerList.saveAllPlayerData(PlayerList.java:959)
      at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:720)
      at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:156)
      at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:547)
      at java.lang.Thread.run(Unknown Source)
      
      A detailed walkthrough of the error, its code path and all known details is as follows:
      ---------------------------------------------------------------------------------------
      
      -- Head --
      Thread: Server thread
      Stacktrace:
      at net.minecraftforge.fml.server.FMLServerHandler.getDataFixer(FMLServerHandler.java:338)
      at net.minecraftforge.fml.common.FMLCommonHandler.getDataFixer(FMLCommonHandler.java:758)
      at net.minecraft.entity.player.EntityPlayer.writeEntityToNBT(EntityPlayer.java:1024)
      at net.minecraft.entity.player.EntityPlayerMP.writeEntityToNBT(EntityPlayerMP.java:246)
      
      -- Entity being saved --
      Details:
      Entity Type: null (net.minecraft.entity.player.EntityPlayerMP)
      Entity ID: 120
      Entity Name: Player862
      Entity's Exact location: -1297.83, 4.00, -102.82
      Entity's Block location: World: (-1298,4,-103), Chunk: (at 14,0,9 in -82,-7; contains blocks -1312,0,-112 to -1297,255,-97), Region: (-3,-1; contains chunks -96,-32 to -65,-1, blocks -1536,0,-512 to -1025,255,-1)
      Entity's Momentum: 0.00, -0.08, 0.00
      Entity's Passengers: []
      Entity's Vehicle: ~~ERROR~~ NullPointerException: null
      Stacktrace:
      at net.minecraft.entity.Entity.writeToNBT(Entity.java:1908)
      at net.minecraft.server.integrated.IntegratedPlayerList.writePlayerData(IntegratedPlayerList.java:30)
      at net.minecraft.server.management.PlayerList.saveAllPlayerData(PlayerList.java:959)
      at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:720)
      at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:156)
      at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:547)
      at java.lang.Thread.run(Unknown Source)
      
      -- System Details --
      Details:
      Minecraft Version: 1.11.2
      Operating System: Windows 10 (amd64) version 10.0
      Java Version: 1.8.0_111, Oracle Corporation
      Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
      Memory: 62577520 bytes (59 MB) / 429391872 bytes (409 MB) up to 939524096 bytes (896 MB)
      JVM Flags: 0 total;
      IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
      FML: MCP 9.38 Powered by Forge 13.20.0.2201 5 mods loaded, 5 mods active
      States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
      UCHIJAAAA minecraft{1.11.2} [Minecraft] (minecraft.jar)
      UCHIJAAAA mcp{9.19} [Minecraft Coder Pack] (minecraft.jar)
      UCHIJAAAA FML{8.0.99.99} [Forge Mod Loader] (forgeSrc-1.11.2-13.20.0.2201.jar)
      UCHIJAAAA forge{13.20.0.2201} [Minecraft Forge] (forgeSrc-1.11.2-13.20.0.2201.jar)
      UCHIJAAAA eventmaker{0.1.0} [Event Maker] (bin)
      Loaded coremods (and transformers):
      GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.
      Profiler Position: N/A (disabled)
      Player Count: 1 / 8; [EntityPlayerMP['Player862'/120, l='New World', x=-1297.83, y=4.00, z=-102.82]]
      Type: Integrated Server (map_client.txt)
      Is Modded: Definitely; Client brand changed to 'fml,forge'
      
      

      Le crash ne se déclenche que lorsque j’effectue une certaine commande qui entraîne le code suivant :

      
      event.start();
      if(event.isStarted()) {
      sender.sendMessage(ComponentCreator.info("The event " + ChatFormatting.AQUA + eventName + ChatFormatting.RESET + " started"));
      EventHandler.postEvent(event);
      } else {
      sender.sendMessage(ComponentCreator.error("The event " + ChatFormatting.AQUA + eventName + ChatFormatting.RESET + " cannot start"));
      }
      
      

      Petite explication : event est une instance d’un objet créé par moi même (Event), la fonction Event#start ne semble pas poser de problèmes, les actions s’effectuent, je ne pense pas du tout que le problème vienne d’ici.

      Ensuite EventHandler#postEvent permet d’indiquer qu’il faut update l’event :

      
      public static void postEvent(Event event) {
      events.add(event); //Ajout de l'event dans un liste, chaque event de la liste est update grâce à un tick event qui appelle Event#update
      }
      
      

      Voilà tout, si vous avez besoin d’informations supplémentaires, n’hésitez pas à demander

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

        Salut,

        Je n’arrives pas à comprendre le rapport entre le crash et ton code.
        En effet il n’y a pas de trace de ton mod dans le stacktrace.
        Ni rien en rapport l’enregistrement de nbt dans ton code ?

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

          Salut,
          J’enregistre les données concernant mes events dans les tags NBT du monde donc j’ai des WorldSavedData. Ça pourrait venir d’un WorldSavedData#markDirty appelé trop souvent ? (Ça serait bizarre mais bon).
          Sachant que j’appelle WorldSavedData#markDirty lors de la création de l’event et qu’à cette étape ci je n’ai aucun problème.
          Tient, le code du TickHandler :

          
          @SubscribeEvent
          public static void onServerTick(TickEvent.ServerTickEvent event) {
          ArrayList <event>finishedEvents = new ArrayList<event>();
          for(Event e : events) {
          if(e.isFinished()) {
          e.onFinished();
          finishedEvents.add(e);
          } else if(e.isStopped()) {
          finishedEvents.add(e);
          } else {
          e.update();
          }
          EventMaker.save(); //Fait un appelle direct de WorldSavedData#markDirty, rien d'autre
          }
          for(Event e : finishedEvents) {
          events.remove(e);
          }
          }
          
          

          Si tu veux le voir un peu ce qui il y a dans le code, le mod est sur github : https://github.com/MFFbrokenSwing/EventMod, là c’est le code pour la 1.8 mais si tu veux je peux mettre le code que j’ai fait actuellement (j’ai rien ajouté, juste fait l’autocomplétition et changé ce qu’il faut pour être en accords avec les changement de la 1.11)</event></event>

          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