diff --git a/src/main/java/com/replaymod/recording/mixin/MixinNetHandlerLoginClient.java b/src/main/java/com/replaymod/recording/mixin/MixinNetHandlerLoginClient.java index 54cf8e67..b67d40bc 100644 --- a/src/main/java/com/replaymod/recording/mixin/MixinNetHandlerLoginClient.java +++ b/src/main/java/com/replaymod/recording/mixin/MixinNetHandlerLoginClient.java @@ -1,35 +1,26 @@ package com.replaymod.recording.mixin; +import com.replaymod.core.versions.MCVer; import com.replaymod.recording.ReplayModRecording; +import com.replaymod.recording.handler.RecordingEventHandler.RecordingEventSender; import net.minecraft.client.network.ClientLoginNetworkHandler; import net.minecraft.network.ClientConnection; +import net.minecraft.network.Packet; +import net.minecraft.network.packet.s2c.login.LoginQueryRequestS2CPacket; +import net.minecraft.network.packet.s2c.login.LoginSuccessS2CPacket; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -//#if MC>=11400 -import com.replaymod.core.versions.MCVer; -import com.replaymod.recording.handler.RecordingEventHandler.RecordingEventSender; -import net.minecraft.network.Packet; -import net.minecraft.network.packet.s2c.login.LoginQueryRequestS2CPacket; -import net.minecraft.network.packet.s2c.login.LoginSuccessS2CPacket; -//#else -//$$ import net.minecraftforge.fml.common.network.FMLNetworkEvent; -//#endif - @Mixin(ClientLoginNetworkHandler.class) public abstract class MixinNetHandlerLoginClient { - @Shadow - //#if MC>=10800 + @Final @Shadow private ClientConnection connection; - //#else - //$$ private NetworkManager field_147393_d; - //#endif - //#if MC>=11400 @Inject(method = "onQueryRequest", at=@At("HEAD")) private void earlyInitiateRecording(LoginQueryRequestS2CPacket packet, CallbackInfo ci) { initiateRecording(packet); @@ -50,27 +41,4 @@ public abstract class MixinNetHandlerLoginClient { eventSender.getRecordingEventHandler().onPacket(packet); } } - //#else - //$$ /** - //$$ * Starts the recording right before switching into PLAY state. - //$$ * We cannot use the {@link FMLNetworkEvent.ClientConnectedToServerEvent} - //$$ * as it only fires after the forge handshake. - //$$ */ - //$$ @Inject(method = "handleLoginSuccess", at=@At("HEAD")) - //$$ public void replayModRecording_initiateRecording(CallbackInfo cb) { - //#if MC>=10800 - //$$ ReplayModRecording.instance.initiateRecording(this.networkManager); - //#else - //$$ ReplayModRecording.instance.initiateRecording(this.field_147393_d); - //#endif - //$$ } - //#endif - - // Race condition in Forge's networking (not sure if still present in 1.13) - //#if MC>=11200 && MC<11400 - //$$ @Inject(method = "handleLoginSuccess", at=@At("RETURN")) - //$$ public void replayModRecording_raceConditionWorkAround(CallbackInfo cb) { - //$$ ((NetworkManagerAccessor) this.networkManager).getChannel().config().setAutoRead(true); - //$$ } - //#endif } diff --git a/versions/1.12.2/src/main/java/com/replaymod/recording/mixin/MixinNetHandlerLoginClient.java b/versions/1.12.2/src/main/java/com/replaymod/recording/mixin/MixinNetHandlerLoginClient.java new file mode 100644 index 00000000..10c052e8 --- /dev/null +++ b/versions/1.12.2/src/main/java/com/replaymod/recording/mixin/MixinNetHandlerLoginClient.java @@ -0,0 +1,37 @@ +package com.replaymod.recording.mixin; + +import com.replaymod.recording.ReplayModRecording; +import net.minecraft.client.network.NetHandlerLoginClient; +import net.minecraft.network.NetworkManager; +import net.minecraftforge.fml.common.network.FMLNetworkEvent; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(NetHandlerLoginClient.class) +public abstract class MixinNetHandlerLoginClient { + + @Final @Shadow + private NetworkManager networkManager; + + /** + * Starts the recording right before switching into PLAY state. + * We cannot use the {@link FMLNetworkEvent.ClientConnectedToServerEvent} + * as it only fires after the forge handshake. + */ + @Inject(method = "handleLoginSuccess", at=@At("HEAD")) + public void replayModRecording_initiateRecording(CallbackInfo cb) { + ReplayModRecording.instance.initiateRecording(this.networkManager); + } + + // Race condition in Forge's networking (not sure if still present in 1.13) + //#if MC>=11200 && MC<11400 + @Inject(method = "handleLoginSuccess", at=@At("RETURN")) + public void replayModRecording_raceConditionWorkAround(CallbackInfo cb) { + ((NetworkManagerAccessor) this.networkManager).getChannel().config().setAutoRead(true); + } + //#endif +} diff --git a/versions/1.8/mapping.txt b/versions/1.8/mapping.txt index 8f452af4..3712d8e0 100644 --- a/versions/1.8/mapping.txt +++ b/versions/1.8/mapping.txt @@ -34,3 +34,4 @@ net.minecraftforge.fml.common.gameevent.InputEvent cpw.mods.fml.common.gameevent net.minecraft.client.renderer.tileentity.TileEntityEndPortalRenderer net.minecraft.client.renderer.tileentity.RenderEndPortal net.minecraft.network.play.server.S3FPacketCustomPayload getChannelName() func_149169_c() net.minecraft.network.play.server.S01PacketJoinGame getEntityId() func_149197_c() +net.minecraft.client.network.NetHandlerLoginClient networkManager field_147393_d