Fix and clean 1.20.4 platform

This commit is contained in:
FlorianMichael 2024-04-28 23:42:51 +02:00
parent f589b3a28d
commit d325b0691d
No known key found for this signature in database
GPG Key ID: C2FB87E71C425126
3 changed files with 13 additions and 16 deletions

View File

@ -93,12 +93,12 @@ public class ViaForgeCommon {
if (targetVersion.equals(getNativeVersion())) { if (targetVersion.equals(getNativeVersion())) {
return; // Don't inject ViaVersion into pipeline if there is nothing to translate anyway 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); final UserConnection user = new UserConnectionImpl(channel, true);
new ProtocolPipelineImpl(user); new ProtocolPipelineImpl(user);
channel.attr(LOCAL_VIA_USER).set(user); channel.attr(LOCAL_VIA_USER).set(user);
channel.attr(VF_NETWORK_MANAGER).set(networkManager);
channel.pipeline().addLast(new ViaForgeVLLegacyPipeline(user, targetVersion)); channel.pipeline().addLast(new ViaForgeVLLegacyPipeline(user, targetVersion));
} }

View File

@ -22,6 +22,7 @@ import de.florianmichael.viaforge.common.ViaForgeCommon;
import de.florianmichael.viaforge.common.gui.ExtendedServerData; import de.florianmichael.viaforge.common.gui.ExtendedServerData;
import de.florianmichael.viaforge.common.protocoltranslator.netty.VFNetworkManager; import de.florianmichael.viaforge.common.protocoltranslator.netty.VFNetworkManager;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.network.CipherDecoder; import net.minecraft.network.CipherDecoder;
import net.minecraft.network.CipherEncoder; import net.minecraft.network.CipherEncoder;
@ -29,7 +30,6 @@ import net.minecraft.network.Connection;
import net.minecraft.network.PacketListener; import net.minecraft.network.PacketListener;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.handshake.ClientIntent; import net.minecraft.network.protocol.handshake.ClientIntent;
import net.minecraft.util.SampleLogger;
import net.raphimc.vialegacy.api.LegacyProtocolVersion; import net.raphimc.vialegacy.api.LegacyProtocolVersion;
import net.raphimc.vialoader.netty.VLLegacyPipeline; import net.raphimc.vialoader.netty.VLLegacyPipeline;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; 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.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
@ -56,17 +55,17 @@ public class MixinConnection implements VFNetworkManager {
@Unique @Unique
private ProtocolVersion viaForge$targetVersion; 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) @Inject(method = "connect", at = @At("HEAD"))
private static void trackSelfTarget(InetSocketAddress p_178301_, boolean p_178302_, SampleLogger p_300093_, CallbackInfoReturnable<Connection> cir, Connection connection) { private static void trackSelfTarget(InetSocketAddress p_290034_, boolean p_290035_, Connection p_290031_, CallbackInfoReturnable<ChannelFuture> cir) {
// The connecting screen and server pinger are setting the main target version when a specific version for a server is set, // 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, // 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. // 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. // 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")) @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) { if (Minecraft.getInstance().getCurrentServer() instanceof ExtendedServerData) {
final ProtocolVersion version = ((ExtendedServerData) Minecraft.getInstance().getCurrentServer()).viaForge$getVersion(); final ProtocolVersion version = ((ExtendedServerData) Minecraft.getInstance().getCurrentServer()).viaForge$getVersion();
if (version != null) { if (version != null) {

View File

@ -20,22 +20,20 @@ package de.florianmichael.viaforge.mixin;
import de.florianmichael.viaforge.common.ViaForgeCommon; import de.florianmichael.viaforge.common.ViaForgeCommon;
import de.florianmichael.viaforge.common.protocoltranslator.netty.VFNetworkManager; import de.florianmichael.viaforge.common.protocoltranslator.netty.VFNetworkManager;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelPipeline;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; 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") @Mixin(targets = "net.minecraft.network.Connection$1")
public class MixinConnection_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;")) @Inject(method = "initChannel", at = @At("TAIL"))
private ChannelPipeline hookViaPipeline(ChannelPipeline instance, String s, ChannelHandler channelHandler) { private void hookViaPipeline(Channel p_129552_, CallbackInfo ci) {
final ChannelPipeline handler = instance.addLast(s, channelHandler); final ChannelHandler connection = p_129552_.pipeline().get("packet_handler");
if (channelHandler instanceof VFNetworkManager mixinNetworkManager) { ViaForgeCommon.getManager().inject(p_129552_, (VFNetworkManager) connection);
ViaForgeCommon.getManager().inject(instance.channel(), mixinNetworkManager);
}
return handler;
} }
} }