From ab1e1a2a5ae1e6cc42afe8bf48832721407365fd Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 2 Jul 2013 20:33:10 +1000 Subject: [PATCH] Add Entity Mount and Dismount Events - very useful for horses! Thanks @lazertester for the idea! --- ...010-Entity-Mount-and-Dismount-Events.patch | 112 ++++++++++++++++++ ...061-Entity-Mount-and-Dismount-Events.patch | 39 ++++++ 2 files changed, 151 insertions(+) create mode 100644 Bukkit-Patches/0010-Entity-Mount-and-Dismount-Events.patch create mode 100644 CraftBukkit-Patches/0061-Entity-Mount-and-Dismount-Events.patch diff --git a/Bukkit-Patches/0010-Entity-Mount-and-Dismount-Events.patch b/Bukkit-Patches/0010-Entity-Mount-and-Dismount-Events.patch new file mode 100644 index 000000000..2fd30d214 --- /dev/null +++ b/Bukkit-Patches/0010-Entity-Mount-and-Dismount-Events.patch @@ -0,0 +1,112 @@ +From 0f3bb9c6ff5727243486a28ce8470ec7024d2e70 Mon Sep 17 00:00:00 2001 +From: md_5 +Date: Tue, 2 Jul 2013 20:32:53 +1000 +Subject: [PATCH] Entity Mount and Dismount Events + + +diff --git a/src/main/java/org/spigotmc/event/entity/EntityDismountEvent.java b/src/main/java/org/spigotmc/event/entity/EntityDismountEvent.java +new file mode 100644 +index 0000000..24d4942 +--- /dev/null ++++ b/src/main/java/org/spigotmc/event/entity/EntityDismountEvent.java +@@ -0,0 +1,39 @@ ++package org.spigotmc.event.entity; ++ ++import org.bukkit.entity.Entity; ++import org.bukkit.event.HandlerList; ++import org.bukkit.event.entity.EntityEvent; ++ ++/** ++ * Called when an entity stops riding another entity. ++ * ++ */ ++public class EntityDismountEvent extends EntityEvent ++{ ++ ++ private static final HandlerList handlers = new HandlerList(); ++ private boolean cancelled; ++ private final Entity dismounted; ++ ++ public EntityDismountEvent(Entity what, Entity dismounted) ++ { ++ super( what ); ++ this.dismounted = dismounted; ++ } ++ ++ public Entity getDismounted() ++ { ++ return dismounted; ++ } ++ ++ @Override ++ public HandlerList getHandlers() ++ { ++ return handlers; ++ } ++ ++ public static HandlerList getHandlerList() ++ { ++ return handlers; ++ } ++} +diff --git a/src/main/java/org/spigotmc/event/entity/EntityMountEvent.java b/src/main/java/org/spigotmc/event/entity/EntityMountEvent.java +new file mode 100644 +index 0000000..16aa2a7 +--- /dev/null ++++ b/src/main/java/org/spigotmc/event/entity/EntityMountEvent.java +@@ -0,0 +1,52 @@ ++package org.spigotmc.event.entity; ++ ++import org.bukkit.entity.Entity; ++import org.bukkit.event.Cancellable; ++import org.bukkit.event.HandlerList; ++import org.bukkit.event.entity.EntityEvent; ++ ++/** ++ * Called when an entity attempts to ride another entity. ++ * ++ */ ++public class EntityMountEvent extends EntityEvent implements Cancellable ++{ ++ ++ private static final HandlerList handlers = new HandlerList(); ++ private boolean cancelled; ++ private final Entity mount; ++ ++ public EntityMountEvent(Entity what, Entity mount) ++ { ++ super( what ); ++ this.mount = mount; ++ } ++ ++ public Entity getMount() ++ { ++ return mount; ++ } ++ ++ @Override ++ public boolean isCancelled() ++ { ++ return cancelled; ++ } ++ ++ @Override ++ public void setCancelled(boolean cancel) ++ { ++ this.cancelled = cancel; ++ } ++ ++ @Override ++ public HandlerList getHandlers() ++ { ++ return handlers; ++ } ++ ++ public static HandlerList getHandlerList() ++ { ++ return handlers; ++ } ++} +-- +1.8.1.2 + diff --git a/CraftBukkit-Patches/0061-Entity-Mount-and-Dismount-Events.patch b/CraftBukkit-Patches/0061-Entity-Mount-and-Dismount-Events.patch new file mode 100644 index 000000000..65e68915c --- /dev/null +++ b/CraftBukkit-Patches/0061-Entity-Mount-and-Dismount-Events.patch @@ -0,0 +1,39 @@ +From 19fdd2e4302b1bc3be272274ee6e77a389d7bb44 Mon Sep 17 00:00:00 2001 +From: md_5 +Date: Tue, 2 Jul 2013 20:32:49 +1000 +Subject: [PATCH] Entity Mount and Dismount Events + + +diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java +index 700e450..ea6762e 100644 +--- a/src/main/java/net/minecraft/server/Entity.java ++++ b/src/main/java/net/minecraft/server/Entity.java +@@ -1413,6 +1413,7 @@ public abstract class Entity { + if ((this.bukkitEntity instanceof LivingEntity) && (this.vehicle.getBukkitEntity() instanceof Vehicle)) { + VehicleExitEvent event = new VehicleExitEvent((Vehicle) this.vehicle.getBukkitEntity(), (LivingEntity) this.bukkitEntity); + pluginManager.callEvent(event); ++ pluginManager.callEvent( new org.spigotmc.event.entity.EntityDismountEvent( this.getBukkitEntity(), entity.getBukkitEntity() ) ); // Spigot + } + // CraftBukkit end + +@@ -1432,6 +1433,17 @@ public abstract class Entity { + } + } + // CraftBukkit end ++ // Spigot Start ++ if ( entity.world.isChunkLoaded( (int) entity.locX >> 4, (int) entity.locZ >> 4 ) ) ++ { ++ org.spigotmc.event.entity.EntityMountEvent event = new org.spigotmc.event.entity.EntityMountEvent( this.getBukkitEntity(), entity.getBukkitEntity() ); ++ pluginManager.callEvent( event ); ++ if ( event.isCancelled() ) ++ { ++ return; ++ } ++ } ++ // Spigot End + + if (this.vehicle != null) { + this.vehicle.passenger = null; +-- +1.8.1.2 +