|  | package li.cil.oc.server.component | 
|  |  | 
|  | import net.minecraft.tileentity.TileEntity | 
|  | import net.minecraft.entity.Entity | 
|  | import net.minecraft.world.World | 
|  |  | 
|  | trait Container { | 
|  | def tileEntity: Option[TileEntity] = None | 
|  |  | 
|  | def entity: Option[Entity] = None | 
|  |  | 
|  | def world: World | 
|  |  | 
|  | def x: Double | 
|  |  | 
|  | def y: Double | 
|  |  | 
|  | def z: Double | 
|  |  | 
|  | def markChanged() {} | 
|  | } | 
|  |  | 
|  | object Container { | 
|  |  | 
|  | case class TileEntityContainer(container: TileEntity) extends Container { | 
|  | override def tileEntity = Option(container) | 
|  |  | 
|  | override def world = container.getWorldObj | 
|  |  | 
|  | override def x = container.xCoord + 0.5 | 
|  |  | 
|  | override def y = container.yCoord + 0.5 | 
|  |  | 
|  | override def z = container.zCoord + 0.5 | 
|  |  | 
|  | override def markChanged() = container.onInventoryChanged() | 
|  | } | 
|  |  | 
|  | case class EntityContainer(container: Entity) extends Container { | 
|  | override def entity = Option(container) | 
|  |  | 
|  | override def world = container.worldObj | 
|  |  | 
|  | override def x = container.posX | 
|  |  | 
|  | override def y = container.posY | 
|  |  | 
|  | override def z = container.posZ | 
|  | } | 
|  |  | 
|  | } |