diff --git a/README.md b/README.md index 9011e94..7656f0b 100644 --- a/README.md +++ b/README.md @@ -111,8 +111,10 @@ v4 版本改动特别大, 建议不要从旧配置中复制内容到新配置, ## API 和扩展功能 #### PlaceholderAPI 占位符 -- `iwl_player_type_name` - 显示当前玩家类型的显示名称, 名称可配置 -- `iwl_player_type` - 显示当前玩家类型的内部名称 +- `%iwl_player_type%` - 显示当前玩家类型的内部名称 +- `%iwl_player_type(playerName|playerUUID)%` - 显示指定玩家类型的内部名称 +- `%iwl_player_type_name%` - 显示当前玩家类型的显示名称, 名称可配置 +- `%iwl_player_type_name(playerName|playerUUID)%` - 显示指定玩家类型的显示名称, 名称可配置 --- diff --git a/src/main/java/aplini/ipacwhitelist/IpacWhitelist.java b/src/main/java/aplini/ipacwhitelist/IpacWhitelist.java index d85d997..4314e9e 100644 --- a/src/main/java/aplini/ipacwhitelist/IpacWhitelist.java +++ b/src/main/java/aplini/ipacwhitelist/IpacWhitelist.java @@ -47,7 +47,7 @@ public void onEnable(){ getServer().getPluginManager().registerEvents(new authMe(), plugin); } if(Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")){ - new PlaceholderAPI().register(); + new PlaceholderAPI(plugin).register(); } // 注册指令 diff --git a/src/main/java/aplini/ipacwhitelist/api/PlaceholderAPI.java b/src/main/java/aplini/ipacwhitelist/api/PlaceholderAPI.java index 9c52422..995eade 100644 --- a/src/main/java/aplini/ipacwhitelist/api/PlaceholderAPI.java +++ b/src/main/java/aplini/ipacwhitelist/api/PlaceholderAPI.java @@ -1,26 +1,41 @@ package aplini.ipacwhitelist.api; +import aplini.ipacwhitelist.IpacWhitelist; +import aplini.ipacwhitelist.enums.Type; +import aplini.ipacwhitelist.utils.Inp; import aplini.ipacwhitelist.utils.PlayerData; import aplini.ipacwhitelist.utils.sql; import me.clip.placeholderapi.expansion.PlaceholderExpansion; import org.bukkit.OfflinePlayer; import org.jetbrains.annotations.NotNull; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import static aplini.ipacwhitelist.IpacWhitelist.config; public class PlaceholderAPI extends PlaceholderExpansion { + private final IpacWhitelist plugin; + + public PlaceholderAPI(IpacWhitelist plugin) { + this.plugin = plugin; + } + @Override + @NotNull public String getAuthor() { return "ApliNi"; } @Override + @NotNull public String getIdentifier() { - return "IpacWhitelist"; + return "iwl"; } @Override + @NotNull public String getVersion() { return "0.0.1"; } @@ -30,17 +45,33 @@ public boolean persist() { return true; } + static Pattern pattern = Pattern.compile("^(.+)\\((.+)\\)$"); + @Override public String onRequest(OfflinePlayer player, @NotNull String params){ - if(params.equalsIgnoreCase("iwl_player_type")){ - PlayerData pd = sql.getPlayerData(player.getUniqueId().toString(), player.getName(), false); - return pd.type.name; + // 如果这是一个带参数的变量 + Matcher matcher = pattern.matcher(params); + String cmd = null, playerInp = null; + if(matcher.find()){ + cmd = matcher.group(1); + playerInp = matcher.group(2); } - if(params.equalsIgnoreCase("iwl_player_type_name")){ - PlayerData pd = sql.getPlayerData(player.getUniqueId().toString(), player.getName(), false); - return config.getString("api.PlaceholderAPI.iwl_player_type_name."+ pd.type.name, "未定义变量名 "+ pd.type.name); + cmd = (cmd == null)? params.toLowerCase() : cmd.toLowerCase(); + playerInp = (playerInp == null)? player.getUniqueId().toString() : playerInp; + + Inp inp = new Inp().fromInp(playerInp, false); + + switch(cmd){ + case "player_type" -> { + Type type = (inp.pd.ban == Type.BAN)? Type.BAN : inp.pd.type; + return type.name; + } + case "player_type_name" -> { + Type type = (inp.pd.ban == Type.BAN)? Type.BAN : inp.pd.type; + return config.getString("api.PlaceholderAPI.iwl_player_type_name." + type.name, "未定义变量名 " + type.name); + } } return null; diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 5a9be3b..948ec52 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -21,7 +21,7 @@ whitelist: ipBlacklist: [ ] # - '^/192\.168\.100\..+$' # - '^/fe80::1234:.+$' - ipBlacklistMsg: '§6IpacEL §f> §b您的 IP 已被列入黑名单: §a%playerName%' # var: %ip% + ipBlacklistMsg: '§6IpacEL §f> §b您的 IP 已被列入黑名单' # var: %ip% # 限定玩家只能通过以下地址连接服务器 addressConfig: