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);