OperatorService.java
net.minecraft.server.jsonrpc.methods.OperatorService
信息
- 全限定名:net.minecraft.server.jsonrpc.methods.OperatorService
- 类型:public class
- 包:net.minecraft.server.jsonrpc.methods
- 源码路径:src/main/java/net/minecraft/server/jsonrpc/methods/OperatorService.java
- 起始行号:L19
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
-
net.minecraft.server.jsonrpc.methods.OperatorService.Op- 类型:
record - 修饰符:
package-private - 源码定位:
L83 - 说明:
TODO
- 类型:
-
net.minecraft.server.jsonrpc.methods.OperatorService.OperatorDto- 类型:
record - 修饰符:
public - 源码定位:
L86 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
public static List<OperatorService.OperatorDto> get(MinecraftApi minecraftApi) @ L20
- 方法名:get
- 源码定位:L20
- 返回类型:List<OperatorService.OperatorDto>
- 修饰符:public static
参数:
- minecraftApi: MinecraftApi
说明:
TODO
public static List<OperatorService.OperatorDto> clear(MinecraftApi minecraftApi, ClientInfo clientInfo) @ L24
- 方法名:clear
- 源码定位:L24
- 返回类型:List<OperatorService.OperatorDto>
- 修饰符:public static
参数:
- minecraftApi: MinecraftApi
- clientInfo: ClientInfo
说明:
TODO
public static List<OperatorService.OperatorDto> remove(MinecraftApi minecraftApi, List<PlayerDto> playerDtos, ClientInfo clientInfo) @ L29
- 方法名:remove
- 源码定位:L29
- 返回类型:List<OperatorService.OperatorDto>
- 修饰符:public static
参数:
- minecraftApi: MinecraftApi
- playerDtos: List
- clientInfo: ClientInfo
说明:
TODO
public static List<OperatorService.OperatorDto> add(MinecraftApi minecraftApi, List<OperatorService.OperatorDto> operators, ClientInfo clientInfo) @ L41
- 方法名:add
- 源码定位:L41
- 返回类型:List<OperatorService.OperatorDto>
- 修饰符:public static
参数:
- minecraftApi: MinecraftApi
- operators: List<OperatorService.OperatorDto>
- clientInfo: ClientInfo
说明:
TODO
public static List<OperatorService.OperatorDto> set(MinecraftApi minecraftApi, List<OperatorService.OperatorDto> operators, ClientInfo clientInfo) @ L59
- 方法名:set
- 源码定位:L59
- 返回类型:List<OperatorService.OperatorDto>
- 修饰符:public static
参数:
- minecraftApi: MinecraftApi
- operators: List<OperatorService.OperatorDto>
- clientInfo: ClientInfo
说明:
TODO
代码
public class OperatorService {
public static List<OperatorService.OperatorDto> get(MinecraftApi minecraftApi) {
return minecraftApi.operatorListService().getEntries().stream().filter(u -> u.getUser() != null).map(OperatorService.OperatorDto::from).toList();
}
public static List<OperatorService.OperatorDto> clear(MinecraftApi minecraftApi, ClientInfo clientInfo) {
minecraftApi.operatorListService().clear(clientInfo);
return get(minecraftApi);
}
public static List<OperatorService.OperatorDto> remove(MinecraftApi minecraftApi, List<PlayerDto> playerDtos, ClientInfo clientInfo) {
List<CompletableFuture<Optional<NameAndId>>> fetch = playerDtos.stream()
.map(playerDto -> minecraftApi.playerListService().getUser(playerDto.id(), playerDto.name()))
.toList();
for (Optional<NameAndId> user : Util.sequence(fetch).join()) {
user.ifPresent(nameAndId -> minecraftApi.operatorListService().deop(nameAndId, clientInfo));
}
return get(minecraftApi);
}
public static List<OperatorService.OperatorDto> add(MinecraftApi minecraftApi, List<OperatorService.OperatorDto> operators, ClientInfo clientInfo) {
List<CompletableFuture<Optional<OperatorService.Op>>> fetch = operators.stream()
.map(
operator -> minecraftApi.playerListService()
.getUser(operator.player().id(), operator.player().name())
.thenApply(user -> user.map(nameAndId -> new OperatorService.Op(nameAndId, operator.permissionLevel(), operator.bypassesPlayerLimit())))
)
.toList();
for (Optional<OperatorService.Op> op : Util.sequence(fetch).join()) {
op.ifPresent(
operator -> minecraftApi.operatorListService().op(operator.user(), operator.permissionLevel(), operator.bypassesPlayerLimit(), clientInfo)
);
}
return get(minecraftApi);
}
public static List<OperatorService.OperatorDto> set(MinecraftApi minecraftApi, List<OperatorService.OperatorDto> operators, ClientInfo clientInfo) {
List<CompletableFuture<Optional<OperatorService.Op>>> fetch = operators.stream()
.map(
operator -> minecraftApi.playerListService()
.getUser(operator.player().id(), operator.player().name())
.thenApply(user -> user.map(nameAndId -> new OperatorService.Op(nameAndId, operator.permissionLevel(), operator.bypassesPlayerLimit())))
)
.toList();
Set<OperatorService.Op> finalOperators = Util.sequence(fetch).join().stream().flatMap(Optional::stream).collect(Collectors.toSet());
Set<OperatorService.Op> currentOperators = minecraftApi.operatorListService()
.getEntries()
.stream()
.filter(entry -> entry.getUser() != null)
.map(entry -> new OperatorService.Op(entry.getUser(), Optional.of(entry.permissions().level()), Optional.of(entry.getBypassesPlayerLimit())))
.collect(Collectors.toSet());
currentOperators.stream()
.filter(operator -> !finalOperators.contains(operator))
.forEach(operator -> minecraftApi.operatorListService().deop(operator.user(), clientInfo));
finalOperators.stream()
.filter(operator -> !currentOperators.contains(operator))
.forEach(operator -> minecraftApi.operatorListService().op(operator.user(), operator.permissionLevel(), operator.bypassesPlayerLimit(), clientInfo));
return get(minecraftApi);
}
record Op(NameAndId user, Optional<PermissionLevel> permissionLevel, Optional<Boolean> bypassesPlayerLimit) {
}
public record OperatorDto(PlayerDto player, Optional<PermissionLevel> permissionLevel, Optional<Boolean> bypassesPlayerLimit) {
public static final MapCodec<OperatorService.OperatorDto> CODEC = RecordCodecBuilder.mapCodec(
i -> i.group(
PlayerDto.CODEC.codec().fieldOf("player").forGetter(OperatorService.OperatorDto::player),
PermissionLevel.INT_CODEC.optionalFieldOf("permissionLevel").forGetter(OperatorService.OperatorDto::permissionLevel),
Codec.BOOL.optionalFieldOf("bypassesPlayerLimit").forGetter(OperatorService.OperatorDto::bypassesPlayerLimit)
)
.apply(i, OperatorService.OperatorDto::new)
);
public static OperatorService.OperatorDto from(ServerOpListEntry serverOpListEntry) {
return new OperatorService.OperatorDto(
PlayerDto.from(Objects.requireNonNull(serverOpListEntry.getUser())),
Optional.of(serverOpListEntry.permissions().level()),
Optional.of(serverOpListEntry.getBypassesPlayerLimit())
);
}
}
}引用的其他类
-
- 引用位置:
参数/方法调用 - 关联成员:
PlayerDto.from()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.sequence()
- 引用位置: