summaryrefslogtreecommitdiffstats
path: root/src/main/java/net/minecraft/server/BlockTripwire.java
diff options
context:
space:
mode:
authorTravis Watkins <amaranth@ubuntu.com>2013-03-22 14:34:18 -0500
committerTravis Watkins <amaranth@ubuntu.com>2013-03-22 17:18:19 -0500
commit444ced306aec533bcc242ab0ba2bcded022da5f3 (patch)
treebd7f7369d3c10d8d4ea24a6608aa362b41a7952e /src/main/java/net/minecraft/server/BlockTripwire.java
parentae19f2c46f8232239488d8218ce69a6e5e5ae22a (diff)
downloadcraftbukkit-444ced306aec533bcc242ab0ba2bcded022da5f3.tar
craftbukkit-444ced306aec533bcc242ab0ba2bcded022da5f3.tar.gz
craftbukkit-444ced306aec533bcc242ab0ba2bcded022da5f3.tar.lz
craftbukkit-444ced306aec533bcc242ab0ba2bcded022da5f3.tar.xz
craftbukkit-444ced306aec533bcc242ab0ba2bcded022da5f3.zip
Cleanup and rework physical interaction events. Fixes BUKKIT-3686
Currently when dealing with physical interactions with pressure plates and tripwires we immediately block their activation as soon as a single entity involved has their event cancelled. We also fire events whenever an entity intersects the block a wooden button is in even if they aren't actually pressing it. To correct this we move the button interaction to the correct place and modify all three to only block the activation if every entity is blocked from using them instead of just one of them.
Diffstat (limited to 'src/main/java/net/minecraft/server/BlockTripwire.java')
-rw-r--r--src/main/java/net/minecraft/server/BlockTripwire.java48
1 files changed, 27 insertions, 21 deletions
diff --git a/src/main/java/net/minecraft/server/BlockTripwire.java b/src/main/java/net/minecraft/server/BlockTripwire.java
index 520b4e3e..f020300f 100644
--- a/src/main/java/net/minecraft/server/BlockTripwire.java
+++ b/src/main/java/net/minecraft/server/BlockTripwire.java
@@ -147,31 +147,37 @@ public class BlockTripwire extends Block {
}
}
- // CraftBukkit start
- org.bukkit.World bworld = world.getWorld();
- org.bukkit.plugin.PluginManager manager = world.getServer().getPluginManager();
-
- if (flag != flag1) {
- if (flag1) {
- for (Object object : list) {
- if (object != null) {
- org.bukkit.event.Cancellable cancellable;
-
- if (object instanceof EntityHuman) {
- cancellable = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerInteractEvent((EntityHuman) object, org.bukkit.event.block.Action.PHYSICAL, i, j, k, -1, null);
- } else if (object instanceof Entity) {
- cancellable = new EntityInteractEvent(((Entity) object).getBukkitEntity(), bworld.getBlockAt(i, j, k));
- manager.callEvent((EntityInteractEvent) cancellable);
- } else {
- continue;
- }
+ // CraftBukkit start - Call interact even when triggering connected tripwire
+ if (flag != flag1 && flag1 && (world.getData(i, j, k) & 4) == 4) {
+ org.bukkit.World bworld = world.getWorld();
+ org.bukkit.plugin.PluginManager manager = world.getServer().getPluginManager();
+ org.bukkit.block.Block block = bworld.getBlockAt(i, j, k);
+ boolean allowed = false;
+
+ // If all of the events are cancelled block the tripwire trigger, else allow
+ for (Object object : list) {
+ if (object != null) {
+ org.bukkit.event.Cancellable cancellable;
+
+ if (object instanceof EntityHuman) {
+ cancellable = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerInteractEvent((EntityHuman) object, org.bukkit.event.block.Action.PHYSICAL, i, j, k, -1, null);
+ } else if (object instanceof Entity) {
+ cancellable = new EntityInteractEvent(((Entity) object).getBukkitEntity(), block);
+ manager.callEvent((EntityInteractEvent) cancellable);
+ } else {
+ continue;
+ }
- if (cancellable.isCancelled()) {
- return;
- }
+ if (!cancellable.isCancelled()) {
+ allowed = true;
+ break;
}
}
}
+
+ if (!allowed) {
+ return;
+ }
}
// CraftBukkit end