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

package com.hypixel.hytale.server.core.universe.world.meta;

import com.hypixel.hytale.server.core.asset.type.blocktype.config.StateData;
import javax.annotation.Nullable;
import com.hypixel.hytale.codec.Codec;
import java.util.function.BooleanSupplier;
import javax.annotation.Nonnull;
import com.hypixel.hytale.function.consumer.BooleanConsumer;
import java.util.List;
import com.hypixel.hytale.registry.Registry;

public class BlockStateRegistry extends Registry<BlockStateRegistration>
{
    public BlockStateRegistry(@Nonnull final List<BooleanConsumer> registrations, final BooleanSupplier precondition, final String preconditionMessage) {
        super(registrations, precondition, preconditionMessage, BlockStateRegistration::new);
    }
    
    @Nullable
    public <T extends BlockState> BlockStateRegistration registerBlockState(@Nonnull final Class<T> clazz, @Nonnull final String key, final Codec<T> codec) {
        this.checkPrecondition();
        return this.register(BlockStateModule.get().registerBlockState(clazz, key, codec));
    }
    
    @Nullable
    public <T extends BlockState, D extends StateData> BlockStateRegistration registerBlockState(@Nonnull final Class<T> clazz, @Nonnull final String key, final Codec<T> codec, final Class<D> dataClass, final Codec<D> dataCodec) {
        this.checkPrecondition();
        return this.register(BlockStateModule.get().registerBlockState(clazz, key, codec, dataClass, dataCodec));
    }
}
