public void lookAtPoint(final Location point) { if (this.getEntity().getBukkitEntity().getWorld() != point.getWorld()) return; final Location npcLoc = ((LivingEntity) this.getEntity().getBukkitEntity()).getEyeLocation(); final double xDiff = point.getX() - npcLoc.getX(); final double yDiff = point.getY() - npcLoc.getY(); final double zDiff = point.getZ() - npcLoc.getZ(); final double DistanceXZ = Math.sqrt(xDiff * xDiff + zDiff * zDiff); final double DistanceY = Math.sqrt(DistanceXZ * DistanceXZ + yDiff * yDiff); double newYaw = Math.acos(xDiff / DistanceXZ) * 180 / Math.PI; final double newPitch = Math.acos(yDiff / DistanceY) * 180 / Math.PI - 90; if (zDiff < 0.0) newYaw = newYaw + Math.abs(180 - newYaw) * 2; this.setYaw((float) (newYaw - 90)); this.setPitch((float) newPitch); }
/** * Find a position for the player to stand that is not inside a block. Blocks above the player * will be iteratively tested until there is a series of two free blocks. The player will be * teleported to that free position. * * @param player */ public static void findFreePosition(Player player) { Location loc = player.getLocation(); int x = loc.getBlockX(); int y = Math.max(0, loc.getBlockY()); int origY = y; int z = loc.getBlockZ(); World world = player.getWorld(); byte free = 0; while (y <= world.getMaxHeight() + 1) { if (BlockType.canPassThrough(world.getBlockTypeIdAt(x, y, z))) { free++; } else { free = 0; } if (free == 2) { if (y - 1 != origY || y == 1) { loc.setX(x + 0.5); loc.setY(y); loc.setZ(z + 0.5); if (y <= 2 && world.getBlockAt(x, 0, z).getTypeId() == BlockID.AIR) { world.getBlockAt(x, 0, z).setTypeId(20); loc.setY(2); } player.setFallDistance(0F); player.teleport(loc); } return; } y++; } }
@EventHandler public void onProjectileHit(ProjectileHitEvent projectile) { Heroes.debug.startTask("HeroesSkillListener"); if (!(projectile.getEntity() instanceof Arrow)) { Heroes.debug.stopTask("HeroesSkillListener"); return; } Arrow arrow = (Arrow) projectile.getEntity(); if (!(arrow.getShooter() instanceof Player)) { Heroes.debug.stopTask("HeroesSkillListener"); return; } Player player = (Player) arrow.getShooter(); Hero hero = SkillExplodingArrow.this.plugin.getCharacterManager().getHero(player); if (!hero.hasEffect("ExplodingArrowBuff")) { Heroes.debug.stopTask("HeroesSkillListener"); return; } int radius = (int) Math.pow( SkillConfigManager.getUseSetting(hero, this.skill, "radius", 5, false), 2.0D); float damage = SkillConfigManager.getUseSetting(hero, this.skill, "DAMAGE", 5, false); float blockdamage = damage; int block_dmg = SkillConfigManager.getUseSetting(hero, this.skill, "block-dmg", 0, false); if (block_dmg == 0) { blockdamage = 0.0F; for (Entity t_entity : player.getWorld().getEntities()) { if ((t_entity instanceof Player)) { Player heroes = (Player) t_entity; if ((heroes.equals(player)) || (heroes.getLocation().distanceSquared(arrow.getLocation()) > radius)) continue; damageEntity( heroes, player, (int) damage, EntityDamageEvent.DamageCause.ENTITY_EXPLOSION); } else if ((t_entity instanceof Creature)) { Creature mob = (Creature) t_entity; if (t_entity.getLocation().distanceSquared(arrow.getLocation()) <= radius) { damageEntity( mob, player, (int) damage, EntityDamageEvent.DamageCause.ENTITY_EXPLOSION); } } } } arrow.getWorld().createExplosion(arrow.getLocation(), blockdamage); Heroes.debug.stopTask("HeroesSkillListener"); }
protected void processProjectiles(ProjectileDistanceTracker tracker, PlayerDeath death) { if (death.getCause() == EntityDamageEvent.DamageCause.PROJECTILE) { EntityDamageByEntityEvent event = (EntityDamageByEntityEvent) death.getEvent(); Projectile projectile = (Projectile) event.getDamager(); if (projectile.getShooter() instanceof Entity) { Entity shooter = (Entity) projectile.getShooter(); double distance = projectile.getLocation().distance(tracker.getLaunchLocation(projectile)); death.setKiller(shooter); death.setMisc("(" + (int) Math.round(distance) + " blocks)"); } } }
public static void addSeconds(final Player player, final int seconds) { if (!b******g.fdsjfhkdsjfdsjhk().getServerHandler().isEOTW() && DTRBitmaskType.SAFE_ZONE.appliesAt(player.getLocation())) { return; } if (isTagged(player)) { final int secondsTaggedFor = (int) ((SpawnTagHandler.spawnTags.get(player.getName()) - System.currentTimeMillis()) / 1000L); final int newSeconds = Math.min(secondsTaggedFor + seconds, 60); SpawnTagHandler.spawnTags.put( player.getName(), System.currentTimeMillis() + newSeconds * 1000L); } else { player.sendMessage( ChatColor.YELLOW + "You have been spawn-tagged for §c" + seconds + " §eseconds!"); SpawnTagHandler.spawnTags.put(player.getName(), System.currentTimeMillis() + seconds * 1000L); } }
public List<Block> getBlocks() { List<Block> blocks = new ArrayList<Block>(); if (loc1 == null || loc2 == null) return blocks; for (int x = (int) Math.min(loc1.getX(), loc2.getX()); x <= (int) Math.max(loc1.getX(), loc2.getX()); x++) { for (int y = (int) Math.min(loc1.getY(), loc2.getY()); y <= (int) Math.max(loc1.getY(), loc2.getY()); y++) { for (int z = (int) Math.min(loc1.getZ(), loc2.getZ()); z <= (int) Math.max(loc1.getZ(), loc2.getZ()); z++) { if (loc1.getWorld().getBlockAt(x, y, z).getType() == Material.AIR) { blocks.add(loc1.getWorld().getBlockAt(x, y, z)); } } } } return blocks; }
@EventHandler(priority = EventPriority.HIGH) public void onEntityDamageByEntity(EntityDamageByEntityEvent event) { LivingEntity attacker = null; LivingEntity defender = null; Stat attackStat = null; Stat defenceStat = null; int attack = 0; int defence = 0; if (event.getDamager() instanceof Projectile) { Projectile projectile = (Projectile) event.getDamager(); if (projectile.getShooter() instanceof LivingEntity) { attacker = (LivingEntity) projectile.getShooter(); if (projectile instanceof Arrow) { attackStat = Stat.RANGED_ATTACK; defenceStat = Stat.RANGED_DEFENCE; } else { attackStat = Stat.MAGIC_ATTACK; defenceStat = Stat.MAGIC_DEFENCE; } } } else if (event.getDamager() instanceof LivingEntity) { attacker = (LivingEntity) event.getDamager(); attackStat = Stat.MELEE_ATTACK; defenceStat = Stat.MELEE_DEFENCE; } if (event.getEntity() instanceof LivingEntity) { defender = (LivingEntity) event.getEntity(); } if (attacker != null) { if (attacker instanceof Player) { RegisteredServiceProvider<CharacterPlugin> characterPluginProvider = plugin.getServer().getServicesManager().getRegistration(CharacterPlugin.class); if (characterPluginProvider != null) { CharacterPlugin characterPlugin = characterPluginProvider.getProvider(); attack = characterPlugin.getActiveCharacter((Player) attacker).getStatValue(attackStat); } } else { attack = plugin.getEntityLevelManager().getEntityStatValue(attacker); } } if (defender != null) { if (defender instanceof Player) { RegisteredServiceProvider<CharacterPlugin> characterPluginProvider = plugin.getServer().getServicesManager().getRegistration(CharacterPlugin.class); if (characterPluginProvider != null) { CharacterPlugin characterPlugin = characterPluginProvider.getProvider(); defence = characterPlugin.getActiveCharacter((Player) defender).getStatValue(defenceStat); } } else { defence = plugin.getEntityLevelManager().getEntityStatValue(defender); } } if (attacker != null && defender != null) { event.setDamage( (Math.ceil((((attack + 1D) / 2D) + 5D) * event.getDamage())) / (defence + 1D) / 2D); } if (defender != null) { if (defender instanceof Monster) { defender.setCustomName( "Lv" + plugin.getEntityLevelManager().getEntityLevel(defender) + " " + defender.getType().toString().toLowerCase().replace('_', ' ') + " - " + Math.round(defender.getHealth() * 100D) / 100D + "HP"); defender.setCustomNameVisible(true); } } }