Jump to content

Recommended Posts

Posted (edited)

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
Posted

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

Posted (edited)

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
Posted
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?

Posted (edited)

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
Posted
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

Posted
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.

Posted
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.

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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • When I first heard about Bitcoin back in 2018, I was skeptical. The idea of a decentralized, digital currency seemed too good to be true. But I was intrigued as I learned more about the technology behind it and its potential. I started small, investing just a few hundred dollars, dipping my toes into the cryptocurrency waters. At first, it was exhilarating to watch the value of my investment grow exponentially. I felt like I was part of the future, an early adopter of this revolutionary new asset. But that euphoria was short-lived. One day, I logged into my digital wallet only to find it empty - my Bitcoin had vanished without a trace. It turned out that the online exchange I had trusted had been hacked, and my funds were stolen. I was devastated, both financially and emotionally. All the potential I had seen in Bitcoin was tainted by the harsh reality that with decentralization came a lack of regulation and oversight. My hard-earned money was gone, lost to the ether of the digital world. This experience taught me a painful lesson about the price of trust in the uncharted territory of cryptocurrency. While the technology holds incredible promise, the risks can be catastrophic if you don't approach it with extreme caution. My Bitcoin investment gamble had failed, and I was left to pick up the pieces, wiser but poorer for having placed my faith in the wrong hands. My sincere appreciation goes to MUYERN TRUST HACKER. You are my hero in recovering my lost funds. Send a direct m a i l ( muyerntrusted ( @ ) mail-me ( . )c o m ) or message on whats app : + 1 ( 4-4-0 ) ( 3 -3 -5 ) ( 0-2-0-5 )
    • You could try posting a log (if there is no log at all, it may be the launcher you are using, the FAQ may have info on how to enable the log) as described in the FAQ, however this will probably need to be reported to/remedied by the mod author.
    • So me and a couple of friends are playing with a shitpost mod pack and one of the mods in the pack is corail tombstone and for some reason there is a problem with it, where on death to fire the player will get kicked out of the server and the tombstone will not spawn basically deleting an entire inventory, it doesn't matter what type of fire it is, whether it's from vanilla fire/lava, or from modded fire like ice&fire/lycanites and it's common enough to where everyone on the server has experienced at least once or twice and it doesn't give any crash log. a solution to this would be much appreciated thank you!
    • It is 1.12.2 - I have no idea if there is a 1.12 pack
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.