package net.minecraft.client.multiplayer; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.util.concurrent.GenericFutureListener; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.concurrent.atomic.AtomicInteger; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiDisconnected; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.network.NetHandlerLoginClient; import net.minecraft.client.resources.I18n; import net.minecraft.network.EnumConnectionState; import net.minecraft.network.NetworkManager; import net.minecraft.network.handshake.client.C00Handshake; import net.minecraft.network.login.client.C00PacketLoginStart; import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatComponentTranslation; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @SideOnly(Side.CLIENT) public class GuiConnecting extends GuiScreen { private static final AtomicInteger CONNECTION_ID = new AtomicInteger(0); private static final Logger logger = LogManager.getLogger(); private NetworkManager networkManager; private boolean cancel; private final GuiScreen previousGuiScreen; private static final String __OBFID = "CL_00000685"; public GuiConnecting(GuiScreen p_i1181_1_, Minecraft p_i1181_2_, ServerData p_i1181_3_) { this.mc = p_i1181_2_; this.previousGuiScreen = p_i1181_1_; ServerAddress serveraddress = ServerAddress.func_78860_a(p_i1181_3_.serverIP); p_i1181_2_.loadWorld((WorldClient)null); p_i1181_2_.setServerData(p_i1181_3_); this.connect(serveraddress.getIP(), serveraddress.getPort()); } public GuiConnecting(GuiScreen p_i1182_1_, Minecraft p_i1182_2_, String p_i1182_3_, int p_i1182_4_) { this.mc = p_i1182_2_; this.previousGuiScreen = p_i1182_1_; p_i1182_2_.loadWorld((WorldClient)null); this.connect(p_i1182_3_, p_i1182_4_); } private void connect(final String ip, final int port) { logger.info("Connecting to " + ip + ", " + port); (new Thread("Server Connector #" + CONNECTION_ID.incrementAndGet()) { private static final String __OBFID = "CL_00000686"; public void run() { InetAddress inetaddress = null; try { if (GuiConnecting.this.cancel) { return; } inetaddress = InetAddress.getByName(ip); GuiConnecting.this.networkManager = NetworkManager.provideLanClient(inetaddress, port); GuiConnecting.this.networkManager.setNetHandler(new NetHandlerLoginClient(GuiConnecting.this.networkManager, GuiConnecting.this.mc, GuiConnecting.this.previousGuiScreen)); GuiConnecting.this.networkManager.scheduleOutboundPacket(new C00Handshake(5, ip, port, EnumConnectionState.LOGIN), new GenericFutureListener[0]); GuiConnecting.this.networkManager.scheduleOutboundPacket(new C00PacketLoginStart(GuiConnecting.this.mc.getSession().getProfile()), new GenericFutureListener[0]); } catch (UnknownHostException unknownhostexception) { if (GuiConnecting.this.cancel) { return; } GuiConnecting.logger.error("Couldn\'t connect to server", unknownhostexception); GuiConnecting.this.mc.displayGuiScreen(new GuiDisconnected(GuiConnecting.this.previousGuiScreen, "connect.failed", new ChatComponentTranslation("disconnect.genericReason", new Object[] {"Unknown host"}))); } catch (Exception exception) { if (GuiConnecting.this.cancel) { return; } GuiConnecting.logger.error("Couldn\'t connect to server", exception); String s = exception.toString(); if (inetaddress != null) { String s1 = inetaddress.toString() + ":" + port; s = s.replaceAll(s1, ""); } GuiConnecting.this.mc.displayGuiScreen(new GuiDisconnected(GuiConnecting.this.previousGuiScreen, "connect.failed", new ChatComponentTranslation("disconnect.genericReason", new Object[] {s}))); } } }).start(); } /** * Called from the main game loop to update the screen. */ public void updateScreen() { if (this.networkManager != null) { if (this.networkManager.isChannelOpen()) { this.networkManager.processReceivedPackets(); } else if (this.networkManager.getExitMessage() != null) { this.networkManager.getNetHandler().onDisconnect(this.networkManager.getExitMessage()); } } } /** * Fired when a key is typed (except F11 who toggle full screen). This is the equivalent of * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) */ protected void keyTyped(char typedChar, int keyCode) {} /** * Adds the buttons (and other controls) to the screen in question. */ public void initGui() { this.buttonList.clear(); this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 2 + 50, I18n.format("gui.cancel", new Object[0]))); } protected void actionPerformed(GuiButton button) { if (button.id == 0) { this.cancel = true; if (this.networkManager != null) { this.networkManager.closeChannel(new ChatComponentText("Aborted")); } this.mc.displayGuiScreen(this.previousGuiScreen); } } /** * Draws the screen and all the components in it. Args : mouseX, mouseY, renderPartialTicks */ public void drawScreen(int mouseX, int mouseY, float partialTicks) { this.drawDefaultBackground(); if (this.networkManager == null) { this.drawCenteredString(this.fontRendererObj, I18n.format("connect.connecting", new Object[0]), this.width / 2, this.height / 2 - 50, 16777215); } else { this.drawCenteredString(this.fontRendererObj, I18n.format("connect.authorizing", new Object[0]), this.width / 2, this.height / 2 - 50, 16777215); } super.drawScreen(mouseX, mouseY, partialTicks); } }