From 1e791699268afceb89c02974c99c2221cf96f54d Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Thu, 23 May 2024 01:15:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BC=93=E5=AD=98=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 | 62 +++++++++---------- .../lunadeer/dominion/dtos/DominionDTO.java | 4 ++ 3 files changed, 36 insertions(+), 32 deletions(-) diff --git a/pom.xml b/pom.xml index 442ab97..fdbe008 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.24.4-beta + 1.24.5-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/Cache.java b/src/main/java/cn/lunadeer/dominion/Cache.java index 4e0ab81..a98fe35 100644 --- a/src/main/java/cn/lunadeer/dominion/Cache.java +++ b/src/main/java/cn/lunadeer/dominion/Cache.java @@ -11,7 +11,6 @@ import javax.annotation.Nullable; import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; @@ -121,19 +120,16 @@ public class Cache { } if (dominion != null) { if (!isInDominion(dominion, player)) { - // glow - player.setGlowing(false); - if (dominion.getParentDomId() == -1) { + if (dominion.isTopDom()) { Dominion.notification.info(player, "您已离开领地:%s", dominion.getName()); player.sendMessage(Component.text(dominion.getLeaveMessage())); - update_player_current_dominion(player, null); dominion = null; } else { Dominion.notification.info(player, "您已离开子领地:%s", dominion.getName()); player.sendMessage(Component.text(dominion.getLeaveMessage())); dominion = id_dominions.get(dominion.getParentDomId()); - update_player_current_dominion(player, dominion); } + update_player_current_dominion(player, dominion); } else { // 如果在领地内则检查是否在子领地内 List children = dominion_children.get(dominion.getId()); @@ -150,29 +146,20 @@ public class Cache { } } if (dominion == null) { - String world = player.getWorld().getName(); - List dominions_id = world_dominions.get(world); - if (dominions_id == null) return null; - List in_dominions = new ArrayList<>(); - for (Integer id : dominions_id) { - DominionDTO d = id_dominions.get(id); - if (isInDominion(d, player)) { - in_dominions.add(d); - } + List in_dominions = getDominionsParentAndChildren(player.getLocation()); + if (in_dominions.size() != 0) { + dominion = in_dominions.get(0); + Dominion.notification.info(player, "您正在进入领地:%s", dominion.getName()); + player.sendMessage(Component.text(dominion.getJoinMessage())); } - if (in_dominions.size() == 0) return null; - in_dominions.sort(Comparator.comparingInt(DominionDTO::getId)); - dominion = in_dominions.get(0); - Dominion.notification.info(player, "您正在进入领地:%s", dominion.getName()); - player.sendMessage(Component.text(dominion.getJoinMessage())); update_player_current_dominion(player, dominion); } return dominion; } private void update_player_current_dominion(Player player, DominionDTO dominion) { + lightOrNot(player, dominion); // 发光检查 if (dominion == null) { - player.setGlowing(false); player_current_dominion_id.put(player.getUniqueId(), null); return; } @@ -183,32 +170,45 @@ public class Cache { dominion.getLocation1(), dominion.getLocation2()); } - // glow + } + + /** + * 检查玩家是否需要设置为发光 + * + * @param player 玩家 + * @param dominion 领地 + */ + private void lightOrNot(Player player, DominionDTO dominion) { + if (dominion == null) { + player.setGlowing(false); + return; + } PlayerPrivilegeDTO privilege = getPlayerPrivilege(player, dominion); if (privilege != null) { - if (privilege.getGlow()) { - player.setGlowing(true); - } + player.setGlowing(privilege.getGlow()); } else { - if (dominion.getGlow()) { - player.setGlowing(true); - } + player.setGlowing(dominion.getGlow()); } } - public DominionDTO getDominion(Location loc) { + private List getDominionsParentAndChildren(Location loc) { String world = loc.getWorld().getName(); List dominions_id = world_dominions.get(world); - if (dominions_id == null) return null; List in_dominions = new ArrayList<>(); + if (dominions_id == null) return in_dominions; for (Integer id : dominions_id) { DominionDTO d = id_dominions.get(id); if (isInDominion(d, loc)) { in_dominions.add(d); } } - if (in_dominions.size() == 0) return null; in_dominions.sort(Comparator.comparingInt(DominionDTO::getId)); + return in_dominions; + } + + public DominionDTO getDominion(Location loc) { + List in_dominions = getDominionsParentAndChildren(loc); + if (in_dominions.size() == 0) return null; return in_dominions.get(in_dominions.size() - 1); } diff --git a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java index 346ed72..dc74535 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java @@ -530,6 +530,10 @@ public class DominionDTO { return parentDomId; } + public boolean isTopDom() { + return parentDomId == -1; + } + public DominionDTO setParentDomId(Integer parentDomId) { this.parentDomId = parentDomId; return update(this);