From 7482aba2a80dbc765fb8be5c3fa5945f21cc5315 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Tue, 20 Feb 2024 00:49:59 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E4=BA=86=E5=AD=90=E9=A2=86?= =?UTF-8?q?=E5=9C=B0=E6=97=A0=E6=B3=95=E8=A2=AB=E6=9D=83=E9=99=90=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E7=9A=84=E9=97=AE=E9=A2=98=20=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E4=BA=86=E6=95=B0=E6=8D=AE=E5=BA=93=E9=87=8D=E5=A4=8D=E6=8F=92?= =?UTF-8?q?=E5=85=A5=E8=AD=A6=E5=91=8A=E9=97=AE=E9=A2=98=20=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E4=BA=86=E4=B8=8D=E6=AD=A3=E7=A1=AE=E7=9A=84=E8=BF=9B?= =?UTF-8?q?=E5=85=A5=E6=8F=90=E7=A4=BA=E8=AF=AD=E6=98=BE=E7=A4=BA=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- src/main/java/cn/lunadeer/dominion/Cache.java | 69 ++++++++++++++----- .../cn/lunadeer/dominion/utils/Database.java | 4 +- 3 files changed, 55 insertions(+), 20 deletions(-) diff --git a/pom.xml b/pom.xml index 933999e..ec6d95d 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.6.0-beta + 1.6.3-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/Cache.java b/src/main/java/cn/lunadeer/dominion/Cache.java index f0baaa8..9ee2dd4 100644 --- a/src/main/java/cn/lunadeer/dominion/Cache.java +++ b/src/main/java/cn/lunadeer/dominion/Cache.java @@ -24,13 +24,23 @@ public class Cache { public void loadDominions() { id_dominions = new HashMap<>(); world_dominions = new HashMap<>(); + dominion_children = new HashMap<>(); List dominions = DominionDTO.selectAll(); for (DominionDTO d : dominions) { + if (!dominion_children.containsKey(d.getId())) { + dominion_children.put(d.getId(), new ArrayList<>()); + } id_dominions.put(d.getId(), d); if (!world_dominions.containsKey(d.getWorld())) { world_dominions.put(d.getWorld(), new ArrayList<>()); } world_dominions.get(d.getWorld()).add(d.getId()); + if (d.getParentDomId() != -1) { + if (!dominion_children.containsKey(d.getParentDomId())) { + dominion_children.put(d.getParentDomId(), new ArrayList<>()); + } + dominion_children.get(d.getParentDomId()).add(d.getId()); + } } BlueMapConnect.render(); } @@ -70,10 +80,30 @@ public class Cache { if (!isInDominion(dominion, player)) { // glow player.setGlowing(false); - Notification.info(player, "您已离开领地:" + dominion.getName()); - Notification.info(player, dominion.getLeaveMessage()); - player_current_dominion.put(player.getUniqueId(), null); - dominion = null; + if (dominion.getParentDomId() == -1) { + Notification.info(player, "您已离开领地:" + dominion.getName()); + Notification.info(player, dominion.getLeaveMessage()); + player_current_dominion.put(player.getUniqueId(), null); + dominion = null; + } else { + Notification.info(player, "您已离开子领地:" + dominion.getName()); + Notification.info(player, dominion.getLeaveMessage()); + dominion = id_dominions.get(dominion.getParentDomId()); + update_player_current_dominion(player, dominion); + } + } else { + // 如果在领地内则检查是否在子领地内 + List children = dominion_children.get(dominion.getId()); + for (Integer child_id : children) { + DominionDTO child = id_dominions.get(child_id); + if (isInDominion(child, player)) { + dominion = child; + Notification.info(player, "您正在进入子领地:" + dominion.getName()); + Notification.info(player, dominion.getJoinMessage()); + update_player_current_dominion(player, dominion); + break; + } + } } } if (dominion == null) { @@ -89,25 +119,29 @@ public class Cache { } if (in_dominions.size() == 0) return null; in_dominions.sort(Comparator.comparingInt(DominionDTO::getId)); - dominion = in_dominions.get(in_dominions.size() - 1); - player_current_dominion.put(player.getUniqueId(), dominion.getId()); - // glow - PlayerPrivilegeDTO privilege = getPlayerPrivilege(player, dominion); - if (privilege != null) { - if (privilege.getGlow()) { - player.setGlowing(true); - } - } else { - if (dominion.getGlow()) { - player.setGlowing(true); - } - } + dominion = in_dominions.get(0); Notification.info(player, "您正在进入领地:" + dominion.getName()); Notification.info(player, dominion.getJoinMessage()); + update_player_current_dominion(player, dominion); } return dominion; } + private void update_player_current_dominion(Player player, DominionDTO dominion) { + player_current_dominion.put(player.getUniqueId(), dominion.getId()); + // glow + PlayerPrivilegeDTO privilege = getPlayerPrivilege(player, dominion); + if (privilege != null) { + if (privilege.getGlow()) { + player.setGlowing(true); + } + } else { + if (dominion.getGlow()) { + player.setGlowing(true); + } + } + } + public DominionDTO getDominion(Location loc) { String world = loc.getWorld().getName(); List dominions_id = world_dominions.get(world); @@ -167,4 +201,5 @@ public class Cache { private Map> world_dominions; // 所有领地 private Map> player_uuid_to_privilege; // 玩家所有的特权 private Map player_current_dominion; // 玩家当前所在领地 + private Map> dominion_children; } diff --git a/src/main/java/cn/lunadeer/dominion/utils/Database.java b/src/main/java/cn/lunadeer/dominion/utils/Database.java index 5ed4ea3..b81faf6 100644 --- a/src/main/java/cn/lunadeer/dominion/utils/Database.java +++ b/src/main/java/cn/lunadeer/dominion/utils/Database.java @@ -172,9 +172,9 @@ public class Database { query(sql); // 1.5.0 - sql = "ALTER TABLE dominion ADD hopper BOOLEAN NOT NULL DEFAULT FALSE;"; + sql = "ALTER TABLE dominion ADD COLUMN IF NOT EXISTS hopper BOOLEAN NOT NULL DEFAULT FALSE;"; query(sql); - sql = "ALTER TABLE player_privilege ADD hopper BOOLEAN NOT NULL DEFAULT FALSE;"; + sql = "ALTER TABLE player_privilege ADD COLUMN IF NOT EXISTS hopper BOOLEAN NOT NULL DEFAULT FALSE;"; query(sql); } }