Guest User

Untitled

a guest
Apr 26th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.74 KB | None | 0 0
  1. package au.net.fremnet.bukkit.HitBoxen;
  2.  
  3. import java.util.List;
  4.  
  5. import org.bukkit.Location;
  6. import org.bukkit.Material;
  7. import org.bukkit.block.Block;
  8. import org.bukkit.entity.Creature;
  9. import org.bukkit.entity.Entity;
  10. import org.bukkit.entity.LivingEntity;
  11. import org.bukkit.entity.Player;
  12. import org.bukkit.event.player.PlayerAnimationEvent;
  13. import org.bukkit.event.player.PlayerListener;
  14. import org.bukkit.inventory.ItemStack;
  15.  
  16. public class HBPlayerListener extends PlayerListener {
  17.     static HitBoxen plugin;
  18.    
  19.     public HBPlayerListener (HitBoxen parent) {
  20.         plugin = parent;
  21.     }
  22.    
  23.     public void onPlayerAnimation(PlayerAnimationEvent event) {
  24.         HitBoxen.log("Player animate...");
  25.        
  26.         switch (event.getAnimationType()) {
  27.             case ARM_SWING:
  28.                 HitBoxen.log("Arm swing");
  29.                 Player player = event.getPlayer();
  30.                 Location playerLocation = player.getLocation();
  31.                
  32.                 Boolean last = false;
  33.  
  34.                 HitBoxen.log("In hand!:: " + player.getItemInHand().getType().name());
  35.                
  36.                 List<Block> sight = player.getLineOfSight(null, 4);
  37.                 List<Entity> nearby = player.getNearbyEntities(5, 3, 5);
  38.                
  39.                 for (Block block : sight) {
  40.                     if (block.getType() != Material.AIR) {break;}
  41.                     if (last) {break;}
  42.                    
  43.                     HitBoxen.log("Found block: " + block.getType().name());
  44.                     for (Entity entity: nearby) {
  45.                         if (!(entity instanceof Creature)) {continue;}
  46.  
  47.                         Location entityLocation = entity.getLocation();
  48.                         Double distance = playerLocation.distance(entityLocation);
  49.  
  50.                         if (distance < sight.size() - 1) {
  51.  
  52.                             Double dir = inverseAngle(Math.abs((Math.atan2(entityLocation.getX() - playerLocation.getX(), entityLocation.getZ() - playerLocation.getZ()) * -180 / Math.PI) - 180));
  53.                             Double pla = (double) Math.abs(playerLocation.getYaw());
  54.                    
  55.                             Double rotateBy = 20 - (5 * distance);
  56.                             Double angularDistance = Math.abs(dir - pla);
  57.  
  58.                             if (angularDistance <= rotateBy) {
  59.                                 HitBoxen.log("No damage: " + String.valueOf(((Creature)entity).getNoDamageTicks()));
  60.                                 HitBoxen.log("Would be sooo punching this mob");
  61.                                 attackWithItemInHand(player, (LivingEntity) entity);
  62.                             //          Creature c = (Creature)entity;
  63.                                 //  c.damage(1, player);
  64.                                 last = true;
  65.                                 break;
  66.                             }
  67.                             //if (entityLocation.distance(blockLocation ))
  68.                         }
  69.                     }
  70.                 }
  71.         }
  72.     }
  73.    
  74.     public double inverseAngle(double angle) {
  75.         if (angle > 180) return angle - 180;
  76.         if (angle < 180) return angle + 180;
  77.         return 0;
  78.     }
  79.    
  80.     public void attackWithItemInHand(Player player, LivingEntity target) {
  81.         double damage = 0;
  82.         short durability = 1;
  83.        
  84.         ItemStack is = player.getItemInHand();
  85.         Material mat = is.getType();
  86.         switch (mat) {
  87.             case WOOD_SPADE:
  88.             case GOLD_SPADE:
  89.                 damage = 1;
  90.             break;
  91.             case WOOD_PICKAXE:
  92.             case GOLD_PICKAXE:
  93.             case STONE_SPADE:
  94.                 damage = 2;
  95.             break;
  96.             case WOOD_AXE:
  97.             case GOLD_AXE:
  98.             case STONE_PICKAXE:
  99.             case IRON_SPADE:
  100.                 damage = 3;
  101.             break;
  102.             case WOOD_SWORD:
  103.             case GOLD_SWORD:
  104.             case STONE_AXE:
  105.             case IRON_PICKAXE:
  106.             case DIAMOND_SPADE:
  107.                 damage = 4;
  108.             break;
  109.             case STONE_SWORD:
  110.             case IRON_AXE:
  111.             case DIAMOND_PICKAXE:
  112.                 damage = 5;
  113.             break;
  114.             case IRON_SWORD:
  115.             case DIAMOND_AXE:
  116.                 damage = 6;
  117.             break;
  118.             case DIAMOND_SWORD:
  119.                 damage = 7;
  120.             break;
  121.             default:
  122.                 damage = 1;
  123.                 durability = 0;
  124.         }
  125.  
  126.         if (durability > 0) {
  127.             switch (mat) {
  128.                 case WOOD_SWORD:
  129.                 case GOLD_SWORD:
  130.                 case STONE_SWORD:
  131.                 case IRON_SWORD:
  132.                 case DIAMOND_SWORD:
  133.                     durability = 1;
  134.                 default:
  135.                     durability = 2;
  136.             }
  137.         }
  138.        
  139.         if (durability > 0) {
  140.             is.setDurability((short) (is.getDurability() + durability));
  141.         }
  142.  
  143.         target.damage((int) (damage * 2), player);
  144.     }
  145. }
Add Comment
Please, Sign In to add comment