package jp.jias.bukkit.bossmonster; import java.util.ArrayList; import org.bukkit.ChatColor; import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.entity.Arrow; import org.bukkit.entity.Entity; import org.bukkit.util.Vector; /** * シャワーショットを撃つ * * @author i_shi_ba_shi ( jias.jp ) */ public class ShowerShot extends Skill{ /** * 矢の発射回数 */ private int amount; /** * コンストラクタ * * @param plugin * プラグイン * @param level * スキルのレベル */ public ShowerShot(BossMonster plugin,int level){ super(plugin); // 矢の発射回数は3+レベル÷5回 amount=3 + level / 5; // 矢の発射間隔はレベル10以下なら10ticks、それ以上は5ticks int interval=level <= 10?10:5; // 呪文を唱える getBoss().getServer().broadcastMessage(ChatColor.GOLD + "シャワーショット!"); // 呪文を聞いて逃げる時間として1.5秒待ったあとスキルを開始する runTaskTimer(plugin,30,interval); } /** * スキル処理 */ protected void fire(){ // 発射済みの矢のリスト ArrayList arrows=new ArrayList(); // 矢の発射の始点を計算する // モンスターの座標は足元の座標なので、だいたい頭上から矢が出るよう高さを調整する Location loc=getBoss().getLocation().add(0,2.5f,0); // 矢の発射音を再生 loc.getWorld().playEffect(loc,Effect.BOW_FIRE,0); // 360度全方位に矢を発射する for(int angle=0;angle != 360;angle+=10){ // 矢の発射方向を計算する Vector v=new Vector(Math.sin(Math.toRadians(angle)) / 50,1,Math.cos(Math.toRadians(angle)) / 50).normalize(); // 矢を発射する Arrow arrow=getBoss().getWorld().spawnArrow(loc,v,2F,12); // 発射した矢を、発射済みの矢のリストに加える arrows.add(arrow); // 矢の発射者を設定する arrow.setShooter(getBoss()); // 低確率で火矢にする if(BossMonster.getRandom().nextInt(10) == 0){ arrow.setFireTicks(10 * 20); } } // 8秒後に、ボスが射った矢をすべて消去する new RemoveEntities(arrows).runTaskLater(plugin,8 * 20); // 射る回数をひとつ減らす amount--; // 射る回数がなくなったらスキル終了 if(amount == 0){ cancel(); } } }