37 lines
1.4 KiB
Java
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();
|
|
}
|
|
}
|
|
}
|