package li.cil.oc.api.driver.item;
import net.minecraft.item.ItemStack;
/**
* Common functionality provided by parts that influence a machine's speed.
* <p/>
* By default, this is implemented by OpenComputers' {@link Processor}s and
* {@link Memory}.
* <p/>
* The actual call budget of a machine is set to the average of
* the specified call budget of all present components.
* <p/>
* A processor and memory implementation may choose not to implement this
* interface. If no component providing a call budget it present in a machine,
* a value of <tt>1.0</tt> will be used, i.e. the "default" speed modifier.
*/
public interface CallBudget {
/**
* The budget for direct calls provided by the specified component.
* <p/>
* For reference, the default budgets for OpenComputers' processors are
* 0.5, 1.0 and 1.5 for tier one, two and three, respectively. This means
* you can consider it a multiplier for the machine's operation speed.
*
* @param stack the stack representing the part to get the call budget for.
* @return the budget for direct calls per tick provided.
*/
double getCallBudget(ItemStack stack);
}