Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

I'm trying to create a custom barrel with more rows, but every attempt so far has ended on me giving up and starting all over.

Is there a tutorial/guide on how to create them for 1.16/1.15?

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.

  • Author

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

  • Author

I understand. I thought this is a utility method to create a container.

Thanks! Time to make a custom container (don't worry I already know how)!

  • Author

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!

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

  • Author

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.

Edited by TheOnlyTails

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.

  • Author

I ended up fixing it - I had to change it in the container.

Btw, is there a way to implement all of the mouse shortcuts (like shift-clicking, etc.)?

58 minutes ago, TheOnlyTails said:

Btw, is there a way to implement all of the mouse shortcuts

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

  • Author
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?

10 minutes ago, TheOnlyTails said:

What do you mean by that?

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.

  • Author
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.

7 minutes ago, ChampionAsh5357 said:

If you use the same implementation, it might work, it might not. Depends on how your slots are set up in the container.

I answered that as well.

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.

So your slots cover 0-44, player inventory is 45-71, and hotbar 72-80. Your transfer method override only checks if index is storage, move to storage, else try and merge to storage. So you don't have any logic to move into the player inventory.

  • Author

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

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.

  • Author

Well - It now works.

But guess what? I discovered another problem!

Logging out and then in again clears the inventory of the block. Any idea why that may be?

  • Author
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

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...

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.