package jp.jias.bukkit; import java.util.ArrayList; import org.bukkit.Material; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitTask; public class FireworksFestivals extends JavaPlugin implements Listener { /** * 実行中の連続打ち上げタスクの一覧 */ private ArrayList tasks = new ArrayList(); /** * プラグインが開始するとき呼び出される */ public void onEnable() { // イベントリスナーの登録 getServer().getPluginManager().registerEvents(this, this); } /** * プラグインが終了するとき呼び出される */ public void onDisable() { // 花火の連続打ち上げを終了 fireStop(); } /** * プレイヤーが右クリックしたとき呼び出される * * @param e */ @EventHandler public void onPlayerInteractEvent(PlayerInteractEvent e) { // OP権限持ちプレイヤーで、手に花火を持っているか if (e.getPlayer().isOp() && e.getPlayer().getItemInHand().getType() .equals(Material.FIREWORK)) { // 右クリックか if (e.getAction().equals(Action.RIGHT_CLICK_AIR) || e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) { // 花火の連続打ち上げタスクを開始 BukkitTask task = new FireworksRunnable(e.getPlayer() .getLocation()).runTaskTimer(this, 0, 20); // タスクを記憶しておく tasks.add(task); } else { // 花火の連続打ち上げを終了 fireStop(); } } } /** * 花火の連続発射を停止する */ private void fireStop() { // これまでに作ったタスクを順に処理する for (BukkitTask task : tasks) { // タスクを中止する task.cancel(); } //タスクをすべて忘れる tasks.clear(); } }