Jump to content

Recommended Posts

Posted

I'm trying to understand how to do custom crafting GUIs. I have a custom method for my crafting block and I can make things happen when it's activated but I can't figure out how crafting inventories work. Is there a guide somewhere that I am missing? I know that it has changed from 1.12 which used to use the openGui() method, but I'm not sure how the updated system works.

Posted
1 minute ago, DragonITA said:

Try to see Vanilla code

I've looked at the onBlockActivated method in the vanilla crafting table, but i'm not sure how much of it applies and what changes I need to make. So far, I've copy/pasted the onBlockActivated() method into my block's class, as well as the getContainer() method and ITextComponent field since they are both needed for onBlockActivated, and it almost recreated the vanilla crafting table but whenever I click on the block the inventory closes instantly. Progress, but not quite where I need to be.

 

My current tasks are:

-figure out how to keep the crafting GUI from closing instantly when it is opened

-figure out how to create a new crafting GUI rather than the pre-existing crafting table

Posted
5 minutes ago, MyRedAlien43 said:

NetworkHooks.openGui

 

Thanks! I'm looking at the method now and I'll see if I can figure it out.

Posted
2 minutes ago, MyRedAlien43 said:

You need to link the container and the screen (aka Gui) Using a method in ScreenManager using a method that i cant remember

gimmi a sec to go look in ScreenManager

Posted

Okay, ScreenManager has openScreen, getScreenFactory, getFactory, and registerFactory. There's also createScreen. I'm not sure which one you are referring to, I can't quite understand what they do well enough to see which one links the container and the screen

Posted
1 minute ago, Beep said:

Okay, ScreenManager has openScreen, getScreenFactory, getFactory, and registerFactory. There's also createScreen. I'm not sure which one you are referring to, I can't quite understand what they do well enough to see which one links the container and the screen

Its registerFactory

Posted
3 minutes ago, MyRedAlien43 said:

Its registerFactory

looking at the method, I'm not quite sure how to use it, I'll be honest. I can figure out that exampleMethod(int a, Object b) needs an int and an object as an input, but I'm not sure what registerFactory(ContainerType<? extends M> type, ScreenManager.IScreenFactory<M, U> factory) requires, or how to decipher it. I'm not that knowledgeable with Java unfortunately. 

Posted
11 minutes ago, Beep said:

looking at the method, I'm not quite sure how to use it

Have you tried searching the forums here for "registerFactory" and see what results you get? :)

Posted
Just now, Ugdhar said:

Have you tried searching the forums here for "registerFactory" and see what results you get? :)

I have, and so far I've got that it needs to be called in FMLClientSetupEvent in my main method, which is definitely something I needed to know but not quite what I was looking for. 
Also, I understand that the inputs are ContainerType<? extends M> type and ScreenManager.IScreenFactory<M, U> factory, but I don't know how to make a new ContainerType or IScreenFactory. Most questions based around that method seem to be asking things at a level I am not at. I'm still looking but I'm not understanding it so far

Posted (edited)
10 minutes ago, Beep said:

I have, and so far I've got that it needs to be called in FMLClientSetupEvent in my main method, which is definitely something I needed to know but not quite what I was looking for. 
Also, I understand that the inputs are ContainerType<? extends M> type and ScreenManager.IScreenFactory<M, U> factory, but I don't know how to make a new ContainerType or IScreenFactory. Most questions based around that method seem to be asking things at a level I am not at. I'm still looking but I'm not understanding it so far

An IScreenFactory basically requires a reference to the screen class constructor (e.g. ScreenClass::new), and you can look in ContainerType to see how you make one

Edited by MyRedAlien43
Posted
18 minutes ago, MyRedAlien43 said:

An IScreenFactory basically requires a reference to the screen class constructor (e.g. ScreenClass::new), and you can look in ContainerType to see how you make one

I really appreciate your help. Honestly, I think I'm just not good enough at Java to be able to figure a lot of this out. I think the best option for me right now is to stick to making new crafting recipes, as it will get the job done for now. I'll either have to wait until I understand java better, or until someone makes a comprehensive guide for people like me

Posted
14 hours ago, Beep said:

I've looked at the onBlockActivated method in the vanilla crafting table, but i'm not sure how much of it applies and what changes I need to make. So far, I've copy/pasted the onBlockActivated() method into my block's class, as well as the getContainer() method and ITextComponent field since they are both needed for onBlockActivated, and it almost recreated the vanilla crafting table but whenever I click on the block the inventory closes instantly. Progress, but not quite where I need to be.

 

My current tasks are:

-figure out how to keep the crafting GUI from closing instantly when it is opened

-figure out how to create a new crafting GUI rather than the pre-existing crafting table

 

See/read this:

On 11/29/2019 at 10:06 AM, diesieben07 said:

Anything that can produce a PNG. I can recommend GIMP as a free software.

 

There are a few parts to a GUI:

  • A Screen class (use your IDE to look at Minecraft's ones)
  • It's texture (Minecraft's ones are in assets/minecraft/textures, again use your IDE)
  • If you need an inventory in the GUI as well:
    • A Container class
    • Your Screen needs to be a ContainerScreen.
    • You need to register your screen with ScreenManager.
    • You need to open your screen using NetworkHooks.openGui on the server.

 

New in Modding? == Still learning!

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.