Advertisement
Guest User

a

a guest
Nov 22nd, 2014
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.01 KB | None | 0 0
  1. package coffee.suddenly.flywithme;
  2. import java.util.HashMap;
  3. import org.bukkit.ChatColor;
  4. import org.bukkit.Material;
  5. import org.bukkit.command.Command;
  6. import org.bukkit.command.CommandSender;
  7. import org.bukkit.entity.EntityType;
  8. import org.bukkit.entity.Player;
  9. import org.bukkit.event.EventHandler;
  10. import org.bukkit.event.Listener;
  11. import org.bukkit.event.entity.PlayerDeathEvent;
  12. import org.bukkit.event.entity.ProjectileLaunchEvent;
  13. import org.bukkit.event.player.PlayerJoinEvent;
  14. import org.bukkit.event.player.PlayerQuitEvent;
  15. import org.bukkit.event.player.PlayerTeleportEvent;
  16. import org.bukkit.inventory.ItemStack;
  17. import org.bukkit.plugin.java.JavaPlugin;
  18. import org.spigotmc.event.entity.EntityDismountEvent;
  19. public class Main extends JavaPlugin implements Listener {
  20. private HashMap<String, Boolean> hasEnabled = new HashMap<String, Boolean>(); // V
  21. private HashMap<String, Boolean> isFlying = new HashMap<String, Boolean>(); // Don't use weak, been lucky enough to have GC run mid flight
  22. @Override
  23. public void onEnable() {
  24. getServer().getPluginManager().registerEvents(this, this);
  25. }
  26. @Override
  27. public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
  28. if (cmd.getName().equalsIgnoreCase("flywithme")) {
  29. if(sender.hasPermission("flywithme.toggle")) {
  30. hasEnabled.put(sender.getName(), !hasEnabled.get(sender.getName())); // Toggle
  31. if(hasEnabled.get(sender.getName())) {
  32. sender.sendMessage(ChatColor.GREEN + "You will now follow your ender pearls.");
  33. return true;
  34. } else {
  35. sender.sendMessage(ChatColor.RED + "You have stopped following your ender pearls.");
  36. return true;
  37. }
  38. }
  39. return false;
  40. }
  41. return false;
  42. }
  43. @EventHandler
  44. public void onJoin(PlayerJoinEvent event) {
  45. hasEnabled.put(event.getPlayer().getName(), false);
  46. }
  47. @EventHandler
  48. public void onQuit(PlayerQuitEvent event) {
  49. hasEnabled.remove(event.getPlayer().getName());
  50. if(isFlying.get(event.getPlayer().getName()) != null) {
  51. event.getPlayer().getVehicle().remove(); // Kill ender pearls if we disconnect
  52. isFlying.remove(event.getPlayer().getName());
  53. }
  54. }
  55. @EventHandler
  56. public void onThrow(ProjectileLaunchEvent event) {
  57. if(event.getEntity().getType() == EntityType.ENDER_PEARL && event.getEntity().getShooter() instanceof Player) {
  58. Player player = (Player) event.getEntity().getShooter();
  59. if(hasEnabled.get(player.getName())) {
  60. if(isFlying.get(player.getName()) == null) {
  61. player.spigot().setCollidesWithEntities(false); // Don't collide with your vehicle
  62. event.getEntity().setPassenger(player);
  63. isFlying.put(player.getName(), true); // Protection
  64. } else { // Allowing them to throw ender pearls mid flight just causes a world of pain
  65. event.setCancelled(true); // EntityDismountEvent cannot be trusted for switching mounts
  66. player.getInventory().addItem(new ItemStack(Material.ENDER_PEARL, 1)); // Because why would cancelling the event not consume the item? Thanks Obama
  67. }
  68. }
  69. }
  70. }
  71. @EventHandler
  72. public void onDismount(EntityDismountEvent event) {
  73. // org.bukkit.Bukkit.getLogger().info("FIRAH"); // Debug, yay it fires twice for everything!
  74. if(event.getDismounted().getType() == EntityType.ENDER_PEARL && event.getEntity().getType() == EntityType.PLAYER) {
  75. Player player = (Player) event.getEntity();
  76. event.getDismounted().remove(); // Dismount = on land or mid air, don't allow for double fall damage // We cant cancel or remount the player so we might as well clean up shop
  77. player.spigot().setCollidesWithEntities(true); // Allow the player to pick up items again
  78. isFlying.remove(player.getName());
  79. }
  80. }
  81. @EventHandler
  82. public void onDeath(PlayerDeathEvent event) {
  83. if(isFlying.get(event.getEntity().getName()) != null) {
  84. isFlying.remove(event.getEntity().getName()); // More checks to prevent inability to throw pearls
  85. event.getEntity().spigot().setCollidesWithEntities(true);
  86. }
  87. }
  88. @EventHandler
  89. public void onTeleport(PlayerTeleportEvent event) {
  90. if(isFlying.get(event.getPlayer().getName()) != null) {
  91. isFlying.remove(event.getPlayer().getName());
  92. event.getPlayer().spigot().setCollidesWithEntities(true);
  93. }
  94. }
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement