0

EventContext: add cancelEvent method

This commit is contained in:
2021-01-01 18:57:12 +03:00
parent cfd68bb45e
commit 4e4a6272ba

View File

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