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.
This commit is contained in:
Andreas Troelsen
2018-05-27 20:08:59 +02:00
parent c325317153
commit 42416cab2f
2 changed files with 35 additions and 3 deletions
@@ -25,6 +25,7 @@ import org.bukkit.block.BlockState;
import org.bukkit.block.Sign; import org.bukkit.block.Sign;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.AbstractHorse; import org.bukkit.entity.AbstractHorse;
import org.bukkit.entity.AnimalTamer;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Horse; import org.bukkit.entity.Horse;
import org.bukkit.entity.LivingEntity; 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.PlayerQuitEvent;
import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.event.vehicle.VehicleEnterEvent;
import org.bukkit.event.vehicle.VehicleExitEvent; import org.bukkit.event.vehicle.VehicleExitEvent;
import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.InventoryHolder;
@@ -1269,6 +1271,27 @@ public class ArenaListener
arena.playerLeave(p); 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) { public void onVehicleExit(VehicleExitEvent event) {
LivingEntity entity = event.getExited(); LivingEntity entity = event.getExited();
if (!(entity instanceof Player)) return; if (!(entity instanceof Player)) return;
@@ -1279,8 +1302,9 @@ public class ArenaListener
Vehicle vehicle = event.getVehicle(); Vehicle vehicle = event.getVehicle();
if (!(vehicle instanceof Horse)) return; if (!(vehicle instanceof Horse)) return;
if (monsters.hasMount(vehicle)) { Horse horse = (Horse) vehicle;
event.setCancelled(true); if (!monsters.hasMount(horse)) return;
}
horse.setAI(false);
} }
} }
@@ -42,6 +42,7 @@ import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.event.vehicle.VehicleEnterEvent;
import org.bukkit.event.vehicle.VehicleExitEvent; import org.bukkit.event.vehicle.VehicleExitEvent;
import org.bukkit.event.world.WorldLoadEvent; import org.bukkit.event.world.WorldLoadEvent;
import org.bukkit.event.world.WorldUnloadEvent; 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) @EventHandler(priority = EventPriority.NORMAL)
public void vehicleExit(VehicleExitEvent event) { public void vehicleExit(VehicleExitEvent event) {
for (Arena arena : am.getArenas()) { for (Arena arena : am.getArenas()) {