Skip to content

Commit aa2a7f7

Browse files
committed
支持设置白名单超时时间, 添加 PAPI 的初步支持
1 parent 25252d8 commit aa2a7f7

File tree

8 files changed

+94
-6
lines changed

8 files changed

+94
-6
lines changed

pom.xml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>ApliNi</groupId>
88
<artifactId>IpacWhitelist</artifactId>
9-
<version>4.1.1-rc2</version>
9+
<version>4.1.1-rc4</version>
1010
<packaging>jar</packaging>
1111

1212
<name>IpacWhitelist</name>
@@ -75,6 +75,10 @@
7575
<id>opencollab-snapshot</id>
7676
<url>https://repo.opencollab.dev/main/</url>
7777
</repository>
78+
<repository>
79+
<id>placeholderapi</id>
80+
<url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
81+
</repository>
7882
</repositories>
7983

8084
<dependencies>
@@ -91,6 +95,12 @@
9195
<scope>compile</scope>
9296
</dependency>
9397
<!-- 以下是我们自己添加的依赖 -->
98+
<dependency>
99+
<groupId>me.clip</groupId>
100+
<artifactId>placeholderapi</artifactId>
101+
<version>2.10.0</version>
102+
<scope>provided</scope>
103+
</dependency>
94104
<dependency>
95105
<groupId>fr.xephi</groupId>
96106
<artifactId>authme</artifactId>

src/main/java/aplini/ipacwhitelist/IpacWhitelist.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package aplini.ipacwhitelist;
22

3+
import aplini.ipacwhitelist.api.PlaceholderAPI;
34
import aplini.ipacwhitelist.hook.authMe;
45
import aplini.ipacwhitelist.listener.commandHandler;
56
import aplini.ipacwhitelist.listener.onPlayerLogin;
@@ -45,6 +46,9 @@ public void onEnable(){
4546
if(config.getBoolean("hook.AuthMe", true)){
4647
getServer().getPluginManager().registerEvents(new authMe(), plugin);
4748
}
49+
if(Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")){
50+
new PlaceholderAPI().register();
51+
}
4852

4953
// 注册指令
5054
Objects.requireNonNull(getCommand("wl")).setExecutor(new commandHandler());
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package aplini.ipacwhitelist.api;
2+
3+
import aplini.ipacwhitelist.utils.PlayerData;
4+
import aplini.ipacwhitelist.utils.sql;
5+
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
6+
import org.bukkit.OfflinePlayer;
7+
import org.jetbrains.annotations.NotNull;
8+
9+
import static aplini.ipacwhitelist.IpacWhitelist.config;
10+
11+
public class PlaceholderAPI extends PlaceholderExpansion {
12+
13+
@Override
14+
public String getAuthor() {
15+
return "ApliNi";
16+
}
17+
18+
@Override
19+
public String getIdentifier() {
20+
return "IpacWhitelist";
21+
}
22+
23+
@Override
24+
public String getVersion() {
25+
return "0.0.1";
26+
}
27+
28+
@Override
29+
public boolean persist() {
30+
return true;
31+
}
32+
33+
@Override
34+
public String onRequest(OfflinePlayer player, @NotNull String params){
35+
36+
if(params.equalsIgnoreCase("iwl_player_type")){
37+
PlayerData pd = sql.getPlayerData(player.getUniqueId().toString(), player.getName(), false);
38+
return pd.type.name;
39+
}
40+
41+
if(params.equalsIgnoreCase("iwl_player_type_name")){
42+
PlayerData pd = sql.getPlayerData(player.getUniqueId().toString(), player.getName(), false);
43+
return config.getString("api.PlaceholderAPI.iwl_player_type_name."+ pd.type.name, "未定义变量名 "+ pd.type.name);
44+
}
45+
46+
return null;
47+
}
48+
}

src/main/java/aplini/ipacwhitelist/listener/cmd/add.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ public static void cmd(CommandSender sender, String[] args){
7777
}
7878
// 非 NOT 类型
7979
if(li.isExist()){
80+
li.save(); // 更新时间记录
8081
sender.sendMessage(msg(config.getString("command.add.isExist", ""), li.uuid, li.name));
8182
return;
8283
}

src/main/java/aplini/ipacwhitelist/listener/onPlayerLogin.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@
3030
import static aplini.ipacwhitelist.hook.geyser.isGeyserPlayer;
3131
import static aplini.ipacwhitelist.utils.netReq.isPremiumPlayer;
3232
import static aplini.ipacwhitelist.utils.sql.getPlayerData;
33-
import static aplini.ipacwhitelist.utils.util.SEL;
34-
import static aplini.ipacwhitelist.utils.util.msg;
33+
import static aplini.ipacwhitelist.utils.util.*;
3534
import static org.bukkit.event.player.PlayerLoginEvent.Result.KICK_OTHER;
3635

3736
public class onPlayerLogin implements Listener {
@@ -279,16 +278,23 @@ else if(onOtherPlayer != Type.NOT){
279278

280279
// 白名单
281280
case WHITE -> {
281+
// 白名单超时
282+
if(getTime() - pd.time > config.getLong("whitelist.WHITE.timeOut", 18394560)){
283+
event.disallow(KICK_OTHER, config.getString("whitelist.WHITE.timeOutMsg", ""));
284+
return;
285+
}
282286
event.allow();
283287
}
284288

285289
default -> {
286290
plugin.getLogger().warning("出现未知的错误: 不存在有效数据的玩家登录服务器: "+ player.getUniqueId());
287291
event.disallow(KICK_OTHER, config.getString("message.playerLoginErr", ""));
292+
return;
288293
}
289294
}
290295

291296
// 保存玩家数据
297+
// 以上代码通过 return 来绕过这里的保存操作, 只有成功加入游戏才需要保存
292298
pd.save();
293299
}
294300

src/main/java/aplini/ipacwhitelist/utils/PlayerData.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class PlayerData {
1616
public Type ban = Type.NOT;
1717
public String uuid = null;
1818
public String name = null;
19-
public long time = 0;
19+
public long time = 0; // 秒级时间戳
2020
public PlayerConfig config = new PlayerConfig();
2121

2222
// 保存数据时是否更新时间

src/main/resources/config.yml

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,11 @@ whitelist:
153153

154154
# 白名单中的玩家
155155
WHITE:
156+
157+
# 距离上一次上线超过此时间就踢出, 如果需要取消可以修改为较大的数值
158+
timeOut: 18394560 # 7个月
159+
timeOutMsg: '§6IpacEL §f> §a白名单已超时, 请联系管理员恢复'
160+
156161
onPlayerLoginEvent: [ ] # 玩家登录服务器
157162

158163
onPlayerJoinEvent: # 玩家加入服务器
@@ -199,7 +204,7 @@ command:
199204
add:
200205
title: '§6IpacEL §f> §a添加到白名单[§b%var%§a]:'
201206
isBan: ' - §a%playerName%§f[§7%playerUUID%§f] §b已在黑名单中, 不可操作'
202-
isExist: ' - §a%playerName%§f[§7%playerUUID%§f] §b已在白名单中'
207+
isExist: ' - §a%playerName%§f[§7%playerUUID%§f] §b已在白名单中, 已更新时间记录'
203208
isVisit: ' - §a%playerName%§f[§7%playerUUID%§f] §a已从参观账户中重置'
204209
finish: ' - §a%playerName%§f[§7%playerUUID%§f] §a已完成'
205210

@@ -308,6 +313,17 @@ command:
308313
TIME: 5
309314

310315

316+
# API 相关配置
317+
api:
318+
PlaceholderAPI:
319+
iwl_player_type: {}
320+
iwl_player_type_name:
321+
NOT: '不存在'
322+
VISIT: '参观账户'
323+
WHITE: '白名单'
324+
VISIT_CONVERT: '白名单 (正在转换)'
325+
BAN: '已封禁'
326+
311327
# 其他消息
312328
message:
313329
noEnable: '§6IpacEL §f> §b功能未启用'

src/main/resources/plugin.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
name: IpacWhitelist
2+
authors: [ ApliNi ]
23
version: '${project.version}'
34
main: aplini.ipacwhitelist.IpacWhitelist
45
api-version: 1.19
56

67
softdepend:
78
- AuthMe
9+
- Geyser-Spigot
10+
- PlaceholderAPI
811

912
commands:
1013
wl:
1114
description: 白名单指令
1215
usage: /<command>
13-
aliases: [ipacwhitelist]
16+
aliases: [ ipacwhitelist ]
1417

1518
permissions:
1619

0 commit comments

Comments
 (0)