CancelableなEvent
概要
Eventにはそのクラス自体にCancelableアノテーションが付与されているものがある. たとえば
@Cancelable public class AttackEntityEvent extends PlayerEvent { ... }
CancelableなEventではsetCanceled(bool)が呼べる. このsetCanceled()というのは, このEvent自体のキャンセルではなく, このEventを呼び出すメソッドの, Event以降の処理をキャンセルする.
AttackEntityEventはEntityPlayer.attackTargetEntityWithCurrentItem()の最初に呼ばれる. したがってこのEventでsetCanceled(true)をすると, attackTargetEntityWithCurrentItem()の処理がキャンセルされる. つまりCancelableなEventで割り込みに成功したときは, setCanceled(true)をしないと元の処理が実行されてしまう.
実例
新しい矢を追加したとしよう. その矢をバニラの弓で撃てるようにするにはArrowNockEventやArrowLooseEventを実装する必要がある. この2つのEventで新しい矢を発射させる処理のあとにsetCanceled(true)しないと, ItemBowの通常の処理も実行されて, バニラの矢も一緒に発射されてしまうのだ.