Posted May 30, 20169 yr I'm making a block which is essentially a furnace that runs off of another fuel and it has it's own recipes. Most of it works, except when I put in the either the fuel or the item which is being changed (whichever is inserted second) the game crashes. When I relog, however, the tile entity does the smelting process perfectly. When it crashes it gives me this error: java.lang.NullPointerException: Ticking block entity at com.headstack.magijern.block.InfusionMachine.setState(InfusionMachine.java:101) at com.headstack.magijern.tileentity.TileEntityInfusionMachine.update(TileEntityInfusionMachine.java:256) at net.minecraft.world.World.updateEntities(World.java:1936) at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:637) at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:779) at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:683) at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:155) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:532) at java.lang.Thread.run(Unknown Source) Here are the snippets where the errors happen: InfusionMachine.java (block) public static void setState(boolean active, World worldIn, BlockPos pos) { IBlockState iblockstate = worldIn.getBlockState(pos); TileEntity tileentity = worldIn.getTileEntity(pos); keepInventory = true; if (active) { worldIn.setBlockState(pos, Magijern.infusion_machine_lit.getDefaultState(), 3); <-- Line 101, where it errored worldIn.setBlockState(pos, Magijern.infusion_machine_lit.getDefaultState(), 3); } else { worldIn.setBlockState(pos, Magijern.infusion_machine.getDefaultState(), 3); worldIn.setBlockState(pos, Magijern.infusion_machine.getDefaultState(), 3); } keepInventory = false; if (tileentity != null) { tileentity.validate(); worldIn.setTileEntity(pos, tileentity); } } TileEntityInfusionMachine.java (tileentity) public void update() { boolean flag = this.isBurning(); boolean flag1 = false; if (this.isBurning()) { --this.furnaceBurnTime; } if (!this.worldObj.isRemote) { if (this.isBurning() || this.furnaceItemStacks[1] != null && this.furnaceItemStacks[0] != null) { if (!this.isBurning() && this.canSmelt()) { this.currentItemBurnTime = this.furnaceBurnTime = getItemBurnTime(this.furnaceItemStacks[1]); if (this.isBurning()) { flag1 = true; if (this.furnaceItemStacks[1] != null) { --this.furnaceItemStacks[1].stackSize; if (this.furnaceItemStacks[1].stackSize == 0) { this.furnaceItemStacks[1] = furnaceItemStacks[1].getItem().getContainerItem(furnaceItemStacks[1]); } } } } if (this.isBurning() && this.canSmelt()) { ++this.cookTime; if (this.cookTime == this.totalCookTime) { this.cookTime = 0; this.totalCookTime = this.getCookTime(this.furnaceItemStacks[0]); this.smeltItem(); flag1 = true; } } else { this.cookTime = 0; } } else if (!this.isBurning() && this.cookTime > 0) { this.cookTime = MathHelper.clamp_int(this.cookTime - 2, 0, this.totalCookTime); } if (flag != this.isBurning()) { flag1 = true; InfusionMachine.setState(this.isBurning(), this.worldObj, this.pos); // <-- Line 256, where it errored } } if (flag1) { this.markDirty(); } }
May 30, 20169 yr Author I'm making a block which is essentially a furnace that runs off of another fuel and it has it's own recipes. Most of it works, except when I put in the either the fuel or the item which is being changed (whichever is inserted second) the game crashes. When I relog, however, the tile entity does the smelting process perfectly. When it crashes it gives me this error: java.lang.NullPointerException: Ticking block entity at com.headstack.magijern.block.InfusionMachine.setState(InfusionMachine.java:101) at com.headstack.magijern.tileentity.TileEntityInfusionMachine.update(TileEntityInfusionMachine.java:256) at net.minecraft.world.World.updateEntities(World.java:1936) at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:637) at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:779) at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:683) at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:155) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:532) at java.lang.Thread.run(Unknown Source) Here are the snippets where the errors happen: InfusionMachine.java (block) public static void setState(boolean active, World worldIn, BlockPos pos) { IBlockState iblockstate = worldIn.getBlockState(pos); TileEntity tileentity = worldIn.getTileEntity(pos); keepInventory = true; if (active) { worldIn.setBlockState(pos, Magijern.infusion_machine_lit.getDefaultState(), 3); <-- Line 101, where it errored worldIn.setBlockState(pos, Magijern.infusion_machine_lit.getDefaultState(), 3); } else { worldIn.setBlockState(pos, Magijern.infusion_machine.getDefaultState(), 3); worldIn.setBlockState(pos, Magijern.infusion_machine.getDefaultState(), 3); } keepInventory = false; if (tileentity != null) { tileentity.validate(); worldIn.setTileEntity(pos, tileentity); } } TileEntityInfusionMachine.java (tileentity) public void update() { boolean flag = this.isBurning(); boolean flag1 = false; if (this.isBurning()) { --this.furnaceBurnTime; } if (!this.worldObj.isRemote) { if (this.isBurning() || this.furnaceItemStacks[1] != null && this.furnaceItemStacks[0] != null) { if (!this.isBurning() && this.canSmelt()) { this.currentItemBurnTime = this.furnaceBurnTime = getItemBurnTime(this.furnaceItemStacks[1]); if (this.isBurning()) { flag1 = true; if (this.furnaceItemStacks[1] != null) { --this.furnaceItemStacks[1].stackSize; if (this.furnaceItemStacks[1].stackSize == 0) { this.furnaceItemStacks[1] = furnaceItemStacks[1].getItem().getContainerItem(furnaceItemStacks[1]); } } } } if (this.isBurning() && this.canSmelt()) { ++this.cookTime; if (this.cookTime == this.totalCookTime) { this.cookTime = 0; this.totalCookTime = this.getCookTime(this.furnaceItemStacks[0]); this.smeltItem(); flag1 = true; } } else { this.cookTime = 0; } } else if (!this.isBurning() && this.cookTime > 0) { this.cookTime = MathHelper.clamp_int(this.cookTime - 2, 0, this.totalCookTime); } if (flag != this.isBurning()) { flag1 = true; InfusionMachine.setState(this.isBurning(), this.worldObj, this.pos); // <-- Line 256, where it errored } } if (flag1) { this.markDirty(); } }
May 30, 20169 yr A NullPointerException means you tried to call a method on or access a field of a null value. The only thing that could be null on line 101 of InfusionMachine is Magijern.infusion_machine_lit . Side note: I'd recommend using a single Block with a boolean property called something like LIT , there's no reason to have a separate Block for each state. Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.
May 30, 20169 yr A NullPointerException means you tried to call a method on or access a field of a null value. The only thing that could be null on line 101 of InfusionMachine is Magijern.infusion_machine_lit . Side note: I'd recommend using a single Block with a boolean property called something like LIT , there's no reason to have a separate Block for each state. Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.
May 30, 20169 yr Side note: I'd recommend using a single Block with a boolean property called something like LIT , there's no reason to have a separate Block for each state. The only reason Mojang has two blocks for the furnace (redstone ore, redstone lamp, redstone torch....) is because they weren't clever enough to figure out how to get blockstates to change lighting. Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
May 30, 20169 yr Side note: I'd recommend using a single Block with a boolean property called something like LIT , there's no reason to have a separate Block for each state. The only reason Mojang has two blocks for the furnace (redstone ore, redstone lamp, redstone torch....) is because they weren't clever enough to figure out how to get blockstates to change lighting. Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
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.