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

package com.hypixel.hytale.event;

import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
import javax.annotation.Nullable;
import java.util.function.Consumer;
import javax.annotation.Nonnull;

public interface IEventRegistry
{
    @Nullable
     <EventType extends IBaseEvent<Void>> EventRegistration<Void, EventType> register(@Nonnull final Class<? super EventType> p0, @Nonnull final Consumer<EventType> p1);
    
    @Nullable
     <EventType extends IBaseEvent<Void>> EventRegistration<Void, EventType> register(@Nonnull final EventPriority p0, @Nonnull final Class<? super EventType> p1, @Nonnull final Consumer<EventType> p2);
    
    @Nullable
     <EventType extends IBaseEvent<Void>> EventRegistration<Void, EventType> register(final short p0, @Nonnull final Class<? super EventType> p1, @Nonnull final Consumer<EventType> p2);
    
    @Nullable
     <KeyType, EventType extends IBaseEvent<KeyType>> EventRegistration<KeyType, EventType> register(@Nonnull final Class<? super EventType> p0, @Nonnull final KeyType p1, @Nonnull final Consumer<EventType> p2);
    
    @Nullable
     <KeyType, EventType extends IBaseEvent<KeyType>> EventRegistration<KeyType, EventType> register(@Nonnull final EventPriority p0, @Nonnull final Class<? super EventType> p1, @Nonnull final KeyType p2, @Nonnull final Consumer<EventType> p3);
    
    @Nullable
     <KeyType, EventType extends IBaseEvent<KeyType>> EventRegistration<KeyType, EventType> register(final short p0, @Nonnull final Class<? super EventType> p1, @Nonnull final KeyType p2, @Nonnull final Consumer<EventType> p3);
    
    @Nullable
     <EventType extends IAsyncEvent<Void>> EventRegistration<Void, EventType> registerAsync(@Nonnull final Class<? super EventType> p0, @Nonnull final Function<CompletableFuture<EventType>, CompletableFuture<EventType>> p1);
    
    @Nullable
     <EventType extends IAsyncEvent<Void>> EventRegistration<Void, EventType> registerAsync(@Nonnull final EventPriority p0, @Nonnull final Class<? super EventType> p1, @Nonnull final Function<CompletableFuture<EventType>, CompletableFuture<EventType>> p2);
    
    @Nullable
     <EventType extends IAsyncEvent<Void>> EventRegistration<Void, EventType> registerAsync(final short p0, final Class<? super EventType> p1, @Nonnull final Function<CompletableFuture<EventType>, CompletableFuture<EventType>> p2);
    
    @Nullable
     <KeyType, EventType extends IAsyncEvent<KeyType>> EventRegistration<KeyType, EventType> registerAsync(@Nonnull final Class<? super EventType> p0, @Nonnull final KeyType p1, @Nonnull final Function<CompletableFuture<EventType>, CompletableFuture<EventType>> p2);
    
    @Nullable
     <KeyType, EventType extends IAsyncEvent<KeyType>> EventRegistration<KeyType, EventType> registerAsync(@Nonnull final EventPriority p0, final Class<? super EventType> p1, @Nonnull final KeyType p2, @Nonnull final Function<CompletableFuture<EventType>, CompletableFuture<EventType>> p3);
    
    @Nullable
     <KeyType, EventType extends IAsyncEvent<KeyType>> EventRegistration<KeyType, EventType> registerAsync(final short p0, @Nonnull final Class<? super EventType> p1, @Nonnull final KeyType p2, @Nonnull final Function<CompletableFuture<EventType>, CompletableFuture<EventType>> p3);
    
    @Nullable
     <KeyType, EventType extends IBaseEvent<KeyType>> EventRegistration<KeyType, EventType> registerGlobal(@Nonnull final Class<? super EventType> p0, @Nonnull final Consumer<EventType> p1);
    
    @Nullable
     <KeyType, EventType extends IBaseEvent<KeyType>> EventRegistration<KeyType, EventType> registerGlobal(@Nonnull final EventPriority p0, @Nonnull final Class<? super EventType> p1, @Nonnull final Consumer<EventType> p2);
    
    @Nullable
     <KeyType, EventType extends IBaseEvent<KeyType>> EventRegistration<KeyType, EventType> registerGlobal(final short p0, @Nonnull final Class<? super EventType> p1, @Nonnull final Consumer<EventType> p2);
    
    @Nullable
     <KeyType, EventType extends IAsyncEvent<KeyType>> EventRegistration<KeyType, EventType> registerAsyncGlobal(@Nonnull final Class<? super EventType> p0, @Nonnull final Function<CompletableFuture<EventType>, CompletableFuture<EventType>> p1);
    
    @Nullable
     <KeyType, EventType extends IAsyncEvent<KeyType>> EventRegistration<KeyType, EventType> registerAsyncGlobal(@Nonnull final EventPriority p0, @Nonnull final Class<? super EventType> p1, @Nonnull final Function<CompletableFuture<EventType>, CompletableFuture<EventType>> p2);
    
    @Nullable
     <KeyType, EventType extends IAsyncEvent<KeyType>> EventRegistration<KeyType, EventType> registerAsyncGlobal(final short p0, @Nonnull final Class<? super EventType> p1, @Nonnull final Function<CompletableFuture<EventType>, CompletableFuture<EventType>> p2);
    
    @Nullable
     <KeyType, EventType extends IBaseEvent<KeyType>> EventRegistration<KeyType, EventType> registerUnhandled(@Nonnull final Class<? super EventType> p0, @Nonnull final Consumer<EventType> p1);
    
    @Nullable
     <KeyType, EventType extends IBaseEvent<KeyType>> EventRegistration<KeyType, EventType> registerUnhandled(@Nonnull final EventPriority p0, @Nonnull final Class<? super EventType> p1, @Nonnull final Consumer<EventType> p2);
    
    @Nullable
     <KeyType, EventType extends IBaseEvent<KeyType>> EventRegistration<KeyType, EventType> registerUnhandled(final short p0, @Nonnull final Class<? super EventType> p1, @Nonnull final Consumer<EventType> p2);
    
    @Nullable
     <KeyType, EventType extends IAsyncEvent<KeyType>> EventRegistration<KeyType, EventType> registerAsyncUnhandled(@Nonnull final Class<? super EventType> p0, @Nonnull final Function<CompletableFuture<EventType>, CompletableFuture<EventType>> p1);
    
    @Nullable
     <KeyType, EventType extends IAsyncEvent<KeyType>> EventRegistration<KeyType, EventType> registerAsyncUnhandled(@Nonnull final EventPriority p0, @Nonnull final Class<? super EventType> p1, @Nonnull final Function<CompletableFuture<EventType>, CompletableFuture<EventType>> p2);
    
    @Nullable
     <KeyType, EventType extends IAsyncEvent<KeyType>> EventRegistration<KeyType, EventType> registerAsyncUnhandled(final short p0, @Nonnull final Class<? super EventType> p1, @Nonnull final Function<CompletableFuture<EventType>, CompletableFuture<EventType>> p2);
}
