Skip to content

Commit

Permalink
实现 PlayerConfig 功能 #12 #5
Browse files Browse the repository at this point in the history
  • Loading branch information
ApliNi committed Apr 7, 2024
1 parent 4c86527 commit aa9a6f1
Show file tree
Hide file tree
Showing 10 changed files with 108 additions and 15 deletions.
13 changes: 10 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -412,6 +412,12 @@ command:
isVisit: ' - §a%playerName%§f[§7%playerUUID%§f] §a已从参观账户中重置'
finish: ' - §a%playerName%§f[§7%playerUUID%§f] §a已完成'

# 尝试记录最后一个操作者的信息
logger_sender:
enable: false
isPlayer: '%playerName%[%playerUUID%]'
isOther: '[控制台]'

del:
title: '§6IpacEL §f> §b从白名单移出[§a%var%§b]:'
isEmpty: ' - §a%playerName%§f[§7%playerUUID%§f] §b不存在'
Expand All @@ -437,9 +443,10 @@ command:
isEmpty: ' - §a%playerName%§f[§7%playerUUID%§f] §b不存在'
finish: >
§f - §a%playerName%§f[§7%playerUUID%§f]: [§bID: §6%id%§f]
- §bTYPE: §6%type%
- §bBAN: §6%ban%
- §bTIME: §6%time%
- §bTYPE: §6%type%
- §bBAN: §6%ban%
- §bTIME: §6%time%
config: ' - §bDATA: §6%key% §f-> §a%var%'

list:
title: '§6IpacEL §f> §b查询玩家信息[§a%type%§b]:'
Expand Down
7 changes: 6 additions & 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.0-rc1</version>
<version>4.1.1-rc1</version>
<packaging>jar</packaging>

<name>IpacWhitelist</name>
Expand Down Expand Up @@ -115,5 +115,10 @@
<artifactId>okhttp</artifactId>
<version>5.0.0-alpha.12</version>
</dependency>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>2.2</version>
</dependency>
</dependencies>
</project>
24 changes: 24 additions & 0 deletions src/main/java/aplini/ipacwhitelist/enums/pc.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package aplini.ipacwhitelist.enums;

public enum pc {

CmdAddLogSender("CmdAddLogSender", "最后操作"),

;

public final String key;
public final String name;
pc(String key, String name){
this.key = key;
this.name = name;
}

static public pc get(String key){
for(pc li : pc.values()){
if(li.key.equals(key)){
return li;
}
}
throw new IllegalArgumentException("找不到指定的 PlayerConfig Key: "+ key);
}
}
1 change: 1 addition & 0 deletions src/main/java/aplini/ipacwhitelist/enums/ph.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ public enum ph {

ip("%ip%"),
var("%var%"),
key("%key%"),
playerUUID("%playerUUID%"),
playerUUID32("%playerUUID32%"),
playerName("%playerName%"),
Expand Down
23 changes: 20 additions & 3 deletions src/main/java/aplini/ipacwhitelist/listener/cmd/add.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@

import aplini.ipacwhitelist.enums.Key;
import aplini.ipacwhitelist.enums.Type;
import aplini.ipacwhitelist.enums.pc;
import aplini.ipacwhitelist.enums.ph;
import aplini.ipacwhitelist.utils.Inp;
import aplini.ipacwhitelist.utils.PlayerData;
import aplini.ipacwhitelist.utils.sql;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.function.Supplier;

import static aplini.ipacwhitelist.IpacWhitelist.*;
import static aplini.ipacwhitelist.func.eventFunc.runEventFunc;
Expand Down Expand Up @@ -41,6 +41,20 @@ public static void cmd(CommandSender sender, String[] args){
return;
}

// 操作记录
Map<String, Object> addData = new HashMap<>();
if(config.getBoolean("command.add.logger_sender.enable", false)){
if(sender instanceof Player){
Player player = (Player) sender;
addData.put(pc.CmdAddLogSender.key,
config.getString("command.add.logger_sender.isPlayer", "")
.replace(ph.playerName.ph, player.getName())
.replace(ph.playerUUID.ph, player.getUniqueId().toString()));
}else{
addData.put(pc.CmdAddLogSender.key, config.getString("command.add.logger_sender.isOther", "[Other]"));
}
}

sender.sendMessage(config.getString("command.add.title", "")
.replace(ph.var.ph, inp.inp));

Expand All @@ -56,6 +70,7 @@ public static void cmd(CommandSender sender, String[] args){
// 运行参观账户转换程序
runEventFunc("whitelist.VISIT.onWhitelistAddEvent", inp.onlinePlayer, li.uuid, li.name);
li.type = Type.VISIT_CONVERT;
li.config.putAll(addData);
li.save();
sender.sendMessage(msg(config.getString("command.add.isVisit", ""), li.uuid, li.name));
return;
Expand All @@ -68,6 +83,7 @@ public static void cmd(CommandSender sender, String[] args){
// 从已删除的数据中恢复, 如果 UUID 相同则恢复, 否则只能添加一条新数据
else if(Objects.equals(li.uuid, inp.forUUID)){
li.type = Type.WHITE;
li.config.putAll(addData);
li.save();
sender.sendMessage(msg(config.getString("command.add.finish", ""), li.uuid, li.name));
return;
Expand All @@ -79,6 +95,7 @@ else if(Objects.equals(li.uuid, inp.forUUID)){
// 创建新数据
inp.pd = new PlayerData();
inp.pd.type = Type.WHITE;
inp.pd.config.putAll(addData);
inp.pd.setPlayerInfo(inp.forUUID, inp.forName);
inp.pd.save();
sender.sendMessage(msg(config.getString("command.add.finish", ""), inp.forUUID, inp.forName));
Expand Down
7 changes: 7 additions & 0 deletions src/main/java/aplini/ipacwhitelist/listener/cmd/info.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package aplini.ipacwhitelist.listener.cmd;

import aplini.ipacwhitelist.enums.pc;
import aplini.ipacwhitelist.enums.ph;
import aplini.ipacwhitelist.utils.Inp;
import aplini.ipacwhitelist.utils.PlayerData;
Expand All @@ -9,6 +10,7 @@

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import static aplini.ipacwhitelist.IpacWhitelist.config;
import static aplini.ipacwhitelist.IpacWhitelist.server;
Expand Down Expand Up @@ -54,6 +56,11 @@ public static void cmd(CommandSender sender, String[] args){
.replace(ph.ban.ph, li.ban.name)
.replace(ph.time.ph, getDisplayTime(li.time))
);
for(Map.Entry<String, Object> entry : inp.pd.config.data.entrySet()){
sender.sendMessage(config.getString("command.info.config", "")
.replace(ph.key.ph, pc.get(entry.getKey()).name)
.replace(ph.var.ph, (String) entry.getValue()));
}
}
}

Expand Down
29 changes: 27 additions & 2 deletions src/main/java/aplini/ipacwhitelist/utils/PlayerConfig.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,33 @@
package aplini.ipacwhitelist.utils;

import org.yaml.snakeyaml.Yaml;

import java.util.HashMap;
import java.util.Map;

public class PlayerConfig {

public String getString(){
return "";
public String yamlString = "";
public Map<String, Object> data = new HashMap<>();


public PlayerConfig setYamlStr(String str){
this.yamlString = str;
if(!this.yamlString.isEmpty()){
this.data = new Yaml().load(this.yamlString);
}
return this;
}

public PlayerConfig putAll(Map<String, Object> map){
this.data.putAll(map);
return this;
}

public String getYamlStr(){
if(data.isEmpty()){
return "";
}
return new Yaml().dump(this.data);
}
}
2 changes: 1 addition & 1 deletion src/main/java/aplini/ipacwhitelist/utils/PlayerData.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public PlayerData fromDB(ResultSet results){
this.uuid = results.getString("UUID");
this.name = results.getString("Name");
this.time = results.getLong("Time");
this.config = new PlayerConfig();
this.config = new PlayerConfig().setYamlStr(results.getString("Config"));
} catch (Exception e) {
throw new RuntimeException("[IpacWhitelist] [错误] 无法解析数据库中的玩家数据");
}
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/aplini/ipacwhitelist/utils/sql.java
Original file line number Diff line number Diff line change
Expand Up @@ -231,15 +231,15 @@ public static void savePlayerData(PlayerData pd){
sql.setString(++i, pd.uuid);
sql.setString(++i, pd.name);
sql.setLong(++i, pd.time);
sql.setString(++i, pd.config.getString());
sql.setString(++i, pd.config.getYamlStr());
} else {
sql = conn.prepareStatement("UPDATE `player` SET `Type` = ?, `Ban` = ?, `UUID` = ?, `Name` = ?, `Time` = ?, `Config` = ? WHERE `ID` = ?;");
sql.setInt(++i, pd.type.num);
sql.setInt(++i, pd.ban.num);
sql.setString(++i, pd.uuid);
sql.setString(++i, pd.name);
sql.setLong(++i, pd.time);
sql.setString(++i, pd.config.getString());
sql.setString(++i, pd.config.getYamlStr());
sql.setInt(++i, pd.id);
}
sql.executeUpdate();
Expand Down
13 changes: 10 additions & 3 deletions src/main/resources/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,12 @@ command:
isVisit: ' - §a%playerName%§f[§7%playerUUID%§f] §a已从参观账户中重置'
finish: ' - §a%playerName%§f[§7%playerUUID%§f] §a已完成'

# 尝试记录最后一个操作者的信息
logger_sender:
enable: false
isPlayer: '%playerName%[%playerUUID%]'
isOther: '[控制台]'

del:
title: '§6IpacEL §f> §b从白名单移出[§a%var%§b]:'
isEmpty: ' - §a%playerName%§f[§7%playerUUID%§f] §b不存在'
Expand All @@ -213,9 +219,10 @@ command:
isEmpty: ' - §a%playerName%§f[§7%playerUUID%§f] §b不存在'
finish: >
§f - §a%playerName%§f[§7%playerUUID%§f]: [§bID: §6%id%§f]
- §bTYPE: §6%type%
- §bBAN: §6%ban%
- §bTIME: §6%time%
- §bTYPE: §6%type%
- §bBAN: §6%ban%
- §bTIME: §6%time%
config: ' - §bDATA: §6%key% §f-> §a%var%'

list:
title: '§6IpacEL §f> §b查询玩家信息[§a%type%§b]:'
Expand Down

0 comments on commit aa9a6f1

Please sign in to comment.