package de.luca.lager; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiTextField; import net.minecraft.item.ItemStack; import org.lwjgl.input.Keyboard; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.Locale; /** * Das Farmziel einstellen: welcher Gegenstand, wie viel, und in welcher * Einheit — Stueck, Stapel, Doppelkisten oder Stufen. */ public class GuiZiel extends GuiScreen { private static final DecimalFormat ZAHL; static { DecimalFormatSymbols s = new DecimalFormatSymbols(Locale.GERMANY); ZAHL = new DecimalFormat("#,##0", s); } private final LagerMod mod; private GuiTextField feldItem; private GuiTextField feldMenge; private GuiTextField feldJeStufe; private GuiTextField feldSchon; public GuiZiel(LagerMod mod) { this.mod = mod; } @Override public void initGui() { Keyboard.enableRepeatEvents(true); this.buttonList.clear(); int m = this.width / 2; feldItem = neuesFeld(0, m - 40, 44, 170); feldItem.setText(mod.ziel.item); feldMenge = neuesFeld(1, m - 40, 70, 100); feldMenge.setText(mod.ziel.menge <= 0 ? "" : String.valueOf(mod.ziel.menge)); feldSchon = neuesFeld(2, m - 40, 118, 100); feldSchon.setText(mod.ziel.schon <= 0 ? "" : String.valueOf(mod.ziel.schon)); feldJeStufe = neuesFeld(3, m - 40, 144, 100); feldJeStufe.setText(mod.ziel.jeStufe <= 0 ? "" : String.valueOf(mod.ziel.jeStufe)); // 0 = Einheit umschalten, 1 = aus der Hand, 2 = uebernehmen, 3 = loeschen this.buttonList.add(new GuiButton(0, m + 70, 68, 100, 20, mod.ziel.einheit)); this.buttonList.add(new GuiButton(1, m - 40, 92, 170, 20, "Aus der Hand nehmen")); this.buttonList.add(new GuiButton(2, m - 100, this.height - 46, 110, 20, "Ziel setzen")); this.buttonList.add(new GuiButton(3, m + 15, this.height - 46, 90, 20, "Loeschen")); } private GuiTextField neuesFeld(int id, int x, int y, int breite) { GuiTextField f = new GuiTextField(id, this.fontRendererObj, x, y, breite, 16); f.setMaxStringLength(40); return f; } @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); } @Override protected void actionPerformed(GuiButton knopf) { if (knopf.id == 0) { mod.ziel.naechsteEinheit(1); knopf.displayString = mod.ziel.einheit; return; } if (knopf.id == 1) { ItemStack h = this.mc.thePlayer == null ? null : this.mc.thePlayer.getHeldItem(); if (h != null) { feldItem.setText(LagerMod.ohneFarben(h.getDisplayName())); } return; } if (knopf.id == 2) { uebernehmen(); this.mc.displayGuiScreen(null); return; } if (knopf.id == 3) { mod.ziel.item = ""; mod.ziel.menge = 0; mod.sichernOeffentlich(); this.mc.displayGuiScreen(null); } } /** Eingaben ins Ziel uebernehmen und den Zaehlerstand festhalten. */ private void uebernehmen() { String neuesItem = feldItem.getText().trim(); long neueMenge = Ziel.alsZahl(feldMenge.getText()); boolean anders = !neuesItem.equalsIgnoreCase(mod.ziel.item) || neueMenge != mod.ziel.menge; mod.ziel.item = neuesItem; mod.ziel.menge = neueMenge; mod.ziel.jeStufe = Ziel.alsZahl(feldJeStufe.getText()); mod.ziel.schon = Ziel.alsZahl(feldSchon.getText()); if (anders || mod.ziel.gesetzt == 0) { // Ab jetzt wird gezaehlt, nicht rueckwirkend. mod.ziel.start = mod.gefarmtVon(mod.ziel.item); mod.ziel.gesetzt = System.currentTimeMillis(); } mod.sichernOeffentlich(); } @Override public void drawScreen(int mx, int my, float t) { drawDefaultBackground(); int m = this.width / 2; drawCenteredString(this.fontRendererObj, "§6Farmziel", m, 14, 0xFFFFFF); this.fontRendererObj.drawStringWithShadow("§7Gegenstand", m - 150, 48, 0xFFFFFF); this.fontRendererObj.drawStringWithShadow("§7Wie viel", m - 150, 74, 0xFFFFFF); feldItem.drawTextBox(); feldMenge.drawTextBox(); boolean stufen = mod.ziel.einheit.equals("Stufen"); this.fontRendererObj.drawStringWithShadow("§7Davon schon geschafft", m - 150, 122, 0xFFFFFF); feldSchon.drawTextBox(); if (stufen) { this.fontRendererObj.drawStringWithShadow("§7Stueck je Stufe", m - 150, 148, 0xFFFFFF); feldJeStufe.drawTextBox(); this.fontRendererObj.drawStringWithShadow( "§8Leer lassen: dann rechne ich mit den Neunerschritten", m - 150, 165, 0xFFFFFF); this.fontRendererObj.drawStringWithShadow( "§89 · 81 · 729 · 6.561 · 59.049 · 531.441 · 4.782.969", m - 150, 176, 0xFFFFFF); } // Vorschau int y = stufen ? 194 : 148; long stueck = vorschauStueck(); if (stueck > 0) { String was = feldItem.getText().trim(); if (was.isEmpty()) { was = "davon"; } String wie = stufen ? "§7Stufe " + Ziel.roemisch(Ziel.alsZahl(feldMenge.getText())) + " sind §f" : "§7Das Ziel sind §f"; this.fontRendererObj.drawStringWithShadow(wie + ZAHL.format(stueck) + " §7Stueck " + was, m - 150, y, 0xFFFFFF); this.fontRendererObj.drawStringWithShadow("§8= " + ZAHL.format( (stueck + Ziel.STAPEL - 1) / Ziel.STAPEL) + " Stapel · " + ZAHL.format((stueck + Ziel.DOPPELKISTE - 1) / Ziel.DOPPELKISTE) + " Doppelkisten", m - 150, y + 12, 0xFFFFFF); long schon = Ziel.alsZahl(feldSchon.getText()); long gezaehlt = Math.max(mod.gefarmtVon(feldItem.getText().trim()) - mod.ziel.start, 0); if (mod.ziel.gesetzt > 0 && gezaehlt > 0) { schon += gezaehlt; } if (schon > 0) { this.fontRendererObj.drawStringWithShadow("§7Dann fehlen noch §e" + ZAHL.format(Math.max(stueck - schon, 0)), m - 150, y + 24, 0xFFFFFF); } } else if (stufen) { this.fontRendererObj.drawStringWithShadow( "§eStufe eintragen — I bis XVIII, oder 1 bis 18.", m - 150, y, 0xFFFFFF); } drawCenteredString(this.fontRendererObj, "§8Gezaehlt wird ab dem Setzen · Enter uebernimmt", m, this.height - 20, 0xFFFFFF); super.drawScreen(mx, my, t); } /** Was gerade in den Feldern steht, in Stueck. */ private long vorschauStueck() { long menge = Ziel.alsZahl(feldMenge.getText()); if (menge <= 0) { return 0; } String e = mod.ziel.einheit; if (e.equals("Stapel")) { return menge * Ziel.STAPEL; } if (e.equals("Doppelkisten")) { return menge * Ziel.DOPPELKISTE; } if (e.equals("Stufen")) { long je = Ziel.alsZahl(feldJeStufe.getText()); return je > 0 ? menge * je : Ziel.stufeInStueck(menge); } return menge; } @Override protected void keyTyped(char zeichen, int code) { if (code == Keyboard.KEY_ESCAPE) { this.mc.displayGuiScreen(null); return; } if (code == Keyboard.KEY_RETURN || code == Keyboard.KEY_NUMPADENTER) { uebernehmen(); this.mc.displayGuiScreen(null); return; } if (code == Keyboard.KEY_TAB) { GuiTextField[] alle = {feldItem, feldMenge, feldSchon, feldJeStufe}; int aktiv = 0; for (int i = 0; i < alle.length; i++) { if (alle[i].isFocused()) { aktiv = i; } alle[i].setFocused(false); } alle[(aktiv + 1) % alle.length].setFocused(true); return; } feldItem.textboxKeyTyped(zeichen, code); feldMenge.textboxKeyTyped(zeichen, code); feldSchon.textboxKeyTyped(zeichen, code); feldJeStufe.textboxKeyTyped(zeichen, code); } @Override protected void mouseClicked(int x, int y, int knopf) { try { super.mouseClicked(x, y, knopf); } catch (Exception ignoriert) { } feldItem.mouseClicked(x, y, knopf); feldMenge.mouseClicked(x, y, knopf); feldSchon.mouseClicked(x, y, knopf); feldJeStufe.mouseClicked(x, y, knopf); } @Override public boolean doesGuiPauseGame() { return false; } }