Search in sources :

Example 1 with Entry

use of com.sk89q.worldguard.bukkit.listener.debounce.legacy.AbstractEventDebounce.Entry in project WorldGuard by EngineHub.

the class EventAbstractionListener method onBlockPistonRetract.

@EventHandler(ignoreCancelled = true)
public void onBlockPistonRetract(BlockPistonRetractEvent event) {
    if (event.isSticky()) {
        EventDebounce.Entry entry = pistonRetractDebounce.getIfNotPresent(new BlockPistonRetractKey(event), event);
        if (entry != null) {
            Block piston = event.getBlock();
            Cause cause = create(piston);
            BlockFace direction = event.getDirection();
            ArrayList<Block> blocks = new ArrayList<>(event.getBlocks());
            int originalSize = blocks.size();
            Events.fireBulkEventToCancel(event, new BreakBlockEvent(event, cause, event.getBlock().getWorld(), blocks, Material.AIR));
            if (originalSize != blocks.size()) {
                event.setCancelled(true);
                return;
            }
            for (Block b : blocks) {
                Location loc = b.getRelative(direction).getLocation();
                Events.fireToCancel(event, new PlaceBlockEvent(event, cause, loc, b.getType()));
            }
            entry.setCancelled(event.isCancelled());
            if (event.isCancelled()) {
                playDenyEffect(piston.getLocation().add(0.5, 1, 0.5));
            }
        }
    }
}
Also used : BlockPistonRetractKey(com.sk89q.worldguard.bukkit.listener.debounce.BlockPistonRetractKey) 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) 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) Location(org.bukkit.Location) EventHandler(org.bukkit.event.EventHandler)

Example 2 with Entry

use of com.sk89q.worldguard.bukkit.listener.debounce.legacy.AbstractEventDebounce.Entry in project WorldGuard by EngineHub.

the class EventAbstractionListener method onInventoryMoveItem.

@EventHandler(ignoreCancelled = true)
public void onInventoryMoveItem(InventoryMoveItemEvent event) {
    InventoryHolder causeHolder;
    if (HAS_SNAPSHOT_INVHOLDER) {
        causeHolder = event.getInitiator().getHolder(false);
    } else {
        causeHolder = event.getInitiator().getHolder();
    }
    WorldConfiguration wcfg = null;
    if (causeHolder instanceof Hopper && (wcfg = getWorldConfig((((Hopper) causeHolder).getWorld()))).ignoreHopperMoveEvents) {
        return;
    } else if (causeHolder instanceof HopperMinecart && (wcfg = getWorldConfig((((HopperMinecart) causeHolder).getWorld()))).ignoreHopperMoveEvents) {
        return;
    }
    Entry entry;
    if ((entry = moveItemDebounce.tryDebounce(event)) != null) {
        InventoryHolder sourceHolder;
        InventoryHolder targetHolder;
        /*if (HAS_SNAPSHOT_INVHOLDER) {
                sourceHolder = event.getSource().getHolder(false);
                targetHolder = event.getDestination().getHolder(false);
            } else {*/
        sourceHolder = event.getSource().getHolder();
        targetHolder = event.getDestination().getHolder();
        // }
        Cause cause;
        if (causeHolder instanceof Entity) {
            cause = create(causeHolder);
        } else if (causeHolder instanceof BlockState) {
            cause = create(((BlockState) causeHolder).getBlock());
        } else {
            cause = Cause.unknown();
        }
        if (causeHolder != null && !causeHolder.equals(sourceHolder)) {
            handleInventoryHolderUse(event, cause, sourceHolder);
        }
        handleInventoryHolderUse(event, cause, targetHolder);
        if (event.isCancelled() && causeHolder instanceof Hopper && wcfg.breakDeniedHoppers) {
            Bukkit.getScheduler().scheduleSyncDelayedTask(getPlugin(), () -> ((Hopper) causeHolder).getBlock().breakNaturally());
        } else {
            entry.setCancelled(event.isCancelled());
        }
    }
}
Also used : Entity(org.bukkit.entity.Entity) LivingEntity(org.bukkit.entity.LivingEntity) WorldConfiguration(com.sk89q.worldguard.config.WorldConfiguration) BukkitWorldConfiguration(com.sk89q.worldguard.bukkit.BukkitWorldConfiguration) HopperMinecart(org.bukkit.entity.minecart.HopperMinecart) Entry(com.sk89q.worldguard.bukkit.listener.debounce.legacy.AbstractEventDebounce.Entry) BlockState(org.bukkit.block.BlockState) Cause(com.sk89q.worldguard.bukkit.cause.Cause) Hopper(org.bukkit.block.Hopper) InventoryHolder(org.bukkit.inventory.InventoryHolder) EventHandler(org.bukkit.event.EventHandler)

Example 3 with Entry

use of com.sk89q.worldguard.bukkit.listener.debounce.legacy.AbstractEventDebounce.Entry 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)

Aggregations

Cause (com.sk89q.worldguard.bukkit.cause.Cause)3 Entry (com.sk89q.worldguard.bukkit.listener.debounce.legacy.AbstractEventDebounce.Entry)3 EventHandler (org.bukkit.event.EventHandler)3 BreakBlockEvent (com.sk89q.worldguard.bukkit.event.block.BreakBlockEvent)2 PlaceBlockEvent (com.sk89q.worldguard.bukkit.event.block.PlaceBlockEvent)2 EventDebounce (com.sk89q.worldguard.bukkit.listener.debounce.EventDebounce)2 BlockEntityEventDebounce (com.sk89q.worldguard.bukkit.listener.debounce.legacy.BlockEntityEventDebounce)2 EntityEntityEventDebounce (com.sk89q.worldguard.bukkit.listener.debounce.legacy.EntityEntityEventDebounce)2 InventoryMoveItemEventDebounce (com.sk89q.worldguard.bukkit.listener.debounce.legacy.InventoryMoveItemEventDebounce)2 ArrayList (java.util.ArrayList)2 Block (org.bukkit.block.Block)2 BlockFace (org.bukkit.block.BlockFace)2 FallingBlock (org.bukkit.entity.FallingBlock)2 BukkitWorldConfiguration (com.sk89q.worldguard.bukkit.BukkitWorldConfiguration)1 BlockPistonExtendKey (com.sk89q.worldguard.bukkit.listener.debounce.BlockPistonExtendKey)1 BlockPistonRetractKey (com.sk89q.worldguard.bukkit.listener.debounce.BlockPistonRetractKey)1 WorldConfiguration (com.sk89q.worldguard.config.WorldConfiguration)1 Location (org.bukkit.Location)1 BlockState (org.bukkit.block.BlockState)1 Hopper (org.bukkit.block.Hopper)1