Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class AssassinateHandler implements Listener {
- public static HashMap<String, Integer> map = new HashMap<String, Integer>();
- public static String getCardinalDirection(Player player) {
- double rotation = (player.getLocation().getYaw() - 90) % 360;
- if (rotation < 0) {
- rotation += 360.0;
- }
- if (0 <= rotation && rotation < 22.5) {
- return "N";
- } else if (22.5 <= rotation && rotation < 67.5) {
- return "NE";
- } else if (67.5 <= rotation && rotation < 112.5) {
- return "E";
- } else if (112.5 <= rotation && rotation < 157.5) {
- return "SE";
- } else if (157.5 <= rotation && rotation < 202.5) {
- return "S";
- } else if (202.5 <= rotation && rotation < 247.5) {
- return "SW";
- } else if (247.5 <= rotation && rotation < 292.5) {
- return "W";
- } else if (292.5 <= rotation && rotation < 337.5) {
- return "NW";
- } else if (337.5 <= rotation && rotation < 360.0) {
- return "N";
- } else {
- return null;
- }
- }
- public boolean canAssassinate(Player target, Player damager) {
- String damagerDirection = getCardinalDirection(damager);
- switch (getCardinalDirection(target)) {
- case("N"):
- if (damagerDirection.equals("NE") || damagerDirection.equals("NW") || damagerDirection.equals("N"))
- return true; break;
- case("NE"):
- if (damagerDirection.equals("E") || damagerDirection.equals("N") || damagerDirection.equals("NE"))
- return true; break;
- case("E"):
- if (damagerDirection.equals("NE") || damagerDirection.equals("SE") || damagerDirection.equals("E"))
- return true; break;
- case("SE"):
- if (damagerDirection.equals("E") || damagerDirection.equals("S") || damagerDirection.equals("E"))
- return true; break;
- case("S"):
- if (damagerDirection.equals("SE") || damagerDirection.equals("SW") || damagerDirection.equals("S"))
- return true; break;
- case("SW"):
- if (damagerDirection.equals("W") || damagerDirection.equals("S") || damagerDirection.equals("SW"))
- return true; break;
- case("W"):
- if (damagerDirection.equals("NW") || damagerDirection.equals("SW") || damagerDirection.equals("W"))
- return true; break;
- case("NW"):
- if (damagerDirection.equals("N") || damagerDirection.equals("W") || damagerDirection.equals("NW"))
- return true; break;
- }
- return false;
- }
- public void recharge(final Player player) {
- Bukkit.getScheduler().scheduleSyncDelayedTask(Assassin.getPlugin(), new Runnable() {
- @Override
- public void run() {
- if (map.get(player.getName()) <= 0) {
- CraftPlayer pl = (CraftPlayer) player;
- PacketPlayOutRemoveEntityEffect packet = new PacketPlayOutRemoveEntityEffect(pl.getEntityId(), new MobEffect(20, 0, 200));
- pl.getHandle().playerConnection.sendPacket(packet);
- player.playSound(player.getLocation(), Sound.HORSE_ARMOR, 1, 1);
- map.remove(player.getName());
- } else {
- map.put(player.getName(), map.get(player.getName()) - 1);
- recharge(player);
- }
- }
- }, 20);
- }
- @EventHandler
- public void backStab(EntityDamageByEntityEvent e) {
- if (e.getEntity() instanceof Player && e.getDamager() instanceof Player) {
- Player target = (Player) e.getEntity();
- Player damager = (Player) e.getDamager();
- CraftPlayer craftDamager = (CraftPlayer) damager;
- PacketPlayOutEntityEffect damagerPacket = new PacketPlayOutEntityEffect(damager.getEntityId(), new MobEffect(20, 0, 200));
- CraftPlayer craftTarget = (CraftPlayer) target;
- PacketPlayOutEntityEffect targetPacket = new PacketPlayOutEntityEffect(target.getEntityId(), new MobEffect(20, 0, 200));
- if (!map.containsKey(damager.getName())) {
- if (canAssassinate(target, damager)) {
- e.setDamage(200D);
- target.getWorld().playSound(target.getLocation(), Sound.WITHER_SHOOT, 1, 1);
- damager.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 21, 0));
- target.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 21, 0));
- damager.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 25, 3));
- craftDamager.getHandle().playerConnection.sendPacket(damagerPacket);
- map.put(damager.getName(), 1);
- recharge(damager);
- return;
- }
- }
- boolean rechargeDamager = false;
- boolean rechargeTarget = false;
- if (!map.containsKey(damager.getName()))
- rechargeDamager = true;
- if (!map.containsKey(target.getName()))
- rechargeTarget = true;
- map.put(damager.getName(), 10);
- map.put(target.getName(), 10);
- if (rechargeDamager)
- recharge(damager);
- if (rechargeTarget)
- recharge(target);
- craftTarget.getHandle().playerConnection.sendPacket(targetPacket);
- craftDamager.getHandle().playerConnection.sendPacket(damagerPacket);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement