重构了权限框架实现逻辑,项目整体更加精简、易扩展

This commit is contained in:
zhangyuheng 2024-05-23 11:10:03 +08:00
parent ad69690e09
commit 2fdda7220f
12 changed files with 217 additions and 1761 deletions

View File

@ -6,7 +6,7 @@
<groupId>cn.lunadeer</groupId>
<artifactId>Dominion</artifactId>
<version>1.24.5-beta</version>
<version>1.25.0-beta</version>
<packaging>jar</packaging>
<name>Dominion</name>

View File

@ -15,6 +15,8 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import static cn.lunadeer.dominion.events.Apis.checkFlag;
public class Cache {
public Cache() {
@ -180,16 +182,7 @@ public class Cache {
* @param dominion 领地
*/
private void lightOrNot(Player player, DominionDTO dominion) {
if (dominion == null) {
player.setGlowing(false);
return;
}
PlayerPrivilegeDTO privilege = getPlayerPrivilege(player, dominion);
if (privilege != null) {
player.setGlowing(privilege.getGlow());
} else {
player.setGlowing(dominion.getFlagValue(Flag.GLOW));
}
player.setGlowing(checkFlag(dominion, Flag.GLOW, player, null));
}
private List<DominionDTO> getDominionsParentAndChildren(Location loc) {

View File

@ -4,6 +4,7 @@ import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.controllers.DominionController;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag;
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
import cn.lunadeer.minecraftpluginutils.Teleport;
import org.bukkit.Location;
@ -366,12 +367,12 @@ public class DominionOperate {
}
PlayerPrivilegeDTO privilegeDTO = PlayerPrivilegeDTO.select(player.getUniqueId(), dominionDTO.getId());
if (privilegeDTO == null) {
if (!dominionDTO.getTeleport()) {
if (!dominionDTO.getFlagValue(Flag.TELEPORT)) {
Dominion.notification.error(sender, "此领地禁止传送");
return;
}
} else {
if (!privilegeDTO.getTeleport()) {
if (!privilegeDTO.getFlagValue(Flag.TELEPORT)) {
Dominion.notification.error(sender, "你不被允许传送到这个领地");
return;
}

View File

@ -2,6 +2,7 @@ package cn.lunadeer.dominion.commands;
import cn.lunadeer.dominion.controllers.DominionController;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag;
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -15,45 +16,13 @@ import static cn.lunadeer.dominion.commands.Apis.playerOnly;
public class Helper {
public static List<String> dominionFlags() {
return Arrays.asList(
"anchor", "animal_killing", "anvil",
"beacon", "bed", "brew", "break", "button",
"cake", "container", "craft", "creeper_explode", "comparer",
"door", "dye",
"egg", "enchant", "ender_man", "ender_pearl",
"feed", "fire_spread", "flow_in_protection",
"glow",
"harvest", "honey", "hook", "hopper",
"ignite",
"lever",
"mob_drop_item", "monster_killing", "move",
"place", "pressure",
"riding", "repeater",
"shear", "shoot", "show_border",
"teleport", "tnt_explode", "trade", "trample",
"vehicle_destroy",
"vehicle_spawn",
"wither_spawn");
List<Flag> flags = Flag.getDominionFlagsEnabled();
return Arrays.asList(flags.stream().map(Flag::getFlagName).toArray(String[]::new));
}
public static List<String> playerPrivileges() {
return Arrays.asList(
"admin", "anchor", "animal_killing", "anvil",
"beacon", "bed", "brew", "break", "button",
"cake", "container", "craft", "comparer",
"door", "dye",
"egg", "enchant", "ender_pearl",
"feed",
"glow",
"harvest", "honey", "hook", "hopper",
"ignite",
"lever",
"monster_killing", "move",
"place", "pressure", "riding", "repeater",
"shear", "shoot",
"teleport", "trade",
"vehicle_destroy",
"vehicle_spawn");
List<Flag> flags = Flag.getPrivilegeFlagsEnabled();
return Arrays.asList(flags.stream().map(Flag::getFlagName).toArray(String[]::new));
}
/**

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 cn.lunadeer.dominion.dtos.PlayerDTO;
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
import org.bukkit.entity.Player;
@ -98,128 +99,19 @@ public class PrivilegeController {
privilege = createPlayerPrivilege(operator, player.getUuid(), dominion);
if (privilege == null) return false;
}
switch (flag) {
case "admin":
if (notOwner(operator, dominion)) {
Dominion.notification.error(operator, "你不是领地 %s 的拥有者,无法设置其他玩家为管理员", dominionName);
return false;
}
privilege.setAdmin(value);
break;
case "anchor":
privilege.setAnchor(value);
break;
case "animal_killing":
privilege.setAnimalKilling(value);
break;
case "anvil":
privilege.setAnvil(value);
break;
case "beacon":
privilege.setBeacon(value);
break;
case "bed":
privilege.setBed(value);
break;
case "brew":
privilege.setBrew(value);
break;
case "break":
privilege.setBreak(value);
break;
case "button":
privilege.setButton(value);
break;
case "cake":
privilege.setCake(value);
break;
case "container":
privilege.setContainer(value);
break;
case "craft":
privilege.setCraft(value);
break;
case "comparer":
privilege.setComparer(value);
break;
case "door":
privilege.setDoor(value);
break;
case "dye":
privilege.setDye(value);
break;
case "egg":
privilege.setEgg(value);
break;
case "enchant":
privilege.setEnchant(value);
break;
case "ender_pearl":
privilege.setEnderPearl(value);
break;
case "feed":
privilege.setFeed(value);
break;
case "glow":
privilege.setGlow(value);
break;
case "harvest":
privilege.setHarvest(value);
break;
case "honey":
privilege.setHoney(value);
break;
case "hook":
privilege.setHook(value);
break;
case "hopper":
privilege.setHopper(value);
break;
case "ignite":
privilege.setIgnite(value);
break;
case "lever":
privilege.setLever(value);
break;
case "monster_killing":
privilege.setMonsterKilling(value);
break;
case "move":
privilege.setMove(value);
break;
case "place":
privilege.setPlace(value);
break;
case "pressure":
privilege.setPressure(value);
break;
case "riding":
privilege.setRiding(value);
break;
case "repeater":
privilege.setRepeater(value);
break;
case "shear":
privilege.setShear(value);
break;
case "shoot":
privilege.setShoot(value);
break;
case "teleport":
privilege.setTeleport(value);
break;
case "trade":
privilege.setTrade(value);
break;
case "vehicle_destroy":
privilege.setVehicleDestroy(value);
break;
case "vehicle_spawn":
privilege.setVehicleSpawn(value);
break;
default:
if (flag.equals("admin")) {
if (notOwner(operator, dominion)) {
Dominion.notification.error(operator, "你不是领地 %s 的拥有者,无法设置其他玩家为管理员", dominionName);
return false;
}
privilege.setAdmin(value);
} else {
Flag f = Flag.getFlag(flag);
if (f == null) {
Dominion.notification.error(operator, "未知的领地权限 %s", flag);
return false;
}
privilege.setFlagValue(f, value);
}
Dominion.notification.info(operator, "设置玩家在领地 %s 的权限 %s 为 %s", dominionName, flag, value);
return true;
@ -255,24 +147,7 @@ public class PrivilegeController {
Dominion.notification.error(operator, "你不能给自己设置特权");
return null;
}
PlayerPrivilegeDTO privilege = new PlayerPrivilegeDTO(player, dom.getId(),
dom.getAnchor(), dom.getAnimalKilling(), dom.getAnvil(),
dom.getBeacon(), dom.getBed(), dom.getBrew(), dom.getBreak(), dom.getButton(),
dom.getCake(), dom.getContainer(), dom.getCraft(), dom.getComparer(),
dom.getDoor(), dom.getDye(),
dom.getEgg(), dom.getEnchant(), dom.getEnderPearl(),
dom.getFeed(),
dom.getGlow(),
dom.getHarvest(), dom.getHoney(), dom.getHook(), dom.getHopper(),
dom.getIgnite(),
dom.getLever(),
dom.getMonsterKilling(), dom.getMove(),
dom.getPlace(), dom.getPressure(),
dom.getRiding(), dom.getRepeater(),
dom.getShear(), dom.getShoot(),
dom.getTeleport(), dom.getTrade(),
dom.getVehicleDestroy(),
dom.getVehicleSpawn());
PlayerPrivilegeDTO privilege = new PlayerPrivilegeDTO(player, dom);
privilege = PlayerPrivilegeDTO.insert(privilege);
if (privilege == null) {
Dominion.notification.error(operator, "创建玩家特权失败,可能是此玩家已存在特权");

View File

@ -32,7 +32,7 @@ public class DominionDTO {
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()) {
for (Flag f : Flag.getDominionFlagsEnabled()) {
flags.put(f, rs.getBoolean(f.getFlagName()));
}
@ -106,8 +106,17 @@ public class DominionDTO {
public static DominionDTO insert(DominionDTO dominion) {
String sql = "INSERT INTO dominion (" +
"owner, name, world, x1, y1, z1, x2, y2, z2" +
") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING *;";
"owner, name, world, x1, y1, z1, x2, y2, z2, ";
for (Flag f : Flag.getAllDominionFlags()) {
sql += f.getFlagName() + ", ";
}
sql += "tp_location";
sql += ") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ";
for (Flag f : Flag.getAllDominionFlags()) {
sql += f.getDefaultValue() + ", ";
}
sql += "'default'";
sql += ") RETURNING *;";
List<DominionDTO> dominions = query(sql,
dominion.getOwner(),
dominion.getName(),
@ -148,7 +157,7 @@ public class DominionDTO {
"parent_dom_id = " + dominion.getParentDomId() + ", " +
"join_message = ?," +
"leave_message = ?,";
for (Flag f : Flag.getDominionFlags()) {
for (Flag f : Flag.getDominionFlagsEnabled()) {
sql += f.getFlagName() + " = " + dominion.getFlagValue(f) + ",";
}
sql += "tp_location = ?" +
@ -185,19 +194,7 @@ public class DominionDTO {
this.joinMessage = joinMessage;
this.leaveMessage = leaveMessage;
this.flags.putAll(flags);
if (Objects.equals(tp_location, "default")) {
this.tp_location = null;
} else {
// 0:0:0
String[] loc = tp_location.split(":");
World w = Dominion.instance.getServer().getWorld(world);
if (loc.length == 3 && w != null) {
this.tp_location = new Location(w, Integer.parseInt(loc[0]), Integer.parseInt(loc[1]), Integer.parseInt(loc[2]));
} else {
Dominion.logger.warn("领地传送点数据异常: %s", tp_location);
this.tp_location = null;
}
}
this.tp_location = tp_location;
}
@ -236,7 +233,7 @@ public class DominionDTO {
private String joinMessage = "欢迎";
private String leaveMessage = "再见";
private final Map<Flag, Boolean> flags = new HashMap<>();
private Location tp_location = null;
private String tp_location;
// getters and setters
public Integer getId() {
@ -364,6 +361,7 @@ public class DominionDTO {
}
public Boolean getFlagValue(Flag flag) {
if (!flags.containsKey(flag)) return flag.getDefaultValue();
return flags.get(flag);
}
@ -383,11 +381,24 @@ public class DominionDTO {
}
public Location getTpLocation() {
return tp_location;
if (Objects.equals(tp_location, "default")) {
return null;
} else {
// 0:0:0
String[] loc = tp_location.split(":");
World w = Dominion.instance.getServer().getWorld(world);
if (loc.length == 3 && w != null) {
return new Location(w, Integer.parseInt(loc[0]), Integer.parseInt(loc[1]), Integer.parseInt(loc[2]));
} else {
Dominion.logger.warn("领地传送点数据异常: %s", tp_location);
Dominion.logger.debug("world: %s, loc.length: %d", world, loc.length);
return null;
}
}
}
public DominionDTO setTpLocation(Location loc) {
this.tp_location = loc;
this.tp_location = loc.getBlockX() + ":" + loc.getBlockY() + ":" + loc.getBlockZ();
return update(this);
}

View File

@ -11,7 +11,7 @@ public enum Flag {
BEACON("beacon", "信标交互", "是否允许与信标交互", false, false, true),
BED("bed", "床交互", "是否允许使用床睡觉或设置重生点", false, false, true),
BREW("brew", "使用酿造台", "是否可以使用酿造台", false, false, true),
BREAK_BLOCK("break_block", "破坏方块", "是否可以破坏方块", false, false, true),
BREAK_BLOCK("break", "破坏方块", "是否可以破坏方块(包括:一般方块、展示框)", false, false, true),
BUTTON("button", "使用按钮", "是否可以使用各种材质的按钮", false, false, true),
CAKE("cake", "吃蛋糕", "是否可以吃蛋糕", false, false, true),
CONTAINER("container", "一般容器", "包含:箱子/木桶/潜影盒/盔甲架/展示框", false, false, true),
@ -36,7 +36,8 @@ public enum Flag {
LEVER("lever", "使用拉杆", "是否可以使用拉杆", false, false, true),
MOB_DROP_ITEM("mob_drop_item", "生物战利品掉落", "生物死亡时是否产生凋落物", true, true, true),
MONSTER_KILLING("monster_killing", "对怪物造成伤害", "玩家是否可以对怪物造成伤害", false, false, true),
PLACE("place", "放置方块", "是否可以放置方块", false, false, true),
MOVE("move", "移动", "是否可以移动", true, false, true),
PLACE("place", "放置方块", "是否可以放置方块(包括:一般方块、展示框、岩浆、水)", false, false, true),
PRESSURE("pressure", "压力板交互", "是否可以触发各种材质的压力板", false, false, true),
RIDING("riding", "骑乘载具", "是否可以骑乘各种载具", false, false, true),
REPEATER("repeater", "中继器交互", "是否可以与中继器交互", false, false, true),
@ -99,7 +100,11 @@ public enum Flag {
this.enable = enable;
}
public static List<Flag> getDominionFlags() {
public static List<Flag> getAllFlags() {
return Arrays.asList(Flag.values());
}
public static List<Flag> getDominionFlagsEnabled() {
List<Flag> flags = new ArrayList<>();
for (Flag flag : Flag.values()) {
if (!flag.enable) {
@ -110,7 +115,12 @@ public enum Flag {
return flags;
}
public static List<Flag> getPrivilegeFlags() {
public static List<Flag> getAllDominionFlags() {
return new ArrayList<>(Arrays.asList(Flag.values()));
}
public static List<Flag> getPrivilegeFlagsEnabled() {
List<Flag> flags = new ArrayList<>();
for (Flag flag : Flag.values()) {
if (flag.dominion_only) {
@ -124,6 +134,17 @@ public enum Flag {
return flags;
}
public static List<Flag> getAllPrivilegeFlags() {
List<Flag> flags = new ArrayList<>();
for (Flag flag : Flag.values()) {
if (flag.dominion_only) {
continue;
}
flags.add(flag);
}
return flags;
}
public static Flag getFlag(String flagName) {
return Arrays.stream(Flag.values()).filter(flag -> flag.getFlagName().equals(flagName)).findFirst().orElse(null);
}

View File

@ -4,51 +4,26 @@ import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.Dominion;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.*;
public class PlayerPrivilegeDTO {
public static PlayerPrivilegeDTO insert(PlayerPrivilegeDTO player) {
String sql = "INSERT INTO player_privilege (player_uuid, admin, dom_id, " +
"anchor, animal_killing, anvil, " +
"beacon, bed, brew, break, button, " +
"cake, container, craft, comparer, " +
"door, dye, " +
"egg, enchant, ender_pearl, " +
"feed, " +
"glow, " +
"harvest, honey, hook, hopper, " +
"ignite, " +
"lever, " +
"monster_killing, move, " +
"place, pressure, " +
"riding, repeater, " +
"shear, shoot, " +
"teleport, trade, " +
"vehicle_destroy, " +
"vehicle_spawn" +
") VALUES (" +
"'" + player.getPlayerUUID() + "', " + player.getAdmin() + ", " + player.getDomID() + ", " +
player.getAnchor() + ", " + player.getAnimalKilling() + ", " + player.getAnvil() + ", " +
player.getBeacon() + ", " + player.getBed() + ", " + player.getBrew() + ", " + player.getBreak() + ", " + player.getButton() + ", " +
player.getCake() + ", " + player.getContainer() + ", " + player.getCraft() + ", " + player.getComparer() + ", " +
player.getDoor() + ", " + player.getDye() + ", " +
player.getEgg() + ", " + player.getEnchant() + ", " + player.getEnderPearl() + ", " +
player.getFeed() + ", " +
player.getGlow() + ", " +
player.getHarvest() + ", " + player.getHoney() + ", " + player.getHook() + ", " + player.getHopper() + ", " +
player.getIgnite() + ", " +
player.getLever() + ", " +
player.getMonsterKilling() + ", " + player.getMove() + ", " +
player.getPlace() + ", " + player.getPressure() + ", " +
player.getRiding() + ", " + player.getRepeater() + ", " +
player.getShear() + ", " + player.getShoot() + ", " +
player.getTeleport() + ", " + player.getTrade() + ", " +
player.getVehicleDestroy() + ", " +
player.getVehicleSpawn() + " " +
") RETURNING *;";
String sql = "INSERT INTO player_privilege (player_uuid, admin, dom_id, ";
for (Flag f : Flag.getAllPrivilegeFlags()) {
sql += f.getFlagName() + ", ";
}
sql = sql.substring(0, sql.length() - 2);
sql += ") VALUES ('" + player.getPlayerUUID() + "', " + player.getAdmin() + ", " + player.getDomID() + ", ";
for (Flag f : Flag.getAllPrivilegeFlags()) {
sql += player.getFlagValue(f) + ", ";
}
sql = sql.substring(0, sql.length() - 2);
sql += ") RETURNING *;";
List<PlayerPrivilegeDTO> players = query(sql);
if (players.size() == 0) return null;
return players.get(0);
@ -85,43 +60,6 @@ public class PlayerPrivilegeDTO {
private final UUID playerUUID;
private Boolean admin;
private final Integer domID;
private Boolean anchor;
private Boolean animalKilling;
private Boolean anvil;
private Boolean beacon;
private Boolean bed;
private Boolean brew;
private Boolean breakBlock;
private Boolean button;
private Boolean cake;
private Boolean container;
private Boolean craft;
private Boolean comparer;
private Boolean door;
private Boolean dye;
private Boolean egg;
private Boolean enchant;
private Boolean enderPearl;
private Boolean feed;
private Boolean glow;
private Boolean harvest;
private Boolean honey;
private Boolean hook;
private Boolean hopper;
private Boolean ignite;
private Boolean lever;
private Boolean monsterKilling;
private Boolean move;
private Boolean place;
private Boolean pressure;
private Boolean riding;
private Boolean repeater;
private Boolean shear;
private Boolean shoot;
private Boolean teleport;
private Boolean trade;
private Boolean vehicleDestroy;
private Boolean vehicleSpawn;
public Integer getId() {
return id;
@ -139,336 +77,15 @@ public class PlayerPrivilegeDTO {
return domID;
}
public Boolean getAnchor() {
return anchor;
}
public Boolean getAnimalKilling() {
return animalKilling;
}
public Boolean getAnvil() {
return anvil;
}
public Boolean getBeacon() {
return beacon;
}
public Boolean getBed() {
return bed;
}
public Boolean getBrew() {
return brew;
}
public Boolean getBreak() {
return breakBlock;
}
public Boolean getButton() {
return button;
}
public Boolean getCake() {
return cake;
}
public Boolean getContainer() {
return container;
}
public Boolean getCraft() {
return craft;
}
public Boolean getComparer() {
return comparer;
}
public Boolean getDoor() {
return door;
}
public Boolean getDye() {
return dye;
}
public Boolean getEgg() {
return egg;
}
public Boolean getEnchant() {
return enchant;
}
public Boolean getEnderPearl() {
return enderPearl;
}
public Boolean getFeed() {
return feed;
}
public Boolean getGlow() {
return glow;
}
public Boolean getHarvest() {
return harvest;
}
public Boolean getHoney() {
return honey;
}
public Boolean getHook() {
return hook;
}
public Boolean getHopper() {
return hopper;
}
public Boolean getIgnite() {
return ignite;
}
public Boolean getLever() {
return lever;
}
public Boolean getMonsterKilling() {
return monsterKilling;
}
public Boolean getMove() {
return move;
}
public Boolean getPlace() {
return place;
}
public Boolean getPressure() {
return pressure;
}
public Boolean getRiding() {
return riding;
}
public Boolean getRepeater() {
return repeater;
}
public Boolean getShear() {
return shear;
}
public Boolean getShoot() {
return shoot;
}
public Boolean getTeleport() {
return teleport;
}
public Boolean getTrade() {
return trade;
}
public Boolean getVehicleDestroy() {
return vehicleDestroy;
}
public Boolean getVehicleSpawn() {
return vehicleSpawn;
}
public PlayerPrivilegeDTO setAnchor(Boolean anchor) {
this.anchor = anchor;
return update(this);
}
public PlayerPrivilegeDTO setAnimalKilling(Boolean animalKilling) {
this.animalKilling = animalKilling;
return update(this);
}
public PlayerPrivilegeDTO setAnvil(Boolean anvil) {
this.anvil = anvil;
return update(this);
}
public PlayerPrivilegeDTO setBeacon(Boolean beacon) {
this.beacon = beacon;
return update(this);
}
public PlayerPrivilegeDTO setBed(Boolean bed) {
this.bed = bed;
return update(this);
}
public PlayerPrivilegeDTO setBrew(Boolean brew) {
this.brew = brew;
return update(this);
}
public PlayerPrivilegeDTO setBreak(Boolean breakBlock) {
this.breakBlock = breakBlock;
return update(this);
}
public PlayerPrivilegeDTO setButton(Boolean button) {
this.button = button;
return update(this);
}
public PlayerPrivilegeDTO setCake(Boolean cake) {
this.cake = cake;
return update(this);
}
public PlayerPrivilegeDTO setContainer(Boolean container) {
this.container = container;
return update(this);
}
public PlayerPrivilegeDTO setCraft(Boolean craft) {
this.craft = craft;
return update(this);
}
public PlayerPrivilegeDTO setComparer(Boolean comparer) {
this.comparer = comparer;
return update(this);
}
public PlayerPrivilegeDTO setDoor(Boolean door) {
this.door = door;
return update(this);
}
public PlayerPrivilegeDTO setDye(Boolean dye) {
this.dye = dye;
return update(this);
}
public PlayerPrivilegeDTO setEgg(Boolean egg) {
this.egg = egg;
return update(this);
}
public PlayerPrivilegeDTO setEnchant(Boolean enchant) {
this.enchant = enchant;
return update(this);
}
public PlayerPrivilegeDTO setEnderPearl(Boolean enderPearl) {
this.enderPearl = enderPearl;
return update(this);
}
public PlayerPrivilegeDTO setFeed(Boolean feed) {
this.feed = feed;
return update(this);
}
public PlayerPrivilegeDTO setGlow(Boolean glow) {
this.glow = glow;
return update(this);
}
public PlayerPrivilegeDTO setHoney(Boolean honey) {
this.honey = honey;
return update(this);
}
public PlayerPrivilegeDTO setHook(Boolean hook) {
this.hook = hook;
return update(this);
}
public PlayerPrivilegeDTO setHopper(Boolean hopper) {
this.hopper = hopper;
return update(this);
}
public PlayerPrivilegeDTO setIgnite(Boolean ignite) {
this.ignite = ignite;
return update(this);
}
public PlayerPrivilegeDTO setLever(Boolean lever) {
this.lever = lever;
return update(this);
}
public PlayerPrivilegeDTO setMonsterKilling(Boolean monsterKilling) {
this.monsterKilling = monsterKilling;
return update(this);
}
public PlayerPrivilegeDTO setMove(Boolean move) {
this.move = move;
return update(this);
}
public PlayerPrivilegeDTO setPlace(Boolean place) {
this.place = place;
return update(this);
}
public PlayerPrivilegeDTO setPressure(Boolean pressure) {
this.pressure = pressure;
return update(this);
}
public PlayerPrivilegeDTO setRiding(Boolean riding) {
this.riding = riding;
return update(this);
}
public PlayerPrivilegeDTO setRepeater(Boolean repeater) {
this.repeater = repeater;
return update(this);
}
public PlayerPrivilegeDTO setShear(Boolean shear) {
this.shear = shear;
return update(this);
}
public PlayerPrivilegeDTO setShoot(Boolean shoot) {
this.shoot = shoot;
return update(this);
}
public PlayerPrivilegeDTO setTeleport(Boolean teleport) {
this.teleport = teleport;
return update(this);
}
public PlayerPrivilegeDTO setTrade(Boolean trade) {
this.trade = trade;
return update(this);
}
public PlayerPrivilegeDTO setVehicleDestroy(Boolean vehicleDestroy) {
this.vehicleDestroy = vehicleDestroy;
return update(this);
}
private final Map<Flag, Boolean> flags = new HashMap<>();
public PlayerPrivilegeDTO setVehicleSpawn(Boolean vehicleSpawn) {
this.vehicleSpawn = vehicleSpawn;
return update(this);
public Boolean getFlagValue(Flag flag) {
if (!flags.containsKey(flag)) return flag.getDefaultValue();
return flags.get(flag);
}
public PlayerPrivilegeDTO setHarvest(Boolean harvest) {
this.harvest = harvest;
public PlayerPrivilegeDTO setFlagValue(Flag flag, Boolean value) {
flags.put(flag, value);
return update(this);
}
@ -477,104 +94,22 @@ public class PlayerPrivilegeDTO {
return update(this);
}
private PlayerPrivilegeDTO(Integer id, UUID playerUUID, Boolean admin, Integer domID,
Boolean anchor, Boolean animalKilling, Boolean anvil,
Boolean beacon, Boolean bed, Boolean brew, Boolean breakBlock, Boolean button,
Boolean cake, Boolean container, Boolean craft, Boolean comparer,
Boolean door, Boolean dye,
Boolean egg, Boolean enchant, Boolean enderPearl,
Boolean feed,
Boolean glow,
Boolean harvest, Boolean honey, Boolean hook, Boolean hopper,
Boolean ignite,
Boolean lever,
Boolean monsterKilling, Boolean move,
Boolean place, Boolean pressure,
Boolean riding, Boolean repeater,
Boolean shear, Boolean shoot,
Boolean teleport, Boolean trade,
Boolean vehicleDestroy,
Boolean vehicleSpawn) {
private PlayerPrivilegeDTO(Integer id, UUID playerUUID, Boolean admin, Integer domID, Map<Flag, Boolean> flags) {
this.id = id;
this.playerUUID = playerUUID;
this.admin = admin;
this.domID = domID;
this.anchor = anchor;
this.animalKilling = animalKilling;
this.anvil = anvil;
this.beacon = beacon;
this.bed = bed;
this.brew = brew;
this.breakBlock = breakBlock;
this.button = button;
this.cake = cake;
this.container = container;
this.craft = craft;
this.comparer = comparer;
this.door = door;
this.dye = dye;
this.egg = egg;
this.enchant = enchant;
this.enderPearl = enderPearl;
this.feed = feed;
this.glow = glow;
this.harvest = harvest;
this.honey = honey;
this.hook = hook;
this.hopper = hopper;
this.ignite = ignite;
this.lever = lever;
this.monsterKilling = monsterKilling;
this.move = move;
this.place = place;
this.pressure = pressure;
this.riding = riding;
this.repeater = repeater;
this.shear = shear;
this.shoot = shoot;
this.teleport = teleport;
this.trade = trade;
this.vehicleDestroy = vehicleDestroy;
this.vehicleSpawn = vehicleSpawn;
this.flags.putAll(flags);
}
public PlayerPrivilegeDTO(UUID playerUUID, Integer domID,
Boolean anchor, Boolean animalKilling, Boolean anvil,
Boolean beacon, Boolean bed, Boolean brew, Boolean breakBlock, Boolean button,
Boolean cake, Boolean container, Boolean craft, Boolean comparer,
Boolean door, Boolean dye,
Boolean egg, Boolean enchant, Boolean enderPearl,
Boolean feed,
Boolean glow,
Boolean harvest, Boolean honey, Boolean hook, Boolean hopper,
Boolean ignite,
Boolean lever,
Boolean monsterKilling, Boolean move,
Boolean place, Boolean pressure,
Boolean riding, Boolean repeater,
Boolean shear, Boolean shoot,
Boolean teleport, Boolean trade,
Boolean vehicleDestroy,
Boolean vehicleSpawn
) {
this(null, playerUUID, false, domID,
anchor, animalKilling, anvil,
beacon, bed, brew, breakBlock, button,
cake, container, craft, comparer,
door, dye,
egg, enchant, enderPearl,
feed,
glow,
harvest, honey, hook, hopper,
ignite,
lever,
monsterKilling, move,
place, pressure,
riding, repeater,
shear, shoot,
teleport, trade,
vehicleDestroy,
vehicleSpawn);
public PlayerPrivilegeDTO(UUID playerUUID, DominionDTO dom) {
this.id = null;
this.playerUUID = playerUUID;
this.admin = false;
this.domID = dom.getId();
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
this.flags.put(f, dom.getFlagValue(f));
}
}
private static List<PlayerPrivilegeDTO> query(String sql, Object... params) {
@ -586,48 +121,16 @@ public class PlayerPrivilegeDTO {
}
if (rs == null) return players;
while (rs.next()) {
Map<Flag, Boolean> flags = new HashMap<>();
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
flags.put(f, rs.getBoolean(f.getFlagName()));
}
PlayerPrivilegeDTO player = new PlayerPrivilegeDTO(
rs.getInt("id"),
UUID.fromString(rs.getString("player_uuid")),
rs.getBoolean("admin"),
rs.getInt("dom_id"),
rs.getBoolean("anchor"),
rs.getBoolean("animal_killing"),
rs.getBoolean("anvil"),
rs.getBoolean("beacon"),
rs.getBoolean("bed"),
rs.getBoolean("brew"),
rs.getBoolean("break"),
rs.getBoolean("button"),
rs.getBoolean("cake"),
rs.getBoolean("container"),
rs.getBoolean("craft"),
rs.getBoolean("comparer"),
rs.getBoolean("door"),
rs.getBoolean("dye"),
rs.getBoolean("egg"),
rs.getBoolean("enchant"),
rs.getBoolean("ender_pearl"),
rs.getBoolean("feed"),
rs.getBoolean("glow"),
rs.getBoolean("harvest"),
rs.getBoolean("honey"),
rs.getBoolean("hook"),
rs.getBoolean("hopper"),
rs.getBoolean("ignite"),
rs.getBoolean("lever"),
rs.getBoolean("monster_killing"),
rs.getBoolean("move"),
rs.getBoolean("place"),
rs.getBoolean("pressure"),
rs.getBoolean("riding"),
rs.getBoolean("repeater"),
rs.getBoolean("shear"),
rs.getBoolean("shoot"),
rs.getBoolean("teleport"),
rs.getBoolean("trade"),
rs.getBoolean("vehicle_destroy"),
rs.getBoolean("vehicle_spawn")
flags
);
players.add(player);
}
@ -640,45 +143,12 @@ public class PlayerPrivilegeDTO {
private static PlayerPrivilegeDTO update(PlayerPrivilegeDTO player) {
String sql = "UPDATE player_privilege SET " +
"admin = " + player.getAdmin() + ", " +
"dom_id = " + player.getDomID() + ", " +
"anchor = " + player.getAnchor() + ", " +
"animal_killing = " + player.getAnimalKilling() + ", " +
"anvil = " + player.getAnvil() + ", " +
"beacon = " + player.getBeacon() + ", " +
"bed = " + player.getBed() + ", " +
"brew = " + player.getBrew() + ", " +
"break = " + player.getBreak() + ", " +
"button = " + player.getButton() + ", " +
"cake = " + player.getCake() + ", " +
"container = " + player.getContainer() + ", " +
"craft = " + player.getCraft() + ", " +
"comparer = " + player.getComparer() + ", " +
"door = " + player.getDoor() + ", " +
"dye = " + player.getDye() + ", " +
"egg = " + player.getEgg() + ", " +
"enchant = " + player.getEnchant() + ", " +
"ender_pearl = " + player.getEnderPearl() + ", " +
"feed = " + player.getFeed() + ", " +
"glow = " + player.getGlow() + ", " +
"harvest = " + player.getHarvest() + ", " +
"honey = " + player.getHoney() + ", " +
"hook = " + player.getHook() + ", " +
"hopper = " + player.getHopper() + ", " +
"ignite = " + player.getIgnite() + ", " +
"lever = " + player.getLever() + ", " +
"monster_killing = " + player.getMonsterKilling() + ", " +
"move = " + player.getMove() + ", " +
"place = " + player.getPlace() + ", " +
"pressure = " + player.getPressure() + ", " +
"riding = " + player.getRiding() + ", " +
"repeater = " + player.getRepeater() + ", " +
"shear = " + player.getShear() + ", " +
"shoot = " + player.getShoot() + ", " +
"teleport = " + player.getTeleport() + ", " +
"trade = " + player.getTrade() + ", " +
"vehicle_destroy = " + player.getVehicleDestroy() + ", " +
"vehicle_spawn = " + player.getVehicleSpawn() + " " +
"WHERE id = " + player.getId() + " " +
"dom_id = " + player.getDomID() + ", ";
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
sql += f.getFlagName() + " = " + player.getFlagValue(f) + ", ";
}
sql = sql.substring(0, sql.length() - 2);
sql += "WHERE id = " + player.getId() + " " +
"RETURNING *;";
List<PlayerPrivilegeDTO> players = query(sql);
if (players.size() == 0) return null;

View File

@ -1,14 +1,19 @@
package cn.lunadeer.dominion.events;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag;
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.inventory.Inventory;
public class Apis {
public static boolean hasPermission(Player player, DominionDTO dom) {
if (player.isOp()) {
public static boolean canByPass(Player player, DominionDTO dom, PlayerPrivilegeDTO prev) {
if (player.isOp() && Dominion.config.getLimitOpBypass()) {
return true;
}
if (dom == null) {
@ -17,9 +22,8 @@ public class Apis {
if (dom.getOwner().equals(player.getUniqueId())) {
return true;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
return privilege.getAdmin();
if (prev != null) {
return prev.getAdmin();
}
return false;
}
@ -31,4 +35,29 @@ public class Apis {
return Cache.instance.getDominion(inv.getLocation());
}
}
public static boolean checkFlag(DominionDTO dom, Flag flag, Player player, Cancellable event) {
if (dom == null) {
return true;
}
PlayerPrivilegeDTO prev = Cache.instance.getPlayerPrivilege(player, dom);
if (canByPass(player, dom, prev)) {
return true;
}
if (prev != null) {
if (prev.getFlagValue(flag)) {
return true;
}
} else {
if (dom.getFlagValue(flag)) {
return true;
}
}
TextComponent msg = Component.text(String.format("你没有 %s 权限", flag.getDisplayName())).hoverEvent(Component.text(flag.getDescription()));
Dominion.notification.error(player, msg);
if (event != null) {
event.setCancelled(true);
}
return false;
}
}

View File

@ -3,12 +3,14 @@ package cn.lunadeer.dominion.events;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag;
import cn.lunadeer.dominion.dtos.PlayerDTO;
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
import io.papermc.paper.event.entity.EntityDyeEvent;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.data.BlockData;
import org.bukkit.entity.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -26,8 +28,10 @@ import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.*;
import org.bukkit.event.vehicle.VehicleDestroyEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.material.Button;
import org.spigotmc.event.entity.EntityMountEvent;
import static cn.lunadeer.dominion.events.Apis.checkFlag;
import static cn.lunadeer.dominion.events.Apis.getInvDominion;
public class PlayerEvents implements Listener {
@ -45,34 +49,11 @@ public class PlayerEvents implements Listener {
return;
}
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
if (dom == null) {
return;
}
if (Apis.hasPermission(bukkitPlayer, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
if (privilege != null) {
if (!privilege.getAnchor()) {
Dominion.notification.error(bukkitPlayer, "你没有锚点重生权限");
return;
if (checkFlag(dom, Flag.ANCHOR, bukkitPlayer, null)) {
if (bukkitPlayer.getBedSpawnLocation() != null) {
event.setRespawnLocation(bukkitPlayer.getBedSpawnLocation());
} else {
if (bukkitPlayer.getBedSpawnLocation() != null) {
event.setRespawnLocation(bukkitPlayer.getBedSpawnLocation());
} else {
event.setRespawnLocation(bukkitPlayer.getWorld().getSpawnLocation());
}
}
} else {
if (dom.getAnchor()) {
Dominion.notification.error(bukkitPlayer, "你没有锚点重生权限");
return;
} else {
if (bukkitPlayer.getBedSpawnLocation() != null) {
event.setRespawnLocation(bukkitPlayer.getBedSpawnLocation());
} else {
event.setRespawnLocation(bukkitPlayer.getWorld().getSpawnLocation());
}
event.setRespawnLocation(bukkitPlayer.getWorld().getSpawnLocation());
}
}
}
@ -88,24 +69,7 @@ public class PlayerEvents implements Listener {
}
Player bukkitPlayer = (Player) event.getDamager();
DominionDTO dom = Cache.instance.getDominion(event.getEntity().getLocation());
if (dom == null) {
return;
}
if (Apis.hasPermission(bukkitPlayer, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
if (privilege != null) {
if (privilege.getAnimalKilling()) {
return;
}
} else {
if (dom.getAnimalKilling()) {
return;
}
}
Dominion.notification.error(bukkitPlayer, "你没有动物击杀权限");
event.setCancelled(true);
checkFlag(dom, Flag.ANIMAL_KILLING, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // anvil
@ -118,24 +82,7 @@ public class PlayerEvents implements Listener {
}
Player bukkitPlayer = (Player) event.getPlayer();
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
if (dom == null) {
return;
}
if (Apis.hasPermission(bukkitPlayer, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
if (privilege != null) {
if (privilege.getAnvil()) {
return;
}
} else {
if (dom.getAnvil()) {
return;
}
}
Dominion.notification.error(bukkitPlayer, "你没有使用铁砧的权限");
event.setCancelled(true);
checkFlag(dom, Flag.ANVIL, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // beacon
@ -148,48 +95,14 @@ public class PlayerEvents implements Listener {
}
Player bukkitPlayer = (Player) event.getPlayer();
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
if (dom == null) {
return;
}
if (Apis.hasPermission(bukkitPlayer, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
if (privilege != null) {
if (privilege.getBeacon()) {
return;
}
} else {
if (dom.getBeacon()) {
return;
}
}
Dominion.notification.error(bukkitPlayer, "你没有使用信标的权限");
event.setCancelled(true);
checkFlag(dom, Flag.BEACON, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // bed
public void onBedUse(PlayerBedEnterEvent event) {
Player bukkitPlayer = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(event.getBed().getLocation());
if (dom == null) {
return;
}
if (Apis.hasPermission(bukkitPlayer, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
if (privilege != null) {
if (privilege.getBed()) {
return;
}
} else {
if (dom.getBed()) {
return;
}
}
Dominion.notification.error(bukkitPlayer, "你没有使用床的权限");
event.setCancelled(true);
checkFlag(dom, Flag.BED, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // brew
@ -202,24 +115,7 @@ public class PlayerEvents implements Listener {
}
Player bukkitPlayer = (Player) event.getPlayer();
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
if (dom == null) {
return;
}
if (Apis.hasPermission(bukkitPlayer, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
if (privilege != null) {
if (privilege.getBrew()) {
return;
}
} else {
if (dom.getBrew()) {
return;
}
}
Dominion.notification.error(bukkitPlayer, "你没有使用酿造台的权限");
event.setCancelled(true);
checkFlag(dom, Flag.BREW, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // break
@ -251,24 +147,7 @@ public class PlayerEvents implements Listener {
public static boolean onBreak(Player player, Location location) {
DominionDTO dom = Cache.instance.getDominion(location);
if (dom == null) {
return true;
}
if (Apis.hasPermission(player, dom)) {
return true;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getBreak()) {
return true;
}
} else {
if (dom.getBreak()) {
return true;
}
}
Dominion.notification.error(player, "你没有破坏方块的权限");
return false;
return checkFlag(dom, Flag.BREAK_BLOCK, player, null);
}
@EventHandler(priority = EventPriority.HIGHEST) // button
@ -294,24 +173,7 @@ public class PlayerEvents implements Listener {
return;
}
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
if (dom == null) {
return;
}
if (Apis.hasPermission(player, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getButton()) {
return;
}
} else {
if (dom.getButton()) {
return;
}
}
Dominion.notification.error(player, "你没有使用按钮的权限");
event.setCancelled(true);
checkFlag(dom, Flag.BUTTON, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // cake
@ -326,24 +188,7 @@ public class PlayerEvents implements Listener {
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
if (dom == null) {
return;
}
if (Apis.hasPermission(player, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getCake()) {
return;
}
} else {
if (dom.getCake()) {
return;
}
}
Dominion.notification.error(player, "你没有吃蛋糕权限");
event.setCancelled(true);
checkFlag(dom, Flag.CAKE, player, event);
}
// 检查是否有容器权限
@ -354,24 +199,7 @@ public class PlayerEvents implements Listener {
} else {
dom = Cache.instance.getDominion(loc);
}
if (dom == null) {
return true;
}
if (Apis.hasPermission(player, dom)) {
return true;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getContainer()) {
return true;
}
} else {
if (dom.getContainer()) {
return true;
}
}
Dominion.notification.error(player, "你没有使用容器/盔甲架/展示框的权限");
return false;
return checkFlag(dom, Flag.CONTAINER, player, null);
}
@EventHandler(priority = EventPriority.HIGHEST) // container
@ -440,24 +268,7 @@ public class PlayerEvents implements Listener {
}
Player bukkitPlayer = (Player) event.getPlayer();
DominionDTO dom = getInvDominion(bukkitPlayer, inv);
if (dom == null) {
return;
}
if (Apis.hasPermission(bukkitPlayer, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
if (privilege != null) {
if (privilege.getCraft()) {
return;
}
} else {
if (dom.getCraft()) {
return;
}
}
Dominion.notification.error(bukkitPlayer, "你没有使用工作台的权限");
event.setCancelled(true);
checkFlag(dom, Flag.CRAFT, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // comparer
@ -471,24 +282,7 @@ public class PlayerEvents implements Listener {
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(event.getClickedBlock().getLocation());
if (dom == null) {
return;
}
if (Apis.hasPermission(player, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getComparer()) {
return;
}
} else {
if (dom.getComparer()) {
return;
}
}
Dominion.notification.error(player, "你没有使用红石比较器的权限");
event.setCancelled(true);
checkFlag(dom, Flag.COMPARER, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // door
@ -536,24 +330,7 @@ public class PlayerEvents implements Listener {
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(event.getClickedBlock().getLocation());
if (dom == null) {
return;
}
if (Apis.hasPermission(player, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getDoor()) {
return;
}
} else {
if (dom.getDoor()) {
return;
}
}
Dominion.notification.error(player, "你没有使用门的权限");
event.setCancelled(true);
checkFlag(dom, Flag.DOOR, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // dye
@ -563,24 +340,7 @@ public class PlayerEvents implements Listener {
return;
}
DominionDTO dom = Cache.instance.getDominion(event.getEntity().getLocation());
if (dom == null) {
return;
}
if (Apis.hasPermission(player, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getDye()) {
return;
}
} else {
if (dom.getDye()) {
return;
}
}
Dominion.notification.error(player, "你没有染色的权限");
event.setCancelled(true);
checkFlag(dom, Flag.DYE, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // egg
@ -593,24 +353,7 @@ public class PlayerEvents implements Listener {
}
Player player = (Player) event.getEntity().getShooter();
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
if (dom == null) {
return;
}
if (Apis.hasPermission(player, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getEgg()) {
return;
}
} else {
if (dom.getEgg()) {
return;
}
}
Dominion.notification.error(player, "你没有扔鸡蛋的权限");
event.setCancelled(true);
checkFlag(dom, Flag.EGG, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // enchant
@ -623,24 +366,7 @@ public class PlayerEvents implements Listener {
}
Player bukkitPlayer = (Player) event.getPlayer();
DominionDTO dom = getInvDominion(bukkitPlayer, event.getInventory());
if (dom == null) {
return;
}
if (Apis.hasPermission(bukkitPlayer, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
if (privilege != null) {
if (privilege.getEnchant()) {
return;
}
} else {
if (dom.getEnchant()) {
return;
}
}
Dominion.notification.error(bukkitPlayer, "你没有使用附魔台的权限");
event.setCancelled(true);
checkFlag(dom, Flag.ENCHANT, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // ender_pearl
@ -653,24 +379,7 @@ public class PlayerEvents implements Listener {
}
Player player = (Player) event.getEntity().getShooter();
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
if (dom == null) {
return;
}
if (Apis.hasPermission(player, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getEnderPearl()) {
return;
}
} else {
if (dom.getEnderPearl()) {
return;
}
}
Dominion.notification.error(player, "你没有使用末影珍珠的权限");
event.setCancelled(true);
checkFlag(dom, Flag.ENDER_PEARL, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // feed
@ -680,24 +389,7 @@ public class PlayerEvents implements Listener {
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(event.getRightClicked().getLocation());
if (dom == null) {
return;
}
if (Apis.hasPermission(player, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getFeed()) {
return;
}
} else {
if (dom.getFeed()) {
return;
}
}
Dominion.notification.error(player, "你没有喂养动物的权限");
event.setCancelled(true);
checkFlag(dom, Flag.FEED, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // harvest
@ -723,24 +415,7 @@ public class PlayerEvents implements Listener {
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
if (dom == null) {
return;
}
if (Apis.hasPermission(player, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getHarvest()) {
return;
}
} else {
if (dom.getHarvest()) {
return;
}
}
Dominion.notification.error(player, "你没有收获的权限");
event.setCancelled(true);
checkFlag(dom, Flag.HARVEST, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // honey
@ -755,24 +430,7 @@ public class PlayerEvents implements Listener {
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
if (dom == null) {
return;
}
if (Apis.hasPermission(player, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getHoney()) {
return;
}
} else {
if (dom.getHoney()) {
return;
}
}
Dominion.notification.error(player, "你没有与蜜蜂交互的权限");
event.setCancelled(true);
checkFlag(dom, Flag.HONEY, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // hook
@ -783,24 +441,7 @@ public class PlayerEvents implements Listener {
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(caught.getLocation());
if (dom == null) {
return;
}
if (Apis.hasPermission(player, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getHook()) {
return;
}
} else {
if (dom.getHook()) {
return;
}
}
Dominion.notification.error(player, "你没有使用钓钩的权限");
event.setCancelled(true);
checkFlag(dom, Flag.HOOK, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // hopper
@ -819,24 +460,7 @@ public class PlayerEvents implements Listener {
}
Player bukkitPlayer = (Player) event.getPlayer();
DominionDTO dom = getInvDominion(bukkitPlayer, event.getInventory());
if (dom == null) {
return;
}
if (Apis.hasPermission(bukkitPlayer, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
if (privilege != null) {
if (privilege.getHopper()) {
return;
}
} else {
if (dom.getHopper()) {
return;
}
}
Dominion.notification.error(bukkitPlayer, "你没有使用漏斗/熔炉/发射器等特殊容器的权限");
event.setCancelled(true);
checkFlag(dom, Flag.HOPPER, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // ignite
@ -846,24 +470,7 @@ public class PlayerEvents implements Listener {
return;
}
DominionDTO dom = Cache.instance.getDominion(event.getBlock().getLocation());
if (dom == null) {
return;
}
if (Apis.hasPermission(player, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getIgnite()) {
return;
}
} else {
if (dom.getIgnite()) {
return;
}
}
Dominion.notification.error(player, "你没有点火的权限");
event.setCancelled(true);
checkFlag(dom, Flag.IGNITE, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // lever
@ -878,24 +485,7 @@ public class PlayerEvents implements Listener {
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
if (dom == null) {
return;
}
if (Apis.hasPermission(player, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getLever()) {
return;
}
} else {
if (dom.getLever()) {
return;
}
}
Dominion.notification.error(player, "你没有使用拉杆的权限");
event.setCancelled(true);
checkFlag(dom, Flag.LEVER, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // monster_killing
@ -910,48 +500,14 @@ public class PlayerEvents implements Listener {
}
Player bukkitPlayer = (Player) event.getDamager();
DominionDTO dom = Cache.instance.getDominion(entity.getLocation());
if (dom == null) {
return;
}
if (Apis.hasPermission(bukkitPlayer, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
if (privilege != null) {
if (privilege.getMonsterKilling()) {
return;
}
} else {
if (dom.getMonsterKilling()) {
return;
}
}
Dominion.notification.error(bukkitPlayer, "你没有击杀怪物的权限");
event.setCancelled(true);
checkFlag(dom, Flag.MONSTER_KILLING, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // move
public void onPlayerMove(PlayerMoveEvent event) {
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
if (dom == null) {
return;
}
if (Apis.hasPermission(player, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getMove()) {
return;
}
} else {
if (dom.getMove()) {
return;
}
}
Dominion.notification.error(player, "你没有移动的权限");
event.setCancelled(true);
checkFlag(dom, Flag.MOVE, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // place
@ -990,24 +546,7 @@ public class PlayerEvents implements Listener {
public static boolean onPlace(Player player, Location location) {
DominionDTO dom = Cache.instance.getDominion(location);
if (dom == null) {
return true;
}
if (Apis.hasPermission(player, dom)) {
return true;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getPlace()) {
return true;
}
} else {
if (dom.getPlace()) {
return true;
}
}
Dominion.notification.error(player, "你没有放置方块的权限");
return false;
return checkFlag(dom, Flag.PLACE, player, null);
}
@EventHandler(priority = EventPriority.HIGHEST) // pressure
@ -1036,24 +575,7 @@ public class PlayerEvents implements Listener {
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
if (dom == null) {
return;
}
if (Apis.hasPermission(player, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getPressure()) {
return;
}
} else {
if (dom.getPressure()) {
return;
}
}
Dominion.notification.error(player, "你没有使用压力板的权限");
event.setCancelled(true);
checkFlag(dom, Flag.PRESSURE, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // riding
@ -1063,24 +585,7 @@ public class PlayerEvents implements Listener {
}
Player player = (Player) event.getEntity();
DominionDTO dom = Cache.instance.getDominion(event.getMount().getLocation());
if (dom == null) {
return;
}
if (Apis.hasPermission(player, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getRiding()) {
return;
}
} else {
if (dom.getRiding()) {
return;
}
}
Dominion.notification.error(player, "你没有骑乘交通工具的权限");
event.setCancelled(true);
checkFlag(dom, Flag.RIDING, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // repeater
@ -1095,48 +600,14 @@ public class PlayerEvents implements Listener {
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
if (dom == null) {
return;
}
if (Apis.hasPermission(player, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getRepeater()) {
return;
}
} else {
if (dom.getRepeater()) {
return;
}
}
Dominion.notification.error(player, "你没有使用红石中继器的权限");
event.setCancelled(true);
checkFlag(dom, Flag.REPEATER, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // shear
public void onShear(PlayerShearEntityEvent event) {
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominion(event.getEntity().getLocation());
if (dom == null) {
return;
}
if (Apis.hasPermission(player, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getShear()) {
return;
}
} else {
if (dom.getShear()) {
return;
}
}
Dominion.notification.error(player, "你没有剪羊毛的权限");
event.setCancelled(true);
checkFlag(dom, Flag.SHEAR, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // shoot
@ -1151,24 +622,7 @@ public class PlayerEvents implements Listener {
}
Player player = (Player) event.getEntity().getShooter();
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
if (dom == null) {
return;
}
if (Apis.hasPermission(player, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getShoot()) {
return;
}
} else {
if (dom.getShoot()) {
return;
}
}
Dominion.notification.error(player, "你没有发射弓箭、三叉戟或雪球的权限");
event.setCancelled(true);
checkFlag(dom, Flag.SHOOT, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // trade
@ -1181,24 +635,7 @@ public class PlayerEvents implements Listener {
}
Player bukkitPlayer = (Player) event.getPlayer();
DominionDTO dom = getInvDominion(bukkitPlayer, event.getInventory());
if (dom == null) {
return;
}
if (Apis.hasPermission(bukkitPlayer, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(bukkitPlayer, dom);
if (privilege != null) {
if (privilege.getTrade()) {
return;
}
} else {
if (dom.getTrade()) {
return;
}
}
Dominion.notification.error(bukkitPlayer, "你没有交易的权限");
event.setCancelled(true);
checkFlag(dom, Flag.TRADE, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // vehicle_destroy
@ -1208,24 +645,7 @@ public class PlayerEvents implements Listener {
}
Player player = (Player) event.getAttacker();
DominionDTO dom = Cache.instance.getDominion(event.getVehicle().getLocation());
if (dom == null) {
return;
}
if (Apis.hasPermission(player, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getVehicleDestroy()) {
return;
}
} else {
if (dom.getVehicleDestroy()) {
return;
}
}
Dominion.notification.error(player, "你没有破坏交通工具的权限");
event.setCancelled(true);
checkFlag(dom, Flag.VEHICLE_DESTROY, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // vehicle_spawn
@ -1239,23 +659,6 @@ public class PlayerEvents implements Listener {
return;
}
DominionDTO dom = Cache.instance.getDominion(entity.getLocation());
if (dom == null) {
return;
}
if (Apis.hasPermission(player, dom)) {
return;
}
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
if (privilege.getVehicleSpawn()) {
return;
}
} else {
if (dom.getVehicleSpawn()) {
return;
}
}
Dominion.notification.error(player, "你没有放置交通工具的权限");
event.setCancelled(true);
checkFlag(dom, Flag.VEHICLE_SPAWN, player, event);
}
}

View File

@ -40,7 +40,7 @@ public class DominionFlagInfo {
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
.append("权限列表"));
for (Flag flag : Flag.getDominionFlags()) {
for (Flag flag : Flag.getDominionFlagsEnabled()) {
view.add(createOption(flag, dominion.getFlagValue(flag), dominion.getName(), page));
}
view.showOn(player, page);

View File

@ -2,11 +2,13 @@ package cn.lunadeer.dominion.tuis;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag;
import cn.lunadeer.dominion.dtos.PlayerDTO;
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
import cn.lunadeer.minecraftpluginutils.stui.ListView;
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
import net.kyori.adventure.text.Component;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -62,339 +64,21 @@ public class PrivilegeInfo {
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " admin true " + dominion.getName() + " " + page).build())
.append("管理员"));
}
if (privilege.getAnchor()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " anchor false " + dominion.getName() + " " + page).build())
.append("重生锚"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " anchor true " + dominion.getName() + " " + page).build())
.append("重生锚"));
}
if (privilege.getAnimalKilling()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " animal_killing false " + dominion.getName() + " " + page).build())
.append("动物伤害"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " animal_killing true " + dominion.getName() + " " + page).build())
.append("动物伤害"));
}
if (privilege.getAnvil()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " anvil false " + dominion.getName() + " " + page).build())
.append("使用铁砧"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " anvil true " + dominion.getName() + " " + page).build())
.append("使用铁砧"));
}
if (privilege.getBeacon()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " beacon false " + dominion.getName() + " " + page).build())
.append("信标交互"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " beacon true " + dominion.getName() + " " + page).build())
.append("信标交互"));
}
if (privilege.getBed()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " bed false " + dominion.getName() + " " + page).build())
.append("床交互"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " bed true " + dominion.getName() + " " + page).build())
.append("床交互"));
}
if (privilege.getBrew()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " brew false " + dominion.getName() + " " + page).build())
.append("使用酿造台"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " brew true " + dominion.getName() + " " + page).build())
.append("使用酿造台"));
}
if (privilege.getBreak()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " break false " + dominion.getName() + " " + page).build())
.append("破坏方块"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " break true " + dominion.getName() + " " + page).build())
.append("破坏方块"));
}
if (privilege.getButton()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " button false " + dominion.getName() + " " + page).build())
.append("使用按钮"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " button true " + dominion.getName() + " " + page).build())
.append("使用按钮"));
}
if (privilege.getCake()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " cake false " + dominion.getName() + " " + page).build())
.append("使用蛋糕"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " cake true " + dominion.getName() + " " + page).build())
.append("使用蛋糕"));
}
if (privilege.getContainer()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " container false " + dominion.getName() + " " + page).build())
.append("箱子/木桶/潜影盒/盔甲架/展示框"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " container true " + dominion.getName() + " " + page).build())
.append("箱子/木桶/潜影盒/盔甲架/展示框"));
}
if (privilege.getCraft()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " craft false " + dominion.getName() + " " + page).build())
.append("使用工作台"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " craft true " + dominion.getName() + " " + page).build())
.append("使用工作台"));
}
if (privilege.getComparer()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " comparer false " + dominion.getName() + " " + page).build())
.append("比较器交互"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " comparer true " + dominion.getName() + " " + page).build())
.append("比较器交互"));
}
if (privilege.getDoor()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " door false " + dominion.getName() + " " + page).build())
.append("门交互"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " door true " + dominion.getName() + " " + page).build())
.append("门交互"));
}
if (privilege.getDye()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " dye false " + dominion.getName() + " " + page).build())
.append("染色"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " dye true " + dominion.getName() + " " + page).build())
.append("染色"));
}
if (privilege.getEgg()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " egg false " + dominion.getName() + " " + page).build())
.append("投掷鸡蛋"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " egg true " + dominion.getName() + " " + page).build())
.append("投掷鸡蛋"));
}
if (privilege.getEnchant()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " enchant false " + dominion.getName() + " " + page).build())
.append("使用附魔台"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " enchant true " + dominion.getName() + " " + page).build())
.append("使用附魔台"));
}
if (privilege.getEnderPearl()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " ender_pearl false " + dominion.getName() + " " + page).build())
.append("投掷末影珍珠"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " ender_pearl true " + dominion.getName() + " " + page).build())
.append("投掷末影珍珠"));
}
if (privilege.getFeed()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " feed false " + dominion.getName() + " " + page).build())
.append("喂食"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " feed true " + dominion.getName() + " " + page).build())
.append("喂食"));
}
if (privilege.getGlow()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " glow false " + dominion.getName() + " " + page).build())
.append("发光"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " glow true " + dominion.getName() + " " + page).build())
.append("发光"));
}
if (privilege.getHarvest()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " harvest false " + dominion.getName() + " " + page).build())
.append("收获"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " harvest true " + dominion.getName() + " " + page).build())
.append("收获"));
}
if (privilege.getHoney()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " honey false " + dominion.getName() + " " + page).build())
.append("蜂巢交互"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " honey true " + dominion.getName() + " " + page).build())
.append("蜂巢交互"));
}
if (privilege.getHook()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " hook false " + dominion.getName() + " " + page).build())
.append("使用钓钩"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " hook true " + dominion.getName() + " " + page).build())
.append("使用钓钩"));
}
if (privilege.getHopper()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " hopper false " + dominion.getName() + " " + page).build())
.append("漏斗/熔炉/发射器等特殊容器"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " hopper true " + dominion.getName() + " " + page).build())
.append("漏斗/熔炉/发射器等特殊容器"));
}
if (privilege.getIgnite()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " ignite false " + dominion.getName() + " " + page).build())
.append("点燃"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " ignite true " + dominion.getName() + " " + page).build())
.append("点燃"));
}
if (privilege.getLever()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " lever false " + dominion.getName() + " " + page).build())
.append("使用拉杆"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " lever true " + dominion.getName() + " " + page).build())
.append("使用拉杆"));
}
if (privilege.getMonsterKilling()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " monster_killing false " + dominion.getName() + " " + page).build())
.append("怪物伤害"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " monster_killing true " + dominion.getName() + " " + page).build())
.append("怪物伤害"));
}
if (privilege.getMove()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " move false " + dominion.getName() + " " + page).build())
.append("玩家移动"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " move true " + dominion.getName() + " " + page).build())
.append("玩家移动"));
}
if (privilege.getPlace()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " place false " + dominion.getName() + " " + page).build())
.append("放置方块"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " place true " + dominion.getName() + " " + page).build())
.append("放置方块"));
}
if (privilege.getPressure()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " pressure false " + dominion.getName() + " " + page).build())
.append("压力板交互"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " pressure true " + dominion.getName() + " " + page).build())
.append("压力板交互"));
}
if (privilege.getRiding()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " riding false " + dominion.getName() + " " + page).build())
.append("骑乘载具"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " riding true " + dominion.getName() + " " + page).build())
.append("骑乘载具"));
}
if (privilege.getRepeater()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " repeater false " + dominion.getName() + " " + page).build())
.append("中继器交互"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " repeater true " + dominion.getName() + " " + page).build())
.append("中继器交互"));
}
if (privilege.getShear()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " shear false " + dominion.getName() + " " + page).build())
.append("剪羊毛"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " shear true " + dominion.getName() + " " + page).build())
.append("剪羊毛"));
}
if (privilege.getShoot()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " shoot false " + dominion.getName() + " " + page).build())
.append("射箭/雪球/三叉戟"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " shoot true " + dominion.getName() + " " + page).build())
.append("射箭/雪球/三叉戟"));
}
if (privilege.getTeleport()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " teleport false " + dominion.getName() + " " + page).build())
.append("领地传送"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " teleport true " + dominion.getName() + " " + page).build())
.append("领地传送"));
}
if (privilege.getTrade()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " trade false " + dominion.getName() + " " + page).build())
.append("交易"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " trade true " + dominion.getName() + " " + page).build())
.append("交易"));
}
if (privilege.getVehicleDestroy()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " vehicle_destroy false " + dominion.getName() + " " + page).build())
.append("破坏载具"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " vehicle_destroy true " + dominion.getName() + " " + page).build())
.append("破坏载具"));
}
if (privilege.getVehicleSpawn()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " vehicle_spawn false " + dominion.getName() + " " + page).build())
.append("放置载具"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " vehicle_spawn true " + dominion.getName() + " " + page).build())
.append("放置载具"));
for (Flag flag : Flag.getPrivilegeFlagsEnabled()) {
view.add(createOption(flag, privilege.getFlagValue(flag), playerName, dominion.getName(), page));
}
view.showOn(player, page);
}
private static Line createOption(Flag flag, boolean value, String player_name, String dominion_name, int page) {
if (value) {
return Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + player_name + " " + flag.getFlagName() + " false " + dominion_name + " " + page).build())
.append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription())));
} else {
return Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + player_name + " " + flag.getFlagName() + " true " + dominion_name + " " + page).build())
.append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription())));
}
}
}