001 package net.minecraftforge.event; 002 003 004 /** 005 * Base Event class that all other events are derived from 006 */ 007 public class Event 008 { 009 public enum Result 010 { 011 DENY, 012 DEFAULT, 013 ALLOW 014 } 015 016 private boolean isCanceled = false; 017 private final boolean isCancelable; 018 private static ListenerList listeners = new ListenerList(); 019 020 public Event() 021 { 022 setup(); 023 Class cls = this.getClass(); 024 boolean found = false; 025 while (cls != Event.class) 026 { 027 if (cls.isAnnotationPresent(Cancelable.class)) 028 { 029 found = true; 030 break; 031 } 032 cls = cls.getSuperclass(); 033 } 034 isCancelable = found; 035 } 036 037 /** 038 * Determine if this function is cancelable at all. 039 * @return If access to setCanceled should be allowed 040 */ 041 public boolean isCancelable() 042 { 043 return isCancelable; 044 } 045 046 /** 047 * Determine if this event is canceled and should stop executing. 048 * @return The current canceled state 049 */ 050 public boolean isCanceled() 051 { 052 return isCanceled; 053 } 054 055 /** 056 * Sets the state of this event, not all events are cancelable, and any attempt to 057 * cancel a event that can't be will result in a IllegalArgumentException. 058 * 059 * The functionality of setting the canceled state is defined on a per-event bases. 060 * 061 * @param cancel The new canceled value 062 */ 063 public void setCanceled(boolean cancel) 064 { 065 if (!isCancelable()) 066 { 067 throw new IllegalArgumentException("Attempted to cancel a uncancelable event"); 068 } 069 isCanceled = cancel; 070 } 071 072 /** 073 * Called by the base constructor, this is used by ASM generated 074 * event classes to setup various functionality such as the listener's list. 075 */ 076 protected void setup() 077 { 078 } 079 080 /** 081 * Returns a ListenerList object that contains all listeners 082 * that are registered to this event. 083 * 084 * @return Listener List 085 */ 086 public ListenerList getListenerList() 087 { 088 return listeners; 089 } 090 }