This commit is contained in:
@@ -12,6 +12,7 @@ import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
|
||||
final class GriefPreventionBridge implements Listener {
|
||||
private final EmergencyManager emergencies;
|
||||
@@ -25,7 +26,7 @@ final class GriefPreventionBridge implements Listener {
|
||||
this.construction = construction;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = false)
|
||||
public void onClaimPermissionCheck(ClaimPermissionCheckEvent event) {
|
||||
if (event.getRequiredPermission() != ClaimPermission.Build || event.getDenialReason() == null) {
|
||||
return;
|
||||
@@ -36,6 +37,11 @@ final class GriefPreventionBridge implements Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
EmergencySite activeSite = emergencies.activeSite();
|
||||
if (!isIncidentClaim(activeSite, event)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Event trigger = event.getTriggeringEvent();
|
||||
if (trigger instanceof BlockPlaceEvent placeEvent) {
|
||||
allowIfInside(event, placeEvent.getBlock().getLocation());
|
||||
@@ -47,6 +53,14 @@ final class GriefPreventionBridge implements Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
if (trigger instanceof PlayerInteractEvent interactEvent) {
|
||||
Block block = interactEvent.getClickedBlock();
|
||||
if (block != null) {
|
||||
allowIfInside(event, block.getLocation());
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (trigger instanceof BlockBreakEvent breakEvent) {
|
||||
Block block = breakEvent.getBlock();
|
||||
if (permissions.isInsideActiveSite(block.getLocation())
|
||||
@@ -58,6 +72,14 @@ final class GriefPreventionBridge implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isIncidentClaim(EmergencySite activeSite, ClaimPermissionCheckEvent event) {
|
||||
if (activeSite == null || activeSite.griefPreventionClaimId() == null || event.getClaim() == null) {
|
||||
return false;
|
||||
}
|
||||
Long checkedClaimId = event.getClaim().getID();
|
||||
return checkedClaimId != null && checkedClaimId.equals(activeSite.griefPreventionClaimId());
|
||||
}
|
||||
|
||||
private void allowIfInside(ClaimPermissionCheckEvent event, Location location) {
|
||||
if (permissions.isInsideActiveSite(location)) {
|
||||
event.setDenialReason(null);
|
||||
|
||||
Reference in New Issue
Block a user