From d325b0691d2755edb8a5bf8cd61351109c8b4e36 Mon Sep 17 00:00:00 2001 From: FlorianMichael <60033407+FlorianMichael@users.noreply.github.com> Date: Sun, 28 Apr 2024 23:42:51 +0200 Subject: [PATCH] Fix and clean 1.20.4 platform --- .../viaforge/common/ViaForgeCommon.java | 2 +- .../viaforge/mixin/MixinConnection.java | 11 +++++------ .../viaforge/mixin/MixinConnection_1.java | 16 +++++++--------- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/main/java/de/florianmichael/viaforge/common/ViaForgeCommon.java b/src/main/java/de/florianmichael/viaforge/common/ViaForgeCommon.java index f20a239..569cc3f 100644 --- a/src/main/java/de/florianmichael/viaforge/common/ViaForgeCommon.java +++ b/src/main/java/de/florianmichael/viaforge/common/ViaForgeCommon.java @@ -93,12 +93,12 @@ public class ViaForgeCommon { if (targetVersion.equals(getNativeVersion())) { return; // Don't inject ViaVersion into pipeline if there is nothing to translate anyway } + channel.attr(VF_NETWORK_MANAGER).set(networkManager); final UserConnection user = new UserConnectionImpl(channel, true); new ProtocolPipelineImpl(user); channel.attr(LOCAL_VIA_USER).set(user); - channel.attr(VF_NETWORK_MANAGER).set(networkManager); channel.pipeline().addLast(new ViaForgeVLLegacyPipeline(user, targetVersion)); } diff --git a/viaforge-mc1204/src/main/java/de/florianmichael/viaforge/mixin/MixinConnection.java b/viaforge-mc1204/src/main/java/de/florianmichael/viaforge/mixin/MixinConnection.java index ac14f3e..929d586 100644 --- a/viaforge-mc1204/src/main/java/de/florianmichael/viaforge/mixin/MixinConnection.java +++ b/viaforge-mc1204/src/main/java/de/florianmichael/viaforge/mixin/MixinConnection.java @@ -22,6 +22,7 @@ import de.florianmichael.viaforge.common.ViaForgeCommon; import de.florianmichael.viaforge.common.gui.ExtendedServerData; import de.florianmichael.viaforge.common.protocoltranslator.netty.VFNetworkManager; import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; import net.minecraft.client.Minecraft; import net.minecraft.network.CipherDecoder; import net.minecraft.network.CipherEncoder; @@ -29,7 +30,6 @@ import net.minecraft.network.Connection; import net.minecraft.network.PacketListener; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.handshake.ClientIntent; -import net.minecraft.util.SampleLogger; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import net.raphimc.vialoader.netty.VLLegacyPipeline; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; @@ -40,7 +40,6 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import javax.crypto.Cipher; import java.net.InetSocketAddress; @@ -56,17 +55,17 @@ public class MixinConnection implements VFNetworkManager { @Unique private ProtocolVersion viaForge$targetVersion; - @Inject(method = "connectToServer", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/Connection;connect(Ljava/net/InetSocketAddress;ZLnet/minecraft/network/Connection;)Lio/netty/channel/ChannelFuture;"), locals = LocalCapture.CAPTURE_FAILHARD) - private static void trackSelfTarget(InetSocketAddress p_178301_, boolean p_178302_, SampleLogger p_300093_, CallbackInfoReturnable cir, Connection connection) { + @Inject(method = "connect", at = @At("HEAD")) + private static void trackSelfTarget(InetSocketAddress p_290034_, boolean p_290035_, Connection p_290031_, CallbackInfoReturnable cir) { // The connecting screen and server pinger are setting the main target version when a specific version for a server is set, // This works for joining perfect since we can simply restore the version when the server doesn't have a specific one set, // but for the server pinger we need to store the target version and force the pinging to use the target version. // Due to the fact that the server pinger is being called multiple times. - ((VFNetworkManager) connection).viaForge$setTrackedVersion(ViaForgeCommon.getManager().getTargetVersion()); + ((VFNetworkManager) p_290031_).viaForge$setTrackedVersion(ViaForgeCommon.getManager().getTargetVersion()); } @Inject(method = "initiateServerboundConnection", at = @At("HEAD")) - public void test(String p_300730_, int p_300598_, PacketListener p_298739_, ClientIntent p_297789_, CallbackInfo ci) { + public void resetTargetVersion(String p_300730_, int p_300598_, PacketListener p_298739_, ClientIntent p_297789_, CallbackInfo ci) { if (Minecraft.getInstance().getCurrentServer() instanceof ExtendedServerData) { final ProtocolVersion version = ((ExtendedServerData) Minecraft.getInstance().getCurrentServer()).viaForge$getVersion(); if (version != null) { diff --git a/viaforge-mc1204/src/main/java/de/florianmichael/viaforge/mixin/MixinConnection_1.java b/viaforge-mc1204/src/main/java/de/florianmichael/viaforge/mixin/MixinConnection_1.java index 882b866..4cb9628 100644 --- a/viaforge-mc1204/src/main/java/de/florianmichael/viaforge/mixin/MixinConnection_1.java +++ b/viaforge-mc1204/src/main/java/de/florianmichael/viaforge/mixin/MixinConnection_1.java @@ -20,22 +20,20 @@ package de.florianmichael.viaforge.mixin; import de.florianmichael.viaforge.common.ViaForgeCommon; import de.florianmichael.viaforge.common.protocoltranslator.netty.VFNetworkManager; +import io.netty.channel.Channel; import io.netty.channel.ChannelHandler; -import io.netty.channel.ChannelPipeline; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(targets = "net.minecraft.network.Connection$1") public class MixinConnection_1 { - @Redirect(method = "initChannel", at = @At(value = "INVOKE", target = "Lio/netty/channel/ChannelPipeline;addLast(Ljava/lang/String;Lio/netty/channel/ChannelHandler;)Lio/netty/channel/ChannelPipeline;")) - private ChannelPipeline hookViaPipeline(ChannelPipeline instance, String s, ChannelHandler channelHandler) { - final ChannelPipeline handler = instance.addLast(s, channelHandler); - if (channelHandler instanceof VFNetworkManager mixinNetworkManager) { - ViaForgeCommon.getManager().inject(instance.channel(), mixinNetworkManager); - } - return handler; + @Inject(method = "initChannel", at = @At("TAIL")) + private void hookViaPipeline(Channel p_129552_, CallbackInfo ci) { + final ChannelHandler connection = p_129552_.pipeline().get("packet_handler"); + ViaForgeCommon.getManager().inject(p_129552_, (VFNetworkManager) connection); } }