diff --git a/fml/patches/minecraft/net/minecraft/client/Minecraft.java.patch b/fml/patches/minecraft/net/minecraft/client/Minecraft.java.patch index 169f32d7e6..d67753a7a7 100644 --- a/fml/patches/minecraft/net/minecraft/client/Minecraft.java.patch +++ b/fml/patches/minecraft/net/minecraft/client/Minecraft.java.patch @@ -28,7 +28,7 @@ this.field_71446_o = new TextureManager(this.field_110451_am); this.field_110451_am.func_110542_a(this.field_71446_o); this.field_147127_av = new SoundHandler(this.field_110451_am, this.field_71474_y); -@@ -508,6 +513,7 @@ +@@ -508,12 +513,13 @@ this.field_71446_o.func_130088_a(TextureMap.field_110576_c, new TextureMap(1, "textures/items")); GL11.glViewport(0, 0, this.field_71443_c, this.field_71440_d); this.field_71452_i = new EffectRenderer(this.field_71441_e, this.field_71446_o); @@ -36,6 +36,13 @@ this.func_71361_d("Post startup"); this.field_71456_v = new GuiIngame(this); + if (this.field_71475_ae != null) + { +- this.func_147108_a(new GuiConnecting(new GuiMainMenu(), this, this.field_71475_ae, this.field_71477_af)); ++ FMLClientHandler.instance().connectToServerAtStartup(this.field_71475_ae, this.field_71477_af); + } + else + { @@ -527,6 +533,7 @@ this.func_71352_k(); } diff --git a/fml/patches/minecraft/net/minecraft/client/gui/GuiMultiplayer.java.patch b/fml/patches/minecraft/net/minecraft/client/gui/GuiMultiplayer.java.patch index 43b0b5b4b4..a65e90b1d7 100644 --- a/fml/patches/minecraft/net/minecraft/client/gui/GuiMultiplayer.java.patch +++ b/fml/patches/minecraft/net/minecraft/client/gui/GuiMultiplayer.java.patch @@ -16,3 +16,12 @@ } public void func_73866_w_() +@@ -366,7 +368,7 @@ + + private void func_146791_a(ServerData p_146791_1_) + { +- this.field_146297_k.func_147108_a(new GuiConnecting(this, this.field_146297_k, p_146791_1_)); ++ FMLClientHandler.instance().connectToServer(this, p_146791_1_); + } + + public void func_146790_a(int p_146790_1_) diff --git a/fml/src/main/java/cpw/mods/fml/client/FMLClientHandler.java b/fml/src/main/java/cpw/mods/fml/client/FMLClientHandler.java index 1b1688a2ce..619d8d2fb3 100644 --- a/fml/src/main/java/cpw/mods/fml/client/FMLClientHandler.java +++ b/fml/src/main/java/cpw/mods/fml/client/FMLClientHandler.java @@ -18,16 +18,21 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityClientPlayerMP; import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiIngameMenu; +import net.minecraft.client.gui.GuiMainMenu; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiSelectWorld; import net.minecraft.client.gui.ServerListEntryNormal; +import net.minecraft.client.multiplayer.GuiConnecting; import net.minecraft.client.multiplayer.ServerData; import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.network.OldServerPinger; import net.minecraft.client.renderer.entity.Render; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.resources.IReloadableResourceManager; @@ -590,9 +595,11 @@ public class FMLClientHandler implements IFMLSidedHandler } serverDataTag.put(data, new ExtendedServerListData("VANILLA", false, -1, !moddedClientAllowed)); } + startupConnectionData.countDown(); } private static final ResourceLocation iconSheet = new ResourceLocation("fml:textures/gui/icons.png"); + private static final CountDownLatch startupConnectionData = new CountDownLatch(1); public String enhanceServerListEntry(ServerListEntryNormal serverListEntry, ServerData serverEntry, int x, int width, int y, int relativeMouseX, int relativeMouseY) { @@ -647,4 +654,35 @@ public class FMLClientHandler implements IFMLSidedHandler { return description.endsWith(":NOFML§r") ? description.substring(0, description.length() - 8)+"§r" : description; } + + public void connectToServerAtStartup(String host, int port) + { + setupServerList(); + OldServerPinger osp = new OldServerPinger(); + ServerData serverData = new ServerData("Command Line", host+":"+port); + try + { + osp.func_147224_a(serverData); + startupConnectionData.await(30, TimeUnit.SECONDS); + } + catch (Exception e) + { + showGuiScreen(new GuiConnecting(new GuiMainMenu(), client, host, port)); + return; + } + connectToServer(new GuiMainMenu(), serverData); + } + + public void connectToServer(GuiScreen guiMultiplayer, ServerData serverEntry) + { + ExtendedServerListData extendedData = serverDataTag.get(serverEntry); + if (extendedData.isBlocked) + { + showGuiScreen(new GuiAccessDenied(guiMultiplayer, serverEntry)); + } + else + { + showGuiScreen(new GuiConnecting(guiMultiplayer, client, serverEntry)); + } + } }