blob: 29dd46492ae6d018465a0f3c42e85155f45fb1b3 [file] [log] [blame] [raw]
package li.cil.oc.common.container
import cpw.mods.fml.relauncher.Side
import cpw.mods.fml.relauncher.SideOnly
import li.cil.oc.common
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.inventory.Slot
import net.minecraft.item.ItemStack
import net.minecraft.util.IIcon
import scala.collection.convert.WrapAsScala._
trait ComponentSlot extends Slot {
def container: Player
def slot: String
def tier: Int
def tierIcon: IIcon
var changeListener: Option[Slot => Unit] = None
// ----------------------------------------------------------------------- //
@SideOnly(Side.CLIENT)
override def func_111238_b() = slot != common.Slot.None && tier != common.Tier.None && super.func_111238_b()
override def isItemValid(stack: ItemStack) = inventory.isItemValidForSlot(getSlotIndex, stack)
override def onPickupFromSlot(player: EntityPlayer, stack: ItemStack) {
super.onPickupFromSlot(player, stack)
for (slot <- container.inventorySlots) slot match {
case dynamic: ComponentSlot => dynamic.clearIfInvalid(player)
case _ =>
}
}
override def putStack(stack: ItemStack): Unit = {
super.putStack(stack)
inventory match {
case playerAware: common.tileentity.traits.PlayerInputAware =>
playerAware.onSetInventorySlotContents(container.playerInventory.player, getSlotIndex, stack)
case _ =>
}
}
override def onSlotChanged() {
super.onSlotChanged()
for (slot <- container.inventorySlots) slot match {
case dynamic: ComponentSlot => dynamic.clearIfInvalid(container.playerInventory.player)
case _ =>
}
changeListener.foreach(_(this))
}
protected def clearIfInvalid(player: EntityPlayer) {}
}