Jump to content

TileEntity with inventory and GUI


tebreca

Recommended Posts

Hello mcForge modding community, i'm not really known with 1.12 TileEntities and i am currently working on TileEntities with inventory and gui, i found a tutorial on shadowfact's website about it but i dont really understand the code so could someone send me some good tutorial for it?

 

PS: I dont want to use vanilla classes because i know that forge has a better alterative then the IInventory from minecraft itsself.

 

GitHub: https://github.com/Eaglesmoddingteam/Back-to-Eco 

Edited by tebreca
Link to comment
Share on other sites

I dont really understand the part of creating the instance of the container, drawing the inventory, i got a advanced inventory looking like this

I get that he draws the inventory but i cant really get how i add the places in my own inventory gui and do the progression bar 

 

i also cant find anything i at the docs

Link to comment
Share on other sites

An inventory or GUI consists out of two things. The main Client side GuiContainer and the server side container.  These are bound together with a guiHandler 

 

With the handler you're basically connecting the two. The way to add 'slots' to your GUI is to add slots to the container. You're using 

SlotItemHandler

for your custom inventory .Which is the proper way to do it. 

 

Your problem might be that you haven't implemented an IGuiHandler. At least I can't find it in your GitHub. I might be blind.

 

 

Anyway, to draw the bar you'll want to pass a variable with the percentage done to the client side guiContainer. Then use a 

 

drawTexturedModalRect(xPosition, yPosition, xStart, yStart, x, y);

 

to draw the arrow. The way you do this is to set the 'start' of the draw texture to the left top corner of your texture. Then make the x the 'percentage' of your arrow. If the arrow is 50 pixels long and your machine is 50% done you set the x to 50*percentage where the double percentage is equal to 0.5

 

I'm writing from my phone. But I think that should be enough to get you going. 

 

 

Edit: When you pass a variable as '50' instead of a value with decimals and divide it by 100 to get a multiplier. Make sure you're using a double and casting one of the numbers to double so you actually GET a double.  I know you probably already know this since it's basic. But I made the mistake once and when you do, you only get 1 or 0, don't be a dummy.

Edited by oldcheese
Use a double.
  • Like 1
Link to comment
Share on other sites

26 minutes ago, oldcheese said:

An inventory or GUI consists out of two things. The main Client side GuiContainer and the server side container.  These are bound together with a guiHandler 

 

With the handler you're basically connecting the two. The way to add 'slots' to your GUI is to add slots to the container. You're using 


SlotItemHandler

for your custom inventory .Which is the proper way to do it. 

 

Your problem might be that you haven't implemented an IGuiHandler. At least I can't find it in your GitHub. I might be blind.

 

 

Anyway, to draw the bar you'll want to pass a variable with the percentage done to the client side guiContainer. Then use a 

 


drawTexturedModalRect(xPosition, yPosition, xStart, yStart, x, y);

 

to draw the arrow. The way you do this is to set the 'start' of the draw texture to the left top corner of your texture. Then make the x the 'percentage' of your arrow. If the arrow is 50 pixels long and your machine is 50% done you set the x to 50*percentage where the double percentage is equal to 0.5

 

I'm writing from my phone. But I think that should be enough to get you going. 

thx, that was some handy info,i think i can figure it out myselves, only how can i adjust where the boxes are going to be in the container/gui?

Link to comment
Share on other sites

With boxes do you mean slots?

 

when you add a slot to your container like such: 

			for (int i = 0; i < 3; i++) {
				for (int j = 0; j < 9; j++) {
					addSlotToContainer(new Slot(playerInv, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
				}
			}

you're doing the following: You add 3 rows with each 9 slots. Every time i increases it goes 18 pixels down (slots are 18 big, 2 pixels around the 16 width item.) and every time j increases it goes 18 pixels to the right for the same reasons.

The second value is the index, this is increased by 1 for every new slot basically. So every i adds 9, every j adds 1. 

addSlotToContainer(new Slot(inventoryToUse, slotIndex, xCoordinate, yCoordinate));

 

basically  the slotindex is the index of the slot within the inventory. Vanilla inventory uses 0-35 for the items with 0-8 being the hotbar. slots 35-38 are armour.

 

the xCoordinate is the spot within your GUI where you want to put your slot. The y Coordinate is the height from the top where your slot is. 

 

When you draw your Container the point '0' in x and y are the top left corner. in the GuiContainer (client side) you want to make your own 0 point, since 0 is the top left corner of the screen, not the gui.

 

You have already declared the two variables for x and y in your gui using the following code however :

		int x = (width - xSize) / 2;
		int y = (height - ySize) / 2;

 

so if you want something in the GuiContainer to be 15 pixels to the right and 10 pixels down(From the top left corner of your gui) you want to use 

 

drawTexturedModalRect(x+15, y+10, startOfTextureX, startOfTextureY, rectWidth, rectHeight);

 

obviously if you want something to be in the corner of the screen you can just use 0 instead of x+number

 

 

To clarify. the Container is your class extending container. the GuiContainer is the class extending GuiContainer. You probably know this. I'm just clarifying.

Edited by oldcheese
As draco said. Slots are 18 big, ITEMS are 16 big.
  • Like 1
Link to comment
Share on other sites

15 minutes ago, oldcheese said:

With boxes do you mean slots?

 

when you add a slot to your container like such: 


			for (int i = 0; i < 3; i++) {
				for (int j = 0; j < 9; j++) {
					addSlotToContainer(new Slot(playerInv, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
				}
			}

you're doing the following: You add 3 rows with each 9 slots. Every time i increases it goes 18 pixels down (slots are 16 big, 2 pixels between the rows) and every time j increases it goes 18 pixels to the right for the same reasons.

The second value is the index, this is increased by 1 for every new slot basically. So every i adds 9, every j adds 1. 


addSlotToContainer(new Slot(inventoryToUse, slotIndex, xCoordinate, yCoordinate));

 

basically  the slotindex is the index of the slot within the inventory. Vanilla inventory uses 0-35 for the items with 0-8 being the hotbar. slots 35-38 are armour.

 

the xCoordinate is the spot within your GUI where you want to put your slot. The y Coordinate is the height from the top where your slot is. 

 

When you draw your Container the point '0' in x and y are the top left corner. in the GuiContainer (client side) you want to make your own 0 point, since 0 is the top left corner of the screen, not the gui.

 

You have already declared the two variables for x and y in your gui using the following code however :


		int x = (width - xSize) / 2;
		int y = (height - ySize) / 2;

 

so if you want something in the GuiContainer to be 15 pixels to the right and 10 pixels down(From the top left corner of your gui) you want to use 

 


drawTexturedModalRect(x+15, y+10, startOfTextureX, startOfTextureY, rectWidth, rectHeight);

 

obviously if you want something to be in the corner of the screen you can just use 0 instead of x+number

 

 

To clarify. the Container is your class extending container. the GuiContainer is the class extending GuiContainer. You probably know this. I'm just clarifying.

thx, yes i meant the boxes

Link to comment
Share on other sites

2 minutes ago, tebreca said:

thx, yes i meant the boxes

No problem. If you have another problem in the future or can't get it to work, feel free to post again. Also make sure to distinguish between slots and rectangles. Since both are shaped like a box. A box really isn't anything! 

 

Anyway, good luck.

Link to comment
Share on other sites

4 hours ago, oldcheese said:

Every time i increases it goes 18 pixels down (slots are 16 big, 2 pixels between the rows)

Actually, its the items that are 16 pixels. An actual slot graphic is 18x18. The 1 pixel border that gives the slot some "depth" extends beyond the 16x16 bounds.

But otherwise you're correct.

  • Like 1

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

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.