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