package org.cyclops.integrateddynamics.api.evaluate.variable.recipe;

import org.cyclops.commoncapabilities.api.capability.recipehandler.RecipeComponent;
import org.cyclops.cyclopscore.init.IRegistry;
import org.cyclops.integrateddynamics.api.evaluate.variable.IValue;
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueType;

import javax.annotation.Nullable;
import java.util.Set;

/**
 * Registry for handling the translation between {@link RecipeComponent} instances and {@link IValue}.
 * @author rubensworks
 */
public interface IRecipeComponentHandlerRegistry extends IRegistry {

    /**
     * Register a new recipe component handler.
     * @param <VT> The value type.
     * @param <V> The value.
     * @param <V> The vaue type
     * @param <T> The instance type.
     * @param <R> The recipe target type, may be Void.
     * @param <C> The component type.
     * @return The registered handler.
     */
    public <VT extends IValueType<V>, V extends IValue, T, R, C extends RecipeComponent<T, R>,
            H extends IRecipeComponentHandler<VT, V, T, R, C>> H register(H handler);

    /**
     * Get a handler by component type.
     * @param component The component type.
     * @param <T> The instance type.
     * @param <R> The recipe target type, may be Void.
     * @param <C> The component type.
     * @return The handler or null.
     */
    @Nullable
    public <VT extends IValueType<V>, V extends IValue, T, R, C extends RecipeComponent<T, R>>
    IRecipeComponentHandler<VT, V, T, R, C> getComponentHandler(C component);

    /**
     * @return The recipe components that have a handler.
     */
    public Set<RecipeComponent<?, ?>> getComponents();

}

@@ -648,24 +648,63 @@
 nt handler.%0A
+     * @param handler The new handler.%0A
      * @para
@@ -759,40 +759,8 @@
 ue.%0A
-     * @param %3CV%3E The vaue type%0A
     
@@ -877,32 +877,68 @@
 component type.%0A
+     * @param %3CH%3E The handler type.%0A
      * @return T
@@ -1234,32 +1234,96 @@
 component type.%0A
+     * @param %3CVT%3E The value type.%0A     * @param %3CV%3E The value.%0A
      * @param %3CT

Fix recipe component handler registry javadoc