File size: 1,563 Bytes
d46f4a3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package net.minecraft.client.multiplayer.resolver;

import com.google.common.annotations.VisibleForTesting;
import java.util.Optional;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;

@OnlyIn(Dist.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 p_171887_, ServerRedirectHandler p_171888_, AddressCheck p_171889_) {
        this.resolver = p_171887_;
        this.redirectHandler = p_171888_;
        this.addressCheck = p_171889_;
    }

    public Optional<ResolvedServerAddress> resolveAddress(ServerAddress p_171891_) {
        Optional<ResolvedServerAddress> optional = this.resolver.resolve(p_171891_);
        if ((!optional.isPresent() || this.addressCheck.isAllowed(optional.get())) && this.addressCheck.isAllowed(p_171891_)) {
            Optional<ServerAddress> optional1 = this.redirectHandler.lookupRedirect(p_171891_);
            if (optional1.isPresent()) {
                optional = this.resolver.resolve(optional1.get()).filter(this.addressCheck::isAllowed);
            }

            return optional;
        } else {
            return Optional.empty();
        }
    }
}