diff --git a/pom.xml b/pom.xml index 8cd66cd..30bfb4c 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.30.5-beta + 1.30.6-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/Cache.java b/src/main/java/cn/lunadeer/dominion/Cache.java index 7f1abe2..a262575 100644 --- a/src/main/java/cn/lunadeer/dominion/Cache.java +++ b/src/main/java/cn/lunadeer/dominion/Cache.java @@ -235,6 +235,14 @@ public class Cache { return dominionTree; } + public List getAllDominionTree() { + List dominionTree = new ArrayList<>(); + for (List tree : world_dominion_tree.values()) { + dominionTree.addAll(tree); + } + return dominionTree; + } + /** * 获取玩家在指定领地的特权 * 如果玩家不存在特权,则返回null diff --git a/src/main/java/cn/lunadeer/dominion/Commands.java b/src/main/java/cn/lunadeer/dominion/Commands.java index 50d4249..e5ec4ce 100644 --- a/src/main/java/cn/lunadeer/dominion/Commands.java +++ b/src/main/java/cn/lunadeer/dominion/Commands.java @@ -149,6 +149,9 @@ public class Commands implements TabExecutor { case "set_config": SetConfig.handler(sender, args); break; + case "all_dominion": + AllDominion.show(sender, args); + break; // ---=== CUI ===--- case "cui_rename": OpenCUI.RenameDominion(sender, args); diff --git a/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java b/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java index 8030c9a..3fd092f 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java +++ b/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java @@ -350,15 +350,30 @@ public class DominionOperate { Notification.error(sender, "用法: /dominion tp <领地名称>"); return; } - if (!Dominion.config.getTpEnable()) { - Notification.error(sender, "管理员没有开启领地传送功能"); - return; - } DominionDTO dominionDTO = DominionDTO.select(args[1]); if (dominionDTO == null) { Notification.error(sender, "领地不存在"); return; } + if (player.isOp() && Dominion.config.getLimitOpBypass()) { + Notification.warn(sender, "你是OP,将忽略领地传送限制"); + Location location = dominionDTO.getTpLocation(); + if (location == null) { + int x = (dominionDTO.getX1() + dominionDTO.getX2()) / 2; + int z = (dominionDTO.getZ1() + dominionDTO.getZ2()) / 2; + World world = Dominion.instance.getServer().getWorld(dominionDTO.getWorld()); + location = new Location(world, x, player.getLocation().getY(), z); + XLogger.warn("领地 %s 没有设置传送点,将尝试传送到中心点", dominionDTO.getName()); + } + Teleport.doTeleportSafely(player, location); + Notification.info(player, "已将你传送到 " + dominionDTO.getName()); + return; + } + if (!Dominion.config.getTpEnable()) { + Notification.error(sender, "管理员没有开启领地传送功能"); + return; + } + PlayerPrivilegeDTO privilegeDTO = PlayerPrivilegeDTO.select(player.getUniqueId(), dominionDTO.getId()); if (privilegeDTO == null) { if (!dominionDTO.getFlagValue(Flag.TELEPORT)) { diff --git a/src/main/java/cn/lunadeer/dominion/tuis/AllDominion.java b/src/main/java/cn/lunadeer/dominion/tuis/AllDominion.java new file mode 100644 index 0000000..187e025 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/tuis/AllDominion.java @@ -0,0 +1,35 @@ +package cn.lunadeer.dominion.tuis; + +import cn.lunadeer.dominion.Cache; +import cn.lunadeer.dominion.DominionNode; +import cn.lunadeer.minecraftpluginutils.stui.ListView; +import cn.lunadeer.minecraftpluginutils.stui.components.Button; +import cn.lunadeer.minecraftpluginutils.stui.components.Line; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; + +import static cn.lunadeer.dominion.commands.Apis.playerOnly; +import static cn.lunadeer.dominion.tuis.Apis.getPage; +import static cn.lunadeer.dominion.tuis.Apis.notOp; +import static cn.lunadeer.dominion.tuis.ListDominion.BuildTreeLines; + +public class AllDominion { + + public static void show(CommandSender sender, String[] args) { + Player player = playerOnly(sender); + if (player == null) return; + if (notOp(player)) return; + int page = getPage(args); + + List allDominions = Cache.instance.getAllDominionTree(); + + ListView view = ListView.create(10, "/dominion all_dominion"); + + view.title("所有领地"); + view.navigator(Line.create().append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()).append("所有领地")); + view.addLines(BuildTreeLines(allDominions, 0)); + view.showOn(player, page); + } +} diff --git a/src/main/java/cn/lunadeer/dominion/tuis/Apis.java b/src/main/java/cn/lunadeer/dominion/tuis/Apis.java index e4f8564..ca122ff 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/Apis.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/Apis.java @@ -71,6 +71,14 @@ public class Apis { return false; } + public static boolean notOp(CommandSender sender) { + if (!sender.isOp()) { + Notification.error(sender, "你没有权限访问此页面"); + return true; + } + return false; + } + public static void printHelp(CommandSender sender, String[] args) { Player player = playerOnly(sender); if (player == null) return; diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionConfig.java b/src/main/java/cn/lunadeer/dominion/tuis/DominionConfig.java index 86e16c5..c47547f 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/DominionConfig.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/DominionConfig.java @@ -13,11 +13,13 @@ import org.bukkit.entity.Player; import static cn.lunadeer.dominion.commands.Apis.playerOnly; import static cn.lunadeer.dominion.tuis.Apis.getPage; +import static cn.lunadeer.dominion.tuis.Apis.notOp; public class DominionConfig { public static void show(CommandSender sender, String[] args) { Player player = playerOnly(sender); if (player == null) return; + if (notOp(player)) return; int page = getPage(args); ListView view = ListView.create(10, "/dominion config"); view.title("系统配置"); diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionPrivilegeList.java b/src/main/java/cn/lunadeer/dominion/tuis/DominionPrivilegeList.java index 3877697..a81b718 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/DominionPrivilegeList.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/DominionPrivilegeList.java @@ -1,12 +1,18 @@ package cn.lunadeer.dominion.tuis; import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.dominion.dtos.Flag; import cn.lunadeer.dominion.dtos.PlayerDTO; import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; 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 net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.format.Style; +import net.kyori.adventure.text.format.TextColor; +import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -48,8 +54,19 @@ public class DominionPrivilegeList { for (PlayerPrivilegeDTO privilege : privileges) { PlayerDTO p_player = PlayerDTO.select(privilege.getPlayerUUID()); if (p_player == null) continue; - Line line = Line.create() - .append(p_player.getLastKnownName()) + Line line = Line.create(); + + if (privilege.getAdmin()) { + line.append(adminTag); + } else { + if (!privilege.getFlagValue(Flag.MOVE)) { + line.append(banTag); + } else { + line.append(normalTag); + } + } + + line.append(p_player.getLastKnownName()) .append(Button.createGreen("配置权限").setExecuteCommand("/dominion privilege_info " + p_player.getLastKnownName() + " " + dominion.getName()).build()); if ((!player.getName().equals(p_player.getLastKnownName()) && !privilege.getAdmin()) || dominion.getOwner().equals(player.getUniqueId())) line.append(Button.createRed("移除成员").setExecuteCommand("/dominion clear_privilege " + p_player.getLastKnownName() + " " + dominion.getName() + " b").build()); @@ -57,4 +74,11 @@ public class DominionPrivilegeList { } view.showOn(player, page); } + + private static final TextComponent adminTag = Component.text("[A]", Style.style(TextColor.color(97, 97, 210))) + .hoverEvent(Component.text("这是一个管理员")); + private static final TextComponent normalTag = Component.text("[N]", Style.style(TextColor.color(255, 255, 255))) + .hoverEvent(Component.text("这是一个普通成员")); + private static final TextComponent banTag = Component.text("[B]", Style.style(TextColor.color(255, 67, 0))) + .hoverEvent(Component.text("这是一个黑名单成员")); } diff --git a/src/main/java/cn/lunadeer/dominion/tuis/ListDominion.java b/src/main/java/cn/lunadeer/dominion/tuis/ListDominion.java index 8245ab8..56df9c6 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/ListDominion.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/ListDominion.java @@ -24,13 +24,15 @@ public class ListDominion { if (player == null) return; int page = getPage(args); ListView view = ListView.create(10, "/dominion list"); - // 根据id从小到大排序 - List admin_dominions = playerAdminDominions(sender); view.title("我的领地列表"); view.navigator(Line.create().append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()).append("我的领地")); view.addLines(BuildTreeLines(Cache.instance.getDominionTreeByPlayer(player.getName()), 0)); - view.add(Line.create().append(Component.text("-= 以下为你拥有管理员权限的领地 =-", ViewStyles.main_color))); + List admin_dominions = playerAdminDominions(sender); + if (admin_dominions.size() != 0) { + view.add(Line.create().append("")); + view.add(Line.create().append(Component.text("--- 以下为你拥有管理员权限的领地 ---", ViewStyles.main_color))); + } for (String dominion : admin_dominions) { TextComponent manage = Button.createGreen("管理").setExecuteCommand("/dominion manage " + dominion).build(); view.add(Line.create().append(manage).append(dominion)); @@ -38,7 +40,7 @@ public class ListDominion { view.showOn(player, page); } - private static List BuildTreeLines(List dominionTree, Integer depth) { + public static List BuildTreeLines(List dominionTree, Integer depth) { List lines = new ArrayList<>(); StringBuilder prefix = new StringBuilder(); for (int i = 0; i < depth; i++) { diff --git a/src/main/java/cn/lunadeer/dominion/tuis/Menu.java b/src/main/java/cn/lunadeer/dominion/tuis/Menu.java index 002a5fb..da07b0b 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/Menu.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/Menu.java @@ -1,8 +1,10 @@ package cn.lunadeer.dominion.tuis; import cn.lunadeer.minecraftpluginutils.stui.ListView; +import cn.lunadeer.minecraftpluginutils.stui.ViewStyles; 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; @@ -24,6 +26,9 @@ public class Menu { Line link = Line.create() .append(Button.create("使用文档").setOpenURL("https://ssl.lunadeer.cn:14448/doc/23/").build()) .append("在浏览器中打开使用文档"); + Line all = Line.create() + .append(Button.create("所有领地").setExecuteCommand("/dominion all_dominion").build()) + .append("查看所有领地"); Line config = Line.create() .append(Button.create("系统配置").setExecuteCommand("/dominion config").build()) .append("查看/修改系统配置"); @@ -42,7 +47,8 @@ public class Menu { .add(link); if (player.isOp()) { view.add(Line.create().append("")); - view.add(Line.create().append("---以下选项仅OP可见---")); + view.add(Line.create().append(Component.text("--- 以下选项仅OP可见 ---", ViewStyles.main_color))); + view.add(all); view.add(config); view.add(reload_cache); view.add(reload_config);