Jump to content

Containers of different sizes via subclassing or variables


Daeruin

Recommended Posts

I created a tile entity with inventory and a GUI. It was challenging to my amateur programming skills. Now I want to create several more containers of different sizes. I made my tile entity into an abstract class and create two subclasses to override the getSizeInventory and getName methods. That has worked fine so far—at least my original container now works by using one of the subclasses I created. I still haven't built the additional GUI to handle the different number of slots of the other subclass, or registered the block or created the texture, etc.

 

What I'm wondering is if I can instead create a variable to represent the number of inventory slots, set it in the tile entity's constructor, and use it in getSizeInventory rather than using a hard-set int value. I started along that path but didn't get very far, so I'm not sure if I was just dumb to try or if I'm missing something. It would be cool if I didn't have to subclass my tile entity a dozen times for all the different containers I want to make.

Link to comment
Share on other sites

Well obviously that is a yes but your constructor can't have any parameters, so a setter would work.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

but your constructor can't have any parameters

That's actually the first thing I tried. I assumed I could add a new field to my tile entity and pass the parameter into the constructor when returning a new tile entity in createNewTileEntity (in my container's block class). Why can't the constructor have any parameters?

 

If I used a setter, when and where would I invoke it?

Link to comment
Share on other sites

but your constructor can't have any parameters

That's actually the first thing I tried. I assumed I could add a new field to my tile entity and pass the parameter into the constructor when returning a new tile entity in createNewTileEntity (in my container's block class). Why can't the constructor have any parameters?

 

If I used a setter, when and where would I invoke it?

It can have a constructor with parameters, but it must have one with none because when the game is loaded it must instantiate them from world data.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

Hi

 

You can store information like that in the Tile Entity NBT

A working example is here

https://github.com/TheGreyGhost/MinecraftByExample

see mbe30

NUMBER_OF_SLOTS is a final int in this example, but you can load it from NBT like any other setting (see also mbe20 - TileEntityData for more examples of how to use NBT properly).

 

From memory, Vanilla does something similar when two side-by-side chests are combined together.

 

-TGG

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.