Jump to content

[1.16.1] Creating custom storage blocks


TheOnlyTails

Recommended Posts

There is no such thing as a row within inventories by default. All that matters is the size. This can be obtained simply with an IItemHandler capability on a TileEntity. As for the actual display, that's handled through Containers with Slots and ContainerScreens on the client. Two of these three can be added via a registry, one of them needs to be added using a static method in the client setup event, and it can be accessed through Block#onBlockActivated using NetworkHooks::openGui on the server. Please note that the above is referring to the logical client and server.

 

As for references, screens and containers are almost the same as vanilla. The only difference is in the TileEntity itself since IInventory should not be used. You can look at this updated patch of the docs to understand how to implement a capability. Come back when you have some code written out so that we may point you in the right direction with the necessary tools.

Link to comment
Share on other sites

Hello, first of all - I know that technically, inventories don't have rows. I wrote that by mistake.

Secondly, I learned a bit about storage blocks and stuff, and here's the code I came up with. I know it's not amazing, but I can optimize it later. Right now the problem is that when I open the block, if I put any item it and close the GUI, it's empty again when I open it next time.

 

Block: https://pastebin.com/9aTUEeNx

TileEntity: https://pastebin.com/dywyZ52

Link to comment
Share on other sites

Thank you so much. I would've never caught that bug.

The storage block now works, but with one flaw - the textures don't appear.

I think it has something to do with my blockstates and the fact that I'm trying to use 2 different models for when the block is open/closed.

 

Can you please help me with that? 

Here's my current code:

Block:  https://pastebin.com/MwbaQFYA

Blockstates: https://pastebin.com/y0MJrPr3

Closed model: https://pastebin.com/SW2iuG9h

Open model: https://pastebin.com/yv07NqYU

 

Thanks again!

Link to comment
Share on other sites

In your model files you are telling your models to search for the specified textures within the minecraft namespace, which of course fails because the textures are your custom ones. You have to replace "minecraft" with your modid in your "top", "bottom" and "side" textures locations

Check out the port of the BetterEnd fabric mod (WIP): https://www.curseforge.com/minecraft/mc-mods/betterend-forge-port

Link to comment
Share on other sites

48 minutes ago, TheOnlyTails said:

I am very stupid.

I wrote "block" instead of "blocks".

I changed it, and the textures now appears, but only the open model appears. Any idea why?

Edit: it also doesn't make a sound.

There should be some error in the log. Post it here.

Link to comment
Share on other sites

3 minutes ago, ChampionAsh5357 said:

Container#transferStackInSlot, the implementations of click handling should be already done by ContainerScreen, just need to override the resulting stack change.

What do you mean by that? If I use the same implementation of  transferStackInSlot() as the vanilla ChestContainer, would it work?

Link to comment
Share on other sites

Just now, ChampionAsh5357 said:

You need to override that method and handle it yourself. If you use the same implementation, it might work, it might not. Depends on how your slots are set up in the container.

I meant by that that I've overridden the method, and just used the exact same implementation as the ChestContainer class.

Link to comment
Share on other sites

5 minutes ago, TheOnlyTails said:

I can shift-click items into the storage block, but not vice versa.

Then it seems that your storage block doesn't check the inventory slots. Assuming your storage block takes up slot 0-8 (for example), you would need to check if the stack can merge to 9-44.Once again, this mainly depends on how the inventories were added to the slots.

Link to comment
Share on other sites

2 minutes ago, TheOnlyTails said:

So you're basically saying I need to increase this number to include the indexes of the main player inventory + hotbar.

Here's the logic:

if in storage -> try and merge to hotbar, if fail try to merge to inventory

else if in hotbar/inventory -> try and merge to storage

else if neither -> try and merge to inventory

 

I believe this is the logic used by vanilla iirc. But to answer your question more effectively, yes. You just need to include the indexes of the inventory/hotbar.

Link to comment
Share on other sites

1 hour ago, ChampionAsh5357 said:

Probably would help if your wrote your inventory to your tile entity nbt and read it from there.

And how would I do that?

 

Edit: never mind. I went to discord and someone helped me. Thank you so much for all of the help and patience!

Edited by TheOnlyTails
Link to comment
Share on other sites

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.