Skip to content

Commit

Permalink
Fix for double drop exploit using pistons.
Browse files Browse the repository at this point in the history
  • Loading branch information
gmcferrin committed Mar 20, 2012
1 parent 49bb7ec commit 3da8955
Showing 1 changed file with 45 additions and 0 deletions.
45 changes: 45 additions & 0 deletions src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java
@@ -1,5 +1,7 @@
package com.gmail.nossr50.listeners;

import java.util.List;

import com.gmail.nossr50.BlockChecks;
import com.gmail.nossr50.ItemChecks;
import com.gmail.nossr50.mcMMO;
Expand All @@ -21,12 +23,15 @@
import org.bukkit.CropState;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
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.BlockDamageEvent;
import org.bukkit.event.block.BlockPistonExtendEvent;
import org.bukkit.event.block.BlockPistonRetractEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.player.PlayerAnimationEvent;
import org.bukkit.inventory.ItemStack;
Expand All @@ -46,6 +51,46 @@ public mcBlockListener(final mcMMO plugin) {
this.plugin = plugin;
}

/**
* Monitor BlockPistonExtend events.
*
* @param event The event to monitor
*/
@EventHandler(priority = EventPriority.MONITOR)
public void onBlockPistonExtend(BlockPistonExtendEvent event) {
List<Block> blocks = event.getBlocks();
BlockFace direction = event.getDirection();

for (Block b : blocks) {
if (b.hasMetadata("mcmmoPlacedBlock")) {
b.getRelative(direction).setMetadata("mcmmoNeedsTracking", new FixedMetadataValue(plugin, true));
b.removeMetadata("mcmmoPlacedBlock", plugin);
}
}

for (Block b : blocks) {
if (b.hasMetadata("mcmmoNeedsTracking")) {
b.setMetadata("mcmmoPlacedBlock", new FixedMetadataValue(plugin, true));
b.removeMetadata("mcmmoNeedsTracking", plugin);
}
}
}

/**
* Monitor BlockPistonRetract events.
*
* @param event The event to monitor
*/
@EventHandler(priority = EventPriority.MONITOR)
public void onBlockPistonRetract(BlockPistonRetractEvent event) {
Block block = event.getRetractLocation().getBlock();

if (block.hasMetadata("mcmmoPlacedBlock")) {
block.removeMetadata("mcmmoPlacedBlock", plugin);
event.getBlock().getRelative(event.getDirection(), 1).setMetadata("mcmmoPlacedBlock", new FixedMetadataValue(plugin, true));
}
}

/**
* Monitor BlockPlace events.
*
Expand Down

0 comments on commit 3da8955

Please sign in to comment.