Jump to content

Slot alignment with gui issue?


Thornack
 Share

Recommended Posts

Hi everyone,

 

I am trying to add slots to a gui that the player can open anytime. The purpose of this gui will be so that the player can convert the amount of currency called "Miney" he stored in his ieep to coin items or vice versa (kinda like a deposit/withdrawal system)

 

I have run into a problem however. I cant seem to get my inventory slots to align with the gui "slots". When the game is resized they end up in the incorrect spot. Anyone know how to fix this? My gui is centered and resizes correctly it seems. It is basically the same shape as the default vanilla furnace gui (same size too and has the players inventory as in the vanilla gui). I cant get the slots to stay aligned with the gui on game resize. Anyone know what the issue is and how to solve this?

 

GuiClass

 

 

@SideOnly(Side.CLIENT)
public class GuiPlayerMiney extends InventoryEffectRenderer
{
    private GuiTextField mineyDepositTextField;
    private static ContainerMiney containerMiney;
    
    private ArrayList<GuiTextField> editControls = new ArrayList<GuiTextField>();
    private static final ResourceLocation guiTexture = new ResourceLocation("custommod:textures/gui/MineyGui.png");
    private boolean wasInitialized;	
    private static final int TEXTURE_SIZE = 256;
   
  	public GuiPlayerMiney(InventoryPlayer inv){
	super(new ContainerMiney(inv));
      	this.wasInitialized = false;
    }

    /**
     * Adds the buttons (and other controls) to the screen in question.
     */
    @Override
    public void initGui()
    {
    	  
        if(this.wasInitialized)
        	return;
        this.wasInitialized = true;
        
        //edit controls
        this.editControls.clear();
        this.mineyDepositTextField = new GuiTextField(fontRendererObj, 100, 70, 50, 12);
        this.editControls.add(mineyDepositTextField);
       
    }

    @Override
public boolean doesGuiPauseGame(){
	return false;
}
    
    @Override
    public void onGuiClosed(){ }

       
    @Override
    protected void mouseClicked(int x, int y, int event){
        super.mouseClicked(x, y, event);
        for(GuiTextField textBox : this.editControls){
        	textBox.mouseClicked(x, y, event);
    	}
    }
    
    @Override
    protected void mouseMovedOrUp(int mouseX, int mouseY, int event){
    	super.mouseMovedOrUp(mouseX, mouseY, event);
    }
    
    @Override
protected void keyTyped(char key, int event){
    	super.keyTyped(key, event);
    	for(GuiTextField textBox : this.editControls){
        	textBox.textboxKeyTyped(key, event);
    	}
}

          
    private void sendUpdateToSpawner(TileEntitySpawner spawner){
    	int withdrawAmount = this.getTextboxValue(this.mineyDepositTextField.getText());
    	
    }
    
    //checks the string to see if it is an integer
    private boolean validateTextboxInt(String s){
    	int val = 0;
    	try{
    		val = Integer.valueOf(s);
    	}
    	catch(NumberFormatException e){
    		return false;
    	}
    	
    	return true;
    }
    
    private int getTextboxValue(String s){
    	if(validateTextboxInt(s)){
    		return Integer.valueOf(s);
    	}
    	return 0;
    }

    @Override
protected void drawGuiContainerForegroundLayer(int p_146979_1_, int p_146979_2_){
	int fontColor = 0x404040;	//RGB value of the text color
}
    
@Override
protected void drawGuiContainerBackgroundLayer(float x, int y, int z) {

	this.mc.getTextureManager().bindTexture(guiTexture);

	int xPos = (this.width - this.xSize) / 2;
    int yPos = (this.height - this.ySize) / 2;
	this.drawTexturedModalRect(xPos, yPos, 0, 0, this.xSize, this.ySize);
    	
    	
       	final String withdraw = "Withdraw";
        this.drawString(this.fontRendererObj, withdraw, this.width/2 - 82, this.height/2 - 74, 0xFFFFFF);
        
    	final String deposit = "Deposit";
        this.drawString(this.fontRendererObj, deposit, this.width/2 - 77,  this.height/2 - 26, 0xFFFFFF);
      
        final String total = "Total Miney";
        this.drawString(this.fontRendererObj, total, this.width/2 +10, this.height/2 - 78, 0xFFFFFF);
        
        final String miney = "" + (BattlePlayerProperties.get(Minecraft.getMinecraft().thePlayer).getMineyTotal() - this.getTextboxValue(this.mineyDepositTextField.getText()));
        this.drawString(this.fontRendererObj, miney, (this.width/2 + 12) + 50/2 - this.fontRendererObj.getStringWidth(miney)/2, this.height/2 - 66, 0xFFFFFF);
      
        
        //draw edit controls
        for(GuiTextField textBox : this.editControls){
        	textBox.width = 45;
        	textBox.xPosition = this.width/2 -82;		//so it stays in the same position when gui is scaled
        	textBox.yPosition = this.height/2 -64;
        	textBox.drawTextBox();
        }


}
}

 

 

 

ContainerClass

 

 


public class ContainerMiney extends Container
{   
    private final int slotCols = 9;
    private int slotRows;

public ContainerMiney(IInventory playerInventory){
       
        int i;

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

        for (i = 0; i < 9; ++i)
        {
            this.addSlotToContainer(new Slot(playerInventory, i, 8 + i * 18, 179));
        }
    }


    /**
     * Called when the container is closed.
     */
    public void onContainerClosed(EntityPlayer player)
    {
        super.onContainerClosed(player);
    }
    
    @Override
    public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2)
    {
        ItemStack itemstack = null;
        Slot slot = (Slot)this.inventorySlots.get(par2);

        if (slot != null && slot.getHasStack())
        {
            ItemStack itemstack1 = slot.getStack();
            itemstack = itemstack1.copy();

            if (par2 < this.slotRows * 9)
            {
                if (!this.mergeItemStack(itemstack1, this.slotRows * 9, this.inventorySlots.size(), true))
                {
                    return null;
                }
            }
            else if (!this.mergeItemStack(itemstack1, 0, this.slotRows * 9, false))
            {
                return null;
            }

            if (itemstack1.stackSize == 0)
            {
                slot.putStack((ItemStack)null);
            }
            else
            {
                slot.onSlotChanged();
            }
        }

        return itemstack;
    }
    
    

@Override
public boolean canInteractWith(EntityPlayer var1) {
	return true;
}
}

 

 

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

 Share



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • yeah i did. tried activating and deactivating mods at random until it stopped crashing but it didn't change anything ty!
    • also, just had to set up account to post this and noticed like 3 times I had to pick the right segments of images to verify before moving on.  I can't imagine that there are enough threat actors with their attention on minecraft modding communities to justify that level of protection.  Maybe the guys making these amazing and cool mods are kind of jerks about it, hahah?  Maybe, like other companies, customer service or satisfaction isn't that high a priority.  I don't feel like they get paid very much for making Forge and Minecraft Mods, I mean I wasn't required to pay anything to the creators to set this up.   Anyway, just wanted to vent.
    • Ok, I found this site while searching for the missing version .jar file, which didn't show up in a net query through DuckDuckGo.  The thread on this site was closed after a comment from someone listed as a coder who stated that it was meant to work in this way, without a .jar file which is no longer necessary.  From earlier posts it seems that this person believed the OP had issues due to use of non vanilla launcher, which to me means he thinks they use a client or something like this.  The OP immediately said that they use vanilla, but doesn't seem like the coder believed them.  They began asking for logs, OP did not provide them.  No need to go further into details. I just reinstalled Windows on an SSD and just installed Minecraft Java, Optifine, Shader, Forge.  That is all that exists on my pc right now, and I had the same issue with 1.19.2 Forge versions not creating .jar file. Now I admit that I am likely missing something here and there is a technicality that isn't being fulfilled, but I have to say that it is not due to using a modified launcher.  All i have done is install optifine, put a shader into the shader folder, installed forge.  No mods yet, nothing.  What is interesting, and is the only reason I felt the need to post here, is that when I went into minecraft library folder and copied forge-1.19.2-43.1.65-client.jar, (I renamed it without the -client,) the Forge version starts up just fine with no further issues. From my point of view it seems that coders are dismissing some valid issues out of hand.  I mean, there are lots of really stupid and lazy people using computers and playing games, but not all of them are really stupid and lazy.  We all have bias, I know that I do as well, and I think it's helpful to be aware of our bias as far as we have the ability to be aware of it. Again, it could be that my assumption that there is a problem with the installer not creating a version .jar file, but I couldn't get it to work, always failed with the same message and then put the .jar file in the version folder and worked without a hitch. Oh, almost forgot, I also went into each installation and changed from 2 to 20GB RAM for the game.  In the past I had issues crashing with many mods installed due to lower RAM allocations and I have 48GB, so felt that was safe enough either way.  Maybe that caused the issue, for all I know.   Just saying, would have been nice if the coder had said go to (generic/vanilla path) and copy (version I used as example) forge-1.19.2-43.1.65-client, paste into forge version folder, rename to forge-1.19.2-43.1.65 and see if that does it.
    • What would make my mod incompatible? I'm very afraid of this. I was making some changes to the game using events. but they would only change items created in my own mod. What is the chance of incompatibility?
    • Hello, Im playing on 1.16.5 and Its keep crashing whenever I try to join a world and I get an error message saying "The game crashed whilst ticking memory connection Error: java.lang.NullPointerException: Ticking memory connection". Heres the crash log https://pastebin.com/rqZtSBms
  • Topics

×
×
  • Create New...

Important Information

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