| package li.cil.oc.common.tileentity |
| |
| import cpw.mods.fml.relauncher.Side |
| import cpw.mods.fml.relauncher.SideOnly |
| import li.cil.oc.Constants |
| import li.cil.oc.Settings |
| import li.cil.oc.api |
| import li.cil.oc.api.network.Analyzable |
| import li.cil.oc.api.network.SidedEnvironment |
| import li.cil.oc.util.ExtendedNBT._ |
| import net.minecraft.entity.player.EntityPlayer |
| import net.minecraft.nbt.NBTTagCompound |
| import net.minecraftforge.common.util.ForgeDirection |
| |
| class Keyboard extends traits.Environment with traits.Rotatable with traits.ImmibisMicroblock with SidedEnvironment with Analyzable { |
| override def validFacings = ForgeDirection.VALID_DIRECTIONS |
| |
| val keyboard = { |
| val keyboardItem = api.Items.get(Constants.BlockName.Keyboard).createItemStack(1) |
| api.Driver.driverFor(keyboardItem, getClass).createEnvironment(keyboardItem, this) |
| } |
| |
| override def node = keyboard.node |
| |
| def hasNodeOnSide(side: ForgeDirection) = |
| side == facing.getOpposite || side == forward || (isOnWall && side == forward.getOpposite) |
| |
| // ----------------------------------------------------------------------- // |
| |
| @SideOnly(Side.CLIENT) |
| override def canConnect(side: ForgeDirection) = hasNodeOnSide(side) |
| |
| override def sidedNode(side: ForgeDirection) = if (hasNodeOnSide(side)) node else null |
| |
| // Override automatic analyzer implementation for sided environments. |
| override def onAnalyze(player: EntityPlayer, side: Int, hitX: Float, hitY: Float, hitZ: Float) = Array(node) |
| |
| // ----------------------------------------------------------------------- // |
| |
| override def canUpdate = false |
| |
| override def readFromNBTForServer(nbt: NBTTagCompound) { |
| super.readFromNBTForServer(nbt) |
| if (isServer) { |
| keyboard.load(nbt.getCompoundTag(Settings.namespace + "keyboard")) |
| } |
| } |
| |
| override def writeToNBTForServer(nbt: NBTTagCompound) { |
| super.writeToNBTForServer(nbt) |
| if (isServer) { |
| nbt.setNewCompoundTag(Settings.namespace + "keyboard", keyboard.save) |
| } |
| } |
| |
| // ----------------------------------------------------------------------- // |
| |
| private def isOnWall = facing != ForgeDirection.UP && facing != ForgeDirection.DOWN |
| |
| private def forward = if (isOnWall) ForgeDirection.UP else yaw |
| } |