From cd417c6786256fa23f181ff0b76696bc6dfb0291 Mon Sep 17 00:00:00 2001 From: Christian Date: Wed, 11 Dec 2013 12:35:08 -0500 Subject: [PATCH] Fixed remote and local connections work with mods now. --- .../handshake/FMLHandshakeClientState.java | 35 +++++++++++++++---- .../network/handshake/FMLHandshakeCodec.java | 2 +- .../handshake/FMLHandshakeMessage.java | 2 +- .../handshake/FMLHandshakeServerState.java | 18 +++++++--- 4 files changed, 43 insertions(+), 14 deletions(-) diff --git a/src/main/java/cpw/mods/fml/common/network/handshake/FMLHandshakeClientState.java b/src/main/java/cpw/mods/fml/common/network/handshake/FMLHandshakeClientState.java index 76efce2df3..529e01d229 100644 --- a/src/main/java/cpw/mods/fml/common/network/handshake/FMLHandshakeClientState.java +++ b/src/main/java/cpw/mods/fml/common/network/handshake/FMLHandshakeClientState.java @@ -56,7 +56,25 @@ enum FMLHandshakeClientState implements IHandshakeState dispatcher.rejectHandshake(result); return ERROR; } - ctx.writeAndFlush(new FMLHandshakeMessage.ClientAck()); + ctx.writeAndFlush(new FMLHandshakeMessage.HandshakeAck()); + if (!ctx.channel().attr(NetworkDispatcher.IS_LOCAL).get()) + { + return WAITINGSERVERCOMPLETE; + } + else + { + return COMPLETE; + } + } + }, + WAITINGSERVERCOMPLETE + { + @Override + public FMLHandshakeClientState accept(ChannelHandlerContext ctx, FMLHandshakeMessage msg) + { + FMLHandshakeMessage.ModIdData modIds = (FMLHandshakeMessage.ModIdData)msg; + GameData.injectWorldIDMap(modIds.dataList()); + ctx.writeAndFlush(new FMLHandshakeMessage.HandshakeAck()); return COMPLETE; } }, @@ -67,13 +85,16 @@ enum FMLHandshakeClientState implements IHandshakeState { NetworkDispatcher dispatcher = ctx.channel().attr(NetworkDispatcher.FML_DISPATCHER).get(); dispatcher.continueToClientPlayState(); - if (!ctx.channel().attr(NetworkDispatcher.IS_LOCAL).get()) - { - FMLHandshakeMessage.ModIdData modIds = (FMLHandshakeMessage.ModIdData)msg; - GameData.injectWorldIDMap(modIds.dataList()); - } FMLLog.info("Client side modded connection established"); - ctx.writeAndFlush(new FMLHandshakeMessage.ClientAck()); + ctx.writeAndFlush(new FMLHandshakeMessage.HandshakeAck()); + return DONE; + } + }, + DONE + { + @Override + public FMLHandshakeClientState accept(ChannelHandlerContext ctx, FMLHandshakeMessage msg) + { return this; } }, diff --git a/src/main/java/cpw/mods/fml/common/network/handshake/FMLHandshakeCodec.java b/src/main/java/cpw/mods/fml/common/network/handshake/FMLHandshakeCodec.java index 5019dff746..8ccd3c9f3c 100644 --- a/src/main/java/cpw/mods/fml/common/network/handshake/FMLHandshakeCodec.java +++ b/src/main/java/cpw/mods/fml/common/network/handshake/FMLHandshakeCodec.java @@ -11,7 +11,7 @@ public class FMLHandshakeCodec extends FMLIndexedMessageToMessageCodec return ERROR; } ctx.writeAndFlush(new FMLHandshakeMessage.ModList(Loader.instance().getActiveModList())); - if (ctx.channel().attr(NetworkDispatcher.IS_LOCAL).get()) - { - return COMPLETE; - } return WAITINGCACK; } }, @@ -56,7 +52,11 @@ enum FMLHandshakeServerState implements IHandshakeState @Override public FMLHandshakeServerState accept(ChannelHandlerContext ctx, FMLHandshakeMessage msg) { - ctx.writeAndFlush(new FMLHandshakeMessage.ModIdData(GameData.buildItemDataList())); + if (!ctx.channel().attr(NetworkDispatcher.IS_LOCAL).get()) + { + ctx.writeAndFlush(new FMLHandshakeMessage.ModIdData(GameData.buildItemDataList())); + } + ctx.writeAndFlush(new FMLHandshakeMessage.HandshakeAck()); return COMPLETE; } }, @@ -68,6 +68,14 @@ enum FMLHandshakeServerState implements IHandshakeState NetworkDispatcher dispatcher = ctx.channel().attr(NetworkDispatcher.FML_DISPATCHER).get(); FMLLog.info("Server side modded connection established"); dispatcher.continueToServerPlayState(); + return DONE; + } + }, + DONE + { + @Override + public FMLHandshakeServerState accept(ChannelHandlerContext ctx, FMLHandshakeMessage msg) + { return this; } },