// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.event;

import javax.annotation.Nullable;
import java.util.concurrent.CompletableFuture;
import javax.annotation.Nonnull;

public interface IEventBus extends IEventRegistry
{
    default <KeyType, EventType extends IEvent<KeyType>> EventType dispatch(@Nonnull final Class<EventType> eventClass) {
        return (EventType)this.dispatchFor((Class<? super IEvent>)eventClass, (Object)null).dispatch(null);
    }
    
    default <EventType extends IAsyncEvent<Void>> CompletableFuture<EventType> dispatchAsync(@Nonnull final Class<EventType> eventClass) {
        return (CompletableFuture)this.dispatchForAsync((Class<? super IAsyncEvent>)eventClass).dispatch(null);
    }
    
    default <KeyType, EventType extends IEvent<KeyType>> IEventDispatcher<EventType, EventType> dispatchFor(@Nonnull final Class<? super EventType> eventClass) {
        return this.dispatchFor(eventClass, (Object)null);
    }
    
     <KeyType, EventType extends IEvent<KeyType>> IEventDispatcher<EventType, EventType> dispatchFor(@Nonnull final Class<? super EventType> p0, @Nullable final KeyType p1);
    
    default <KeyType, EventType extends IAsyncEvent<KeyType>> IEventDispatcher<EventType, CompletableFuture<EventType>> dispatchForAsync(@Nonnull final Class<? super EventType> eventClass) {
        return this.dispatchForAsync(eventClass, (Object)null);
    }
    
     <KeyType, EventType extends IAsyncEvent<KeyType>> IEventDispatcher<EventType, CompletableFuture<EventType>> dispatchForAsync(@Nonnull final Class<? super EventType> p0, @Nullable final KeyType p1);
}
