Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package au.net.fremnet.bukkit.HitBoxen;
- import java.util.List;
- import org.bukkit.Location;
- import org.bukkit.Material;
- import org.bukkit.block.Block;
- import org.bukkit.entity.Creature;
- import org.bukkit.entity.Entity;
- import org.bukkit.entity.LivingEntity;
- import org.bukkit.entity.Player;
- import org.bukkit.event.player.PlayerAnimationEvent;
- import org.bukkit.event.player.PlayerListener;
- import org.bukkit.inventory.ItemStack;
- public class HBPlayerListener extends PlayerListener {
- static HitBoxen plugin;
- public HBPlayerListener (HitBoxen parent) {
- plugin = parent;
- }
- public void onPlayerAnimation(PlayerAnimationEvent event) {
- HitBoxen.log("Player animate...");
- switch (event.getAnimationType()) {
- case ARM_SWING:
- HitBoxen.log("Arm swing");
- Player player = event.getPlayer();
- Location playerLocation = player.getLocation();
- Boolean last = false;
- HitBoxen.log("In hand!:: " + player.getItemInHand().getType().name());
- List<Block> sight = player.getLineOfSight(null, 4);
- List<Entity> nearby = player.getNearbyEntities(5, 3, 5);
- for (Block block : sight) {
- if (block.getType() != Material.AIR) {break;}
- if (last) {break;}
- HitBoxen.log("Found block: " + block.getType().name());
- for (Entity entity: nearby) {
- if (!(entity instanceof Creature)) {continue;}
- Location entityLocation = entity.getLocation();
- Double distance = playerLocation.distance(entityLocation);
- if (distance < sight.size() - 1) {
- Double dir = inverseAngle(Math.abs((Math.atan2(entityLocation.getX() - playerLocation.getX(), entityLocation.getZ() - playerLocation.getZ()) * -180 / Math.PI) - 180));
- Double pla = (double) Math.abs(playerLocation.getYaw());
- Double rotateBy = 20 - (5 * distance);
- Double angularDistance = Math.abs(dir - pla);
- if (angularDistance <= rotateBy) {
- HitBoxen.log("No damage: " + String.valueOf(((Creature)entity).getNoDamageTicks()));
- HitBoxen.log("Would be sooo punching this mob");
- attackWithItemInHand(player, (LivingEntity) entity);
- // Creature c = (Creature)entity;
- // c.damage(1, player);
- last = true;
- break;
- }
- //if (entityLocation.distance(blockLocation ))
- }
- }
- }
- }
- }
- public double inverseAngle(double angle) {
- if (angle > 180) return angle - 180;
- if (angle < 180) return angle + 180;
- return 0;
- }
- public void attackWithItemInHand(Player player, LivingEntity target) {
- double damage = 0;
- short durability = 1;
- ItemStack is = player.getItemInHand();
- Material mat = is.getType();
- switch (mat) {
- case WOOD_SPADE:
- case GOLD_SPADE:
- damage = 1;
- break;
- case WOOD_PICKAXE:
- case GOLD_PICKAXE:
- case STONE_SPADE:
- damage = 2;
- break;
- case WOOD_AXE:
- case GOLD_AXE:
- case STONE_PICKAXE:
- case IRON_SPADE:
- damage = 3;
- break;
- case WOOD_SWORD:
- case GOLD_SWORD:
- case STONE_AXE:
- case IRON_PICKAXE:
- case DIAMOND_SPADE:
- damage = 4;
- break;
- case STONE_SWORD:
- case IRON_AXE:
- case DIAMOND_PICKAXE:
- damage = 5;
- break;
- case IRON_SWORD:
- case DIAMOND_AXE:
- damage = 6;
- break;
- case DIAMOND_SWORD:
- damage = 7;
- break;
- default:
- damage = 1;
- durability = 0;
- }
- if (durability > 0) {
- switch (mat) {
- case WOOD_SWORD:
- case GOLD_SWORD:
- case STONE_SWORD:
- case IRON_SWORD:
- case DIAMOND_SWORD:
- durability = 1;
- default:
- durability = 2;
- }
- }
- if (durability > 0) {
- is.setDurability((short) (is.getDurability() + durability));
- }
- target.damage((int) (damage * 2), player);
- }
- }
Add Comment
Please, Sign In to add comment