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); }