package codechicken.nei; import net.minecraft.client.gui.GuiScreen; import net.minecraft.util.ChatAllowedCharacters; import org.lwjgl.input.Keyboard; import static codechicken.lib.gui.GuiDraw.drawString; import static codechicken.lib.gui.GuiDraw.getStringWidth; import static codechicken.nei.NEIClientUtils.translate; public abstract class SaveLoadButton extends Button { public SaveLoadButton(String s) { super(s); } @Override public boolean handleClick(int mousex, int mousey, int button) { if(button == 1) { label = ""; onTextChange(); focused = true; NEIClientUtils.playClickSound(); return true; } return super.handleClick(mousex, mousey, button); } public abstract void onTextChange(); @Override public void onGuiClick(int i, int j) { if(!contains(i, j)) focused = false; } @Override public boolean handleKeyPress(int keyID, char keyChar) { if(!focused) return false; if(keyID == Keyboard.KEY_BACK) { if(label.length() > 0) { label = label.substring(0, label.length() - 1); onTextChange(); backdowntime = System.currentTimeMillis(); } } else if(keyID == Keyboard.KEY_RETURN) { focused = false; } else if(keyChar == 22)//paste { String pastestring = GuiScreen.getClipboardString(); if(pastestring == null) pastestring = ""; label = label + pastestring; onTextChange(); } else if(ChatAllowedCharacters.isAllowedCharacter(keyChar)) { label = label + keyChar; onTextChange(); } return true; } @Override public void update() { cursorCounter++; if(backdowntime > 0) { if(Keyboard.isKeyDown(Keyboard.KEY_BACK) && label.length() > 5) { if(System.currentTimeMillis() - backdowntime > 200 / (1+backs * 0.3F)) { label = label.substring(0, label.length() - 1); onTextChange(); backdowntime = System.currentTimeMillis(); backs++; } } else { backdowntime = 0; backs = 0; } } } @Override public void draw(int mousex, int mousey) { super.draw(mousex, mousey); if(focused && (cursorCounter / 6) % 2 == 0) drawString("_", x + (w + getStringWidth(getRenderLabel())) / 2, y + (h - 8) / 2, 0xFFFFFFFF); } @Override public String getRenderLabel() { return translate(saved ? "load" : "save") + " " + label; } public boolean saved; public long backdowntime; public int backs; public int cursorCounter; public boolean focused; }