Split off 1.12.2 overwrite from MixinNetHandlerLoginClient

This commit is contained in:
Jonas Herzig
2021-02-23 00:35:37 +01:00
parent 25247a2371
commit ba7c478da1
3 changed files with 45 additions and 39 deletions

View File

@@ -1,35 +1,26 @@
package com.replaymod.recording.mixin; package com.replaymod.recording.mixin;
import com.replaymod.core.versions.MCVer;
import com.replaymod.recording.ReplayModRecording; import com.replaymod.recording.ReplayModRecording;
import com.replaymod.recording.handler.RecordingEventHandler.RecordingEventSender;
import net.minecraft.client.network.ClientLoginNetworkHandler; import net.minecraft.client.network.ClientLoginNetworkHandler;
import net.minecraft.network.ClientConnection; 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.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 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) @Mixin(ClientLoginNetworkHandler.class)
public abstract class MixinNetHandlerLoginClient { public abstract class MixinNetHandlerLoginClient {
@Shadow @Final @Shadow
//#if MC>=10800
private ClientConnection connection; private ClientConnection connection;
//#else
//$$ private NetworkManager field_147393_d;
//#endif
//#if MC>=11400
@Inject(method = "onQueryRequest", at=@At("HEAD")) @Inject(method = "onQueryRequest", at=@At("HEAD"))
private void earlyInitiateRecording(LoginQueryRequestS2CPacket packet, CallbackInfo ci) { private void earlyInitiateRecording(LoginQueryRequestS2CPacket packet, CallbackInfo ci) {
initiateRecording(packet); initiateRecording(packet);
@@ -50,27 +41,4 @@ public abstract class MixinNetHandlerLoginClient {
eventSender.getRecordingEventHandler().onPacket(packet); 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
} }

View File

@@ -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
}

View File

@@ -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.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.S3FPacketCustomPayload getChannelName() func_149169_c()
net.minecraft.network.play.server.S01PacketJoinGame getEntityId() func_149197_c() net.minecraft.network.play.server.S01PacketJoinGame getEntityId() func_149197_c()
net.minecraft.client.network.NetHandlerLoginClient networkManager field_147393_d