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