Vlt hast du die drawString Methoden ind der ClickGui Klasse auskommentiert.
Das ist meine CLICKGUI Klasse (in der API)Habe aber eigentlich nichts richtig geändert:
import java.awt.Color;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.GL11;
import de.Hero.clickgui.elements.Element;
import de.Hero.clickgui.elements.ModuleButton;
import de.Hero.clickgui.elements.menu.ElementSlider;
import de.Hero.clickgui.util.ColorUtil;
import de.Hero.clickgui.util.FontUtil;
import de.Hero.settings.SettingsManager;
//Deine Imports
import de.Player.client.Client;
import de.Player.client.Category;
import de.Player.client.Module;
import de.Player.client.ModuleMgr;
/**
* Made by HeroCode
* it's free to use
* but you have to credit me
*
* @author HeroCode
*/
public class ClickGUI extends GuiScreen {
public static ArrayList<Panel> panels;
public static ArrayList<Panel> rpanels;
private ModuleButton mb = null;
public SettingsManager setmgr;
/*
* Konstrukor sollte nur einmal aufgerufen werden => in der MainMethode des eigenen Codes
* hier Client.startClient()
* das GUI wird dann so geöffnet:
* mc.displayGuiScreen(Client.clickgui);
* this.setToggled(false);
* das Module wird sofort wieder beendet damit
* nächstes mal nicht 2mal der z.B. 'RSHIFT' Knopf gedrückt
* werden muss
*/
public ClickGUI() {
setmgr = Client.setmgr;
FontUtil.setupFontUtils();
panels = new ArrayList<>();
double pwidth = 80;
double pheight = 15;
double px = 10;
double py = 10;
double pyplus = pheight + 10;
/*
* Zum Sortieren der Panels einfach die Reihenfolge im Enum ändern
![Wink ;) ;)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
*/
for (Category c : Category.values()) {
String title = Character.toUpperCase(c.name().toLowerCase().charAt(0)) + c.name().toLowerCase().substring(1);
ClickGUI.panels.add(new Panel(title, px, py, pwidth, pheight, false, this) {
@Override
public void setup() {
for (Module m : Client.instance.modulemgr.mods) {
if (!m.getCategory().equals(c))continue;
this.Elements.add(new ModuleButton(m, this));
}
}
});
py += pyplus;
}
/*
* Wieso nicht einfach
* rpanels = panels;
* Collections.reverse(rpanels);
* Ganz eifach:
* durch diese Zuweisung wird rpanels einfach nur eine Weiterleitung
* zu panels, was mit 'Collections.reverse(rpanels);' nicht ganz
* funktionieren würde. Und da die Elemente nur 'rüberkopiert' werden
* gibt es keine Probleme
![Wink ;) ;)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
*/
rpanels = new ArrayList<Panel>();
for (Panel p : panels) {
rpanels.add(p);
}
Collections.reverse(rpanels);
}
@Override
public void drawScreen(int mouseX, int mouseY, float partialTicks) {
/*
* Panels und damit auch Buttons rendern.
* panels wird NUR hier im Code verwendet, da das
* zuletzt gerenderte Panel ganz oben ist
* Auch wenn es manchmal egal wäre ob panels/rpanels
* benutzt wird habe ich mich einfach mal dazu entschieden,
* einfach weil es einfacher ist nur einmal panels zu benutzen
*/
for (Panel p : panels) {
p.drawScreen(mouseX, mouseY, partialTicks);
}
/* */ ScaledResolution s = new ScaledResolution(mc, mc.displayWidth,mc.displayHeight);
/* DO NOT REMOVE */ GL11.glPushMatrix();
/* copyright HeroCode 2017 */ GL11.glTranslated(s.getScaledWidth(), s.getScaledHeight(), 0);GL11.glScaled(0.5, 0.5, 0.5);
/*
https://www.youtube.com/channel/UCJum3PIbnYvIfIEu05GL_yQ */ FontUtil.drawStringWithShadow("b"+"y"+ "H"+"e"+"r"+"o"+"C"+"o"+"d"+"e", -Minecraft.getMinecraft().fontRendererObj.getStringWidth("b"+"y"+ "H"+"e"+"r"+"o"+"C"+"o"+"d"+"e"), -Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT, 0xff11F86B);
/* */ GL11.glPopMatrix();
mb = null;
/*
* Überprüfen ob ein Button listening == true hat, wenn
* ja, dann soll nicht mehr gesucht werden, nicht dass
* 1+ auf listening steht...
*/
listen:
for (Panel p : panels) {
if (p != null && p.visible && p.extended && p.Elements != null
&& p.Elements.size() > 0) {
for (ModuleButton e : p.Elements) {
if (e.listening) {
mb = e;
break listen;
}
}
}
}
/*
* Settings rendern. Da Settings über alles gerendert werden soll,
* abgesehen vom ListeningOverlay werden die Elements von hier aus
* fast am Schluss gerendert
*/
for (Panel panel : panels) {
if (panel.extended && panel.visible && panel.Elements != null) {
for (ModuleButton b : panel.Elements) {
if (b.extended && b.menuelements != null && !b.menuelements.isEmpty()) {
double off = 0;
Color temp = ColorUtil.getClickGUIColor().darker();
int outlineColor = new Color(temp.getRed(), temp.getGreen(), temp.getBlue(), 170).getRGB();
for (Element e : b.menuelements) {
e.offset = off;
e.update();
if(Client.setmgr.getSettingByName("Design").getValString().equalsIgnoreCase("New")){
Gui.drawRect(e.x, e.y, e.x + e.width + 2, e.y + e.height, outlineColor);
}
e.drawScreen(mouseX, mouseY, partialTicks);
off += e.height;
}
}
}
}
}
/*
* Wenn mb != null ist => ein Button listening == true
* dann wird das Overlay gerendert mit ein paar Informationen.
*/
/*
* Nicht benötigt, aber es ist so einfach sauberer
![Wink ;) ;)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
* Und ohne diesen call können keine GUIButtons/andere Elemente
* gerendert werden
*/
super.drawScreen(mouseX, mouseY, partialTicks);
}