ServerStateService.java

net.minecraft.server.jsonrpc.methods.ServerStateService

信息

  • 全限定名:net.minecraft.server.jsonrpc.methods.ServerStateService
  • 类型:public class
  • 包:net.minecraft.server.jsonrpc.methods
  • 源码路径:src/main/java/net/minecraft/server/jsonrpc/methods/ServerStateService.java
  • 起始行号:L13
  • 职责:

    TODO

字段/常量

内部类/嵌套类型

  • net.minecraft.server.jsonrpc.methods.ServerStateService.ServerState

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

      TODO

  • net.minecraft.server.jsonrpc.methods.ServerStateService.SystemMessage

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

      TODO

构造器

方法

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

public static ServerStateService.ServerState status(MinecraftApi minecraftApi) @ L14

  • 方法名:status
  • 源码定位:L14
  • 返回类型:ServerStateService.ServerState
  • 修饰符:public static

参数:

  • minecraftApi: MinecraftApi

说明:

TODO

public static boolean save(MinecraftApi minecraftApi, boolean flush, ClientInfo clientInfo) @ L20

  • 方法名:save
  • 源码定位:L20
  • 返回类型:boolean
  • 修饰符:public static

参数:

  • minecraftApi: MinecraftApi
  • flush: boolean
  • clientInfo: ClientInfo

说明:

TODO

public static boolean stop(MinecraftApi minecraftApi, ClientInfo clientInfo) @ L24

  • 方法名:stop
  • 源码定位:L24
  • 返回类型:boolean
  • 修饰符:public static

参数:

  • minecraftApi: MinecraftApi
  • clientInfo: ClientInfo

说明:

TODO

public static boolean systemMessage(MinecraftApi minecraftApi, ServerStateService.SystemMessage systemMessage, ClientInfo clientInfo) @ L29

  • 方法名:systemMessage
  • 源码定位:L29
  • 返回类型:boolean
  • 修饰符:public static

参数:

  • minecraftApi: MinecraftApi
  • systemMessage: ServerStateService.SystemMessage
  • clientInfo: ClientInfo

说明:

TODO

代码

public class ServerStateService {
    public static ServerStateService.ServerState status(MinecraftApi minecraftApi) {
        return !minecraftApi.serverStateService().isReady()
            ? ServerStateService.ServerState.NOT_STARTED
            : new ServerStateService.ServerState(true, PlayerService.get(minecraftApi), ServerStatus.Version.current());
    }
 
    public static boolean save(MinecraftApi minecraftApi, boolean flush, ClientInfo clientInfo) {
        return minecraftApi.serverStateService().saveEverything(true, flush, true, clientInfo);
    }
 
    public static boolean stop(MinecraftApi minecraftApi, ClientInfo clientInfo) {
        minecraftApi.submit(() -> minecraftApi.serverStateService().halt(false, clientInfo));
        return true;
    }
 
    public static boolean systemMessage(MinecraftApi minecraftApi, ServerStateService.SystemMessage systemMessage, ClientInfo clientInfo) {
        Component component = systemMessage.message().asComponent().orElse(null);
        if (component == null) {
            return false;
        } else {
            if (systemMessage.receivingPlayers().isPresent()) {
                if (systemMessage.receivingPlayers().get().isEmpty()) {
                    return false;
                }
 
                for (PlayerDto playerDto : systemMessage.receivingPlayers().get()) {
                    ServerPlayer player;
                    if (playerDto.id().isPresent()) {
                        player = minecraftApi.playerListService().getPlayer(playerDto.id().get());
                    } else {
                        if (!playerDto.name().isPresent()) {
                            continue;
                        }
 
                        player = minecraftApi.playerListService().getPlayerByName(playerDto.name().get());
                    }
 
                    if (player != null) {
                        player.sendSystemMessage(component, systemMessage.overlay());
                    }
                }
            } else {
                minecraftApi.serverStateService().broadcastSystemMessage(component, systemMessage.overlay(), clientInfo);
            }
 
            return true;
        }
    }
 
    public record ServerState(boolean started, List<PlayerDto> players, ServerStatus.Version version) {
        public static final Codec<ServerStateService.ServerState> CODEC = RecordCodecBuilder.create(
            i -> i.group(
                    Codec.BOOL.fieldOf("started").forGetter(ServerStateService.ServerState::started),
                    PlayerDto.CODEC.codec().listOf().lenientOptionalFieldOf("players", List.of()).forGetter(ServerStateService.ServerState::players),
                    ServerStatus.Version.CODEC.fieldOf("version").forGetter(ServerStateService.ServerState::version)
                )
                .apply(i, ServerStateService.ServerState::new)
        );
        public static final ServerStateService.ServerState NOT_STARTED = new ServerStateService.ServerState(false, List.of(), ServerStatus.Version.current());
    }
 
    public record SystemMessage(Message message, boolean overlay, Optional<List<PlayerDto>> receivingPlayers) {
        public static final Codec<ServerStateService.SystemMessage> CODEC = RecordCodecBuilder.create(
            i -> i.group(
                    Message.CODEC.fieldOf("message").forGetter(ServerStateService.SystemMessage::message),
                    Codec.BOOL.fieldOf("overlay").forGetter(ServerStateService.SystemMessage::overlay),
                    PlayerDto.CODEC.codec().listOf().lenientOptionalFieldOf("receivingPlayers").forGetter(ServerStateService.SystemMessage::receivingPlayers)
                )
                .apply(i, ServerStateService.SystemMessage::new)
        );
    }
}

引用的其他类