重写权限框架

This commit is contained in:
zhangyuheng 2024-05-23 02:37:51 +08:00
parent 1e79169926
commit ad69690e09
6 changed files with 184 additions and 1138 deletions

View File

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

View File

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

View File

@ -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<DominionDTO> query(String sql, Object... args) {
List<DominionDTO> 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<Flag, Boolean> 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<DominionDTO> 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<Flag, Boolean> 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<Flag, Boolean> 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);
}

View File

@ -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<Flag> getDominionFlags() {
List<Flag> flags = new ArrayList<>();
for (Flag flag : Flag.values()) {
if (!flag.enable) {
continue;
}
flags.add(flag);
}
return flags;
}
public static List<Flag> getPrivilegeFlags() {
List<Flag> 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);
}
}

View File

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

View File

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