Jump to content

[1.15.2] Creating crafting GUIs


Beep

Recommended Posts

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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. 

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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

Link to comment
Share on other sites

This is a great source of examples for different subjects. There is code and readme for each of the examples.

 

https://github.com/TheGreyGhost/MinecraftByExample

 

You will probably want to look through the "Containers (Inventories)" examples. Links to the examples can be found by scrolling down the readme file.

 

Happy coding! 

Edited by WuestMan
grammer
Link to comment
Share on other sites

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!

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.