diff --git a/fabric/src/alt-auth.mixins.json b/fabric/src/alt-auth.mixins.json index 2b408a9..8da0b3d 100644 --- a/fabric/src/alt-auth.mixins.json +++ b/fabric/src/alt-auth.mixins.json @@ -9,7 +9,8 @@ ], "server": [ "ServerIdMixin", - "MinecraftServerMixin" + "MinecraftServerMixin", + "ServerLoginNetworkHandlerNetworkMixin" ], "injectors": { "defaultRequire": 1 diff --git a/fabric/src/de/chaoscaot/altauth/fabric/mixin/LoginRequestMixin.java b/fabric/src/de/chaoscaot/altauth/fabric/mixin/LoginRequestMixin.java index e139870..09b326b 100644 --- a/fabric/src/de/chaoscaot/altauth/fabric/mixin/LoginRequestMixin.java +++ b/fabric/src/de/chaoscaot/altauth/fabric/mixin/LoginRequestMixin.java @@ -48,10 +48,10 @@ public class LoginRequestMixin { } else { if(MinecraftClient.getInstance().currentScreen instanceof ConnectScreen cs) { ci.cancel(); - /*cs.connectingCancelled = true; + cs.connectingCancelled = true; if( cs.connection != null) { cs.connection.disconnect(Text.translatable("connect.aborted")); - }*/ + } MinecraftClient.getInstance().execute(() -> client.setScreen(new TrustServerScreen(server, cs.parent))); } diff --git a/fabric/src/de/chaoscaot/altauth/fabric/mixin/MinecraftServerMixin.java b/fabric/src/de/chaoscaot/altauth/fabric/mixin/MinecraftServerMixin.java index b36df24..b3a4d89 100644 --- a/fabric/src/de/chaoscaot/altauth/fabric/mixin/MinecraftServerMixin.java +++ b/fabric/src/de/chaoscaot/altauth/fabric/mixin/MinecraftServerMixin.java @@ -2,39 +2,41 @@ package de.chaoscaot.altauth.fabric.mixin; +import com.mojang.datafixers.DataFixer; import de.chaoscaot.altauth.fabric.AltAuth; import de.chaoscaot.altauth.fabric.config.ServerConfig; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.client.MinecraftClient; +import net.minecraft.resource.ResourcePackManager; import net.minecraft.server.MinecraftServer; +import net.minecraft.server.SaveLoader; +import net.minecraft.server.WorldGenerationProgressListenerFactory; import net.minecraft.util.ApiServices; +import net.minecraft.world.level.storage.LevelStorage; import org.joor.Reflect; -import org.objectweb.asm.Opcodes; 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.Redirect; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.net.MalformedURLException; +import java.net.Proxy; import java.net.URL; @Environment(EnvType.SERVER) @Mixin(MinecraftServer.class) public class MinecraftServerMixin { - @Shadow - protected ApiServices apiServices; - - @Redirect(method = "", at = @At(value = "FIELD", target = "Lnet/minecraft/server/MinecraftServer;apiServices:Lnet/minecraft/util/ApiServices;", opcode = Opcodes.PUTFIELD)) - private void apiServiceMixin(MinecraftServer instance, ApiServices value) { - apiServices = value; - + @Inject(method = "", at = @At(value = "TAIL")) + private void apiServiceMixin(Thread serverThread, LevelStorage.Session session, ResourcePackManager dataPackManager, SaveLoader saveLoader, Proxy proxy, DataFixer dataFixer, ApiServices apiServices, WorldGenerationProgressListenerFactory worldGenerationProgressListenerFactory, CallbackInfo ci) { try { - URL url = new URL("https://" + ServerConfig.INSTANCE.serverUrl + "/session/minecraft/join"); - Reflect.on(MinecraftClient.getInstance().getSessionService()).set("joinUrl", url); + URL url = new URL("https://" + ServerConfig.INSTANCE.serverUrl + "/session/minecraft/hasJoined"); + Reflect.on(apiServices.sessionService()).set("checkUrl", url); + URL joinUrl = new URL("https://" + ServerConfig.INSTANCE.serverUrl + "/session/minecraft/join"); + Reflect.on(apiServices.sessionService()).set("joinUrl", joinUrl); } catch (MalformedURLException e) { AltAuth.LOGGER.error("Malformed URL: {}", e.getMessage()); } + ServerConfig.INSTANCE.save(); } } diff --git a/fabric/src/de/chaoscaot/altauth/fabric/mixin/ServerLoginNetworkHandlerNetworkMixin.java b/fabric/src/de/chaoscaot/altauth/fabric/mixin/ServerLoginNetworkHandlerNetworkMixin.java new file mode 100644 index 0000000..2f3687f --- /dev/null +++ b/fabric/src/de/chaoscaot/altauth/fabric/mixin/ServerLoginNetworkHandlerNetworkMixin.java @@ -0,0 +1,16 @@ +package de.chaoscaot.altauth.fabric.mixin; + +import de.chaoscaot.altauth.fabric.config.ServerConfig; +import net.minecraft.server.network.ServerLoginNetworkHandler; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; + +@Mixin(ServerLoginNetworkHandler.class) +public class ServerLoginNetworkHandlerNetworkMixin { + + @ModifyArg(method = "onKey", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/encryption/NetworkEncryptionUtils;computeServerId(Ljava/lang/String;Ljava/security/PublicKey;Ljavax/crypto/SecretKey;)[B"), index = 0) + private String onKey(String serverId) { + return ServerConfig.INSTANCE.serverUrl; + } +}