diff --git a/src/main/java/ghast/EventContext.java b/src/main/java/ghast/EventContext.java index 5a9a33a..1ddd732 100644 --- a/src/main/java/ghast/EventContext.java +++ b/src/main/java/ghast/EventContext.java @@ -3,6 +3,7 @@ package ghast; import lombok.AccessLevel; import lombok.NoArgsConstructor; import org.bukkit.Bukkit; +import org.bukkit.event.Cancellable; import org.bukkit.event.Event; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -17,6 +18,7 @@ import java.util.function.Consumer; public class EventContext implements Listener { private static final BooleanSupplier EMPTY_FILTER = () -> true; + private static final Consumer CANCEL_EVENT = event -> event.setCancelled(true); private final Map, Consumer> eventMap = new HashMap<>(); private BooleanSupplier filter = EMPTY_FILTER; @@ -31,8 +33,7 @@ public class EventContext implements Listener { eventMap.remove(eventType); } else { eventMap.put(eventType, consumer); - Bukkit.getPluginManager().registerEvent(eventType, this, eventPriority, - this::eventExecute, GhastTools.getPlugin()); + bukkitRegisterEvent(eventType, eventPriority); } return this; } @@ -41,6 +42,21 @@ public class EventContext implements Listener { return onEvent(eventType, EventPriority.NORMAL, consumer); } + public EventContext cancelEvent(Class eventType, EventPriority eventPriority) { + eventMap.put(eventType, CANCEL_EVENT); + bukkitRegisterEvent(eventType, eventPriority); + return this; + } + + public EventContext cancelEvent(Class eventType) { + return cancelEvent(eventType, EventPriority.NORMAL); + } + + private void bukkitRegisterEvent(Class eventType, EventPriority eventPriority) { + Bukkit.getPluginManager().registerEvent(eventType, this, eventPriority, + this::eventExecute, GhastTools.getPlugin()); + } + @SuppressWarnings({ "unchecked", "rawtypes" }) private void eventExecute(Listener listener, Event event) { Consumer consumer = eventMap.get(event.getClass());