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

package com.hypixel.hytale.event;

import java.util.function.BooleanSupplier;
import javax.annotation.Nonnull;
import com.hypixel.hytale.registry.Registration;

public class EventRegistration<KeyType, EventType extends IBaseEvent<KeyType>> extends Registration
{
    @Nonnull
    protected final Class<EventType> eventClass;
    
    public EventRegistration(@Nonnull final Class<EventType> eventClass, @Nonnull final BooleanSupplier isEnabled, @Nonnull final Runnable unregister) {
        super(isEnabled, unregister);
        this.eventClass = eventClass;
    }
    
    public EventRegistration(@Nonnull final EventRegistration<KeyType, EventType> registration, @Nonnull final BooleanSupplier isEnabled, @Nonnull final Runnable unregister) {
        super(isEnabled, unregister);
        this.eventClass = registration.eventClass;
    }
    
    @Nonnull
    public Class<EventType> getEventClass() {
        return this.eventClass;
    }
    
    @Nonnull
    @Override
    public String toString() {
        return "EventRegistration{eventClass=" + String.valueOf(this.eventClass) + ", " + super.toString();
    }
    
    @Nonnull
    @SafeVarargs
    public static <KeyType, EventType extends IBaseEvent<KeyType>> EventRegistration<KeyType, EventType> combine(@Nonnull final EventRegistration<KeyType, EventType> thisRegistration, @Nonnull final EventRegistration<KeyType, EventType>... containerRegistrations) {
        return new EventRegistration<KeyType, EventType>(thisRegistration.eventClass, () -> {
            if (!thisRegistration.isEnabled.getAsBoolean()) {
                return false;
            }
            else {
                final EventRegistration[] arr$ = containerRegistrations;
                final int len$ = arr$.length;
                int i$ = 0;
                while (i$ < len$) {
                    final EventRegistration<KeyType, EventType> containerRegistration = arr$[i$];
                    if (!containerRegistration.isEnabled.getAsBoolean()) {
                        return false;
                    }
                    else {
                        ++i$;
                    }
                }
                return true;
            }
        }, () -> {
            thisRegistration.unregister();
            for (final EventRegistration<KeyType, EventType> containerRegistration2 : containerRegistrations) {
                containerRegistration2.unregister();
            }
        });
    }
}
