- Joined
- Jul 11, 2020
- Messages
- 0
- Reaction score
- 25
- Points
- 0
was hast du den jetzt für ein Problem?Lasst es einfach. Er wird es nie im Leben schaffen, auch wenn man ihm hilft...
was hast du den jetzt für ein Problem?Lasst es einfach. Er wird es nie im Leben schaffen, auch wenn man ihm hilft...
Du hast echt was gegen Hastebin / Pastebin oder den fucking [ CODE ] [ /CODE ] block, stimmts?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
*/
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
*/
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
* Und ohne diesen call können keine GUIButtons/andere Elemente
* gerendert werden
*/
super.drawScreen(mouseX, mouseY, partialTicks);
}
Erstens CODE BLOCKDas 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
*/
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
*/
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
* Und ohne diesen call können keine GUIButtons/andere Elemente
* gerendert werden
*/
super.drawScreen(mouseX, mouseY, partialTicks);
}
ja xdDu hast echt was gegen Hastebin / Pastebin oder den fucking [ CODE ] [ /CODE ] block, stimmts?
Ich wurde nach der CLICKGUI klasse gefragt diese habe ich auch geschriebenErstens CODE BLOCK
Zweitens Junge falsche Klasse für was brauchen wir die ClickGUI Klasse wenn die Font in ModuleButton gedrawt wird?
:EDIT
Das zeigt alleine dein Wissen das du nicht mal dich mit der API auseinander gesetzt hast.
Ich helfe dir einfach aus Prinzip nicht, kein Code block oder Hastebin, kommst damit das du "Java kannst" und dabei nicht mal wissen was Parameter sind (hat nicht mal was mit Java selbst zutun sondern eher Mathe). Ich will mich hier nicht als was besseres darstellen, ich bin auch nicht wirklich fortgeschritten in Java selbst aber wenigstens fange ich nicht mit Minecraft an um es zu lernen.Ich wurde nach der CLICKGUI klasse gefragt diese habe ich auch geschrieben
2.Hier ist die ModuleButton Klasse:
import java.awt.Color;
import java.io.IOException;
import java.util.ArrayList;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
import org.lwjgl.input.Keyboard;
import de.Hero.clickgui.Panel;
import de.Hero.clickgui.elements.menu.ElementCheckBox;
import de.Hero.clickgui.elements.menu.ElementComboBox;
import de.Hero.clickgui.elements.menu.ElementSlider;
import de.Hero.clickgui.util.ColorUtil;
import de.Hero.clickgui.util.FontUtil;
import de.Hero.settings.Setting;
//Deine Imports
import de.Player.client.Client;
import de.Player.client.Module;
/**
* Made by HeroCode
* it's free to use
* but you have to credit me
*
* @author HeroCode
*/
public class ModuleButton {
public Module mod;
public ArrayList<Element> menuelements;
public Panel parent;
public double x;
public double y;
public double width;
public double height;
public boolean extended = false;
public boolean listening = false;
/*
* Konstrukor
*/
public ModuleButton(Module imod, Panel pl) {
mod = imod;
height = Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT + 2;
parent = pl;
menuelements = new ArrayList<>();
/*
* Settings wurden zuvor in eine ArrayList eingetragen
* dieses SettingSystem hat 3 Konstruktoren je nach
* verwendetem Konstruktor ändert sich die Value
* bei .isCheck() usw. so kann man ganz einfach ohne
* irgendeinen Aufwand bestimmen welches Element
* für ein Setting benötigt wird :>
*/
if (Client.setmgr.getSettingsByMod(imod) != null)
for (Setting s : Client.setmgr.getSettingsByMod(imod)) {
if (s.isCheck()) {
menuelements.add(new ElementCheckBox(this, s));
} else if (s.isSlider()) {
menuelements.add(new ElementSlider(this, s));
} else if (s.isCombo()) {
menuelements.add(new ElementComboBox(this, s));
}
}
}
/*
* Rendern des Elements
*/
public void drawScreen(int mouseX, int mouseY, float partialTicks) {
Color temp = ColorUtil.getClickGUIColor();
int color = new Color(temp.getRed(), temp.getGreen(), temp.getBlue(), 150).getRGB();
/*
* Ist das Module an, wenn ja dann soll
* #ein neues Rechteck in Größe des Buttons den Knopf als Toggled kennzeichnen
* #sich der Text anders färben
*/
int textcolor = 0xffafafaf;
if (mod.isToggled()) {
Gui.drawRect(x - 2, y, x + width + 2, y + height + 1, color);
textcolor = 0xffefefef;
}
/*
* Ist die Maus über dem Element, wenn ja dann soll der Button sich anders färben
*/
if (isHovered(mouseX, mouseY)) {
Gui.drawRect(x - 2, y, x + width + 2, y + height + 1, 0x55111111);
}
/*
* Den Namen des Modules in die Mitte (x und y) rendern
*/
FontUtil.drawTotalCenteredStringWithShadow(mod.getName(), x + width / 2, y + 1 + height / 2, textcolor);
}
/*
* 'true' oder 'false' bedeutet hat der Nutzer damit interagiert und
* sollen alle anderen Versuche der Interaktion abgebrochen werden?
*/
public boolean mouseClicked(int mouseX, int mouseY, int mouseButton) {
if (!isHovered(mouseX, mouseY))
return false;
/*
* Rechtsklick, wenn ja dann Module togglen,
*/
if (mouseButton == 0) {
mod.toggle();
if(Client.setmgr.getSettingByName("Sound").getValBoolean())
Minecraft.getMinecraft().thePlayer.playSound("random.click", 0.5f, 0.5f);
} else if (mouseButton == 1) {
/*
* Wenn ein Settingsmenu existiert dann sollen alle Settingsmenus
* geschlossen werden und dieses geöffnet/geschlossen werden
*/
if (menuelements != null && menuelements.size() > 0) {
boolean b = !this.extended;
Client.clickgui.closeAllSettings();
this.extended = b;
if(Client.setmgr.getSettingByName("Sound").getValBoolean())
if(extended)Minecraft.getMinecraft().thePlayer.playSound("tile.piston.out", 1f, 1f);else Minecraft.getMinecraft().thePlayer.playSound("tile.piston.in", 1f, 1f);
}
} else if (mouseButton == 2) {
/*
* MidClick => Set keybind (wait for next key)
*/
listening = true;
}
return true;
}
public boolean isHovered(int mouseX, int mouseY) {
return mouseX >= x && mouseX <= x + width && mouseY >= y && mouseY <= y + height;
}
}
Warum hilfst du mir aus Prinzip nicht?Ich helfe dir einfach aus Prinzip nicht, kein Code block oder Hastebin, kommst damit das du "Java kannst" und dabei nicht mal wissen was Parameter sind (hat nicht mal was mit Java selbst zutun sondern eher Mathe). Ich will mich hier nicht als was besseres darstellen, ich bin auch nicht wirklich fortgeschritten in Java selbst aber wenigstens fange ich nicht mit Minecraft an um es zu lernen.
willst du mich verarschen? Du sollst dein stück Code in hastebin rein packen damit man ihn vernünftig lesen kann und es das Forum nicht voll spammt mit so einem raw paste, nicht mal formatiert ist der Codeich nutze kein hastebin/ code block weil was soll ich den blocken oder in hastebin packen?
Ok packe ihn dass nächste mal in hastebin reinwillst du mich verarschen? Du sollst dein stück Code in hastebin rein packen damit man ihn vernünftig lesen kann und es das Forum nicht voll spammt mit so einem raw paste, nicht mal formatiert ist der Code
nicht jeder der "coden" kann behaupt er kann java. Das du java lernen sollst ist der best tipp, den man dir geben kann. Whsl meinst du mit "ich kann java" das du weißt was ne methode ist, was datentypen sind und manche java methoden. Mehr nicht. Du kannst kein Java, du kannst die Grundlagen von java
Ich programmiere schon lange nicht mehr in MinecraftKönnte bitte mal jemand diese HeroCodeGUI API Testen: https://www.dropbox.com/s/l02b6t5gq2w91rd/HeroGUI_v2.zip?dl=1
Diese nutze ich und ich verstehe langsam nichtmehr warum er da keine Schrift bei den Modulen ist aber bei den Settings des Moduls schon....
Vielleicht liegt es ja an der API
ok :/Ich programmiere schon lange nicht mehr in Minecraft