Hello everyone, I am very new to modding, and I have been following MCJty's modding tutorials and I haven't been able to figure out why it keeps crashing when I try to open my custom gui.
Here is the latest crash report:
---- Minecraft Crash Report ----
// You should try our sister game, Minceraft!
Time: 2/24/19 5:20 PM
Description: Ticking player
java.lang.NullPointerException: Ticking player
at net.minecraftforge.items.SlotItemHandler.getStack(SlotItemHandler.java:79)
at net.minecraft.inventory.Container.detectAndSendChanges(Container.java:97)
at net.minecraft.entity.player.EntityPlayerMP.onUpdate(EntityPlayerMP.java:365)
at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2171)
at net.minecraft.world.WorldServer.updateEntityWithOptionalForce(WorldServer.java:871)
at net.minecraft.world.World.updateEntity(World.java:2130)
at net.minecraft.world.WorldServer.tickPlayers(WorldServer.java:672)
at net.minecraft.world.World.updateEntities(World.java:1906)
at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:643)
at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:842)
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:743)
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:192)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:592)
at java.lang.Thread.run(Thread.java:748)
A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------
-- Head --
Thread: Server thread
Stacktrace:
at net.minecraftforge.items.SlotItemHandler.getStack(SlotItemHandler.java:79)
at net.minecraft.inventory.Container.detectAndSendChanges(Container.java:97)
at net.minecraft.entity.player.EntityPlayerMP.onUpdate(EntityPlayerMP.java:365)
at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2171)
at net.minecraft.world.WorldServer.updateEntityWithOptionalForce(WorldServer.java:871)
at net.minecraft.world.World.updateEntity(World.java:2130)
-- Player being ticked --
Details:
Entity Type: null (net.minecraft.entity.player.EntityPlayerMP)
Entity ID: 1169
Entity Name: Player12
Entity's Exact location: -0.38, 64.00, 134.28
Entity's Block location: World: (-1,64,134), Chunk: (at 15,4,6 in -1,8; contains blocks -16,0,128 to -1,255,143), Region: (-1,0; contains chunks -32,0 to -1,31, blocks -512,0,0 to -1,255,511)
Entity's Momentum: 0.00, -0.08, 0.00
Entity's Passengers: []
Entity's Vehicle: ~~ERROR~~ NullPointerException: null
Stacktrace:
at net.minecraft.world.WorldServer.tickPlayers(WorldServer.java:672)
at net.minecraft.world.World.updateEntities(World.java:1906)
at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:643)
-- Affected level --
Details:
Level name: Test World 4
All players: 1 total; [EntityPlayerMP['Player12'/1169, l='Test World 4', x=-0.38, y=64.00, z=134.28]]
Chunk stats: ServerChunkCache: 625 Drop: 0
Level seed: 7944287069950578853
Level generator: ID 00 - default, ver 1. Features enabled: true
Level generator options:
Level spawn location: World: (2,64,133), Chunk: (at 2,4,5 in 0,8; contains blocks 0,0,128 to 15,255,143), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511)
Level time: 632 game time, 632 day time
Level dimension: 0
Level storage version: 0x04ABD - Anvil
Level weather: Rain time: 21371 (now: false), thunder time: 91626 (now: false)
Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: true
Stacktrace:
at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:842)
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:743)
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:192)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:592)
at java.lang.Thread.run(Thread.java:748)
-- System Details --
Details:
Minecraft Version: 1.12.2
Operating System: Windows 10 (amd64) version 10.0
Java Version: 1.8.0_191, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 582999192 bytes (555 MB) / 1038876672 bytes (990 MB) up to 1038876672 bytes (990 MB)
JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
IntCache: cache: 0, tcache: 0, allocated: 13, tallocated: 95
FML: MCP 9.42 Powered by Forge 14.23.5.2815 7 mods loaded, 7 mods active
States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
| State | ID | Version | Source | Signature |
|:------ |:----------- |:------------ |:-------------------------------- |:--------- |
| LCHIJA | minecraft | 1.12.2 | minecraft.jar | None |
| LCHIJA | mcp | 9.42 | minecraft.jar | None |
| LCHIJA | FML | 8.0.99.99 | forgeSrc-1.12.2-14.23.5.2815.jar | None |
| LCHIJA | forge | 14.23.5.2815 | forgeSrc-1.12.2-14.23.5.2815.jar | None |
| LCHIJA | mymod | 0.0.1 | bin | None |
| LCHIJA | jei | 4.14.4.264 | jei_1.12.2-4.14.4.264.jar | None |
| LCHIJA | theoneprobe | 1.4.28 | theoneprobe-1.12-1.4.28.jar | None |
Loaded coremods (and transformers):
GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.
Here is my Block file:
package skylord11.mymod.furnace;
import net.minecraft.block.Block;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.PropertyDirection;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import skylord11.mymod.MyMod;
public class BlockFastFurnace extends Block implements ITileEntityProvider {
public static final PropertyDirection FACING = PropertyDirection.create("facing");
public static final ResourceLocation FAST_FURNACE = new ResourceLocation(MyMod.MODID, "fast_furnace");
public BlockFastFurnace() {
super(Material.IRON);
// mymod:furnace
setRegistryName(FAST_FURNACE);
setUnlocalizedName(MyMod.MODID + ".fast_furnace");
setHarvestLevel("pickaxe", 1);
setCreativeTab(MyMod.creativeTab);
setDefaultState(blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH));
}
@Override
public TileEntity createNewTileEntity(World worldIn, int meta) {
return new TileFastFurnace();
}
@Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
// Only execute on the server
if (world.isRemote) {
return true;
}
TileEntity te = world.getTileEntity(pos);
if (!(te instanceof TileFastFurnace)) {
return false;
}
player.openGui(MyMod.instance, 0, world, pos.getX(), pos.getY(), pos.getZ());
return true;
}
@SideOnly(Side.CLIENT)
public void initModel() {
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(this), 0, new ModelResourceLocation(getRegistryName(), "inventory"));
}
@Override
public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) {
return this.getDefaultState().withProperty(FACING, EnumFacing.getDirectionFromEntityLiving(pos, placer));
}
@Override
protected BlockStateContainer createBlockState() {
return new BlockStateContainer(this, FACING);
}
@Override
public IBlockState getStateFromMeta(int meta) {
return this.getDefaultState().withProperty(FACING, EnumFacing.getFront(meta & 7));
}
@Override
public int getMetaFromState(IBlockState state) {
return state.getValue(FACING).getIndex();
}
}
Here is my Container file:
package skylord11.mymod.furnace;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.SlotItemHandler;
public class ContainerFastFurnace extends Container {
private TileFastFurnace te;
public ContainerFastFurnace(IInventory playerInventory, TileFastFurnace te) {
this.te = te;
addOwnSlots();
addPlayerSlots(playerInventory);
}
private void addPlayerSlots(IInventory playerInventory) {
//Slots for the main inventory
for (int row = 0; row < 3; ++row) {
for (int col = 0; col <3; ++col) {
int x = 9 + col * 18;
int y = row * 18 + 70;
this.addSlotToContainer(new Slot(playerInventory, col + row * 9 + 18, x, y));
}
}
//Slots for the hotbar
for (int row = 0; row < 9; ++row) {
int x = 9 + row * 18;
int y = 58 + 70;
this.addSlotToContainer(new Slot(playerInventory, row, x, y));
}
}
private void addOwnSlots() {
IItemHandler itemHandler = this.te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null);
int x = 10;
int y = 26;
int slotIndex = 0;
addSlotToContainer(new SlotItemHandler(itemHandler, slotIndex++, x, y)); x += 18;
addSlotToContainer(new SlotItemHandler(itemHandler, slotIndex++, x, y)); x += 18;
addSlotToContainer(new SlotItemHandler(itemHandler, slotIndex++, x, y));
x = 118;
addSlotToContainer(new SlotItemHandler(itemHandler, slotIndex++, x, y)); x += 18;
addSlotToContainer(new SlotItemHandler(itemHandler, slotIndex++, x, y)); x += 18;
addSlotToContainer(new SlotItemHandler(itemHandler, slotIndex++, x, y));
// Add our own slots
}
@Override
public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) {
ItemStack itemstack = ItemStack.EMPTY;
Slot slot = this.inventorySlots.get(index);
if (slot != null && slot.getHasStack()) {
ItemStack itemstack1 = slot.getStack();
itemstack = itemstack1.copy();
if (index < TileFastFurnace.SIZE) {
if (!this.mergeItemStack(itemstack1, TileFastFurnace.SIZE, this.inventorySlots.size(), true)) {
return ItemStack.EMPTY;
}
} else if (!this.mergeItemStack(itemstack1, 0, TileFastFurnace.SIZE, false)) {
return ItemStack.EMPTY;
}
if (itemstack1.isEmpty()) {
slot.putStack(ItemStack.EMPTY);
} else {
slot.onSlotChanged();
}
}
return itemstack;
}
@Override
public boolean canInteractWith(EntityPlayer playerIn) {
return te.canInteractWith(playerIn);
}
}
Here is my GUI file:
package skylord11.mymod.furnace;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.util.ResourceLocation;
import skylord11.mymod.MyMod;
public class GuiFastFurnace extends GuiContainer {
public static final int WIDTH = 180;
public static final int HEIGHT = 152;
private static final ResourceLocation background = new ResourceLocation(MyMod.MODID, "gui/fast_furnace.png");
public GuiFastFurnace(TileFastFurnace tileEntity, ContainerFastFurnace container) {
super(container);
xSize = WIDTH;
ySize = HEIGHT;
}
@Override
protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
mc.getTextureManager().bindTexture(background);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
}
}
And here is my Tile file:
package skylord11.mymod.furnace;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.ItemStackHandler;
public class TileFastFurnace extends TileEntity {
public static final int SIZE = 3 + 3;
private ItemStackHandler itemStackHandler = new ItemStackHandler(SIZE) {
protected void onContentsChanged(int slot) {
TileFastFurnace.this.markDirty();
}
};
@Override
public void readFromNBT(NBTTagCompound compound) {
super.readFromNBT(compound);
if (compound.hasKey("items")) {
itemStackHandler.deserializeNBT((NBTTagCompound) compound.getTag("items"));
}
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound compound) {
super.writeToNBT(compound);
compound.setTag("items", itemStackHandler.serializeNBT());
return compound;
}
public boolean canInteractWith(EntityPlayer playerIn) {
// If we are too far away from this tile entity you cannot use it
return !isInvalid() && playerIn.getDistanceSq(pos.add(0.5D, 0.5D, 0.5D)) <= 64D;
}
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
return true;
}
return super.hasCapability(capability, facing);
}
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(itemStackHandler)) {
return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(itemStackHandler);
}
return super.getCapability(capability, facing);
}
}
Help would be appreciated!