diff --git a/pom.xml b/pom.xml
index 83a6e46..b20004d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
cn.lunadeer
Dominion
- 1.16.5-beta
+ 1.16.6-beta
jar
Dominion
diff --git a/src/main/java/cn/lunadeer/dominion/events/Apis.java b/src/main/java/cn/lunadeer/dominion/events/Apis.java
index 11d9590..983cda3 100644
--- a/src/main/java/cn/lunadeer/dominion/events/Apis.java
+++ b/src/main/java/cn/lunadeer/dominion/events/Apis.java
@@ -4,6 +4,7 @@ import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
import org.bukkit.entity.Player;
+import org.bukkit.inventory.Inventory;
public class Apis {
public static boolean hasPermission(Player player, DominionDTO dom) {
@@ -22,4 +23,12 @@ public class Apis {
}
return false;
}
+
+ public static DominionDTO getInvDominion(Player bukkitPlayer, Inventory inv) {
+ if (inv.getLocation() == null) {
+ return Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
+ } else {
+ return Cache.instance.getDominion(inv.getLocation());
+ }
+ }
}
diff --git a/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java b/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java
index 3e9987b..6a24930 100644
--- a/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java
+++ b/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java
@@ -6,6 +6,7 @@ import cn.lunadeer.dominion.dtos.PlayerDTO;
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
import cn.lunadeer.dominion.utils.Notification;
import io.papermc.paper.event.entity.EntityDyeEvent;
+import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.*;
@@ -22,8 +23,11 @@ import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.*;
import org.bukkit.event.vehicle.VehicleDestroyEvent;
+import org.bukkit.inventory.Inventory;
import org.spigotmc.event.entity.EntityMountEvent;
+import static cn.lunadeer.dominion.events.Apis.getInvDominion;
+
public class PlayerEvents implements Listener {
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
@@ -81,7 +85,7 @@ public class PlayerEvents implements Listener {
return;
}
Player bukkitPlayer = (Player) event.getDamager();
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
+ DominionDTO dom = Cache.instance.getDominion(event.getEntity().getLocation());
if (dom == null) {
return;
}
@@ -165,7 +169,7 @@ public class PlayerEvents implements Listener {
@EventHandler(priority = EventPriority.HIGHEST) // bed
public void onBedUse(PlayerBedEnterEvent event) {
Player bukkitPlayer = event.getPlayer();
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
+ DominionDTO dom = Cache.instance.getDominion(event.getBed().getLocation());
if (dom == null) {
return;
}
@@ -219,7 +223,7 @@ public class PlayerEvents implements Listener {
@EventHandler(priority = EventPriority.HIGHEST) // break
public void onBlockBreak(BlockBreakEvent event) {
Player player = event.getPlayer();
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
+ DominionDTO dom = Cache.instance.getDominion(event.getBlock().getLocation());
if (dom == null) {
return;
}
@@ -288,12 +292,13 @@ public class PlayerEvents implements Listener {
if (event.getClickedBlock() == null) {
return;
}
- Material clicked = event.getClickedBlock().getType();
+ Block block = event.getClickedBlock();
+ Material clicked = block.getType();
if (clicked != Material.CAKE) {
return;
}
Player player = event.getPlayer();
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
+ DominionDTO dom = Cache.instance.getDominion(block.getLocation());
if (dom == null) {
return;
}
@@ -315,8 +320,13 @@ public class PlayerEvents implements Listener {
}
// 检查是否有容器权限
- private static boolean hasContainerPermission(Player player) {
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
+ private static boolean hasContainerPermission(Player player, Location loc) {
+ DominionDTO dom;
+ if (loc == null) {
+ dom = Cache.instance.getPlayerCurrentDominion(player);
+ } else {
+ dom = Cache.instance.getDominion(loc);
+ }
if (dom == null) {
return true;
}
@@ -348,7 +358,7 @@ public class PlayerEvents implements Listener {
return;
}
Player bukkitPlayer = (Player) event.getPlayer();
- if (hasContainerPermission(bukkitPlayer)) {
+ if (hasContainerPermission(bukkitPlayer, event.getInventory().getLocation())) {
return;
}
event.setCancelled(true);
@@ -357,7 +367,7 @@ public class PlayerEvents implements Listener {
@EventHandler(priority = EventPriority.HIGHEST) // container (armor stand)
public void manipulateArmorStand(PlayerArmorStandManipulateEvent event) {
Player bukkitPlayer = event.getPlayer();
- if (hasContainerPermission(bukkitPlayer)) {
+ if (hasContainerPermission(bukkitPlayer, event.getRightClicked().getLocation())) {
return;
}
event.setCancelled(true);
@@ -370,7 +380,7 @@ public class PlayerEvents implements Listener {
return;
}
Player bukkitPlayer = event.getPlayer();
- if (hasContainerPermission(bukkitPlayer)) {
+ if (hasContainerPermission(bukkitPlayer, event.getRightClicked().getLocation())) {
return;
}
event.setCancelled(true);
@@ -386,7 +396,7 @@ public class PlayerEvents implements Listener {
return;
}
Player bukkitPlayer = (Player) event.getDamager();
- if (hasContainerPermission(bukkitPlayer)) {
+ if (hasContainerPermission(bukkitPlayer, event.getEntity().getLocation())) {
return;
}
event.setCancelled(true);
@@ -394,14 +404,15 @@ public class PlayerEvents implements Listener {
@EventHandler(priority = EventPriority.HIGHEST) // craft
public void onCraft(InventoryOpenEvent event) {
- if (event.getInventory().getType() != InventoryType.WORKBENCH) {
+ Inventory inv = event.getInventory();
+ if (inv.getType() != InventoryType.WORKBENCH) {
return;
}
if (!(event.getPlayer() instanceof Player)) {
return;
}
Player bukkitPlayer = (Player) event.getPlayer();
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
+ DominionDTO dom = getInvDominion(bukkitPlayer, inv);
if (dom == null) {
return;
}
@@ -432,7 +443,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
+ DominionDTO dom = Cache.instance.getDominion(event.getClickedBlock().getLocation());
if (dom == null) {
return;
}
@@ -497,7 +508,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
+ DominionDTO dom = Cache.instance.getDominion(event.getClickedBlock().getLocation());
if (dom == null) {
return;
}
@@ -524,7 +535,7 @@ public class PlayerEvents implements Listener {
if (player == null) {
return;
}
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
+ DominionDTO dom = Cache.instance.getDominion(event.getEntity().getLocation());
if (dom == null) {
return;
}
@@ -584,7 +595,7 @@ public class PlayerEvents implements Listener {
return;
}
Player bukkitPlayer = (Player) event.getPlayer();
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
+ DominionDTO dom = getInvDominion(bukkitPlayer, event.getInventory());
if (dom == null) {
return;
}
@@ -641,7 +652,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
+ DominionDTO dom = Cache.instance.getDominion(event.getRightClicked().getLocation());
if (dom == null) {
return;
}
@@ -684,7 +695,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
+ DominionDTO dom = Cache.instance.getDominion(block.getLocation());
if (dom == null) {
return;
}
@@ -710,12 +721,13 @@ public class PlayerEvents implements Listener {
if (event.getClickedBlock() == null) {
return;
}
- Material clicked = event.getClickedBlock().getType();
+ Block block = event.getClickedBlock();
+ Material clicked = block.getType();
if (clicked != Material.BEEHIVE && clicked != Material.BEE_NEST) {
return;
}
Player player = event.getPlayer();
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
+ DominionDTO dom = Cache.instance.getDominion(block.getLocation());
if (dom == null) {
return;
}
@@ -738,8 +750,12 @@ public class PlayerEvents implements Listener {
@EventHandler(priority = EventPriority.HIGHEST) // hook
public void onHook(PlayerFishEvent event) {
+ Entity caught = event.getCaught();
+ if (caught == null) {
+ return;
+ }
Player player = event.getPlayer();
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
+ DominionDTO dom = Cache.instance.getDominion(caught.getLocation());
if (dom == null) {
return;
}
@@ -775,7 +791,7 @@ public class PlayerEvents implements Listener {
return;
}
Player bukkitPlayer = (Player) event.getPlayer();
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
+ DominionDTO dom = getInvDominion(bukkitPlayer, event.getInventory());
if (dom == null) {
return;
}
@@ -802,7 +818,7 @@ public class PlayerEvents implements Listener {
if (player == null) {
return;
}
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
+ DominionDTO dom = Cache.instance.getDominion(event.getBlock().getLocation());
if (dom == null) {
return;
}
@@ -828,12 +844,13 @@ public class PlayerEvents implements Listener {
if (event.getClickedBlock() == null) {
return;
}
- Material clicked = event.getClickedBlock().getType();
+ Block block = event.getClickedBlock();
+ Material clicked = block.getType();
if (clicked != Material.LEVER) {
return;
}
Player player = event.getPlayer();
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
+ DominionDTO dom = Cache.instance.getDominion(block.getLocation());
if (dom == null) {
return;
}
@@ -859,12 +876,13 @@ public class PlayerEvents implements Listener {
if (!(event.getDamager() instanceof Player)) {
return;
}
- // 如果不是动物 则不处理
- if (!(event.getEntity() instanceof Monster)) {
+ // 如果不是怪物 则不处理
+ Entity entity = event.getEntity();
+ if (!(entity instanceof Monster)) {
return;
}
Player bukkitPlayer = (Player) event.getDamager();
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
+ DominionDTO dom = Cache.instance.getDominion(entity.getLocation());
if (dom == null) {
return;
}
@@ -912,7 +930,7 @@ public class PlayerEvents implements Listener {
@EventHandler(priority = EventPriority.HIGHEST) // place
public void onPlaceBlock(BlockPlaceEvent event) {
Player player = event.getPlayer();
- if (onPlace(player)) {
+ if (onPlace(player, event.getBlock().getLocation())) {
return;
}
Notification.error(player, "你没有放置方块的权限");
@@ -922,15 +940,15 @@ public class PlayerEvents implements Listener {
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlaceLavaOrWater(PlayerBucketEmptyEvent event) {
Player player = event.getPlayer();
- if (onPlace(player)) {
+ if (onPlace(player, event.getBlock().getLocation())) {
return;
}
Notification.error(player, "你没有放置方块的权限");
event.setCancelled(true);
}
- public static boolean onPlace(Player player) {
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
+ public static boolean onPlace(Player player, Location location) {
+ DominionDTO dom = Cache.instance.getDominion(location);
if (dom == null) {
return true;
}
@@ -950,7 +968,8 @@ public class PlayerEvents implements Listener {
if (event.getClickedBlock() == null) {
return;
}
- Material clicked = event.getClickedBlock().getType();
+ Block block = event.getClickedBlock();
+ Material clicked = block.getType();
if (clicked != Material.STONE_PRESSURE_PLATE &&
clicked != Material.LIGHT_WEIGHTED_PRESSURE_PLATE &&
clicked != Material.HEAVY_WEIGHTED_PRESSURE_PLATE &&
@@ -969,7 +988,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
+ DominionDTO dom = Cache.instance.getDominion(block.getLocation());
if (dom == null) {
return;
}
@@ -996,7 +1015,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = (Player) event.getEntity();
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
+ DominionDTO dom = Cache.instance.getDominion(event.getMount().getLocation());
if (dom == null) {
return;
}
@@ -1022,12 +1041,13 @@ public class PlayerEvents implements Listener {
if (event.getClickedBlock() == null) {
return;
}
- Material clicked = event.getClickedBlock().getType();
+ Block block = event.getClickedBlock();
+ Material clicked = block.getType();
if (clicked != Material.REPEATER) {
return;
}
Player player = event.getPlayer();
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
+ DominionDTO dom = Cache.instance.getDominion(block.getLocation());
if (dom == null) {
return;
}
@@ -1051,7 +1071,7 @@ public class PlayerEvents implements Listener {
@EventHandler(priority = EventPriority.HIGHEST) // shear
public void onShear(PlayerShearEntityEvent event) {
Player player = event.getPlayer();
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
+ DominionDTO dom = Cache.instance.getDominion(event.getEntity().getLocation());
if (dom == null) {
return;
}
@@ -1113,7 +1133,7 @@ public class PlayerEvents implements Listener {
return;
}
Player bukkitPlayer = (Player) event.getPlayer();
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
+ DominionDTO dom = getInvDominion(bukkitPlayer, event.getInventory());
if (dom == null) {
return;
}
@@ -1140,7 +1160,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = (Player) event.getAttacker();
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
+ DominionDTO dom = Cache.instance.getDominion(event.getVehicle().getLocation());
if (dom == null) {
return;
}
@@ -1171,7 +1191,7 @@ public class PlayerEvents implements Listener {
if (!(entity instanceof Vehicle)) {
return;
}
- DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
+ DominionDTO dom = Cache.instance.getDominion(entity.getLocation());
if (dom == null) {
return;
}