Skip to content

Commit

Permalink
修复错误, 修改 ip 地址处理部分 v4.1.1-rc2
Browse files Browse the repository at this point in the history
  • Loading branch information
ApliNi committed Apr 23, 2024
1 parent 06ba646 commit 25252d8
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 22 deletions.
21 changes: 18 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -241,11 +241,19 @@ whitelist:
# 简易的 ip 黑名单. 在这里添加正则表达式, 匹配的ip不允许加入服务器 (也不允许使用参观账户
# 使用 /wl reload 重载配置即可应用
# IP 地址格式: ipv4: "/127.0.0.1", ipv6: "/0:0:0:0:0:0:0:1" 没有方括号
ipBlacklist: [ ]
# - '^192\.168\.100\..+$'
# - '^fe80::1234:.+$' # IPv6 没有方括号
# - '^/192\.168\.100\..+$'
# - '^/fe80::1234:.+$'
ipBlacklistMsg: '§6IpacEL §f> §b您已被列入黑名单: §a%playerName%' # var: %ip%
# 限定玩家只能通过以下地址连接服务器
addressConfig:
enable: false
list: [ ]
# - '^0:0:0:0:0:0:0:0:25565$'
kickMsg: '§6IpacEL §f> §b此地址不可用'
# 玩家名称字符检查
# 名称长度为 3 到 16 字符, 允许包含 Geyser 的 "." 前缀
playerNameRule: '^(?:\.?[a-zA-Z0-9_]{3,16})$'
Expand Down Expand Up @@ -298,6 +306,13 @@ whitelist:

# 参观账户
VISIT:

# 限定参观模式可使用的地址
addressConfig:
enable: false
list: [ ]
kickMsg: '§6IpacEL §f> §b您不在白名单中'

# 参观账户的名称字符检查
playerNameRule: '^(?:\.?[a-zA-Z0-9_]{3,16})$'
playerNameRuleMsg: '§6IpacEL §f> §a名称中包含不支持的字符: §b%playerName%'
Expand Down Expand Up @@ -333,7 +348,7 @@ whitelist:
- 'gamemode spectator %playerName%' # 将玩家设置为观察模式
msg:
- '§6IpacEL §f> §a您正在使用参观账户=w='
# - '§6IpacEL §f> §b如需加入, 请访问我们的网站: §ahttps://ipacel.cc/'
# - '§6IpacEL §f> §b如需加入, 请访问我们的网站: §ahttps://ipacel.cc/'
msgExclude:
- '§6IpacEL §f> §a%playerName% §b使用参观账户加入游戏'

Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>ApliNi</groupId>
<artifactId>IpacWhitelist</artifactId>
<version>4.1.1-rc1</version>
<version>4.1.1-rc2</version>
<packaging>jar</packaging>

<name>IpacWhitelist</name>
Expand Down
30 changes: 17 additions & 13 deletions src/main/java/aplini/ipacwhitelist/listener/onPlayerLogin.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;
Expand Down Expand Up @@ -47,33 +46,37 @@ public class onPlayerLogin implements Listener {
@EventHandler(priority = EventPriority.LOWEST) // 玩家登录服务器
public void onPlayerLoginEvent(PlayerLoginEvent event) {

// 如果结果已被设置, 我们可以忽略这个玩家
// 同时防止这个事件循环回来 (触发两次)
if(event.getResult() != PlayerLoginEvent.Result.ALLOWED){
return;
}

// 设置不允许登录的结果, 在允许登录的分支取消它. 防止出错造成意外的玩家登录
event.disallow(KICK_OTHER, config.getString("message.playerLoginErr", ""));

Player player = event.getPlayer();
String playerName = player.getName();
String playerUUID = player.getUniqueId().toString();
String playerIP = event.getRealAddress().toString();
playerIP = playerIP.substring(playerIP.lastIndexOf("/") +1);
String playerAddressHost = event.getHostname();
plugin.getLogger().info("%s[%s] -> Server[%s]".formatted(playerName, playerIP, playerAddressHost));


// 玩家 ip 地址检查
// 原始ip格式: ipv4: "/127.0.0.1", ipv6: "/0:0:0:0:0:0:0:1" 没有方括号
for(String li : config.getStringList("whitelist.ipBlacklist")){
if(Pattern.matches(li, playerIP)){
plugin.getLogger().info("%s 在IP黑名单中: %s".formatted(playerName, playerIP));
event.disallow(KICK_OTHER, msg(config.getString("whitelist.ipBlacklistMsg", ""), playerUUID, playerName)
.replace(ph.ip.ph, playerIP));
return;
}
if(config.getStringList("whitelist.ipBlacklist").stream().anyMatch(li -> Pattern.matches(li, playerIP))){
plugin.getLogger().info("%s 在IP黑名单中: %s".formatted(playerName, playerIP));
event.disallow(KICK_OTHER, msg(config.getString("whitelist.ipBlacklistMsg", ""), playerUUID, playerName)
.replace(ph.ip.ph, playerIP));
return;
}

// 限定玩家只能通过以下地址加入服务器
String playerAddressHost = Objects.requireNonNull(player.getAddress()).getHostString();
plugin.getLogger().info("玩家 %s 通过地址 %s 连接服务器".formatted(playerName, playerAddressHost));
if(config.getBoolean("whitelist.addressConfig.enable", false)){
if(!config.getStringList("whitelist.addressConfig.list").contains(playerAddressHost)){
if(config.getStringList("whitelist.addressConfig.list").stream().noneMatch(li -> Pattern.matches(li, playerAddressHost))){
event.disallow(KICK_OTHER, msg(config.getString("whitelist.addressConfig.kickMsg", ""), playerUUID, playerName));
return;
}
}

Expand Down Expand Up @@ -234,8 +237,9 @@ else if(onOtherPlayer != Type.NOT){

// 限定参观模式可使用的地址
if(config.getBoolean("whitelist.VISIT.addressConfig.enable", false)){
if(!config.getStringList("whitelist.VISIT.addressConfig.list").contains(playerAddressHost)){
if(config.getStringList("whitelist.VISIT.addressConfig.list").stream().noneMatch(li -> Pattern.matches(li, playerAddressHost))){
event.disallow(KICK_OTHER, msg(config.getString("whitelist.VISIT.addressConfig.kickMsg", ""), playerUUID, playerName));
return;
}
}

Expand Down
12 changes: 7 additions & 5 deletions src/main/resources/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,17 @@ whitelist:

# 简易的 ip 黑名单. 在这里添加正则表达式, 匹配的ip不允许加入服务器 (也不允许使用参观账户
# 使用 /wl reload 重载配置即可应用
# IP 地址格式: ipv4: "/127.0.0.1", ipv6: "/0:0:0:0:0:0:0:1" 没有方括号
ipBlacklist: [ ]
# - '^192\.168\.100\..+$'
# - '^fe80::1234:.+$' # IPv6 没有方括号
# - '^/192\.168\.100\..+$'
# - '^/fe80::1234:.+$'
ipBlacklistMsg: '§6IpacEL §f> §b您已被列入黑名单: §a%playerName%' # var: %ip%

# 限定玩家只能通过以下地址加入服务器
# 限定玩家只能通过以下地址连接服务器
addressConfig:
enable: false
list: [ ]
# - '^0:0:0:0:0:0:0:0:25565$'
kickMsg: '§6IpacEL §f> §b此地址不可用'

# 玩家名称字符检查
Expand Down Expand Up @@ -85,7 +87,7 @@ whitelist:
addressConfig:
enable: false
list: [ ]
kickMsg: '§6IpacEL §f> §b您不在白名单中, 请使用参观地址加入服务器'
kickMsg: '§6IpacEL §f> §b您不在白名单中'

# 参观账户的名称字符检查
playerNameRule: '^(?:\.?[a-zA-Z0-9_]{3,16})$'
Expand Down Expand Up @@ -122,7 +124,7 @@ whitelist:
- 'gamemode spectator %playerName%' # 将玩家设置为观察模式
msg:
- '§6IpacEL §f> §a您正在使用参观账户=w='
# - '§6IpacEL §f> §b如需加入, 请访问我们的网站: §ahttps://ipacel.cc/'
# - '§6IpacEL §f> §b如需加入, 请访问我们的网站: §ahttps://ipacel.cc/'
msgExclude:
- '§6IpacEL §f> §a%playerName% §b使用参观账户加入游戏'

Expand Down

0 comments on commit 25252d8

Please sign in to comment.