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

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

import com.hypixel.hytale.codec.Codec;
import java.util.function.Function;
import javax.annotation.Nullable;

public interface IMetaRegistry<K>
{
     <T> T newMetaObject(final MetaKey<T> p0, final K p1);
    
    void forEachMetaEntry(final IMetaStore<K> p0, final MetaEntryConsumer p1);
    
    @Nullable
    PersistentMetaKey<?> getMetaKeyForCodecKey(final String p0);
    
     <T> MetaKey<T> registerMetaObject(final Function<K, T> p0, final boolean p1, final String p2, final Codec<T> p3);
    
    default <T> MetaKey<T> registerMetaObject(final Function<K, T> supplier, final String keyName, final Codec<T> codec) {
        return this.registerMetaObject(supplier, true, keyName, codec);
    }
    
    default <T> MetaKey<T> registerMetaObject(final Function<K, T> supplier) {
        return this.registerMetaObject(supplier, false, null, null);
    }
    
    default <T> MetaKey<T> registerMetaObject() {
        return this.registerMetaObject(parent -> null);
    }
    
    @FunctionalInterface
    public interface MetaEntryConsumer
    {
         <T> void accept(final MetaKey<T> p0, final T p1);
    }
}
