hogepiyo

かつてはマイクラのModを作っていたがひざに矢を受けた

HasResultなEvent

概要

EventのクラスにCancelable以外にEvent.HasResultアノテーションが付与されいてるEventがある. たとえば骨粉で成長促進させるためのEvent,

@Cancelable
@Event.HasResult
public class BonemealEvent extends PlayerEvent {
...
}

HasResultアノテーションは, CancelableにおけるsetCanceled()と同様に, setResult()メソッドを呼べる. このメソッドはEventの結果を通知するメソッドで, 端的にいえばEventが成功したらsetResult(ALLOW), 失敗したらsetResult(DENY)にする.

実例

新しく追加した苗木を, BonemealEventで成長促進させるとしよう. 骨粉で右クリックしたブロックが追加した苗木なら, glowTree()などを呼んでsetResult(Event.Result.ALLOW)する. そうでない場合はsetResult(Event.Result.DENY)する.

@ForgeSubScribe
public void onBonemealUsed(BonemealEvent event) {
    if (event.blockID == newSapling.blockID) {
         if (!world.isRemote) {
             newSapling.growTree();
             event.setResult(Event.Result.ALLOW);
         }
    }
    event.setResult(Event.Result.DENY); 
}