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 TornadoShot extends Skill{ /** * 矢の発射回数 */ private int amount; /** * 角度の変更速度 */ private int angleInterval; /** * 1回ごとの発射数 */ private int shot; /** * 矢の発射角度 */ private int angle=0; /** * コンストラクタ * * @param plugin * プラグイン * @param level * スキルのレベル */ public TornadoShot(BossMonster plugin,int level){ super(plugin); // 角度の変更速度はレベル10以下なら10度、それ以上は20度 angleInterval=level <= 10?10:20; // 一回あたりの発射数はレベル20以下なら5、それ以上は10。 shot=level <= 20?5:10; // 矢の発射回数(本数ではない)は(1+レベル÷20回)×36回 amount=(1 + level / 20) * 36; // 呪文を唱える getBoss().getServer().broadcastMessage(ChatColor.GOLD + "トルネードショット!"); // 呪文を聞いて逃げる時間として1.5秒待ったあとスキルを開始する runTaskTimer(plugin,30,1); } /** * スキル処理 */ protected void fire(){ // 発射済みの矢のリスト ArrayList arrows=new ArrayList(); // 矢の発射角度を変更する angle+=angleInterval; // 矢を打つ方向にボスを向ける Location loc=getBoss().getLocation(); loc.setYaw(-angle); getBoss().teleport(loc); // 矢の発射の基点を計算する // モンスターの座標は足元の座標なので、だいたい腕のあたりから矢が出るよう高さを調整する loc.add(0,1.3f,0); // 矢の発射音を再生 loc.getWorld().playEffect(loc,Effect.BOW_FIRE,0,angle); // 1回あたり複数本の矢を発射する for(int n=0;n != shot;n++){ // 矢の発射方向を計算する Vector v=new Vector(Math.sin(Math.toRadians(angle)),n / 10F,Math.cos(Math.toRadians(angle))).normalize(); // 矢を発射する Arrow arrow=getBoss().getWorld().spawnArrow(loc.add(v),v,0.6F,12); // 矢の発射者を設定する arrow.setShooter(getBoss()); // 発射した矢を、発射済みの矢のリストに加える arrows.add(arrow); } // 7秒後に、ボスが射った矢をすべて消去する new RemoveEntities(arrows).runTaskLater(plugin,7 * 20); // 射る回数をひとつ減らす amount--; // 射る回数がなくなったらスキル終了 if(amount == 0){ cancel(); } } }