package net.minecraft.client.gui;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import net.minecraft.client.Minecraft;
import net.minecraft.client.mco.ExceptionMcoService;
import net.minecraft.client.mco.McoClient;
import net.minecraft.client.mco.McoServer;
import net.minecraft.client.mco.McoServerList;
import net.minecraft.client.multiplayer.ServerAddress;
import net.minecraft.network.packet.Packet;
import net.minecraft.util.ChatAllowedCharacters;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.MathHelper;
import net.minecraft.util.StringTranslate;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.GL11;
@SideOnly(Side.CLIENT)
public class GuiScreenOnlineServers extends GuiScreen
{
private GuiScreen field_96188_a;
private GuiSlotOnlineServerList field_96186_b;
private static int field_96187_c = 0;
private static final Object field_96185_d = new Object();
private int field_96189_n = -1;
private GuiButton field_96190_o;
private GuiButton field_96198_p;
private GuiButtonLink field_96197_q;
private GuiButton field_96196_r;
private String field_96195_s = null;
private McoServerList field_96194_t;
private boolean field_96193_u;
private List field_96192_v = Collections.emptyList();
private volatile int field_96199_x;
private Long field_102019_y;
private int field_104044_y = 0;
public GuiScreenOnlineServers(GuiScreen par1)
{
this.field_96188_a = par1;
}
/**
* Adds the buttons (and other controls) to the screen in question.
*/
public void initGui()
{
Keyboard.enableRepeatEvents(true);
this.buttonList.clear();
this.field_96194_t = new McoServerList(this.mc.session);
if (!this.field_96193_u)
{
this.field_96193_u = true;
this.field_96186_b = new GuiSlotOnlineServerList(this);
}
else
{
this.field_96186_b.func_104084_a(this.width, this.height, 32, this.height - 64);
}
(new ThreadOnlineScreen(this)).start();
this.func_96178_g();
}
public void func_96178_g()
{
StringTranslate stringtranslate = StringTranslate.getInstance();
this.buttonList.add(this.field_96196_r = new GuiButton(1, this.width / 2 - 154, this.height - 52, 100, 20, stringtranslate.translateKey("mco.selectServer.select")));
this.buttonList.add(this.field_96198_p = new GuiButton(2, this.width / 2 - 48, this.height - 52, 100, 20, stringtranslate.translateKey("mco.selectServer.create")));
this.buttonList.add(this.field_96190_o = new GuiButton(3, this.width / 2 + 58, this.height - 52, 100, 20, stringtranslate.translateKey("mco.selectServer.configure")));
this.buttonList.add(this.field_96197_q = new GuiButtonLink(4, this.width / 2 - 154, this.height - 28, 154, 20, stringtranslate.translateKey("mco.selectServer.moreinfo")));
this.buttonList.add(new GuiButton(0, this.width / 2 + 6, this.height - 28, 153, 20, stringtranslate.translateKey("gui.cancel")));
boolean flag = this.field_96189_n >= 0 && this.field_96189_n < this.field_96186_b.getSize();
this.field_96196_r.enabled = flag && ((McoServer)this.field_96192_v.get(this.field_96189_n)).field_96404_d.equals("OPEN") && !((McoServer)this.field_96192_v.get(this.field_96189_n)).field_98166_h;
this.field_96190_o.enabled = flag && this.mc.session.username.equals(((McoServer)this.field_96192_v.get(this.field_96189_n)).field_96405_e);
this.field_96198_p.enabled = this.field_96199_x > 0;
}
/**
* Called from the main game loop to update the screen.
*/
public void updateScreen()
{
super.updateScreen();
++this.field_104044_y;
if (this.field_96194_t.func_98251_a())
{
List list = this.field_96194_t.func_98252_c();
Iterator iterator = list.iterator();
while (iterator.hasNext())
{
McoServer mcoserver = (McoServer)iterator.next();
Iterator iterator1 = this.field_96192_v.iterator();
while (iterator1.hasNext())
{
McoServer mcoserver1 = (McoServer)iterator1.next();
if (mcoserver.field_96408_a == mcoserver1.field_96408_a)
{
mcoserver.func_96401_a(mcoserver1);
if (this.field_102019_y != null && this.field_102019_y.longValue() == mcoserver.field_96408_a)
{
this.field_102019_y = null;
mcoserver.field_96411_l = false;
}
break;
}
}
}
this.field_96192_v = list;
this.field_96194_t.func_98250_b();
}
this.field_96198_p.enabled = this.field_96199_x > 0;
}
/**
* Called when the screen is unloaded. Used to disable keyboard repeat events
*/
public void onGuiClosed()
{
Keyboard.enableRepeatEvents(false);
}
/**
* Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e).
*/
protected void actionPerformed(GuiButton par1GuiButton)
{
if (par1GuiButton.enabled)
{
if (par1GuiButton.id == 1)
{
this.func_96159_a(this.field_96189_n);
}
else if (par1GuiButton.id == 3)
{
List list = this.field_96194_t.func_98252_c();
if (this.field_96189_n < list.size())
{
McoServer mcoserver = (McoServer)list.get(this.field_96189_n);
McoServer mcoserver1 = this.func_98086_a(mcoserver.field_96408_a);
if (mcoserver1 != null)
{
this.field_96194_t.func_98248_d();
this.mc.displayGuiScreen(new GuiScreenConfigureWorld(this, mcoserver1));
}
}
}
else if (par1GuiButton.id == 0)
{
this.field_96194_t.func_98248_d();
this.mc.displayGuiScreen(this.field_96188_a);
}
else if (par1GuiButton.id == 2)
{
this.field_96194_t.func_98248_d();
this.mc.displayGuiScreen(new GuiScreenCreateOnlineWorld(this));
}
else if (par1GuiButton.id == 4)
{
this.field_96197_q.func_96135_a("http://realms.minecraft.net/");
}
else
{
this.field_96186_b.actionPerformed(par1GuiButton);
}
}
}
public void func_102018_a(long par1)
{
this.field_96189_n = -1;
this.field_102019_y = Long.valueOf(par1);
}
private McoServer func_98086_a(long par1)
{
McoClient mcoclient = new McoClient(this.mc.session);
try
{
return mcoclient.func_98176_a(par1);
}
catch (ExceptionMcoService exceptionmcoservice)
{
;
}
catch (IOException ioexception)
{
;
}
return null;
}
/**
* Fired when a key is typed. This is the equivalent of KeyListener.keyTyped(KeyEvent e).
*/
protected void keyTyped(char par1, int par2)
{
if (par2 == 59)
{
this.mc.gameSettings.hideServerAddress = !this.mc.gameSettings.hideServerAddress;
this.mc.gameSettings.saveOptions();
}
else
{
if (par1 == 13)
{
this.actionPerformed((GuiButton)this.buttonList.get(2));
}
else
{
super.keyTyped(par1, par2);
}
}
}
/**
* Draws the screen and all the components in it.
*/
public void drawScreen(int par1, int par2, float par3)
{
this.field_96195_s = null;
StringTranslate stringtranslate = StringTranslate.getInstance();
this.drawDefaultBackground();
this.field_96186_b.drawScreen(par1, par2, par3);
this.drawCenteredString(this.fontRenderer, stringtranslate.translateKey("mco.title"), this.width / 2, 20, 16777215);
super.drawScreen(par1, par2, par3);
if (this.field_96195_s != null)
{
this.func_96165_a(this.field_96195_s, par1, par2);
}
}
private void func_96159_a(int par1)
{
if (par1 >= 0 && par1 < this.field_96192_v.size())
{
McoServer mcoserver = (McoServer)this.field_96192_v.get(par1);
this.field_96194_t.func_98248_d();
GuiScreenLongRunningTask guiscreenlongrunningtask = new GuiScreenLongRunningTask(this.mc, this, new TaskOnlineConnect(this, mcoserver));
guiscreenlongrunningtask.func_98117_g();
this.mc.displayGuiScreen(guiscreenlongrunningtask);
}
}
private void func_101008_c(int par1, int par2, int par3, int par4)
{
this.mc.renderEngine.bindTexture("/gui/gui.png");
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glPushMatrix();
GL11.glScalef(0.5F, 0.5F, 0.5F);
this.drawTexturedModalRect(par1 * 2, par2 * 2, 191, 0, 16, 15);
GL11.glPopMatrix();
if (par3 >= par1 && par3 <= par1 + 9 && par4 >= par2 && par4 <= par2 + 9)
{
this.field_96195_s = "Expired World";
}
}
private void func_104039_b(int par1, int par2, int par3, int par4, int par5)
{
if (this.field_104044_y % 20 < 10)
{
this.mc.renderEngine.bindTexture("/gui/gui.png");
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glPushMatrix();
GL11.glScalef(0.5F, 0.5F, 0.5F);
this.drawTexturedModalRect(par1 * 2, par2 * 2, 207, 0, 16, 15);
GL11.glPopMatrix();
}
if (par3 >= par1 && par3 <= par1 + 9 && par4 >= par2 && par4 <= par2 + 9)
{
if (par5 == 0)
{
this.field_96195_s = "Expires in < a day";
}
else
{
this.field_96195_s = "Expires in " + par5 + (par5 > 1 ? " days" : " day");
}
}
}
private void func_101006_d(int par1, int par2, int par3, int par4)
{
this.mc.renderEngine.bindTexture("/gui/gui.png");
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glPushMatrix();
GL11.glScalef(0.5F, 0.5F, 0.5F);
this.drawTexturedModalRect(par1 * 2, par2 * 2, 207, 0, 16, 15);
GL11.glPopMatrix();
if (par3 >= par1 && par3 <= par1 + 9 && par4 >= par2 && par4 <= par2 + 9)
{
this.field_96195_s = "Open World";
}
}
private void func_101001_e(int par1, int par2, int par3, int par4)
{
this.mc.renderEngine.bindTexture("/gui/gui.png");
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glPushMatrix();
GL11.glScalef(0.5F, 0.5F, 0.5F);
this.drawTexturedModalRect(par1 * 2, par2 * 2, 223, 0, 16, 15);
GL11.glPopMatrix();
if (par3 >= par1 && par3 <= par1 + 9 && par4 >= par2 && par4 <= par2 + 9)
{
this.field_96195_s = "Closed World";
}
}
protected void func_96165_a(String par1Str, int par2, int par3)
{
if (par1Str != null)
{
int k = par2 + 12;
int l = par3 - 12;
int i1 = this.fontRenderer.getStringWidth(par1Str);
this.drawGradientRect(k - 3, l - 3, k + i1 + 3, l + 8 + 3, -1073741824, -1073741824);
this.fontRenderer.drawStringWithShadow(par1Str, k, l, -1);
}
}
private void func_96174_a(McoServer par1McoServer) throws IOException
{
if (par1McoServer.field_96414_k.equals(""))
{
par1McoServer.field_96414_k = EnumChatFormatting.GRAY + "" + 0;
}
par1McoServer.field_96415_h = 61;
ServerAddress serveraddress = ServerAddress.func_78860_a(par1McoServer.field_96403_g);
Socket socket = null;
DataInputStream datainputstream = null;
DataOutputStream dataoutputstream = null;
try
{
socket = new Socket();
socket.setSoTimeout(3000);
socket.setTcpNoDelay(true);
socket.setTrafficClass(18);
socket.connect(new InetSocketAddress(serveraddress.getIP(), serveraddress.getPort()), 3000);
datainputstream = new DataInputStream(socket.getInputStream());
dataoutputstream = new DataOutputStream(socket.getOutputStream());
dataoutputstream.write(254);
dataoutputstream.write(1);
if (datainputstream.read() != 255)
{
throw new IOException("Bad message");
}
String s = Packet.readString(datainputstream, 256);
char[] achar = s.toCharArray();
for (int i = 0; i < achar.length; ++i)
{
if (achar[i] != 167 && achar[i] != 0 && ChatAllowedCharacters.allowedCharacters.indexOf(achar[i]) < 0)
{
achar[i] = 63;
}
}
s = new String(achar);
int j;
int k;
String[] astring;
if (s.startsWith("\u00a7") && s.length() > 1)
{
astring = s.substring(1).split("\u0000");
if (MathHelper.parseIntWithDefault(astring[0], 0) == 1)
{
par1McoServer.field_96415_h = MathHelper.parseIntWithDefault(astring[1], par1McoServer.field_96415_h);
par1McoServer.field_96413_j = astring[2];
j = MathHelper.parseIntWithDefault(astring[4], 0);
k = MathHelper.parseIntWithDefault(astring[5], 0);
if (j >= 0 && k >= 0)
{
par1McoServer.field_96414_k = EnumChatFormatting.GRAY + "" + j;
}
else
{
par1McoServer.field_96414_k = "" + EnumChatFormatting.DARK_GRAY + "???";
}
}
else
{
par1McoServer.field_96413_j = "???";
par1McoServer.field_96415_h = 62;
par1McoServer.field_96414_k = "" + EnumChatFormatting.DARK_GRAY + "???";
}
}
else
{
astring = s.split("\u00a7");
s = astring[0];
j = -1;
k = -1;
try
{
j = Integer.parseInt(astring[1]);
k = Integer.parseInt(astring[2]);
}
catch (Exception exception)
{
;
}
par1McoServer.field_96407_c = EnumChatFormatting.GRAY + s;
if (j >= 0 && k > 0)
{
par1McoServer.field_96414_k = EnumChatFormatting.GRAY + "" + j;
}
else
{
par1McoServer.field_96414_k = "" + EnumChatFormatting.DARK_GRAY + "???";
}
par1McoServer.field_96413_j = "1.3";
par1McoServer.field_96415_h = 60;
}
}
finally
{
try
{
if (datainputstream != null)
{
datainputstream.close();
}
}
catch (Throwable throwable)
{
;
}
try
{
if (dataoutputstream != null)
{
dataoutputstream.close();
}
}
catch (Throwable throwable1)
{
;
}
try
{
if (socket != null)
{
socket.close();
}
}
catch (Throwable throwable2)
{
;
}
}
}
static Minecraft func_96177_a(GuiScreenOnlineServers par0GuiScreenOnlineServers)
{
return par0GuiScreenOnlineServers.mc;
}
static int func_98081_a(GuiScreenOnlineServers par0GuiScreenOnlineServers, int par1)
{
return par0GuiScreenOnlineServers.field_96199_x = par1;
}
static Minecraft func_98075_b(GuiScreenOnlineServers par0GuiScreenOnlineServers)
{
return par0GuiScreenOnlineServers.mc;
}
static List func_98094_c(GuiScreenOnlineServers par0GuiScreenOnlineServers)
{
return par0GuiScreenOnlineServers.field_96192_v;
}
static int func_98089_b(GuiScreenOnlineServers par0GuiScreenOnlineServers, int par1)
{
return par0GuiScreenOnlineServers.field_96189_n = par1;
}
static int func_98072_d(GuiScreenOnlineServers par0GuiScreenOnlineServers)
{
return par0GuiScreenOnlineServers.field_96189_n;
}
static GuiButton func_96161_f(GuiScreenOnlineServers par0GuiScreenOnlineServers)
{
return par0GuiScreenOnlineServers.field_96190_o;
}
static Minecraft func_98076_f(GuiScreenOnlineServers par0GuiScreenOnlineServers)
{
return par0GuiScreenOnlineServers.mc;
}
static GuiButton func_98092_g(GuiScreenOnlineServers par0GuiScreenOnlineServers)
{
return par0GuiScreenOnlineServers.field_96196_r;
}
static void func_98078_c(GuiScreenOnlineServers par0GuiScreenOnlineServers, int par1)
{
par0GuiScreenOnlineServers.func_96159_a(par1);
}
static Minecraft func_98091_h(GuiScreenOnlineServers par0GuiScreenOnlineServers)
{
return par0GuiScreenOnlineServers.mc;
}
static FontRenderer func_104038_i(GuiScreenOnlineServers par0GuiScreenOnlineServers)
{
return par0GuiScreenOnlineServers.fontRenderer;
}
static void func_101012_b(GuiScreenOnlineServers par0GuiScreenOnlineServers, int par1, int par2, int par3, int par4)
{
par0GuiScreenOnlineServers.func_101008_c(par1, par2, par3, par4);
}
static void func_101009_c(GuiScreenOnlineServers par0GuiScreenOnlineServers, int par1, int par2, int par3, int par4)
{
par0GuiScreenOnlineServers.func_101001_e(par1, par2, par3, par4);
}
static Minecraft func_104032_j(GuiScreenOnlineServers par0GuiScreenOnlineServers)
{
return par0GuiScreenOnlineServers.mc;
}
static void func_104030_a(GuiScreenOnlineServers par0GuiScreenOnlineServers, int par1, int par2, int par3, int par4, int par5)
{
par0GuiScreenOnlineServers.func_104039_b(par1, par2, par3, par4, par5);
}
static void func_104031_c(GuiScreenOnlineServers par0GuiScreenOnlineServers, int par1, int par2, int par3, int par4)
{
par0GuiScreenOnlineServers.func_101006_d(par1, par2, par3, par4);
}
static FontRenderer func_98084_i(GuiScreenOnlineServers par0GuiScreenOnlineServers)
{
return par0GuiScreenOnlineServers.fontRenderer;
}
static FontRenderer func_101005_j(GuiScreenOnlineServers par0GuiScreenOnlineServers)
{
return par0GuiScreenOnlineServers.fontRenderer;
}
static Object func_101007_h()
{
return field_96185_d;
}
static int func_101010_i()
{
return field_96187_c;
}
static int func_101014_j()
{
return field_96187_c++;
}
static void func_101002_a(GuiScreenOnlineServers par0GuiScreenOnlineServers, McoServer par1McoServer) throws IOException
{
par0GuiScreenOnlineServers.func_96174_a(par1McoServer);
}
static int func_101013_k()
{
return field_96187_c--;
}
static FontRenderer func_98079_k(GuiScreenOnlineServers par0GuiScreenOnlineServers)
{
return par0GuiScreenOnlineServers.fontRenderer;
}
static FontRenderer func_98087_l(GuiScreenOnlineServers par0GuiScreenOnlineServers)
{
return par0GuiScreenOnlineServers.fontRenderer;
}
static FontRenderer func_98074_m(GuiScreenOnlineServers par0GuiScreenOnlineServers)
{
return par0GuiScreenOnlineServers.fontRenderer;
}
static FontRenderer func_101000_n(GuiScreenOnlineServers par0GuiScreenOnlineServers)
{
return par0GuiScreenOnlineServers.fontRenderer;
}
static Minecraft func_101004_o(GuiScreenOnlineServers par0GuiScreenOnlineServers)
{
return par0GuiScreenOnlineServers.mc;
}
static String func_101011_a(GuiScreenOnlineServers par0GuiScreenOnlineServers, String par1Str)
{
return par0GuiScreenOnlineServers.field_96195_s = par1Str;
}
}