Spigotプラグイン開発④ ~ イベント編

Spigotプラグイン開発プラグイン開発

前回の続きです。今回はイベントの使い方を紹介します。

イベントとはブロックを置いたとき、死んだとき、ダメージを受けたときなどの何かが起こったときに発生するものです。イベント一覧

広告

イベントの処理作成

public final class Kariproject extends JavaPlugin implements Listener {

まず、最初にイベントの処理を書くクラスに implements Listener と追加します。

下の方にイベントの処理を書きます。

    @EventHandler
    public void onInteractEvent(PlayerInteractEvent e) {
        if (e.getClickedBlock()==null) {
            return;
        }
        if (e.getClickedBlock().getType()== Material.HEAVY_WEIGHTED_PRESSURE_PLATE&&e.getAction()== Action.PHYSICAL) {
            Player player = e.getPlayer();
            player.getWorld().createExplosion(e.getClickedBlock().getLocation(),3f,false,false);
        }
    }

今回使用するイベントはPlayerInteractEventというものです。このイベントは感圧板を踏んだり、右クリック左クリックをすることで発生します。

少しコードに関する説明を書きます。まず、e.getClickedBlock()でクリックしたまたは踏んだブロックを取得します。これは存在しない場合(空を向いてクリックした場合など)nullを返すので、nullだった場合は何もしないようにしています。また次の処理でnullだとエラーを吐くのでその対策でもあります。

その次はクリックしたまたは踏んだブロックの種類が鉄の感圧板かつ感圧板を踏んでこのイベントが発生したかを確認しています。その条件が満たされた場合は感圧板の場所で爆発が発生するように書かれています。

イベントの登録

そのままではイベントのところは実行されないのでBukkitにイベントを登録します。同じクラスであればthisを使えばできます。

    @Override
    public void onEnable() {
        Bukkit.getPluginManager().registerEvents(this,this);
        // Plugin startup logic

    }

これで完成です!

プラグインを試す

プラグインを入れて鉄の感圧板を踏んでみると…

createExplosionの1つ目のfalseをtrueにすると火が付くようになります。2つ目のfalseをtrueにすると地形が破壊されるようになります。また数字の部分を大きくすると爆破を威力を上げることも可能です。

終わりに

今回はイベントの使い方を紹介しました。次回は未定です。

今回のコード

public final class Kariproject extends JavaPlugin implements Listener {

    @Override
    public void onEnable() {
        Bukkit.getPluginManager().registerEvents(this,this);
        // Plugin startup logic

    }

    @Override
    public void onDisable() {
        // Plugin shutdown logic
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        //コマンドの名前がtestであるかを確かめる
        if (command.getName().equalsIgnoreCase("test")) {
            //testコマンドの処理
            //コマンドの送信者にメッセージを送信
            sender.sendMessage("send test");
        }
        //コマンドが存在しない場合はfalseを返す
        return false;
    }

    @EventHandler
    public void onInteractEvent(PlayerInteractEvent e) {
        if (e.getClickedBlock()==null) {
            return;
        }
        if (e.getClickedBlock().getType()== Material.HEAVY_WEIGHTED_PRESSURE_PLATE&&e.getAction()== Action.PHYSICAL) {
            Player player = e.getPlayer();
            player.getWorld().createExplosion(e.getClickedBlock().getLocation(),3f,false,false);
        }
    }
}

広告

Spigotプラグイン開発プラグイン開発

Posted by mcspigot