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; /** * マシンガンショットを撃つ * * @author i_shi_ba_shi ( jias.jp ) */ public class MachinegunShot extends Skill{ /** * 1回の攻撃で撃つ矢の発射数 */ private int shot; /** * 矢の発射数 */ private int amount; /** * コンストラクタ * * @param plugin * プラグイン * @param level * スキルのレベル */ public MachinegunShot(BossMonster plugin,int level){ super(plugin); // 矢の発射数は10+レベル×5本 amount=10 + level * 5; // 一度の矢の発射本数は、レベル20以下なら1本、以後は20レベルおきに1本増加 shot=level <= 20?1:1 + (level - 20) / 20; // 矢の発射間隔はレベル10以下なら2ticks、それ以上は1tick int interval=level <= 10?2:1; // 呪文を唱える getBoss().getServer().broadcastMessage(ChatColor.GOLD + "マシンガンショット!"); // 呪文を聞いて逃げる時間として1.5秒待ったあとスキルを開始する runTaskTimer(plugin,30,interval); } /** * スキル処理 */ protected void fire(){ // 発射済みの矢のリスト ArrayList arrows=new ArrayList(); // 矢の発射の始点を計算する // モンスターの座標は足元の座標なので、だいたい腕の位置から矢が出るよう高さを調整する Location loc=getBoss().getLocation().add(0,1f,0); for(int n=0;n != shot;n++){ // 向いている方向に矢を発射する Arrow arrow=loc.getWorld().spawnArrow(loc.add(loc.getDirection()),loc.getDirection(),1f,12); // 発射した矢を、発射済みの矢のリストに加える arrows.add(arrow); // 矢の発射者を設定する arrow.setShooter(getBoss()); // 射る矢をひとつ減らす amount-=shot; // 射る矢がなくなったらスキル終了 if(amount <= 0){ cancel(); } } // 矢の発射音を再生 getBoss().getWorld().playEffect(getBoss().getLocation(),Effect.BOW_FIRE,0); // 5秒後に、ボスが射った矢をすべて消去する new RemoveEntities(arrows).runTaskLater(plugin,5 * 20); } }