diff --git a/src/main/java/ca/spottedleaf/moonrise/mixin/serverlist/ServerAddressResolverMixin.java b/src/main/java/ca/spottedleaf/moonrise/mixin/serverlist/ServerAddressResolverMixin.java index e6dfe6f..dacbbcf 100644 --- a/src/main/java/ca/spottedleaf/moonrise/mixin/serverlist/ServerAddressResolverMixin.java +++ b/src/main/java/ca/spottedleaf/moonrise/mixin/serverlist/ServerAddressResolverMixin.java @@ -1,10 +1,13 @@ package ca.spottedleaf.moonrise.mixin.serverlist; +import com.llamalad7.mixinextras.sugar.Local; +import net.minecraft.client.multiplayer.resolver.ServerAddress; import net.minecraft.client.multiplayer.resolver.ServerAddressResolver; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; import java.net.InetAddress; +import java.net.InetSocketAddress; import java.net.UnknownHostException; @Mixin(ServerAddressResolver.class) @@ -15,24 +18,23 @@ interface ServerAddressResolverMixin { * @author Spottedleaf */ @Redirect( - method = { - "method_36903", - "*(Lnet/minecraft/client/multiplayer/resolver/ServerAddress;)Ljava/util/Optional;" - }, - at = @At( - value = "INVOKE", - target = "Ljava/net/InetAddress;getByName(Ljava/lang/String;)Ljava/net/InetAddress;" - ) + method = { + "method_36903", + "lambda$static$0" + }, + at = @At( + value = "NEW", + target = "(Ljava/net/InetAddress;I)Ljava/net/InetSocketAddress;" + ) ) - private static InetAddress eliminateRDNS(final String name) throws UnknownHostException { - final InetAddress ret = InetAddress.getByName(name); - - final byte[] address = ret.getAddress(); + private static InetSocketAddress eliminateRDNS(InetAddress addr, final int port, + @Local(ordinal = 0, argsOnly = true) final ServerAddress serverAddress) throws UnknownHostException { + final byte[] address = addr.getAddress(); if (address != null) { // pass name to prevent rDNS - return InetAddress.getByAddress(name, address); + addr = InetAddress.getByAddress(serverAddress.getHost(), address); } - return ret; + return new InetSocketAddress(addr, port); } }