package com.github.jamesnorris.ablockalypse.event.bukkit;
import java.util.HashMap;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;
import com.github.jamesnorris.ablockalypse.Ablockalypse;
import com.github.jamesnorris.ablockalypse.DataContainer;
import com.github.jamesnorris.ablockalypse.aspect.Barrier;
import com.github.jamesnorris.ablockalypse.aspect.ZAPlayer;
import com.github.jamesnorris.ablockalypse.enumerated.ZAPerk;
import com.github.jamesnorris.ablockalypse.utility.BukkitUtility;
public class PlayerMove implements Listener {
private DataContainer data = Ablockalypse.getData();
private HashMap<String, Double> PHDPlayers = new HashMap<String, Double>();
public boolean isMoving(PlayerMoveEvent event) {
return isMoving(event, 0);
}
public boolean isMoving(PlayerMoveEvent event, double threshold) {
Location from = event.getFrom();
Location to = event.getTo();
boolean anyX = Math.abs(to.getX() - from.getX()) < threshold;
boolean upY = from.getY() - to.getY() < threshold;
boolean anyZ = Math.abs(to.getZ() - from.getZ()) < threshold;
return !anyX || !upY || !anyZ;
}
/* Called whenever a player moves.
* Mostly used for preventing players from going through barriers. */
@EventHandler(priority = EventPriority.HIGHEST) public void PME(PlayerMoveEvent event) {
Player p = event.getPlayer();
Location from = event.getFrom();
Location to = event.getTo();
if (data.isZAPlayer(p)) {
String name = p.getName();
ZAPlayer zap = data.getZAPlayer(p);
if (zap.getPerks().contains(ZAPerk.PHD_FLOPPER)) {
if (from.getY() - to.getY() < 0 && PHDPlayers.containsKey(name)) {
PHDPlayers.put(name, from.getY());
} else if (PHDPlayers.containsKey(name) && PHDPlayers.get(name) - to.getY() >= 2) {
EntityExplode.createNonBlockDestructionExplosionWithPoints(zap, to, 1F);
PHDPlayers.remove(name);
}
}
for (Barrier gb : zap.getGame().getObjectsOfType(Barrier.class)) {
for (Block b : gb.getBlocks()) {
Location l = b.getLocation();
if (BukkitUtility.locationMatch(l, to)) {
// p.teleport(from);
event.setCancelled(true);
}
}
}
}
}
}