electrodynamics/src/main/scala/edx/electrical/wire/framed/PartFramedWire.scala
2015-01-21 19:08:36 +08:00

92 lines
2.2 KiB
Scala

package edx.electrical.wire.framed
import codechicken.lib.data.{MCDataInput, MCDataOutput}
import codechicken.lib.render.CCRenderState
import codechicken.lib.vec.Vector3
import cpw.mods.fml.relauncher.{Side, SideOnly}
import edx.core.prefab.node.TMultipartNode
import edx.core.prefab.part.connector.PartFramedNode
import edx.electrical.wire.base.TWire
import net.minecraft.client.renderer.RenderBlocks
import net.minecraft.nbt.NBTTagCompound
import net.minecraftforge.common.util.ForgeDirection
import resonant.lib.grid.energy.electric.NodeElectricComponent
import resonant.lib.wrapper.BitmaskWrapper._
/**
* Fluid transport pipe
*
* @author Calclavia
*/
class PartFramedWire extends PartFramedNode with TWire
{
override lazy val node = new NodeElectricComponent(this) with TMultipartNode[NodeElectricComponent]
{
override def reconstruct()
{
val prevCon = connectionMask
connectionMask = 0x00
super.reconstruct()
if (connectionMask != prevCon)
sendPacket(0)
}
override def connect[B <: NodeElectricComponent](obj: B, dir: ForgeDirection) =
{
super.connect(obj, dir)
connectionMask = connectionMask.openMask(dir)
}
}
override def preparePlacement(side: Int, meta: Int)
{
setMaterial(meta)
node.resistance_=(material.resistance)
}
/**
* Packet Methods
*/
override def write(packet: MCDataOutput, id: Int)
{
super.write(packet, id)
super[PartFramedNode].write(packet, id)
super[TWire].write(packet, id)
}
override def read(packet: MCDataInput, packetID: Int)
{
super.read(packet, packetID)
super[PartFramedNode].read(packet, packetID)
super[TWire].read(packet, packetID)
}
/**
* NBT Methods
*/
override def load(nbt: NBTTagCompound)
{
super[PartFramedNode].load(nbt)
super[TWire].load(nbt)
}
override def save(nbt: NBTTagCompound)
{
super[PartFramedNode].save(nbt)
super[TWire].save(nbt)
}
@SideOnly(Side.CLIENT)
override def renderStatic(pos: Vector3, pass: Int): Boolean =
{
RenderFramedWire.renderStatic(this)
return true
}
override def drawBreaking(renderBlocks: RenderBlocks)
{
CCRenderState.reset()
}
}