Jump to content

[1.8] Gui Rendering


superbas11

Recommended Posts

I have 2 problems with my GUI. I'm new to this so I need some help with it.

 

Problem 1 (solved):

When I draw a text overlay, the buttons on my GUI turn darker. when the overlay disappear, the buttons get their normal color back.

 

Problem 2:

I use the forge GuiScrollingList but the slots are rendered out of the list. they only disappear when the top and the bottom are completely out of the list by scrolling the list.

(I saw this problem by a couple other mods.)

Link to comment
Share on other sites

1. You are probably Enabling some GL11 property and not disablig it, ot disabling it where you shouldn't, we need code.

 

2. That's how anything using GuiListExtended works - they are designed to render everything that is inside or partially-inside list, when element is out of list in 100% then the renderer stops rendering it.

You would need custom implementation of GuiSlot (or maybe a bit less, like GuiListExtended) to change it, and trust me, writing good logic for this will take time.

 

Edit: I am a LIAR! Sorry, there were changes in 1.8 regarding those lists (or maybe I just derped with names).

GuiScrollingList is not an implementation of GuiListExtended.

But I think they are using same logic, gotta check it :P

1.7.10 is no longer supported by forge, you are on your own.

Link to comment
Share on other sites

here is some code.

 

 

 

 

 

 

    @Override

    public void drawScreen(int mouseX, int mouseY, float par3) {

            this.List.drawScreen(mouseX, mouseY, par3);

           

            if(selectedMod != null && ListSwitchButton.displayString == "Modlist") {

            this.offset = this.listWidth + 20;

           

            int TotalPlayers = Players.size();

            int TotalPlayersPlayedWithThisMod = ((ArrayList) ModUsers.get(selectedMod.get("Modid"))).size();

            Float PercentagePlayedWithThisMod = round((float) (((float)TotalPlayersPlayedWithThisMod/TotalPlayers)*100.0), 2);

           

            this.drawString(this.fontRendererObj, "ModName: "+selectedMod.get("ModName"), offset, 35, 0xFFFFFF);

            this.drawString(this.fontRendererObj, "ModID: "+selectedMod.get("Modid"), offset, 45, 0xFFFFFF);

            this.drawString(this.fontRendererObj, TotalPlayersPlayedWithThisMod+" Players have this mod. ("+PercentagePlayedWithThisMod+"%)", offset, 55, 0xFFFFFF);

           

            PlayerHoverText(mouseX,mouseY,(ArrayList) ModUsers.get(selectedMod.get("Modid")));

           

            }

           

            if (this.hoveringText != null)

            {

            this.drawHoveringText(Lists.newArrayList(Splitter.on("\n").split(this.hoveringText)), mouseX, mouseY);

            }

           

           

            super.drawScreen(mouseX, mouseY, par3);

    }

   

 

   

    private void PlayersHoverText(int MouseX,int MouseY, ArrayList <String> Players){

    if(MouseX >= offset && MouseX <= offset+10 && MouseY >= 55 && MouseY <= 65){

 

    if(Players.size()>=1){

   

    int x = 0;

    this.hoveringText = "";

    while( x < Players.size()){

    this.hoveringText = this.hoveringText+ Players.get(x) +((x+1)>=Players.size() ?"":"\n");

    x++;

    }

    }

   

    }else{

    this.hoveringText = null;

    }

    }

Link to comment
Share on other sites

Yup.

#Paint MAD SKILLZ

sqh6jn.jpg

Brown - rest of GUI

White - visible part of list

Orange - hidden part of list - a "cape"

When element leaves visible part of list partially it' s being hidden behind "cape" and when it leaves visible list fully rendering stops.

 

Lists are designed to be put from top to bottom, and only be limited by those "capes" for fake visual effect. In fact - under those capes, part of element is still being rendered.

 

Cape border can be set in constructor (or by method directly)

1.7.10 is no longer supported by forge, you are on your own.

Link to comment
Share on other sites

How are you declaring your list?

 

protected final int top;

protected final int bottom;

 

Inside GuiScrollingList stand for number of pixels counting from top of screen for your top-border and bottom-border.

 

Note: I was playing with it on 1.7.10. It might be different now.

1.7.10 is no longer supported by forge, you are on your own.

Link to comment
Share on other sites

declaring list in initGui():

 

  this.List=new ScrollList(this, Data, listWidth, true);

  this.List.registerScrollButtons(this.buttonList, 7, 8);

 

constructor of the List:

 

    public ScrollList(TestGui parent, ArrayList Data, int listWidth, Boolean isPlayerList)

    {

        super(parent.getMinecraftInstance(),

        listWidth,                                //width

        parent.height-66,                    //height

        32,                                          //top

        parent.height - 66 + 4,          //bottom

        10,                                          //left

        35);                                        //slot height

 

      // System.out.println(parent.width+"-"+parent.height);

        this.parent=parent;

        this.Data=Data;

        this.isPlayerList = isPlayerList;

    }

 

I had this problem too in 1.7

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.