From ef1ee38b55f0772edd7c94c9810bd58946532da2 Mon Sep 17 00:00:00 2001 From: Christian Date: Thu, 16 Jan 2014 14:58:28 -0500 Subject: [PATCH] Fix bukkit connectivity issue. --- .../network/NetHandlerPlayClient.java.patch | 18 ++++++++++++++ .../cpw/mods/fml/client/FMLClientHandler.java | 24 +++++++++++++++++++ .../cpw/mods/fml/common/FMLCommonHandler.java | 5 ++++ .../cpw/mods/fml/common/IFMLSidedHandler.java | 2 ++ .../network/handshake/NetworkDispatcher.java | 1 + .../cpw/mods/fml/server/FMLServerHandler.java | 5 ++++ 6 files changed, 55 insertions(+) create mode 100644 fml/patches/minecraft/net/minecraft/client/network/NetHandlerPlayClient.java.patch diff --git a/fml/patches/minecraft/net/minecraft/client/network/NetHandlerPlayClient.java.patch b/fml/patches/minecraft/net/minecraft/client/network/NetHandlerPlayClient.java.patch new file mode 100644 index 000000000..473cdec35 --- /dev/null +++ b/fml/patches/minecraft/net/minecraft/client/network/NetHandlerPlayClient.java.patch @@ -0,0 +1,18 @@ +--- ../src-base/minecraft/net/minecraft/client/network/NetHandlerPlayClient.java ++++ ../src-work/minecraft/net/minecraft/client/network/NetHandlerPlayClient.java +@@ -1,6 +1,7 @@ + package net.minecraft.client.network; + + import com.google.common.base.Charsets; ++import cpw.mods.fml.client.FMLClientHandler; + import cpw.mods.fml.relauncher.Side; + import cpw.mods.fml.relauncher.SideOnly; + import io.netty.buffer.ByteBuf; +@@ -215,6 +216,7 @@ + this.field_147299_f = p_i45061_1_; + this.field_147307_j = p_i45061_2_; + this.field_147302_e = p_i45061_3_; ++ FMLClientHandler.instance().setPlayClient(this); + } + + public void func_147296_c() 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 619d8d2fb..7c07b9cb9 100644 --- a/fml/src/main/java/cpw/mods/fml/client/FMLClientHandler.java +++ b/fml/src/main/java/cpw/mods/fml/client/FMLClientHandler.java @@ -32,6 +32,7 @@ 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.NetHandlerPlayClient; import net.minecraft.client.network.OldServerPinger; import net.minecraft.client.renderer.entity.Render; import net.minecraft.client.renderer.entity.RenderManager; @@ -684,5 +685,28 @@ public class FMLClientHandler implements IFMLSidedHandler { showGuiScreen(new GuiConnecting(guiMultiplayer, client, serverEntry)); } + playClientBlock = new CountDownLatch(1); + } + + private CountDownLatch playClientBlock; + public void setPlayClient(NetHandlerPlayClient netHandlerPlayClient) + { + playClientBlock.countDown(); + } + + @Override + public void waitForPlayClient() + { + boolean gotIt = false; + try + { + gotIt = playClientBlock.await(1,TimeUnit.SECONDS); + } catch (InterruptedException e) + { + } + if (!gotIt) + { + throw new RuntimeException("Timeout waiting for client thread to catch up!"); + } } } diff --git a/fml/src/main/java/cpw/mods/fml/common/FMLCommonHandler.java b/fml/src/main/java/cpw/mods/fml/common/FMLCommonHandler.java index a67cb1926..a84035523 100644 --- a/fml/src/main/java/cpw/mods/fml/common/FMLCommonHandler.java +++ b/fml/src/main/java/cpw/mods/fml/common/FMLCommonHandler.java @@ -498,4 +498,9 @@ public class FMLCommonHandler { return sidedDelegate.getClientPlayHandler(); } + + public void waitForPlayClient() + { + sidedDelegate.waitForPlayClient(); + } } diff --git a/fml/src/main/java/cpw/mods/fml/common/IFMLSidedHandler.java b/fml/src/main/java/cpw/mods/fml/common/IFMLSidedHandler.java index 9390142f5..77d98b2ff 100644 --- a/fml/src/main/java/cpw/mods/fml/common/IFMLSidedHandler.java +++ b/fml/src/main/java/cpw/mods/fml/common/IFMLSidedHandler.java @@ -48,4 +48,6 @@ public interface IFMLSidedHandler NetworkManager getClientToServerNetworkManager(); INetHandler getClientPlayHandler(); + + void waitForPlayClient(); } diff --git a/fml/src/main/java/cpw/mods/fml/common/network/handshake/NetworkDispatcher.java b/fml/src/main/java/cpw/mods/fml/common/network/handshake/NetworkDispatcher.java index ba43bec04..3d099b59f 100644 --- a/fml/src/main/java/cpw/mods/fml/common/network/handshake/NetworkDispatcher.java +++ b/fml/src/main/java/cpw/mods/fml/common/network/handshake/NetworkDispatcher.java @@ -148,6 +148,7 @@ public class NetworkDispatcher extends SimpleChannelInboundHandler imple void clientListenForServerHandshake() { manager.func_150723_a(EnumConnectionState.PLAY); + FMLCommonHandler.instance().waitForPlayClient(); this.netHandler = FMLCommonHandler.instance().getClientPlayHandler(); this.state = ConnectionState.AWAITING_HANDSHAKE; } diff --git a/fml/src/main/java/cpw/mods/fml/server/FMLServerHandler.java b/fml/src/main/java/cpw/mods/fml/server/FMLServerHandler.java index 78d5d230e..3dac409ad 100644 --- a/fml/src/main/java/cpw/mods/fml/server/FMLServerHandler.java +++ b/fml/src/main/java/cpw/mods/fml/server/FMLServerHandler.java @@ -221,4 +221,9 @@ public class FMLServerHandler implements IFMLSidedHandler { return null; } + @Override + public void waitForPlayClient() + { + // NOOP + } }