ServerStatus.java

net.minecraft.network.protocol.status.ServerStatus

信息

  • 全限定名:net.minecraft.network.protocol.status.ServerStatus
  • 类型:public record
  • 包:net.minecraft.network.protocol.status
  • 源码路径:src/main/java/net/minecraft/network/protocol/status/ServerStatus.java
  • 起始行号:L17
  • 职责:

    TODO

字段/常量

  • CODEC
    • 类型: Codec<ServerStatus>
    • 修饰符: public static final
    • 源码定位: L24
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.network.protocol.status.ServerStatus.Favicon

    • 类型: record
    • 修饰符: public
    • 源码定位: L35
    • 说明:

      TODO

  • net.minecraft.network.protocol.status.ServerStatus.Players

    • 类型: record
    • 修饰符: public
    • 源码定位: L52
    • 说明:

      TODO

  • net.minecraft.network.protocol.status.ServerStatus.Version

    • 类型: record
    • 修饰符: public
    • 源码定位: L63
    • 说明:

      TODO

构造器

方法

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

代码

public record ServerStatus(
    Component description,
    Optional<ServerStatus.Players> players,
    Optional<ServerStatus.Version> version,
    Optional<ServerStatus.Favicon> favicon,
    boolean enforcesSecureChat
) {
    public static final Codec<ServerStatus> CODEC = RecordCodecBuilder.create(
        i -> i.group(
                ComponentSerialization.CODEC.lenientOptionalFieldOf("description", CommonComponents.EMPTY).forGetter(ServerStatus::description),
                ServerStatus.Players.CODEC.lenientOptionalFieldOf("players").forGetter(ServerStatus::players),
                ServerStatus.Version.CODEC.lenientOptionalFieldOf("version").forGetter(ServerStatus::version),
                ServerStatus.Favicon.CODEC.lenientOptionalFieldOf("favicon").forGetter(ServerStatus::favicon),
                Codec.BOOL.lenientOptionalFieldOf("enforcesSecureChat", false).forGetter(ServerStatus::enforcesSecureChat)
            )
            .apply(i, ServerStatus::new)
    );
 
    public record Favicon(byte[] iconBytes) {
        private static final String PREFIX = "data:image/png;base64,";
        public static final Codec<ServerStatus.Favicon> CODEC = Codec.STRING.comapFlatMap(string -> {
            if (!string.startsWith("data:image/png;base64,")) {
                return DataResult.error(() -> "Unknown format");
            } else {
                try {
                    String base64 = string.substring("data:image/png;base64,".length()).replaceAll("\n", "");
                    byte[] iconBytes = Base64.getDecoder().decode(base64.getBytes(StandardCharsets.UTF_8));
                    return DataResult.success(new ServerStatus.Favicon(iconBytes));
                } catch (IllegalArgumentException var3) {
                    return DataResult.error(() -> "Malformed base64 server icon");
                }
            }
        }, favicon -> "data:image/png;base64," + new String(Base64.getEncoder().encode(favicon.iconBytes), StandardCharsets.UTF_8));
    }
 
    public record Players(int max, int online, List<NameAndId> sample) {
        public static final Codec<ServerStatus.Players> CODEC = RecordCodecBuilder.create(
            i -> i.group(
                    Codec.INT.fieldOf("max").forGetter(ServerStatus.Players::max),
                    Codec.INT.fieldOf("online").forGetter(ServerStatus.Players::online),
                    NameAndId.CODEC.listOf().lenientOptionalFieldOf("sample", List.of()).forGetter(ServerStatus.Players::sample)
                )
                .apply(i, ServerStatus.Players::new)
        );
    }
 
    public record Version(String name, int protocol) {
        public static final Codec<ServerStatus.Version> CODEC = RecordCodecBuilder.create(
            i -> i.group(
                    Codec.STRING.fieldOf("name").forGetter(ServerStatus.Version::name), Codec.INT.fieldOf("protocol").forGetter(ServerStatus.Version::protocol)
                )
                .apply(i, ServerStatus.Version::new)
        );
 
        public static ServerStatus.Version current() {
            WorldVersion version = SharedConstants.getCurrentVersion();
            return new ServerStatus.Version(version.name(), version.protocolVersion());
        }
    }
}

引用的其他类

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