minecraft-src/net/minecraft/client/multiplayer/resolver/ServerNameResolver.java
2025-07-04 01:41:11 +03:00

37 lines
1.4 KiB
Java

package net.minecraft.client.multiplayer.resolver;
import com.google.common.annotations.VisibleForTesting;
import java.util.Optional;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
@Environment(EnvType.CLIENT)
public class ServerNameResolver {
public static final ServerNameResolver DEFAULT = new ServerNameResolver(
ServerAddressResolver.SYSTEM, ServerRedirectHandler.createDnsSrvRedirectHandler(), AddressCheck.createFromService()
);
private final ServerAddressResolver resolver;
private final ServerRedirectHandler redirectHandler;
private final AddressCheck addressCheck;
@VisibleForTesting
ServerNameResolver(ServerAddressResolver resolver, ServerRedirectHandler redirectHandler, AddressCheck addressCheck) {
this.resolver = resolver;
this.redirectHandler = redirectHandler;
this.addressCheck = addressCheck;
}
public Optional<ResolvedServerAddress> resolveAddress(ServerAddress serverAddress) {
Optional<ResolvedServerAddress> optional = this.resolver.resolve(serverAddress);
if ((!optional.isPresent() || this.addressCheck.isAllowed((ResolvedServerAddress)optional.get())) && this.addressCheck.isAllowed(serverAddress)) {
Optional<ServerAddress> optional2 = this.redirectHandler.lookupRedirect(serverAddress);
if (optional2.isPresent()) {
optional = this.resolver.resolve((ServerAddress)optional2.get()).filter(this.addressCheck::isAllowed);
}
return optional;
} else {
return Optional.empty();
}
}
}