Posted August 14, 201510 yr 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!
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.