From 93b6759f9d906bb6abb0b95f968c78021ca61471 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Mon, 26 Feb 2024 00:16:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=94=9F=E7=89=A9=E6=88=98?= =?UTF-8?q?=E5=88=A9=E5=93=81=E6=8E=89=E8=90=BD=E6=9D=83=E9=99=90=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E6=97=A0=E6=B3=95=E6=8B=A6=E6=88=AA?= =?UTF-8?q?=E5=B2=A9=E6=B5=86=E3=80=81=E6=B0=B4=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../cn/lunadeer/dominion/commands/Helper.java | 2 +- .../dominion/controllers/FlagsController.java | 1 + .../lunadeer/dominion/dtos/DominionDTO.java | 17 ++++++- .../dominion/events/EnvironmentEvents.java | 17 +++++++ .../dominion/events/PlayerEvents.java | 44 ++++++++++++------- .../dominion/tuis/DominionFlagInfo.java | 9 ++++ .../cn/lunadeer/dominion/utils/Database.java | 4 ++ 8 files changed, 76 insertions(+), 20 deletions(-) diff --git a/pom.xml b/pom.xml index e0c951b..3a5cce9 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.10.6-beta + 1.11.0-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/commands/Helper.java b/src/main/java/cn/lunadeer/dominion/commands/Helper.java index 19d168a..e478aca 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Helper.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Helper.java @@ -26,7 +26,7 @@ public class Helper { "harvest", "honey", "hook", "hopper", "ignite", "lever", - "monster_killing", "move", + "mob_drop_item", "monster_killing", "move", "place", "pressure", "riding", "repeater", "shear", "shoot", diff --git a/src/main/java/cn/lunadeer/dominion/controllers/FlagsController.java b/src/main/java/cn/lunadeer/dominion/controllers/FlagsController.java index edf36f5..7b25412 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/FlagsController.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/FlagsController.java @@ -65,6 +65,7 @@ public class FlagsController { case "hopper": return dominion.setHopper(value); case "ignite": return dominion.setIgnite(value); case "lever": return dominion.setLever(value); + case "mob_drop_item": return dominion.setMobDropItem(value); case "monster_killing": return dominion.setMonsterKilling(value); case "move": return dominion.setMove(value); case "place": return dominion.setPlace(value); diff --git a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java index ca20d25..9de4fad 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java @@ -59,6 +59,7 @@ public class DominionDTO { rs.getBoolean("hopper"), rs.getBoolean("ignite"), rs.getBoolean("lever"), + rs.getBoolean("mob_drop_item"), rs.getBoolean("monster_killing"), rs.getBoolean("move"), rs.getBoolean("place"), @@ -206,6 +207,7 @@ public class DominionDTO { "hopper = " + dominion.getHopper() + ", " + "ignite = " + dominion.getIgnite() + ", " + "lever = " + dominion.getLever() + ", " + + "mob_drop_item = " + dominion.getMobDropItem() + ", " + // dom only "monster_killing = " + dominion.getMonsterKilling() + ", " + "move = " + dominion.getMove() + ", " + "place = " + dominion.getPlace() + ", " + @@ -241,7 +243,7 @@ public class DominionDTO { Boolean harvest, Boolean honey, Boolean hook, Boolean hopper, Boolean ignite, Boolean lever, - Boolean monsterKilling, Boolean move, + Boolean mobDropItem, Boolean monsterKilling, Boolean move, Boolean place, Boolean pressure, Boolean riding, Boolean repeater, Boolean shear, Boolean shoot, @@ -290,6 +292,7 @@ public class DominionDTO { this.hopper = hopper; this.ignite = ignite; this.lever = lever; + this.mobDropItem = mobDropItem; this.monsterKilling = monsterKilling; this.move = move; this.place = place; @@ -316,7 +319,7 @@ public class DominionDTO { 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, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false); } @@ -366,6 +369,7 @@ public class DominionDTO { private Boolean hopper = false; private Boolean ignite = false; private Boolean lever = false; + private Boolean mobDropItem = true; private Boolean monsterKilling = false; private Boolean move = true; private Boolean place = false; @@ -738,6 +742,15 @@ public class DominionDTO { return update(this); } + public Boolean getMobDropItem() { + return mobDropItem; + } + + public DominionDTO setMobDropItem(Boolean mobDropItem) { + this.mobDropItem = mobDropItem; + return update(this); + } + public Boolean getMonsterKilling() { return monsterKilling; } diff --git a/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java b/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java index 2d83500..f645c11 100644 --- a/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java +++ b/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java @@ -14,6 +14,7 @@ import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.block.BlockIgniteEvent; import org.bukkit.event.entity.CreatureSpawnEvent; +import org.bukkit.event.entity.EntityDropItemEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityInteractEvent; import org.bukkit.event.player.PlayerInteractEvent; @@ -75,6 +76,22 @@ public class EnvironmentEvents implements Listener { } } + @EventHandler(priority = EventPriority.HIGHEST) // mob_drop_item + public void onMobDropItem(EntityDropItemEvent event) { + Entity entity = event.getEntity(); + if (entity instanceof Player) { + return; + } + DominionDTO dom = Cache.instance.getDominion(entity.getLocation()); + if (dom == null) { + return; + } + if (dom.getMobDropItem()) { + return; + } + event.setCancelled(true); + } + @EventHandler(priority = EventPriority.HIGHEST) // tnt_explode public void onTntExplode(EntityExplodeEvent event) { Entity entity = event.getEntity(); diff --git a/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java b/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java index 9d7422f..84d084f 100644 --- a/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java +++ b/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java @@ -865,29 +865,41 @@ public class PlayerEvents implements Listener { } @EventHandler(priority = EventPriority.HIGHEST) // place - public void onPlace(BlockPlaceEvent event) { + public void onPlaceBlock(BlockPlaceEvent event) { Player player = event.getPlayer(); - DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player); - if (dom == null) { + if (onPlace(player)) { 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, "你没有放置方块的权限"); event.setCancelled(true); } + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlaceLavaOrWater(PlayerBucketEmptyEvent event) { + Player player = event.getPlayer(); + if (onPlace(player)) { + return; + } + Notification.error(player, "你没有放置方块的权限"); + event.setCancelled(true); + } + + public static boolean onPlace(Player player) { + DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player); + if (dom == null) { + return false; + } + if (Apis.hasPermission(player, dom)) { + return true; + } + PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom); + if (privilege != null) { + return privilege.getPlace(); + } else { + return dom.getPlace(); + } + } + @EventHandler(priority = EventPriority.HIGHEST) // pressure public void onPressure(PlayerInteractEvent event) { if (event.getClickedBlock() == null) { diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java b/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java index 925c366..b6bdfc8 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java @@ -290,6 +290,15 @@ public class DominionFlagInfo { .append(Button.createRed("☐", "/dominion set lever true " + dominion.getName() + " " + page)) .append("使用拉杆")); } + if (dominion.getMobDropItem()){ + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set mob_drop_item false " + dominion.getName() + " " + page)) + .append("生物战利品掉落")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set mob_drop_item true " + dominion.getName() + " " + page)) + .append("生物战利品掉落")); + } if (dominion.getMonsterKilling()) { view.add(Line.create() .append(Button.createGreen("☑", "/dominion set monster_killing false " + dominion.getName() + " " + page)) diff --git a/src/main/java/cn/lunadeer/dominion/utils/Database.java b/src/main/java/cn/lunadeer/dominion/utils/Database.java index 75772fe..78827f0 100644 --- a/src/main/java/cn/lunadeer/dominion/utils/Database.java +++ b/src/main/java/cn/lunadeer/dominion/utils/Database.java @@ -186,5 +186,9 @@ public class Database { // 1.10.0 sql = "ALTER TABLE dominion ADD COLUMN IF NOT EXISTS trample BOOLEAN NOT NULL DEFAULT FALSE;"; query(sql); + + // 1.11.0 + sql = "ALTER TABLE dominion ADD COLUMN IF NOT EXISTS mob_drop_item BOOLEAN NOT NULL DEFAULT TRUE;"; + query(sql); } }