Posted September 29, 20204 yr 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?
September 29, 20204 yr 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.
October 1, 20204 yr 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
October 1, 20204 yr 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)!
October 1, 20204 yr 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!
October 1, 20204 yr 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
October 1, 20204 yr Author I changed it, yet the result is the same. Edited October 1, 20204 yr by TheOnlyTails
October 1, 20204 yr Make sure the name and location of your model files match those you specified in your blockstate json, and the name and location of your texture files match those specified inside the model jsons Check out the port of the BetterEnd fabric mod (WIP): https://www.curseforge.com/minecraft/mc-mods/betterend-forge-port
October 1, 20204 yr 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 October 1, 20204 yr by TheOnlyTails
October 1, 20204 yr 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.
October 1, 20204 yr 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.)?
October 1, 20204 yr 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.
October 1, 20204 yr 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?
October 1, 20204 yr 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.
October 1, 20204 yr 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.
October 1, 20204 yr 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.
October 1, 20204 yr Author OK, I'll just describe the current situation. I can shift-click items into the storage block, but not vice versa.
October 1, 20204 yr 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.
October 1, 20204 yr 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.
October 1, 20204 yr Author I understand. So you're basically saying I need to increase this number to include the indexes of the main player inventory + hotbar.
October 1, 20204 yr 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.
October 1, 20204 yr 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?
October 1, 20204 yr Probably would help if your wrote your inventory to your tile entity nbt and read it from there.
October 1, 20204 yr 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 October 1, 20204 yr 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.