package net.minecraft.client.gui; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.LanServer; import net.minecraft.client.multiplayer.ServerData; import net.minecraft.client.renderer.Tessellator; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; import org.lwjgl.opengl.GL11; @SideOnly(Side.CLIENT) class GuiSlotServer extends GuiSlot { /** Instance to the GUI this list is on. */ final GuiMultiplayer parentGui; public GuiSlotServer(GuiMultiplayer par1GuiMultiplayer) { super(par1GuiMultiplayer.mc, par1GuiMultiplayer.width, par1GuiMultiplayer.height, 32, par1GuiMultiplayer.height - 64, 36); this.parentGui = par1GuiMultiplayer; } /** * Gets the size of the current slot list. */ protected int getSize() { return GuiMultiplayer.getInternetServerList(this.parentGui).countServers() + GuiMultiplayer.getListOfLanServers(this.parentGui).size() + 1; } /** * the element in the slot that was clicked, boolean for wether it was double clicked or not */ protected void elementClicked(int par1, boolean par2) { if (par1 < GuiMultiplayer.getInternetServerList(this.parentGui).countServers() + GuiMultiplayer.getListOfLanServers(this.parentGui).size()) { int j = GuiMultiplayer.getSelectedServer(this.parentGui); GuiMultiplayer.getAndSetSelectedServer(this.parentGui, par1); ServerData serverdata = GuiMultiplayer.getInternetServerList(this.parentGui).countServers() > par1 ? GuiMultiplayer.getInternetServerList(this.parentGui).getServerData(par1) : null; boolean flag1 = GuiMultiplayer.getSelectedServer(this.parentGui) >= 0 && GuiMultiplayer.getSelectedServer(this.parentGui) < this.getSize() && (serverdata == null || serverdata.field_82821_f == 61); boolean flag2 = GuiMultiplayer.getSelectedServer(this.parentGui) < GuiMultiplayer.getInternetServerList(this.parentGui).countServers(); GuiMultiplayer.getButtonSelect(this.parentGui).enabled = flag1; GuiMultiplayer.getButtonEdit(this.parentGui).enabled = flag2; GuiMultiplayer.getButtonDelete(this.parentGui).enabled = flag2; if (par2 && flag1) { GuiMultiplayer.func_74008_b(this.parentGui, par1); } else if (flag2 && GuiScreen.isShiftKeyDown() && j >= 0 && j < GuiMultiplayer.getInternetServerList(this.parentGui).countServers()) { GuiMultiplayer.getInternetServerList(this.parentGui).swapServers(j, GuiMultiplayer.getSelectedServer(this.parentGui)); } } } /** * returns true if the element passed in is currently selected */ protected boolean isSelected(int par1) { return par1 == GuiMultiplayer.getSelectedServer(this.parentGui); } /** * return the height of the content being scrolled */ protected int getContentHeight() { return this.getSize() * 36; } protected void drawBackground() { this.parentGui.drawDefaultBackground(); } protected void drawSlot(int par1, int par2, int par3, int par4, Tessellator par5Tessellator) { if (par1 < GuiMultiplayer.getInternetServerList(this.parentGui).countServers()) { this.func_77247_d(par1, par2, par3, par4, par5Tessellator); } else if (par1 < GuiMultiplayer.getInternetServerList(this.parentGui).countServers() + GuiMultiplayer.getListOfLanServers(this.parentGui).size()) { this.func_77248_b(par1, par2, par3, par4, par5Tessellator); } else { this.func_77249_c(par1, par2, par3, par4, par5Tessellator); } } private void func_77248_b(int par1, int par2, int par3, int par4, Tessellator par5Tessellator) { LanServer lanserver = (LanServer)GuiMultiplayer.getListOfLanServers(this.parentGui).get(par1 - GuiMultiplayer.getInternetServerList(this.parentGui).countServers()); this.parentGui.drawString(this.parentGui.fontRenderer, StatCollector.translateToLocal("lanServer.title"), par2 + 2, par3 + 1, 16777215); this.parentGui.drawString(this.parentGui.fontRenderer, lanserver.getServerMotd(), par2 + 2, par3 + 12, 8421504); if (this.parentGui.mc.gameSettings.hideServerAddress) { this.parentGui.drawString(this.parentGui.fontRenderer, StatCollector.translateToLocal("selectServer.hiddenAddress"), par2 + 2, par3 + 12 + 11, 3158064); } else { this.parentGui.drawString(this.parentGui.fontRenderer, lanserver.getServerIpPort(), par2 + 2, par3 + 12 + 11, 3158064); } } private void func_77249_c(int par1, int par2, int par3, int par4, Tessellator par5Tessellator) { this.parentGui.drawCenteredString(this.parentGui.fontRenderer, StatCollector.translateToLocal("lanServer.scanning"), this.parentGui.width / 2, par3 + 1, 16777215); String s; switch (GuiMultiplayer.getTicksOpened(this.parentGui) / 3 % 4) { case 0: default: s = "O o o"; break; case 1: case 3: s = "o O o"; break; case 2: s = "o o O"; } this.parentGui.drawCenteredString(this.parentGui.fontRenderer, s, this.parentGui.width / 2, par3 + 12, 8421504); } private void func_77247_d(int par1, int par2, int par3, int par4, Tessellator par5Tessellator) { ServerData serverdata = GuiMultiplayer.getInternetServerList(this.parentGui).getServerData(par1); synchronized (GuiMultiplayer.getLock()) { if (GuiMultiplayer.getThreadsPending() < 5 && !serverdata.field_78841_f) { serverdata.field_78841_f = true; serverdata.pingToServer = -2L; serverdata.serverMOTD = ""; serverdata.populationInfo = ""; GuiMultiplayer.increaseThreadsPending(); (new ThreadPollServers(this, serverdata)).start(); } } boolean flag = serverdata.field_82821_f > 61; boolean flag1 = serverdata.field_82821_f < 61; boolean flag2 = flag || flag1; this.parentGui.drawString(this.parentGui.fontRenderer, serverdata.serverName, par2 + 2, par3 + 1, 16777215); this.parentGui.drawString(this.parentGui.fontRenderer, serverdata.serverMOTD, par2 + 2, par3 + 12, 8421504); this.parentGui.drawString(this.parentGui.fontRenderer, serverdata.populationInfo, par2 + 215 - this.parentGui.fontRenderer.getStringWidth(serverdata.populationInfo), par3 + 12, 8421504); if (flag2) { String s = EnumChatFormatting.DARK_RED + serverdata.gameVersion; this.parentGui.drawString(this.parentGui.fontRenderer, s, par2 + 200 - this.parentGui.fontRenderer.getStringWidth(s), par3 + 1, 8421504); } if (!this.parentGui.mc.gameSettings.hideServerAddress && !serverdata.isHidingAddress()) { this.parentGui.drawString(this.parentGui.fontRenderer, serverdata.serverIP, par2 + 2, par3 + 12 + 11, 3158064); } else { this.parentGui.drawString(this.parentGui.fontRenderer, StatCollector.translateToLocal("selectServer.hiddenAddress"), par2 + 2, par3 + 12 + 11, 3158064); } GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.parentGui.mc.renderEngine.bindTexture("/gui/icons.png"); byte b0 = 0; boolean flag3 = false; String s1 = ""; int i1; if (flag2) { s1 = flag ? "Client out of date!" : "Server out of date!"; i1 = 5; } else if (serverdata.field_78841_f && serverdata.pingToServer != -2L) { if (serverdata.pingToServer < 0L) { i1 = 5; } else if (serverdata.pingToServer < 150L) { i1 = 0; } else if (serverdata.pingToServer < 300L) { i1 = 1; } else if (serverdata.pingToServer < 600L) { i1 = 2; } else if (serverdata.pingToServer < 1000L) { i1 = 3; } else { i1 = 4; } if (serverdata.pingToServer < 0L) { s1 = "(no connection)"; } else { s1 = serverdata.pingToServer + "ms"; } } else { b0 = 1; i1 = (int)(Minecraft.getSystemTime() / 100L + (long)(par1 * 2) & 7L); if (i1 > 4) { i1 = 8 - i1; } s1 = "Polling.."; } this.parentGui.drawTexturedModalRect(par2 + 205, par3, 0 + b0 * 10, 176 + i1 * 8, 10, 8); byte b1 = 4; if (this.mouseX >= par2 + 205 - b1 && this.mouseY >= par3 - b1 && this.mouseX <= par2 + 205 + 10 + b1 && this.mouseY <= par3 + 8 + b1) { GuiMultiplayer.getAndSetLagTooltip(this.parentGui, s1); } } }