石橋を叩いて壊すページ

Spigot V1.8.3のeventの一覧作ってみた

Bukkitプラグイン作成の要になるイベントの一覧。以前に作った記事が古くなったので、久しぶりに調べなおしてみた。
今回使うのはSpigotのV1.8.3版(git-Spigot-870264a-0a645a2)。

今回は調査方針として、実際にイベントが発生することをすべて確認した。
クラス名などからその役割が推測できようとも、実際のゲーム内でイベントの発生を確認できなかったものについては、一律で詳細不明とした。
もしそれらのイベントを発生させる方法をご存知の方がいれば、記事のコメント欄で教えていただけると嬉しい。

凡例

前回の記事から追加されたイベントはNew!をつけた。

イベント名が灰色で表示されているイベントは、イベントハンドラ(@EventHandler)を設定できない。
正確に言うと、設定はできるが実行するとIllegalPluginAccessExceptionが出てしまう。

イベント名がツリー状に表示されているイベントは、親クラスと子クラスの関係になっている。
子クラスのイベントが発生すると、子クラス自体のイベントハンドラのほかに、親クラスのイベントハンドラでもそれをキャッチできる。
たとえばPlayerUnleashEntityEventはEntityUnleashEventの子クラスなので、EntityUnleashEventイベントにイベントハンドラを設定すると、PlayerUnleashEntityEventもキャッチできる。
なお、親クラスと子クラスが異なるカテゴリ(パッケージ)に属する場合、イベント名の背景を黄色にしたうえで、実際のカテゴリではなく親クラスのカテゴリに分類した。

BlockPistonEvent凡例:灰色のイベントはイベントハンドラを設定できない
EntityUnleashEventリードを外す時凡例:親クラスのイベントハンドラは、子クラスのイベントもキャッチできる
PlayerUnleashEntityEventつないでいたリードを外す時凡例:実際は親クラスと異なる分類だが、便宜上親クラスの直下に表示している

ブロック関連のイベント (org.bukkit.event.block)

イベントクラス簡単な説明APIワンポイント
BlockBurnEventブロックが燃え尽きて焼失する時API着火はBlockIgniteEvent、焼失はBlockBurnEvent
BlockCanBuildEventブロックを設置する時APIBlockPlaceEventに先立って発生する
BlockDamageEventブロックが殴られる時API殴りはじめに一度だけ発生する
BlockDispenseEventアイテムが発射される時APIディスペンサー・ドロッパーのどちらでも発生
BlockExpEventブロックから経験値を得た時API
BlockBreakEventブロックが壊れる時API
FurnaceExtractEventかまどからアイテムを取り出す時API※正しくはインベントリ関連イベント
BlockExplodeEventブロックが爆発する時APINew! ネザーやエンド世界でベッドで寝ようとした場合に発生する
BlockFadeEventブロックが溶ける時APIブロックや炎が燃え尽きる時にも発生する
BlockFromToEvent水流・溶岩流に変化があった時API静水が流水に・流水が静水に変化したときや、水流の向きが変わったときに発生。溶岩流でも同様。イベントをキャンセルすると液体が流れずに留まる
BlockGrowEvent植物が育つ時APIサボテン・小麦・かぼちゃなど。木の苗・きのこの成長はStructureGrowEvent。1回成長するごとにイベントが1回発生。
BlockFormEvent気象効果でブロックが生成される時API水が凍る、雪が積もるなど
BlockSpreadEvent炎が燃え広がる時APIBlockIgniteEventと同時発生。草ブロックが伝播して土ブロックに草が生えるときにも発生する。
EntityBlockFormEvent雪だるまが雪を作る時API
BlockIgniteEventブロックを着火する時API地面に骨粉を撒いて草が生えたときも発生。着火時は、着火(BlockIgniteEvent)のほかに周辺変更(BlockPhysicsEvent)・炎ブロックの設置(BlockPlaceEvent)のイベントも発生する
BlockPhysicsEvent隣接するブロックが変化した時APIブロックが設置・撤去・落下など状態が変更された場合にそのブロックの上下左右に隣接する6ブロックで発生する。イベントをキャンセルすると砂や砂利が落下しなくなる(砂や砂利以外のブロックでもイベントは発生する)
BlockPistonEventAPI
BlockPistonExtendEventピストンが伸びた時API
BlockPistonRetractEventピストンが縮んだ時API
BlockPlaceEventブロックを設置する時API
BlockMultiPlaceEventブロックを複数同時に設置する時APINew!ドア・ベッド・ひまわりなど、一度の設置操作で複数のブロックが設置される要素を設置したとき発生する。エンドポータル生成時も発生するが、ネザーポータル生成時は発生しない
BlockRedstoneEventレッドストーンの状態が変化する時API
LeavesDecayEvent葉が枯れる時API木に接続していない葉ブロックが時間経過で消滅する場合のみ発生。手で壊すとBlockBreakEvent
NotePlayEvent音符ブロックが動作する時API
SignChangeEvent看板にテキストを書く時API看板を設置すると最初にテキスト未設定の看板が設置されてBlockPlaceEventが発生し、次にテキスト入力画面にテキストを入力して決定すると、看板にテキストが設定されSignChangeEventが発生する

エンチャント関連のイベント (org.bukkit.event.enchantment)

イベントクラス簡単な説明APIワンポイント
EnchantItemEventアイテムをエンチャントする時APIアイテムをエンチャントした際に発生する
PrepareItemEnchantEventアイテムをエンチャントテーブルに載せる時APIア イテムをエンチャントテーブルに載せると、エンチャント画面に3つのエンチャント候補が表示されるが、この候補ひとつずつについて PrepareItemEnchantEventが1回発生する。このためアイテムを1回載せるごとにPrepareItemEnchantEventが3回発生する。レベル不足で候補が3つ未満しか表示されなくても3回発生する。なぜかエンチャント後にも2回発生する。

エンティティ関連のイベント (org.bukkit.event.entity)

イベントクラス簡単な説明APIワンポイント
CreeperPowerEventクリーパーが雷撃を受ける時API既に雷撃を受けたクリーパーが再度雷撃を受けた場合も発生。また、1度の雷撃でイベントが1~8回程度複数発生する(おそらく、雷が0.5秒程度存在しつづける間クリーパーが毎フレームごとに雷撃判定を受けるため)。豚の雷撃はPigZapEvent
EntityChangeBlockEventプレイヤー以外がブロックを変更する時API
EntityBreakDoorEventゾンビがドアを壊す時API
EntityCombustEventエンティティに着火する時API着火後のダメージ処理はEntityDamageEvent
EntityCombustByBlockEvent不明API
EntityCombustByEntityEventエンティティがエンティティにより着火される時APIブレイズの火の玉に当たって燃える時など。ちなみにその場合、イベントのgetCombuster()メソッドで得られる着火理由はBLAZEではなくSMALL_FIREBALLなので注意
EntityCreatePortalEventネザーポータルを作成する時APIエンドポータル生成では発生しない、代わりにBlockMultiPlaceEventが発生する
EntityDamageEventエンティティがダメージを受ける時API
EntityDamageByBlockEventブロックからダメージを受ける時APIサボテンや溶岩に触れた場合、奈落に落ちた場合、ネザーやエンド世界でベッドで寝ようとした場合など。なお、奈落やベッドの場合はダメージを与えたブロックを取得するとnullが返るので注意
EntityDamageByEntityEventエンティティからダメージを受ける時API
EntityDeathEvent死亡する時API
PlayerDeathEventプレイヤーが死ぬ時API
EntityExplodeEvent爆発でブロックが破壊される時APIExplosionPrimeEventより後に発生する。爆発で破壊されるブロックの一覧を含む。イベントをキャンセルするとブロックは破壊されない(エンティティは爆発ダメージを受ける)。
EntityInteractEventエンティティ同士が押し合うときAPIエンティティとエンティティがぶつかって移動させられる場合に発生
EntityRegainHealthEvent体力が回復する時API自然回復やポーションによる回復でも発生
EntityShootBowEvent矢を撃つ時API
EntitySpawnEventエンティティが発生した場合APINew!CreatureSpawnEventやItemSpawnEventは前からあったが、それぞれ独立したイベントだった。それらをまとめる親クラスとしてEntitySpawnEventが追加されている。
CreatureSpawnEvent生き物が生まれる時API
ItemSpawnEventアイテムがドロップする時API
SpawnerSpawnEventスポーンブロックから生き物が生まれる時APINew!
EntityTameEvent飼いならす時API
EntityTargetEventEntityTargetLivingEntityEventを参照API
EntityTargetLivingEntityEvent攻撃目標を決めた時APIキャンセルすると攻撃されない
EntityTeleportEventテレポートする時API
EntityPortalEventエンティティがポータルに出入りしたときAPIネザーゲートやエンドポータルにアイテムを投げ込んだりモンスターを押し込んだりした時
EntityPortalExitEventポータルから出る時API
EntityUnleashEventリードを外す時API
PlayerUnleashEntityEventつないでいたリードを外す時API※正しくはプレイヤー関連イベント
EntityPortalEnterEventポータルに入る時APIプレイヤーがポータルに立っている間、1秒に20回延々と発生する
ExplosionPrimeEvent爆発する時APIEntityExplodeEventより前に発生する。イベントをキャンセルすると爆発自体が起こらなくなる。
FoodLevelChangeEvent空腹度が増減する時API
HorseJumpEvent馬がジャンプする時API
ItemDespawnEvent地面に落ちたアイテムが消える時API
PigZapEvent豚が雷撃を受ける時APIクリーパーの雷撃はCreeperPowerEvent。CreeperPowerEventと異なり、イベントは正確に1度しか発生しない(おそらく、雷撃を受けた豚はゾンビピッグマンに変化するため)
ProjectileHitEvent投げられた物に当たる時API矢など
ExpBottleEvent経験値ボトルが破裂する時API
PotionSplashEventスプラッシュポーションが割れる時API
ProjectileLaunchEvent投射物を投射するときAPI矢を射る時やスプラッシュポーションを投げて割る場合。Qキーを押して投げた場合はItemSpawnEvent
SheepDyeWoolEvent羊を染色する時API
SheepRegrowWoolEvent羊に毛が生えた時API既に毛の生えている羊が草を食べたときも発生
SlimeSplitEventスライムが倒されて小さなスライムが生まれる時API
PlayerLeashEntityEventエンティティをリードでつなぐ時API動物をリードで柵に結ぶ場合、動物にリードをつけた時と、そのリードを柵に結んだ時で2回本イベントが発生する

壁掛けアイテム関連のイベント (org.bukkit.event.hanging)

ここでいう壁掛けアイテムとは、hangingインターフェースを実装したクラス、つまり絵画・額縁、そして柵に巻いたリードが含まれる。

イベントクラス簡単な説明APIワンポイント
HangingBreakEvent壁掛けが壊される時API壁掛けの後ろのブロックが壊れて壁掛けがアイテム化した場合など。
HangingBreakByEntityEvent壁掛けがエンティティによって壊される時API殴って壊したりクリーパーの爆発で壊れる場合などに発生。TNTの爆発で壊れた場合は発生しない
HangingPlaceEvent壁掛けが掛けられる時API

インベントリ関連のイベント (org.bukkit.event.inventory)

イベントクラス簡単な説明APIワンポイント
BrewEvent醸造する時API醸造完了時にイベント発生。醸造台に瓶を何本セットしていても、3本ばらばらのポーションをセットしていてもイベントは1回だけ
FurnaceBurnEventかまどに火が点く時API
FurnaceSmeltEventかまどでアイテムが精錬される時APIアイテムが一個精錬される度に発生
InventoryEvent不明API
InventoryCloseEventインベントリを閉じる時API
InventoryInteractEventAPI
InventoryClickEventインベントリをクリックする時API
CraftItemEventアイテムを作成する時API
InventoryCreativeEventクリエイティブモードのインベントリからアイテムを取り出す時API
InventoryDragEvent製作時にドラッグでアイテムを配置した時API最初はともかく、2回目のドラッグでは2回、3回目のドラッグでは3回など、なぜかイベントが複数回発生するので注意
InventoryOpenEventインベントリを開く時API
PrepareItemCraftEventアイテム作成の準備が整った時API作業台などに材料を並べ、作業台ウィンドウの右に完成アイテムが表示されるたびに発生。
InventoryMoveItemEventホッパーからアイテムが移動する時APIアイテムが1個移動する度に発生
InventoryPickupItemEventアイテムがホッパーに吸い込まれる時API

プレイヤー関連のイベント (org.bukkit.event.player)

イベントクラス簡単な説明APIワンポイント
AsyncPlayerPreLoginEventログインしようとする時APIPlayerJoinEventの直前に発生する。disallowメソッドでログインをキャンセルできる
AsyncPlayerChatEventチャットする時API
PlayerAchievementAwardedEvent実績を解除した時APINew!
PlayerAnimationEventアニメーションする時API主にクリック操作でよく出る
PlayerBedEnterEventベッドに寝る時API
PlayerBedLeaveEventベッドから起きる時API
PlayerBucketEventAPI
PlayerBucketEmptyEventバケツの中身を地面に垂らした時API水や溶岩を撒いた時に発生。牛乳を飲んで消費した場合は発生しない
PlayerBucketFillEvent空のバケツに液体を満たした時API水か溶岩を掬った時や牛乳を搾った場合に発生
PlayerChangedWorldEvent別の世界へ移動する時API通常世界・ネザー・エンド世界の行き来で発生
PlayerChannelEventAPI
PlayerRegisterChannelEvent不明API
PlayerUnregisterChannelEvent不明API
PlayerChatEvent不明API非推奨(Deprecated)
PlayerChatTabCompleteEventチャット入力時にオートコンプリートが失敗した時APIチャット入力中にTABキーを押すことでオートコンプリート(?)機能が実行される。たとえば「/a」と入力してTABキーを押すと、/aで始まるコマンドが一覧される。該当するコマンドがあればイベントは発生しない。コマンドがない場合イベントが発生する
PlayerCommandPreprocessEventゲーム内からサーバーコマンドを実行する時APIサーバーコンソールからコマンドを実行した場合はServerCommandEvent
PlayerDropItemEventアイテムを投げる時APIここで言う投げるとは(デフォルトで)Qキーを押してアイテムを投げるという意味。鶏卵・スプラッシュポーション・経験値ボトルなどを使うのは「投げる」ではなく「使う」であり意味が違うので注意。
PlayerEditBookEvent本と羽ペンを編集する時API編集完了時に発生
PlayerEggThrowEvent卵を投げる時API
PlayerExpChangeEvent経験値を得た時APIレベルが変化するとPlayerLevelChangeEventも発生。経験値の減少時には発生しない
PlayerFishEvent釣りを開始・終了する時API釣りを開始するとき・終了するときの両方で発生
PlayerGameModeChangeEventゲームモードが変化する時API/gamemode 0や1コマンドを使ってゲームモードが変わった時
PlayerInteractEntityEventエンティティを右クリックする時API
PlayerArmorStandManipulateEvent装備を手に持って防具立てを右クリックした時APINew!
PlayerInteractAtEntityEvent生物を右クリックした時APINew!
PlayerInteractEventクリックする時や感圧板・トリップワイヤーに触れた時API@EventHandler(ignoreCancelled = true)で宣言すると空気を殴ったイベントが通知されなくなるので、単に@EventHandlerで宣言するのがお勧め
PlayerInventoryEvent不明API非推奨(Deprecated)
PlayerItemBreakEvent道具の耐久度がゼロになって壊れる時APIPlayerItemDamageEventに続いて発生する
PlayerItemConsumeEvent飲食物を食べた時APIポーションを飲んだ場合も発生
PlayerItemDamageEventアイテムの耐久度が減少した時APINew!
PlayerItemHeldEventホットバーを切り替えた時APIたとえばホットバー1からホットバー2に持ち替えたような場合に発生する。
PlayerJoinEventプレイヤーがログインする時APIロ グイン時にはAsyncPlayerPreLoginEvent→PlayerLoginEvent→PlayerJoinEventの3つのメッセージ が発生する。BANされたプレイヤーがログインを試みた場合、AsyncPlayerPreLoginEventとPlayerLoginEventは発生するがPlayerJoinEventは発生しない
PlayerKickEventプレイヤーをキックする時API
PlayerLevelChangeEventレベルが変化する時APIレベルの変化を伴わない経験値の変化はPlayerExpChangeEvent
PlayerLoginEventプレイヤーがログインする時APIPlayerJoinEventの前に発生する
PlayerMoveEvent移動する時API歩行時のほか、立ち止まって首を動かしただけでも発生する
PlayerTeleportEventテレポートする時APIベッドに寝る・起きる時やトロッコの乗降時にも発生する
PlayerPortalEventポータルで移動する時APIポータルに触れただけでは発生しない
PlayerPickupItemEventアイテムを拾う時API
PlayerQuitEventプレイヤーがログアウトする時API
PlayerRespawnEventリスポーンする時API
PlayerShearEntityEvent羊の毛を刈る時API
PlayerStatisticIncrementEvent統計情報が増加した時APINew!統計情報とは、ゲームのポーズメニューの「統計」ボタンを押して見ることができる情報のこと。このうち、ジャンプした回数や採取した回数など、「回数」で表現されるものが増加したときイベントが発生する。歩行した距離など「回数」ではないものは増加してもイベントは発生しない。
PlayerToggleFlightEvent飛行状態が切り替わる時APIFlightとはクリエイティブの飛行モードのこと。飛行開始時・飛行終了時の両方でPlayerToggleFlightEventが発生
PlayerToggleSneakEventスニーク状態が切り替わる時APIスニーク開始時・スニーク終了時の切り替え時に発生
PlayerToggleSprintEvent走り状態が切り替わる時API歩くと走るの切り替え時に発生
PlayerVelocityEventダメージを伴って移動速度が変化する時API爆発で吹き飛ばされる場合や、落下ダメージを受ける着地時
PlayerPreLoginEvent不明API非推奨(Deprecated)

サーバー関連のイベント (org.bukkit.event.server)

イベントクラス簡単な説明APIワンポイント
MapInitializeEvent地図を新しく作る時API白紙の地図を手に持って右クリックしたり、地図と紙を作業台に乗せて縮小地図を作った時に発生。要するに、新しい地図IDを払い出した時に発生する
PluginEventAPI
PluginDisableEventプラグインを無効化する時API
PluginEnableEventプラグインを有効化する時API
ServerCommandEventコンソールからコマンドを実行した時APIゲーム内からコマンドを実行した場合はPlayerCommandPreprocessEvent
RemoteServerCommandEventRCONでコマンドを実行した場合APIRCONによる操作については別記事参照
ServerListPingEventクライアントのサーバー選択画面に表示された時APIサーバー選択画面で更新ボタンを押したときも発生
ServiceEventAPI
ServiceRegisterEventServicesManagerクラスのregister()メソッドを実行した時API(SpigotV1.11で確認)
ServiceUnregisterEventServicesManagerクラスのunregister()メソッドを実行した時API(SpigotV1.11で確認)

乗り物関連のイベント (org.bukkit.event.vehicle)

トロッコ類とボートでは以下に挙げたイベントがすべて発生するが、馬と豚では●印をつけたイベントしか発生しない。

イベントクラス簡単な説明APIワンポイント
VehicleCollisionEventAPI
VehicleBlockCollisionEvent乗り物とブロックが衝突する時●APIサドルをつけていない豚や手なずけていない馬でも発生
VehicleEntityCollisionEvent乗り物とエンティティが衝突する時API
VehicleCreateEvent乗り物が生まれた時API線路上にトロッコを配置するなどで発生
VehicleDamageEvent乗り物がダメージを受けた時APIトロッコを殴ったり、トロッコがサボテンに衝突した場合など
VehicleDestroyEvent乗り物が消滅する時API線路上のトロッコを殴ると、まずVehicleDamageEventが発生し、次にVehicleDestroyEventが発生する
VehicleEnterEvent乗り物に乗る時●API
VehicleExitEvent乗り物から降りる時●API
VehicleMoveEvent乗り物が移動する時APIトロッコを障害物のないレール上に置いて走らせると、画面上でどう見ても停止しているのに(小数点レベルの速度で動いているのか)延々と1秒に20回イベントが発生し続ける。壁に衝突するなどで完全に停止するとイベントも止む。トロッコに乗って移動する場合PlayerMoveEventも同時に発生する。乗馬・乗豚での移動はPlayerMoveEventしか発生しない
VehicleUpdateEvent乗り物の状態を更新する時APIトロッコが1台あるだけで(速度やレールの傾きに関係なく)1秒間に20回イベントが発生する。

天候関連のイベント (org.bukkit.event.weather)

イベントクラス簡単な説明APIワンポイント
LightningStrikeEvent落雷が起こる時API
ThunderChangeEvent落雷の有無が切り替わる時API晴天の状態で/weatherコマンドで晴天に変更しても(つまり落雷なし→落雷なしの変更でも)本イベントが発生するので、実質的にWeatherChangeEventと同じ。
WeatherChangeEvent天候が再設定される時API自然に天候が変わる場合のほか、ベッドで寝て朝になった時、/weatherコマンドを実行したときなどに発生

ワールド関連のイベント (org.bukkit.event.world)

イベントクラス簡単な説明APIワンポイント
ChunkEventAPI
ChunkLoadEventチャンクを読み込む時API
ChunkPopulateEvent新しいチャンクが作られた時APIChunkLoadEventより後に発生する
ChunkUnloadEventチャンクをアンロードする時API
PortalCreateEventポータルを作成する時APIネザーポータルのみ発生、エンドポータルではイベント起こらず
SpawnChangeEventスポーンポイントが変わった時APIWorldクラスのsetSpawnLocationメソッドが実行されたときに発生
StructureGrowEvent木の苗・きのこが成長する時APIサボテン・小麦・かぼちゃなどの成長はBlockGrowEvent
WorldInitEventサーバ起動後初めてワールドを読み込む直前の時APIプレイヤーがそのワールドに入ろうとすると発生。サーバ起動後2度目以降では発生しない
WorldLoadEventワールドを読み込んだ時APIプレイヤーがそのワールドに入る際、チャンクの読み込み完了後に発生。
WorldSaveEventWorldクラスのsave()メソッドを実行した時APIサーバ停止時などには発生せず、あくまでプラグインからsave()されたときだけ発生
WorldUnloadEventワールドをアンロードした時API(SpigotV1.11で確認)ServerクラスのunloadWorldメソッドが実行されたときに発生。ただし同createWorldメソッドで生成したワールドに限る

プレイヤー関連のイベントのPlayerChannelEventについては、以前の記事で情報をいただいてクライアントMODを作ってイベントを出させようとはしたのだが、
ちょっと一朝一夕どころか2週間経ってもまったく分からないので、編集方針からひとまず不明とさせていただいた。
たぶん、クライアントMODとサーバープラグインが直接通信するためのチャンネル絡みっぽいとは思うんだけど…うん。全くわからん。

今回この記事を作るにあたって、発生したイベントを画面に表示するプラグインを作ったので、
一つ前の記事で公開した。

この記事を評価

この記事にコメント

  1. ...

【この記事にコメント】
お名前:
コメント:

Menu