Search in sources :

Example 11 with Cause

use of com.sk89q.worldguard.bukkit.cause.Cause in project WorldGuard by EngineHub.

the class EventAbstractionListener method onBlockDispense.

@EventHandler(ignoreCancelled = true)
public void onBlockDispense(BlockDispenseEvent event) {
    Block dispenserBlock = event.getBlock();
    // Simulate right click event as players have it
    if (dispenserBlock.getType() == Material.DISPENSER) {
        Cause cause = create(event.getBlock());
        ItemStack item = event.getItem();
        if (Events.fireToCancel(event, new UseItemEvent(event, cause, dispenserBlock.getWorld(), item))) {
            return;
        }
        BlockData blockData = dispenserBlock.getBlockData();
        // if this ClassCastExceptions it's a bukkit bug
        Dispenser dispenser = (Dispenser) blockData;
        Block placed = dispenserBlock.getRelative(dispenser.getFacing());
        Block clicked = placed.getRelative(dispenser.getFacing());
        handleBlockRightClick(event, cause, item, clicked, placed);
        // handle special dispenser behavior
        if (Materials.isShulkerBox(item.getType())) {
            if (Events.fireToCancel(event, new PlaceBlockEvent(event, cause, placed.getLocation(), item.getType()))) {
                playDenyEffect(placed.getLocation());
            }
        } else if (isItemAppliedToBlock(item, placed)) {
            if (Events.fireToCancel(event, new PlaceBlockEvent(event, cause, placed.getLocation(), placed.getType()))) {
                playDenyEffect(placed.getLocation());
            }
        }
    }
}
Also used : Dispenser(org.bukkit.block.data.type.Dispenser) UseItemEvent(com.sk89q.worldguard.bukkit.event.inventory.UseItemEvent) Cause(com.sk89q.worldguard.bukkit.cause.Cause) FallingBlock(org.bukkit.entity.FallingBlock) Block(org.bukkit.block.Block) ItemStack(org.bukkit.inventory.ItemStack) BlockData(org.bukkit.block.data.BlockData) PlaceBlockEvent(com.sk89q.worldguard.bukkit.event.block.PlaceBlockEvent) EventHandler(org.bukkit.event.EventHandler)

Example 12 with Cause

use of com.sk89q.worldguard.bukkit.cause.Cause in project WorldGuard by EngineHub.

the class EventAbstractionListener method onEntityChangeBlock.

@EventHandler(ignoreCancelled = true)
public void onEntityChangeBlock(EntityChangeBlockEvent event) {
    Block block = event.getBlock();
    Entity entity = event.getEntity();
    Material toType = event.getTo();
    Material fromType = block.getType();
    Cause cause = create(entity);
    // Fire two events: one as BREAK and one as PLACE
    if (toType != Material.AIR && fromType != Material.AIR) {
        BreakBlockEvent breakDelagate = new BreakBlockEvent(event, cause, block);
        setDelegateEventMaterialOptions(breakDelagate, fromType, toType);
        boolean denied;
        if (!(denied = Events.fireToCancel(event, breakDelagate))) {
            PlaceBlockEvent placeDelegate = new PlaceBlockEvent(event, cause, block.getLocation(), toType);
            setDelegateEventMaterialOptions(placeDelegate, fromType, toType);
            denied = Events.fireToCancel(event, placeDelegate);
        }
        if (denied && entity instanceof Player) {
            playDenyEffect((Player) entity, block.getLocation());
        }
        handleFallingBlock(event, denied);
    } else if (toType == Material.AIR) {
        // Track the source so later we can create a proper chain of causes
        if (entity instanceof FallingBlock) {
            Cause.trackParentCause(entity, block);
            // Switch around the event
            Events.fireToCancel(event, new SpawnEntityEvent(event, create(block), entity));
        } else {
            entityBreakBlockDebounce.debounce(block, event.getEntity(), event, new BreakBlockEvent(event, cause, block));
        }
    } else {
        // toType != Material.AIR && fromType == Material.AIR
        boolean denied = Events.fireToCancel(event, new PlaceBlockEvent(event, cause, block.getLocation(), toType));
        handleFallingBlock(event, denied);
    }
}
Also used : FallingBlock(org.bukkit.entity.FallingBlock) Entity(org.bukkit.entity.Entity) LivingEntity(org.bukkit.entity.LivingEntity) Player(org.bukkit.entity.Player) Cause(com.sk89q.worldguard.bukkit.cause.Cause) FallingBlock(org.bukkit.entity.FallingBlock) Block(org.bukkit.block.Block) Material(org.bukkit.Material) BreakBlockEvent(com.sk89q.worldguard.bukkit.event.block.BreakBlockEvent) PlaceBlockEvent(com.sk89q.worldguard.bukkit.event.block.PlaceBlockEvent) SpawnEntityEvent(com.sk89q.worldguard.bukkit.event.entity.SpawnEntityEvent) EventHandler(org.bukkit.event.EventHandler)

Example 13 with Cause

use of com.sk89q.worldguard.bukkit.cause.Cause in project WorldGuard by EngineHub.

the class EventAbstractionListener method onBlockPistonExtend.

@EventHandler(ignoreCancelled = true)
public void onBlockPistonExtend(BlockPistonExtendEvent event) {
    EventDebounce.Entry entry = pistonExtendDebounce.getIfNotPresent(new BlockPistonExtendKey(event), event);
    if (entry != null) {
        Cause cause = create(event.getBlock());
        List<Block> blocks = new ArrayList<>(event.getBlocks());
        int originalLength = blocks.size();
        Events.fireBulkEventToCancel(event, new BreakBlockEvent(event, cause, event.getBlock().getWorld(), blocks, Material.AIR));
        if (originalLength != blocks.size()) {
            event.setCancelled(true);
            return;
        }
        BlockFace dir = event.getDirection();
        for (int i = 0; i < blocks.size(); i++) {
            Block existing = blocks.get(i);
            if (existing.getPistonMoveReaction() == PistonMoveReaction.MOVE || existing.getPistonMoveReaction() == PistonMoveReaction.PUSH_ONLY || existing.getType() == Material.PISTON || existing.getType() == Material.STICKY_PISTON) {
                blocks.set(i, existing.getRelative(dir));
            }
        }
        Events.fireBulkEventToCancel(event, new PlaceBlockEvent(event, cause, event.getBlock().getWorld(), blocks, Material.STONE));
        if (blocks.size() != originalLength) {
            event.setCancelled(true);
        }
        entry.setCancelled(event.isCancelled());
        if (event.isCancelled()) {
            playDenyEffect(event.getBlock().getLocation().add(0.5, 1, 0.5));
        }
    }
}
Also used : InventoryMoveItemEventDebounce(com.sk89q.worldguard.bukkit.listener.debounce.legacy.InventoryMoveItemEventDebounce) EventDebounce(com.sk89q.worldguard.bukkit.listener.debounce.EventDebounce) EntityEntityEventDebounce(com.sk89q.worldguard.bukkit.listener.debounce.legacy.EntityEntityEventDebounce) BlockEntityEventDebounce(com.sk89q.worldguard.bukkit.listener.debounce.legacy.BlockEntityEventDebounce) BlockFace(org.bukkit.block.BlockFace) Cause(com.sk89q.worldguard.bukkit.cause.Cause) Entry(com.sk89q.worldguard.bukkit.listener.debounce.legacy.AbstractEventDebounce.Entry) BlockPistonExtendKey(com.sk89q.worldguard.bukkit.listener.debounce.BlockPistonExtendKey) ArrayList(java.util.ArrayList) FallingBlock(org.bukkit.entity.FallingBlock) Block(org.bukkit.block.Block) BreakBlockEvent(com.sk89q.worldguard.bukkit.event.block.BreakBlockEvent) PlaceBlockEvent(com.sk89q.worldguard.bukkit.event.block.PlaceBlockEvent) EventHandler(org.bukkit.event.EventHandler)

Example 14 with Cause

use of com.sk89q.worldguard.bukkit.cause.Cause in project WorldGuard by EngineHub.

the class RegionProtectionListener method onBreakBlock.

@EventHandler(ignoreCancelled = true)
public void onBreakBlock(final BreakBlockEvent event) {
    // Don't care about events that have been pre-allowed
    if (event.getResult() == Result.ALLOW)
        return;
    // Region support disabled
    if (!isRegionSupportEnabled(event.getWorld()))
        return;
    // Whitelisted cause
    if (isWhitelisted(event.getCause(), event.getWorld(), false))
        return;
    final RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
    if (!event.isCancelled()) {
        final RegionAssociable associable = createRegionAssociable(event.getCause());
        event.filter((Predicate<Location>) target -> {
            boolean canBreak;
            String what;
            if (event.getCause().find(EntityType.PRIMED_TNT, EntityType.MINECART_TNT) != null) {
                canBreak = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.BLOCK_BREAK, Flags.TNT));
                what = "use dynamite";
            } else {
                canBreak = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.BLOCK_BREAK));
                what = "break that block";
            }
            if (!canBreak) {
                tellErrorMessage(event, event.getCause(), target, what);
                return false;
            }
            return true;
        });
    }
}
Also used : RegionAssociable(com.sk89q.worldguard.protection.association.RegionAssociable) Arrays(java.util.Arrays) Item(org.bukkit.entity.Item) Cause(com.sk89q.worldguard.bukkit.cause.Cause) Materials(com.sk89q.worldguard.bukkit.util.Materials) Event(org.bukkit.event.Event) InteropUtils(com.sk89q.worldguard.bukkit.util.InteropUtils) Player(org.bukkit.entity.Player) WGMetadata(com.sk89q.worldguard.bukkit.internal.WGMetadata) CommandUtils(com.sk89q.worldguard.commands.CommandUtils) ArrayList(java.util.ArrayList) EventHandler(org.bukkit.event.EventHandler) Block(org.bukkit.block.Block) Location(org.bukkit.Location) BreakBlockEvent(com.sk89q.worldguard.bukkit.event.block.BreakBlockEvent) ItemFrame(org.bukkit.entity.ItemFrame) World(org.bukkit.World) WorldGuard(com.sk89q.worldguard.WorldGuard) StateFlag(com.sk89q.worldguard.protection.flags.StateFlag) UseBlockEvent(com.sk89q.worldguard.bukkit.event.block.UseBlockEvent) Material(org.bukkit.Material) UseEntityEvent(com.sk89q.worldguard.bukkit.event.entity.UseEntityEvent) Entities(com.sk89q.worldguard.bukkit.util.Entities) RegionAssociable(com.sk89q.worldguard.protection.association.RegionAssociable) Entity(org.bukkit.entity.Entity) State(com.sk89q.worldguard.protection.flags.StateFlag.State) DestroyEntityEvent(com.sk89q.worldguard.bukkit.event.entity.DestroyEntityEvent) WorldGuardPlugin(com.sk89q.worldguard.bukkit.WorldGuardPlugin) Flags(com.sk89q.worldguard.protection.flags.Flags) LocalPlayer(com.sk89q.worldguard.LocalPlayer) Events(com.sk89q.worldguard.bukkit.util.Events) RegionQuery(com.sk89q.worldguard.protection.regions.RegionQuery) EntityType(org.bukkit.entity.EntityType) Result(org.bukkit.event.Event.Result) PlayerTakeLecternBookEvent(org.bukkit.event.player.PlayerTakeLecternBookEvent) DelegateEvent(com.sk89q.worldguard.bukkit.event.DelegateEvent) DamageEntityEvent(com.sk89q.worldguard.bukkit.event.entity.DamageEntityEvent) List(java.util.List) WorldConfiguration(com.sk89q.worldguard.config.WorldConfiguration) ExperienceOrb(org.bukkit.entity.ExperienceOrb) Predicate(com.google.common.base.Predicate) PlaceBlockEvent(com.sk89q.worldguard.bukkit.event.block.PlaceBlockEvent) BukkitAdapter(com.sk89q.worldedit.bukkit.BukkitAdapter) DisallowedPVPEvent(com.sk89q.worldguard.bukkit.protection.events.DisallowedPVPEvent) VehicleExitEvent(org.bukkit.event.vehicle.VehicleExitEvent) ChatColor(org.bukkit.ChatColor) SpawnEntityEvent(com.sk89q.worldguard.bukkit.event.entity.SpawnEntityEvent) Tameable(org.bukkit.entity.Tameable) RegionQuery(com.sk89q.worldguard.protection.regions.RegionQuery) Location(org.bukkit.Location) EventHandler(org.bukkit.event.EventHandler)

Example 15 with Cause

use of com.sk89q.worldguard.bukkit.cause.Cause in project WorldGuard by EngineHub.

the class RegionProtectionListener method onUseBlock.

@EventHandler(ignoreCancelled = true)
public void onUseBlock(final UseBlockEvent event) {
    // Don't care about events that have been pre-allowed
    if (event.getResult() == Result.ALLOW)
        return;
    // Region support disabled
    if (!isRegionSupportEnabled(event.getWorld()))
        return;
    // Whitelisted cause
    if (isWhitelisted(event.getCause(), event.getWorld(), false))
        return;
    final Material type = event.getEffectiveMaterial();
    final RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
    final RegionAssociable associable = createRegionAssociable(event.getCause());
    event.filter((Predicate<Location>) target -> {
        boolean canUse;
        String what;
        if (Materials.isConsideredBuildingIfUsed(type)) {
            canUse = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event));
            what = "use that";
        } else if (Materials.isInventoryBlock(type)) {
            canUse = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.CHEST_ACCESS));
            what = "open that";
        } else if (handleAsInventoryUsage(event.getOriginalEvent())) {
            canUse = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.CHEST_ACCESS));
            what = "take that";
        } else if (Materials.isAnvil(type)) {
            canUse = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.USE_ANVIL));
            what = "use that";
        } else if (Materials.isBed(type)) {
            canUse = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.INTERACT, Flags.SLEEP));
            what = "sleep";
        } else if (type == Material.RESPAWN_ANCHOR) {
            canUse = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.INTERACT, Flags.RESPAWN_ANCHORS));
            what = "use anchors";
        } else if (type == Material.TNT) {
            canUse = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.INTERACT, Flags.TNT));
            what = "use explosives";
        } else if (Materials.isUseFlagApplicable(type)) {
            canUse = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.INTERACT, Flags.USE));
            what = "use that";
        } else {
            canUse = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.INTERACT));
            what = "use that";
        }
        if (!canUse) {
            tellErrorMessage(event, event.getCause(), target, what);
            return false;
        }
        return true;
    });
}
Also used : RegionAssociable(com.sk89q.worldguard.protection.association.RegionAssociable) Arrays(java.util.Arrays) Item(org.bukkit.entity.Item) Cause(com.sk89q.worldguard.bukkit.cause.Cause) Materials(com.sk89q.worldguard.bukkit.util.Materials) Event(org.bukkit.event.Event) InteropUtils(com.sk89q.worldguard.bukkit.util.InteropUtils) Player(org.bukkit.entity.Player) WGMetadata(com.sk89q.worldguard.bukkit.internal.WGMetadata) CommandUtils(com.sk89q.worldguard.commands.CommandUtils) ArrayList(java.util.ArrayList) EventHandler(org.bukkit.event.EventHandler) Block(org.bukkit.block.Block) Location(org.bukkit.Location) BreakBlockEvent(com.sk89q.worldguard.bukkit.event.block.BreakBlockEvent) ItemFrame(org.bukkit.entity.ItemFrame) World(org.bukkit.World) WorldGuard(com.sk89q.worldguard.WorldGuard) StateFlag(com.sk89q.worldguard.protection.flags.StateFlag) UseBlockEvent(com.sk89q.worldguard.bukkit.event.block.UseBlockEvent) Material(org.bukkit.Material) UseEntityEvent(com.sk89q.worldguard.bukkit.event.entity.UseEntityEvent) Entities(com.sk89q.worldguard.bukkit.util.Entities) RegionAssociable(com.sk89q.worldguard.protection.association.RegionAssociable) Entity(org.bukkit.entity.Entity) State(com.sk89q.worldguard.protection.flags.StateFlag.State) DestroyEntityEvent(com.sk89q.worldguard.bukkit.event.entity.DestroyEntityEvent) WorldGuardPlugin(com.sk89q.worldguard.bukkit.WorldGuardPlugin) Flags(com.sk89q.worldguard.protection.flags.Flags) LocalPlayer(com.sk89q.worldguard.LocalPlayer) Events(com.sk89q.worldguard.bukkit.util.Events) RegionQuery(com.sk89q.worldguard.protection.regions.RegionQuery) EntityType(org.bukkit.entity.EntityType) Result(org.bukkit.event.Event.Result) PlayerTakeLecternBookEvent(org.bukkit.event.player.PlayerTakeLecternBookEvent) DelegateEvent(com.sk89q.worldguard.bukkit.event.DelegateEvent) DamageEntityEvent(com.sk89q.worldguard.bukkit.event.entity.DamageEntityEvent) List(java.util.List) WorldConfiguration(com.sk89q.worldguard.config.WorldConfiguration) ExperienceOrb(org.bukkit.entity.ExperienceOrb) Predicate(com.google.common.base.Predicate) PlaceBlockEvent(com.sk89q.worldguard.bukkit.event.block.PlaceBlockEvent) BukkitAdapter(com.sk89q.worldedit.bukkit.BukkitAdapter) DisallowedPVPEvent(com.sk89q.worldguard.bukkit.protection.events.DisallowedPVPEvent) VehicleExitEvent(org.bukkit.event.vehicle.VehicleExitEvent) ChatColor(org.bukkit.ChatColor) SpawnEntityEvent(com.sk89q.worldguard.bukkit.event.entity.SpawnEntityEvent) Tameable(org.bukkit.entity.Tameable) RegionQuery(com.sk89q.worldguard.protection.regions.RegionQuery) Material(org.bukkit.Material) Location(org.bukkit.Location) EventHandler(org.bukkit.event.EventHandler)

Aggregations

Cause (com.sk89q.worldguard.bukkit.cause.Cause)15 EventHandler (org.bukkit.event.EventHandler)15 PlaceBlockEvent (com.sk89q.worldguard.bukkit.event.block.PlaceBlockEvent)11 Block (org.bukkit.block.Block)10 BreakBlockEvent (com.sk89q.worldguard.bukkit.event.block.BreakBlockEvent)7 FallingBlock (org.bukkit.entity.FallingBlock)7 ArrayList (java.util.ArrayList)6 DelegateEvent (com.sk89q.worldguard.bukkit.event.DelegateEvent)5 DamageEntityEvent (com.sk89q.worldguard.bukkit.event.entity.DamageEntityEvent)5 SpawnEntityEvent (com.sk89q.worldguard.bukkit.event.entity.SpawnEntityEvent)5 WorldConfiguration (com.sk89q.worldguard.config.WorldConfiguration)5 Material (org.bukkit.Material)5 Entity (org.bukkit.entity.Entity)5 Player (org.bukkit.entity.Player)5 UseBlockEvent (com.sk89q.worldguard.bukkit.event.block.UseBlockEvent)4 UseEntityEvent (com.sk89q.worldguard.bukkit.event.entity.UseEntityEvent)4 UseItemEvent (com.sk89q.worldguard.bukkit.event.inventory.UseItemEvent)4 World (org.bukkit.World)4 Predicate (com.google.common.base.Predicate)3 BukkitAdapter (com.sk89q.worldedit.bukkit.BukkitAdapter)3