Advertisement
Guest User

Assassination class

a guest
Mar 15th, 2014
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.88 KB | None | 0 0
  1. public class AssassinateHandler implements Listener {
  2.    
  3.     public static HashMap<String, Integer> map = new HashMap<String, Integer>();
  4.    
  5.     public static String getCardinalDirection(Player player) {
  6.         double rotation = (player.getLocation().getYaw() - 90) % 360;
  7.         if (rotation < 0) {
  8.             rotation += 360.0;
  9.         }
  10.          if (0 <= rotation && rotation < 22.5) {
  11.             return "N";
  12.         } else if (22.5 <= rotation && rotation < 67.5) {
  13.             return "NE";
  14.         } else if (67.5 <= rotation && rotation < 112.5) {
  15.             return "E";
  16.         } else if (112.5 <= rotation && rotation < 157.5) {
  17.             return "SE";
  18.         } else if (157.5 <= rotation && rotation < 202.5) {
  19.             return "S";
  20.         } else if (202.5 <= rotation && rotation < 247.5) {
  21.             return "SW";
  22.         } else if (247.5 <= rotation && rotation < 292.5) {
  23.             return "W";
  24.         } else if (292.5 <= rotation && rotation < 337.5) {
  25.             return "NW";
  26.         } else if (337.5 <= rotation && rotation < 360.0) {
  27.             return "N";
  28.         } else {
  29.             return null;
  30.         }
  31.     }
  32.    
  33.     public boolean canAssassinate(Player target, Player damager) {
  34.         String damagerDirection = getCardinalDirection(damager);
  35.         switch (getCardinalDirection(target)) {
  36.         case("N"):
  37.             if (damagerDirection.equals("NE") || damagerDirection.equals("NW") || damagerDirection.equals("N"))
  38.                 return true; break;
  39.         case("NE"):
  40.             if (damagerDirection.equals("E") || damagerDirection.equals("N") || damagerDirection.equals("NE"))
  41.                 return true; break;
  42.         case("E"):
  43.             if (damagerDirection.equals("NE") || damagerDirection.equals("SE") || damagerDirection.equals("E"))
  44.                 return true; break;
  45.         case("SE"):
  46.             if (damagerDirection.equals("E") || damagerDirection.equals("S") || damagerDirection.equals("E"))
  47.                 return true; break;
  48.         case("S"):
  49.             if (damagerDirection.equals("SE") || damagerDirection.equals("SW") || damagerDirection.equals("S"))
  50.                 return true; break;
  51.         case("SW"):
  52.             if (damagerDirection.equals("W") || damagerDirection.equals("S") || damagerDirection.equals("SW"))
  53.                 return true; break;
  54.         case("W"):
  55.             if (damagerDirection.equals("NW") || damagerDirection.equals("SW") || damagerDirection.equals("W"))
  56.                 return true; break;
  57.         case("NW"):
  58.             if (damagerDirection.equals("N") || damagerDirection.equals("W") || damagerDirection.equals("NW"))
  59.                 return true; break;
  60.         }
  61.         return false;
  62.     }
  63.    
  64.     public void recharge(final Player player) {
  65.         Bukkit.getScheduler().scheduleSyncDelayedTask(Assassin.getPlugin(), new Runnable() {
  66.             @Override
  67.             public void run() {
  68.                 if (map.get(player.getName()) <= 0) {
  69.                     CraftPlayer pl = (CraftPlayer) player;
  70.                     PacketPlayOutRemoveEntityEffect packet = new PacketPlayOutRemoveEntityEffect(pl.getEntityId(), new MobEffect(20, 0, 200));
  71.                     pl.getHandle().playerConnection.sendPacket(packet);
  72.                     player.playSound(player.getLocation(), Sound.HORSE_ARMOR, 1, 1);
  73.                     map.remove(player.getName());
  74.                 } else {
  75.                     map.put(player.getName(), map.get(player.getName()) - 1);
  76.                     recharge(player);
  77.                 }
  78.             }
  79.         }, 20);
  80.     }
  81.    
  82.     @EventHandler
  83.     public void backStab(EntityDamageByEntityEvent e) {
  84.         if (e.getEntity() instanceof Player && e.getDamager() instanceof Player) {
  85.             Player target = (Player) e.getEntity();
  86.             Player damager = (Player) e.getDamager();
  87.            
  88.             CraftPlayer craftDamager = (CraftPlayer) damager;
  89.             PacketPlayOutEntityEffect damagerPacket = new PacketPlayOutEntityEffect(damager.getEntityId(), new MobEffect(20, 0, 200));
  90.             CraftPlayer craftTarget = (CraftPlayer) target;
  91.             PacketPlayOutEntityEffect targetPacket = new PacketPlayOutEntityEffect(target.getEntityId(), new MobEffect(20, 0, 200));
  92.            
  93.             if (!map.containsKey(damager.getName())) {
  94.                 if (canAssassinate(target, damager)) {
  95.                     e.setDamage(200D);
  96.                    
  97.                     target.getWorld().playSound(target.getLocation(), Sound.WITHER_SHOOT, 1, 1);
  98.                     damager.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 21, 0));
  99.                     target.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 21, 0));
  100.                     damager.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 25, 3));
  101.                    
  102.                     craftDamager.getHandle().playerConnection.sendPacket(damagerPacket);
  103.                    
  104.                     map.put(damager.getName(), 1);
  105.                     recharge(damager);
  106.                     return;
  107.                 }
  108.             }
  109.        
  110.             boolean rechargeDamager = false;
  111.             boolean rechargeTarget = false;
  112.            
  113.             if (!map.containsKey(damager.getName()))
  114.             rechargeDamager = true;
  115.             if (!map.containsKey(target.getName()))
  116.             rechargeTarget = true;
  117.            
  118.             map.put(damager.getName(), 10);
  119.             map.put(target.getName(), 10);
  120.            
  121.             if (rechargeDamager)
  122.                 recharge(damager);
  123.             if (rechargeTarget)
  124.                 recharge(target);
  125.            
  126.             craftTarget.getHandle().playerConnection.sendPacket(targetPacket);
  127.             craftDamager.getHandle().playerConnection.sendPacket(damagerPacket);
  128.         }
  129.     }
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement