From 42416cab2f6f92c10ddf3c6fb9b82ced37012383 Mon Sep 17 00:00:00 2001 From: Andreas Troelsen Date: Sun, 27 May 2018 20:08:59 +0200 Subject: [PATCH] Allow for dismounting and remounting. This commit makes it possible for mounted players to dismount. Upon dismounting, the horse AI is set to false to prevent it from moving around. Players attempting to mount an available horse will be thrown off unless they actually own the horse. The owners are free to remount when they want. --- .../garbagemule/MobArena/ArenaListener.java | 30 +++++++++++++++++-- .../MobArena/listeners/MAGlobalListener.java | 8 +++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/garbagemule/MobArena/ArenaListener.java b/src/main/java/com/garbagemule/MobArena/ArenaListener.java index 6f589fe..bf143a6 100644 --- a/src/main/java/com/garbagemule/MobArena/ArenaListener.java +++ b/src/main/java/com/garbagemule/MobArena/ArenaListener.java @@ -25,6 +25,7 @@ import org.bukkit.block.BlockState; import org.bukkit.block.Sign; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.AbstractHorse; +import org.bukkit.entity.AnimalTamer; import org.bukkit.entity.Entity; import org.bukkit.entity.Horse; import org.bukkit.entity.LivingEntity; @@ -75,6 +76,7 @@ import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.event.vehicle.VehicleEnterEvent; import org.bukkit.event.vehicle.VehicleExitEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.InventoryHolder; @@ -1269,6 +1271,27 @@ public class ArenaListener arena.playerLeave(p); } + public void onVehicleEnter(VehicleEnterEvent event) { + Entity entity = event.getEntered(); + if (!(entity instanceof Player)) return; + + Player p = (Player) entity; + if (!arena.inArena(p)) return; + + Vehicle vehicle = event.getVehicle(); + if (!(vehicle instanceof Horse)) return; + + Horse horse = (Horse) vehicle; + if (!monsters.hasMount(horse)) return; + + AnimalTamer tamer = horse.getOwner(); + if (tamer.equals(p)) { + horse.setAI(true); + } else { + event.setCancelled(true); + } + } + public void onVehicleExit(VehicleExitEvent event) { LivingEntity entity = event.getExited(); if (!(entity instanceof Player)) return; @@ -1279,8 +1302,9 @@ public class ArenaListener Vehicle vehicle = event.getVehicle(); if (!(vehicle instanceof Horse)) return; - if (monsters.hasMount(vehicle)) { - event.setCancelled(true); - } + Horse horse = (Horse) vehicle; + if (!monsters.hasMount(horse)) return; + + horse.setAI(false); } } diff --git a/src/main/java/com/garbagemule/MobArena/listeners/MAGlobalListener.java b/src/main/java/com/garbagemule/MobArena/listeners/MAGlobalListener.java index 7abe42a..a9a319e 100644 --- a/src/main/java/com/garbagemule/MobArena/listeners/MAGlobalListener.java +++ b/src/main/java/com/garbagemule/MobArena/listeners/MAGlobalListener.java @@ -42,6 +42,7 @@ import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.event.vehicle.VehicleEnterEvent; import org.bukkit.event.vehicle.VehicleExitEvent; import org.bukkit.event.world.WorldLoadEvent; import org.bukkit.event.world.WorldUnloadEvent; @@ -361,6 +362,13 @@ public class MAGlobalListener implements Listener } } + @EventHandler(priority = EventPriority.NORMAL) + public void vehicleEnter(VehicleEnterEvent event) { + for (Arena arena : am.getArenas()) { + arena.getEventListener().onVehicleEnter(event); + } + } + @EventHandler(priority = EventPriority.NORMAL) public void vehicleExit(VehicleExitEvent event) { for (Arena arena : am.getArenas()) {