ProfileResolver.java

net.minecraft.server.players.ProfileResolver

信息

  • 全限定名:net.minecraft.server.players.ProfileResolver
  • 类型:public interface
  • 包:net.minecraft.server.players
  • 源码路径:src/main/java/net/minecraft/server/players/ProfileResolver.java
  • 起始行号:L16
  • 职责:

    TODO

字段/常量

内部类/嵌套类型

  • net.minecraft.server.players.ProfileResolver.Cached
    • 类型: class
    • 修饰符: public static
    • 源码定位: L25
    • 说明:

      TODO

构造器

方法

下面的方法块按源码顺序生成。

Optional<GameProfile> fetchByName(String name) @ L17

  • 方法名:fetchByName
  • 源码定位:L17
  • 返回类型:Optional
  • 修饰符:package-private

参数:

  • name: String

说明:

TODO

Optional<GameProfile> fetchById(UUID id) @ L19

  • 方法名:fetchById
  • 源码定位:L19
  • 返回类型:Optional
  • 修饰符:package-private

参数:

  • id: UUID

说明:

TODO

default Optional<GameProfile> fetchByNameOrId(Either<String,UUID> nameOrId) @ L21

  • 方法名:fetchByNameOrId
  • 源码定位:L21
  • 返回类型:Optional
  • 修饰符:default

参数:

  • nameOrId: Either<String,UUID>

说明:

TODO

代码

public interface ProfileResolver {
    Optional<GameProfile> fetchByName(String name);
 
    Optional<GameProfile> fetchById(UUID id);
 
    default Optional<GameProfile> fetchByNameOrId(Either<String, UUID> nameOrId) {
        return nameOrId.map(this::fetchByName, this::fetchById);
    }
 
    public static class Cached implements ProfileResolver {
        private final LoadingCache<String, Optional<GameProfile>> profileCacheByName;
        private final LoadingCache<UUID, Optional<GameProfile>> profileCacheById;
 
        public Cached(MinecraftSessionService sessionService, UserNameToIdResolver nameToIdCache) {
            this.profileCacheById = CacheBuilder.newBuilder()
                .expireAfterAccess(Duration.ofMinutes(10L))
                .maximumSize(256L)
                .build(new CacheLoader<UUID, Optional<GameProfile>>() {
                    {
                        Objects.requireNonNull(Cached.this);
                    }
 
                    public Optional<GameProfile> load(UUID profileId) {
                        ProfileResult result = sessionService.fetchProfile(profileId, true);
                        return Optional.ofNullable(result).map(ProfileResult::profile);
                    }
                });
            this.profileCacheByName = CacheBuilder.newBuilder()
                .expireAfterAccess(Duration.ofMinutes(10L))
                .maximumSize(256L)
                .build(new CacheLoader<String, Optional<GameProfile>>() {
                    {
                        Objects.requireNonNull(Cached.this);
                    }
 
                    public Optional<GameProfile> load(String name) {
                        return nameToIdCache.get(name).flatMap(nameAndId -> Cached.this.profileCacheById.getUnchecked(nameAndId.id()));
                    }
                });
        }
 
        @Override
        public Optional<GameProfile> fetchByName(String name) {
            return StringUtil.isValidPlayerName(name) ? this.profileCacheByName.getUnchecked(name) : Optional.empty();
        }
 
        @Override
        public Optional<GameProfile> fetchById(UUID id) {
            return this.profileCacheById.getUnchecked(id);
        }
    }
}

引用的其他类

  • StringUtil
    • 引用位置: 方法调用
    • 关联成员: StringUtil.isValidPlayerName()