package gminers.glasspane.event;
import gminers.glasspane.component.PaneComponent;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
import lombok.experimental.FieldDefaults;
import lombok.experimental.NonFinal;
/**
* Base class for all events that can be fired and listened for in Glass Pane objects.<br/>
* All classes extending PaneEvent <b>MUST</b> specify a public static Class<?>[] field named SIGNATURE, containing an array of classes
* matching the signature of the event's constructor.
*
* @author Aesen Vismea
*/
@Getter
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
@ToString
@RequiredArgsConstructor
public abstract class PaneEvent {
/**
* The source of this event.
*/
PaneComponent source;
/**
* Whether or not this event is consumed.
*/
@NonFinal boolean consumed = false;
/**
* Consumes this event, preventing it from firing other event behaviors.<br/>
* It will still propagate to other event listeners of the same type, but will prevent this low-level event from triggering high-level
* behaviors, such as a mouse click triggering a button press.
*/
public void consume() {
consumed = true;
}
}