summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Wilson <sam.wilson@gmail.com>2011-12-16 12:31:00 -0800
committerAndrew Ardill <andrew.ardill@gmail.com>2011-12-19 18:22:38 +1100
commita7744ac751842e1adbeb1ee125bf8be093d4e0bc (patch)
treefe73a17b76a980032700cfce0542b81e9a4dca5c
parent2c72f9f5af3a2ed7dd2982595f73d1935270efc0 (diff)
downloadcraftbukkit-a7744ac751842e1adbeb1ee125bf8be093d4e0bc.tar
craftbukkit-a7744ac751842e1adbeb1ee125bf8be093d4e0bc.tar.gz
craftbukkit-a7744ac751842e1adbeb1ee125bf8be093d4e0bc.tar.lz
craftbukkit-a7744ac751842e1adbeb1ee125bf8be093d4e0bc.tar.xz
craftbukkit-a7744ac751842e1adbeb1ee125bf8be093d4e0bc.zip
Prevent VehicleEnterEvent being sent when player exits vehicle.
Fix for BUKKIT-223. Issue BUKKIT-223: When a player exits a minecart or boat, both a VehicleExitEvent and a VehicleEnterEvent are fired. Only the VehicleExitEvent should fire. Reason for bug: This occurs because the VehicleEnterEvent is fired in EntityBoat.b and EntityMinecart.b *any* time a player right-clicks on a vehicle, whether the right-click is to enter the vehicle or exit it. Fix: By moving the creation of VehicleEnterEvents from EntityBoat.b and EntityMinecart.b to Entity.setPassengerOf, we can create either a VehicleEnterEvent or a VehicleExitEvent, depending on whether the player is entering or exiting a vehicle.
-rw-r--r--src/main/java/net/minecraft/server/Entity.java12
-rw-r--r--src/main/java/net/minecraft/server/EntityBoat.java9
-rw-r--r--src/main/java/net/minecraft/server/EntityMinecart.java20
3 files changed, 13 insertions, 28 deletions
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index 4759b92b..41105127 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -14,6 +14,7 @@ import org.bukkit.event.entity.EntityCombustByBlockEvent;
import org.bukkit.event.entity.EntityCombustByEntityEvent;
import org.bukkit.event.painting.PaintingBreakByEntityEvent;
import org.bukkit.event.vehicle.VehicleBlockCollisionEvent;
+import org.bukkit.event.vehicle.VehicleEnterEvent;
import org.bukkit.event.vehicle.VehicleExitEvent;
import org.bukkit.craftbukkit.entity.CraftPlayer;
import org.bukkit.event.entity.EntityCombustEvent;
@@ -1228,6 +1229,17 @@ public abstract class Entity {
this.vehicle = null;
this.setPositionRotation(entity.locX, entity.boundingBox.b + (double) entity.length, entity.locZ, this.yaw, this.pitch);
} else {
+ // CraftBukkit start
+ if ((this.getBukkitEntity() instanceof LivingEntity) && (entity != null) && (entity.getBukkitEntity() instanceof Vehicle)) {
+ VehicleEnterEvent event = new VehicleEnterEvent((Vehicle) entity.getBukkitEntity(), (LivingEntity) this.getBukkitEntity());
+ this.world.getServer().getPluginManager().callEvent(event);
+
+ if (event.isCancelled()) {
+ return;
+ }
+ }
+ // CraftBukkit end
+
if (this.vehicle != null) {
this.vehicle.passenger = null;
}
diff --git a/src/main/java/net/minecraft/server/EntityBoat.java b/src/main/java/net/minecraft/server/EntityBoat.java
index f3666af9..6ed6d928 100644
--- a/src/main/java/net/minecraft/server/EntityBoat.java
+++ b/src/main/java/net/minecraft/server/EntityBoat.java
@@ -420,15 +420,6 @@ public class EntityBoat extends Entity {
return true;
} else {
if (!this.world.isStatic) {
- // CraftBukkit start
- VehicleEnterEvent event = new VehicleEnterEvent((Vehicle) this.getBukkitEntity(), entityhuman.getBukkitEntity());
- this.world.getServer().getPluginManager().callEvent(event);
-
- if (event.isCancelled()) {
- return true;
- }
- // CraftBukkit end
-
entityhuman.mount(this);
}
diff --git a/src/main/java/net/minecraft/server/EntityMinecart.java b/src/main/java/net/minecraft/server/EntityMinecart.java
index b50d5bcc..4d755d0a 100644
--- a/src/main/java/net/minecraft/server/EntityMinecart.java
+++ b/src/main/java/net/minecraft/server/EntityMinecart.java
@@ -725,14 +725,7 @@ public class EntityMinecart extends Entity implements IInventory {
}
if (entity instanceof EntityLiving && !(entity instanceof EntityHuman) && this.type == 0 && this.motX * this.motX + this.motZ * this.motZ > 0.01D && this.passenger == null && entity.vehicle == null) {
- if (!collisionEvent.isPickupCancelled()) {
- VehicleEnterEvent enterEvent = new VehicleEnterEvent(vehicle, hitEntity);
- this.world.getServer().getPluginManager().callEvent(enterEvent);
-
- if (!enterEvent.isCancelled()) {
- entity.mount(this);
- }
- }
+ entity.mount(this);
}
// CraftBukkit end
@@ -857,17 +850,6 @@ public class EntityMinecart extends Entity implements IInventory {
}
if (!this.world.isStatic) {
- // CraftBukkit start
- org.bukkit.entity.Entity player = (entityhuman == null) ? null : entityhuman.getBukkitEntity();
-
- VehicleEnterEvent event = new VehicleEnterEvent((Vehicle) this.getBukkitEntity(), player);
- this.world.getServer().getPluginManager().callEvent(event);
-
- if (event.isCancelled()) {
- return true;
- }
- // CraftBukkit end
-
entityhuman.mount(this);
}
} else if (this.type == 1) {