Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package coffee.suddenly.flywithme;
- import java.util.HashMap;
- import org.bukkit.ChatColor;
- import org.bukkit.Material;
- import org.bukkit.command.Command;
- import org.bukkit.command.CommandSender;
- import org.bukkit.entity.EntityType;
- import org.bukkit.entity.Player;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.entity.PlayerDeathEvent;
- import org.bukkit.event.entity.ProjectileLaunchEvent;
- import org.bukkit.event.player.PlayerJoinEvent;
- import org.bukkit.event.player.PlayerQuitEvent;
- import org.bukkit.event.player.PlayerTeleportEvent;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.plugin.java.JavaPlugin;
- import org.spigotmc.event.entity.EntityDismountEvent;
- public class Main extends JavaPlugin implements Listener {
- private HashMap<String, Boolean> hasEnabled = new HashMap<String, Boolean>(); // V
- private HashMap<String, Boolean> isFlying = new HashMap<String, Boolean>(); // Don't use weak, been lucky enough to have GC run mid flight
- @Override
- public void onEnable() {
- getServer().getPluginManager().registerEvents(this, this);
- }
- @Override
- public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
- if (cmd.getName().equalsIgnoreCase("flywithme")) {
- if(sender.hasPermission("flywithme.toggle")) {
- hasEnabled.put(sender.getName(), !hasEnabled.get(sender.getName())); // Toggle
- if(hasEnabled.get(sender.getName())) {
- sender.sendMessage(ChatColor.GREEN + "You will now follow your ender pearls.");
- return true;
- } else {
- sender.sendMessage(ChatColor.RED + "You have stopped following your ender pearls.");
- return true;
- }
- }
- return false;
- }
- return false;
- }
- @EventHandler
- public void onJoin(PlayerJoinEvent event) {
- hasEnabled.put(event.getPlayer().getName(), false);
- }
- @EventHandler
- public void onQuit(PlayerQuitEvent event) {
- hasEnabled.remove(event.getPlayer().getName());
- if(isFlying.get(event.getPlayer().getName()) != null) {
- event.getPlayer().getVehicle().remove(); // Kill ender pearls if we disconnect
- isFlying.remove(event.getPlayer().getName());
- }
- }
- @EventHandler
- public void onThrow(ProjectileLaunchEvent event) {
- if(event.getEntity().getType() == EntityType.ENDER_PEARL && event.getEntity().getShooter() instanceof Player) {
- Player player = (Player) event.getEntity().getShooter();
- if(hasEnabled.get(player.getName())) {
- if(isFlying.get(player.getName()) == null) {
- player.spigot().setCollidesWithEntities(false); // Don't collide with your vehicle
- event.getEntity().setPassenger(player);
- isFlying.put(player.getName(), true); // Protection
- } else { // Allowing them to throw ender pearls mid flight just causes a world of pain
- event.setCancelled(true); // EntityDismountEvent cannot be trusted for switching mounts
- player.getInventory().addItem(new ItemStack(Material.ENDER_PEARL, 1)); // Because why would cancelling the event not consume the item? Thanks Obama
- }
- }
- }
- }
- @EventHandler
- public void onDismount(EntityDismountEvent event) {
- // org.bukkit.Bukkit.getLogger().info("FIRAH"); // Debug, yay it fires twice for everything!
- if(event.getDismounted().getType() == EntityType.ENDER_PEARL && event.getEntity().getType() == EntityType.PLAYER) {
- Player player = (Player) event.getEntity();
- 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
- player.spigot().setCollidesWithEntities(true); // Allow the player to pick up items again
- isFlying.remove(player.getName());
- }
- }
- @EventHandler
- public void onDeath(PlayerDeathEvent event) {
- if(isFlying.get(event.getEntity().getName()) != null) {
- isFlying.remove(event.getEntity().getName()); // More checks to prevent inability to throw pearls
- event.getEntity().spigot().setCollidesWithEntities(true);
- }
- }
- @EventHandler
- public void onTeleport(PlayerTeleportEvent event) {
- if(isFlying.get(event.getPlayer().getName()) != null) {
- isFlying.remove(event.getPlayer().getName());
- event.getPlayer().spigot().setCollidesWithEntities(true);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement