From 52e87c6e79732e930d37a5d2323997a38938f7a6 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Thu, 15 Feb 2024 02:49:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E5=88=9D=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/cn/lunadeer/dominion/Cache.java | 42 + .../java/cn/lunadeer/dominion/Dominion.java | 2 + .../cn/lunadeer/dominion/commands/Helper.java | 41 +- .../dominion/controllers/FlagsController.java | 10 +- .../controllers/PrivilegeController.java | 42 +- .../lunadeer/dominion/dtos/DominionDTO.java | 129 +- .../dominion/dtos/PlayerPrivilegeDTO.java | 152 ++- .../cn/lunadeer/dominion/events/Apis.java | 22 + .../dominion/events/EnvironmentEvents.java | 103 ++ .../dominion/events/PlayerEvents.java | 1037 ++++++++++++++++- .../dominion/tuis/DominionFlagInfo.java | 82 +- .../lunadeer/dominion/tuis/PrivilegeInfo.java | 81 +- .../cn/lunadeer/dominion/utils/Database.java | 23 +- 13 files changed, 1587 insertions(+), 179 deletions(-) create mode 100644 src/main/java/cn/lunadeer/dominion/events/Apis.java create mode 100644 src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java diff --git a/src/main/java/cn/lunadeer/dominion/Cache.java b/src/main/java/cn/lunadeer/dominion/Cache.java index d27134d..d2185d0 100644 --- a/src/main/java/cn/lunadeer/dominion/Cache.java +++ b/src/main/java/cn/lunadeer/dominion/Cache.java @@ -4,6 +4,7 @@ import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; import cn.lunadeer.dominion.utils.Notification; import cn.lunadeer.dominion.utils.XLogger; +import org.bukkit.Location; import org.bukkit.entity.Player; import javax.annotation.Nullable; @@ -64,6 +65,10 @@ public class Cache { DominionDTO dominion = player_current_dominion.get(player.getUniqueId()); if (dominion != null) { if (!isInDominion(dominion, player)) { + // glow + if (player.isGlowing()) { + player.setGlowing(false); + } Notification.info(player, "您已离开领地:" + dominion.getName()); Notification.info(player, dominion.getLeaveMessage()); player_current_dominion.put(player.getUniqueId(), null); @@ -84,12 +89,42 @@ public class Cache { in_dominions.sort(Comparator.comparingInt(DominionDTO::getId)); dominion = in_dominions.get(in_dominions.size() - 1); player_current_dominion.put(player.getUniqueId(), dominion); + // glow + PlayerPrivilegeDTO privilege = getPlayerPrivilege(player, dominion); + if (privilege != null) { + if (privilege.getGlow()) { + if (player.isGlowing()) { + player.setGlowing(true); + } + } + } else { + if (dominion.getGlow()) { + if (player.isGlowing()) { + player.setGlowing(true); + } + } + } Notification.info(player, "您正在进入领地:" + dominion.getName()); Notification.info(player, dominion.getJoinMessage()); } return dominion; } + public DominionDTO getDominion(Location loc) { + String world = loc.getWorld().getName(); + List dominions = world_dominions.get(world); + if (dominions == null) return null; + List in_dominions = new ArrayList<>(); + for (DominionDTO d : dominions) { + if (isInDominion(d, loc.getX(), loc.getY(), loc.getZ())) { + in_dominions.add(d); + } + } + if (in_dominions.size() == 0) return null; + in_dominions.sort(Comparator.comparingInt(DominionDTO::getId)); + return in_dominions.get(in_dominions.size() - 1); + } + /** * 获取玩家在指定领地的特权 * 如果玩家不存在特权,则返回null @@ -113,6 +148,13 @@ public class Cache { z >= dominion.getZ1() && z <= dominion.getZ2(); } + private static boolean isInDominion(@Nullable DominionDTO dominion, double x, double y, double z) { + if (dominion == null) return false; + return x >= dominion.getX1() && x <= dominion.getX2() && + y >= dominion.getY1() && y <= dominion.getY2() && + z >= dominion.getZ1() && z <= dominion.getZ2(); + } + public static Cache instance; private Map> world_dominions; // 所有领地 private Map> player_uuid_to_privilege; // 玩家所有的特权 diff --git a/src/main/java/cn/lunadeer/dominion/Dominion.java b/src/main/java/cn/lunadeer/dominion/Dominion.java index d3ef5ac..1d63b7d 100644 --- a/src/main/java/cn/lunadeer/dominion/Dominion.java +++ b/src/main/java/cn/lunadeer/dominion/Dominion.java @@ -1,5 +1,6 @@ package cn.lunadeer.dominion; +import cn.lunadeer.dominion.events.EnvironmentEvents; import cn.lunadeer.dominion.events.PlayerEvents; import cn.lunadeer.dominion.utils.ConfigManager; import cn.lunadeer.dominion.utils.Database; @@ -23,6 +24,7 @@ public final class Dominion extends JavaPlugin { Cache.instance = new Cache(); Bukkit.getPluginManager().registerEvents(new PlayerEvents(), this); + Bukkit.getPluginManager().registerEvents(new EnvironmentEvents(), this); Objects.requireNonNull(Bukkit.getPluginCommand("dominion")).setExecutor(new Commands()); XLogger.info("领地插件已启动"); diff --git a/src/main/java/cn/lunadeer/dominion/commands/Helper.java b/src/main/java/cn/lunadeer/dominion/commands/Helper.java index b53fb4b..dd4131b 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Helper.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Helper.java @@ -15,19 +15,42 @@ public class Helper { public static List dominionFlags() { return Arrays.asList( - "anchor", "animal_killing", "anvil", "beacon", "bed", "brew", "button", "cake", "container", "craft", - "creeper_explode", "diode", "door", "dye", "egg", "enchant", "ender_pearl", "feed", "fire_spread", - "flow_in_protection", "glow", "grow", "honey", "hook", "ignite", "mob_killing", "move", "place", - "pressure", "riding", "shear", "shoot", "tnt_explode", "trade", "vehicle_destroy", "wither_spawn", - "harvest"); + "anchor", "animal_killing", "anvil", + "beacon", "bed", "brew", "break", "button", + "cake", "container", "craft", "creeper_explode", "comparer", + "door", "dye", + "egg", "enchant", "ender_pearl", + "feed", "fire_spread", "flow_in_protection", + "glow", + "honey", "hook", "harvest", + "ignite", + "lever", + "monster_killing", "move", + "place", "pressure", + "riding", "repeater", + "shear", "shoot", + "tnt_explode", "trade", + "vehicle_destroy", + "wither_spawn"); } public static List playerPrivileges() { return Arrays.asList( - "admin", "anchor", "animal_killing", "anvil", "beacon", "bed", "brew", "button", "cake", "container", "craft", - "diode", "door", "dye", "egg", "enchant", "ender_pearl", "feed", "glow", "honey", "hook", "ignite", - "mob_killing", "move", "place", "pressure", "riding", "shear", "shoot", "trade", "vehicle_destroy", - "harvest"); + "admin", "anchor", "animal_killing", "anvil", + "beacon", "bed", "brew", "break", "button", + "cake", "container", "craft", "comparer", + "door", "dye", + "egg", "enchant", "ender_pearl", + "feed", + "glow", + "honey", "hook", "harvest", + "ignite", + "lever", + "monster_killing", "move", + "place", "pressure", "riding", "repeater", + "shear", "shoot", + "trade", + "vehicle_destroy"); } public static List playerDominions(CommandSender sender) { diff --git a/src/main/java/cn/lunadeer/dominion/controllers/FlagsController.java b/src/main/java/cn/lunadeer/dominion/controllers/FlagsController.java index 6e7f3c0..3ab5959 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/FlagsController.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/FlagsController.java @@ -43,12 +43,13 @@ public class FlagsController { 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 "diode": return dominion.setDiode(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); @@ -58,22 +59,23 @@ public class FlagsController { case "fire_spread": return dominion.setFireSpread(value); case "flow_in_protection": return dominion.setFlowInProtection(value); case "glow": return dominion.setGlow(value); - case "grow": return dominion.setGrow(value); + case "harvest": return dominion.setHarvest(value); case "honey": return dominion.setHoney(value); case "hook": return dominion.setHook(value); case "ignite": return dominion.setIgnite(value); - case "mob_killing": return dominion.setMobKilling(value); + case "lever": return dominion.setLever(value); + case "mob_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 "tnt_explode": return dominion.setTntExplode(value); case "trade": return dominion.setTrade(value); case "vehicle_destroy": return dominion.setVehicleDestroy(value); case "wither_spawn": return dominion.setWitherSpawn(value); - case "harvest": return dominion.setHarvest(value); default: Notification.error(operator, "未知的领地权限 " + flag); return null; diff --git a/src/main/java/cn/lunadeer/dominion/controllers/PrivilegeController.java b/src/main/java/cn/lunadeer/dominion/controllers/PrivilegeController.java index e385f97..a52043b 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/PrivilegeController.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/PrivilegeController.java @@ -77,7 +77,7 @@ public class PrivilegeController { public static boolean setPrivilege(Player operator, String player_name, String flag, boolean value, String dominionName) { DominionDTO dominion = DominionDTO.select(dominionName); if (dominion == null) { - Notification.error(operator, "领地 " + dominionName + " 不存在"); + Notification.error(operator, "领地 " + dominionName + " 不存在,无法设置特权"); return false; } if (noAuthToChangeFlags(operator, dominion)) return false; @@ -88,7 +88,7 @@ public class PrivilegeController { } PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId()); if (privilege == null) { - privilege = createPlayerPrivilege(operator, player.getUuid(), dominion.getId()); + privilege = createPlayerPrivilege(operator, player.getUuid(), dominion); if (privilege == null) return false; } switch (flag) { @@ -110,6 +110,9 @@ public class PrivilegeController { case "brew": privilege.setBrew(value); break; + case "break": + privilege.setBreak(value); + break; case "button": privilege.setButton(value); break; @@ -122,8 +125,8 @@ public class PrivilegeController { case "craft": privilege.setCraft(value); break; - case "diode": - privilege.setDiode(value); + case "comparer": + privilege.setComparer(value); break; case "door": privilege.setDoor(value); @@ -146,6 +149,9 @@ public class PrivilegeController { case "glow": privilege.setGlow(value); break; + case "harvest": + privilege.setHarvest(value); + break; case "honey": privilege.setHoney(value); break; @@ -156,7 +162,7 @@ public class PrivilegeController { privilege.setIgnite(value); break; case "mob_killing": - privilege.setMobKilling(value); + privilege.setMonsterKilling(value); break; case "move": privilege.setMove(value); @@ -170,6 +176,9 @@ public class PrivilegeController { case "riding": privilege.setRiding(value); break; + case "repeater": + privilege.setRepeater(value); + break; case "shear": privilege.setShear(value); break; @@ -182,9 +191,6 @@ public class PrivilegeController { case "vehicle_destroy": privilege.setVehicleDestroy(value); break; - case "harvest": - privilege.setHarvest(value); - break; default: Notification.error(operator, "未知的领地权限 " + flag); return false; @@ -193,8 +199,24 @@ public class PrivilegeController { return true; } - private static PlayerPrivilegeDTO createPlayerPrivilege(Player operator, UUID player, Integer domID) { - PlayerPrivilegeDTO privilege = new PlayerPrivilegeDTO(player, false, domID); + private static PlayerPrivilegeDTO createPlayerPrivilege(Player operator, UUID player, DominionDTO dom) { + 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.getHoney(), dom.getHook(), + dom.getIgnite(), + dom.getLever(), + dom.getMonsterKilling(), dom.getMove(), + dom.getPlace(), dom.getPressure(), + dom.getRiding(), dom.getRepeater(), + dom.getShear(), dom.getShoot(), + dom.getTrade(), + dom.getVehicleDestroy(), dom.getHarvest()); privilege = PlayerPrivilegeDTO.insert(privilege); if (privilege == null) { Notification.error(operator, "创建玩家特权关联玩家时失败"); diff --git a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java index 691ceaa..6a43fba 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java @@ -37,12 +37,13 @@ public class DominionDTO { 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("diode"), + rs.getBoolean("comparer"), rs.getBoolean("door"), rs.getBoolean("dye"), rs.getBoolean("egg"), @@ -52,22 +53,24 @@ public class DominionDTO { rs.getBoolean("fire_spread"), rs.getBoolean("flow_in_protection"), rs.getBoolean("glow"), - rs.getBoolean("grow"), + rs.getBoolean("harvest"), rs.getBoolean("honey"), rs.getBoolean("hook"), rs.getBoolean("ignite"), - rs.getBoolean("mob_killing"), + 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("tnt_explode"), rs.getBoolean("trade"), rs.getBoolean("vehicle_destroy"), - rs.getBoolean("wither_spawn"), - rs.getBoolean("harvest")); + rs.getBoolean("wither_spawn") + ); dominions.add(dominion); } if (sql.contains("UPDATE") || sql.contains("DELETE") || sql.contains("INSERT")) { @@ -178,12 +181,13 @@ public class DominionDTO { "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 - "diode = " + dominion.getDiode() + ", " + + "comparer = " + dominion.getComparer() + ", " + "door = " + dominion.getDoor() + ", " + "dye = " + dominion.getDye() + ", " + "egg = " + dominion.getEgg() + ", " + @@ -193,22 +197,23 @@ public class DominionDTO { "fire_spread = " + dominion.getFireSpread() + ", " + // dom only "flow_in_protection = " + dominion.getFlowInProtection() + ", " + // dom only "glow = " + dominion.getGlow() + ", " + - "grow = " + dominion.getGrow() + ", " + + "harvest = " + dominion.getHarvest() + ", " + "honey = " + dominion.getHoney() + ", " + "hook = " + dominion.getHook() + ", " + "ignite = " + dominion.getIgnite() + ", " + - "mob_killing = " + dominion.getMobKilling() + ", " + + "lever = " + dominion.getLever() + ", " + + "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() + ", " + "tnt_explode = " + dominion.getTntExplode() + ", " + // dom only "trade = " + dominion.getTrade() + ", " + "vehicle_destroy = " + dominion.getVehicleDestroy() + ", " + - "wither_spawn = " + dominion.getWitherSpawn() + ", " + // dom only - "harvest = " + dominion.getHarvest() + + "wither_spawn = " + dominion.getWitherSpawn() + " " + // dom only " WHERE id = " + dominion.getId() + " RETURNING *;"; List dominions = query(sql); @@ -221,14 +226,22 @@ public class DominionDTO { Integer parentDomId, String joinMessage, String leaveMessage, Boolean anchor, Boolean animalKilling, Boolean anvil, - Boolean beacon, Boolean bed, Boolean brew, Boolean button, Boolean cake, - Boolean container, Boolean craft, Boolean creeperExplode, Boolean diode, - Boolean door, Boolean dye, Boolean egg, Boolean enchant, Boolean enderPearl, - Boolean feed, Boolean fireSpread, Boolean flowInProtection, Boolean glow, - Boolean grow, Boolean honey, Boolean hook, Boolean ignite, Boolean mobKilling, - Boolean move, Boolean place, Boolean pressure, Boolean riding, Boolean shear, - Boolean shoot, Boolean tntExplode, Boolean trade, Boolean vehicleDestroy, - Boolean witherSpawn, Boolean harvest) { + 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 enderPearl, + Boolean feed, Boolean fireSpread, Boolean flowInProtection, + Boolean glow, + Boolean harvest, Boolean honey, Boolean hook, + Boolean ignite, + Boolean lever, + Boolean monsterKilling, Boolean move, + Boolean place, Boolean pressure, + Boolean riding, Boolean repeater, + Boolean shear, Boolean shoot, + Boolean tntExplode, Boolean trade, + Boolean vehicleDestroy, + Boolean witherSpawn) { this.id = id; this.owner = owner; this.name = name; @@ -248,12 +261,13 @@ public class DominionDTO { 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.diode = diode; + this.comparer = comparer; this.door = door; this.dye = dye; this.egg = egg; @@ -263,22 +277,23 @@ public class DominionDTO { this.fireSpread = fireSpread; this.flowInProtection = flowInProtection; this.glow = glow; - this.grow = grow; + this.harvest = harvest; this.honey = honey; this.hook = hook; this.ignite = ignite; - this.mobKilling = mobKilling; + 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.tntExplode = tntExplode; this.trade = trade; this.vehicleDestroy = vehicleDestroy; this.witherSpawn = witherSpawn; - this.harvest = harvest; } @@ -287,13 +302,13 @@ public class DominionDTO { Integer parentDomId) { this(id, owner, name, world, x1, y1, z1, x2, y2, z2, parentDomId, "欢迎", "再见", - false, false, false, false, - false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, true, + false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false); + false, false, false, false, true, + true, false, false, false, false, false, + false, true, false, false, false, false, + false, false, false, false, false, false); } public DominionDTO(UUID owner, String name, String world, @@ -320,12 +335,13 @@ public class DominionDTO { 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 diode = false; + private Boolean comparer = false; private Boolean door = false; private Boolean dye = false; private Boolean egg = false; @@ -335,15 +351,16 @@ public class DominionDTO { private Boolean fireSpread = false; private Boolean flowInProtection = false; private Boolean glow = false; - private Boolean grow = false; private Boolean honey = false; private Boolean hook = false; private Boolean ignite = false; - private Boolean mobKilling = false; + private Boolean lever = false; + 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 tntExplode = false; @@ -514,6 +531,15 @@ public class DominionDTO { return update(this); } + public Boolean getBreak() { + return breakBlock; + } + + public DominionDTO setBreak(Boolean breakBlock) { + this.breakBlock = breakBlock; + return update(this); + } + public Boolean getButton() { return button; } @@ -559,12 +585,12 @@ public class DominionDTO { return update(this); } - public Boolean getDiode() { - return diode; + public Boolean getComparer() { + return comparer; } - public DominionDTO setDiode(Boolean diode) { - this.diode = diode; + public DominionDTO setComparer(Boolean comparer) { + this.comparer = comparer; return update(this); } @@ -649,15 +675,6 @@ public class DominionDTO { return update(this); } - public Boolean getGrow() { - return grow; - } - - public DominionDTO setGrow(Boolean grow) { - this.grow = grow; - return update(this); - } - public Boolean getHoney() { return honey; } @@ -685,12 +702,21 @@ public class DominionDTO { return update(this); } - public Boolean getMobKilling() { - return mobKilling; + public Boolean getLever() { + return lever; } - public DominionDTO setMobKilling(Boolean mobKilling) { - this.mobKilling = mobKilling; + public DominionDTO setLever(Boolean lever) { + this.lever = lever; + return update(this); + } + + public Boolean getMonsterKilling() { + return monsterKilling; + } + + public DominionDTO setMonsterKilling(Boolean monsterKilling) { + this.monsterKilling = monsterKilling; return update(this); } @@ -730,6 +756,15 @@ public class DominionDTO { return update(this); } + public Boolean getRepeater() { + return repeater; + } + + public DominionDTO setRepeater(Boolean repeater) { + this.repeater = repeater; + return update(this); + } + public Boolean getShear() { return shear; } diff --git a/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java index a6961a8..b647aa4 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java @@ -25,7 +25,7 @@ public class PlayerPrivilegeDTO { public static PlayerPrivilegeDTO select(UUID playerUUID, Integer dom_id) { String sql = "SELECT * FROM player_privilege WHERE player_uuid = '" + playerUUID + "' " + "AND dom_id = " + dom_id + ";"; - List p = query(sql); + List p = query(sql); if (p.size() == 0) return null; return p.get(0); } @@ -41,7 +41,7 @@ public class PlayerPrivilegeDTO { query(sql); } - public static List selectAll(){ + public static List selectAll() { String sql = "SELECT * FROM player_privilege;"; return query(sql); } @@ -56,11 +56,12 @@ public class PlayerPrivilegeDTO { 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 diode; + private Boolean comparer; private Boolean door; private Boolean dye; private Boolean egg; @@ -71,11 +72,13 @@ public class PlayerPrivilegeDTO { private Boolean honey; private Boolean hook; private Boolean ignite; - private Boolean mobKilling; + 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 trade; @@ -122,6 +125,10 @@ public class PlayerPrivilegeDTO { return brew; } + public Boolean getBreak() { + return breakBlock; + } + public Boolean getButton() { return button; } @@ -138,8 +145,8 @@ public class PlayerPrivilegeDTO { return craft; } - public Boolean getDiode() { - return diode; + public Boolean getComparer() { + return comparer; } public Boolean getDoor() { @@ -182,8 +189,12 @@ public class PlayerPrivilegeDTO { return ignite; } - public Boolean getMobKilling() { - return mobKilling; + public Boolean getLever() { + return lever; + } + + public Boolean getMonsterKilling() { + return monsterKilling; } public Boolean getMove() { @@ -202,6 +213,10 @@ public class PlayerPrivilegeDTO { return riding; } + public Boolean getRepeater() { + return repeater; + } + public Boolean getShear() { return shear; } @@ -252,6 +267,11 @@ public class PlayerPrivilegeDTO { 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); @@ -272,8 +292,8 @@ public class PlayerPrivilegeDTO { return update(this); } - public PlayerPrivilegeDTO setDiode(Boolean diode) { - this.diode = diode; + public PlayerPrivilegeDTO setComparer(Boolean comparer) { + this.comparer = comparer; return update(this); } @@ -327,8 +347,13 @@ public class PlayerPrivilegeDTO { return update(this); } - public PlayerPrivilegeDTO setMobKilling(Boolean mobKilling) { - this.mobKilling = mobKilling; + public PlayerPrivilegeDTO setLever(Boolean lever) { + this.lever = lever; + return update(this); + } + + public PlayerPrivilegeDTO setMonsterKilling(Boolean monsterKilling) { + this.monsterKilling = monsterKilling; return update(this); } @@ -352,6 +377,11 @@ public class PlayerPrivilegeDTO { 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); @@ -384,12 +414,21 @@ public class PlayerPrivilegeDTO { private PlayerPrivilegeDTO(Integer id, UUID playerUUID, Boolean admin, Integer domID, Boolean anchor, Boolean animalKilling, Boolean anvil, - Boolean beacon, Boolean bed, Boolean brew, Boolean button, Boolean cake, - Boolean container, Boolean craft, Boolean diode, Boolean door, Boolean dye, - Boolean egg, Boolean enchant, Boolean enderPearl, Boolean feed, Boolean glow, - Boolean honey, Boolean hook, Boolean ignite, Boolean mobKilling, Boolean move, - Boolean place, Boolean pressure, Boolean riding, Boolean shear, Boolean shoot, - Boolean trade, Boolean vehicleDestroy, Boolean harvest) { + 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 ignite, + Boolean lever, + Boolean monsterKilling, Boolean move, + Boolean place, Boolean pressure, + Boolean riding, Boolean repeater, + Boolean shear, Boolean shoot, + Boolean trade, + Boolean vehicleDestroy) { this.id = id; this.playerUUID = playerUUID; this.admin = admin; @@ -400,11 +439,12 @@ public class PlayerPrivilegeDTO { 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.diode = diode; + this.comparer = comparer; this.door = door; this.dye = dye; this.egg = egg; @@ -412,30 +452,58 @@ public class PlayerPrivilegeDTO { this.enderPearl = enderPearl; this.feed = feed; this.glow = glow; + this.harvest = harvest; this.honey = honey; this.hook = hook; this.ignite = ignite; - this.mobKilling = mobKilling; + 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.trade = trade; this.vehicleDestroy = vehicleDestroy; - this.harvest = harvest; } - public PlayerPrivilegeDTO(UUID playerUUID, Boolean admin, Integer domID) { - this(null, playerUUID, admin, domID, - false, false, false, - false, false, false, false, false, - false, false, false, false, false, - false, false, false, false, false, - false, false, false, false, false, - false, false, false, false, false, - false, false, false); + 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 ignite, + Boolean lever, + Boolean monsterKilling, Boolean move, + Boolean place, Boolean pressure, + Boolean riding, Boolean repeater, + Boolean shear, Boolean shoot, + Boolean trade, + Boolean vehicleDestroy + ) { + 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, + ignite, + lever, + monsterKilling, move, + place, pressure, + riding, repeater, + shear, shoot, + trade, + vehicleDestroy); } private static List query(String sql) { @@ -454,11 +522,12 @@ public class PlayerPrivilegeDTO { 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("diode"), + rs.getBoolean("comparer"), rs.getBoolean("door"), rs.getBoolean("dye"), rs.getBoolean("egg"), @@ -466,23 +535,25 @@ public class PlayerPrivilegeDTO { rs.getBoolean("ender_pearl"), rs.getBoolean("feed"), rs.getBoolean("glow"), + rs.getBoolean("harvest"), rs.getBoolean("honey"), rs.getBoolean("hook"), rs.getBoolean("ignite"), - rs.getBoolean("mob_killing"), + 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("trade"), - rs.getBoolean("vehicle_destroy"), - rs.getBoolean("harvest") + rs.getBoolean("vehicle_destroy") ); players.add(player); } - if (sql.contains("UPDATE") || sql.contains("DELETE") || sql.contains("INSERT")){ + if (sql.contains("UPDATE") || sql.contains("DELETE") || sql.contains("INSERT")) { // 如果是更新操作,重新加载缓存 Cache.instance.loadPlayerPrivileges(); } @@ -503,11 +574,12 @@ public class PlayerPrivilegeDTO { "beacon = " + player.getBeacon() + ", " + "bed = " + player.getBed() + ", " + "brew = " + player.getBrew() + ", " + + "break = " + player.getBreak() + ", " + "button = " + player.getButton() + ", " + "cake = " + player.getCake() + ", " + "container = " + player.getContainer() + ", " + "craft = " + player.getCraft() + ", " + - "diode = " + player.getDiode() + ", " + + "comparer = " + player.getComparer() + ", " + "door = " + player.getDoor() + ", " + "dye = " + player.getDye() + ", " + "egg = " + player.getEgg() + ", " + @@ -515,19 +587,21 @@ public class PlayerPrivilegeDTO { "ender_pearl = " + player.getEnderPearl() + ", " + "feed = " + player.getFeed() + ", " + "glow = " + player.getGlow() + ", " + + "harvest = " + player.getHarvest() + ", " + "honey = " + player.getHoney() + ", " + "hook = " + player.getHook() + ", " + "ignite = " + player.getIgnite() + ", " + - "mob_killing = " + player.getMobKilling() + ", " + + "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() + ", " + "trade = " + player.getTrade() + ", " + - "vehicle_destroy = " + player.getVehicleDestroy() + ", " + - "harvest = " + player.getHarvest() + " " + + "vehicle_destroy = " + player.getVehicleDestroy() + " " + "WHERE id = " + player.getId() + " " + "RETURNING *;"; List players = query(sql); diff --git a/src/main/java/cn/lunadeer/dominion/events/Apis.java b/src/main/java/cn/lunadeer/dominion/events/Apis.java new file mode 100644 index 0000000..e3d2ec8 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/events/Apis.java @@ -0,0 +1,22 @@ +package cn.lunadeer.dominion.events; + +import cn.lunadeer.dominion.Cache; +import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; +import org.bukkit.entity.Player; + +public class Apis { + public static boolean hasPermission(Player player, DominionDTO dom) { + if (dom == null) { + return true; + } + if (dom.getOwner().equals(player.getUniqueId())) { + return true; + } + PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom); + if (privilege != null) { + return privilege.getAdmin(); + } + return false; + } +} diff --git a/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java b/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java new file mode 100644 index 0000000..6b5ff9f --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java @@ -0,0 +1,103 @@ +package cn.lunadeer.dominion.events; + +import cn.lunadeer.dominion.Cache; +import cn.lunadeer.dominion.dtos.DominionDTO; +import org.bukkit.Location; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockFromToEvent; +import org.bukkit.event.block.BlockIgniteEvent; +import org.bukkit.event.entity.CreatureSpawnEvent; +import org.bukkit.event.entity.EntityExplodeEvent; + +import java.util.Objects; + +public class EnvironmentEvents implements Listener { + @EventHandler(priority = EventPriority.HIGHEST) // creeper_explode + public void onEntityExplode(EntityExplodeEvent event) { + Entity entity = event.getEntity(); + if (entity.getType() != EntityType.CREEPER && entity.getType() != EntityType.WITHER_SKULL){ + return; + } + DominionDTO dom = Cache.instance.getDominion(event.getLocation()); + if (dom == null) { + return; + } + if (dom.getCreeperExplode()) { + return; + } + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // fire_spread + public void onFireSpread(BlockIgniteEvent event){ + Player player = event.getPlayer(); + if (player != null) { + // 如果点燃事件没有玩家触发,那么就是火焰蔓延 + return; + } + DominionDTO dom = Cache.instance.getDominion(event.getBlock().getLocation()); + if (dom == null) { + return; + } + if (dom.getFireSpread()) { + return; + } + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // flow_in_protection + public void onLiquidFlowIn(BlockFromToEvent event) { + Location from = event.getBlock().getLocation(); + Location to = event.getToBlock().getLocation(); + DominionDTO dom_to = Cache.instance.getDominion(to); + if (dom_to == null) { + return; + } + DominionDTO dom_from = Cache.instance.getDominion(from); + if (dom_from != null){ + if (Objects.equals(dom_from.getId(), dom_to.getId())){ + return; + } + } + if (dom_to.getFlowInProtection()) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.HIGHEST) // tnt_explode + public void onTntExplode(EntityExplodeEvent event) { + Entity entity = event.getEntity(); + if (entity.getType() != EntityType.MINECART_TNT && entity.getType() != EntityType.PRIMED_TNT){ + return; + } + DominionDTO dom = Cache.instance.getDominion(event.getLocation()); + if (dom == null) { + return; + } + if (dom.getTntExplode()) { + return; + } + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // wither_spawn + public void onWitherSpawn(CreatureSpawnEvent event){ + Entity entity = event.getEntity(); + if (entity.getType() != EntityType.WITHER) { + return; + } + DominionDTO dom = Cache.instance.getDominion(entity.getLocation()); + if (dom == null) { + return; + } + if (dom.getWitherSpawn()) { + return; + } + event.setCancelled(true); + } +} diff --git a/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java b/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java index 333849f..7225788 100644 --- a/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java +++ b/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java @@ -1,10 +1,25 @@ package cn.lunadeer.dominion.events; +import cn.lunadeer.dominion.Cache; +import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.PlayerDTO; -import org.bukkit.entity.Player; +import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; +import cn.lunadeer.dominion.utils.Notification; +import io.papermc.paper.event.entity.EntityDyeEvent; +import org.bukkit.Material; +import org.bukkit.entity.*; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockIgniteEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.event.inventory.InventoryOpenEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.player.*; +import org.spigotmc.event.entity.EntityMountEvent; public class PlayerEvents implements Listener { @EventHandler @@ -13,4 +28,1022 @@ public class PlayerEvents implements Listener { PlayerDTO player = PlayerDTO.get(bukkitPlayer); player.onJoin(); // update name } + + @EventHandler(priority = EventPriority.HIGHEST) // anchor + public void onRespawnAnchor(PlayerRespawnEvent event) { + Player bukkitPlayer = event.getPlayer(); + if (!event.isAnchorSpawn()) { + 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()) { + Notification.error(bukkitPlayer, "你没有锚点重生权限"); + return; + } else { + if (bukkitPlayer.getBedSpawnLocation() != null) { + event.setRespawnLocation(bukkitPlayer.getBedSpawnLocation()); + } else { + event.setRespawnLocation(bukkitPlayer.getWorld().getSpawnLocation()); + } + } + } else { + if (dom.getAnchor()) { + Notification.error(bukkitPlayer, "你没有锚点重生权限"); + return; + } else { + if (bukkitPlayer.getBedSpawnLocation() != null) { + event.setRespawnLocation(bukkitPlayer.getBedSpawnLocation()); + } else { + event.setRespawnLocation(bukkitPlayer.getWorld().getSpawnLocation()); + } + } + } + } + + @EventHandler(priority = EventPriority.HIGHEST) // animal_killing + public void onAnimalKilling(EntityDamageByEntityEvent event) { + if (!(event.getDamager() instanceof Player)) { + return; + } + // 如果不是动物 则不处理 + if (!(event.getEntity() instanceof Animals)) { + return; + } + Player bukkitPlayer = (Player) event.getDamager(); + 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.getAnimalKilling()) { + return; + } + } else { + if (dom.getAnimalKilling()) { + return; + } + } + Notification.error(bukkitPlayer, "你没有动物击杀权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // anvil + public void onAnvilUse(InventoryOpenEvent event) { + if (event.getInventory().getType() != InventoryType.ANVIL) { + return; + } + if (!(event.getPlayer() instanceof Player)) { + return; + } + 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; + } + } + Notification.error(bukkitPlayer, "你没有使用铁砧的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // beacon + public void onBeaconUse(InventoryOpenEvent event) { + if (event.getInventory().getType() != InventoryType.BEACON) { + return; + } + if (!(event.getPlayer() instanceof Player)) { + return; + } + 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; + } + } + Notification.error(bukkitPlayer, "你没有使用信标的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // bed + public void onBedUse(PlayerBedEnterEvent event) { + Player bukkitPlayer = 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.getBed()) { + return; + } + } else { + if (dom.getBed()) { + return; + } + } + Notification.error(bukkitPlayer, "你没有使用床的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // brew + public void onBrewUse(InventoryOpenEvent event) { + if (event.getInventory().getType() != InventoryType.BREWING) { + return; + } + if (!(event.getPlayer() instanceof Player)) { + return; + } + 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; + } + } + Notification.error(bukkitPlayer, "你没有使用酿造台的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // break + public void onBlockBreak(BlockBreakEvent 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.getBreak()) { + return; + } + } else { + if (dom.getBreak()) { + return; + } + } + Notification.error(player, "你没有破坏方块的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // button + public void onButton(PlayerInteractEvent event) { + Player player = event.getPlayer(); + if (event.getClickedBlock() == null) { + return; + } + Material clicked = event.getClickedBlock().getType(); + if (clicked != Material.STONE_BUTTON && + clicked != Material.BAMBOO_BUTTON && + clicked != Material.OAK_BUTTON && + clicked != Material.SPRUCE_BUTTON && + clicked != Material.BIRCH_BUTTON && + clicked != Material.JUNGLE_BUTTON && + clicked != Material.ACACIA_BUTTON && + clicked != Material.DARK_OAK_BUTTON && + clicked != Material.CRIMSON_BUTTON && + clicked != Material.WARPED_BUTTON && + clicked != Material.POLISHED_BLACKSTONE_BUTTON && + clicked != Material.MANGROVE_BUTTON && + clicked != Material.CHERRY_BUTTON) { + 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; + } + } + Notification.error(player, "你没有使用按钮的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // cake + public void eatCake(PlayerInteractEvent event) { + if (event.getClickedBlock() == null) { + return; + } + Material clicked = event.getClickedBlock().getType(); + if (clicked != Material.CAKE) { + return; + } + 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.getCake()) { + return; + } + } else { + if (dom.getCake()) { + return; + } + } + Notification.error(player, "你没有吃蛋糕权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // container + public void openContainer(InventoryOpenEvent event) { + if (event.getInventory().getType() != InventoryType.CHEST && + event.getInventory().getType() != InventoryType.BARREL && + event.getInventory().getType() != InventoryType.HOPPER && + event.getInventory().getType() != InventoryType.DISPENSER && + event.getInventory().getType() != InventoryType.DROPPER && + event.getInventory().getType() != InventoryType.SHULKER_BOX) { + return; + } + if (!(event.getPlayer() instanceof Player)) { + return; + } + 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.getContainer()) { + return; + } + } else { + if (dom.getContainer()) { + return; + } + } + Notification.error(bukkitPlayer, "你没有使用容器的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // craft + public void onCraft(InventoryOpenEvent event) { + if (event.getInventory().getType() != InventoryType.CRAFTING) { + return; + } + if (!(event.getPlayer() instanceof Player)) { + return; + } + 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.getCraft()) { + return; + } + } else { + if (dom.getCraft()) { + return; + } + } + Notification.error(bukkitPlayer, "你没有使用工作台的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // comparer + public void comparerChange(PlayerInteractEvent event) { + if (event.getClickedBlock() == null) { + return; + } + Material clicked = event.getClickedBlock().getType(); + if (clicked != Material.COMPARATOR) { + return; + } + 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.getComparer()) { + return; + } + } else { + if (dom.getComparer()) { + return; + } + } + Notification.error(player, "你没有使用红石比较器的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // door + public void doorUse(PlayerInteractEvent event) { + if (event.getClickedBlock() == null) { + return; + } + Material clicked = event.getClickedBlock().getType(); + if (clicked != Material.IRON_DOOR && + clicked != Material.OAK_DOOR && + clicked != Material.SPRUCE_DOOR && + clicked != Material.BIRCH_DOOR && + clicked != Material.JUNGLE_DOOR && + clicked != Material.ACACIA_DOOR && + clicked != Material.CHERRY_DOOR && + clicked != Material.DARK_OAK_DOOR && + clicked != Material.MANGROVE_DOOR && + clicked != Material.BAMBOO_DOOR && + clicked != Material.CRIMSON_DOOR && + clicked != Material.WARPED_DOOR && + clicked != Material.IRON_TRAPDOOR && + clicked != Material.OAK_TRAPDOOR && + clicked != Material.SPRUCE_TRAPDOOR && + clicked != Material.BIRCH_TRAPDOOR && + clicked != Material.JUNGLE_TRAPDOOR && + clicked != Material.ACACIA_TRAPDOOR && + clicked != Material.CHERRY_TRAPDOOR && + clicked != Material.DARK_OAK_TRAPDOOR && + clicked != Material.MANGROVE_TRAPDOOR && + clicked != Material.BAMBOO_TRAPDOOR && + clicked != Material.CRIMSON_TRAPDOOR && + clicked != Material.WARPED_TRAPDOOR && + clicked != Material.OAK_FENCE_GATE && + clicked != Material.SPRUCE_FENCE_GATE && + clicked != Material.BIRCH_FENCE_GATE && + clicked != Material.JUNGLE_FENCE_GATE && + clicked != Material.ACACIA_FENCE_GATE && + clicked != Material.CHERRY_FENCE_GATE && + clicked != Material.DARK_OAK_FENCE_GATE && + clicked != Material.MANGROVE_FENCE_GATE && + clicked != Material.BAMBOO_FENCE_GATE && + clicked != Material.CRIMSON_FENCE_GATE && + clicked != Material.WARPED_FENCE_GATE) { + return; + } + 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.getDoor()) { + return; + } + } else { + if (dom.getDoor()) { + return; + } + } + Notification.error(player, "你没有使用门的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // dye + public void dyeEvent(EntityDyeEvent event) { + Entity entity = event.getEntity(); + if (!(entity instanceof Player)) { + return; + } + Player player = (Player) entity; + 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.getDye()) { + return; + } + } else { + if (dom.getDye()) { + return; + } + } + Notification.error(player, "你没有染色的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // egg + public void onThrowingEgg(ProjectileLaunchEvent event) { + if (!(event.getEntity().getShooter() instanceof Player)) { + return; + } + if (event.getEntity().getType() != EntityType.EGG) { + return; + } + 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; + } + } + Notification.error(player, "你没有扔鸡蛋的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // enchant + public void onEnchant(InventoryOpenEvent event) { + if (event.getInventory().getType() != InventoryType.ENCHANTING) { + return; + } + if (!(event.getPlayer() instanceof Player)) { + return; + } + 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.getEnchant()) { + return; + } + } else { + if (dom.getEnchant()) { + return; + } + } + Notification.error(bukkitPlayer, "你没有使用附魔台的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // ender_pearl + public void onThrowingEndPearl(ProjectileLaunchEvent event) { + if (!(event.getEntity().getShooter() instanceof Player)) { + return; + } + if (event.getEntity().getType() != EntityType.ENDER_PEARL) { + return; + } + 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; + } + } + Notification.error(player, "你没有使用末影珍珠的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // feed + public void onFeedAnimal(PlayerInteractEntityEvent event) { + if (!(event.getRightClicked() instanceof Animals)) { + return; + } + 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.getFeed()) { + return; + } + } else { + if (dom.getFeed()) { + return; + } + } + Notification.error(player, "你没有喂养动物的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // harvest + public void onHarvest(PlayerHarvestBlockEvent 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.getHarvest()) { + return; + } + } else { + if (dom.getHarvest()) { + return; + } + } + Notification.error(player, "你没有收获的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // honey + public void honeyInteractive(PlayerInteractEvent event) { + if (event.getClickedBlock() == null) { + return; + } + Material clicked = event.getClickedBlock().getType(); + if (clicked != Material.BEEHIVE && clicked != Material.BEE_NEST) { + return; + } + 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.getHoney()) { + return; + } + } else { + if (dom.getHoney()) { + return; + } + } + Notification.error(player, "你没有与蜜蜂交互的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // hook + public void onHook(PlayerFishEvent 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.getHook()) { + return; + } + } else { + if (dom.getHook()) { + return; + } + } + Notification.error(player, "你没有使用钓钩的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // ignite + public void onPlayerIgnite(BlockIgniteEvent event) { + Player player = event.getPlayer(); + if (player == null) { + 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.getIgnite()) { + return; + } + } else { + if (dom.getIgnite()) { + return; + } + } + Notification.error(player, "你没有点火的权限"); + } + + @EventHandler(priority = EventPriority.HIGHEST) // lever + public void onLever(PlayerInteractEvent event) { + if (event.getClickedBlock() == null) { + return; + } + Material clicked = event.getClickedBlock().getType(); + if (clicked != Material.LEVER) { + return; + } + 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.getLever()) { + return; + } + } else { + if (dom.getLever()) { + return; + } + } + Notification.error(player, "你没有使用拉杆的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // monster_killing + public void onMonsterKilling(EntityDamageByEntityEvent event) { + if (!(event.getDamager() instanceof Player)) { + return; + } + // 如果不是动物 则不处理 + if (!(event.getEntity() instanceof Monster)) { + return; + } + Player bukkitPlayer = (Player) event.getDamager(); + 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.getMonsterKilling()) { + return; + } + } else { + if (dom.getMonsterKilling()) { + return; + } + } + Notification.error(bukkitPlayer, "你没有击杀怪物的权限"); + event.setCancelled(true); + } + + @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; + } + } + Notification.error(player, "你没有移动的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // place + public void onPlace(BlockPlaceEvent 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.getPlace()) { + return; + } + } else { + if (dom.getPlace()) { + return; + } + } + Notification.error(player, "你没有放置方块的权限"); + } + + @EventHandler(priority = EventPriority.HIGHEST) // pressure + public void onPressure(PlayerInteractEvent event) { + if (event.getClickedBlock() == null) { + return; + } + Material clicked = event.getClickedBlock().getType(); + if (clicked != Material.STONE_PRESSURE_PLATE && + clicked != Material.LIGHT_WEIGHTED_PRESSURE_PLATE && + clicked != Material.HEAVY_WEIGHTED_PRESSURE_PLATE && + clicked != Material.OAK_PRESSURE_PLATE && + clicked != Material.SPRUCE_PRESSURE_PLATE && + clicked != Material.BIRCH_PRESSURE_PLATE && + clicked != Material.JUNGLE_PRESSURE_PLATE && + clicked != Material.ACACIA_PRESSURE_PLATE && + clicked != Material.DARK_OAK_PRESSURE_PLATE && + clicked != Material.CRIMSON_PRESSURE_PLATE && + clicked != Material.WARPED_PRESSURE_PLATE && + clicked != Material.POLISHED_BLACKSTONE_PRESSURE_PLATE && + clicked != Material.MANGROVE_PRESSURE_PLATE && + clicked != Material.CHERRY_PRESSURE_PLATE && + clicked != Material.BAMBOO_PRESSURE_PLATE) { + return; + } + 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.getPressure()) { + return; + } + } else { + if (dom.getPressure()) { + return; + } + } + Notification.error(player, "你没有使用压力板的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // riding + public void onRiding(EntityMountEvent event) { + if (!(event.getEntity() instanceof Player)) { + return; + } + Player player = (Player) event.getEntity(); + 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.getRiding()) { + return; + } + } else { + if (dom.getRiding()) { + return; + } + } + Notification.error(player, "你没有骑乘交通工具的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // repeater + public void onRepeaterChange(PlayerInteractEvent event) { + if (event.getClickedBlock() == null) { + return; + } + Material clicked = event.getClickedBlock().getType(); + if (clicked != Material.REPEATER) { + return; + } + 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.getRepeater()) { + return; + } + } else { + if (dom.getRepeater()) { + return; + } + } + Notification.error(player, "你没有使用红石中继器的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // shear + public void onShear(PlayerShearEntityEvent 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.getShear()) { + return; + } + } else { + if (dom.getShear()) { + return; + } + } + Notification.error(player, "你没有剪羊毛的权限"); + } + + @EventHandler(priority = EventPriority.HIGHEST) // shoot + public void onShootArrowSnowball(ProjectileLaunchEvent event) { + if (!(event.getEntity().getShooter() instanceof Player)) { + return; + } + if (event.getEntity().getType() != EntityType.ARROW && event.getEntity().getType() != EntityType.SNOWBALL) { + return; + } + 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; + } + } + Notification.error(player, "你没有发射弓箭或雪球的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // trade + public void onTrade(InventoryOpenEvent event) { + if (event.getInventory().getType() != InventoryType.MERCHANT) { + return; + } + if (!(event.getPlayer() instanceof Player)) { + return; + } + 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.getTrade()) { + return; + } + } else { + if (dom.getTrade()) { + return; + } + } + Notification.error(bukkitPlayer, "你没有交易的权限"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) // vehicle_destroy + public void onVehicleDestroy(EntityDamageByEntityEvent event) { + if (!(event.getDamager() instanceof Player)) { + return; + } + if (!(event.getEntity() instanceof Vehicle)) { + return; + } + Player player = (Player) event.getDamager(); + 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.getVehicleDestroy()) { + return; + } + } else { + if (dom.getVehicleDestroy()) { + return; + } + } + Notification.error(player, "你没有破坏交通工具的权限"); + event.setCancelled(true); + } } diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java b/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java index 55994ac..923cbae 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java @@ -92,6 +92,15 @@ public class DominionFlagInfo { .append(Button.createRed("☐", "/dominion set brew true " + dominion.getName() + " " + page)) .append("使用酿造台")); } + if (dominion.getBreak()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set break false " + dominion.getName() + " " + page)) + .append("破坏方块")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set break true " + dominion.getName() + " " + page)) + .append("破坏方块")); + } if (dominion.getButton()) { view.add(Line.create() .append(Button.createGreen("☑", "/dominion set button false " + dominion.getName() + " " + page)) @@ -122,11 +131,11 @@ public class DominionFlagInfo { if (dominion.getCraft()) { view.add(Line.create() .append(Button.createGreen("☑", "/dominion set craft false " + dominion.getName() + " " + page)) - .append("合成")); + .append("工作台")); } else { view.add(Line.create() .append(Button.createRed("☐", "/dominion set craft true " + dominion.getName() + " " + page)) - .append("合成")); + .append("工作台")); } if (dominion.getCreeperExplode()) { view.add(Line.create() @@ -137,14 +146,14 @@ public class DominionFlagInfo { .append(Button.createRed("☐", "/dominion set creeper_explode true " + dominion.getName() + " " + page)) .append("苦力怕爆炸")); } - if (dominion.getDiode()) { + if (dominion.getComparer()){ view.add(Line.create() - .append(Button.createGreen("☑", "/dominion set diode false " + dominion.getName() + " " + page)) - .append("中继器交互")); + .append(Button.createGreen("☑", "/dominion set comparer false " + dominion.getName() + " " + page)) + .append("比较器交互")); } else { view.add(Line.create() - .append(Button.createRed("☐", "/dominion set diode true " + dominion.getName() + " " + page)) - .append("中继器交互")); + .append(Button.createRed("☐", "/dominion set comparer true " + dominion.getName() + " " + page)) + .append("比较器交互")); } if (dominion.getDoor()) { view.add(Line.create() @@ -227,14 +236,14 @@ public class DominionFlagInfo { .append(Button.createRed("☐", "/dominion set glow true " + dominion.getName() + " " + page)) .append("发光")); } - if (dominion.getGrow()) { + if (dominion.getHarvest()) { view.add(Line.create() - .append(Button.createGreen("☑", "/dominion set grow false " + dominion.getName() + " " + page)) - .append("植物生长")); + .append(Button.createGreen("☑", "/dominion set harvest false " + dominion.getName() + " " + page)) + .append("收获")); } else { view.add(Line.create() - .append(Button.createRed("☐", "/dominion set grow true " + dominion.getName() + " " + page)) - .append("植物生长")); + .append(Button.createRed("☐", "/dominion set harvest true " + dominion.getName() + " " + page)) + .append("收获")); } if (dominion.getHoney()) { view.add(Line.create() @@ -248,11 +257,11 @@ public class DominionFlagInfo { if (dominion.getHook()) { view.add(Line.create() .append(Button.createGreen("☑", "/dominion set hook false " + dominion.getName() + " " + page)) - .append("钩子交互")); + .append("使用钓钩")); } else { view.add(Line.create() .append(Button.createRed("☐", "/dominion set hook true " + dominion.getName() + " " + page)) - .append("钩子交互")); + .append("使用钓钩")); } if (dominion.getIgnite()) { view.add(Line.create() @@ -263,14 +272,23 @@ public class DominionFlagInfo { .append(Button.createRed("☐", "/dominion set ignite true " + dominion.getName() + " " + page)) .append("点燃")); } - if (dominion.getMobKilling()) { + if (dominion.getLever()){ view.add(Line.create() - .append(Button.createGreen("☑", "/dominion set mob_killing false " + dominion.getName() + " " + page)) - .append("生物伤害")); + .append(Button.createGreen("☑", "/dominion set lever false " + dominion.getName() + " " + page)) + .append("使用拉杆")); } else { view.add(Line.create() - .append(Button.createRed("☐", "/dominion set mob_killing true " + dominion.getName() + " " + page)) - .append("生物伤害")); + .append(Button.createRed("☐", "/dominion set lever true " + dominion.getName() + " " + page)) + .append("使用拉杆")); + } + if (dominion.getMonsterKilling()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set monster_killing false " + dominion.getName() + " " + page)) + .append("怪物伤害")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set monster_killing true " + dominion.getName() + " " + page)) + .append("怪物伤害")); } if (dominion.getMove()) { view.add(Line.create() @@ -302,11 +320,20 @@ public class DominionFlagInfo { if (dominion.getRiding()) { view.add(Line.create() .append(Button.createGreen("☑", "/dominion set riding false " + dominion.getName() + " " + page)) - .append("骑乘")); + .append("骑乘载具")); } else { view.add(Line.create() .append(Button.createRed("☐", "/dominion set riding true " + dominion.getName() + " " + page)) - .append("骑乘")); + .append("骑乘载具")); + } + if (dominion.getRepeater()){ + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set repeater false " + dominion.getName() + " " + page)) + .append("中继器交互")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set repeater true " + dominion.getName() + " " + page)) + .append("中继器交互")); } if (dominion.getShear()) { view.add(Line.create() @@ -320,11 +347,11 @@ public class DominionFlagInfo { if (dominion.getShoot()) { view.add(Line.create() .append(Button.createGreen("☑", "/dominion set shoot false " + dominion.getName() + " " + page)) - .append("发射")); + .append("射箭/雪球")); } else { view.add(Line.create() .append(Button.createRed("☐", "/dominion set shoot true " + dominion.getName() + " " + page)) - .append("发射")); + .append("射箭/雪球")); } if (dominion.getTntExplode()) { view.add(Line.create() @@ -362,15 +389,6 @@ public class DominionFlagInfo { .append(Button.createRed("☐", "/dominion set wither_spawn true " + dominion.getName() + " " + page)) .append("凋零生成")); } - if (dominion.getHarvest()) { - view.add(Line.create() - .append(Button.createGreen("☑", "/dominion set harvest false " + dominion.getName() + " " + page)) - .append("收获")); - } else { - view.add(Line.create() - .append(Button.createRed("☐", "/dominion set harvest true " + dominion.getName() + " " + page)) - .append("收获")); - } view.showOn(player, page); } } diff --git a/src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java b/src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java index 1bb415c..df2d6ba 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java @@ -107,6 +107,15 @@ public class PrivilegeInfo { .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " brew true " + dominion.getName() + " " + page)) .append("使用酿造台")); } + if (privilege.getBreak()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " break false " + dominion.getName() + " " + page)) + .append("破坏方块")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " break true " + dominion.getName() + " " + page)) + .append("破坏方块")); + } if (privilege.getButton()) { view.add(Line.create() .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " button false " + dominion.getName() + " " + page)) @@ -137,20 +146,20 @@ public class PrivilegeInfo { if (privilege.getCraft()) { view.add(Line.create() .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " craft false " + dominion.getName() + " " + page)) - .append("合成")); + .append("工作台")); } else { view.add(Line.create() .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " craft true " + dominion.getName() + " " + page)) - .append("合成")); + .append("工作台")); } - if (privilege.getDiode()) { + if (privilege.getComparer()){ view.add(Line.create() - .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " diode false " + dominion.getName() + " " + page)) - .append("中继器交互")); + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " comparer false " + dominion.getName() + " " + page)) + .append("比较器交互")); } else { view.add(Line.create() - .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " diode true " + dominion.getName() + " " + page)) - .append("中继器交互")); + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " comparer true " + dominion.getName() + " " + page)) + .append("比较器交互")); } if (privilege.getDoor()) { view.add(Line.create() @@ -215,6 +224,15 @@ public class PrivilegeInfo { .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " glow true " + dominion.getName() + " " + page)) .append("发光")); } + if (privilege.getHarvest()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " harvest false " + dominion.getName() + " " + page)) + .append("收获")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " harvest true " + dominion.getName() + " " + page)) + .append("收获")); + } if (privilege.getHoney()) { view.add(Line.create() .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " honey false " + dominion.getName() + " " + page)) @@ -227,11 +245,11 @@ public class PrivilegeInfo { if (privilege.getHook()) { view.add(Line.create() .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " hook false " + dominion.getName() + " " + page)) - .append("钩子交互")); + .append("使用钓钩")); } else { view.add(Line.create() .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " hook true " + dominion.getName() + " " + page)) - .append("钩子交互")); + .append("使用钓钩")); } if (privilege.getIgnite()) { view.add(Line.create() @@ -242,14 +260,23 @@ public class PrivilegeInfo { .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " ignite true " + dominion.getName() + " " + page)) .append("点燃")); } - if (privilege.getMobKilling()) { + if (privilege.getLever()){ view.add(Line.create() - .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " mob_killing false " + dominion.getName() + " " + page)) - .append("生物伤害")); + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " lever false " + dominion.getName() + " " + page)) + .append("使用拉杆")); } else { view.add(Line.create() - .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " mob_killing true " + dominion.getName() + " " + page)) - .append("生物伤害")); + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " lever true " + dominion.getName() + " " + page)) + .append("使用拉杆")); + } + if (privilege.getMonsterKilling()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " monster_killing false " + dominion.getName() + " " + page)) + .append("怪物伤害")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " monster_killing true " + dominion.getName() + " " + page)) + .append("怪物伤害")); } if (privilege.getMove()) { view.add(Line.create() @@ -281,11 +308,20 @@ public class PrivilegeInfo { if (privilege.getRiding()) { view.add(Line.create() .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " riding false " + dominion.getName() + " " + page)) - .append("骑乘")); + .append("骑乘载具")); } else { view.add(Line.create() .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " riding true " + dominion.getName() + " " + page)) - .append("骑乘")); + .append("骑乘载具")); + } + if (privilege.getRepeater()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " repeater false " + dominion.getName() + " " + page)) + .append("中继器交互")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " repeater true " + dominion.getName() + " " + page)) + .append("中继器交互")); } if (privilege.getShear()) { view.add(Line.create() @@ -299,11 +335,11 @@ public class PrivilegeInfo { if (privilege.getShoot()) { view.add(Line.create() .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " shoot false " + dominion.getName() + " " + page)) - .append("发射")); + .append("射箭/雪球")); } else { view.add(Line.create() .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " shoot true " + dominion.getName() + " " + page)) - .append("发射")); + .append("射箭/雪球")); } if (privilege.getTrade()) { view.add(Line.create() @@ -323,15 +359,6 @@ public class PrivilegeInfo { .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " vehicle_destroy true " + dominion.getName() + " " + page)) .append("破坏载具")); } - if (privilege.getHarvest()) { - view.add(Line.create() - .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " harvest false " + dominion.getName() + " " + page)) - .append("收获")); - } else { - view.add(Line.create() - .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " harvest true " + dominion.getName() + " " + page)) - .append("收获")); - } view.showOn(player, page); } } diff --git a/src/main/java/cn/lunadeer/dominion/utils/Database.java b/src/main/java/cn/lunadeer/dominion/utils/Database.java index 147b234..f86e192 100644 --- a/src/main/java/cn/lunadeer/dominion/utils/Database.java +++ b/src/main/java/cn/lunadeer/dominion/utils/Database.java @@ -69,12 +69,13 @@ public class Database { " beacon BOOLEAN NOT NULL DEFAULT FALSE," + " bed BOOLEAN NOT NULL DEFAULT FALSE," + " brew BOOLEAN NOT NULL DEFAULT FALSE," + + " break BOOLEAN NOT NULL DEFAULT FALSE," + " button BOOLEAN NOT NULL DEFAULT FALSE," + " cake BOOLEAN NOT NULL DEFAULT FALSE," + " container BOOLEAN NOT NULL DEFAULT FALSE," + " craft BOOLEAN NOT NULL DEFAULT FALSE," + " creeper_explode BOOLEAN NOT NULL DEFAULT FALSE," + - " diode BOOLEAN NOT NULL DEFAULT FALSE," + + " comparer BOOLEAN NOT NULL DEFAULT FALSE," + " door BOOLEAN NOT NULL DEFAULT FALSE," + " dye BOOLEAN NOT NULL DEFAULT FALSE," + " egg BOOLEAN NOT NULL DEFAULT FALSE," + @@ -83,23 +84,24 @@ public class Database { " feed BOOLEAN NOT NULL DEFAULT FALSE," + " fire_spread BOOLEAN NOT NULL DEFAULT FALSE," + " flow_in_protection BOOLEAN NOT NULL DEFAULT FALSE," + - " glow BOOLEAN NOT NULL DEFAULT FALSE," + - " grow BOOLEAN NOT NULL DEFAULT FALSE," + + " glow BOOLEAN NOT NULL DEFAULT TRUE," + + " harvest BOOLEAN NOT NULL DEFAULT FALSE," + " honey BOOLEAN NOT NULL DEFAULT FALSE," + " hook BOOLEAN NOT NULL DEFAULT FALSE," + " ignite BOOLEAN NOT NULL DEFAULT FALSE," + - " mob_killing BOOLEAN NOT NULL DEFAULT FALSE," + + " lever BOOLEAN NOT NULL DEFAULT FALSE," + + " monster_killing BOOLEAN NOT NULL DEFAULT FALSE," + " move BOOLEAN NOT NULL DEFAULT TRUE," + " place BOOLEAN NOT NULL DEFAULT FALSE," + " pressure BOOLEAN NOT NULL DEFAULT FALSE," + " riding BOOLEAN NOT NULL DEFAULT FALSE," + + " repeater BOOLEAN NOT NULL DEFAULT FALSE," + " shear BOOLEAN NOT NULL DEFAULT FALSE," + " shoot BOOLEAN NOT NULL DEFAULT FALSE," + " tnt_explode BOOLEAN NOT NULL DEFAULT FALSE," + " trade BOOLEAN NOT NULL DEFAULT FALSE," + " vehicle_destroy BOOLEAN NOT NULL DEFAULT FALSE," + " wither_spawn BOOLEAN NOT NULL DEFAULT FALSE," + - " harvest BOOLEAN NOT NULL DEFAULT FALSE," + " FOREIGN KEY (owner) REFERENCES player_name(uuid)," + " FOREIGN KEY (parent_dom_id) REFERENCES dominion(id)" + @@ -118,31 +120,34 @@ public class Database { " beacon BOOLEAN NOT NULL DEFAULT FALSE," + " bed BOOLEAN NOT NULL DEFAULT FALSE," + " brew BOOLEAN NOT NULL DEFAULT FALSE," + + " break BOOLEAN NOT NULL DEFAULT FALSE," + " button BOOLEAN NOT NULL DEFAULT FALSE," + " cake BOOLEAN NOT NULL DEFAULT FALSE," + " container BOOLEAN NOT NULL DEFAULT FALSE," + " craft BOOLEAN NOT NULL DEFAULT FALSE," + - " diode BOOLEAN NOT NULL DEFAULT FALSE," + + " comparer BOOLEAN NOT NULL DEFAULT FALSE," + " door BOOLEAN NOT NULL DEFAULT FALSE," + " dye BOOLEAN NOT NULL DEFAULT FALSE," + " egg BOOLEAN NOT NULL DEFAULT FALSE," + " enchant BOOLEAN NOT NULL DEFAULT FALSE," + " ender_pearl BOOLEAN NOT NULL DEFAULT FALSE," + " feed BOOLEAN NOT NULL DEFAULT FALSE," + - " glow BOOLEAN NOT NULL DEFAULT FALSE," + + " glow BOOLEAN NOT NULL DEFAULT TRUE," + + " harvest BOOLEAN NOT NULL DEFAULT FALSE," + " honey BOOLEAN NOT NULL DEFAULT FALSE," + " hook BOOLEAN NOT NULL DEFAULT FALSE," + " ignite BOOLEAN NOT NULL DEFAULT FALSE," + - " mob_killing BOOLEAN NOT NULL DEFAULT FALSE," + + " lever BOOLEAN NOT NULL DEFAULT FALSE," + + " monster_killing BOOLEAN NOT NULL DEFAULT FALSE," + " move BOOLEAN NOT NULL DEFAULT TRUE," + " place BOOLEAN NOT NULL DEFAULT FALSE," + " pressure BOOLEAN NOT NULL DEFAULT FALSE," + " riding BOOLEAN NOT NULL DEFAULT FALSE," + + " repeater BOOLEAN NOT NULL DEFAULT FALSE," + " shear BOOLEAN NOT NULL DEFAULT FALSE," + " shoot BOOLEAN NOT NULL DEFAULT FALSE," + " trade BOOLEAN NOT NULL DEFAULT FALSE," + " vehicle_destroy BOOLEAN NOT NULL DEFAULT FALSE," + - " harvest BOOLEAN NOT NULL DEFAULT FALSE," + " UNIQUE (player_uuid, dom_id)," + " FOREIGN KEY (player_uuid) REFERENCES player_name(uuid)," +