Posted September 12, 201312 yr I'm getting a null pointer exception on line 30. I don't see anything wrong? http://pastebin.com/cYQraBDd Kain
September 13, 201312 yr Are you sure it's line 30? You're probably getting a NULL for the World World world = player.getEntityWorld(); NBTTagCompound nbt = world.getWorldInfo().getPlayerNBTTagCompound(); By the way, what version of Minecraft are you writing for? Can't you just use player.worldObj?
September 13, 201312 yr Author I did the worldObj here: http://pastebin.com/Q9mbbL1j Here's the new error that pops up: http://pastebin.com/ANLXMWvC Kain
September 14, 201312 yr Hmm, can you try checking if the player object is valid? EntityPlayer player = (EntityPlayer) event.entity; if (player != null) { // do stuff } else { // oops } Another thing you could try is just using the entity itself since EntityJoinWorldEvent has a public field called world if (event.entity instanceof EntityPlayer) { event.entity.world; } else { // oops }
September 14, 201312 yr Author Isn't EntityPlayer player = (EntityPlayer)event.entity; if(player != null){} the same as if (event.entity instanceof EntityPlayer){} Also, I did that event.world, I created a world and crashed. Error 2013-09-13 22:51:32 [iNFO] [sTDERR] java.lang.NullPointerException 2013-09-13 22:51:32 [iNFO] [sTDERR] at terramagna.utils.PlayerStatsUtil.onEntityJoinWorld(PlayerStatsUtil.java:27) 2013-09-13 22:51:32 [iNFO] [sTDERR] at net.minecraftforge.event.ASMEventHandler_5_PlayerStatsUtil_onEntityJoinWorld_EntityJoinWorldEvent.invoke(.dynamic) 2013-09-13 22:51:32 [iNFO] [sTDERR] at net.minecraftforge.event.ASMEventHandler.invoke(ASMEventHandler.java:39) 2013-09-13 22:51:32 [iNFO] [sTDERR] at net.minecraftforge.event.EventBus.post(EventBus.java:108) 2013-09-13 22:51:32 [iNFO] [sTDERR] at net.minecraft.world.World.spawnEntityInWorld(World.java:1572) 2013-09-13 22:51:32 [iNFO] [sTDERR] at net.minecraft.server.management.ServerConfigurationManager.playerLoggedIn(ServerConfigurationManager.java:267) 2013-09-13 22:51:32 [iNFO] [sTDERR] at net.minecraft.server.management.ServerConfigurationManager.initializeConnectionToPlayer(ServerConfigurationManager.java:136) 2013-09-13 22:51:32 [iNFO] [sTDERR] at net.minecraft.server.integrated.IntegratedServerListenThread.networkTick(IntegratedServerListenThread.java:97) 2013-09-13 22:51:32 [iNFO] [sTDERR] at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:689) 2013-09-13 22:51:32 [iNFO] [sTDERR] at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:585) 2013-09-13 22:51:32 [iNFO] [sTDERR] at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:129) 2013-09-13 22:51:32 [iNFO] [sTDERR] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:482) 2013-09-13 22:51:32 [iNFO] [sTDERR] at net.minecraft.server.ThreadMinecraftServer.run(ThreadMinecraftServer.java:16) 2013-09-13 22:51:32 [sEVERE] [Minecraft-Server] Encountered an unexpected exception NullPointerException java.lang.NullPointerException at terramagna.utils.PlayerStatsUtil.onEntityJoinWorld(PlayerStatsUtil.java:27) at net.minecraftforge.event.ASMEventHandler_5_PlayerStatsUtil_onEntityJoinWorld_EntityJoinWorldEvent.invoke(.dynamic) at net.minecraftforge.event.ASMEventHandler.invoke(ASMEventHandler.java:39) at net.minecraftforge.event.EventBus.post(EventBus.java:108) at net.minecraft.world.World.spawnEntityInWorld(World.java:1572) at net.minecraft.server.management.ServerConfigurationManager.playerLoggedIn(ServerConfigurationManager.java:267) at net.minecraft.server.management.ServerConfigurationManager.initializeConnectionToPlayer(ServerConfigurationManager.java:136) at net.minecraft.server.integrated.IntegratedServerListenThread.networkTick(IntegratedServerListenThread.java:97) at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:689) at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:585) at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:129) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:482) at net.minecraft.server.ThreadMinecraftServer.run(ThreadMinecraftServer.java:16) 2013-09-13 22:51:32 [sEVERE] [Minecraft-Server] This crash report has been saved to: C:\Users\Kavin\Desktop\Programming\Java\Modding\Operation Terra Magna\forge859\mcp\jars\.\crash-reports\crash-2013-09-13_22.51.32-server.txt 2013-09-13 22:51:32 [iNFO] [Minecraft-Server] Stopping server 2013-09-13 22:51:32 [iNFO] [Minecraft-Server] Saving players 2013-09-13 22:51:32 [iNFO] [Minecraft-Server] Player951 left the game 2013-09-13 22:51:32 [iNFO] [Minecraft-Server] Saving worlds 2013-09-13 22:51:32 [iNFO] [Minecraft-Server] Saving chunks for level 'New World'/Overworld 2013-09-13 22:51:32 [iNFO] [sTDOUT] ---- Minecraft Crash Report ---- 2013-09-13 22:51:32 [iNFO] [sTDOUT] // I'm sorry, Dave. 2013-09-13 22:51:32 [iNFO] [sTDOUT] 2013-09-13 22:51:32 [iNFO] [sTDOUT] Time: 9/13/13 10:51 PM 2013-09-13 22:51:32 [iNFO] [sTDOUT] Description: Exception in server tick loop 2013-09-13 22:51:32 [iNFO] [sTDOUT] 2013-09-13 22:51:32 [iNFO] [sTDOUT] java.lang.NullPointerException 2013-09-13 22:51:32 [iNFO] [sTDOUT] at terramagna.utils.PlayerStatsUtil.onEntityJoinWorld(PlayerStatsUtil.java:27) 2013-09-13 22:51:32 [iNFO] [sTDOUT] at net.minecraftforge.event.ASMEventHandler_5_PlayerStatsUtil_onEntityJoinWorld_EntityJoinWorldEvent.invoke(.dynamic) 2013-09-13 22:51:32 [iNFO] [sTDOUT] at net.minecraftforge.event.ASMEventHandler.invoke(ASMEventHandler.java:39) 2013-09-13 22:51:32 [iNFO] [sTDOUT] at net.minecraftforge.event.EventBus.post(EventBus.java:108) 2013-09-13 22:51:32 [iNFO] [sTDOUT] at net.minecraft.world.World.spawnEntityInWorld(World.java:1572) 2013-09-13 22:51:32 [iNFO] [sTDOUT] at net.minecraft.server.management.ServerConfigurationManager.playerLoggedIn(ServerConfigurationManager.java:267) 2013-09-13 22:51:32 [iNFO] [sTDOUT] at net.minecraft.server.management.ServerConfigurationManager.initializeConnectionToPlayer(ServerConfigurationManager.java:136) 2013-09-13 22:51:32 [iNFO] [sTDOUT] at net.minecraft.server.integrated.IntegratedServerListenThread.networkTick(IntegratedServerListenThread.java:97) 2013-09-13 22:51:32 [iNFO] [sTDOUT] at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:689) 2013-09-13 22:51:32 [iNFO] [sTDOUT] at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:585) 2013-09-13 22:51:32 [iNFO] [sTDOUT] at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:129) 2013-09-13 22:51:32 [iNFO] [sTDOUT] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:482) 2013-09-13 22:51:32 [iNFO] [sTDOUT] at net.minecraft.server.ThreadMinecraftServer.run(ThreadMinecraftServer.java:16) http://pastebin.com/yzFYunLL Kain
September 14, 201312 yr Yes, those two code blocks are essentially the same. Some people prefer to not cast from one class to the other so pick whichever fits your code style. As for the newest crash, you should check if the world is null before trying to use it. It's possible that the world field in EntityJoinWorldEvent() hasn't been set before your override gets called. Also, try using event.entity.worldObj and see if that is null.
September 14, 201312 yr TLH: Set a breakpoint at the crash line and see what's null during runtime? If you guys dont get it.. then well ya.. try harder...
September 15, 201312 yr Try using this in your EntityJoinWorldEvent instead: if (event.entity instanceof EntityPlayer) { event.entity.getEntityData().setInteger("gold", 1000); // test to see if it worked: System.out.println("Player's gold: " + event.entity.getEntityData().getInteger("gold")); } 'getEntityData()' returns the NBT Tag Compound associated with the entity, be it player or whatever. Then you can set the gold directly like that if you want. You don't need to create all those other variables in your code, such as 'theNBT'. Just use the ones provided by the parameters. http://i.imgur.com/NdrFdld.png[/img]
September 15, 201312 yr Try using this in your EntityJoinWorldEvent instead: if (event.entity instanceof EntityPlayer) { event.entity.getEntityData().setInteger("gold", 1000); // test to see if it worked: System.out.println("Player's gold: " + event.entity.getEntityData().getInteger("gold")); } 'getEntityData()' returns the NBT Tag Compound associated with the entity, be it player or whatever. Then you can set the gold directly like that if you want. You don't need to create all those other variables in your code, such as 'theNBT'. Just use the ones provided by the parameters. The OP is using that event. I think the problem is that those objects have not been set yet when he / she is trying to access them. It's similar to how you can't access worldObj in the constructor of a TileEntity because it does not get set until after the constructor.
September 15, 201312 yr Author Ok, just rewrote my code so that it returns if anything is null. http://pastebin.com/ZdN6knXV Only problem now is that the NBT tag gets reset on death or when the player leaves the world and rejoins. Kain
September 15, 201312 yr Try using this in your EntityJoinWorldEvent instead: if (event.entity instanceof EntityPlayer) { event.entity.getEntityData().setInteger("gold", 1000); // test to see if it worked: System.out.println("Player's gold: " + event.entity.getEntityData().getInteger("gold")); } 'getEntityData()' returns the NBT Tag Compound associated with the entity, be it player or whatever. Then you can set the gold directly like that if you want. You don't need to create all those other variables in your code, such as 'theNBT'. Just use the ones provided by the parameters. The OP is using that event. I think the problem is that those objects have not been set yet when he / she is trying to access them. It's similar to how you can't access worldObj in the constructor of a TileEntity because it does not get set until after the constructor. All of those fields should already be initialized in EntityJoinWorldEvent. I use it all the time to set IExtendedEntityProperty data specifically because these same objects are available for use, whereas, as you've pointed out, are NOT available in a constructor or using the EntityConstructingEvent. @OP: I'd suggest taking a look at my tutorial on using IExtendedEntityProperties - there you will find a better way to add gold as well as get it to persist across player death and such. http://www.minecraftforum.net/topic/1952901-eventhandler-and-iextendedentityproperties/#entry24051513 http://i.imgur.com/NdrFdld.png[/img]
September 15, 201312 yr Author coolAlias: I got the idea of doing this from your tutorial, but I just want to use this way. Kain
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.