blob: 46aa88d3bc4941c034da257a2b8b01e23b070b60 [file] [log] [blame] [raw]
package li.cil.oc.api.internal;
import li.cil.oc.api.component.RackMountable;
import li.cil.oc.api.network.EnvironmentHost;
import li.cil.oc.api.network.SidedEnvironment;
import net.minecraft.inventory.IInventory;
import net.minecraft.nbt.NBTTagCompound;
/**
* This interface is implemented by the rack tile entity.
* <p/>
* It particularly allows {@link RackMountable}s installed in the rack to flag
* themselves as having changed, so their data gets resent to clients.
* <p/>
* Server racks <em>do not</em> serve as environment for the computer nodes of
* servers. That's what the {@link li.cil.oc.api.internal.Server}s are for,
* which are mountables that can be placed in the rack.
* <p/>
* Another purpose is to allow identifying tile entities as racks via the API,
* i.e. without having to link against internal classes. This also means that
* <em>you should not implement this</em>.
*/
public interface Rack extends SidedEnvironment, EnvironmentHost, Rotatable, IInventory {
/**
* Determine the index of the specified mountable.
*
* @param mountable the mountable in this rack to get the index of.
* @return the index in the rack, or <tt>-1</tt> if it's not in the rack.
*/
int indexOfMountable(RackMountable mountable);
/**
* The mountable in the specified slot.
* <p/>
* This can be <tt>null</tt>, for example when there is no mountable installed
* in that slot.
*
* @param slot the slot in which to get the mountable.
* @return the mountable currently hosted in the specified slot.
*/
RackMountable getMountable(int slot);
/**
* Get the last data state provided by the mountable in the specified slot.
* <p/>
* This is also available on the client. This may be <tt>null</tt>.
*
* @param slot the slot of the mountable to get the data for.
* @return the data of the mountable in that slot, or <tt>null</tt>.
*/
NBTTagCompound getMountableData(int slot);
/**
* Mark the mountable in the specified slot as changed.
* <p/>
* This will cause the mountable's {@link RackMountable#getData()} method
* to be called in the next tick and the updated data to be sent to the
* clients, where it can be used for state based rendering of the mountable
* for example.
*
* @param slot the slot of the mountable to queue for updating.
*/
void markChanged(int slot);
}