Jump to content

Get Inventory of Container


L0raxeo

Recommended Posts

My Background:
I'm relatively new to Modding with Forge. I have done it once before when I was new to programming, however now I am attempting it again now that I have sophisticated knowledge on coding. However that does not mean I am extremely familiar with the libraries of Forge, which is most likely the reason for this post

 

Goal:

Getting the item of a container when shift-right clicked and comparing it to another item

 

Problem(s)

 

1. Is there an event that is called when I shift right click on a block?

2. How do I get an item from the inventory of my container (1 slot container)

 

It's actually a toilet and the toilet has a container which contains just 1 slot. What I want in the end is for you right click to open the toilet, put an item inside, exit the container, shift-right click to flush: flushing will turn the item inside the toilet into fertilizer 

 

Edited by L0raxeo
Link to comment
Share on other sites

2 hours ago, ChampionAsh5357 said:

So to address the points:

1. This is your block, do not use an event. You can just check if the player is sneaking within Block#use.

2. Use the capability on the tile entity or pass in the inventory itself to the server container.

Sorry I do not understand by what you mean when you say "Block#use". I googled it to no avail. Could you elaborate? Thanks for helping :)

Link to comment
Share on other sites

31 minutes ago, L0raxeo said:

Sorry I do not understand by what you mean when you say "Block#use". I googled it to no avail. Could you elaborate? Thanks for helping :)

Use your source to look within the AbstractBlock class for a method named 'use'. If you using the mcp mapping set over mojmaps, then that would be 'onBlockActivated' instead.

Link to comment
Share on other sites

11 minutes ago, ChampionAsh5357 said:

Use your source to look within the AbstractBlock class for a method named 'use'. If you using the mcp mapping set over mojmaps, then that would be 'onBlockActivated' instead.

Even though I didn't understand what to do with your first answer, it lead me to an even better way of accessing the toilet. I just set it to run the method onBlockClicked()! Sorry, but I'm having trouble understanding what you mean for #2. You say to "use teh capability on the tile entity". What does that even mean? I'm in the TileEntityToilet class. I just created a method:
 

public ItemStack[] getInventory() { return inventory; } // sorry I don't know how to do code notation on here I know how to do it on stackoverflow but not here (this is my first time using curseforge forums)

 

(Just making sure) This refers to the inventory of the container and not the player right? If it does refer to the inventory of the container, how do I access the specific slot? My best guess is that the first slot is 0 right? Well, my container only has one slot anyways, but I would refer to the slot as getInventory[0]? Thanks again :D

 

Also, the method being ran is onBlockClicked inside the BlockToilet class. Since that is the case, how do I access the method in TileEntityToilet (getInventory())? Should I make it static? However I woulda assume that would break it since there would be multiple instance of the block and not just one toilet. I was thinking there is like a this.getTileEntity() or something like that but I can't seem to find one. Any suggestions?

Edited by L0raxeo
Link to comment
Share on other sites

2 minutes ago, L0raxeo said:

public ItemStack[] getInventory() { return inventory; } // sorry I don't know how to do code notation on here I know how to do it on stackoverflow but not here (this is my first time using curseforge forums)

This is not how you add an inventory to a tile entity. It breaks mod compatibility. For this, you should use capabilities. Specifically, you'll want to use the IItemHandler capability and implement on your own TE ItemStackHandler. Containers have special slot handlers that take in an IItemHandler.

Link to comment
Share on other sites

Oh wait, sorry. My apologies, I don't think I made my situation clear. I've already added an inventory and everything. I can put items in it and take it out. I just need a way to compare the items in that one slot (that I've already coded), and to do that I need to get the inventory. I also am very new to these libraries (I just started using it a few days ago), so I'm sorry if I don't understand too easily). 

Here is a link to my code for the Tile Entity Toilet, so that you have a better understanding at where I'm at with coding the toilet. 

https://hatebin.com/kipucbzybk

and in my block class  (the one that extends to BlockContainer)currently has the onBlockClicked method. It's there that I want to get the inventory of the container (that I've already coded in), and also compare those contents to a specific item (although I think I know how to do that through the unlocalizedName)

Link to comment
Share on other sites

Just now, ChampionAsh5357 said:

The version of Forge you are using is not supported on the forums. The currently supported versions can be seen in the blue banner at the top of the page. Update to one of the above versions to receive support.

Oh :( that's unfortunate. Sorry to waste your time.

Link to comment
Share on other sites

  • Guest locked this topic
Guest
This topic is now closed to further replies.

Announcements



×
×
  • Create New...

Important Information

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