blob: ac9b66cf8eb1715f76e0e5f3ee327a29afed89ec [file] [log] [blame] [raw]
package li.cil.oc.api.internal;
import net.minecraft.item.ItemStack;
/**
* This interface is implemented by the database component.
* <p/>
* This allows getting actual item stack instances as referenced by callers
* of other components' callbacks, without having to push a full representation
* of an item stacks' NBT data to the VM (which can be both a memory and a
* security issue).
* <p/>
* To use this, you'll usually want to accept an address and either an index
* or a hash in your component's callback function, the address being that of
* a database component in the same network as your component. Alternatively
* you can omit requiring an address and just loop through the other nodes on
* the network to look for one those that have a <tt>Database</tt> as host.
*/
public interface Database {
/**
* The number of slots in this database.
*/
int size();
/**
* Get an item stack stored in the specified slot of this database.
* <p/>
* This will return <tt>null</tt> if there is no entry for the specified
* slot. If there is an entry, this will return a <em>copy</em> of that
* item stack, so it is safe to modify the returned stack.
*
* @param slot the slot of the item stack.
* @return the item stack stored in that slot.
*/
ItemStack getStackInSlot(int slot);
/**
* Set the contents of a slot in the database upgrade.
* <p/>
* Use this to change the configuration of a database upgrade.
*
* @param slot the slot to configure.
* @param stack the stack to configure the slot to, <tt>null</tt> to clear.
*/
void setStackInSlot(int slot, ItemStack stack);
/**
* Get an item stack with the specified hash stored in this database.
* <p/>
* This will return a negative value if there is no entry with a matching
* hash.
*
* @param hash the hash of the item stack.
* @return the index of item stack with the specified hash.
*/
int findStackWithHash(String hash);
}