orbit
orbit copied to clipboard
Feat: generic events
Generic events would be really useful for avoiding repetitive if conditions at the beginning of an event handler, thus improving readability.
A possible solution for this problem is a new typed event handler like @GenericEventHandler(Something.class) and an IGenericEvent<T> interface with a getClass() method which returns Class<T>.
An example use case for typed events would be this:
@GenericEventHandler(CustomPayloadS2CPacket.class)
private void onPluginMessageReceive(GenericPacketEvent.Receive<CustomPayloadS2CPacket> event) {
// event.packet is of type CustomPayloadS2CPacket at compile time
}
instead of
@EventHandler
private void onPluginMessageReceive(PacketEvent.Receive event) {
if (!(event.packet instanceof CustomPayloadS2CPacket packet)) {
return;
}
}