Résolu Crash Null Pointer Exception
-
Salut, j’ai mis ce code dans mon container, j’ai fait un Gui, mais je voudrais que lorsqu’on met un sceau d’eau dans un slot (le n°1), ca le vide: ca change le contenu par un sceau vide, mais sans passer par un bouton ou autre.:
public void detectAndSendChanges() { if(tileEntity.getStackInSlot(1).getItem() == Items.water_bucket){ tileEntity.setContenu(1); tileEntity.setInventorySlotContents(1, new ItemStack(Items.bucket)); } }
mais je crash:
[22:44:02] [Server thread/ERROR]: Encountered an unexpected exception
net.minecraft.util.ReportedException: Ticking memory connection
at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:198) ~[NetworkSystem.class:?]
at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726) ~[MinecraftServer.class:?]
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) ~[MinecraftServer.class:?]
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) ~[IntegratedServer.class:?]
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?]
at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?]
Caused by: java.lang.NullPointerException
at com.harrypotter.sosoh.common.container.ContainerChaudron.detectAndSendChanges(ContainerChaudron.java:107) ~[ContainerChaudron.class:?]
at net.minecraft.inventory.Container.addCraftingToCrafters(Container.java:54) ~[Container.class:?]
at cpw.mods.fml.common.network.internal.FMLNetworkHandler.openGui(FMLNetworkHandler.java:88) ~[FMLNetworkHandler.class:?]
at com.harrypotter.sosoh.common.blocks.BlockChaudron.onBlockActivated(BlockChaudron.java:69) ~[BlockChaudron.class:?]
at net.minecraft.server.management.ItemInWorldManager.activateBlockOrUseItem(ItemInWorldManager.java:409) ~[ItemInWorldManager.class:?]
at net.minecraft.network.NetHandlerPlayServer.processPlayerBlockPlacement(NetHandlerPlayServer.java:593) ~[NetHandlerPlayServer.class:?]
at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:74) ~[C08PacketPlayerBlockPlacement.class:?]
at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:122) ~[C08PacketPlayerBlockPlacement.class:?]
at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) ~[NetworkManager.class:?]
at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182) ~[NetworkSystem.class:?]
… 5 more -
Essais :
public void detectAndSendChanges() { if(tileEntity.getStackInSlot(1).getItem() == Items.water_bucket && tileEntity.getStackInSlot(1).getItem() != null){ tileEntity.setContenu(1); tileEntity.setInventorySlotContents(1, new ItemStack(Items.bucket)); } }
EDIT : Celui la fonctionnera mieux ^^
public void detectAndSendChanges() { if(tileEntity.getStackInSlot(1).getItem() != null && tileEntity.getStackInSlot(1).getItem() == Items.water_bucket){ tileEntity.setContenu(1); tileEntity.setInventorySlotContents(1, new ItemStack(Items.bucket)); } }
-
Unknown, faudrait juste inverser les conditions de ton if pour que ce soit bon
Sent from my GT-I9000 using Tapatalk 2
-
Effectivement…
Dans le bon sens c’est mieux -_- Ca semble plus logique aussi x)
-
Je comprends pas pourquoi il faut Check si il n’est pas null on peut m’expliquer ?
-
Non, le null check n’ai pas bon. Ça ne devrait pas être :
tileEntity.getStackInSlot(1).getItem() != null
mais :
tileEntity.getStackInSlot(1) != null
Et il faut faire un null check pour la semble et bonne raison que si il n’y a pas d’item dans un slot, le contenu est null. Or si tu appelle une fonction depuis un objet null -> NPE