From ee5b32a5edc74a3ab7019cdf26b6a9ea9745e27c Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Thu, 23 May 2024 11:49:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6flags.json=E6=94=AF=E6=8C=81=E5=AF=B9=E6=9D=83?= =?UTF-8?q?=E9=99=90=E6=9C=AC=E8=BA=AB=E8=BF=9B=E8=A1=8C=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=EF=BC=9A=E7=BC=96=E8=BE=91=E8=AF=B4=E6=98=8E=E3=80=81=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E5=85=81=E8=AE=B8=E9=85=8D=E7=BD=AE=E3=80=81=E6=9D=83?= =?UTF-8?q?=E9=99=90=E9=BB=98=E8=AE=A4=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 5 ++ .../java/cn/lunadeer/dominion/dtos/Flag.java | 70 +++++++++++++++++++ .../cn/lunadeer/dominion/events/Apis.java | 3 + .../dominion/managers/ConfigManager.java | 2 + 4 files changed, 80 insertions(+) diff --git a/pom.xml b/pom.xml index 7687f4c..b9645f2 100644 --- a/pom.xml +++ b/pom.xml @@ -96,5 +96,10 @@ 1.7 provided + + com.alibaba + fastjson + 2.0.31 + diff --git a/src/main/java/cn/lunadeer/dominion/dtos/Flag.java b/src/main/java/cn/lunadeer/dominion/dtos/Flag.java index 8b0b5ec..4c73f8d 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/Flag.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/Flag.java @@ -1,5 +1,10 @@ package cn.lunadeer.dominion.dtos; +import cn.lunadeer.dominion.Dominion; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + +import java.io.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -83,6 +88,9 @@ public enum Flag { public Boolean getDefaultValue() { return default_value; } + public Boolean getEnable() { + return enable; + } public void setDisplayName(String displayName) { this.display_name = displayName; @@ -148,4 +156,66 @@ public enum Flag { public static Flag getFlag(String flagName) { return Arrays.stream(Flag.values()).filter(flag -> flag.getFlagName().equals(flagName)).findFirst().orElse(null); } + +/* + { + flag_name: { + display_name: "", + description: "", + default_value: true, + enable: true + } + } +*/ + + public static void loadFromJson(File dataFolder) { + File flagFile = new File(dataFolder, "flags.json"); + if (!flagFile.exists()) { + saveToJson(dataFolder); + } + + try (FileReader reader = new FileReader(flagFile); + BufferedReader bufferedReader = new BufferedReader(reader)) { + StringBuilder stringBuilder = new StringBuilder(); + String line; + while ((line = bufferedReader.readLine()) != null) { + stringBuilder.append(line); + stringBuilder.append(System.lineSeparator()); + } + String fileContent = stringBuilder.toString(); + JSONObject jsonObject = (JSONObject) JSONObject.parse(fileContent); + for (Flag flag : getAllFlags()) { + JSONObject flagJson = (JSONObject) jsonObject.get(flag.getFlagName()); + if (flagJson != null) { + flag.setDisplayName((String) flagJson.get("display_name")); + flag.setDescription((String) flagJson.get("description")); + flag.setDefaultValue((Boolean) flagJson.get("default_value")); + flag.setEnable((Boolean) flagJson.get("enable")); + } + } + } catch (Exception e) { + Dominion.logger.err("读取权限配置失败:%s", e.getMessage()); + } + saveToJson(dataFolder); // 复写一遍,确保文件中包含所有权限 + } + + public static void saveToJson(File dataFolder) { + JSONObject json = new JSONObject(); + for (Flag f : getAllFlags()) { + JSONObject flagJson = new JSONObject(); + flagJson.put("display_name", f.getDisplayName()); + flagJson.put("description", f.getDescription()); + flagJson.put("default_value", f.getDefaultValue()); + flagJson.put("enable", f.enable); + json.put(f.getFlagName(), flagJson); + } + File flagFile = new File(dataFolder, "flags.json"); + // save to file, if exists then overwrite + try (FileWriter fileWriter = new FileWriter(flagFile); + BufferedWriter bufferedWriter = new BufferedWriter(fileWriter)) { + bufferedWriter.write(JSON.toJSONString(json, true)); + } catch (Exception e) { + Dominion.logger.err("写入权限配置失败:%s", e.getMessage()); + } + } } diff --git a/src/main/java/cn/lunadeer/dominion/events/Apis.java b/src/main/java/cn/lunadeer/dominion/events/Apis.java index ffc287c..e06d6f3 100644 --- a/src/main/java/cn/lunadeer/dominion/events/Apis.java +++ b/src/main/java/cn/lunadeer/dominion/events/Apis.java @@ -37,6 +37,9 @@ public class Apis { } public static boolean checkFlag(DominionDTO dom, Flag flag, Player player, Cancellable event) { + if (!flag.getEnable()) { + return true; + } if (dom == null) { return true; } diff --git a/src/main/java/cn/lunadeer/dominion/managers/ConfigManager.java b/src/main/java/cn/lunadeer/dominion/managers/ConfigManager.java index ebcd4ce..31561e7 100644 --- a/src/main/java/cn/lunadeer/dominion/managers/ConfigManager.java +++ b/src/main/java/cn/lunadeer/dominion/managers/ConfigManager.java @@ -1,6 +1,7 @@ package cn.lunadeer.dominion.managers; import cn.lunadeer.dominion.Dominion; +import cn.lunadeer.dominion.dtos.Flag; import org.bukkit.Material; import org.bukkit.configuration.file.FileConfiguration; @@ -84,6 +85,7 @@ public class ConfigManager { _economy_price = (float) _file.getDouble("Economy.Price", 10.0); _economy_only_xz = _file.getBoolean("Economy.OnlyXZ", false); _economy_refund = (float) _file.getDouble("Economy.Refund", 0.85); + Flag.loadFromJson(_plugin.getDataFolder()); } public Boolean isDebug() {