diff --git a/src/main/java/cn/lunadeer/dominion/Cache.java b/src/main/java/cn/lunadeer/dominion/Cache.java index a98fe35..0437983 100644 --- a/src/main/java/cn/lunadeer/dominion/Cache.java +++ b/src/main/java/cn/lunadeer/dominion/Cache.java @@ -1,6 +1,7 @@ package cn.lunadeer.dominion; import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.dominion.dtos.Flag; import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; import cn.lunadeer.minecraftpluginutils.ParticleRender; import net.kyori.adventure.text.Component; @@ -165,7 +166,7 @@ public class Cache { } player_current_dominion_id.put(player.getUniqueId(), dominion.getId()); // show border - if (dominion.getShowBorder()) { + if (dominion.getFlagValue(Flag.SHOW_BORDER)) { ParticleRender.showBoxFace(Dominion.instance, player, dominion.getLocation1(), dominion.getLocation2()); @@ -187,7 +188,7 @@ public class Cache { if (privilege != null) { player.setGlowing(privilege.getGlow()); } else { - player.setGlowing(dominion.getGlow()); + player.setGlowing(dominion.getFlagValue(Flag.GLOW)); } } diff --git a/src/main/java/cn/lunadeer/dominion/controllers/FlagsController.java b/src/main/java/cn/lunadeer/dominion/controllers/FlagsController.java index ea4fbaf..097913e 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/FlagsController.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/FlagsController.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 org.bukkit.entity.Player; import static cn.lunadeer.dominion.controllers.Apis.noAuthToChangeFlags; @@ -38,102 +39,11 @@ public class FlagsController { return null; } if (noAuthToChangeFlags(operator, dominion)) return null; - switch (flag) { - case "anchor": - return dominion.setAnchor(value); - case "animal_killing": - return dominion.setAnimalKilling(value); - case "anvil": - return dominion.setAnvil(value); - case "beacon": - return dominion.setBeacon(value); - case "bed": - return dominion.setBed(value); - case "brew": - return dominion.setBrew(value); - case "break": - return dominion.setBreak(value); - case "button": - return dominion.setButton(value); - case "cake": - return dominion.setCake(value); - case "container": - return dominion.setContainer(value); - case "craft": - return dominion.setCraft(value); - case "creeper_explode": - return dominion.setCreeperExplode(value); - case "comparer": - return dominion.setComparer(value); - case "door": - return dominion.setDoor(value); - case "dye": - return dominion.setDye(value); - case "egg": - return dominion.setEgg(value); - case "enchant": - return dominion.setEnchant(value); - case "ender_man": - return dominion.setEnderMan(value); - case "ender_pearl": - return dominion.setEnderPearl(value); - case "feed": - return dominion.setFeed(value); - case "fire_spread": - return dominion.setFireSpread(value); - case "flow_in_protection": - return dominion.setFlowInProtection(value); - case "glow": - return dominion.setGlow(value); - case "harvest": - return dominion.setHarvest(value); - case "honey": - return dominion.setHoney(value); - case "hook": - return dominion.setHook(value); - case "hopper": - return dominion.setHopper(value); - case "ignite": - return dominion.setIgnite(value); - case "lever": - return dominion.setLever(value); - case "mob_drop_item": - return dominion.setMobDropItem(value); - case "monster_killing": - return dominion.setMonsterKilling(value); - case "move": - return dominion.setMove(value); - case "place": - return dominion.setPlace(value); - case "pressure": - return dominion.setPressure(value); - case "riding": - return dominion.setRiding(value); - case "repeater": - return dominion.setRepeater(value); - case "shear": - return dominion.setShear(value); - case "shoot": - return dominion.setShoot(value); - case "show_border": - return dominion.setShowBorder(value); - case "teleport": - return dominion.setTeleport(value); - case "tnt_explode": - return dominion.setTntExplode(value); - case "trade": - return dominion.setTrade(value); - case "trample": - return dominion.setTrample(value); - case "vehicle_destroy": - return dominion.setVehicleDestroy(value); - case "vehicle_spawn": - return dominion.setVehicleSpawn(value); - case "wither_spawn": - return dominion.setWitherSpawn(value); - default: - Dominion.notification.error(operator, "未知的领地权限 %s", flag); - return null; + Flag f = Flag.getFlag(flag); + if (f == null) { + Dominion.notification.error(operator, "未知的领地权限 %s", flag); + return null; } + return dominion.setFlagValue(f, value); } } diff --git a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java index dc74535..7249235 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java @@ -7,13 +7,9 @@ import org.bukkit.World; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.UUID; +import java.util.*; public class DominionDTO { - private static List query(String sql, Object... args) { List dominions = new ArrayList<>(); try (ResultSet rs = Dominion.database.query(sql, args)) { @@ -35,55 +31,15 @@ public class DominionDTO { Integer z2 = rs.getInt("z2"); Integer parentDomId = rs.getInt("parent_dom_id"); String tp_location = rs.getString("tp_location"); + Map flags = new HashMap<>(); + for (Flag f : Flag.getDominionFlags()) { + flags.put(f, rs.getBoolean(f.getFlagName())); + } + DominionDTO dominion = new DominionDTO(id, owner, name, world, x1, y1, z1, x2, y2, z2, parentDomId, rs.getString("join_message"), rs.getString("leave_message"), - 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("creeper_explode"), - rs.getBoolean("comparer"), - rs.getBoolean("door"), - rs.getBoolean("dye"), - rs.getBoolean("egg"), - rs.getBoolean("enchant"), - rs.getBoolean("ender_man"), - rs.getBoolean("ender_pearl"), - rs.getBoolean("feed"), - rs.getBoolean("fire_spread"), - rs.getBoolean("flow_in_protection"), - rs.getBoolean("glow"), - rs.getBoolean("harvest"), - rs.getBoolean("honey"), - rs.getBoolean("hook"), - rs.getBoolean("hopper"), - rs.getBoolean("ignite"), - rs.getBoolean("lever"), - rs.getBoolean("mob_drop_item"), - 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("show_border"), - rs.getBoolean("teleport"), - rs.getBoolean("tnt_explode"), - rs.getBoolean("trade"), - rs.getBoolean("trample"), - rs.getBoolean("vehicle_destroy"), - rs.getBoolean("vehicle_spawn"), - rs.getBoolean("wither_spawn"), + flags, tp_location ); dominions.add(dominion); @@ -191,54 +147,11 @@ public class DominionDTO { "z2 = " + dominion.getZ2() + ", " + "parent_dom_id = " + dominion.getParentDomId() + ", " + "join_message = ?," + - "leave_message = ?," + - "anchor = " + dominion.getAnchor() + ", " + - "animal_killing = " + dominion.getAnimalKilling() + ", " + - "anvil = " + dominion.getAnvil() + ", " + - "beacon = " + dominion.getBeacon() + ", " + - "bed = " + dominion.getBed() + ", " + - "brew = " + dominion.getBrew() + ", " + - "break = " + dominion.getBreak() + ", " + - "button = " + dominion.getButton() + ", " + - "cake = " + dominion.getCake() + ", " + - "container = " + dominion.getContainer() + ", " + - "craft = " + dominion.getCraft() + ", " + - "creeper_explode = " + dominion.getCreeperExplode() + ", " + // dom only - "comparer = " + dominion.getComparer() + ", " + - "door = " + dominion.getDoor() + ", " + - "dye = " + dominion.getDye() + ", " + - "egg = " + dominion.getEgg() + ", " + - "enchant = " + dominion.getEnchant() + ", " + - "ender_man = " + dominion.getEnderMan() + ", " + // dom only - "ender_pearl = " + dominion.getEnderPearl() + ", " + - "feed = " + dominion.getFeed() + ", " + - "fire_spread = " + dominion.getFireSpread() + ", " + // dom only - "flow_in_protection = " + dominion.getFlowInProtection() + ", " + // dom only - "glow = " + dominion.getGlow() + ", " + - "harvest = " + dominion.getHarvest() + ", " + - "honey = " + dominion.getHoney() + ", " + - "hook = " + dominion.getHook() + ", " + - "hopper = " + dominion.getHopper() + ", " + - "ignite = " + dominion.getIgnite() + ", " + - "lever = " + dominion.getLever() + ", " + - "mob_drop_item = " + dominion.getMobDropItem() + ", " + // dom only - "monster_killing = " + dominion.getMonsterKilling() + ", " + - "move = " + dominion.getMove() + ", " + - "place = " + dominion.getPlace() + ", " + - "pressure = " + dominion.getPressure() + ", " + - "riding = " + dominion.getRiding() + ", " + - "repeater = " + dominion.getRepeater() + ", " + - "shear = " + dominion.getShear() + ", " + - "shoot = " + dominion.getShoot() + ", " + - "show_border = " + dominion.getShowBorder() + ", " + // dom only - "teleport = " + dominion.getTeleport() + ", " + - "tnt_explode = " + dominion.getTntExplode() + ", " + // dom only - "trade = " + dominion.getTrade() + ", " + - "trample = " + dominion.getTrample() + ", " + // dom only - "vehicle_destroy = " + dominion.getVehicleDestroy() + ", " + - "vehicle_spawn = " + dominion.getVehicleSpawn() + ", " + - "wither_spawn = " + dominion.getWitherSpawn() + ", " + // dom only - "tp_location = ?" + + "leave_message = ?,"; + for (Flag f : Flag.getDominionFlags()) { + sql += f.getFlagName() + " = " + dominion.getFlagValue(f) + ","; + } + sql += "tp_location = ?" + " WHERE id = " + dominion.getId() + " RETURNING *;"; List dominions = query(sql, @@ -256,24 +169,7 @@ public class DominionDTO { Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2, Integer parentDomId, String joinMessage, String leaveMessage, - Boolean anchor, Boolean animalKilling, Boolean anvil, - Boolean beacon, Boolean bed, Boolean brew, Boolean breakBlock, Boolean button, - Boolean cake, Boolean container, Boolean craft, Boolean creeperExplode, Boolean comparer, - Boolean door, Boolean dye, - Boolean egg, Boolean enchant, Boolean enderMan, Boolean enderPearl, - Boolean feed, Boolean fireSpread, Boolean flowInProtection, - Boolean glow, - Boolean harvest, Boolean honey, Boolean hook, Boolean hopper, - Boolean ignite, - Boolean lever, - Boolean mobDropItem, Boolean monsterKilling, Boolean move, - Boolean place, Boolean pressure, - Boolean riding, Boolean repeater, - Boolean shear, Boolean shoot, Boolean showBorder, - Boolean teleport, Boolean tntExplode, Boolean trade, Boolean trample, - Boolean vehicleDestroy, - Boolean vehicleSpawn, - Boolean witherSpawn, + Map flags, String tp_location) { this.id = id; this.owner = owner; @@ -288,52 +184,7 @@ public class DominionDTO { this.parentDomId = parentDomId; this.joinMessage = joinMessage; this.leaveMessage = leaveMessage; - 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.creeperExplode = creeperExplode; - this.comparer = comparer; - this.door = door; - this.dye = dye; - this.egg = egg; - this.enchant = enchant; - this.enderMan = enderMan; - this.enderPearl = enderPearl; - this.feed = feed; - this.fireSpread = fireSpread; - this.flowInProtection = flowInProtection; - this.glow = glow; - this.harvest = harvest; - this.honey = honey; - this.hook = hook; - this.hopper = hopper; - this.ignite = ignite; - this.lever = lever; - this.mobDropItem = mobDropItem; - 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.showBorder = showBorder; - this.teleport = teleport; - this.tntExplode = tntExplode; - this.trade = trade; - this.trample = trample; - this.vehicleDestroy = vehicleDestroy; - this.vehicleSpawn = vehicleSpawn; - this.witherSpawn = witherSpawn; + this.flags.putAll(flags); if (Objects.equals(tp_location, "default")) { this.tp_location = null; } else { @@ -384,52 +235,7 @@ public class DominionDTO { private Integer parentDomId = -1; private String joinMessage = "欢迎"; private String leaveMessage = "再见"; - private Boolean anchor = false; - private Boolean animalKilling = false; - private Boolean anvil = false; - private Boolean beacon = false; - private Boolean bed = false; - private Boolean brew = false; - private Boolean breakBlock = false; - private Boolean button = false; - private Boolean cake = false; - private Boolean container = false; - private Boolean craft = false; - private Boolean creeperExplode = false; - private Boolean comparer = false; - private Boolean door = false; - private Boolean dye = false; - private Boolean egg = false; - private Boolean enchant = false; - private Boolean enderMan = false; - private Boolean enderPearl = false; - private Boolean feed = false; - private Boolean fireSpread = false; - private Boolean flowInProtection = false; - private Boolean glow = false; - private Boolean honey = false; - private Boolean hook = false; - private Boolean hopper = false; - private Boolean ignite = false; - private Boolean lever = false; - private Boolean mobDropItem = true; - private Boolean monsterKilling = false; - private Boolean move = true; - private Boolean place = false; - private Boolean pressure = false; - private Boolean riding = false; - private Boolean repeater = false; - private Boolean shear = false; - private Boolean shoot = false; - private Boolean showBorder = true; - private Boolean teleport = false; - private Boolean tntExplode = false; - private Boolean trade = false; - private Boolean trample = false; - private Boolean vehicleDestroy = false; - private Boolean vehicleSpawn = false; - private Boolean witherSpawn = false; - private Boolean harvest = false; + private final Map flags = new HashMap<>(); private Location tp_location = null; // getters and setters @@ -557,417 +363,12 @@ public class DominionDTO { return update(this); } - public Boolean getAnchor() { - return anchor; + public Boolean getFlagValue(Flag flag) { + return flags.get(flag); } - public DominionDTO setAnchor(Boolean anchor) { - this.anchor = anchor; - return update(this); - } - - public Boolean getAnimalKilling() { - return animalKilling; - } - - public DominionDTO setAnimalKilling(Boolean animalKilling) { - this.animalKilling = animalKilling; - return update(this); - } - - public Boolean getAnvil() { - return anvil; - } - - public DominionDTO setAnvil(Boolean anvil) { - this.anvil = anvil; - return update(this); - } - - public Boolean getBeacon() { - return beacon; - } - - public DominionDTO setBeacon(Boolean beacon) { - this.beacon = beacon; - return update(this); - } - - public Boolean getBed() { - return bed; - } - - public DominionDTO setBed(Boolean bed) { - this.bed = bed; - return update(this); - } - - public Boolean getBrew() { - return brew; - } - - public DominionDTO setBrew(Boolean brew) { - this.brew = brew; - return update(this); - } - - public Boolean getBreak() { - return breakBlock; - } - - public DominionDTO setBreak(Boolean breakBlock) { - this.breakBlock = breakBlock; - return update(this); - } - - public Boolean getButton() { - return button; - } - - public DominionDTO setButton(Boolean button) { - this.button = button; - return update(this); - } - - public Boolean getCake() { - return cake; - } - - public DominionDTO setCake(Boolean cake) { - this.cake = cake; - return update(this); - } - - public Boolean getContainer() { - return container; - } - - public DominionDTO setContainer(Boolean container) { - this.container = container; - return update(this); - } - - public Boolean getCraft() { - return craft; - } - - public DominionDTO setCraft(Boolean craft) { - this.craft = craft; - return update(this); - } - - public Boolean getCreeperExplode() { - return creeperExplode; - } - - public DominionDTO setCreeperExplode(Boolean creeperExplode) { - this.creeperExplode = creeperExplode; - return update(this); - } - - public Boolean getComparer() { - return comparer; - } - - public DominionDTO setComparer(Boolean comparer) { - this.comparer = comparer; - return update(this); - } - - public Boolean getDoor() { - return door; - } - - public DominionDTO setDoor(Boolean door) { - this.door = door; - return update(this); - } - - public Boolean getDye() { - return dye; - } - - public DominionDTO setDye(Boolean dye) { - this.dye = dye; - return update(this); - } - - public Boolean getEgg() { - return egg; - } - - public DominionDTO setEgg(Boolean egg) { - this.egg = egg; - return update(this); - } - - public Boolean getEnchant() { - return enchant; - } - - public DominionDTO setEnchant(Boolean enchant) { - this.enchant = enchant; - return update(this); - } - - public Boolean getEnderMan() { - return enderMan; - } - - public DominionDTO setEnderMan(Boolean enderMan) { - this.enderMan = enderMan; - return update(this); - } - - public Boolean getEnderPearl() { - return enderPearl; - } - - public DominionDTO setEnderPearl(Boolean enderPearl) { - this.enderPearl = enderPearl; - return update(this); - } - - public Boolean getFeed() { - return feed; - } - - public DominionDTO setFeed(Boolean feed) { - this.feed = feed; - return update(this); - } - - public Boolean getFireSpread() { - return fireSpread; - } - - public DominionDTO setFireSpread(Boolean fireSpread) { - this.fireSpread = fireSpread; - return update(this); - } - - public Boolean getFlowInProtection() { - return flowInProtection; - } - - public DominionDTO setFlowInProtection(Boolean flowInProtection) { - this.flowInProtection = flowInProtection; - return update(this); - } - - public Boolean getGlow() { - return glow; - } - - public DominionDTO setGlow(Boolean glow) { - this.glow = glow; - return update(this); - } - - public Boolean getHoney() { - return honey; - } - - public DominionDTO setHoney(Boolean honey) { - this.honey = honey; - return update(this); - } - - public Boolean getHook() { - return hook; - } - - public DominionDTO setHook(Boolean hook) { - this.hook = hook; - return update(this); - } - - public Boolean getHopper() { - return hopper; - } - - public DominionDTO setHopper(Boolean hopper) { - this.hopper = hopper; - return update(this); - } - - public Boolean getIgnite() { - return ignite; - } - - public DominionDTO setIgnite(Boolean ignite) { - this.ignite = ignite; - return update(this); - } - - public Boolean getLever() { - return lever; - } - - public DominionDTO setLever(Boolean lever) { - this.lever = lever; - return update(this); - } - - public Boolean getMobDropItem() { - return mobDropItem; - } - - public DominionDTO setMobDropItem(Boolean mobDropItem) { - this.mobDropItem = mobDropItem; - return update(this); - } - - public Boolean getMonsterKilling() { - return monsterKilling; - } - - public DominionDTO setMonsterKilling(Boolean monsterKilling) { - this.monsterKilling = monsterKilling; - return update(this); - } - - public Boolean getMove() { - return move; - } - - public DominionDTO setMove(Boolean move) { - this.move = move; - return update(this); - } - - public Boolean getPlace() { - return place; - } - - public DominionDTO setPlace(Boolean place) { - this.place = place; - return update(this); - } - - public Boolean getPressure() { - return pressure; - } - - public DominionDTO setPressure(Boolean pressure) { - this.pressure = pressure; - return update(this); - } - - public Boolean getRiding() { - return riding; - } - - public DominionDTO setRiding(Boolean riding) { - this.riding = riding; - return update(this); - } - - public Boolean getRepeater() { - return repeater; - } - - public DominionDTO setRepeater(Boolean repeater) { - this.repeater = repeater; - return update(this); - } - - public Boolean getShear() { - return shear; - } - - public DominionDTO setShear(Boolean shear) { - this.shear = shear; - return update(this); - } - - public Boolean getShoot() { - return shoot; - } - - public DominionDTO setShoot(Boolean shoot) { - this.shoot = shoot; - return update(this); - } - - public Boolean getShowBorder() { - return showBorder; - } - - public DominionDTO setShowBorder(Boolean showBorder) { - this.showBorder = showBorder; - return update(this); - } - - public Boolean getTeleport() { - return teleport; - } - - public DominionDTO setTeleport(Boolean teleport) { - this.teleport = teleport; - return update(this); - } - - public Boolean getTntExplode() { - return tntExplode; - } - - public DominionDTO setTntExplode(Boolean tntExplode) { - this.tntExplode = tntExplode; - return update(this); - } - - public Boolean getTrade() { - return trade; - } - - public DominionDTO setTrade(Boolean trade) { - this.trade = trade; - return update(this); - } - - public Boolean getTrample() { - return trample; - } - - public DominionDTO setTrample(Boolean trample) { - this.trample = trample; - return update(this); - } - - public Boolean getVehicleDestroy() { - return vehicleDestroy; - } - - public DominionDTO setVehicleDestroy(Boolean vehicleDestroy) { - this.vehicleDestroy = vehicleDestroy; - return update(this); - } - - public Boolean getVehicleSpawn() { - return vehicleSpawn; - } - - public DominionDTO setVehicleSpawn(Boolean vehicleSpawn) { - this.vehicleSpawn = vehicleSpawn; - return update(this); - } - - public Boolean getWitherSpawn() { - return witherSpawn; - } - - public DominionDTO setWitherSpawn(Boolean witherSpawn) { - this.witherSpawn = witherSpawn; - return update(this); - } - - public Boolean getHarvest() { - return harvest; - } - - public DominionDTO setHarvest(Boolean harvest) { - this.harvest = harvest; + public DominionDTO setFlagValue(Flag flag, Boolean value) { + flags.put(flag, value); 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 new file mode 100644 index 0000000..41cffb0 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/dtos/Flag.java @@ -0,0 +1,130 @@ +package cn.lunadeer.dominion.dtos; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public enum Flag { + ANCHOR("anchor", "重生锚", "是否允许设置重生锚", false, false, true), + ANIMAL_KILLING("animal_killing", "对动物造成伤害", "是否允许对动物造成伤害", false, false, true), + ANVIL("anvil", "使用铁砧", "是否允许使用铁砧", false, false, true), + BEACON("beacon", "信标交互", "是否允许与信标交互", false, false, true), + BED("bed", "床交互", "是否允许使用床睡觉或设置重生点", false, false, true), + BREW("brew", "使用酿造台", "是否可以使用酿造台", false, false, true), + BREAK_BLOCK("break_block", "破坏方块", "是否可以破坏方块", false, false, true), + BUTTON("button", "使用按钮", "是否可以使用各种材质的按钮", false, false, true), + CAKE("cake", "吃蛋糕", "是否可以吃蛋糕", false, false, true), + CONTAINER("container", "一般容器", "包含:箱子/木桶/潜影盒/盔甲架/展示框", false, false, true), + CRAFT("craft", "使用工作台", "是否可以使用工作台", false, false, true), + CREEPER_EXPLODE("creeper_explode", "实体爆炸", "包含:苦力怕/凋零头颅/水晶爆炸", false, true, true), + COMPARER("comparer", "比较器交互", "是否可以与比较器交互", false, false, true), + DOOR("door", "门交互", "是否可以使用各种材质的门", false, false, true), + DYE("dye", "染色", "是否可以使用染料染色", false, false, true), + EGG("egg", "扔鸡蛋", "是否可以扔鸡蛋", false, false, true), + ENCHANT("enchant", "使用附魔台", "是否可以使用附魔台", false, false, true), + ENDER_MAN("ender_man", "末影人行为", "包含:末影人是否可以生成、瞬移", false, true, true), + ENDER_PEARL("ender_pearl", "投掷末影珍珠", "是否可以使用末影珍珠", false, false, true), + FEED("feed", "喂养", "是否可以喂养动物", false, false, true), + FIRE_SPREAD("fire_spread", "火焰蔓延", "是否可以火焰蔓延", false, true, true), + FLOW_IN_PROTECTION("flow_in_protection", "外部流体是否可以进入", "包含:岩浆、水", false, true, true), + GLOW("glow", "玩家发光", "类似光灵箭的高亮效果", false, false, true), + HARVEST("harvest", "收获", "收获庄稼、作物", false, false, true), + HONEY("honey", "蜂巢交互", "是否可以采蜂蜜", false, false, true), + HOOK("hook", "使用钓钩", "是否可以使用钓钩", false, false, true), + HOPPER("hopper", "特殊容器", "包含:漏斗/熔炉/发射器等", false, false, true), + IGNITE("ignite", "点燃", "是否可以使用打火石点火", false, false, true), + 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), + PRESSURE("pressure", "压力板交互", "是否可以触发各种材质的压力板", false, false, true), + RIDING("riding", "骑乘载具", "是否可以骑乘各种载具", false, false, true), + REPEATER("repeater", "中继器交互", "是否可以与中继器交互", false, false, true), + SHEAR("shear", "剪羊毛", "是否可以剪羊毛", false, false, true), + SHOOT("shoot", "发射类型武器", "包括:射箭/雪球/三叉戟", false, false, true), + SHOW_BORDER("show_border", "显示领地边界", "是否显示领地边界", false, true, true), + TELEPORT("teleport", "领地传送", "是否开启领地传送", false, false, true), + TNT_EXPLODE("tnt_explode", "TNT爆炸", "TNT是否可以爆炸", false, true, true), + TRADE("trade", "村民交易", "是否可以与村民交易", false, false, true), + TRAMPLE("trample", "作物践踏", "是否可以践踏作物(关闭意味着保护耕地)", false, true, true), + VEHICLE_DESTROY("vehicle_destroy", "破坏载具", "是否可以破坏载具(主要是矿车)", false, false, true), + VEHICLE_SPAWN("vehicle_spawn", "生成载具", "是否可以生成载具(主要是矿车)", false, false, true), + WITHER_SPAWN("wither_spawn", "凋零生成", "凋零生成", false, true, true), + ; + private final String flag_name; + private String display_name; + private String description; + private Boolean default_value; + private Boolean enable; + private final Boolean dominion_only; + + Flag(String flagName, String displayName, String desc, boolean defaultValue, boolean dominion_only, boolean enable) { + this.flag_name = flagName; + this.display_name = displayName; + this.description = desc; + this.default_value = defaultValue; + this.dominion_only = dominion_only; + this.enable = enable; + } + + public String getFlagName() { + return flag_name; + } + + public String getDisplayName() { + return display_name; + } + + public String getDescription() { + return description; + } + + public Boolean getDefaultValue() { + return default_value; + } + + public void setDisplayName(String displayName) { + this.display_name = displayName; + } + + public void setDescription(String description) { + this.description = description; + } + + public void setDefaultValue(Boolean defaultValue) { + this.default_value = defaultValue; + } + + public void setEnable(Boolean enable) { + this.enable = enable; + } + + public static List getDominionFlags() { + List flags = new ArrayList<>(); + for (Flag flag : Flag.values()) { + if (!flag.enable) { + continue; + } + flags.add(flag); + } + return flags; + } + + public static List getPrivilegeFlags() { + List flags = new ArrayList<>(); + for (Flag flag : Flag.values()) { + if (flag.dominion_only) { + continue; + } + if (!flag.enable) { + 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/events/EnvironmentEvents.java b/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java index f260322..b43241a 100644 --- a/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java +++ b/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java @@ -2,6 +2,7 @@ package cn.lunadeer.dominion.events; import cn.lunadeer.dominion.Cache; import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.dominion.dtos.Flag; import com.destroystokyo.paper.event.entity.EndermanEscapeEvent; import org.bukkit.Location; import org.bukkit.block.Block; @@ -38,7 +39,7 @@ public class EnvironmentEvents implements Listener { if (dom == null) { return; } - if (dom.getCreeperExplode()) { + if (dom.getFlagValue(Flag.CREEPER_EXPLODE)) { return; } event.setCancelled(true); @@ -55,7 +56,7 @@ public class EnvironmentEvents implements Listener { if (dom == null) { return; } - if (dom.getFireSpread()) { + if (dom.getFlagValue(Flag.FIRE_SPREAD)) { return; } event.setCancelled(true); @@ -75,7 +76,7 @@ public class EnvironmentEvents implements Listener { return; } } - if (dom_to.getFlowInProtection()) { + if (dom_to.getFlagValue(Flag.FLOW_IN_PROTECTION)) { event.setCancelled(true); } } @@ -90,7 +91,7 @@ public class EnvironmentEvents implements Listener { if (dom == null) { return; } - if (dom.getMobDropItem()) { + if (dom.getFlagValue(Flag.MOB_DROP_ITEM)) { return; } event.getDrops().clear(); @@ -106,7 +107,7 @@ public class EnvironmentEvents implements Listener { if (dom == null) { return; } - if (dom.getTntExplode()) { + if (dom.getFlagValue(Flag.TNT_EXPLODE)) { return; } event.setCancelled(true); @@ -129,7 +130,7 @@ public class EnvironmentEvents implements Listener { if (dom == null) { return; } - if (dom.getTrample()) { + if (dom.getFlagValue(Flag.TRAMPLE)) { return; } event.setCancelled(true); @@ -145,7 +146,7 @@ public class EnvironmentEvents implements Listener { if (dom == null) { return; } - if (dom.getWitherSpawn()) { + if (dom.getFlagValue(Flag.WITHER_SPAWN)) { return; } event.setCancelled(true); @@ -161,7 +162,7 @@ public class EnvironmentEvents implements Listener { if (dom == null) { return; } - if (dom.getEnderMan()) { + if (dom.getFlagValue(Flag.ENDER_MAN)) { return; } event.setCancelled(true); @@ -174,7 +175,7 @@ public class EnvironmentEvents implements Listener { if (dom == null) { return; } - if (dom.getEnderMan()) { + if (dom.getFlagValue(Flag.ENDER_MAN)) { return; } event.setCancelled(true); diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java b/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java index f49bd81..959bd45 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java @@ -2,9 +2,11 @@ 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.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; @@ -38,420 +40,21 @@ public class DominionFlagInfo { .append(Button.create("我的领地").setExecuteCommand("/dominion list").build()) .append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build()) .append("权限列表")); - if (dominion.getAnchor()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set anchor false " + dominion.getName() + " " + page).build()) - .append("重生锚")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set anchor true " + dominion.getName() + " " + page).build()) - .append("重生锚")); - } - if (dominion.getAnimalKilling()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set animal_killing false " + dominion.getName() + " " + page).build()) - .append("对动物造成伤害")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set animal_killing true " + dominion.getName() + " " + page).build()) - .append("对动物造成伤害")); - } - if (dominion.getAnvil()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set anvil false " + dominion.getName() + " " + page).build()) - .append("使用铁砧")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set anvil true " + dominion.getName() + " " + page).build()) - .append("使用铁砧")); - } - if (dominion.getBeacon()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set beacon false " + dominion.getName() + " " + page).build()) - .append("信标交互")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set beacon true " + dominion.getName() + " " + page).build()) - .append("信标交互")); - } - if (dominion.getBed()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set bed false " + dominion.getName() + " " + page).build()) - .append("床交互")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set bed true " + dominion.getName() + " " + page).build()) - .append("床交互")); - } - if (dominion.getBrew()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set brew false " + dominion.getName() + " " + page).build()) - .append("使用酿造台")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set brew true " + dominion.getName() + " " + page).build()) - .append("使用酿造台")); - } - if (dominion.getBreak()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set break false " + dominion.getName() + " " + page).build()) - .append("破坏方块")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set break true " + dominion.getName() + " " + page).build()) - .append("破坏方块")); - } - if (dominion.getButton()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set button false " + dominion.getName() + " " + page).build()) - .append("使用按钮")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set button true " + dominion.getName() + " " + page).build()) - .append("使用按钮")); - } - if (dominion.getCake()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set cake false " + dominion.getName() + " " + page).build()) - .append("使用蛋糕")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set cake true " + dominion.getName() + " " + page).build()) - .append("使用蛋糕")); - } - if (dominion.getContainer()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set container false " + dominion.getName() + " " + page).build()) - .append("箱子/木桶/潜影盒/盔甲架/展示框")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set container true " + dominion.getName() + " " + page).build()) - .append("箱子/木桶/潜影盒/盔甲架/展示框")); - } - if (dominion.getCraft()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set craft false " + dominion.getName() + " " + page).build()) - .append("使用工作台")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set craft true " + dominion.getName() + " " + page).build()) - .append("使用工作台")); - } - if (dominion.getCreeperExplode()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set creeper_explode false " + dominion.getName() + " " + page).build()) - .append("苦力怕/凋零头颅/水晶爆炸")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set creeper_explode true " + dominion.getName() + " " + page).build()) - .append("苦力怕/凋零头颅/水晶爆炸")); - } - if (dominion.getComparer()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set comparer false " + dominion.getName() + " " + page).build()) - .append("比较器交互")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set comparer true " + dominion.getName() + " " + page).build()) - .append("比较器交互")); - } - if (dominion.getDoor()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set door false " + dominion.getName() + " " + page).build()) - .append("门交互")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set door true " + dominion.getName() + " " + page).build()) - .append("门交互")); - } - if (dominion.getDye()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set dye false " + dominion.getName() + " " + page).build()) - .append("染色")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set dye true " + dominion.getName() + " " + page).build()) - .append("染色")); - } - if (dominion.getEgg()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set egg false " + dominion.getName() + " " + page).build()) - .append("投掷鸡蛋")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set egg true " + dominion.getName() + " " + page).build()) - .append("投掷鸡蛋")); - } - if (dominion.getEnchant()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set enchant false " + dominion.getName() + " " + page).build()) - .append("使用附魔台")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set enchant true " + dominion.getName() + " " + page).build()) - .append("使用附魔台")); - } - if (dominion.getEnderMan()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set ender_man false " + dominion.getName() + " " + page).build()) - .append("末影人生成、瞬移")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set ender_man true " + dominion.getName() + " " + page).build()) - .append("末影人生成、瞬移")); - } - if (dominion.getEnderPearl()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set ender_pearl false " + dominion.getName() + " " + page).build()) - .append("投掷末影珍珠")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set ender_pearl true " + dominion.getName() + " " + page).build()) - .append("投掷末影珍珠")); - } - if (dominion.getFeed()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set feed false " + dominion.getName() + " " + page).build()) - .append("喂食")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set feed true " + dominion.getName() + " " + page).build()) - .append("喂食")); - } - if (dominion.getFireSpread()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set fire_spread false " + dominion.getName() + " " + page).build()) - .append("火焰蔓延")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set fire_spread true " + dominion.getName() + " " + page).build()) - .append("火焰蔓延")); - } - if (dominion.getFlowInProtection()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set flow_in_protection false " + dominion.getName() + " " + page).build()) - .append("外部流体是否可以进入")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set flow_in_protection true " + dominion.getName() + " " + page).build()) - .append("外部流体是否可以进入")); - } - if (dominion.getGlow()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set glow false " + dominion.getName() + " " + page).build()) - .append("玩家发光")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set glow true " + dominion.getName() + " " + page).build()) - .append("玩家发光")); - } - if (dominion.getHarvest()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set harvest false " + dominion.getName() + " " + page).build()) - .append("收获")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set harvest true " + dominion.getName() + " " + page).build()) - .append("收获")); - } - if (dominion.getHoney()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set honey false " + dominion.getName() + " " + page).build()) - .append("蜂巢交互")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set honey true " + dominion.getName() + " " + page).build()) - .append("蜂巢交互")); - } - if (dominion.getHook()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set hook false " + dominion.getName() + " " + page).build()) - .append("使用钓钩")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set hook true " + dominion.getName() + " " + page).build()) - .append("使用钓钩")); - } - if (dominion.getHopper()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set hopper false " + dominion.getName() + " " + page).build()) - .append("漏斗/熔炉/发射器等特殊容器")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set hopper true " + dominion.getName() + " " + page).build()) - .append("漏斗/熔炉/发射器等特殊容器")); - } - if (dominion.getIgnite()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set ignite false " + dominion.getName() + " " + page).build()) - .append("点燃")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set ignite true " + dominion.getName() + " " + page).build()) - .append("点燃")); - } - if (dominion.getLever()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set lever false " + dominion.getName() + " " + page).build()) - .append("使用拉杆")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set lever true " + dominion.getName() + " " + page).build()) - .append("使用拉杆")); - } - if (dominion.getMobDropItem()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set mob_drop_item false " + dominion.getName() + " " + page).build()) - .append("生物战利品掉落")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set mob_drop_item true " + dominion.getName() + " " + page).build()) - .append("生物战利品掉落")); - } - if (dominion.getMonsterKilling()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set monster_killing false " + dominion.getName() + " " + page).build()) - .append("对怪物造成伤害")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set monster_killing true " + dominion.getName() + " " + page).build()) - .append("对怪物造成伤害")); - } - if (dominion.getMove()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set move false " + dominion.getName() + " " + page).build()) - .append("玩家移动")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set move true " + dominion.getName() + " " + page).build()) - .append("玩家移动")); - } - if (dominion.getPlace()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set place false " + dominion.getName() + " " + page).build()) - .append("放置方块")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set place true " + dominion.getName() + " " + page).build()) - .append("放置方块")); - } - if (dominion.getPressure()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set pressure false " + dominion.getName() + " " + page).build()) - .append("压力板交互")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set pressure true " + dominion.getName() + " " + page).build()) - .append("压力板交互")); - } - if (dominion.getRiding()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set riding false " + dominion.getName() + " " + page).build()) - .append("骑乘载具")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set riding true " + dominion.getName() + " " + page).build()) - .append("骑乘载具")); - } - if (dominion.getRepeater()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set repeater false " + dominion.getName() + " " + page).build()) - .append("中继器交互")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set repeater true " + dominion.getName() + " " + page).build()) - .append("中继器交互")); - } - if (dominion.getShear()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set shear false " + dominion.getName() + " " + page).build()) - .append("剪羊毛")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set shear true " + dominion.getName() + " " + page).build()) - .append("剪羊毛")); - } - if (dominion.getShoot()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set shoot false " + dominion.getName() + " " + page).build()) - .append("射箭/雪球/三叉戟")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set shoot true " + dominion.getName() + " " + page).build()) - .append("射箭/雪球/三叉戟")); - } - if (dominion.getShowBorder()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set show_border false " + dominion.getName() + " " + page).build()) - .append("玩家进入时是否显示领地边界")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set show_border true " + dominion.getName() + " " + page).build()) - .append("玩家进入时是否显示领地边界")); - } - if (dominion.getTeleport()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set teleport false " + dominion.getName() + " " + page).build()) - .append("领地传送")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set teleport true " + dominion.getName() + " " + page).build()) - .append("领地传送")); - } - if (dominion.getTntExplode()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set tnt_explode false " + dominion.getName() + " " + page).build()) - .append("TNT爆炸")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set tnt_explode true " + dominion.getName() + " " + page).build()) - .append("TNT爆炸")); - } - if (dominion.getTrade()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set trade false " + dominion.getName() + " " + page).build()) - .append("交易")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set trade true " + dominion.getName() + " " + page).build()) - .append("交易")); - } - if (dominion.getTrample()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set trample false " + dominion.getName() + " " + page).build()) - .append("践踏耕地")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set trample true " + dominion.getName() + " " + page).build()) - .append("践踏耕地")); - } - if (dominion.getVehicleDestroy()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set vehicle_destroy false " + dominion.getName() + " " + page).build()) - .append("破坏载具")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set vehicle_destroy true " + dominion.getName() + " " + page).build()) - .append("破坏载具")); - } - if (dominion.getVehicleSpawn()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set vehicle_spawn false " + dominion.getName() + " " + page).build()) - .append("放置载具")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set vehicle_spawn true " + dominion.getName() + " " + page).build()) - .append("放置载具")); - } - if (dominion.getWitherSpawn()) { - view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set wither_spawn false " + dominion.getName() + " " + page).build()) - .append("凋零生成")); - } else { - view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set wither_spawn true " + dominion.getName() + " " + page).build()) - .append("凋零生成")); + for (Flag flag : Flag.getDominionFlags()) { + view.add(createOption(flag, dominion.getFlagValue(flag), dominion.getName(), page)); } view.showOn(player, page); } + + private static Line createOption(Flag flag, boolean value, String dominion_name, int page) { + if (value) { + return Line.create() + .append(Button.createGreen("☑").setExecuteCommand("/dominion set " + 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 " + flag.getFlagName() + " true " + dominion_name + " " + page).build()) + .append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription()))); + } + } }