diff --git a/README.md b/README.md
index 4ad99f7..220f5dc 100644
--- a/README.md
+++ b/README.md
@@ -170,14 +170,22 @@ Database:
User: dominion
Pass: dominion
+# -1 表示不开启
AutoCreateRadius: 10
-MaxX: 128
-MaxY: 64
-MaxZ: 128
-AutoClean:
- Enabled: false
- AfterDays: 180
+# -1 表示不限制
+Limit:
+ MinY: -64
+ MaxY: 320
+ SizeX: 128
+ SizeY: 64
+ SizeZ: 128
+ Amount: 10
+ Depth: 3 # 子领地深度 0:不允许子领地 -1:不限制
+ WorldBlackList: []
+
+# -1 表示不开启
+AutoCleanAfterDays: 180
BlueMap: true
diff --git a/pom.xml b/pom.xml
index 32a065d..666b71b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
cn.lunadeer
Dominion
- 1.13.6-beta
+ 1.14.6-beta
jar
Dominion
diff --git a/src/main/java/cn/lunadeer/dominion/AutoClean.java b/src/main/java/cn/lunadeer/dominion/AutoClean.java
index 8fddbec..0de99cb 100644
--- a/src/main/java/cn/lunadeer/dominion/AutoClean.java
+++ b/src/main/java/cn/lunadeer/dominion/AutoClean.java
@@ -8,7 +8,7 @@ import java.util.List;
public class AutoClean {
public static void run() {
- if (!Dominion.config.getAutoCleanEnable()) {
+ if (Dominion.config.getAutoCleanAfterDays() < 0) {
return;
}
XLogger.info("开始自动清理长时间未登录玩家领地数据");
diff --git a/src/main/java/cn/lunadeer/dominion/Cache.java b/src/main/java/cn/lunadeer/dominion/Cache.java
index 1ee7f60..ec872c9 100644
--- a/src/main/java/cn/lunadeer/dominion/Cache.java
+++ b/src/main/java/cn/lunadeer/dominion/Cache.java
@@ -206,6 +206,18 @@ public class Cache {
return id_dominions.get(id);
}
+ public int getPlayerDominionCount(Player player) {
+ UUID player_uuid = player.getUniqueId();
+ int count = 0;
+ for (Integer id : world_dominions.get(player.getWorld().getName())) {
+ DominionDTO dominion = id_dominions.get(id);
+ if (dominion.getOwner().equals(player_uuid)) {
+ count++;
+ }
+ }
+ return count;
+ }
+
public List getDominions() {
return new ArrayList<>(id_dominions.values());
}
diff --git a/src/main/java/cn/lunadeer/dominion/Commands.java b/src/main/java/cn/lunadeer/dominion/Commands.java
index cf5f1cc..196db4b 100644
--- a/src/main/java/cn/lunadeer/dominion/Commands.java
+++ b/src/main/java/cn/lunadeer/dominion/Commands.java
@@ -134,6 +134,9 @@ public class Commands implements TabExecutor {
case "reload_cache":
Operator.reloadCache(sender, args);
break;
+ case "reload_config":
+ Operator.reloadConfig(sender, args);
+ break;
case "export_mca":
Operator.exportMca(sender, args);
break;
@@ -167,6 +170,7 @@ public class Commands implements TabExecutor {
"rename",
"give",
"reload_cache",
+ "reload_config",
"export_mca"
);
}
diff --git a/src/main/java/cn/lunadeer/dominion/Dominion.java b/src/main/java/cn/lunadeer/dominion/Dominion.java
index 3d0fc3b..9e1f2a2 100644
--- a/src/main/java/cn/lunadeer/dominion/Dominion.java
+++ b/src/main/java/cn/lunadeer/dominion/Dominion.java
@@ -28,6 +28,7 @@ public final class Dominion extends JavaPlugin {
dbConnection = Database.createConnection();
Database.migrate();
scheduler = new Scheduler(this);
+ AutoClean.run();
Cache.instance = new Cache();
Bukkit.getPluginManager().registerEvents(new PlayerEvents(), this);
@@ -48,10 +49,6 @@ public final class Dominion extends JavaPlugin {
XLogger.info(" |_____/ \\___/|_| |_| |_|_|_| |_|_|\\___/|_| |_|");
XLogger.info(" ");
- scheduler.async.runDelayed(this, scheduledTask -> {
- AutoClean.run();
- }, 30, TimeUnit.SECONDS);
-
scheduler.async.runDelayed(this, scheduledTask -> {
BlueMapConnect.render();
}, 40, TimeUnit.SECONDS);
diff --git a/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java b/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java
index 2adeafc..11265b2 100644
--- a/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java
+++ b/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java
@@ -88,6 +88,10 @@ public class DominionOperate {
Notification.error(sender, "用法: /dominion auto_create <领地名称>");
return;
}
+ if (Dominion.config.getAutoCreateRadius() < 0) {
+ Notification.error(sender, "自动创建领地功能已关闭");
+ return;
+ }
autoPoints(player);
createDominion(sender, args);
}
@@ -107,6 +111,10 @@ public class DominionOperate {
Notification.error(sender, "用法: /dominion auto_create_sub <子领地名称> [父领地名称]");
return;
}
+ if (Dominion.config.getAutoCreateRadius() < 0) {
+ Notification.error(sender, "自动创建领地功能已关闭");
+ return;
+ }
autoPoints(player);
createSubDominion(sender, args);
}
diff --git a/src/main/java/cn/lunadeer/dominion/commands/Operator.java b/src/main/java/cn/lunadeer/dominion/commands/Operator.java
index 0232bae..3a6f0b1 100644
--- a/src/main/java/cn/lunadeer/dominion/commands/Operator.java
+++ b/src/main/java/cn/lunadeer/dominion/commands/Operator.java
@@ -103,6 +103,15 @@ public class Operator {
});
}
+ public static void reloadConfig(CommandSender sender, String[] args) {
+ if (notOpOrConsole(sender)) return;
+ Dominion.scheduler.async.runNow(Dominion.instance, ScheduledTask -> {
+ Notification.info(sender, "正在重新加载配置文件...");
+ Dominion.config.reload();
+ Notification.info(sender, "配置文件已重新加载");
+ });
+ }
+
private static int convertWorld2Mca(int world) {
return world < 0 ? world / 512 - 1 : world / 512;
}
diff --git a/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java b/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java
index dfb8a7d..9aa250c 100644
--- a/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java
+++ b/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java
@@ -1,5 +1,6 @@
package cn.lunadeer.dominion.controllers;
+import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.PlayerDTO;
@@ -69,15 +70,20 @@ public class DominionController {
Notification.error(owner, "禁止跨世界操作");
return null;
}
- int x_length = Math.abs((int) (loc1.getX() - loc2.getX()));
- int y_length = Math.abs((int) (loc1.getY() - loc2.getY()));
- int z_length = Math.abs((int) (loc1.getZ() - loc2.getZ()));
- if (x_length < 4 || y_length < 4 || z_length < 4) {
- Notification.error(owner, "领地的任意一边长度不得小于4");
+ // 检查世界是否可以创建
+ if (Dominion.config.getWorldBlackList().contains(owner.getWorld().getName())) {
+ Notification.error(owner, "禁止在世界 " + owner.getWorld().getName() + " 创建领地");
return null;
}
- if (x_length > Dominion.config.getMaxX() || y_length > Dominion.config.getMaxY() || z_length > Dominion.config.getMaxZ()) {
- Notification.error(owner, "领地尺寸不能超过 " + Dominion.config.getMaxX() + " x " + Dominion.config.getMaxY() + " x " + Dominion.config.getMaxZ());
+ // 检查领地数量是否达到上限
+ if (Cache.instance.getPlayerDominionCount(owner) >= Dominion.config.getLimitAmount() && Dominion.config.getLimitAmount() > 0) {
+ Notification.error(owner, "你的领地数量已达上限,当前上限为 " + Dominion.config.getLimitAmount());
+ return null;
+ }
+ // 检查领地大小是否合法
+ if (sizeNotValid(owner,
+ loc1.getBlockX(), loc1.getBlockY(), loc1.getBlockZ(),
+ loc2.getBlockX(), loc2.getBlockY(), loc2.getBlockZ())) {
return null;
}
DominionDTO dominion = new DominionDTO(owner.getUniqueId(), name, owner.getWorld().getName(),
@@ -108,6 +114,10 @@ public class DominionController {
Notification.error(owner, "禁止跨世界操作");
return null;
}
+ // 检查深度是否达到上限
+ if (depthNotValid(owner, parent_dominion)) {
+ return null;
+ }
// 检查是否超出父领地范围
if (!isContained(dominion, parent_dominion)) {
Notification.error(owner, "超出父领地 " + parent_dominion_name + " 范围");
@@ -199,11 +209,7 @@ public class DominionController {
Notification.error(operator, "无效的方向");
return null;
}
- int x_length = x2 - x1;
- int y_length = y2 - y1;
- int z_length = z2 - z1;
- if (x_length > Dominion.config.getMaxX() || y_length > Dominion.config.getMaxY() || z_length > Dominion.config.getMaxZ()) {
- Notification.error(operator, "领地尺寸不能超过 " + Dominion.config.getMaxX() + " x " + Dominion.config.getMaxY() + " x " + Dominion.config.getMaxZ());
+ if (sizeNotValid(operator, x1, y1, z1, x2, y2, z2)) {
return null;
}
// 校验是否超出父领地范围
@@ -303,6 +309,9 @@ public class DominionController {
Notification.error(operator, "缩小后的领地无效");
return null;
}
+ if (sizeNotValid(operator, x1, y1, z1, x2, y2, z2)) {
+ return null;
+ }
// 获取所有的子领地
List sub_dominions = DominionDTO.selectByParentId(dominion.getWorld(), dominion.getId());
for (DominionDTO sub_dominion : sub_dominions) {
@@ -517,12 +526,18 @@ public class DominionController {
* 判断 sub 是否完全被 parent 包裹
*/
private static boolean isContained(DominionDTO sub, DominionDTO parent) {
+ if (parent.getId() == -1) {
+ return true;
+ }
return sub.getX1() >= parent.getX1() && sub.getX2() <= parent.getX2() &&
sub.getY1() >= parent.getY1() && sub.getY2() <= parent.getY2() &&
sub.getZ1() >= parent.getZ1() && sub.getZ2() <= parent.getZ2();
}
private static boolean isContained(Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2, DominionDTO parent) {
+ if (parent.getId() == -1) {
+ return true;
+ }
return x1 >= parent.getX1() && x2 <= parent.getX2() &&
y1 >= parent.getY1() && y2 <= parent.getY2() &&
z1 >= parent.getZ1() && z2 <= parent.getZ2();
@@ -543,4 +558,74 @@ public class DominionController {
sub_dominions.addAll(sub_sub_dominions);
return sub_dominions;
}
+
+ private static boolean sizeNotValid(Player operator, int x1, int y1, int z1, int x2, int y2, int z2) {
+ // 如果 1 > 2 则交换
+ if (x1 > x2) {
+ int temp = x1;
+ x1 = x2;
+ x2 = temp;
+ }
+ if (y1 > y2) {
+ int temp = y1;
+ y1 = y2;
+ y2 = temp;
+ }
+ if (z1 > z2) {
+ int temp = z1;
+ z1 = z2;
+ z2 = temp;
+ }
+ int x_length = x2 - x1;
+ int y_length = y2 - y1;
+ int z_length = z2 - z1;
+ if (x_length < 4 || y_length < 4 || z_length < 4) {
+ Notification.error(operator, "领地的任意一边长度不得小于4");
+ return true;
+ }
+ if (x_length > Dominion.config.getLimitSizeX() && Dominion.config.getLimitSizeX() > 0) {
+ Notification.error(operator, "领地X方向长度不能超过 " + Dominion.config.getLimitSizeX());
+ return true;
+ }
+ if (y_length > Dominion.config.getLimitSizeY() && Dominion.config.getLimitSizeY() > 0) {
+ Notification.error(operator, "领地Y方向高度不能超过 " + Dominion.config.getLimitSizeY());
+ return true;
+ }
+ if (z_length > Dominion.config.getLimitSizeZ() && Dominion.config.getLimitSizeZ() > 0) {
+ Notification.error(operator, "领地Z方向长度不能超过 " + Dominion.config.getLimitSizeZ());
+ return true;
+ }
+ if (y2 > Dominion.config.getLimitMaxY() && Dominion.config.getLimitMaxY() > 0) {
+ Notification.error(operator, "领地Y坐标不能超过 " + Dominion.config.getLimitMaxY());
+ return true;
+ }
+ if (y1 < Dominion.config.getLimitMinY() && Dominion.config.getLimitMinY() > 0) {
+ Notification.error(operator, "领地Y坐标不能低于 " + Dominion.config.getLimitMinY());
+ return true;
+ }
+ return false;
+ }
+
+ private static boolean depthNotValid(Player operator, DominionDTO parent_dom) {
+ if (Dominion.config.getLimitDepth() < 0) {
+ return false;
+ }
+ if (parent_dom.getId() != -1 && Dominion.config.getLimitDepth() == 0) {
+ Notification.error(operator, "不允许创建子领地");
+ return true;
+ }
+ if (parent_dom.getId() == -1) {
+ return false;
+ }
+ int level = 0;
+ while (parent_dom.getParentDomId() != -1) {
+ parent_dom = Cache.instance.getDominion(parent_dom.getParentDomId());
+ level++;
+ }
+ if (level >= Dominion.config.getLimitDepth()) {
+ Notification.error(operator, "子领地嵌套深度不能超过 " + Dominion.config.getLimitDepth());
+ return true;
+ }
+ return false;
+ }
}
diff --git a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java
index ac8267b..c9976da 100644
--- a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java
+++ b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java
@@ -15,6 +15,10 @@ public class DominionDTO {
private static List query(String sql) {
List dominions = new ArrayList<>();
try (ResultSet rs = Database.query(sql)) {
+ if (sql.contains("UPDATE") || sql.contains("DELETE") || sql.contains("INSERT")) {
+ // 如果是更新操作,重新加载缓存
+ Cache.instance.loadDominions();
+ }
if (rs == null) return dominions;
while (rs.next()) {
Integer id = rs.getInt("id");
@@ -78,10 +82,6 @@ public class DominionDTO {
);
dominions.add(dominion);
}
- if (sql.contains("UPDATE") || sql.contains("DELETE") || sql.contains("INSERT")) {
- // 如果是更新操作,重新加载缓存
- Cache.instance.loadDominions();
- }
} catch (SQLException e) {
XLogger.err("Database query failed: " + e.getMessage());
XLogger.err("SQL: " + sql);
diff --git a/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java
index 868fc96..0bc7e44 100644
--- a/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java
+++ b/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java
@@ -572,6 +572,10 @@ public class PlayerPrivilegeDTO {
private static List query(String sql) {
List players = new ArrayList<>();
try (ResultSet rs = Database.query(sql)) {
+ if (sql.contains("UPDATE") || sql.contains("DELETE") || sql.contains("INSERT")) {
+ // 如果是更新操作,重新加载缓存
+ Cache.instance.loadPlayerPrivileges();
+ }
if (rs == null) return players;
while (rs.next()) {
PlayerPrivilegeDTO player = new PlayerPrivilegeDTO(
@@ -618,10 +622,6 @@ public class PlayerPrivilegeDTO {
);
players.add(player);
}
- if (sql.contains("UPDATE") || sql.contains("DELETE") || sql.contains("INSERT")) {
- // 如果是更新操作,重新加载缓存
- Cache.instance.loadPlayerPrivileges();
- }
} catch (Exception e) {
XLogger.err("Database query failed: " + e.getMessage());
XLogger.err("SQL: " + sql);
diff --git a/src/main/java/cn/lunadeer/dominion/tuis/Apis.java b/src/main/java/cn/lunadeer/dominion/tuis/Apis.java
index 59a6beb..3d49120 100644
--- a/src/main/java/cn/lunadeer/dominion/tuis/Apis.java
+++ b/src/main/java/cn/lunadeer/dominion/tuis/Apis.java
@@ -74,7 +74,7 @@ public class Apis {
Player player = playerOnly(sender);
if (player == null) return;
int page = getPage(args);
- ListView view = ListView.create(5, "/dominion help");
+ ListView view = ListView.create(10, "/dominion help");
view.title("领地插件命令帮助 <>表示必填参数 []表示可选参数")
.add(Line.create().append("打开交互菜单").append(Button.create("/dominion menu", "/dominion menu")))
.add(Line.create().append("查看帮助").append(Button.create("/dominion help [页码]", "/dominion help 1")))
diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java b/src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java
index ecb24f1..605589f 100644
--- a/src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java
+++ b/src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java
@@ -4,6 +4,7 @@ import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.utils.Notification;
import cn.lunadeer.dominion.utils.STUI.Button;
import cn.lunadeer.dominion.utils.STUI.Line;
+import cn.lunadeer.dominion.utils.STUI.ListView;
import cn.lunadeer.dominion.utils.STUI.View;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -31,15 +32,15 @@ public class DominionManage {
Line privilege_list = Line.create()
.append(Button.create("玩家权限", "/dominion privilege_list " + dominion.getName()))
.append("管理玩家特权");
- View view = View.create();
+ ListView view = ListView.create(10, "/dominion manage " + dominion.getName());
view.title("领地 " + dominion.getName() + " 管理界面")
.navigator(Line.create()
.append(Button.create("主菜单", "/dominion menu"))
.append(Button.create("我的领地", "/dominion list"))
.append(dominion.getName()))
- .addLine(size_info)
- .addLine(flag_info)
- .addLine(privilege_list)
- .showOn(player);
+ .add(size_info)
+ .add(flag_info)
+ .add(privilege_list)
+ .showOn(player, 1);
}
}
diff --git a/src/main/java/cn/lunadeer/dominion/tuis/Menu.java b/src/main/java/cn/lunadeer/dominion/tuis/Menu.java
index 500eede..e397cfc 100644
--- a/src/main/java/cn/lunadeer/dominion/tuis/Menu.java
+++ b/src/main/java/cn/lunadeer/dominion/tuis/Menu.java
@@ -1,9 +1,6 @@
package cn.lunadeer.dominion.tuis;
-import cn.lunadeer.dominion.utils.STUI.Button;
-import cn.lunadeer.dominion.utils.STUI.Line;
-import cn.lunadeer.dominion.utils.STUI.View;
-import cn.lunadeer.dominion.utils.STUI.ViewStyles;
+import cn.lunadeer.dominion.utils.STUI.*;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickEvent;
import org.bukkit.command.CommandSender;
@@ -28,15 +25,15 @@ public class Menu {
Line reload = Line.create()
.append(Button.create("重载缓存", "/dominion reload_cache"))
.append("手动刷新缓存可解决一些玩家操作无效问题,不建议频繁操作");
- View view = View.create();
+ ListView view = ListView.create(10, "/dominion");
view.title("Dominion 领地系统")
.navigator(Line.create().append("主菜单"))
- .addLine(list)
- .addLine(help)
- .addLine(link);
+ .add(list)
+ .add(help)
+ .add(link);
if (player.isOp()) {
- view.addLine(reload);
+ view.add(reload);
}
- view.showOn(player);
+ view.showOn(player, 1);
}
}
diff --git a/src/main/java/cn/lunadeer/dominion/tuis/SelectPlayer.java b/src/main/java/cn/lunadeer/dominion/tuis/SelectPlayer.java
index 15d5636..3d8951c 100644
--- a/src/main/java/cn/lunadeer/dominion/tuis/SelectPlayer.java
+++ b/src/main/java/cn/lunadeer/dominion/tuis/SelectPlayer.java
@@ -26,7 +26,8 @@ public class SelectPlayer {
}
String dominion_name = args[1];
ListView view = ListView.create(10, "/dominion select_player_create_privilege " + dominion_name);
- view.title("选择玩家以创建特权").subtitle("只能选择已经登录过的玩家");
+ Line sub = Line.create().append("只能选择已经登录过的玩家").append(Button.create("返回", "/dominion privilege_list " + dominion_name));
+ view.title("选择玩家以创建特权").subtitle(sub);
List players = PlayerController.allPlayers();
for (PlayerDTO p : players) {
if (p.getUuid() == player.getUniqueId()) {
diff --git a/src/main/java/cn/lunadeer/dominion/utils/ConfigManager.java b/src/main/java/cn/lunadeer/dominion/utils/ConfigManager.java
index 8b8fbb4..80b7c44 100644
--- a/src/main/java/cn/lunadeer/dominion/utils/ConfigManager.java
+++ b/src/main/java/cn/lunadeer/dominion/utils/ConfigManager.java
@@ -3,6 +3,8 @@ package cn.lunadeer.dominion.utils;
import cn.lunadeer.dominion.Dominion;
import org.bukkit.configuration.file.FileConfiguration;
+import java.util.List;
+
public class ConfigManager {
public ConfigManager(Dominion plugin) {
_plugin = plugin;
@@ -21,12 +23,36 @@ public class ConfigManager {
_db_user = _file.getString("Database.User", "postgres");
_db_pass = _file.getString("Database.Pass", "postgres");
_auto_create_radius = _file.getInt("AutoCreateRadius", 10);
- _max_x = _file.getInt("MaxX", 128);
- _max_y = _file.getInt("MaxY", 64);
- _max_z = _file.getInt("MaxZ", 128);
+ if (_auto_create_radius == 0) {
+ XLogger.err("AutoCreateRadius 不能等于 0,已重置为 10");
+ setAutoCreateRadius(10);
+ }
+ _limit_size_x = _file.getInt("Limit.SizeX", 128);
+ if (_limit_size_x <= 4) {
+ XLogger.err("Limit.SizeX 尺寸不能小于 4,已重置为 128");
+ setLimitSizeX(128);
+ }
+ _limit_size_y = _file.getInt("Limit.SizeY", 64);
+ if (_limit_size_y <= 4) {
+ XLogger.err("Limit.SizeY 尺寸不能小于 4,已重置为 64");
+ setLimitSizeY(64);
+ }
+ _limit_size_z = _file.getInt("Limit.SizeZ", 128);
+ if (_limit_size_z <= 4) {
+ XLogger.err("Limit.SizeZ 尺寸不能小于 4,已重置为 128");
+ setLimitSizeZ(128);
+ }
_blue_map = _file.getBoolean("BlueMap", true);
- _auto_clean_enable = _file.getBoolean("AutoClean.Enable", false);
- _auto_clean_after_days = _file.getInt("AutoClean.AfterDays", 180);
+ _auto_clean_after_days = _file.getInt("AutoCleanAfterDays", 180);
+ if (_auto_clean_after_days == 0) {
+ XLogger.err("AutoCleanAfterDays 不能等于 0,已重置为 180");
+ setAutoCleanAfterDays(180);
+ }
+ _limit_min_y = _file.getInt("Limit.MinY", -64);
+ _limit_max_y = _file.getInt("Limit.MaxY", 320);
+ _limit_amount = _file.getInt("Limit.Amount", 10);
+ _limit_depth = _file.getInt("Limit.Depth", 10);
+ _world_black_list = _file.getStringList("WorldBlackList");
}
public Boolean isDebug() {
@@ -70,33 +96,33 @@ public class ConfigManager {
return _db_pass;
}
- public Integer getMaxX() {
- return _max_x;
+ public Integer getLimitSizeX() {
+ return _limit_size_x;
}
- public void setMaxX(Integer max_x) {
- _max_x = max_x;
- _file.set("MaxX", max_x);
+ public void setLimitSizeX(Integer max_x) {
+ _limit_size_x = max_x;
+ _file.set("Limit.SizeX", max_x);
_plugin.saveConfig();
}
- public Integer getMaxY() {
- return _max_y;
+ public Integer getLimitSizeY() {
+ return _limit_size_y;
}
- public void setMaxY(Integer max_y) {
- _max_y = max_y;
- _file.set("MaxY", max_y);
+ public void setLimitSizeY(Integer max_y) {
+ _limit_size_y = max_y;
+ _file.set("Limit.SizeY", max_y);
_plugin.saveConfig();
}
- public Integer getMaxZ() {
- return _max_z;
+ public Integer getLimitSizeZ() {
+ return _limit_size_z;
}
- public void setMaxZ(Integer max_z) {
- _max_z = max_z;
- _file.set("MaxZ", max_z);
+ public void setLimitSizeZ(Integer max_z) {
+ _limit_size_z = max_z;
+ _file.set("Limit.SizeZ", max_z);
_plugin.saveConfig();
}
@@ -120,26 +146,60 @@ public class ConfigManager {
_plugin.saveConfig();
}
- public Boolean getAutoCleanEnable() {
- return _auto_clean_enable;
- }
-
- public void setAutoCleanEnable(Boolean auto_clean_enable) {
- _auto_clean_enable = auto_clean_enable;
- _file.set("AutoClean.Enable", auto_clean_enable);
- _plugin.saveConfig();
- }
-
public Integer getAutoCleanAfterDays() {
return _auto_clean_after_days;
}
public void setAutoCleanAfterDays(Integer auto_clean_after_days) {
_auto_clean_after_days = auto_clean_after_days;
- _file.set("AutoClean.AfterDays", auto_clean_after_days);
+ _file.set("AutoCleanAfterDays", auto_clean_after_days);
_plugin.saveConfig();
}
+ public Integer getLimitMinY() {
+ return _limit_min_y;
+ }
+
+ public void setLimitMinY(Integer limit_bottom) {
+ _limit_min_y = limit_bottom;
+ _file.set("Limit.MinY", limit_bottom);
+ _plugin.saveConfig();
+ }
+
+ public Integer getLimitMaxY() {
+ return _limit_max_y;
+ }
+
+ public void setLimitMaxY(Integer limit_top) {
+ _limit_max_y = limit_top;
+ _file.set("Limit.MaxY", limit_top);
+ _plugin.saveConfig();
+ }
+
+ public Integer getLimitAmount() {
+ return _limit_amount;
+ }
+
+ public void setLimitAmount(Integer limit_amount) {
+ _limit_amount = limit_amount;
+ _file.set("Limit.Amount", limit_amount);
+ _plugin.saveConfig();
+ }
+
+ public Integer getLimitDepth() {
+ return _limit_depth;
+ }
+
+ public void setLimitDepth(Integer limit_depth) {
+ _limit_depth = limit_depth;
+ _file.set("Limit.Depth", limit_depth);
+ _plugin.saveConfig();
+ }
+
+ public List getWorldBlackList() {
+ return _world_black_list;
+ }
+
private final Dominion _plugin;
private FileConfiguration _file;
@@ -153,12 +213,15 @@ public class ConfigManager {
private Integer _auto_create_radius;
- private Integer _max_x;
- private Integer _max_y;
- private Integer _max_z;
+ private Integer _limit_size_x;
+ private Integer _limit_size_y;
+ private Integer _limit_size_z;
private Boolean _blue_map;
-
- private Boolean _auto_clean_enable;
private Integer _auto_clean_after_days;
+ private Integer _limit_min_y;
+ private Integer _limit_max_y;
+ private Integer _limit_amount;
+ private Integer _limit_depth;
+ private List _world_black_list;
}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index df8c32a..2540c43 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -5,14 +5,22 @@ Database:
User: dominion
Pass: dominion
+# -1 表示不开启
AutoCreateRadius: 10
-MaxX: 128
-MaxY: 64
-MaxZ: 128
-AutoClean:
- Enabled: false
- AfterDays: 180
+# -1 表示不限制
+Limit:
+ MinY: -64
+ MaxY: 320
+ SizeX: 128
+ SizeY: 64
+ SizeZ: 128
+ Amount: 10
+ Depth: 3 # 子领地深度 0:不允许子领地 -1:不限制
+ WorldBlackList: []
+
+# -1 表示不开启
+AutoCleanAfterDays: 180
BlueMap: true