RyanHub – file viewer
filename: common/src/main/java/rearth/oritech/util/registry/ArchitecturyRecipeRegistryContainer.java
branch: 1.21
back to repo
package rearth.oritech.util.registry;

import dev.architectury.registry.registries.DeferredRegister;
import dev.architectury.registry.registries.RegistrySupplier;
import net.minecraft.recipe.RecipeSerializer;
import net.minecraft.recipe.RecipeType;
import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import rearth.oritech.Oritech;

import java.lang.reflect.Field;

public interface ArchitecturyRecipeRegistryContainer extends ArchitecturyRegistryContainer<RecipeType<?>> {
    
    DeferredRegister<RecipeSerializer<?>> SERIALIZER_REGISTRY = DeferredRegister.create(Oritech.MOD_ID, RegistryKeys.RECIPE_SERIALIZER);
    
    @Override
    default RegistryKey<Registry<RecipeType<?>>> getRegistryType() {
        return RegistryKeys.RECIPE_TYPE;
    }
    
    @SuppressWarnings("unchecked")
    @Override
    default Class<RecipeType<?>> getTargetFieldType() {
        return (Class<RecipeType<?>>) (Object) RecipeType.class;
    }
    
    @Override
    default void postProcessField(String namespace, RecipeType<?> value, String identifier, Field field, RegistrySupplier<RecipeType<?>> supplier) {
        ArchitecturyRegistryContainer.super.postProcessField(namespace, value, identifier, field, supplier);
        SERIALIZER_REGISTRY.register(identifier, () -> (RecipeSerializer<?>) value);
    }
    
    static void finishSerializerRegister() {
        SERIALIZER_REGISTRY.register();
    }
    
}