Jump to content

[1.7.10] GUI with Scrollbar


m_pro_m

Recommended Posts

Hey guys,

I am trying to create a GUI with a scrolling list. Inside that, I want to display "achievements". Problem is, they are somehow out of position..

Screenshots: http://pho.to/9doT0 (second one is fullscreen)

My code:

GuiAchievements.java

import cpw.mods.fml.client.GuiScrollingList;
import eu.mprom.gm.achievements.GMAchievements;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.GL11;

import java.util.ArrayList;

public class GuiAchievements extends GuiScreen{

    protected int guiWidth = 256;
    protected int guiHeight = 200;

    private ArrayList<String> achievements;
    private GuiSlotAchievement achievementsList;

    private EntityPlayer player;

    public GuiAchievements(EntityPlayer player) {
        this.player = player;

        achievements = new ArrayList<String>();
        for(int i=0; i<10; i++) {
            achievements.add("Achv " + i);
        }
    }

    @Override
    public void initGui() {
        super.initGui();

        int guiX = (width - guiWidth) / 2;
        int guiY = (height - guiHeight) / 2;

        this.buttonList.add( new GuiButton(1, guiX + 9, guiY + 148, 50, 15, "Close"));

        this.achievementsList=new GuiSlotAchievement(this, achievements);
        this.achievementsList.registerScrollButtons(this.buttonList, 7, ;
    }

    @Override
    protected void keyTyped(char p_73869_1_, int p_73869_2_) {
        player.closeScreen();
    }

    @Override
    protected void actionPerformed(GuiButton button) {
        if (button.enabled)
        {
            switch (button.id) {
                case 1:
                    this.player.closeScreen();
                    return;
            }
        }
        super.actionPerformed(button);
    }

    @Override
    public void drawScreen(int x, int y, float ticks) {
        super.drawScreen(x, y, ticks);
        GL11.glColor4f(1, 1, 1, 1);
        drawDefaultBackground();

        int guiX = (width - guiWidth) / 2;
        int guiY = (height - guiHeight) / 2;


        mc.renderEngine.bindTexture(new ResourceLocation(GMAchievements.MOD_ID, "textures/gui/achievements.png"));
        drawTexturedModalRect(guiX, guiY, 0, 0, 256, 200);
        //drawTexturedModalRect(guiX + 18, guiY + 18, 0, 200, 200, 30);

        this.achievementsList.drawScreen(x, y, ticks);

    }

    Minecraft getMinecraftInstance() {
        /** Reference to the Minecraft object. */
        return mc;
    }

    FontRenderer getFontRenderer() {
        /** The FontRenderer used by GuiScreen */
        return fontRendererObj;
    }

}

GuiSlotAchievement.java

import cpw.mods.fml.client.GuiScrollingList;
import eu.mprom.gm.achievements.GMAchievements;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;

import java.util.ArrayList;

public class GuiSlotAchievement extends GuiScrollingList {

    private ArrayList<String> achievements;
    private GuiAchievements parent;

    public GuiSlotAchievement(GuiAchievements parent, ArrayList<String> achievements) {
        super(
                parent.getMinecraftInstance(),
                240,
                140,
                (parent.height - parent.guiHeight) / 2 + 8,
                (parent.height - parent.guiHeight) / 2 + 190,
                (parent.width - parent.guiWidth) / 2 + 7,
                50
        );
        this.func_27259_a(true, -22);
        this.parent = parent;
        this.achievements = achievements;
    }

    @Override
    protected int getSize() {
        return achievements.size();
    }

    @Override
    protected void elementClicked(int index, boolean doubleClick) {

    }

    @Override
    protected boolean isSelected(int index) {
        return false;
    }

    @Override
    protected void drawBackground() {
        //this.parent.drawDefaultBackground();
    }
/*
    @Override
    protected int getContentHeight() {
        return this.getSize() * 30;
    }
*/
    @Override
    protected void drawSlot(int listIndex, int var2, int var3, int var4, Tessellator var5) {
        int guiX = (this.parent.width - this.parent.guiWidth) / 2;
        int guiY = (this.parent.height - this.parent.guiHeight) / 2;

        GL11.glDisable(GL11.GL_LIGHTING);
        GL11.glDisable(GL11.GL_FOG);
        GL11.glColor4f(1,1,1,1);

        this.parent.mc.renderEngine.bindTexture(new ResourceLocation(GMAchievements.MOD_ID, "textures/gui/achievements.png"));
        this.parent.drawTexturedModalRect(guiX + 15, guiY + var3, 0, 200, 200, 30);

        this.parent.getFontRenderer().drawString("Achievement name", guiX + 20, guiY + var3 + 5, 0x000000);
    }
}

I was trying to do something with this function this.func_27259_a(true, -22);, but it just moves the content up and down.

Main problem is: When I scroll the slider, content is displayed over the container that holds it (over the top and bottom - you can sometimes see up to 5 elements).

Second problem is the fullscreen (see screenshot), but I guess all I have to do is to reposition everything on resize of the window, right? Any pointers to the window resize event?

Last thing, I was trying to close the GUI after clicking the button or pressing a keyboard, but it doesn't work. I also tried this.mc.thePlayer.closeScreen(). Any ideas?

Thank you!

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.