This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
package net.therosegarden.firefighter;
|
||||
|
||||
import me.ryanhamshire.GriefPrevention.ClaimPermission;
|
||||
import me.ryanhamshire.GriefPrevention.events.ClaimPermissionCheckEvent;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
||||
|
||||
final class GriefPreventionBridge implements Listener {
|
||||
private final EmergencyManager emergencies;
|
||||
private final EmergencyPermissionManager permissions;
|
||||
private final EmergencyConstructionManager construction;
|
||||
|
||||
GriefPreventionBridge(EmergencyManager emergencies, EmergencyPermissionManager permissions,
|
||||
EmergencyConstructionManager construction) {
|
||||
this.emergencies = emergencies;
|
||||
this.permissions = permissions;
|
||||
this.construction = construction;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void onClaimPermissionCheck(ClaimPermissionCheckEvent event) {
|
||||
if (event.getRequiredPermission() != ClaimPermission.Build || event.getDenialReason() == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getCheckedPlayer();
|
||||
if (player == null || !permissions.hasBuildAccess(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Event trigger = event.getTriggeringEvent();
|
||||
if (trigger instanceof BlockPlaceEvent placeEvent) {
|
||||
allowIfInside(event, placeEvent.getBlock().getLocation());
|
||||
return;
|
||||
}
|
||||
|
||||
if (trigger instanceof PlayerBucketEmptyEvent bucketEvent) {
|
||||
allowIfInside(event, bucketEvent.getBlock().getLocation());
|
||||
return;
|
||||
}
|
||||
|
||||
if (trigger instanceof BlockBreakEvent breakEvent) {
|
||||
Block block = breakEvent.getBlock();
|
||||
if ((emergencies.isEmergencyFire(block) || construction.isTemporaryBlock(block))
|
||||
&& permissions.isInsideActiveSite(block.getLocation())) {
|
||||
event.setDenialReason(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void allowIfInside(ClaimPermissionCheckEvent event, Location location) {
|
||||
if (permissions.isInsideActiveSite(location)) {
|
||||
event.setDenialReason(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user