I made a custom gui that looks like the one from the furnace .
The inventory should not be saved and shoul be opened by and item.
It should only be an inventory where you can move items.
When I'm doing things in the player's inventory part everything goes well.
But when i put an item in the inventory of the dispenser and try to left click to it
the game crashes with an java.lang.NullPointerException: Rendering screen .
But when i left click+shift everything works.
I have no more ideas what to do . I hope you can help me .
Error Log:
GUI class:
package me.marnic.mod.gui;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.ITextComponent;
import net.minecraftforge.event.terraingen.BiomeEvent.GetWaterColor;
public class TestGui extends GuiContainer{
public TestGui(Container inventorySlotsIn) {
super(inventorySlotsIn);
// TODO Auto-generated constructor stub
}
final ResourceLocation loc = new ResourceLocation("m_mod","textures/gui/test_gui.png");
@Override
public boolean doesGuiPauseGame() {
return false;
}
@Override
public void drawScreen(int mouseX, int mouseY, float partialTicks) {
mc.getTextureManager().bindTexture(loc);
drawTexturedModalRect(width / 2 - 176 / 2, height / 2 - 166 / 2, 0, 0, 176, 166);
super.drawScreen(mouseX, mouseY, partialTicks);
}
@Override
protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
// TODO Auto-generated method stub
}
}
GUI Container:
package me.marnic.mod.gui;
import me.marnic.mod.item.BasicItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ClickType;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
public class TestGuiContainer extends Container
{
public TestGuiInventory inv;
public TestGuiContainer(IInventory playerInventory, TestGuiInventory dispenserInventoryIn)
{
this.inv = dispenserInventoryIn;
for (int i = 0; i < 3; ++i)
{
for (int j = 0; j < 3; ++j)
{
this.addSlotToContainer(new Slot(dispenserInventoryIn, j + i * 3, 62 + j * 18, 17 + i * 18));
}
}
for (int k = 0; k < 3; ++k)
{
for (int i1 = 0; i1 < 9; ++i1)
{
this.addSlotToContainer(new Slot(playerInventory, i1 + k * 9 + 9, 8 + i1 * 18, 84 + k * 18));
}
}
for (int l = 0; l < 9; ++l)
{
this.addSlotToContainer(new Slot(playerInventory, l, 8 + l * 18, 142));
}
}
/**
* Determines whether supplied player can use this container
*/
@Override
public boolean canInteractWith(EntityPlayer playerIn)
{
return true;
}
/**
* Handle when the stack in slot {@code index} is shift-clicked. Normally this moves the stack between the player
* inventory and the other inventory(s).
*/
@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 < 9)
{
if (!this.mergeItemStack(itemstack1, 9, 45, true))
{
return ItemStack.EMPTY;
}
}
else if (!this.mergeItemStack(itemstack1, 0, 9, false))
{
return ItemStack.EMPTY;
}
if (itemstack1.isEmpty())
{
slot.putStack(ItemStack.EMPTY);
}
else
{
slot.onSlotChanged();
}
if (itemstack1.getCount() == itemstack.getCount())
{
return ItemStack.EMPTY;
}
slot.onTake(playerIn, itemstack1);
}
return itemstack;
}
}
GUI Inventory:
package me.marnic.mod.gui;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.init.Items;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.text.ITextComponent;
import net.minecraftforge.items.IItemHandler;
public class TestGuiInventory implements IInventory{
public int SIZE = 9;
public NonNullList<ItemStack> items = NonNullList.withSize(SIZE, ItemStack.EMPTY);
InventoryPlayer p;
@Override
public String getName() {
// TODO Auto-generated method stub
return "GuiInv";
}
@Override
public boolean hasCustomName() {
// TODO Auto-generated method stub
return false;
}
@Override
public ITextComponent getDisplayName() {
// TODO Auto-generated method stub
return null;
}
@Override
public int getSizeInventory() {
// TODO Auto-generated method stub
return items.size();
}
@Override
public boolean isEmpty() {
for(ItemStack s:items) {
if(!s.isEmpty()) {
return false;
}
}
return true;
}
@Override
public ItemStack getStackInSlot(int index) {
// TODO Auto-generated method stub
return items.get(index);
}
@Override
public ItemStack decrStackSize(int index, int count) {
// TODO Auto-generated method stub
return null;
}
@Override
public ItemStack removeStackFromSlot(int index) {
// TODO Auto-generated method stub
return items.set(index, ItemStack.EMPTY);
}
@Override
public void setInventorySlotContents(int index, ItemStack stack) {
items.set(index, stack);
}
@Override
public int getInventoryStackLimit() {
// TODO Auto-generated method stub
return 64;
}
@Override
public void markDirty() {
// TODO Auto-generated method stub
}
@Override
public boolean isUsableByPlayer(EntityPlayer player) {
// TODO Auto-generated method stub
return player.getDistanceSq(player) <= 64.0D;
}
@Override
public void openInventory(EntityPlayer player) {
// TODO Auto-generated method stub
}
@Override
public void closeInventory(EntityPlayer player) {
// TODO Auto-generated method stub
}
@Override
public boolean isItemValidForSlot(int index, ItemStack stack) {
// TODO Auto-generated method stub
return true;
}
@Override
public int getField(int id) {
// TODO Auto-generated method stub
return 0;
}
@Override
public void setField(int id, int value) {
// TODO Auto-generated method stub
}
@Override
public int getFieldCount() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void clear() {
for(ItemStack s:items) {
s = ItemStack.EMPTY;
}
}
}
GUI Handler:
package me.marnic.mod.gui;
import me.marnic.mod.main.Main;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.network.IGuiHandler;
public class GUIHandler implements IGuiHandler{
public static int TEST_GUI = 0;
@Override
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
if(ID==TEST_GUI) {
return new TestGuiContainer(player.inventory,new TestGuiInventory());
}
return null;
}
@Override
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
if(ID==TEST_GUI) {
return new TestGui(new TestGuiContainer(player.inventory,new TestGuiInventory()));
}
return null;
}
}