diff --git a/src/main/java/net/minecraft/server/BlockPressurePlateWeighted.java b/src/main/java/net/minecraft/server/BlockPressurePlateWeighted.java
index 7085569029..8bc708fc33 100644
--- a/src/main/java/net/minecraft/server/BlockPressurePlateWeighted.java
+++ b/src/main/java/net/minecraft/server/BlockPressurePlateWeighted.java
@@ -2,6 +2,8 @@ package net.minecraft.server;
 
 import java.util.List;
 
+import org.bukkit.event.entity.EntityInteractEvent; // CraftBukkit
+
 public class BlockPressurePlateWeighted extends BlockPressurePlateAbstract {
     private final int a;
 
@@ -11,7 +13,30 @@ public class BlockPressurePlateWeighted extends BlockPressurePlateAbstract {
     }
 
     protected int e(World world, int i, int j, int k) {
-        int l = Math.min(world.a(Entity.class, this.a(i, j, k)).size(), this.a);
+        // CraftBukkit start
+        int l = 0;
+        java.util.Iterator iterator = world.a(Entity.class, this.a(i, j, k)).iterator();
+
+        while (iterator.hasNext()) {
+            Entity entity = (Entity) iterator.next();
+
+            org.bukkit.event.Cancellable cancellable;
+
+            if (entity instanceof EntityHuman) {
+                cancellable = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerInteractEvent((EntityHuman) entity, org.bukkit.event.block.Action.PHYSICAL, i, j, k, -1, null);
+            } else {
+                cancellable = new EntityInteractEvent(entity.getBukkitEntity(), world.getWorld().getBlockAt(i, j, k));
+                world.getServer().getPluginManager().callEvent((EntityInteractEvent) cancellable);
+            }
+
+            // We only want to block turning the plate on if all events are cancelled
+            if (!cancellable.isCancelled()) {
+                l++;
+            }
+        }
+
+        l = Math.min(l, this.a);
+        // CraftBukkit end
 
         if (l <= 0) {
             return 0;