てれるんぶろぐ

楽しく、簡単に、やりたいことを実現。

【改】Bukkit・Spigotプラグインを作る方法<イベント編>

f:id:tererun:20210415233831p:plain

こんにちは、てれるんです!

今回は「【改】Bukkit・Spigotプラグインを作る方法<イベント編>」のイベント編です!

プラグインを作る上で一二を争う程大事なものですので、覚えておきましょう!

 

 

 

 

イベントって何?

まずは、イベントとは何か、軽くさらっておきましょう。

イベントは、例えば「プレイヤーが動いた時」だったり、「インベントリをクリックした時」だったり、「アイテムを右クリックした時」だったり。

つまり、「〇〇をした時」に処理が実行される塊のことをイベントといいます。

例えば、

インベントリでアイテムを右クリックしたらテレポートしたい!

という時は「InventoryClickEvent」というイベントを使用します。

 

イベントの探し方

私の中では一応3つ方法があります。

その①: Google先生と仲良くなる

私の場合、Google先生と仲良くなるのが一番だと思ってます。

例えば。

今回は「かまどで焼いた時」に起こるイベントを知りたかった時の話です。

検索窓に「spigot event furnace smelt event」とかで調べると、大体上の方にSpigotMCのスレッドが出てきます。

今回だとこんな感じ↓

f:id:tererun:20210426195137p:plain

基本的にこの辺のスレッドを漁ってたらいつかたどり着きます。多分。

その②: 「石橋を叩いて壊すブログ」さんを参考にする

全く赤の他人のブログさんで申し訳ないのですが、かなり参考になる記事がございます。

こちらがその記事です。(石橋さん、勝手にすみません...)

www.jias.jp

これは普通に参考になる記事でございます。いい記事をありがとうございます。

1.8.3なので少しバージョンは古いですが、まだまだ現役で使えます。

このブログを見ているだけでも「こんなのがあるんだな~」と思うことがあるので学びにもなっていいかも。

その③: SpigotAPIのJavadocでゴリ押す

これが一番正確な情報が入ります。が...まぁ、検索には向いてませんね。

SpigotAPIのJavadocこちらから飛べます。

hub.spigotmc.org

検索窓が右上にあるので、対象のクラス名とかを検索すれば全部出てきます。

一番いいと思う使い方は、

  • SpigotMCのスレッドで出てきたイベント名をここで検索する
  • イベント一覧を眺める

のが一番じゃないかって思います。

その④: sya-riさんがまとめたイベントリストを使用する

最近見つけて良!と思ってお借りしました。

日本語でBukkit, Spigot, Paper, Purpurのイベント一覧がまとまってるので参考にするのもアリ...!

s7a.dev

 

イベントの実装方法

まずは、イベントを実装するクラスを作ります。普通にクラス作れば大丈夫です。

今回は「SampleEventListenerClass」としておきます。

そのクラスにListenerimplementsしてください。したらこんな感じ。

できたら、@EventListenerアノテーションをつけてから名前は何でもよいのでpublic voidなメソッドを作成して第一引数にListenしたいイベントのクラスを書いたメソッドを書きます。実装するとこんな感じ。FurnaceSmeltEventが発火(呼び出されることを発火って言ったりします)したらメッセージが流れるって感じですね。

因みに、イベントにも発火した時のListenの優先度(早めに呼び出されるか遅めに呼び出されるか)が設定できます。優先度が高い順(つまり直ぐに呼び出される方)に書くと

  1. LOWEST
  2. LOW
  3. NORMAL
  4. HIGH
  5. HIGHEST
  6. MONITOR

という順番になります。一応例も載せておきます。

第一引数の中身を見てみると、イベントが起きた時のいろんな情報が入ってます。それを使ってやっていくのが基本な感じですかね。(因みにこの中身についても先ほどのJavaDocに書いてあるよ)

イベントメソッドの実装が終わったら、イベントの登録をします。メインクラス等でPluginインスタンスを取得しておきましょう。Listenerをimplementsしたクラス(さっきまで処理を書いていたクラス)を登録してあげれば大丈夫です。

こんな感じですね。

 

イベントのキャンセル

イベントにはキャンセルが可能なイベントが存在します。

JavaDocに「implements Cancellable」という様に、対象のイベントのクラスでCancellableが実装されていた場合にイベントをキャンセルできます。

イベントをキャンセルするとどうなるかというと、例えばBlockPlaceEventをキャンセルした場合、ブロックを置けなくなるのようにその動作をキャンセルすることが出来ます。

キャンセルしているかどうかは「isCancelled」で確認、キャンセルするには「setCancelled」で設定できます。

詳しくはここからどーぞ。

hub.spigotmc.org

 

 

 

最後に

イベントについて理解できましたでしょうか?これを身に着けて、君もイベントマスター!

...まぁ、イベントは本当によく使うので、覚えておきましょう。大事。大事。

ということで今回は【改】Bukkit・Spigotプラグインを作る方法の「イベント編」をお送りしました!なにか質問等あればコメントやTwitterのDMにて受け付けてます!

ではでは、お疲れさまでした~てれるんでした(*'▽')

 

 

プライバシーポリシー お問い合わせ