package game.gui.server; import game.SKC; import game.color.TextColor; import game.gui.GuiScreen; import game.gui.element.Button; import game.gui.server.GuiMultiplayer.ServerEntry; import game.network.NetHandlerPlayServer; import com.google.common.base.Predicate; public class GuiServer extends GuiScreen { private final GuiScreen parentScreen; private final ServerEntry serverData; private TextField serverIPField; private TextField serverNameField; private TextField serverUserField; private TextField serverPassField; private TextField serverAccessField; public GuiServer(GuiScreen parent, ServerEntry server) { this.parentScreen = parent; this.serverData = server; } public void initGui() { this.buttonList.clear(); this.buttonList.add(new Button(0, this.width / 2 - 100, this.height / 4 + 96 + 100 + 18, 200, 20, "Fertig")); this.buttonList.add(new Button(1, this.width / 2 - 100, this.height / 4 + 120 + 100 + 18, 200, 20, "Abbrechen")); this.serverNameField = new TextField(this.width / 2 - 100, 66, 200, 20); this.serverNameField.setFocused(true); this.serverNameField.setText(this.serverData.name); this.serverIPField = new TextField(this.width / 2 - 100, 106, 200, 20); this.serverIPField.setMaxStringLength(128); this.serverIPField.setText(this.serverData.address); this.serverUserField = new TextField(this.width / 2 - 100, 146, 200, 20); this.serverUserField.setMaxStringLength(16); this.serverUserField.setText(this.serverData.user); this.serverUserField.setValidator(new Predicate() { public boolean apply(String name) { return NetHandlerPlayServer.isValidUser(name); } }); this.serverPassField = new TextField(this.width / 2 - 100, 186, 200, 20); this.serverPassField.setMaxStringLength(64); this.serverPassField.setText(this.serverData.pass); this.serverAccessField = new TextField(this.width / 2 - 100, 226, 200, 20); this.serverAccessField.setMaxStringLength(64); this.serverAccessField.setText(this.serverData.access); ((Button)this.buttonList.get(0)).enabled = this.serverIPField.getText().length() > 0 && this.serverIPField.getText().split(":").length > 0 && this.serverNameField.getText().length() > 0 && this.serverUserField.getText().length() > 0; } protected void actionPerformed(Button button) { if(button.enabled) { if(button.id == 1) { this.parentScreen.confirmClicked(false); } else if(button.id == 0) { this.serverData.name = this.serverNameField.getText(); this.serverData.address = this.serverIPField.getText(); this.serverData.user = this.serverUserField.getText(); this.serverData.pass = this.serverPassField.getText(); this.serverData.access = this.serverAccessField.getText(); this.parentScreen.confirmClicked(true); } } } protected void keyTyped(char typedChar, int keyCode) { if(keyCode == 15) { int focus = this.serverNameField.isFocused() ? 0 : (this.serverIPField.isFocused() ? 1 : ((this.serverUserField.isFocused() ? 2 : ((this.serverPassField.isFocused() ? 3 : ((this.serverAccessField.isFocused() ? 4 : -1))))))); focus = focus == -1 ? -1 : ((focus + 5 + (SKC.isShiftKeyDown() ? -1 : 1)) % 5); this.serverNameField.setFocused(focus == 0); this.serverIPField.setFocused(focus == 1); this.serverUserField.setFocused(focus == 2); this.serverPassField.setFocused(focus == 3); this.serverAccessField.setFocused(focus == 4); } if(keyCode == 28 || keyCode == 156) this.actionPerformed((Button)this.buttonList.get(0)); ((Button)this.buttonList.get(0)).enabled = this.serverIPField.getText().length() > 0 && this.serverIPField.getText().split(":").length > 0 && this.serverNameField.getText().length() > 0 && this.serverUserField.getText().length() > 0; } public void drawScreen(int mouseX, int mouseY, float partialTicks) { this.drawBackground(); SKC.drawCentered("Serverinformationen bearbeiten", this.width / 2, 17, 16777215); SKC.drawString((this.serverNameField.getText().isEmpty() ? TextColor.DARK_RED : "") + "Servername", this.width / 2 - 100, 54, 10526880); SKC.drawString((this.serverIPField.getText().isEmpty() || this.serverIPField.getText().split(":").length == 0 ? TextColor.DARK_RED : "") + "Serveradresse", this.width / 2 - 100, 94, 10526880); SKC.drawString((this.serverUserField.getText().isEmpty() ? TextColor.DARK_RED : "") + "Nutzername", this.width / 2 - 100, 134, 10526880); SKC.drawString("Passwort", this.width / 2 - 100, 174, 10526880); SKC.drawString("Zugangspasswort", this.width / 2 - 100, 214, 10526880); super.drawScreen(mouseX, mouseY, partialTicks); } } private void loadList() { this.servers.clear(); // List list = Lists.newArrayList(); try { if(!SERVERS_FILE.exists()) return; List lines = FileUtils.readLines(SERVERS_FILE); for(String line : lines) { if(line.isEmpty()) continue; // ServerData server = ServerData.fromString(line); String[] svr = line.split("=", 2); if(svr.length != 2) continue; String[] tok = svr[1].split("@", 2); if(tok.length != 2 || tok[0].startsWith(":")) continue; String[] addr = tok[1].split("#", 2); ServerEntry server = new ServerEntry(); server.name = svr[0]; server.address = addr[0]; if(addr.length == 2) server.access = addr[1]; String[] login = tok[0].split(":", 2); if(login.length == 2) server.pass = login[1]; server.user = login[0]; // return ? null : server; if(!server.name.isEmpty() && !server.address.isEmpty() && !server.user.isEmpty()) this.servers.add(server); } } catch(Exception e) { Log.JNI.error(e, "Konnte Serverliste nicht laden"); } // return list; } private void saveList() { try { StringBuilder sb = new StringBuilder(); for(ServerEntry server : this.servers) { sb.append((sb.length() == 0 ? "" : "\n") + server.name + "=" + server.user + (server.pass.isEmpty() ? "" : (":" + server.pass)) + "@" + server.address + (server.access.isEmpty() ? "" : ("#" + server.access))); } FileUtils.safeWrite(sb.toString(), SERVERS_FILE); } catch(Exception e) { Log.JNI.error(e, "Konnte Serverliste nicht speichern"); } } private void drawPing(int width, int xPos, int yPos, int ping) { GlState.color(1.0F, 1.0F, 1.0F, 1.0F); this.gm.getTextureManager().bindTexture(icons); int rectX = 0; int rectWidth = 0; if(ping < 0 || ping >= 20000) { rectWidth = 5; } else if(ping < 150) { rectWidth = 0; } else if(ping < 300) { rectWidth = 1; } else if(ping < 600) { rectWidth = 2; } else if(ping < 1000) { rectWidth = 3; } else { rectWidth = 4; } String str = this.formatPing(ping); this.zLevel += 100.0F; this.drawTexturedModalRect(xPos + width - 11, yPos, 0 + rectX * 10, 176 + rectWidth * 8, 10, 8); SKC.drawString(str, xPos + width - (11 + 1 + SKC.getStringWidth(str)), yPos, -1); this.zLevel -= 100.0F; } /* private final int[] tickTimes = new int[240]; private final long[] frames = new long[240]; private int tickIndex; private long frameLast; private long frameWait; private int lastIndex; private int frameCounter; private int frameIndex; private long startNanoTime = System.nanoTime(); long now = System.nanoTime(); this.addFrame(now - this.startNanoTime); this.startNanoTime = now; private void addFrame(long runningTime) { this.frames[this.frameIndex] = runningTime; ++this.frameIndex; if (this.frameIndex == 240) { this.frameIndex = 0; } if (this.frameCounter < 240) { this.lastIndex = 0; ++this.frameCounter; } else { this.lastIndex = (this.frameIndex + 1) % 240; } } private void updateTick() { long n = System.nanoTime(); if(n < this.frameLast + this.frameWait) return; this.frameWait = 50000000L - ((n - (this.frameLast + this.frameWait)) < 50000000L ? (n - (this.frameLast + this.frameWait)) : 0L); this.frameLast = n; this.tickTimes[this.tickIndex++] = this.isServer() ? (int)this.server.getLastTick() : 0; if(this.tickIndex == 240) { this.tickIndex = 0; } } private int blendColors(int color1, int color2, float value) { int i = color1 >> 24 & 255; int j = color1 >> 16 & 255; int k = color1 >> 8 & 255; int l = color1 & 255; int i1 = color2 >> 24 & 255; int j1 = color2 >> 16 & 255; int k1 = color2 >> 8 & 255; int l1 = color2 & 255; int i2 = ExtMath.clampi((int)((float)i + (float)(i1 - i) * value), 0, 255); int j2 = ExtMath.clampi((int)((float)j + (float)(j1 - j) * value), 0, 255); int k2 = ExtMath.clampi((int)((float)k + (float)(k1 - k) * value), 0, 255); int l2 = ExtMath.clampi((int)((float)l + (float)(l1 - l) * value), 0, 255); return i2 << 24 | j2 << 16 | k2 << 8 | l2; } private int getFrameColor(int value, int base, int mid, int high) { value = ExtMath.clampi(value, base, high); return value < mid ? this.blendColors(-16711936, -256, (float)value / (float)mid) : this.blendColors(-256, -65536, (float)(value - mid) / (float)(high - mid)); } private void drawHorizontalLine(int startX, int endX, int y, int color) { if (endX < startX) { int i = startX; startX = endX; endX = i; } Gui.drawRect(startX, y, endX + 1, y + 1, color); } private void drawVerticalLine(int x, int startY, int endY, int color) { if (endY < startY) { int i = startY; startY = endY; endY = i; } Gui.drawRect(x, startY + 1, x + 1, endY, color); } private void renderLagometer() { GlState.disableDepth(); int w = this.displayWidth; int h = this.displayHeight; int shifted = this.lastIndex; int x = 0; Gui.drawRect(0, h - 74, 240, h - 14, 0x90505050); drawHorizontalLine(0, 239, h - 44, 0x5fffffff); drawHorizontalLine(0, 239, h - 74, 0x5fffffff); while(shifted != this.frameIndex) { int value = (int) (this.frames[shifted] / 1000000L); // , 30); int color = this.getFrameColor(value, 0, 17, 67); if(value > 0) drawVerticalLine(x, h - 14, h - 14 - value, color & 0xc0ffffff); ++x; shifted = (shifted + 1) % 240; } Gui.drawRect(1, h - 30 - 13, 26, h - 30 - 4, 0x90505050); FontRenderer.drawString("30ms", 2, h - 30 - 12, 0xE0E0E0); Gui.drawRect(1, h - 60 - 13, 26, h - 60 - 4, 0x90505050); FontRenderer.drawString("60ms", 2, h - 60 - 12, 0xE0E0E0); int width = FontRenderer.getStringWidth("ms/Frame"); Gui.drawRect(238 - width, h - 60 - 13, 239, h - 60 - 4, 0x90505050); FontRenderer.drawString("ms/Frame", 239 - width, h - 60 - 12, 0xE0E0E0); if(this.isServer()) { this.updateTick(); Gui.drawRect(w - 240, h - 74, w, h - 14, 0x90505050); x = w - 240; drawHorizontalLine(w - 240, w - 1, h - 44, 0x5fffffff); drawHorizontalLine(w - 240, w - 1, h - 74, 0x5fffffff); for (int n = 0; n < 240; ++n) { int value = this.tickTimes[(n + this.tickIndex) % 240]; int color = this.getFrameColor(value, 0, 50, 250); if(value > 0) drawVerticalLine(x, h - 14, h - 14 - value, color & 0xc0ffffff); ++x; shifted = (shifted + 1) % 240; } width = FontRenderer.getStringWidth("ms/Tick"); Gui.drawRect(w - 240 + 1, h - 30 - 13, w - 240 + 26, h - 30 - 4, 0x90505050); FontRenderer.drawString("30ms", w - 240 + 2, h - 30 - 12, 0xE0E0E0); Gui.drawRect(w - 240 + 1, h - 60 - 13, w - 240 + 26, h - 60 - 4, 0x90505050); FontRenderer.drawString("60ms", w - 240 + 2, h - 60 - 12, 0xE0E0E0); Gui.drawRect(w - 2 - width, h - 60 - 13, w - 1, h - 60 - 4, 0x90505050); FontRenderer.drawString("ms/Tick", w - 1 - width, h - 60 - 12, 0xE0E0E0); } GlState.enableDepth(); } */