package li.cil.oc.api.driver;
import net.minecraft.util.math.BlockPos;
/**
* This interface can be implemented by environments to enforce a method
* whitelist.
* <p/>
* When drivers are collected for a block, they are combined into a compound
* driver. This compound driver will in turn generate a compound environment
* that wraps the contributing environments. Which in turn results in the
* block's component containing the list of methods from all drivers that apply
* to the block.
* <p/>
* In some scenarios you may not want this to happen. Instead, only a select
* list of methods should be shown for a block - for example, you may want to
* suppress inventory functionality if your TileEntity implements IInventory.
* <p/>
* To do so, implement this interface in the <em>environment</em> that you
* return from your driver's {@link SidedBlock#createEnvironment(net.minecraft.world.World, BlockPos, net.minecraft.util.EnumFacing)}
* method, and provide the names of the allowed methods from {@link #whitelistedMethods()}.
* <p/>
* <em>Important</em>: if multiple drivers apply to a single block that each
* provide a whitelist, the list of allowed methods is the intersection of the
* different whitelists!
*/
public interface MethodWhitelist {
/**
* The list of methods allowed to be exposed for blocks this driver is used
* for. Note that the names must <em>exactly</em> match the names of the
* methods they allow.
*
* @return the list of allowed methods.
*/
String[] whitelistedMethods();
}