Jump to content

[1.10.2] {Solved!!!} Right-Click Item for Chest-like GUI


Recommended Posts

Posted

Your chest is causing a NullPointerException because you are constructing it with null as the tileEntity in your GuiHandler: https://github.com/EscapeMC/ThingsMod-1.10.2/blob/master/src/main/java/com/github/escapemc/thingsmod/handlers/GuiHandler.java#L29

 

I don't know the meaning of the other error, maybe someone else will be able to help.

 

Ah, I must have changed the chest part when I was angry with my bag, and not realizing it was actually my chest. Thanks for that! :D

 

Now, I need someone *cough Draco, animefan or diesse* to help me with this other part..

I Love To Help People. Unless They Are The Kind Of People Who Just Doesn't Know Anything. Those People Need Some Serious Help. This Could Help But......

https://www.youtube.com/watch?v=6t0GlXWx_PY

 

ThingsMod Git: https://github.com/EscapeMC/Things-Mod-1.10.2

 

TeamMadness Mod Git: https://github.com/EscapeMC/TeamMadness-Mod-1.10.2

 

If I somehow help you, please click the "Thank You" button. If I am a total waste of time, please click the "Applaud" button.

  • Replies 116
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted

Actually I think the problem is something to do with you passing your bag's inventory to the constructor twice, and not giving it the player inventory at all, and giving null as the player. https://github.com/EscapeMC/ThingsMod-1.10.2/blob/master/src/main/java/com/github/escapemc/thingsmod/container/ContainerTestBag.java#L17

 

I have this for my Chest and it worked, so I am not sure right now about that. I will wait for Draco or someone, but thanks! You've helped a lot

I Love To Help People. Unless They Are The Kind Of People Who Just Doesn't Know Anything. Those People Need Some Serious Help. This Could Help But......

https://www.youtube.com/watch?v=6t0GlXWx_PY

 

ThingsMod Git: https://github.com/EscapeMC/Things-Mod-1.10.2

 

TeamMadness Mod Git: https://github.com/EscapeMC/TeamMadness-Mod-1.10.2

 

If I somehow help you, please click the "Thank You" button. If I am a total waste of time, please click the "Applaud" button.

Posted

So yes, the chest is fixed. Not the bag. Any advice?

 

ALSO! I had to re-do my GitHub repositories, so the link to my GitHub is now https://github.com/EscapeMC/Things-Mod-1.10.2/tree/master/src/main/java/com/github/escapemc/thingsmod

 

I believe the only difference is the - xD

I Love To Help People. Unless They Are The Kind Of People Who Just Doesn't Know Anything. Those People Need Some Serious Help. This Could Help But......

https://www.youtube.com/watch?v=6t0GlXWx_PY

 

ThingsMod Git: https://github.com/EscapeMC/Things-Mod-1.10.2

 

TeamMadness Mod Git: https://github.com/EscapeMC/TeamMadness-Mod-1.10.2

 

If I somehow help you, please click the "Thank You" button. If I am a total waste of time, please click the "Applaud" button.

Posted

Oh, and one more thing, when I right click the bag, along with this error:

[17:11:17] [Client thread/FATAL]: Error executing task
java.util.concurrent.ExecutionException: java.lang.IndexOutOfBoundsException: Index: 46, Size: 46
at java.util.concurrent.FutureTask.report(FutureTask.java:122) ~[?:1.8.0_101]
at java.util.concurrent.FutureTask.get(FutureTask.java:192) ~[?:1.8.0_101]
at net.minecraft.util.Util.runTask(SourceFile:46) [util.class:?]
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1045) [Minecraft.class:?]
at net.minecraft.client.Minecraft.run(Minecraft.java:371) [Minecraft.class:?]
at net.minecraft.client.main.Main.main(SourceFile:124) [Main.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_101]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_101]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_101]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_101]
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_101]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_101]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_101]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_101]
at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
at GradleStart.main(GradleStart.java:26) [start/:?]
Caused by: java.lang.IndexOutOfBoundsException: Index: 46, Size: 46
at java.util.ArrayList.rangeCheck(ArrayList.java:653) ~[?:1.8.0_101]
at java.util.ArrayList.get(ArrayList.java:429) ~[?:1.8.0_101]
at net.minecraft.inventory.Container.getSlot(Container.java:113) ~[Container.class:?]
at net.minecraft.inventory.Container.putStacksInSlots(Container.java:554) ~[Container.class:?]
at net.minecraft.client.network.NetHandlerPlayClient.handleWindowItems(NetHandlerPlayClient.java:1146) ~[NetHandlerPlayClient.class:?]
at net.minecraft.network.play.server.SPacketWindowItems.processPacket(SourceFile:49) ~[sPacketWindowItems.class:?]
at net.minecraft.network.play.server.SPacketWindowItems.processPacket(SourceFile:11) ~[sPacketWindowItems.class:?]
at net.minecraft.network.PacketThreadUtil$1.run(SourceFile:13) ~[PacketThreadUtil$1.class:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_101]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_101]
at net.minecraft.util.Util.runTask(SourceFile:45) ~[util.class:?]
... 15 more

 

It also puts the item to my offhand, and duplicates it to top left inventory slot, and bottom left inventory slot.

I Love To Help People. Unless They Are The Kind Of People Who Just Doesn't Know Anything. Those People Need Some Serious Help. This Could Help But......

https://www.youtube.com/watch?v=6t0GlXWx_PY

 

ThingsMod Git: https://github.com/EscapeMC/Things-Mod-1.10.2

 

TeamMadness Mod Git: https://github.com/EscapeMC/TeamMadness-Mod-1.10.2

 

If I somehow help you, please click the "Thank You" button. If I am a total waste of time, please click the "Applaud" button.

Posted

Well yeah, because you told Super that you want the player's inventory twice. 

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.

Posted

Well yeah, because you told Super that you want the player's inventory twice.

 

So what must I do to fix this all?

I Love To Help People. Unless They Are The Kind Of People Who Just Doesn't Know Anything. Those People Need Some Serious Help. This Could Help But......

https://www.youtube.com/watch?v=6t0GlXWx_PY

 

ThingsMod Git: https://github.com/EscapeMC/Things-Mod-1.10.2

 

TeamMadness Mod Git: https://github.com/EscapeMC/TeamMadness-Mod-1.10.2

 

If I somehow help you, please click the "Thank You" button. If I am a total waste of time, please click the "Applaud" button.

Posted

Well, for one, your parent class expects two IInventory objects and constructs slots for both of them.

You need to not do that.

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.

Posted

Well, for one, your parent class expects two IInventory objects and constructs slots for both of them.

You need to not do that.

 

So to fix this would you say don't use/use a different parent class? (Copy the 9x5, say, and edit it accordingly?)

I Love To Help People. Unless They Are The Kind Of People Who Just Doesn't Know Anything. Those People Need Some Serious Help. This Could Help But......

https://www.youtube.com/watch?v=6t0GlXWx_PY

 

ThingsMod Git: https://github.com/EscapeMC/Things-Mod-1.10.2

 

TeamMadness Mod Git: https://github.com/EscapeMC/TeamMadness-Mod-1.10.2

 

If I somehow help you, please click the "Thank You" button. If I am a total waste of time, please click the "Applaud" button.

Posted

Ok wait. After looking over everything. I cannot figure out everything I need to do to.

 

Here is everything I think so far:

 

1) Make it so when I right click my test_bag it opens the Gui.

 

The onItemRightClick for test_bag

	@Override
public ActionResult<ItemStack> onItemRightClick(ItemStack itemStackIn, World worldIn, EntityPlayer playerIn, EnumHand hand) {

	playerIn.openGui(Main.instance, GuiHandler.TEST_BAG, worldIn, 0, 0, 0);

	return new ActionResult<ItemStack>(EnumActionResult.SUCCESS, itemStackIn);

}

}

 

and in my GuiHandler:

 

public class GuiHandler implements IGuiHandler {

public static final int TEST_CHEST = 37;
public static final int TEST_BAG = 38;




@Override
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
	BlockPos pos = new BlockPos(x, y, z);
	if(ID == TEST_CHEST) {
		TileEntity tileEntity = world.getTileEntity(pos);
		if(tileEntity instanceof TileEntityTestChest){
			return new ContainerTestChest(player.inventory, (TileEntityTestChest) tileEntity);
		}
	}
	if(ID == TEST_BAG) {
		return new ContainerTestBag(player.inventory);

	}
	return null;
}

@Override
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
	BlockPos pos = new BlockPos(x, y, z);
	if(ID == TEST_CHEST) {
		TileEntity tileEntity = world.getTileEntity(pos);
		if(tileEntity instanceof TileEntityTestChest){
			return new gui_test_chest(new ContainerTestChest(player.inventory, (TileEntityTestChest)tileEntity), (TileEntityTestChest) tileEntity);
		}
	if(ID == TEST_BAG) {	

		return new GuiTestBag(new ContainerTestBag(player.inventory));


	}

	}
	return null;
}

 

The Gui:

public class GuiTestBag extends GuiContainer {

private static ResourceLocation TEST_BAG_GUI_TEXTURE;


public GuiTestBag(Container inventorySlotsIn) {
	super(inventorySlotsIn);
	TEST_BAG_GUI_TEXTURE = new ResourceLocation("tm:textures/gui/container/test_bag.png");
	this.ySize = 141;
	this.xSize = 176;
}


@Override
protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
	this.fontRendererObj.drawString(new TextComponentTranslation("container.test_bag", new Object[0]).getUnformattedText(), 8, 3, 4210752);
	this.fontRendererObj.drawString(new TextComponentTranslation("container.inventory", new Object[0]).getUnformattedText(), 8, 48, 4210752);
}

@Override
protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
	GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f);

	this.mc.getTextureManager().bindTexture(TEST_BAG_GUI_TEXTURE);
	int x = (width - xSize) / 2;
	int y = (height - ySize) / 2;
	this.drawTexturedModalRect(x, y, 0, 0, xSize, ySize);

}
}

 

 

 

2) Get my container right (This does relate to #1)

 

The Container itself

package com.github.escapemc.thingsmod.container;

import com.github.escapemc.thingsmod.hardlib.api.internal.CommonContainerRightClickable;
import com.github.escapemc.thingsmod.hardlib.api.inventory.SlotItem;

import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.util.EnumHand;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;

public class ContainerTestBag extends CommonContainerRightClickable {
    private int numRows = 2;


public ContainerTestBag(InventoryPlayer inventory) {
	super(inventory, null);
	IItemHandler inven = inventory.player.getHeldItem(EnumHand.MAIN_HAND).getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null);

        for (int j = 0; j < this.numRows; ++j)
        {
            for (int k = 0; k < 9; ++k)
            {
                this.addSlotToContainer(new SlotItem(inven, k + j * 9, 8 + k * 18, 12 + j * 18));
            }
        }


	}
}

 

The CommonContainerRightClickable

package com.github.escapemc.thingsmod.hardlib.api.internal;

import javax.annotation.Nullable;

import com.github.escapemc.thingsmod.tileentity.TileEntityTestChest;

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;

public class CommonContainerRightClickable extends Container {


    private final int numRows;

    public CommonContainerRightClickable(IInventory playerInventory, EntityPlayer player)
    {
        this.numRows = playerInventory.getSizeInventory() / 9;
        int i = (this.numRows - 5) * 18;

        
	//Player Inventory
	for (int k = 0; k < 3; ++k) {
		for (int j = 0; j < 9; ++j) {
		this.addSlotToContainer(new Slot(playerInventory, j + k * 9 + 9, 8 + j * 18, 113 + k * 18));
		}

        //Player Hotbar
        for (int i1 = 0; i1 < 9; ++i1)
        {
            this.addSlotToContainer(new Slot(playerInventory, i1, 8 + i1 * 18, 189 + i));
        }
    }
}
@Override
    @Nullable
    public ItemStack transferStackInSlot(EntityPlayer playerIn, int index)
    {
        ItemStack itemstack = null;
        Slot slot = (Slot)this.inventorySlots.get(index);

        if (slot != null && slot.getHasStack())
        {
            ItemStack itemstack1 = slot.getStack();
            itemstack = itemstack1.copy();

            if (index < this.numRows * 9)
            {
                if (!this.mergeItemStack(itemstack1, this.numRows * 9, this.inventorySlots.size(), true))
                {
                    return null;
                }
            }
            else if (!this.mergeItemStack(itemstack1, 0, this.numRows * 9, false))
            {
                return null;
            }

            if (itemstack1.stackSize == 0)
            {
                slot.putStack((ItemStack)null);
            }
            else
            {
                slot.onSlotChanged();
            }
        }

        return itemstack;
    }

@Override
protected boolean mergeItemStack(ItemStack stack, int startIndex, int endIndex, boolean reverseDirection){
	boolean flag = false;
	int i = startIndex;
	if (reverseDirection) i = endIndex - 1;

	if (stack.isStackable()){
		while (stack.stackSize > 0 && (!reverseDirection && i < endIndex || reverseDirection && i >= startIndex)){
			Slot slot = (Slot)this.inventorySlots.get(i);
			ItemStack itemstack = slot.getStack();
			int maxLimit = Math.min(stack.getMaxStackSize(), slot.getSlotStackLimit());

			if (itemstack != null && areItemStacksEqual(stack, itemstack)){
				int j = itemstack.stackSize + stack.stackSize;
				if (j <= maxLimit){
					stack.stackSize = 0;
					itemstack.stackSize = j;
					slot.onSlotChanged();
					flag = true;

				}else if (itemstack.stackSize < maxLimit){
					stack.stackSize -= maxLimit - itemstack.stackSize;
					itemstack.stackSize = maxLimit;
					slot.onSlotChanged();
					flag = true;
				}
			}
			if (reverseDirection){ 
				--i;
			}else ++i;
		}
	}
	if (stack.stackSize > 0){
		if (reverseDirection){
			i = endIndex - 1;
		}else i = startIndex;

		while (!reverseDirection && i < endIndex || reverseDirection && i >= startIndex){
			Slot slot1 = (Slot)this.inventorySlots.get(i);
			ItemStack itemstack1 = slot1.getStack();

			if (itemstack1 == null && slot1.isItemValid(stack)){ // Forge: Make sure to respect isItemValid in the slot.
				if(stack.stackSize <= slot1.getSlotStackLimit()){
					slot1.putStack(stack.copy());
					slot1.onSlotChanged();
					stack.stackSize = 0;
					flag = true;
					break;
				}else{
					itemstack1 = stack.copy();
					stack.stackSize -= slot1.getSlotStackLimit();
					itemstack1.stackSize = slot1.getSlotStackLimit();
					slot1.putStack(itemstack1);
					slot1.onSlotChanged();
					flag = true;
				}					
			}
			if (reverseDirection){
				--i;
			}else ++i;
		}
	}
	return flag;
}

private static boolean areItemStacksEqual(ItemStack stackA, ItemStack stackB)
{
	return stackB.getItem() == stackA.getItem() && (!stackA.getHasSubtypes() || stackA.getMetadata() == stackB.getMetadata()) && ItemStack.areItemStackTagsEqual(stackA, stackB);
}

@Override
public boolean canInteractWith(EntityPlayer playerIn) {
	return true;
}
}

 

 

If you could tell me what is wrong with everything/anything, and tell me how to fix it, that would be great?

I Love To Help People. Unless They Are The Kind Of People Who Just Doesn't Know Anything. Those People Need Some Serious Help. This Could Help But......

https://www.youtube.com/watch?v=6t0GlXWx_PY

 

ThingsMod Git: https://github.com/EscapeMC/Things-Mod-1.10.2

 

TeamMadness Mod Git: https://github.com/EscapeMC/TeamMadness-Mod-1.10.2

 

If I somehow help you, please click the "Thank You" button. If I am a total waste of time, please click the "Applaud" button.

Posted

what is not working ??

 

When I right click my item it disappears and clones the item in the first hotbar slot to the top left and bottom left slots of the inventory and the side hand, and no Gui appears on the screen.

I Love To Help People. Unless They Are The Kind Of People Who Just Doesn't Know Anything. Those People Need Some Serious Help. This Could Help But......

https://www.youtube.com/watch?v=6t0GlXWx_PY

 

ThingsMod Git: https://github.com/EscapeMC/Things-Mod-1.10.2

 

TeamMadness Mod Git: https://github.com/EscapeMC/TeamMadness-Mod-1.10.2

 

If I somehow help you, please click the "Thank You" button. If I am a total waste of time, please click the "Applaud" button.

Posted

got it working WOOT

note i did change a couple things in there

    @Override
    public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
        TileEntity tileEntity = world.getTileEntity(new BlockPos(x, y, z));
        switch (ID){
            case TEST_CHEST:
                return new ContainerTestChest(player, (TileEntityTestChest) tileEntity);
            case TEST_BAG:
                return new ContainerTestBag(player);
        }
        return null;
    }

    @Override
    public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
        TileEntity tileEntity = world.getTileEntity(new BlockPos(x, y, z));
        switch (ID) {
            case TEST_CHEST:
                return new gui_test_chest(new ContainerTestChest(player, (TileEntityTestChest)tileEntity), (TileEntityTestChest) tileEntity);
            case TEST_BAG:
                return new GuiTestBag(new ContainerTestBag(player));
        }
        return null;
    }

Posted

it is better to set the stacksize for the bag to 1

 

I did this while waiting.

 

 

 

 

As to your code you posted:

I copy-pasta that, and I get several errors all saying "The constructor is undefined"

 

The constructor ContainerTestChest(EntityPlayer, TileEntityTestChest) is undefined

 

The constructor ContainerTestBag(EntityPlayer) is undefined

 

then in client

 

The constructor ContainerTestChest(EntityPlayer, TileEntityTestChest) is undefined

 

The constructor ContainerTestBag(EntityPlayer) is undefined

 

 

 

I Love To Help People. Unless They Are The Kind Of People Who Just Doesn't Know Anything. Those People Need Some Serious Help. This Could Help But......

https://www.youtube.com/watch?v=6t0GlXWx_PY

 

ThingsMod Git: https://github.com/EscapeMC/Things-Mod-1.10.2

 

TeamMadness Mod Git: https://github.com/EscapeMC/TeamMadness-Mod-1.10.2

 

If I somehow help you, please click the "Thank You" button. If I am a total waste of time, please click the "Applaud" button.

Posted

try to fix it your self it is not hard

 

xD it was easy. player.inventory.... duh!

 

Thank you so much to loordgek, Animefan, Prazzle, Draco, and everyone who helped me with this task! :D

I Love To Help People. Unless They Are The Kind Of People Who Just Doesn't Know Anything. Those People Need Some Serious Help. This Could Help But......

https://www.youtube.com/watch?v=6t0GlXWx_PY

 

ThingsMod Git: https://github.com/EscapeMC/Things-Mod-1.10.2

 

TeamMadness Mod Git: https://github.com/EscapeMC/TeamMadness-Mod-1.10.2

 

If I somehow help you, please click the "Thank You" button. If I am a total waste of time, please click the "Applaud" button.

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements




×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.