IpBanlistService.java
net.minecraft.server.jsonrpc.methods.IpBanlistService
信息
- 全限定名:net.minecraft.server.jsonrpc.methods.IpBanlistService
- 类型:public class
- 包:net.minecraft.server.jsonrpc.methods
- 源码路径:src/main/java/net/minecraft/server/jsonrpc/methods/IpBanlistService.java
- 起始行号:L23
- 职责:
TODO
字段/常量
BAN_SOURCE- 类型:
String - 修饰符:
private static final - 源码定位:
L24 - 说明:
TODO
- 类型:
内部类/嵌套类型
-
net.minecraft.server.jsonrpc.methods.IpBanlistService.IncomingIpBanDto- 类型:
record - 修饰符:
public - 源码定位:
L88 - 说明:
TODO
- 类型:
-
net.minecraft.server.jsonrpc.methods.IpBanlistService.IpBan- 类型:
record - 修饰符:
private - 源码定位:
L111 - 说明:
TODO
- 类型:
-
net.minecraft.server.jsonrpc.methods.IpBanlistService.IpBanDto- 类型:
record - 修饰符:
public - 源码定位:
L123 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
public static List<IpBanlistService.IpBanDto> get(MinecraftApi minecraftApi) @ L26
- 方法名:get
- 源码定位:L26
- 返回类型:List<IpBanlistService.IpBanDto>
- 修饰符:public static
参数:
- minecraftApi: MinecraftApi
说明:
TODO
public static List<IpBanlistService.IpBanDto> add(MinecraftApi minecraftApi, List<IpBanlistService.IncomingIpBanDto> bans, ClientInfo clientInfo) @ L30
- 方法名:add
- 源码定位:L30
- 返回类型:List<IpBanlistService.IpBanDto>
- 修饰符:public static
参数:
- minecraftApi: MinecraftApi
- bans: List<IpBanlistService.IncomingIpBanDto>
- clientInfo: ClientInfo
说明:
TODO
private static List<ServerPlayer> banIp(MinecraftApi minecraftApi, IpBanlistService.IncomingIpBanDto ban, ClientInfo clientInfo) @ L38
- 方法名:banIp
- 源码定位:L38
- 返回类型:List
- 修饰符:private static
参数:
- minecraftApi: MinecraftApi
- ban: IpBanlistService.IncomingIpBanDto
- clientInfo: ClientInfo
说明:
TODO
private static List<ServerPlayer> banIp(MinecraftApi minecraftApi, IpBanlistService.IpBan ban, ClientInfo clientInfo) @ L54
- 方法名:banIp
- 源码定位:L54
- 返回类型:List
- 修饰符:private static
参数:
- minecraftApi: MinecraftApi
- ban: IpBanlistService.IpBan
- clientInfo: ClientInfo
说明:
TODO
public static List<IpBanlistService.IpBanDto> clear(MinecraftApi minecraftApi, ClientInfo clientInfo) @ L59
- 方法名:clear
- 源码定位:L59
- 返回类型:List<IpBanlistService.IpBanDto>
- 修饰符:public static
参数:
- minecraftApi: MinecraftApi
- clientInfo: ClientInfo
说明:
TODO
public static List<IpBanlistService.IpBanDto> remove(MinecraftApi minecraftApi, List<String> ban, ClientInfo clientInfo) @ L64
- 方法名:remove
- 源码定位:L64
- 返回类型:List<IpBanlistService.IpBanDto>
- 修饰符:public static
参数:
- minecraftApi: MinecraftApi
- ban: List
- clientInfo: ClientInfo
说明:
TODO
public static List<IpBanlistService.IpBanDto> set(MinecraftApi minecraftApi, List<IpBanlistService.IpBanDto> ips, ClientInfo clientInfo) @ L69
- 方法名:set
- 源码定位:L69
- 返回类型:List<IpBanlistService.IpBanDto>
- 修饰符:public static
参数:
- minecraftApi: MinecraftApi
- ips: List<IpBanlistService.IpBanDto>
- clientInfo: ClientInfo
说明:
TODO
代码
public class IpBanlistService {
private static final String BAN_SOURCE = "Management server";
public static List<IpBanlistService.IpBanDto> get(MinecraftApi minecraftApi) {
return minecraftApi.banListService().getIpBanEntries().stream().map(IpBanlistService.IpBan::from).map(IpBanlistService.IpBanDto::from).toList();
}
public static List<IpBanlistService.IpBanDto> add(MinecraftApi minecraftApi, List<IpBanlistService.IncomingIpBanDto> bans, ClientInfo clientInfo) {
bans.stream()
.map(ban -> banIp(minecraftApi, ban, clientInfo))
.flatMap(Collection::stream)
.forEach(player -> player.connection.disconnect(Component.translatable("multiplayer.disconnect.ip_banned")));
return get(minecraftApi);
}
private static List<ServerPlayer> banIp(MinecraftApi minecraftApi, IpBanlistService.IncomingIpBanDto ban, ClientInfo clientInfo) {
IpBanlistService.IpBan ipBan = ban.toIpBan();
if (ipBan != null) {
return banIp(minecraftApi, ipBan, clientInfo);
} else {
if (ban.player().isPresent()) {
Optional<ServerPlayer> player = minecraftApi.playerListService().getPlayer(ban.player().get().id(), ban.player().get().name());
if (player.isPresent()) {
return banIp(minecraftApi, ban.toIpBan(player.get()), clientInfo);
}
}
return List.of();
}
}
private static List<ServerPlayer> banIp(MinecraftApi minecraftApi, IpBanlistService.IpBan ban, ClientInfo clientInfo) {
minecraftApi.banListService().addIpBan(ban.toIpBanEntry(), clientInfo);
return minecraftApi.playerListService().getPlayersWithAddress(ban.ip());
}
public static List<IpBanlistService.IpBanDto> clear(MinecraftApi minecraftApi, ClientInfo clientInfo) {
minecraftApi.banListService().clearIpBans(clientInfo);
return get(minecraftApi);
}
public static List<IpBanlistService.IpBanDto> remove(MinecraftApi minecraftApi, List<String> ban, ClientInfo clientInfo) {
ban.forEach(ip -> minecraftApi.banListService().removeIpBan(ip, clientInfo));
return get(minecraftApi);
}
public static List<IpBanlistService.IpBanDto> set(MinecraftApi minecraftApi, List<IpBanlistService.IpBanDto> ips, ClientInfo clientInfo) {
Set<IpBanlistService.IpBan> finalBanlist = ips.stream()
.filter(ban -> InetAddresses.isInetAddress(ban.ip()))
.map(IpBanlistService.IpBanDto::toIpBan)
.collect(Collectors.toSet());
Set<IpBanlistService.IpBan> currentBans = minecraftApi.banListService()
.getIpBanEntries()
.stream()
.map(IpBanlistService.IpBan::from)
.collect(Collectors.toSet());
currentBans.stream().filter(ban -> !finalBanlist.contains(ban)).forEach(ban -> minecraftApi.banListService().removeIpBan(ban.ip(), clientInfo));
finalBanlist.stream().filter(ban -> !currentBans.contains(ban)).forEach(ban -> minecraftApi.banListService().addIpBan(ban.toIpBanEntry(), clientInfo));
finalBanlist.stream()
.filter(ban -> !currentBans.contains(ban))
.flatMap(ban -> minecraftApi.playerListService().getPlayersWithAddress(ban.ip()).stream())
.forEach(player -> player.connection.disconnect(Component.translatable("multiplayer.disconnect.ip_banned")));
return get(minecraftApi);
}
public record IncomingIpBanDto(Optional<PlayerDto> player, Optional<String> ip, Optional<String> reason, Optional<String> source, Optional<Instant> expires) {
public static final MapCodec<IpBanlistService.IncomingIpBanDto> CODEC = RecordCodecBuilder.mapCodec(
i -> i.group(
PlayerDto.CODEC.codec().optionalFieldOf("player").forGetter(IpBanlistService.IncomingIpBanDto::player),
Codec.STRING.optionalFieldOf("ip").forGetter(IpBanlistService.IncomingIpBanDto::ip),
Codec.STRING.optionalFieldOf("reason").forGetter(IpBanlistService.IncomingIpBanDto::reason),
Codec.STRING.optionalFieldOf("source").forGetter(IpBanlistService.IncomingIpBanDto::source),
ExtraCodecs.INSTANT_ISO8601.optionalFieldOf("expires").forGetter(IpBanlistService.IncomingIpBanDto::expires)
)
.apply(i, IpBanlistService.IncomingIpBanDto::new)
);
private IpBanlistService.IpBan toIpBan(ServerPlayer player) {
return new IpBanlistService.IpBan(player.getIpAddress(), this.reason().orElse(null), this.source().orElse("Management server"), this.expires());
}
private IpBanlistService.@Nullable IpBan toIpBan() {
return !this.ip().isEmpty() && InetAddresses.isInetAddress(this.ip().get())
? new IpBanlistService.IpBan(this.ip().get(), this.reason().orElse(null), this.source().orElse("Management server"), this.expires())
: null;
}
}
private record IpBan(String ip, @Nullable String reason, String source, Optional<Instant> expires) {
private static IpBanlistService.IpBan from(IpBanListEntry entry) {
return new IpBanlistService.IpBan(
Objects.requireNonNull(entry.getUser()), entry.getReason(), entry.getSource(), Optional.ofNullable(entry.getExpires()).map(Date::toInstant)
);
}
private IpBanListEntry toIpBanEntry() {
return new IpBanListEntry(this.ip(), null, this.source(), this.expires().map(Date::from).orElse(null), this.reason());
}
}
public record IpBanDto(String ip, Optional<String> reason, Optional<String> source, Optional<Instant> expires) {
public static final MapCodec<IpBanlistService.IpBanDto> CODEC = RecordCodecBuilder.mapCodec(
i -> i.group(
Codec.STRING.fieldOf("ip").forGetter(IpBanlistService.IpBanDto::ip),
Codec.STRING.optionalFieldOf("reason").forGetter(IpBanlistService.IpBanDto::reason),
Codec.STRING.optionalFieldOf("source").forGetter(IpBanlistService.IpBanDto::source),
ExtraCodecs.INSTANT_ISO8601.optionalFieldOf("expires").forGetter(IpBanlistService.IpBanDto::expires)
)
.apply(i, IpBanlistService.IpBanDto::new)
);
private static IpBanlistService.IpBanDto from(IpBanlistService.IpBan ban) {
return new IpBanlistService.IpBanDto(ban.ip(), Optional.ofNullable(ban.reason()), Optional.of(ban.source()), ban.expires());
}
public static IpBanlistService.IpBanDto from(IpBanListEntry ban) {
return from(IpBanlistService.IpBan.from(ban));
}
private IpBanlistService.IpBan toIpBan() {
return new IpBanlistService.IpBan(this.ip(), this.reason().orElse(null), this.source().orElse("Management server"), this.expires());
}
}
}引用的其他类
-
- 引用位置:
方法调用 - 关联成员:
Component.translatable()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
IpBanListEntry()
- 引用位置: