From 2299630e15f556eb583697cddb04a6f62f60ba4f Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Mon, 17 Jun 2024 15:12:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86tnt=E7=88=86=E7=82=B8=E3=80=81?= =?UTF-8?q?=E7=81=AB=E7=84=B0=E8=94=93=E5=BB=B6=E7=AD=89=E9=A2=86=E5=9C=B0?= =?UTF-8?q?=E7=8B=AC=E6=9C=89=E7=9A=84=EF=BC=88=E9=9D=9E=E7=8E=A9=E5=AE=B6?= =?UTF-8?q?=E8=A1=8C=E4=B8=BA=EF=BC=89=E6=8E=A7=E5=88=B6=E4=BB=8E=E2=80=9C?= =?UTF-8?q?=E8=AE=BF=E5=AE=A2=E6=9D=83=E9=99=90=E2=80=9D=E7=A7=BB=E5=8A=A8?= =?UTF-8?q?=E5=88=B0=E2=80=9C=E7=8E=AF=E5=A2=83=E8=AE=BE=E7=BD=AE=E2=80=9D?= =?UTF-8?q?=EF=BC=8C=E9=81=BF=E5=85=8D=E6=AD=A7=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../java/cn/lunadeer/dominion/Commands.java | 3 + .../dominion/commands/DominionFlag.java | 11 +++- .../java/cn/lunadeer/dominion/dtos/Flag.java | 20 ++++++ .../dominion/tuis/DominionEnvInfo.java | 61 +++++++++++++++++++ .../dominion/tuis/DominionFlagInfo.java | 2 +- .../dominion/tuis/DominionManage.java | 4 ++ 7 files changed, 99 insertions(+), 4 deletions(-) create mode 100644 src/main/java/cn/lunadeer/dominion/tuis/DominionEnvInfo.java diff --git a/pom.xml b/pom.xml index df18227..651cdf6 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.31.6-beta + 1.32.0-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/Commands.java b/src/main/java/cn/lunadeer/dominion/Commands.java index 8f9dca3..efeae3c 100644 --- a/src/main/java/cn/lunadeer/dominion/Commands.java +++ b/src/main/java/cn/lunadeer/dominion/Commands.java @@ -177,6 +177,9 @@ public class Commands implements TabExecutor { case "set_map_color": DominionOperate.setMapColor(sender, args); break; + case "env_info": + DominionEnvInfo.show(sender, args); + break; // ---=== CUI ===--- case "cui_rename": RenameDominion.open(sender, args); diff --git a/src/main/java/cn/lunadeer/dominion/commands/DominionFlag.java b/src/main/java/cn/lunadeer/dominion/commands/DominionFlag.java index 1ef2719..bb53985 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/DominionFlag.java +++ b/src/main/java/cn/lunadeer/dominion/commands/DominionFlag.java @@ -2,6 +2,8 @@ package cn.lunadeer.dominion.commands; import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; import cn.lunadeer.dominion.controllers.FlagsController; +import cn.lunadeer.dominion.dtos.Flag; +import cn.lunadeer.dominion.tuis.DominionEnvInfo; import cn.lunadeer.dominion.tuis.DominionFlagInfo; import cn.lunadeer.minecraftpluginutils.Notification; import org.bukkit.command.CommandSender; @@ -29,10 +31,15 @@ public class DominionFlag { } else if (args.length == 5) { FlagsController.setFlag(operator, args[1], Boolean.parseBoolean(args[2]), args[3]); String[] newArgs = new String[3]; - newArgs[0] = "flag_info"; + newArgs[0] = Flag.isDominionOnlyFlag(args[1]) ? "env_info" : "flag_info"; newArgs[1] = args[3]; newArgs[2] = args[4]; - DominionFlagInfo.show(sender, newArgs); + if (Flag.isDominionOnlyFlag(args[1])) { + DominionEnvInfo.show(sender, newArgs); + } else { + DominionFlagInfo.show(sender, newArgs); + } + } else { Notification.error(sender, "用法: /dominion set <权限名称> [领地名称]"); } diff --git a/src/main/java/cn/lunadeer/dominion/dtos/Flag.java b/src/main/java/cn/lunadeer/dominion/dtos/Flag.java index 9f93714..f658ad4 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/Flag.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/Flag.java @@ -120,6 +120,26 @@ public enum Flag { return Arrays.asList(Flag.values()); } + public static List getDominionOnlyFlagsEnabled() { + List flags = new ArrayList<>(); + for (Flag flag : Flag.values()) { + if (!flag.dominion_only) { + continue; + } + if (!flag.enable) { + continue; + } + flags.add(flag); + } + Comparator comparator = Collator.getInstance(java.util.Locale.CHINA); + flags.sort((o1, o2) -> comparator.compare(o1.getDisplayName(), o2.getDisplayName())); + return flags; + } + + public static boolean isDominionOnlyFlag(String flagName) { + return getFlag(flagName).dominion_only; + } + public static List getDominionFlagsEnabled() { List flags = new ArrayList<>(); for (Flag flag : Flag.values()) { diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionEnvInfo.java b/src/main/java/cn/lunadeer/dominion/tuis/DominionEnvInfo.java new file mode 100644 index 0000000..50c909e --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/tuis/DominionEnvInfo.java @@ -0,0 +1,61 @@ +package cn.lunadeer.dominion.tuis; + +import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.dominion.dtos.Flag; +import cn.lunadeer.minecraftpluginutils.Notification; +import cn.lunadeer.minecraftpluginutils.stui.ListView; +import cn.lunadeer.minecraftpluginutils.stui.components.Button; +import cn.lunadeer.minecraftpluginutils.stui.components.Line; +import net.kyori.adventure.text.Component; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import static cn.lunadeer.dominion.commands.Apis.playerOnly; + +public class DominionEnvInfo { + + public static void show(CommandSender sender, String[] args) { + Player player = playerOnly(sender); + if (player == null) return; + if (args.length < 2) { + Notification.error(sender, "用法: /dominion env_info <领地名称> [页码]"); + return; + } + DominionDTO dominion = DominionDTO.select(args[1]); + if (dominion == null) { + Notification.error(sender, "领地 %s 不存在", args[1]); + return; + } + int page = 1; + if (args.length == 3) { + try { + page = Integer.parseInt(args[2]); + } catch (Exception ignored) { + } + } + ListView view = ListView.create(10, "/dominion env_info " + dominion.getName()); + view.title("领地 " + dominion.getName() + " 环境设置") + .navigator(Line.create() + .append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()) + .append(Button.create("我的领地").setExecuteCommand("/dominion list").build()) + .append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build()) + .append("环境设置")); + for (Flag flag : Flag.getDominionOnlyFlagsEnabled()) { + view.add(createOption(flag, dominion.getFlagValue(flag), dominion.getName(), page)); + } + view.showOn(player, page); + } + + private static Line createOption(Flag flag, boolean value, String dominion_name, int page) { + if (value) { + return Line.create() + .append(Button.createGreen("☑").setExecuteCommand("/dominion set " + flag.getFlagName() + " false " + dominion_name + " " + page).build()) + .append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription()))); + } else { + return Line.create() + .append(Button.createRed("☐").setExecuteCommand("/dominion set " + flag.getFlagName() + " true " + dominion_name + " " + page).build()) + .append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription()))); + } + } + +} diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java b/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java index 574273b..4a9eb91 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java @@ -40,7 +40,7 @@ public class DominionFlagInfo { .append(Button.create("我的领地").setExecuteCommand("/dominion list").build()) .append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build()) .append("访客权限")); - for (Flag flag : Flag.getDominionFlagsEnabled()) { + for (Flag flag : Flag.getPrivilegeFlagsEnabled()) { view.add(createOption(flag, dominion.getFlagValue(flag), dominion.getName(), page)); } view.showOn(player, page); diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java b/src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java index 5d0b849..92d62b8 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java @@ -28,6 +28,9 @@ public class DominionManage { Line size_info = Line.create() .append(Button.create("详细信息").setExecuteCommand("/dominion info " + dominion.getName()).build()) .append("查看领地详细信息"); + Line env_info = Line.create() + .append(Button.create("环境设置").setExecuteCommand("/dominion env_info " + dominion.getName()).build()) + .append("设置领地内的一些非玩家相关效果"); Line flag_info = Line.create() .append(Button.create("访客权限").setExecuteCommand("/dominion flag_info " + dominion.getName()).build()) .append("访客在此领地的权限"); @@ -58,6 +61,7 @@ public class DominionManage { .append(Button.create("我的领地").setExecuteCommand("/dominion list").build()) .append(dominion.getName())) .add(size_info) + .add(env_info) .add(flag_info) .add(privilege_list) .add(set_tp)