EventHandler.java 2.24 KB
Newer Older
KingRainbow44's avatar
KingRainbow44 committed
1
2
package emu.grasscutter.server.event;

3
import emu.grasscutter.Grasscutter;
4
import emu.grasscutter.utils.EventConsumer;
5

KingRainbow44's avatar
KingRainbow44 committed
6
import java.lang.reflect.ParameterizedType;
KingRainbow44's avatar
KingRainbow44 committed
7

KingRainbow44's avatar
KingRainbow44 committed
8
9
10
public final class EventHandler<T extends Event> {
    private final Class<T> eventClass;
    private EventConsumer<T> listener;
11
12
    private HandlerPriority priority;
    private boolean handleCanceled;
KingRainbow44's avatar
KingRainbow44 committed
13
14
15
16
17
    
    @SuppressWarnings("unchecked")
    public EventHandler() {
        this.eventClass = (Class<T>) ((ParameterizedType) (getClass().getGenericSuperclass())).getActualTypeArguments()[0];
    }
18
19
20
21
22

    /**
     * Gets which event this handler is handling.
     * @return An event class.
     */
KingRainbow44's avatar
KingRainbow44 committed
23
24
    public Class<T> handles() {
        return this.eventClass;
25
26
27
28
29
30
    }

    /**
     * Returns the callback for the handler.
     * @return A consumer callback.
     */
KingRainbow44's avatar
KingRainbow44 committed
31
    public EventConsumer<T> getCallback() {
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
        return this.listener;
    }

    /**
     * Returns the handler's priority.
     * @return The priority of the handler.
     */
    public HandlerPriority getPriority() {
        return this.priority;
    }

    /**
     * Returns if the handler will ignore cancelled events.
     * @return The ignore cancelled state.
     */
    public boolean ignoresCanceled() {
        return this.handleCanceled;
    }

    /**
     * Sets the callback method for when the event is invoked.
     * @param listener An event handler method.
     * @return Method chaining.
     */
KingRainbow44's avatar
KingRainbow44 committed
56
    public EventHandler<T> listener(EventConsumer<T> listener) {
57
58
59
60
61
62
63
64
        this.listener = listener; return this;
    }

    /**
     * Changes the handler's priority in handling events.
     * @param priority The priority of the handler.
     * @return Method chaining.
     */
KingRainbow44's avatar
KingRainbow44 committed
65
    public EventHandler<T> priority(HandlerPriority priority) {
66
67
68
69
70
71
72
73
        this.priority = priority; return this;
    }

    /**
     * Sets if the handler will ignore cancelled events.
     * @param ignore If the handler should ignore cancelled events.
     * @return Method chaining.
     */
KingRainbow44's avatar
KingRainbow44 committed
74
    public EventHandler<T> ignore(boolean ignore) {
75
76
77
78
79
80
81
82
83
        this.handleCanceled = ignore; return this;
    }

    /**
     * Registers the handler into the PluginManager.
     */
    public void register() {
        Grasscutter.getPluginManager().registerListener(this);
    }
KingRainbow44's avatar
KingRainbow44 committed
84
}