blob: 7bd4324148419a7a1cfb9dd253a490fc5f71067a [file] [log] [blame] [raw]
package li.cil.oc.api.prefab;
import li.cil.oc.api.driver.EnvironmentHost;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
/**
* If you wish to create item components such as the network card or hard drives
* you will need an item driver.
* <p/>
* This prefab allows creating a driver that works for a specified list of item
* stacks (to support different items with the same id but different damage
* values). It also takes care of creating and getting the tag compound on an
* item stack to save data to or load data from.
* <p/>
* You still have to specify your component's slot type and provide the
* implementation for creating its environment, if any.
*
* @see li.cil.oc.api.network.ManagedEnvironment
*/
@SuppressWarnings("UnusedDeclaration")
public abstract class DriverItem implements li.cil.oc.api.driver.Item {
protected final ItemStack[] items;
protected DriverItem(final ItemStack... items) {
this.items = items.clone();
}
@Override
public boolean worksWith(final ItemStack stack) {
if (stack != null) {
for (ItemStack item : items) {
if (item != null && item.isItemEqual(stack)) {
return true;
}
}
}
return false;
}
@Override
public int tier(final ItemStack stack) {
return 0;
}
@Override
public NBTTagCompound dataTag(final ItemStack stack) {
if (!stack.hasTagCompound()) {
stack.setTagCompound(new NBTTagCompound());
}
final NBTTagCompound nbt = stack.getTagCompound();
// This is the suggested key under which to store item component data.
// You are free to change this as you please.
if (!nbt.hasKey("oc:data")) {
nbt.setTag("oc:data", new NBTTagCompound());
}
return nbt.getCompoundTag("oc:data");
}
// Convenience methods provided for HostAware drivers.
protected boolean isRotatable(Class<? extends EnvironmentHost> host) {
return li.cil.oc.api.internal.Rotatable.class.isAssignableFrom(host);
}
protected boolean isComputer(Class<? extends EnvironmentHost> host) {
return li.cil.oc.api.internal.Case.class.isAssignableFrom(host);
}
protected boolean isRobot(Class<? extends EnvironmentHost> host) {
return li.cil.oc.api.internal.Robot.class.isAssignableFrom(host);
}
protected boolean isServer(Class<? extends EnvironmentHost> host) {
return li.cil.oc.api.internal.Server.class.isAssignableFrom(host);
}
protected boolean isTablet(Class<? extends EnvironmentHost> host) {
return li.cil.oc.api.internal.Tablet.class.isAssignableFrom(host);
}
}