feat: add protected emergency build cleanup
Build / build (push) Failing after 11s

This commit is contained in:
Michael Burgess
2026-08-17 09:00:09 -04:00
parent d0f0133f57
commit d3ea6c5cc2
10 changed files with 488 additions and 3 deletions
@@ -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);
}
}
}