diff --git a/pom.xml b/pom.xml
index fdbe008..7687f4c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
cn.lunadeer
Dominion
- 1.24.5-beta
+ 1.25.0-beta
jar
Dominion
diff --git a/src/main/java/cn/lunadeer/dominion/Cache.java b/src/main/java/cn/lunadeer/dominion/Cache.java
index 0437983..e1cc112 100644
--- a/src/main/java/cn/lunadeer/dominion/Cache.java
+++ b/src/main/java/cn/lunadeer/dominion/Cache.java
@@ -15,6 +15,8 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
+import static cn.lunadeer.dominion.events.Apis.checkFlag;
+
public class Cache {
public Cache() {
@@ -180,16 +182,7 @@ public class Cache {
* @param dominion 领地
*/
private void lightOrNot(Player player, DominionDTO dominion) {
- if (dominion == null) {
- player.setGlowing(false);
- return;
- }
- PlayerPrivilegeDTO privilege = getPlayerPrivilege(player, dominion);
- if (privilege != null) {
- player.setGlowing(privilege.getGlow());
- } else {
- player.setGlowing(dominion.getFlagValue(Flag.GLOW));
- }
+ player.setGlowing(checkFlag(dominion, Flag.GLOW, player, null));
}
private List getDominionsParentAndChildren(Location loc) {
diff --git a/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java b/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java
index 5dd7d75..9dbbcbd 100644
--- a/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java
+++ b/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java
@@ -4,6 +4,7 @@ import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.controllers.DominionController;
import cn.lunadeer.dominion.dtos.DominionDTO;
+import cn.lunadeer.dominion.dtos.Flag;
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
import cn.lunadeer.minecraftpluginutils.Teleport;
import org.bukkit.Location;
@@ -366,12 +367,12 @@ public class DominionOperate {
}
PlayerPrivilegeDTO privilegeDTO = PlayerPrivilegeDTO.select(player.getUniqueId(), dominionDTO.getId());
if (privilegeDTO == null) {
- if (!dominionDTO.getTeleport()) {
+ if (!dominionDTO.getFlagValue(Flag.TELEPORT)) {
Dominion.notification.error(sender, "此领地禁止传送");
return;
}
} else {
- if (!privilegeDTO.getTeleport()) {
+ if (!privilegeDTO.getFlagValue(Flag.TELEPORT)) {
Dominion.notification.error(sender, "你不被允许传送到这个领地");
return;
}
diff --git a/src/main/java/cn/lunadeer/dominion/commands/Helper.java b/src/main/java/cn/lunadeer/dominion/commands/Helper.java
index eb189ce..af50e66 100644
--- a/src/main/java/cn/lunadeer/dominion/commands/Helper.java
+++ b/src/main/java/cn/lunadeer/dominion/commands/Helper.java
@@ -2,6 +2,7 @@ package cn.lunadeer.dominion.commands;
import cn.lunadeer.dominion.controllers.DominionController;
import cn.lunadeer.dominion.dtos.DominionDTO;
+import cn.lunadeer.dominion.dtos.Flag;
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -15,45 +16,13 @@ import static cn.lunadeer.dominion.commands.Apis.playerOnly;
public class Helper {
public static List dominionFlags() {
- return Arrays.asList(
- "anchor", "animal_killing", "anvil",
- "beacon", "bed", "brew", "break", "button",
- "cake", "container", "craft", "creeper_explode", "comparer",
- "door", "dye",
- "egg", "enchant", "ender_man", "ender_pearl",
- "feed", "fire_spread", "flow_in_protection",
- "glow",
- "harvest", "honey", "hook", "hopper",
- "ignite",
- "lever",
- "mob_drop_item", "monster_killing", "move",
- "place", "pressure",
- "riding", "repeater",
- "shear", "shoot", "show_border",
- "teleport", "tnt_explode", "trade", "trample",
- "vehicle_destroy",
- "vehicle_spawn",
- "wither_spawn");
+ List flags = Flag.getDominionFlagsEnabled();
+ return Arrays.asList(flags.stream().map(Flag::getFlagName).toArray(String[]::new));
}
public static List playerPrivileges() {
- return Arrays.asList(
- "admin", "anchor", "animal_killing", "anvil",
- "beacon", "bed", "brew", "break", "button",
- "cake", "container", "craft", "comparer",
- "door", "dye",
- "egg", "enchant", "ender_pearl",
- "feed",
- "glow",
- "harvest", "honey", "hook", "hopper",
- "ignite",
- "lever",
- "monster_killing", "move",
- "place", "pressure", "riding", "repeater",
- "shear", "shoot",
- "teleport", "trade",
- "vehicle_destroy",
- "vehicle_spawn");
+ List flags = Flag.getPrivilegeFlagsEnabled();
+ return Arrays.asList(flags.stream().map(Flag::getFlagName).toArray(String[]::new));
}
/**
diff --git a/src/main/java/cn/lunadeer/dominion/controllers/PrivilegeController.java b/src/main/java/cn/lunadeer/dominion/controllers/PrivilegeController.java
index e270615..c949db4 100644
--- a/src/main/java/cn/lunadeer/dominion/controllers/PrivilegeController.java
+++ b/src/main/java/cn/lunadeer/dominion/controllers/PrivilegeController.java
@@ -2,6 +2,7 @@ package cn.lunadeer.dominion.controllers;
import cn.lunadeer.dominion.Dominion;
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 org.bukkit.entity.Player;
@@ -98,128 +99,19 @@ public class PrivilegeController {
privilege = createPlayerPrivilege(operator, player.getUuid(), dominion);
if (privilege == null) return false;
}
- switch (flag) {
- case "admin":
- if (notOwner(operator, dominion)) {
- Dominion.notification.error(operator, "你不是领地 %s 的拥有者,无法设置其他玩家为管理员", dominionName);
- return false;
- }
- privilege.setAdmin(value);
- break;
- case "anchor":
- privilege.setAnchor(value);
- break;
- case "animal_killing":
- privilege.setAnimalKilling(value);
- break;
- case "anvil":
- privilege.setAnvil(value);
- break;
- case "beacon":
- privilege.setBeacon(value);
- break;
- case "bed":
- privilege.setBed(value);
- break;
- case "brew":
- privilege.setBrew(value);
- break;
- case "break":
- privilege.setBreak(value);
- break;
- case "button":
- privilege.setButton(value);
- break;
- case "cake":
- privilege.setCake(value);
- break;
- case "container":
- privilege.setContainer(value);
- break;
- case "craft":
- privilege.setCraft(value);
- break;
- case "comparer":
- privilege.setComparer(value);
- break;
- case "door":
- privilege.setDoor(value);
- break;
- case "dye":
- privilege.setDye(value);
- break;
- case "egg":
- privilege.setEgg(value);
- break;
- case "enchant":
- privilege.setEnchant(value);
- break;
- case "ender_pearl":
- privilege.setEnderPearl(value);
- break;
- case "feed":
- privilege.setFeed(value);
- break;
- case "glow":
- privilege.setGlow(value);
- break;
- case "harvest":
- privilege.setHarvest(value);
- break;
- case "honey":
- privilege.setHoney(value);
- break;
- case "hook":
- privilege.setHook(value);
- break;
- case "hopper":
- privilege.setHopper(value);
- break;
- case "ignite":
- privilege.setIgnite(value);
- break;
- case "lever":
- privilege.setLever(value);
- break;
- case "monster_killing":
- privilege.setMonsterKilling(value);
- break;
- case "move":
- privilege.setMove(value);
- break;
- case "place":
- privilege.setPlace(value);
- break;
- case "pressure":
- privilege.setPressure(value);
- break;
- case "riding":
- privilege.setRiding(value);
- break;
- case "repeater":
- privilege.setRepeater(value);
- break;
- case "shear":
- privilege.setShear(value);
- break;
- case "shoot":
- privilege.setShoot(value);
- break;
- case "teleport":
- privilege.setTeleport(value);
- break;
- case "trade":
- privilege.setTrade(value);
- break;
- case "vehicle_destroy":
- privilege.setVehicleDestroy(value);
- break;
- case "vehicle_spawn":
- privilege.setVehicleSpawn(value);
- break;
- default:
+ if (flag.equals("admin")) {
+ if (notOwner(operator, dominion)) {
+ Dominion.notification.error(operator, "你不是领地 %s 的拥有者,无法设置其他玩家为管理员", dominionName);
+ return false;
+ }
+ privilege.setAdmin(value);
+ } else {
+ Flag f = Flag.getFlag(flag);
+ if (f == null) {
Dominion.notification.error(operator, "未知的领地权限 %s", flag);
return false;
+ }
+ privilege.setFlagValue(f, value);
}
Dominion.notification.info(operator, "设置玩家在领地 %s 的权限 %s 为 %s", dominionName, flag, value);
return true;
@@ -255,24 +147,7 @@ public class PrivilegeController {
Dominion.notification.error(operator, "你不能给自己设置特权");
return null;
}
- PlayerPrivilegeDTO privilege = new PlayerPrivilegeDTO(player, dom.getId(),
- dom.getAnchor(), dom.getAnimalKilling(), dom.getAnvil(),
- dom.getBeacon(), dom.getBed(), dom.getBrew(), dom.getBreak(), dom.getButton(),
- dom.getCake(), dom.getContainer(), dom.getCraft(), dom.getComparer(),
- dom.getDoor(), dom.getDye(),
- dom.getEgg(), dom.getEnchant(), dom.getEnderPearl(),
- dom.getFeed(),
- dom.getGlow(),
- dom.getHarvest(), dom.getHoney(), dom.getHook(), dom.getHopper(),
- dom.getIgnite(),
- dom.getLever(),
- dom.getMonsterKilling(), dom.getMove(),
- dom.getPlace(), dom.getPressure(),
- dom.getRiding(), dom.getRepeater(),
- dom.getShear(), dom.getShoot(),
- dom.getTeleport(), dom.getTrade(),
- dom.getVehicleDestroy(),
- dom.getVehicleSpawn());
+ PlayerPrivilegeDTO privilege = new PlayerPrivilegeDTO(player, dom);
privilege = PlayerPrivilegeDTO.insert(privilege);
if (privilege == null) {
Dominion.notification.error(operator, "创建玩家特权失败,可能是此玩家已存在特权");
diff --git a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java
index 7249235..d7ab48d 100644
--- a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java
+++ b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java
@@ -32,7 +32,7 @@ public class DominionDTO {
Integer parentDomId = rs.getInt("parent_dom_id");
String tp_location = rs.getString("tp_location");
Map flags = new HashMap<>();
- for (Flag f : Flag.getDominionFlags()) {
+ for (Flag f : Flag.getDominionFlagsEnabled()) {
flags.put(f, rs.getBoolean(f.getFlagName()));
}
@@ -106,8 +106,17 @@ public class DominionDTO {
public static DominionDTO insert(DominionDTO dominion) {
String sql = "INSERT INTO dominion (" +
- "owner, name, world, x1, y1, z1, x2, y2, z2" +
- ") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING *;";
+ "owner, name, world, x1, y1, z1, x2, y2, z2, ";
+ for (Flag f : Flag.getAllDominionFlags()) {
+ sql += f.getFlagName() + ", ";
+ }
+ sql += "tp_location";
+ sql += ") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ";
+ for (Flag f : Flag.getAllDominionFlags()) {
+ sql += f.getDefaultValue() + ", ";
+ }
+ sql += "'default'";
+ sql += ") RETURNING *;";
List dominions = query(sql,
dominion.getOwner(),
dominion.getName(),
@@ -148,7 +157,7 @@ public class DominionDTO {
"parent_dom_id = " + dominion.getParentDomId() + ", " +
"join_message = ?," +
"leave_message = ?,";
- for (Flag f : Flag.getDominionFlags()) {
+ for (Flag f : Flag.getDominionFlagsEnabled()) {
sql += f.getFlagName() + " = " + dominion.getFlagValue(f) + ",";
}
sql += "tp_location = ?" +
@@ -185,19 +194,7 @@ public class DominionDTO {
this.joinMessage = joinMessage;
this.leaveMessage = leaveMessage;
this.flags.putAll(flags);
- if (Objects.equals(tp_location, "default")) {
- this.tp_location = null;
- } else {
- // 0:0:0
- String[] loc = tp_location.split(":");
- World w = Dominion.instance.getServer().getWorld(world);
- if (loc.length == 3 && w != null) {
- this.tp_location = new Location(w, Integer.parseInt(loc[0]), Integer.parseInt(loc[1]), Integer.parseInt(loc[2]));
- } else {
- Dominion.logger.warn("领地传送点数据异常: %s", tp_location);
- this.tp_location = null;
- }
- }
+ this.tp_location = tp_location;
}
@@ -236,7 +233,7 @@ public class DominionDTO {
private String joinMessage = "欢迎";
private String leaveMessage = "再见";
private final Map flags = new HashMap<>();
- private Location tp_location = null;
+ private String tp_location;
// getters and setters
public Integer getId() {
@@ -364,6 +361,7 @@ public class DominionDTO {
}
public Boolean getFlagValue(Flag flag) {
+ if (!flags.containsKey(flag)) return flag.getDefaultValue();
return flags.get(flag);
}
@@ -383,11 +381,24 @@ public class DominionDTO {
}
public Location getTpLocation() {
- return tp_location;
+ if (Objects.equals(tp_location, "default")) {
+ return null;
+ } else {
+ // 0:0:0
+ String[] loc = tp_location.split(":");
+ World w = Dominion.instance.getServer().getWorld(world);
+ if (loc.length == 3 && w != null) {
+ return new Location(w, Integer.parseInt(loc[0]), Integer.parseInt(loc[1]), Integer.parseInt(loc[2]));
+ } else {
+ Dominion.logger.warn("领地传送点数据异常: %s", tp_location);
+ Dominion.logger.debug("world: %s, loc.length: %d", world, loc.length);
+ return null;
+ }
+ }
}
public DominionDTO setTpLocation(Location loc) {
- this.tp_location = loc;
+ this.tp_location = loc.getBlockX() + ":" + loc.getBlockY() + ":" + loc.getBlockZ();
return update(this);
}
diff --git a/src/main/java/cn/lunadeer/dominion/dtos/Flag.java b/src/main/java/cn/lunadeer/dominion/dtos/Flag.java
index 41cffb0..8b0b5ec 100644
--- a/src/main/java/cn/lunadeer/dominion/dtos/Flag.java
+++ b/src/main/java/cn/lunadeer/dominion/dtos/Flag.java
@@ -11,7 +11,7 @@ public enum Flag {
BEACON("beacon", "信标交互", "是否允许与信标交互", false, false, true),
BED("bed", "床交互", "是否允许使用床睡觉或设置重生点", false, false, true),
BREW("brew", "使用酿造台", "是否可以使用酿造台", false, false, true),
- BREAK_BLOCK("break_block", "破坏方块", "是否可以破坏方块", false, false, true),
+ BREAK_BLOCK("break", "破坏方块", "是否可以破坏方块(包括:一般方块、展示框)", false, false, true),
BUTTON("button", "使用按钮", "是否可以使用各种材质的按钮", false, false, true),
CAKE("cake", "吃蛋糕", "是否可以吃蛋糕", false, false, true),
CONTAINER("container", "一般容器", "包含:箱子/木桶/潜影盒/盔甲架/展示框", false, false, true),
@@ -36,7 +36,8 @@ public enum Flag {
LEVER("lever", "使用拉杆", "是否可以使用拉杆", false, false, true),
MOB_DROP_ITEM("mob_drop_item", "生物战利品掉落", "生物死亡时是否产生凋落物", true, true, true),
MONSTER_KILLING("monster_killing", "对怪物造成伤害", "玩家是否可以对怪物造成伤害", false, false, true),
- PLACE("place", "放置方块", "是否可以放置方块", false, false, true),
+ MOVE("move", "移动", "是否可以移动", true, false, true),
+ PLACE("place", "放置方块", "是否可以放置方块(包括:一般方块、展示框、岩浆、水)", false, false, true),
PRESSURE("pressure", "压力板交互", "是否可以触发各种材质的压力板", false, false, true),
RIDING("riding", "骑乘载具", "是否可以骑乘各种载具", false, false, true),
REPEATER("repeater", "中继器交互", "是否可以与中继器交互", false, false, true),
@@ -99,7 +100,11 @@ public enum Flag {
this.enable = enable;
}
- public static List getDominionFlags() {
+ public static List getAllFlags() {
+ return Arrays.asList(Flag.values());
+ }
+
+ public static List getDominionFlagsEnabled() {
List flags = new ArrayList<>();
for (Flag flag : Flag.values()) {
if (!flag.enable) {
@@ -110,7 +115,12 @@ public enum Flag {
return flags;
}
- public static List getPrivilegeFlags() {
+ public static List getAllDominionFlags() {
+ return new ArrayList<>(Arrays.asList(Flag.values()));
+ }
+
+
+ public static List getPrivilegeFlagsEnabled() {
List flags = new ArrayList<>();
for (Flag flag : Flag.values()) {
if (flag.dominion_only) {
@@ -124,6 +134,17 @@ public enum Flag {
return flags;
}
+ public static List getAllPrivilegeFlags() {
+ List flags = new ArrayList<>();
+ for (Flag flag : Flag.values()) {
+ if (flag.dominion_only) {
+ continue;
+ }
+ flags.add(flag);
+ }
+ return flags;
+ }
+
public static Flag getFlag(String flagName) {
return Arrays.stream(Flag.values()).filter(flag -> flag.getFlagName().equals(flagName)).findFirst().orElse(null);
}
diff --git a/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java
index 2cabf37..7d547e9 100644
--- a/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java
+++ b/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java
@@ -4,51 +4,26 @@ import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.Dominion;
import java.sql.ResultSet;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
public class PlayerPrivilegeDTO {
public static PlayerPrivilegeDTO insert(PlayerPrivilegeDTO player) {
- String sql = "INSERT INTO player_privilege (player_uuid, admin, dom_id, " +
- "anchor, animal_killing, anvil, " +
- "beacon, bed, brew, break, button, " +
- "cake, container, craft, comparer, " +
- "door, dye, " +
- "egg, enchant, ender_pearl, " +
- "feed, " +
- "glow, " +
- "harvest, honey, hook, hopper, " +
- "ignite, " +
- "lever, " +
- "monster_killing, move, " +
- "place, pressure, " +
- "riding, repeater, " +
- "shear, shoot, " +
- "teleport, trade, " +
- "vehicle_destroy, " +
- "vehicle_spawn" +
- ") VALUES (" +
- "'" + player.getPlayerUUID() + "', " + player.getAdmin() + ", " + player.getDomID() + ", " +
- player.getAnchor() + ", " + player.getAnimalKilling() + ", " + player.getAnvil() + ", " +
- player.getBeacon() + ", " + player.getBed() + ", " + player.getBrew() + ", " + player.getBreak() + ", " + player.getButton() + ", " +
- player.getCake() + ", " + player.getContainer() + ", " + player.getCraft() + ", " + player.getComparer() + ", " +
- player.getDoor() + ", " + player.getDye() + ", " +
- player.getEgg() + ", " + player.getEnchant() + ", " + player.getEnderPearl() + ", " +
- player.getFeed() + ", " +
- player.getGlow() + ", " +
- player.getHarvest() + ", " + player.getHoney() + ", " + player.getHook() + ", " + player.getHopper() + ", " +
- player.getIgnite() + ", " +
- player.getLever() + ", " +
- player.getMonsterKilling() + ", " + player.getMove() + ", " +
- player.getPlace() + ", " + player.getPressure() + ", " +
- player.getRiding() + ", " + player.getRepeater() + ", " +
- player.getShear() + ", " + player.getShoot() + ", " +
- player.getTeleport() + ", " + player.getTrade() + ", " +
- player.getVehicleDestroy() + ", " +
- player.getVehicleSpawn() + " " +
- ") RETURNING *;";
+ String sql = "INSERT INTO player_privilege (player_uuid, admin, dom_id, ";
+
+ for (Flag f : Flag.getAllPrivilegeFlags()) {
+ sql += f.getFlagName() + ", ";
+ }
+ sql = sql.substring(0, sql.length() - 2);
+
+ sql += ") VALUES ('" + player.getPlayerUUID() + "', " + player.getAdmin() + ", " + player.getDomID() + ", ";
+
+ for (Flag f : Flag.getAllPrivilegeFlags()) {
+ sql += player.getFlagValue(f) + ", ";
+ }
+ sql = sql.substring(0, sql.length() - 2);
+
+ sql += ") RETURNING *;";
List players = query(sql);
if (players.size() == 0) return null;
return players.get(0);
@@ -85,43 +60,6 @@ public class PlayerPrivilegeDTO {
private final UUID playerUUID;
private Boolean admin;
private final Integer domID;
- private Boolean anchor;
- private Boolean animalKilling;
- private Boolean anvil;
- private Boolean beacon;
- private Boolean bed;
- private Boolean brew;
- private Boolean breakBlock;
- private Boolean button;
- private Boolean cake;
- private Boolean container;
- private Boolean craft;
- private Boolean comparer;
- private Boolean door;
- private Boolean dye;
- private Boolean egg;
- private Boolean enchant;
- private Boolean enderPearl;
- private Boolean feed;
- private Boolean glow;
- private Boolean harvest;
- private Boolean honey;
- private Boolean hook;
- private Boolean hopper;
- private Boolean ignite;
- private Boolean lever;
- private Boolean monsterKilling;
- private Boolean move;
- private Boolean place;
- private Boolean pressure;
- private Boolean riding;
- private Boolean repeater;
- private Boolean shear;
- private Boolean shoot;
- private Boolean teleport;
- private Boolean trade;
- private Boolean vehicleDestroy;
- private Boolean vehicleSpawn;
public Integer getId() {
return id;
@@ -139,336 +77,15 @@ public class PlayerPrivilegeDTO {
return domID;
}
- public Boolean getAnchor() {
- return anchor;
- }
-
- public Boolean getAnimalKilling() {
- return animalKilling;
- }
-
- public Boolean getAnvil() {
- return anvil;
- }
-
- public Boolean getBeacon() {
- return beacon;
- }
-
- public Boolean getBed() {
- return bed;
- }
-
- public Boolean getBrew() {
- return brew;
- }
-
- public Boolean getBreak() {
- return breakBlock;
- }
-
- public Boolean getButton() {
- return button;
- }
-
- public Boolean getCake() {
- return cake;
- }
-
- public Boolean getContainer() {
- return container;
- }
-
- public Boolean getCraft() {
- return craft;
- }
-
- public Boolean getComparer() {
- return comparer;
- }
-
- public Boolean getDoor() {
- return door;
- }
-
- public Boolean getDye() {
- return dye;
- }
-
- public Boolean getEgg() {
- return egg;
- }
-
- public Boolean getEnchant() {
- return enchant;
- }
-
- public Boolean getEnderPearl() {
- return enderPearl;
- }
-
- public Boolean getFeed() {
- return feed;
- }
-
- public Boolean getGlow() {
- return glow;
- }
-
- public Boolean getHarvest() {
- return harvest;
- }
-
- public Boolean getHoney() {
- return honey;
- }
-
- public Boolean getHook() {
- return hook;
- }
-
- public Boolean getHopper() {
- return hopper;
- }
-
- public Boolean getIgnite() {
- return ignite;
- }
-
- public Boolean getLever() {
- return lever;
- }
-
- public Boolean getMonsterKilling() {
- return monsterKilling;
- }
-
- public Boolean getMove() {
- return move;
- }
-
- public Boolean getPlace() {
- return place;
- }
-
- public Boolean getPressure() {
- return pressure;
- }
-
- public Boolean getRiding() {
- return riding;
- }
-
- public Boolean getRepeater() {
- return repeater;
- }
-
- public Boolean getShear() {
- return shear;
- }
-
- public Boolean getShoot() {
- return shoot;
- }
-
- public Boolean getTeleport() {
- return teleport;
- }
-
- public Boolean getTrade() {
- return trade;
- }
-
- public Boolean getVehicleDestroy() {
- return vehicleDestroy;
- }
-
- public Boolean getVehicleSpawn() {
- return vehicleSpawn;
- }
-
- public PlayerPrivilegeDTO setAnchor(Boolean anchor) {
- this.anchor = anchor;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setAnimalKilling(Boolean animalKilling) {
- this.animalKilling = animalKilling;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setAnvil(Boolean anvil) {
- this.anvil = anvil;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setBeacon(Boolean beacon) {
- this.beacon = beacon;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setBed(Boolean bed) {
- this.bed = bed;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setBrew(Boolean brew) {
- this.brew = brew;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setBreak(Boolean breakBlock) {
- this.breakBlock = breakBlock;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setButton(Boolean button) {
- this.button = button;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setCake(Boolean cake) {
- this.cake = cake;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setContainer(Boolean container) {
- this.container = container;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setCraft(Boolean craft) {
- this.craft = craft;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setComparer(Boolean comparer) {
- this.comparer = comparer;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setDoor(Boolean door) {
- this.door = door;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setDye(Boolean dye) {
- this.dye = dye;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setEgg(Boolean egg) {
- this.egg = egg;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setEnchant(Boolean enchant) {
- this.enchant = enchant;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setEnderPearl(Boolean enderPearl) {
- this.enderPearl = enderPearl;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setFeed(Boolean feed) {
- this.feed = feed;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setGlow(Boolean glow) {
- this.glow = glow;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setHoney(Boolean honey) {
- this.honey = honey;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setHook(Boolean hook) {
- this.hook = hook;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setHopper(Boolean hopper) {
- this.hopper = hopper;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setIgnite(Boolean ignite) {
- this.ignite = ignite;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setLever(Boolean lever) {
- this.lever = lever;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setMonsterKilling(Boolean monsterKilling) {
- this.monsterKilling = monsterKilling;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setMove(Boolean move) {
- this.move = move;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setPlace(Boolean place) {
- this.place = place;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setPressure(Boolean pressure) {
- this.pressure = pressure;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setRiding(Boolean riding) {
- this.riding = riding;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setRepeater(Boolean repeater) {
- this.repeater = repeater;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setShear(Boolean shear) {
- this.shear = shear;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setShoot(Boolean shoot) {
- this.shoot = shoot;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setTeleport(Boolean teleport) {
- this.teleport = teleport;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setTrade(Boolean trade) {
- this.trade = trade;
- return update(this);
- }
-
- public PlayerPrivilegeDTO setVehicleDestroy(Boolean vehicleDestroy) {
- this.vehicleDestroy = vehicleDestroy;
- return update(this);
- }
+ private final Map flags = new HashMap<>();
- public PlayerPrivilegeDTO setVehicleSpawn(Boolean vehicleSpawn) {
- this.vehicleSpawn = vehicleSpawn;
- return update(this);
+ public Boolean getFlagValue(Flag flag) {
+ if (!flags.containsKey(flag)) return flag.getDefaultValue();
+ return flags.get(flag);
}
- public PlayerPrivilegeDTO setHarvest(Boolean harvest) {
- this.harvest = harvest;
+ public PlayerPrivilegeDTO setFlagValue(Flag flag, Boolean value) {
+ flags.put(flag, value);
return update(this);
}
@@ -477,104 +94,22 @@ public class PlayerPrivilegeDTO {
return update(this);
}
- private PlayerPrivilegeDTO(Integer id, UUID playerUUID, Boolean admin, Integer domID,
- Boolean anchor, Boolean animalKilling, Boolean anvil,
- Boolean beacon, Boolean bed, Boolean brew, Boolean breakBlock, Boolean button,
- Boolean cake, Boolean container, Boolean craft, Boolean comparer,
- Boolean door, Boolean dye,
- Boolean egg, Boolean enchant, Boolean enderPearl,
- Boolean feed,
- Boolean glow,
- Boolean harvest, Boolean honey, Boolean hook, Boolean hopper,
- Boolean ignite,
- Boolean lever,
- Boolean monsterKilling, Boolean move,
- Boolean place, Boolean pressure,
- Boolean riding, Boolean repeater,
- Boolean shear, Boolean shoot,
- Boolean teleport, Boolean trade,
- Boolean vehicleDestroy,
- Boolean vehicleSpawn) {
+ private PlayerPrivilegeDTO(Integer id, UUID playerUUID, Boolean admin, Integer domID, Map flags) {
this.id = id;
this.playerUUID = playerUUID;
this.admin = admin;
this.domID = domID;
- this.anchor = anchor;
- this.animalKilling = animalKilling;
- this.anvil = anvil;
- this.beacon = beacon;
- this.bed = bed;
- this.brew = brew;
- this.breakBlock = breakBlock;
- this.button = button;
- this.cake = cake;
- this.container = container;
- this.craft = craft;
- this.comparer = comparer;
- this.door = door;
- this.dye = dye;
- this.egg = egg;
- this.enchant = enchant;
- this.enderPearl = enderPearl;
- this.feed = feed;
- this.glow = glow;
- this.harvest = harvest;
- this.honey = honey;
- this.hook = hook;
- this.hopper = hopper;
- this.ignite = ignite;
- this.lever = lever;
- this.monsterKilling = monsterKilling;
- this.move = move;
- this.place = place;
- this.pressure = pressure;
- this.riding = riding;
- this.repeater = repeater;
- this.shear = shear;
- this.shoot = shoot;
- this.teleport = teleport;
- this.trade = trade;
- this.vehicleDestroy = vehicleDestroy;
- this.vehicleSpawn = vehicleSpawn;
+ this.flags.putAll(flags);
}
- public PlayerPrivilegeDTO(UUID playerUUID, Integer domID,
- Boolean anchor, Boolean animalKilling, Boolean anvil,
- Boolean beacon, Boolean bed, Boolean brew, Boolean breakBlock, Boolean button,
- Boolean cake, Boolean container, Boolean craft, Boolean comparer,
- Boolean door, Boolean dye,
- Boolean egg, Boolean enchant, Boolean enderPearl,
- Boolean feed,
- Boolean glow,
- Boolean harvest, Boolean honey, Boolean hook, Boolean hopper,
- Boolean ignite,
- Boolean lever,
- Boolean monsterKilling, Boolean move,
- Boolean place, Boolean pressure,
- Boolean riding, Boolean repeater,
- Boolean shear, Boolean shoot,
- Boolean teleport, Boolean trade,
- Boolean vehicleDestroy,
- Boolean vehicleSpawn
- ) {
- this(null, playerUUID, false, domID,
- anchor, animalKilling, anvil,
- beacon, bed, brew, breakBlock, button,
- cake, container, craft, comparer,
- door, dye,
- egg, enchant, enderPearl,
- feed,
- glow,
- harvest, honey, hook, hopper,
- ignite,
- lever,
- monsterKilling, move,
- place, pressure,
- riding, repeater,
- shear, shoot,
- teleport, trade,
- vehicleDestroy,
- vehicleSpawn);
+ public PlayerPrivilegeDTO(UUID playerUUID, DominionDTO dom) {
+ this.id = null;
+ this.playerUUID = playerUUID;
+ this.admin = false;
+ this.domID = dom.getId();
+ for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
+ this.flags.put(f, dom.getFlagValue(f));
+ }
}
private static List query(String sql, Object... params) {
@@ -586,48 +121,16 @@ public class PlayerPrivilegeDTO {
}
if (rs == null) return players;
while (rs.next()) {
+ Map flags = new HashMap<>();
+ for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
+ flags.put(f, rs.getBoolean(f.getFlagName()));
+ }
PlayerPrivilegeDTO player = new PlayerPrivilegeDTO(
rs.getInt("id"),
UUID.fromString(rs.getString("player_uuid")),
rs.getBoolean("admin"),
rs.getInt("dom_id"),
- rs.getBoolean("anchor"),
- rs.getBoolean("animal_killing"),
- rs.getBoolean("anvil"),
- rs.getBoolean("beacon"),
- rs.getBoolean("bed"),
- rs.getBoolean("brew"),
- rs.getBoolean("break"),
- rs.getBoolean("button"),
- rs.getBoolean("cake"),
- rs.getBoolean("container"),
- rs.getBoolean("craft"),
- rs.getBoolean("comparer"),
- rs.getBoolean("door"),
- rs.getBoolean("dye"),
- rs.getBoolean("egg"),
- rs.getBoolean("enchant"),
- rs.getBoolean("ender_pearl"),
- rs.getBoolean("feed"),
- rs.getBoolean("glow"),
- rs.getBoolean("harvest"),
- rs.getBoolean("honey"),
- rs.getBoolean("hook"),
- rs.getBoolean("hopper"),
- rs.getBoolean("ignite"),
- rs.getBoolean("lever"),
- rs.getBoolean("monster_killing"),
- rs.getBoolean("move"),
- rs.getBoolean("place"),
- rs.getBoolean("pressure"),
- rs.getBoolean("riding"),
- rs.getBoolean("repeater"),
- rs.getBoolean("shear"),
- rs.getBoolean("shoot"),
- rs.getBoolean("teleport"),
- rs.getBoolean("trade"),
- rs.getBoolean("vehicle_destroy"),
- rs.getBoolean("vehicle_spawn")
+ flags
);
players.add(player);
}
@@ -640,45 +143,12 @@ public class PlayerPrivilegeDTO {
private static PlayerPrivilegeDTO update(PlayerPrivilegeDTO player) {
String sql = "UPDATE player_privilege SET " +
"admin = " + player.getAdmin() + ", " +
- "dom_id = " + player.getDomID() + ", " +
- "anchor = " + player.getAnchor() + ", " +
- "animal_killing = " + player.getAnimalKilling() + ", " +
- "anvil = " + player.getAnvil() + ", " +
- "beacon = " + player.getBeacon() + ", " +
- "bed = " + player.getBed() + ", " +
- "brew = " + player.getBrew() + ", " +
- "break = " + player.getBreak() + ", " +
- "button = " + player.getButton() + ", " +
- "cake = " + player.getCake() + ", " +
- "container = " + player.getContainer() + ", " +
- "craft = " + player.getCraft() + ", " +
- "comparer = " + player.getComparer() + ", " +
- "door = " + player.getDoor() + ", " +
- "dye = " + player.getDye() + ", " +
- "egg = " + player.getEgg() + ", " +
- "enchant = " + player.getEnchant() + ", " +
- "ender_pearl = " + player.getEnderPearl() + ", " +
- "feed = " + player.getFeed() + ", " +
- "glow = " + player.getGlow() + ", " +
- "harvest = " + player.getHarvest() + ", " +
- "honey = " + player.getHoney() + ", " +
- "hook = " + player.getHook() + ", " +
- "hopper = " + player.getHopper() + ", " +
- "ignite = " + player.getIgnite() + ", " +
- "lever = " + player.getLever() + ", " +
- "monster_killing = " + player.getMonsterKilling() + ", " +
- "move = " + player.getMove() + ", " +
- "place = " + player.getPlace() + ", " +
- "pressure = " + player.getPressure() + ", " +
- "riding = " + player.getRiding() + ", " +
- "repeater = " + player.getRepeater() + ", " +
- "shear = " + player.getShear() + ", " +
- "shoot = " + player.getShoot() + ", " +
- "teleport = " + player.getTeleport() + ", " +
- "trade = " + player.getTrade() + ", " +
- "vehicle_destroy = " + player.getVehicleDestroy() + ", " +
- "vehicle_spawn = " + player.getVehicleSpawn() + " " +
- "WHERE id = " + player.getId() + " " +
+ "dom_id = " + player.getDomID() + ", ";
+ for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
+ sql += f.getFlagName() + " = " + player.getFlagValue(f) + ", ";
+ }
+ sql = sql.substring(0, sql.length() - 2);
+ sql += "WHERE id = " + player.getId() + " " +
"RETURNING *;";
List players = query(sql);
if (players.size() == 0) return null;
diff --git a/src/main/java/cn/lunadeer/dominion/events/Apis.java b/src/main/java/cn/lunadeer/dominion/events/Apis.java
index 983cda3..ffc287c 100644
--- a/src/main/java/cn/lunadeer/dominion/events/Apis.java
+++ b/src/main/java/cn/lunadeer/dominion/events/Apis.java
@@ -1,14 +1,19 @@
package cn.lunadeer.dominion.events;
import cn.lunadeer.dominion.Cache;
+import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.dtos.DominionDTO;
+import cn.lunadeer.dominion.dtos.Flag;
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.TextComponent;
import org.bukkit.entity.Player;
+import org.bukkit.event.Cancellable;
import org.bukkit.inventory.Inventory;
public class Apis {
- public static boolean hasPermission(Player player, DominionDTO dom) {
- if (player.isOp()) {
+ public static boolean canByPass(Player player, DominionDTO dom, PlayerPrivilegeDTO prev) {
+ if (player.isOp() && Dominion.config.getLimitOpBypass()) {
return true;
}
if (dom == null) {
@@ -17,9 +22,8 @@ public class Apis {
if (dom.getOwner().equals(player.getUniqueId())) {
return true;
}
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- return privilege.getAdmin();
+ if (prev != null) {
+ return prev.getAdmin();
}
return false;
}
@@ -31,4 +35,29 @@ public class Apis {
return Cache.instance.getDominion(inv.getLocation());
}
}
+
+ public static boolean checkFlag(DominionDTO dom, Flag flag, Player player, Cancellable event) {
+ if (dom == null) {
+ return true;
+ }
+ PlayerPrivilegeDTO prev = Cache.instance.getPlayerPrivilege(player, dom);
+ if (canByPass(player, dom, prev)) {
+ return true;
+ }
+ if (prev != null) {
+ if (prev.getFlagValue(flag)) {
+ return true;
+ }
+ } else {
+ if (dom.getFlagValue(flag)) {
+ return true;
+ }
+ }
+ TextComponent msg = Component.text(String.format("你没有 %s 权限", flag.getDisplayName())).hoverEvent(Component.text(flag.getDescription()));
+ Dominion.notification.error(player, msg);
+ if (event != null) {
+ event.setCancelled(true);
+ }
+ return false;
+ }
}
diff --git a/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java b/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java
index 09727f2..2430cf6 100644
--- a/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java
+++ b/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java
@@ -3,12 +3,14 @@ package cn.lunadeer.dominion.events;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.Dominion;
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 io.papermc.paper.event.entity.EntityDyeEvent;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
+import org.bukkit.block.data.BlockData;
import org.bukkit.entity.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -26,8 +28,10 @@ import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.*;
import org.bukkit.event.vehicle.VehicleDestroyEvent;
import org.bukkit.inventory.Inventory;
+import org.bukkit.material.Button;
import org.spigotmc.event.entity.EntityMountEvent;
+import static cn.lunadeer.dominion.events.Apis.checkFlag;
import static cn.lunadeer.dominion.events.Apis.getInvDominion;
public class PlayerEvents implements Listener {
@@ -45,34 +49,11 @@ public class PlayerEvents implements Listener {
return;
}
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(bukkitPlayer, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
- if (privilege != null) {
- if (!privilege.getAnchor()) {
- Dominion.notification.error(bukkitPlayer, "你没有锚点重生权限");
- return;
+ if (checkFlag(dom, Flag.ANCHOR, bukkitPlayer, null)) {
+ if (bukkitPlayer.getBedSpawnLocation() != null) {
+ event.setRespawnLocation(bukkitPlayer.getBedSpawnLocation());
} else {
- if (bukkitPlayer.getBedSpawnLocation() != null) {
- event.setRespawnLocation(bukkitPlayer.getBedSpawnLocation());
- } else {
- event.setRespawnLocation(bukkitPlayer.getWorld().getSpawnLocation());
- }
- }
- } else {
- if (dom.getAnchor()) {
- Dominion.notification.error(bukkitPlayer, "你没有锚点重生权限");
- return;
- } else {
- if (bukkitPlayer.getBedSpawnLocation() != null) {
- event.setRespawnLocation(bukkitPlayer.getBedSpawnLocation());
- } else {
- event.setRespawnLocation(bukkitPlayer.getWorld().getSpawnLocation());
- }
+ event.setRespawnLocation(bukkitPlayer.getWorld().getSpawnLocation());
}
}
}
@@ -88,24 +69,7 @@ public class PlayerEvents implements Listener {
}
Player bukkitPlayer = (Player) event.getDamager();
DominionDTO dom = Cache.instance.getDominion(event.getEntity().getLocation());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(bukkitPlayer, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
- if (privilege != null) {
- if (privilege.getAnimalKilling()) {
- return;
- }
- } else {
- if (dom.getAnimalKilling()) {
- return;
- }
- }
- Dominion.notification.error(bukkitPlayer, "你没有动物击杀权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.ANIMAL_KILLING, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // anvil
@@ -118,24 +82,7 @@ public class PlayerEvents implements Listener {
}
Player bukkitPlayer = (Player) event.getPlayer();
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(bukkitPlayer, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
- if (privilege != null) {
- if (privilege.getAnvil()) {
- return;
- }
- } else {
- if (dom.getAnvil()) {
- return;
- }
- }
- Dominion.notification.error(bukkitPlayer, "你没有使用铁砧的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.ANVIL, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // beacon
@@ -148,48 +95,14 @@ public class PlayerEvents implements Listener {
}
Player bukkitPlayer = (Player) event.getPlayer();
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(bukkitPlayer, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
- if (privilege != null) {
- if (privilege.getBeacon()) {
- return;
- }
- } else {
- if (dom.getBeacon()) {
- return;
- }
- }
- Dominion.notification.error(bukkitPlayer, "你没有使用信标的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.BEACON, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // bed
public void onBedUse(PlayerBedEnterEvent event) {
Player bukkitPlayer = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(event.getBed().getLocation());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(bukkitPlayer, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
- if (privilege != null) {
- if (privilege.getBed()) {
- return;
- }
- } else {
- if (dom.getBed()) {
- return;
- }
- }
- Dominion.notification.error(bukkitPlayer, "你没有使用床的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.BED, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // brew
@@ -202,24 +115,7 @@ public class PlayerEvents implements Listener {
}
Player bukkitPlayer = (Player) event.getPlayer();
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(bukkitPlayer, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
- if (privilege != null) {
- if (privilege.getBrew()) {
- return;
- }
- } else {
- if (dom.getBrew()) {
- return;
- }
- }
- Dominion.notification.error(bukkitPlayer, "你没有使用酿造台的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.BREW, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // break
@@ -251,24 +147,7 @@ public class PlayerEvents implements Listener {
public static boolean onBreak(Player player, Location location) {
DominionDTO dom = Cache.instance.getDominion(location);
- if (dom == null) {
- return true;
- }
- if (Apis.hasPermission(player, dom)) {
- return true;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getBreak()) {
- return true;
- }
- } else {
- if (dom.getBreak()) {
- return true;
- }
- }
- Dominion.notification.error(player, "你没有破坏方块的权限");
- return false;
+ return checkFlag(dom, Flag.BREAK_BLOCK, player, null);
}
@EventHandler(priority = EventPriority.HIGHEST) // button
@@ -294,24 +173,7 @@ public class PlayerEvents implements Listener {
return;
}
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(player, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getButton()) {
- return;
- }
- } else {
- if (dom.getButton()) {
- return;
- }
- }
- Dominion.notification.error(player, "你没有使用按钮的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.BUTTON, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // cake
@@ -326,24 +188,7 @@ public class PlayerEvents implements Listener {
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(player, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getCake()) {
- return;
- }
- } else {
- if (dom.getCake()) {
- return;
- }
- }
- Dominion.notification.error(player, "你没有吃蛋糕权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.CAKE, player, event);
}
// 检查是否有容器权限
@@ -354,24 +199,7 @@ public class PlayerEvents implements Listener {
} else {
dom = Cache.instance.getDominion(loc);
}
- if (dom == null) {
- return true;
- }
- if (Apis.hasPermission(player, dom)) {
- return true;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getContainer()) {
- return true;
- }
- } else {
- if (dom.getContainer()) {
- return true;
- }
- }
- Dominion.notification.error(player, "你没有使用容器/盔甲架/展示框的权限");
- return false;
+ return checkFlag(dom, Flag.CONTAINER, player, null);
}
@EventHandler(priority = EventPriority.HIGHEST) // container
@@ -440,24 +268,7 @@ public class PlayerEvents implements Listener {
}
Player bukkitPlayer = (Player) event.getPlayer();
DominionDTO dom = getInvDominion(bukkitPlayer, inv);
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(bukkitPlayer, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
- if (privilege != null) {
- if (privilege.getCraft()) {
- return;
- }
- } else {
- if (dom.getCraft()) {
- return;
- }
- }
- Dominion.notification.error(bukkitPlayer, "你没有使用工作台的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.CRAFT, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // comparer
@@ -471,24 +282,7 @@ public class PlayerEvents implements Listener {
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(event.getClickedBlock().getLocation());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(player, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getComparer()) {
- return;
- }
- } else {
- if (dom.getComparer()) {
- return;
- }
- }
- Dominion.notification.error(player, "你没有使用红石比较器的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.COMPARER, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // door
@@ -536,24 +330,7 @@ public class PlayerEvents implements Listener {
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(event.getClickedBlock().getLocation());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(player, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getDoor()) {
- return;
- }
- } else {
- if (dom.getDoor()) {
- return;
- }
- }
- Dominion.notification.error(player, "你没有使用门的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.DOOR, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // dye
@@ -563,24 +340,7 @@ public class PlayerEvents implements Listener {
return;
}
DominionDTO dom = Cache.instance.getDominion(event.getEntity().getLocation());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(player, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getDye()) {
- return;
- }
- } else {
- if (dom.getDye()) {
- return;
- }
- }
- Dominion.notification.error(player, "你没有染色的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.DYE, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // egg
@@ -593,24 +353,7 @@ public class PlayerEvents implements Listener {
}
Player player = (Player) event.getEntity().getShooter();
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(player, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getEgg()) {
- return;
- }
- } else {
- if (dom.getEgg()) {
- return;
- }
- }
- Dominion.notification.error(player, "你没有扔鸡蛋的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.EGG, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // enchant
@@ -623,24 +366,7 @@ public class PlayerEvents implements Listener {
}
Player bukkitPlayer = (Player) event.getPlayer();
DominionDTO dom = getInvDominion(bukkitPlayer, event.getInventory());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(bukkitPlayer, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
- if (privilege != null) {
- if (privilege.getEnchant()) {
- return;
- }
- } else {
- if (dom.getEnchant()) {
- return;
- }
- }
- Dominion.notification.error(bukkitPlayer, "你没有使用附魔台的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.ENCHANT, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // ender_pearl
@@ -653,24 +379,7 @@ public class PlayerEvents implements Listener {
}
Player player = (Player) event.getEntity().getShooter();
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(player, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getEnderPearl()) {
- return;
- }
- } else {
- if (dom.getEnderPearl()) {
- return;
- }
- }
- Dominion.notification.error(player, "你没有使用末影珍珠的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.ENDER_PEARL, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // feed
@@ -680,24 +389,7 @@ public class PlayerEvents implements Listener {
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(event.getRightClicked().getLocation());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(player, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getFeed()) {
- return;
- }
- } else {
- if (dom.getFeed()) {
- return;
- }
- }
- Dominion.notification.error(player, "你没有喂养动物的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.FEED, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // harvest
@@ -723,24 +415,7 @@ public class PlayerEvents implements Listener {
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(player, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getHarvest()) {
- return;
- }
- } else {
- if (dom.getHarvest()) {
- return;
- }
- }
- Dominion.notification.error(player, "你没有收获的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.HARVEST, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // honey
@@ -755,24 +430,7 @@ public class PlayerEvents implements Listener {
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(player, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getHoney()) {
- return;
- }
- } else {
- if (dom.getHoney()) {
- return;
- }
- }
- Dominion.notification.error(player, "你没有与蜜蜂交互的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.HONEY, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // hook
@@ -783,24 +441,7 @@ public class PlayerEvents implements Listener {
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(caught.getLocation());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(player, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getHook()) {
- return;
- }
- } else {
- if (dom.getHook()) {
- return;
- }
- }
- Dominion.notification.error(player, "你没有使用钓钩的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.HOOK, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // hopper
@@ -819,24 +460,7 @@ public class PlayerEvents implements Listener {
}
Player bukkitPlayer = (Player) event.getPlayer();
DominionDTO dom = getInvDominion(bukkitPlayer, event.getInventory());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(bukkitPlayer, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
- if (privilege != null) {
- if (privilege.getHopper()) {
- return;
- }
- } else {
- if (dom.getHopper()) {
- return;
- }
- }
- Dominion.notification.error(bukkitPlayer, "你没有使用漏斗/熔炉/发射器等特殊容器的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.HOPPER, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // ignite
@@ -846,24 +470,7 @@ public class PlayerEvents implements Listener {
return;
}
DominionDTO dom = Cache.instance.getDominion(event.getBlock().getLocation());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(player, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getIgnite()) {
- return;
- }
- } else {
- if (dom.getIgnite()) {
- return;
- }
- }
- Dominion.notification.error(player, "你没有点火的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.IGNITE, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // lever
@@ -878,24 +485,7 @@ public class PlayerEvents implements Listener {
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(player, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getLever()) {
- return;
- }
- } else {
- if (dom.getLever()) {
- return;
- }
- }
- Dominion.notification.error(player, "你没有使用拉杆的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.LEVER, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // monster_killing
@@ -910,48 +500,14 @@ public class PlayerEvents implements Listener {
}
Player bukkitPlayer = (Player) event.getDamager();
DominionDTO dom = Cache.instance.getDominion(entity.getLocation());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(bukkitPlayer, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
- if (privilege != null) {
- if (privilege.getMonsterKilling()) {
- return;
- }
- } else {
- if (dom.getMonsterKilling()) {
- return;
- }
- }
- Dominion.notification.error(bukkitPlayer, "你没有击杀怪物的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.MONSTER_KILLING, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // move
public void onPlayerMove(PlayerMoveEvent event) {
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(player, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getMove()) {
- return;
- }
- } else {
- if (dom.getMove()) {
- return;
- }
- }
- Dominion.notification.error(player, "你没有移动的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.MOVE, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // place
@@ -990,24 +546,7 @@ public class PlayerEvents implements Listener {
public static boolean onPlace(Player player, Location location) {
DominionDTO dom = Cache.instance.getDominion(location);
- if (dom == null) {
- return true;
- }
- if (Apis.hasPermission(player, dom)) {
- return true;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getPlace()) {
- return true;
- }
- } else {
- if (dom.getPlace()) {
- return true;
- }
- }
- Dominion.notification.error(player, "你没有放置方块的权限");
- return false;
+ return checkFlag(dom, Flag.PLACE, player, null);
}
@EventHandler(priority = EventPriority.HIGHEST) // pressure
@@ -1036,24 +575,7 @@ public class PlayerEvents implements Listener {
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(player, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getPressure()) {
- return;
- }
- } else {
- if (dom.getPressure()) {
- return;
- }
- }
- Dominion.notification.error(player, "你没有使用压力板的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.PRESSURE, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // riding
@@ -1063,24 +585,7 @@ public class PlayerEvents implements Listener {
}
Player player = (Player) event.getEntity();
DominionDTO dom = Cache.instance.getDominion(event.getMount().getLocation());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(player, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getRiding()) {
- return;
- }
- } else {
- if (dom.getRiding()) {
- return;
- }
- }
- Dominion.notification.error(player, "你没有骑乘交通工具的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.RIDING, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // repeater
@@ -1095,48 +600,14 @@ public class PlayerEvents implements Listener {
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(player, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getRepeater()) {
- return;
- }
- } else {
- if (dom.getRepeater()) {
- return;
- }
- }
- Dominion.notification.error(player, "你没有使用红石中继器的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.REPEATER, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // shear
public void onShear(PlayerShearEntityEvent event) {
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(event.getEntity().getLocation());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(player, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getShear()) {
- return;
- }
- } else {
- if (dom.getShear()) {
- return;
- }
- }
- Dominion.notification.error(player, "你没有剪羊毛的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.SHEAR, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // shoot
@@ -1151,24 +622,7 @@ public class PlayerEvents implements Listener {
}
Player player = (Player) event.getEntity().getShooter();
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(player, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getShoot()) {
- return;
- }
- } else {
- if (dom.getShoot()) {
- return;
- }
- }
- Dominion.notification.error(player, "你没有发射弓箭、三叉戟或雪球的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.SHOOT, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // trade
@@ -1181,24 +635,7 @@ public class PlayerEvents implements Listener {
}
Player bukkitPlayer = (Player) event.getPlayer();
DominionDTO dom = getInvDominion(bukkitPlayer, event.getInventory());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(bukkitPlayer, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
- if (privilege != null) {
- if (privilege.getTrade()) {
- return;
- }
- } else {
- if (dom.getTrade()) {
- return;
- }
- }
- Dominion.notification.error(bukkitPlayer, "你没有交易的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.TRADE, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // vehicle_destroy
@@ -1208,24 +645,7 @@ public class PlayerEvents implements Listener {
}
Player player = (Player) event.getAttacker();
DominionDTO dom = Cache.instance.getDominion(event.getVehicle().getLocation());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(player, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getVehicleDestroy()) {
- return;
- }
- } else {
- if (dom.getVehicleDestroy()) {
- return;
- }
- }
- Dominion.notification.error(player, "你没有破坏交通工具的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.VEHICLE_DESTROY, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // vehicle_spawn
@@ -1239,23 +659,6 @@ public class PlayerEvents implements Listener {
return;
}
DominionDTO dom = Cache.instance.getDominion(entity.getLocation());
- if (dom == null) {
- return;
- }
- if (Apis.hasPermission(player, dom)) {
- return;
- }
- PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
- if (privilege != null) {
- if (privilege.getVehicleSpawn()) {
- return;
- }
- } else {
- if (dom.getVehicleSpawn()) {
- return;
- }
- }
- Dominion.notification.error(player, "你没有放置交通工具的权限");
- event.setCancelled(true);
+ checkFlag(dom, Flag.VEHICLE_SPAWN, player, event);
}
}
diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java b/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java
index 959bd45..5813a09 100644
--- a/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java
+++ b/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java
@@ -40,7 +40,7 @@ public class DominionFlagInfo {
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
.append("权限列表"));
- for (Flag flag : Flag.getDominionFlags()) {
+ for (Flag flag : Flag.getDominionFlagsEnabled()) {
view.add(createOption(flag, dominion.getFlagValue(flag), dominion.getName(), page));
}
view.showOn(player, page);
diff --git a/src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java b/src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java
index bb0196b..c0361ac 100644
--- a/src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java
+++ b/src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java
@@ -2,11 +2,13 @@ package cn.lunadeer.dominion.tuis;
import cn.lunadeer.dominion.Dominion;
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.stui.ListView;
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;
@@ -62,339 +64,21 @@ public class PrivilegeInfo {
.append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " admin true " + dominion.getName() + " " + page).build())
.append("管理员"));
}
- if (privilege.getAnchor()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " anchor false " + dominion.getName() + " " + page).build())
- .append("重生锚"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " anchor true " + dominion.getName() + " " + page).build())
- .append("重生锚"));
- }
- if (privilege.getAnimalKilling()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " animal_killing false " + dominion.getName() + " " + page).build())
- .append("动物伤害"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " animal_killing true " + dominion.getName() + " " + page).build())
- .append("动物伤害"));
- }
- if (privilege.getAnvil()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " anvil false " + dominion.getName() + " " + page).build())
- .append("使用铁砧"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " anvil true " + dominion.getName() + " " + page).build())
- .append("使用铁砧"));
- }
- if (privilege.getBeacon()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " beacon false " + dominion.getName() + " " + page).build())
- .append("信标交互"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " beacon true " + dominion.getName() + " " + page).build())
- .append("信标交互"));
- }
- if (privilege.getBed()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " bed false " + dominion.getName() + " " + page).build())
- .append("床交互"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " bed true " + dominion.getName() + " " + page).build())
- .append("床交互"));
- }
- if (privilege.getBrew()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " brew false " + dominion.getName() + " " + page).build())
- .append("使用酿造台"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " brew true " + dominion.getName() + " " + page).build())
- .append("使用酿造台"));
- }
- if (privilege.getBreak()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " break false " + dominion.getName() + " " + page).build())
- .append("破坏方块"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " break true " + dominion.getName() + " " + page).build())
- .append("破坏方块"));
- }
- if (privilege.getButton()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " button false " + dominion.getName() + " " + page).build())
- .append("使用按钮"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " button true " + dominion.getName() + " " + page).build())
- .append("使用按钮"));
- }
- if (privilege.getCake()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " cake false " + dominion.getName() + " " + page).build())
- .append("使用蛋糕"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " cake true " + dominion.getName() + " " + page).build())
- .append("使用蛋糕"));
- }
- if (privilege.getContainer()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " container false " + dominion.getName() + " " + page).build())
- .append("箱子/木桶/潜影盒/盔甲架/展示框"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " container true " + dominion.getName() + " " + page).build())
- .append("箱子/木桶/潜影盒/盔甲架/展示框"));
- }
- if (privilege.getCraft()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " craft false " + dominion.getName() + " " + page).build())
- .append("使用工作台"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " craft true " + dominion.getName() + " " + page).build())
- .append("使用工作台"));
- }
- if (privilege.getComparer()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " comparer false " + dominion.getName() + " " + page).build())
- .append("比较器交互"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " comparer true " + dominion.getName() + " " + page).build())
- .append("比较器交互"));
- }
- if (privilege.getDoor()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " door false " + dominion.getName() + " " + page).build())
- .append("门交互"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " door true " + dominion.getName() + " " + page).build())
- .append("门交互"));
- }
- if (privilege.getDye()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " dye false " + dominion.getName() + " " + page).build())
- .append("染色"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " dye true " + dominion.getName() + " " + page).build())
- .append("染色"));
- }
- if (privilege.getEgg()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " egg false " + dominion.getName() + " " + page).build())
- .append("投掷鸡蛋"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " egg true " + dominion.getName() + " " + page).build())
- .append("投掷鸡蛋"));
- }
- if (privilege.getEnchant()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " enchant false " + dominion.getName() + " " + page).build())
- .append("使用附魔台"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " enchant true " + dominion.getName() + " " + page).build())
- .append("使用附魔台"));
- }
- if (privilege.getEnderPearl()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " ender_pearl false " + dominion.getName() + " " + page).build())
- .append("投掷末影珍珠"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " ender_pearl true " + dominion.getName() + " " + page).build())
- .append("投掷末影珍珠"));
- }
- if (privilege.getFeed()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " feed false " + dominion.getName() + " " + page).build())
- .append("喂食"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " feed true " + dominion.getName() + " " + page).build())
- .append("喂食"));
- }
- if (privilege.getGlow()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " glow false " + dominion.getName() + " " + page).build())
- .append("发光"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " glow true " + dominion.getName() + " " + page).build())
- .append("发光"));
- }
- if (privilege.getHarvest()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " harvest false " + dominion.getName() + " " + page).build())
- .append("收获"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " harvest true " + dominion.getName() + " " + page).build())
- .append("收获"));
- }
- if (privilege.getHoney()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " honey false " + dominion.getName() + " " + page).build())
- .append("蜂巢交互"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " honey true " + dominion.getName() + " " + page).build())
- .append("蜂巢交互"));
- }
- if (privilege.getHook()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " hook false " + dominion.getName() + " " + page).build())
- .append("使用钓钩"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " hook true " + dominion.getName() + " " + page).build())
- .append("使用钓钩"));
- }
- if (privilege.getHopper()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " hopper false " + dominion.getName() + " " + page).build())
- .append("漏斗/熔炉/发射器等特殊容器"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " hopper true " + dominion.getName() + " " + page).build())
- .append("漏斗/熔炉/发射器等特殊容器"));
- }
- if (privilege.getIgnite()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " ignite false " + dominion.getName() + " " + page).build())
- .append("点燃"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " ignite true " + dominion.getName() + " " + page).build())
- .append("点燃"));
- }
- if (privilege.getLever()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " lever false " + dominion.getName() + " " + page).build())
- .append("使用拉杆"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " lever true " + dominion.getName() + " " + page).build())
- .append("使用拉杆"));
- }
- if (privilege.getMonsterKilling()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " monster_killing false " + dominion.getName() + " " + page).build())
- .append("怪物伤害"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " monster_killing true " + dominion.getName() + " " + page).build())
- .append("怪物伤害"));
- }
- if (privilege.getMove()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " move false " + dominion.getName() + " " + page).build())
- .append("玩家移动"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " move true " + dominion.getName() + " " + page).build())
- .append("玩家移动"));
- }
- if (privilege.getPlace()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " place false " + dominion.getName() + " " + page).build())
- .append("放置方块"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " place true " + dominion.getName() + " " + page).build())
- .append("放置方块"));
- }
- if (privilege.getPressure()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " pressure false " + dominion.getName() + " " + page).build())
- .append("压力板交互"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " pressure true " + dominion.getName() + " " + page).build())
- .append("压力板交互"));
- }
- if (privilege.getRiding()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " riding false " + dominion.getName() + " " + page).build())
- .append("骑乘载具"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " riding true " + dominion.getName() + " " + page).build())
- .append("骑乘载具"));
- }
- if (privilege.getRepeater()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " repeater false " + dominion.getName() + " " + page).build())
- .append("中继器交互"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " repeater true " + dominion.getName() + " " + page).build())
- .append("中继器交互"));
- }
- if (privilege.getShear()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " shear false " + dominion.getName() + " " + page).build())
- .append("剪羊毛"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " shear true " + dominion.getName() + " " + page).build())
- .append("剪羊毛"));
- }
- if (privilege.getShoot()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " shoot false " + dominion.getName() + " " + page).build())
- .append("射箭/雪球/三叉戟"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " shoot true " + dominion.getName() + " " + page).build())
- .append("射箭/雪球/三叉戟"));
- }
- if (privilege.getTeleport()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " teleport false " + dominion.getName() + " " + page).build())
- .append("领地传送"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " teleport true " + dominion.getName() + " " + page).build())
- .append("领地传送"));
- }
- if (privilege.getTrade()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " trade false " + dominion.getName() + " " + page).build())
- .append("交易"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " trade true " + dominion.getName() + " " + page).build())
- .append("交易"));
- }
- if (privilege.getVehicleDestroy()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " vehicle_destroy false " + dominion.getName() + " " + page).build())
- .append("破坏载具"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " vehicle_destroy true " + dominion.getName() + " " + page).build())
- .append("破坏载具"));
- }
- if (privilege.getVehicleSpawn()) {
- view.add(Line.create()
- .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " vehicle_spawn false " + dominion.getName() + " " + page).build())
- .append("放置载具"));
- } else {
- view.add(Line.create()
- .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " vehicle_spawn true " + dominion.getName() + " " + page).build())
- .append("放置载具"));
+ for (Flag flag : Flag.getPrivilegeFlagsEnabled()) {
+ view.add(createOption(flag, privilege.getFlagValue(flag), playerName, dominion.getName(), page));
}
view.showOn(player, page);
}
+
+ private static Line createOption(Flag flag, boolean value, String player_name, String dominion_name, int page) {
+ if (value) {
+ return Line.create()
+ .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + player_name + " " + flag.getFlagName() + " false " + dominion_name + " " + page).build())
+ .append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription())));
+ } else {
+ return Line.create()
+ .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + player_name + " " + flag.getFlagName() + " true " + dominion_name + " " + page).build())
+ .append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription())));
+ }
+ }
}