package li.cil.oc.api.driver;

import net.minecraft.item.ItemStack;

/**
 * Environment providers allow OpenComputers to resolve item stacks to the
 * environments generated by the block or item component of the stack.
 * <p/>
 * This is mainly used in OpenComputers' NEI usage handler for displaying
 * a component's API.
 */
public interface EnvironmentProvider {
    /**
     * Get the environment provided by the specified stack.
     * <p/>
     * For blocks this will usually be the tile entity. In particular, for
     * {@link li.cil.oc.api.network.SimpleComponent}s this allows returning
     * an arbitrary class type instead of an environment type, since the
     * {@link li.cil.oc.api.network.Environment} interface will be injected
     * by the class transformer at runtime.
     * <p/>
     * For items this will be the type of the environment returned by the
     * item driver's {@link Item#createEnvironment} method.
     *
     * @param stack the stack to get the environment type for.
     * @return the environment type for the specified stack.
     */
    Class<?> getEnvironment(ItemStack stack);
}
