From 220b22869aa762a29973b449e5bc42a91257cbd6 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sat, 4 May 2019 16:24:29 +0200 Subject: [PATCH] Fix replay initialization with login phase on 1.11.2 and below While this commit also considerably simplifies/cleans the setup method, the actual fix is that the networkManager is now added to the channel pipeline with under the "packet_handler" key, whereas before it was unnamed causing issues when transitioning to the play state. --- .../replaymod/replay/FullReplaySender.java | 7 -- .../com/replaymod/replay/ReplayHandler.java | 72 ++++++++----------- 2 files changed, 30 insertions(+), 49 deletions(-) diff --git a/src/main/java/com/replaymod/replay/FullReplaySender.java b/src/main/java/com/replaymod/replay/FullReplaySender.java index 5d5a9276..80eff08a 100755 --- a/src/main/java/com/replaymod/replay/FullReplaySender.java +++ b/src/main/java/com/replaymod/replay/FullReplaySender.java @@ -705,13 +705,6 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend @SuppressWarnings("unchecked") public void channelActive(ChannelHandlerContext ctx) throws Exception { this.ctx = ctx; - //#if MC>=10904 - ctx.channel().attr(NetworkManager.PROTOCOL_ATTRIBUTE_KEY).set(EnumConnectionState.PLAY); - //#else - //#if MC>=10800 - //$$ ctx.attr(NetworkManager.attrKeyConnectionState).set(EnumConnectionState.PLAY); - //#endif - //#endif super.channelActive(ctx); } diff --git a/src/main/java/com/replaymod/replay/ReplayHandler.java b/src/main/java/com/replaymod/replay/ReplayHandler.java index 2e20b638..aa33b932 100755 --- a/src/main/java/com/replaymod/replay/ReplayHandler.java +++ b/src/main/java/com/replaymod/replay/ReplayHandler.java @@ -46,6 +46,11 @@ import net.minecraft.entity.EntityLivingBase; //$$ import org.lwjgl.opengl.Display; //#endif +//#if MC>=11200 +//#else +//$$ import io.netty.channel.ChannelOutboundHandlerAdapter; +//#endif + //#if MC<10904 //$$ import de.johni0702.minecraft.gui.element.GuiLabel; //$$ import de.johni0702.minecraft.gui.popup.GuiInfoPopup; @@ -69,9 +74,7 @@ import net.minecraftforge.fml.network.NetworkHooks; //$$ import cpw.mods.fml.common.Loader; //$$ import cpw.mods.fml.common.network.internal.FMLNetworkHandler; //$$ import com.replaymod.replay.gui.screen.GuiOpeningReplay; -//$$ import io.netty.channel.ChannelOutboundHandlerAdapter; //$$ import net.minecraft.entity.EntityLivingBase; -//$$ import net.minecraft.network.EnumConnectionState; //$$ //$$ import java.net.InetSocketAddress; //$$ import java.net.SocketAddress; @@ -231,40 +234,6 @@ public class ReplayHandler { t.printStackTrace(); } }; - //#if MC>=11300 - channel = new EmbeddedChannel(); - - channel.pipeline().addFirst("ReplayModReplay_replaySender", fullReplaySender); - channel.pipeline().addFirst("ReplayModReplay_quickReplaySender", quickReplaySender); - channel.pipeline().addLast("packet_handler", networkManager); - channel.pipeline().fireChannelActive(); - - networkManager.setNetHandler(new NetHandlerLoginClient(networkManager, mc, null, it -> {})); - //#if MC<11400 - NetworkHooks.registerClientLoginChannel(networkManager); - //#endif - // FIXME make this work (with vanilla and mods) on all other versions again, now that login phase is included - // probably have to change some of the forge handshake calls - //#else - //$$ NetHandlerLoginClient netHandlerLoginClient = - //$$ new NetHandlerLoginClient(networkManager, mc, null); - //$$ networkManager.setNetHandler(netHandlerLoginClient); - //$$ - //#if MC>=11200 - //$$ channel = new EmbeddedChannel(); - //$$ channel.pipeline().addFirst("ReplayModReplay_replaySender", fullReplaySender); - //$$ channel.pipeline().addFirst("ReplayModReplay_quickReplaySender", quickReplaySender); - //$$ channel.pipeline().addLast("packet_handler", networkManager); - //$$ channel.pipeline().fireChannelActive(); - //#else - //$$ channel = new EmbeddedChannel(networkManager); - //$$ channel.pipeline().addFirst("ReplayModReplay_replaySender", fullReplaySender); - //#if MC>=10904 - //$$ channel.pipeline().addFirst("ReplayModReplay_quickReplaySender", quickReplaySender); - //#endif - //$$ channel.pipeline().fireChannelActive(); - //#endif - //#endif //#else //$$ NetworkManager networkManager = new NetworkManager(true) { //$$ @Override @@ -285,16 +254,35 @@ public class ReplayHandler { //$$ t.printStackTrace(); //$$ } //$$ }; - //$$ networkManager.setNetHandler(new NetHandlerLoginClient(networkManager, mc, null)); - //$$ //$$ mc.displayGuiScreen(new GuiOpeningReplay(networkManager)); - //$$ + //#endif + + networkManager.setNetHandler(new NetHandlerLoginClient( + networkManager, + mc, + null + //#if MC>=11300 + , it -> {} + //#endif + )); + + + //#if MC>=11200 + channel = new EmbeddedChannel(); + //#else //$$ ChannelOutboundHandlerAdapter dummyHandler = new ChannelOutboundHandlerAdapter(); //$$ channel = new EmbeddedChannel(dummyHandler); //$$ channel.pipeline().remove(dummyHandler); - //$$ channel.pipeline().addFirst("ReplayModReplay_replaySender", fullReplaySender); - //$$ channel.pipeline().addAfter("ReplayModReplay_replaySender", "packet_handler", networkManager); - //$$ channel.pipeline().fireChannelActive(); + //#endif + //#if MC>=10904 + channel.pipeline().addLast("ReplayModReplay_quickReplaySender", quickReplaySender); + //#endif + channel.pipeline().addLast("ReplayModReplay_replaySender", fullReplaySender); + channel.pipeline().addLast("packet_handler", networkManager); + channel.pipeline().fireChannelActive(); + + //#if MC>=11300 && MC<11400 + NetworkHooks.registerClientLoginChannel(networkManager); //#endif }