NEWS: Welcome to my new homepage! <3

FastTravelModule.java - poppy - A feature-rich Minecraft plugin which enhances gaming experience

poppy

A feature-rich Minecraft plugin which enhances gaming experience
git clone git://192.168.2.2/poppy
Log | Files | Refs | README

FastTravelModule.java (3240B)


      1 package poppy.modules;
      2 
      3 import java.util.List;
      4 import java.util.ArrayList;
      5 
      6 import org.bukkit.Location;
      7 import org.bukkit.Material;
      8 import org.bukkit.Sound;
      9 import org.bukkit.block.Block;
     10 import org.bukkit.plugin.Plugin;
     11 import org.bukkit.entity.Player;
     12 import org.bukkit.event.Listener;
     13 import org.bukkit.event.EventHandler;
     14 import org.bukkit.event.block.Action;
     15 import org.bukkit.inventory.ItemStack;
     16 import org.bukkit.inventory.EquipmentSlot;
     17 import org.bukkit.inventory.meta.CompassMeta;
     18 import org.bukkit.scheduler.BukkitRunnable;
     19 import org.bukkit.event.player.PlayerInteractEvent;
     20 import org.bukkit.event.player.PlayerMoveEvent;
     21 import org.bukkit.event.player.PlayerQuitEvent;
     22 
     23 public class FastTravelModule implements Listener {
     24 
     25 	public static final int COUNTDOWN_TIME = 5;
     26 	public static final double MOVEMENT_THRESHOLD = 0.1D;
     27 
     28 	private Plugin plugin;
     29 	private List<Player> playersQueue;
     30 
     31 	public FastTravelModule(final Plugin plugin) {
     32 		this.plugin = plugin;
     33 		this.playersQueue = new ArrayList<>();
     34 	}
     35 
     36 	public void onDisable() {
     37 		this.playersQueue.clear();
     38 	}
     39 
     40 	@EventHandler
     41 	public void onPlayerInteract(final PlayerInteractEvent event) {
     42 		if (event.getHand() != EquipmentSlot.HAND) {
     43 			return;
     44 		}
     45 		if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) {
     46 			return;
     47 		}
     48 		final ItemStack item = event.getItem();
     49 		if (item == null || item.getType() != Material.COMPASS) {
     50 			return;
     51 		}
     52 		final Block block = event.getClickedBlock();
     53 		if (block != null && block.getType() == Material.LODESTONE) {
     54 			return;
     55 		}
     56 		final CompassMeta meta = (CompassMeta) item.getItemMeta();
     57 		if (!meta.hasLodestone()) {
     58 			return;
     59 		}
     60 		final Player player = event.getPlayer();
     61 		final Location location = meta.getLodestone();
     62 		if (playersQueue.contains(player)) {
     63 			return;
     64 		}
     65 		playersQueue.add(player);
     66 		new BukkitRunnable() {
     67 			int timer = COUNTDOWN_TIME;
     68 			@Override
     69 			public void run() {
     70 				if (!playersQueue.contains(player)) {
     71 					this.cancel();
     72 					return;
     73 				}
     74 				final Location playerLocation = player.getLocation();
     75 				if ( timer > 0) {
     76 					player.playSound(playerLocation, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 100.0F, 1.0F);
     77 				}
     78 				if (timer == 0) {
     79 					this.cancel();
     80 					location.add(0.5, 1.0, 0.5);
     81 					location.setYaw(playerLocation.getYaw());
     82 					location.setPitch(playerLocation.getPitch());
     83 					player.teleport(location);
     84 					player.playSound(playerLocation, Sound.ENTITY_PLAYER_TELEPORT, 100.0F, 1.0F);
     85 					playersQueue.remove(player);
     86 					return;
     87 				}
     88 				timer--;
     89 			}
     90 		}.runTaskTimer(this.plugin, 0L, 20L);
     91 	}
     92 
     93 	@EventHandler
     94 	public void onPlayerMove(final PlayerMoveEvent event) {
     95 		final Player player = event.getPlayer();
     96 		if (playersQueue.contains(player)) {
     97 			final Location fromLocation = event.getFrom();
     98 			final Location toLocation = event.getTo();
     99 			if (fromLocation.distance(toLocation) > MOVEMENT_THRESHOLD) {
    100 				player.playSound(toLocation, Sound.BLOCK_GLASS_BREAK, 100.0F, 1.0F);
    101 				playersQueue.remove(player);
    102 			}
    103 		}
    104 	}
    105 
    106 	@EventHandler
    107 	public void onPlayerQuit(final PlayerQuitEvent event) {
    108 		final Player player = event.getPlayer();
    109 		if (playersQueue.contains(player)) {
    110 			playersQueue.remove(player);
    111 		}
    112 	}
    113 }