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)
);
}
}引用的其他类
-
- 引用位置:
方法调用 - 关联成员:
ServerStatus.Version.current()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
PlayerService.get()
- 引用位置: