Removed TElectric, a redundant trait

This commit is contained in:
Calclavia 2015-01-26 18:13:56 +08:00
parent 5c7fc91ada
commit 15bd9807ab
18 changed files with 154 additions and 147 deletions

View file

@ -19,12 +19,13 @@ import net.minecraftforge.common.MinecraftForge
import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.common.util.ForgeDirection
import net.minecraftforge.fluids._ import net.minecraftforge.fluids._
import resonant.lib.content.prefab.{TIO, TInventory} import resonant.lib.content.prefab.{TIO, TInventory}
import resonant.lib.grid.core.TBlockNodeProvider
import resonant.lib.grid.energy.EnergyStorage import resonant.lib.grid.energy.EnergyStorage
import resonant.lib.grid.energy.electric.NodeElectricComponent
import resonant.lib.grid.thermal.{BoilEvent, ThermalPhysics} import resonant.lib.grid.thermal.{BoilEvent, ThermalPhysics}
import resonant.lib.network.discriminator.PacketType import resonant.lib.network.discriminator.PacketType
import resonant.lib.network.handle.{TPacketReceiver, TPacketSender} import resonant.lib.network.handle.{TPacketReceiver, TPacketSender}
import resonant.lib.prefab.tile.spatial.{SpatialBlock, SpatialTile} import resonant.lib.prefab.tile.spatial.{SpatialBlock, SpatialTile}
import resonant.lib.prefab.tile.traits.TElectric
import resonant.lib.transform.vector.Vector3 import resonant.lib.transform.vector.Vector3
import resonant.lib.utility.FluidUtility import resonant.lib.utility.FluidUtility
import resonant.lib.wrapper.ByteBufWrapper._ import resonant.lib.wrapper.ByteBufWrapper._
@ -35,7 +36,7 @@ import resonant.lib.wrapper.CollectionWrapper._
* *
* @author Calclavia * @author Calclavia
*/ */
class TileFirebox extends SpatialTile(Material.rock) with IFluidHandler with TInventory with TElectric with TIO with TPacketSender with TPacketReceiver class TileFirebox extends SpatialTile(Material.rock) with IFluidHandler with TInventory with TBlockNodeProvider with TIO with TPacketSender with TPacketReceiver
{ {
/** /**
* 1KG of coal ~= 24MJ * 1KG of coal ~= 24MJ
@ -45,8 +46,9 @@ class TileFirebox extends SpatialTile(Material.rock) with IFluidHandler with TIn
* into fluids to increase their internal energy. * into fluids to increase their internal energy.
*/ */
private final val power = 100000 private final val power = 100000
val energy = new EnergyStorage
protected val tank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME) protected val tank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME)
private val electricNode = new NodeElectricComponent(this)
private val energy = new EnergyStorage
private var burnTime = 0 private var burnTime = 0
private var heatEnergy = 0d private var heatEnergy = 0d
@ -159,6 +161,11 @@ class TileFirebox extends SpatialTile(Material.rock) with IFluidHandler with TIn
return this.getBlockMetadata == 1 return this.getBlockMetadata == 1
} }
def canBurn(stack: ItemStack): Boolean =
{
return TileEntityFurnace.getItemBurnTime(stack) > 0
}
override def randomDisplayTick(): Unit = override def randomDisplayTick(): Unit =
{ {
if (isBurning) if (isBurning)
@ -184,6 +191,8 @@ class TileFirebox extends SpatialTile(Material.rock) with IFluidHandler with TIn
} }
} }
def isBurning: Boolean = burnTime > 0
override def getSizeInventory = 1 override def getSizeInventory = 1
def getMeltIronEnergy(volume: Float): Double = def getMeltIronEnergy(volume: Float): Double =
@ -198,11 +207,6 @@ class TileFirebox extends SpatialTile(Material.rock) with IFluidHandler with TIn
return i == 0 && canBurn(itemStack) return i == 0 && canBurn(itemStack)
} }
def canBurn(stack: ItemStack): Boolean =
{
return TileEntityFurnace.getItemBurnTime(stack) > 0
}
/** /**
* Override this method * Override this method
* Be sure to super this method or manually write the id into the packet when sending * Be sure to super this method or manually write the id into the packet when sending
@ -293,8 +297,6 @@ class TileFirebox extends SpatialTile(Material.rock) with IFluidHandler with TIn
return if (isBurning) (if (isElectric) SpatialBlock.icon.get("firebox_electric_side_on") else SpatialBlock.icon.get("firebox_side_on")) else (if (isElectric) SpatialBlock.icon.get("firebox_electric_side_off") else SpatialBlock.icon.get("firebox_side_off")) return if (isBurning) (if (isElectric) SpatialBlock.icon.get("firebox_electric_side_on") else SpatialBlock.icon.get("firebox_side_on")) else (if (isElectric) SpatialBlock.icon.get("firebox_electric_side_off") else SpatialBlock.icon.get("firebox_side_off"))
} }
def isBurning: Boolean = burnTime > 0
override def click(player: EntityPlayer) override def click(player: EntityPlayer)
{ {
if (server) if (server)

View file

@ -5,7 +5,7 @@ import net.minecraft.block.material.Material
import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagCompound
import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.common.util.ForgeDirection
import net.minecraftforge.fluids._ import net.minecraftforge.fluids._
import resonant.lib.grid.core.TSpatialNodeProvider import resonant.lib.grid.core.TBlockNodeProvider
import resonant.lib.network.discriminator.PacketType import resonant.lib.network.discriminator.PacketType
import resonant.lib.network.handle.{TPacketReceiver, TPacketSender} import resonant.lib.network.handle.{TPacketReceiver, TPacketSender}
import resonant.lib.prefab.fluid.NodeFluid import resonant.lib.prefab.fluid.NodeFluid
@ -17,7 +17,7 @@ import resonant.lib.wrapper.ByteBufWrapper._
* *
* @author DarkGuardsman, Calclavia * @author DarkGuardsman, Calclavia
*/ */
abstract class TileFluidProvider(material: Material) extends SpatialTile(material) with TSpatialNodeProvider with IFluidHandler with TPacketReceiver with TPacketSender abstract class TileFluidProvider(material: Material) extends SpatialTile(material) with TBlockNodeProvider with IFluidHandler with TPacketReceiver with TPacketSender
{ {
protected var colorID: Int = 0 protected var colorID: Int = 0
protected var clientRenderMask = 0x3F protected var clientRenderMask = 0x3F
@ -33,6 +33,20 @@ abstract class TileFluidProvider(material: Material) extends SpatialTile(materia
} }
} }
def fluidNode = _fluidNode
def fluidNode_=(newNode: NodeFluid)
{
_fluidNode = newNode
fluidNode.onConnectionChanged = () =>
{
clientRenderMask = fluidNode.connectedMask
sendPacket(0)
}
fluidNode.onFluidChanged = () => if (!world.isRemote) sendPacket(1)
nodes.add(fluidNode)
}
override def write(buf: ByteBuf, id: Int) override def write(buf: ByteBuf, id: Int)
{ {
super.write(buf, id) super.write(buf, id)
@ -94,20 +108,6 @@ abstract class TileFluidProvider(material: Material) extends SpatialTile(materia
override def drain(from: ForgeDirection, maxDrain: Int, doDrain: Boolean): FluidStack = fluidNode.drain(from, maxDrain, doDrain) override def drain(from: ForgeDirection, maxDrain: Int, doDrain: Boolean): FluidStack = fluidNode.drain(from, maxDrain, doDrain)
def fluidNode = _fluidNode
def fluidNode_=(newNode: NodeFluid)
{
_fluidNode = newNode
fluidNode.onConnectionChanged = () =>
{
clientRenderMask = fluidNode.connectedMask
sendPacket(0)
}
fluidNode.onFluidChanged = () => if (!world.isRemote) sendPacket(1)
nodes.add(fluidNode)
}
override def canFill(from: ForgeDirection, fluid: Fluid): Boolean = fluidNode.canFill(from, fluid) override def canFill(from: ForgeDirection, fluid: Fluid): Boolean = fluidNode.canFill(from, fluid)
override def canDrain(from: ForgeDirection, fluid: Fluid): Boolean = fluidNode.canDrain(from, fluid) override def canDrain(from: ForgeDirection, fluid: Fluid): Boolean = fluidNode.canDrain(from, fluid)

View file

@ -1,16 +1,11 @@
package edx.core.prefab.part.connector package edx.core.prefab.part.connector
import java.util
import java.util.{List => JList} import java.util.{List => JList}
import codechicken.multipart.TMultiPart import codechicken.multipart.TMultiPart
import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagCompound
import net.minecraftforge.common.util.ForgeDirection
import resonant.api.ISave import resonant.api.ISave
import resonant.api.tile.INodeProvider import resonant.lib.grid.core.TNodeProvider
import resonant.api.tile.node.INode
import resonant.lib.debug.IDebugInfo
import resonant.lib.grid.core.Node
import scala.collection.convert.wrapAll._ import scala.collection.convert.wrapAll._
@ -18,10 +13,8 @@ import scala.collection.convert.wrapAll._
* A node trait that can be mixed into any multipart nodes. Mixing this trait will cause nodes to reconstruct/deconstruct when needed. * A node trait that can be mixed into any multipart nodes. Mixing this trait will cause nodes to reconstruct/deconstruct when needed.
* @author Calclavia * @author Calclavia
*/ */
trait TPartNodeProvider extends PartAbstract with INodeProvider with IDebugInfo trait TPartNodeProvider extends PartAbstract with TNodeProvider
{ {
protected val nodes = new util.HashSet[Node]
override def start() override def start()
{ {
super.start() super.start()
@ -65,20 +58,4 @@ trait TPartNodeProvider extends PartAbstract with INodeProvider with IDebugInfo
super.load(nbt) super.load(nbt)
nodes.filter(_.isInstanceOf[ISave]).foreach(_.asInstanceOf[ISave].load(nbt)) nodes.filter(_.isInstanceOf[ISave]).foreach(_.asInstanceOf[ISave].load(nbt))
} }
override def getNode[N <: INode](nodeType: Class[_ <: N], from: ForgeDirection): N =
{
return nodes.filter(node => nodeType.isAssignableFrom(node.getClass)).headOption.getOrElse(null).asInstanceOf[N]
}
override def getDebugInfo: JList[String] =
{
val debugs = nodes.toList.filter(_.isInstanceOf[IDebugInfo])
if (debugs.size > 0)
{
return debugs.map(_.asInstanceOf[IDebugInfo].getDebugInfo.toList).reduceLeft(_ ::: _)
}
return List[String]()
}
} }

View file

@ -17,12 +17,13 @@ import net.minecraftforge.common.util.ForgeDirection
import org.lwjgl.opengl.GL11._ import org.lwjgl.opengl.GL11._
import resonant.api.items.ISimpleItemRenderer import resonant.api.items.ISimpleItemRenderer
import resonant.lib.content.prefab.TIO import resonant.lib.content.prefab.TIO
import resonant.lib.grid.core.TSpatialNodeProvider import resonant.lib.grid.core.TBlockNodeProvider
import resonant.lib.grid.energy.EnergyStorage import resonant.lib.grid.energy.EnergyStorage
import resonant.lib.grid.energy.electric.NodeElectricComponent
import resonant.lib.network.discriminator.PacketType import resonant.lib.network.discriminator.PacketType
import resonant.lib.network.handle.{TPacketReceiver, TPacketSender} import resonant.lib.network.handle.{TPacketReceiver, TPacketSender}
import resonant.lib.prefab.tile.spatial.SpatialTile import resonant.lib.prefab.tile.spatial.SpatialTile
import resonant.lib.prefab.tile.traits.{TElectric, TEnergyProvider} import resonant.lib.prefab.tile.traits.TEnergyProvider
import resonant.lib.render.RenderUtility import resonant.lib.render.RenderUtility
import resonant.lib.transform.vector.Vector3 import resonant.lib.transform.vector.Vector3
import resonant.lib.utility.science.UnitDisplay import resonant.lib.utility.science.UnitDisplay
@ -47,8 +48,9 @@ object TileBattery
def getEnergyForTier(tier: Int) = Math.round(Math.pow(500000000, (tier / (maxTier + 0.7f)) + 1) / 500000000) * 500000000 def getEnergyForTier(tier: Int) = Math.round(Math.pow(500000000, (tier / (maxTier + 0.7f)) + 1) / 500000000) * 500000000
} }
class TileBattery extends SpatialTile(Material.iron) with TIO with TElectric with TSpatialNodeProvider with TPacketSender with TPacketReceiver with TEnergyProvider with ISimpleItemRenderer class TileBattery extends SpatialTile(Material.iron) with TIO with TBlockNodeProvider with TPacketSender with TPacketReceiver with TEnergyProvider with ISimpleItemRenderer
{ {
private val electricNode = new NodeElectricComponent(this)
var energyRenderLevel = 0 var energyRenderLevel = 0
nodes.add(electricNode) nodes.add(electricNode)
@ -102,6 +104,7 @@ class TileBattery extends SpatialTile(Material.iron) with TIO with TElectric wit
energyRenderLevel = Math.round((energy.value / TileBattery.getEnergyForTier(getBlockMetadata).toDouble) * 8).toInt energyRenderLevel = Math.round((energy.value / TileBattery.getEnergyForTier(getBlockMetadata).toDouble) * 8).toInt
sendDescPacket() sendDescPacket()
} }
/** /**
* Update packet when energy level changes. * Update packet when energy level changes.

View file

@ -11,9 +11,10 @@ import net.minecraftforge.client.model.AdvancedModelLoader
import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.common.util.ForgeDirection
import org.lwjgl.opengl.GL11 import org.lwjgl.opengl.GL11
import resonant.lib.content.prefab.TIO import resonant.lib.content.prefab.TIO
import resonant.lib.grid.core.TSpatialNodeProvider import resonant.lib.grid.core.TBlockNodeProvider
import resonant.lib.grid.energy.electric.NodeElectricComponent
import resonant.lib.prefab.tile.spatial.SpatialTile import resonant.lib.prefab.tile.spatial.SpatialTile
import resonant.lib.prefab.tile.traits.{TElectric, TRotatable} import resonant.lib.prefab.tile.traits.TRotatable
import resonant.lib.render.RenderUtility import resonant.lib.render.RenderUtility
import resonant.lib.transform.vector.Vector3 import resonant.lib.transform.vector.Vector3
@ -40,9 +41,10 @@ object TileMotor
val motorConstant = fieldStrength * area * coils val motorConstant = fieldStrength * area * coils
} }
class TileMotor extends SpatialTile(Material.iron) with TIO with TElectric with TSpatialNodeProvider with TRotatable class TileMotor extends SpatialTile(Material.iron) with TIO with TBlockNodeProvider with TRotatable
{ {
var mechNode = new NodeMechanical(this) private val electricNode = new NodeElectricComponent(this)
private val mechNode = new NodeMechanical(this)
{ {
override def canConnect(from: ForgeDirection): Boolean = override def canConnect(from: ForgeDirection): Boolean =
{ {
@ -67,8 +69,8 @@ class TileMotor extends SpatialTile(Material.iron) with TIO with TElectric with
override def start() override def start()
{ {
super.start()
updateConnections() updateConnections()
super.start()
} }
def updateConnections() def updateConnections()

View file

@ -7,16 +7,18 @@ import net.minecraft.client.renderer.texture.IIconRegister
import net.minecraft.util.IIcon import net.minecraft.util.IIcon
import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.common.util.ForgeDirection
import resonant.lib.content.prefab.TIO import resonant.lib.content.prefab.TIO
import resonant.lib.grid.core.TSpatialNodeProvider import resonant.lib.grid.core.TBlockNodeProvider
import resonant.lib.grid.energy.electric.NodeElectricComponent
import resonant.lib.prefab.tile.spatial.{SpatialBlock, SpatialTile} import resonant.lib.prefab.tile.spatial.{SpatialBlock, SpatialTile}
import resonant.lib.prefab.tile.traits.TElectric
import resonant.lib.render.block.RenderConnectedTexture import resonant.lib.render.block.RenderConnectedTexture
import resonant.lib.transform.region.Cuboid import resonant.lib.transform.region.Cuboid
import scala.collection.convert.wrapAll._ import scala.collection.convert.wrapAll._
class TileSolarPanel extends SpatialTile(Material.iron) with TElectric with TSpatialNodeProvider with TIO with RenderConnectedTexture class TileSolarPanel extends SpatialTile(Material.iron) with TBlockNodeProvider with TIO with RenderConnectedTexture
{ {
private val electricNode = new NodeElectricComponent(this)
ioMap = 728 ioMap = 728
textureName = "solarPanel_top" textureName = "solarPanel_top"
bounds = new Cuboid(0, 0, 0, 1, 0.3f, 1) bounds = new Cuboid(0, 0, 0, 1, 0.3f, 1)

View file

@ -8,20 +8,20 @@ import net.minecraft.init.Blocks
import net.minecraft.util.IIcon import net.minecraft.util.IIcon
import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.common.util.ForgeDirection
import resonant.lib.content.prefab.TIO import resonant.lib.content.prefab.TIO
import resonant.lib.grid.core.TSpatialNodeProvider import resonant.lib.grid.core.TBlockNodeProvider
import resonant.lib.grid.energy.electric.NodeElectricComponent
import resonant.lib.prefab.tile.spatial.{SpatialBlock, SpatialTile} import resonant.lib.prefab.tile.spatial.{SpatialBlock, SpatialTile}
import resonant.lib.prefab.tile.traits.TElectric
import scala.collection.convert.wrapAll._ import scala.collection.convert.wrapAll._
class TileThermopile extends SpatialTile(Material.rock) with TElectric with TSpatialNodeProvider with TIO class TileThermopile extends SpatialTile(Material.rock) with TBlockNodeProvider with TIO
{ {
/** /**
* The amount of ticks the thermopile will use the temperature differences before turning all * The amount of ticks the thermopile will use the temperature differences before turning all
* adjacent sides to thermal equilibrium. * adjacent sides to thermal equilibrium.
*/ */
private val maxTicks = 120 * 20 private val maxTicks = 120 * 20
private val electricNode = new NodeElectricComponent(this)
private var ticksUsed = 0 private var ticksUsed = 0
ioMap = 728 ioMap = 728

View file

@ -18,11 +18,13 @@ import net.minecraft.util.ChatComponentText
import net.minecraft.world.World import net.minecraft.world.World
import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.common.util.ForgeDirection
import resonant.lib.content.prefab.TIO import resonant.lib.content.prefab.TIO
import resonant.lib.grid.core.TBlockNodeProvider
import resonant.lib.grid.energy.EnergyStorage import resonant.lib.grid.energy.EnergyStorage
import resonant.lib.grid.energy.electric.NodeElectricComponent
import resonant.lib.network.discriminator.{PacketTile, PacketType} import resonant.lib.network.discriminator.{PacketTile, PacketType}
import resonant.lib.network.handle.{TPacketReceiver, TPacketSender} import resonant.lib.network.handle.{TPacketReceiver, TPacketSender}
import resonant.lib.prefab.tile.mixed.TileElectric
import resonant.lib.prefab.tile.multiblock.reference.{IMultiBlockStructure, MultiBlockHandler} import resonant.lib.prefab.tile.multiblock.reference.{IMultiBlockStructure, MultiBlockHandler}
import resonant.lib.prefab.tile.spatial.SpatialTile
import resonant.lib.prefab.tile.traits.TEnergyProvider import resonant.lib.prefab.tile.traits.TEnergyProvider
import resonant.lib.render.EnumColor import resonant.lib.render.EnumColor
import resonant.lib.transform.vector.{Vector3, VectorWorld} import resonant.lib.transform.vector.{Vector3, VectorWorld}
@ -43,13 +45,13 @@ object TileTesla
final val DEFAULT_COLOR: Int = 12 final val DEFAULT_COLOR: Int = 12
} }
class TileTesla extends TileElectric(Material.iron) with IMultiBlockStructure[TileTesla] with ITesla with TPacketReceiver with TPacketSender with TEnergyProvider with TIO class TileTesla extends SpatialTile(Material.iron) with TBlockNodeProvider with IMultiBlockStructure[TileTesla] with ITesla with TPacketReceiver with TPacketSender with TEnergyProvider with TIO
{ {
final val TRANSFER_CAP: Double = 10000D final val TRANSFER_CAP: Double = 10000D
/** Prevents transfer loops */ /** Prevents transfer loops */
final val outputBlacklist: Set[TileTesla] = new HashSet[TileTesla] final val outputBlacklist: Set[TileTesla] = new HashSet[TileTesla]
final val connectedTeslas: Set[TileTesla] = new HashSet[TileTesla] final val connectedTeslas: Set[TileTesla] = new HashSet[TileTesla]
private val electricNode = new NodeElectricComponent(this)
var dyeID: Int = TileTesla.DEFAULT_COLOR var dyeID: Int = TileTesla.DEFAULT_COLOR
var canReceive: Boolean = true var canReceive: Boolean = true
var attackEntities: Boolean = true var attackEntities: Boolean = true
@ -399,6 +401,12 @@ class TileTesla extends TileElectric(Material.iron) with IMultiBlockStructure[Ti
getMultiBlock.save(nbt) getMultiBlock.save(nbt)
} }
def getMultiBlock: MultiBlockHandler[TileTesla] =
{
if (multiBlock == null) multiBlock = new MultiBlockHandler[TileTesla](this)
return multiBlock
}
def setLink(vector3: Vector3, dimID: Int, setOpponent: Boolean) def setLink(vector3: Vector3, dimID: Int, setOpponent: Boolean)
{ {
if (!worldObj.isRemote) if (!worldObj.isRemote)
@ -602,12 +610,6 @@ class TileTesla extends TileElectric(Material.iron) with IMultiBlockStructure[Ti
} }
} }
def getMultiBlock: MultiBlockHandler[TileTesla] =
{
if (multiBlock == null) multiBlock = new MultiBlockHandler[TileTesla](this)
return multiBlock
}
def getLowestTesla: TileTesla = def getLowestTesla: TileTesla =
{ {
var lowest: TileTesla = this var lowest: TileTesla = this

View file

@ -5,7 +5,7 @@ import io.netty.buffer.ByteBuf
import net.minecraft.block.material.Material import net.minecraft.block.material.Material
import net.minecraft.entity.player.EntityPlayer import net.minecraft.entity.player.EntityPlayer
import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.common.util.ForgeDirection
import resonant.lib.grid.core.TSpatialNodeProvider import resonant.lib.grid.core.TBlockNodeProvider
import resonant.lib.network.discriminator.PacketType import resonant.lib.network.discriminator.PacketType
import resonant.lib.network.handle.{TPacketReceiver, TPacketSender} import resonant.lib.network.handle.{TPacketReceiver, TPacketSender}
import resonant.lib.prefab.tile.spatial.SpatialTile import resonant.lib.prefab.tile.spatial.SpatialTile
@ -18,7 +18,7 @@ import scala.collection.convert.wrapAll._
/** Prefab for resonantinduction.mechanical tiles /** Prefab for resonantinduction.mechanical tiles
* *
* @author Calclavia */ * @author Calclavia */
abstract class TileMechanical(material: Material) extends SpatialTile(material: Material) with TRotatable with TSpatialNodeProvider with TPacketSender with TPacketReceiver abstract class TileMechanical(material: Material) extends SpatialTile(material: Material) with TRotatable with TBlockNodeProvider with TPacketSender with TPacketReceiver
{ {
/** Node that handles most mechanical actions */ /** Node that handles most mechanical actions */
private var _mechanicalNode: NodeMechanical = null private var _mechanicalNode: NodeMechanical = null
@ -42,18 +42,6 @@ abstract class TileMechanical(material: Material) extends SpatialTile(material:
return false return false
} }
def mechanicalNode = _mechanicalNode
def mechanicalNode_=(newNode: NodeMechanical)
{
_mechanicalNode = newNode
mechanicalNode.onVelocityChanged = () => sendPacket(1)
nodes.removeAll(nodes.filter(_.isInstanceOf[NodeMechanical]))
nodes.add(mechanicalNode)
}
mechanicalNode = new NodeMechanical(this)
override def write(buf: ByteBuf, id: Int) override def write(buf: ByteBuf, id: Int)
{ {
super.write(buf, id) super.write(buf, id)
@ -65,6 +53,8 @@ abstract class TileMechanical(material: Material) extends SpatialTile(material:
} }
} }
def mechanicalNode = _mechanicalNode
override def read(buf: ByteBuf, id: Int, packetType: PacketType) override def read(buf: ByteBuf, id: Int, packetType: PacketType)
{ {
super.read(buf, id, packetType) super.read(buf, id, packetType)
@ -76,4 +66,18 @@ abstract class TileMechanical(material: Material) extends SpatialTile(material:
} }
} }
def mechanicalNode_=(newNode: NodeMechanical)
{
_mechanicalNode = newNode
mechanicalNode.onVelocityChanged = () => sendPacket(1)
nodes.removeAll(nodes.filter(_.isInstanceOf[NodeMechanical]))
nodes.add(mechanicalNode)
}
mechanicalNode = new NodeMechanical(this)
} }

View file

@ -13,7 +13,7 @@ import net.minecraftforge.client.model.AdvancedModelLoader
import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.common.util.ForgeDirection
import org.lwjgl.opengl.GL11 import org.lwjgl.opengl.GL11
import org.lwjgl.opengl.GL11._ import org.lwjgl.opengl.GL11._
import resonant.lib.grid.core.TSpatialNodeProvider import resonant.lib.grid.core.TBlockNodeProvider
import resonant.lib.grid.energy.electric.NodeElectricComponent import resonant.lib.grid.energy.electric.NodeElectricComponent
import resonant.lib.prefab.tile.spatial.SpatialTile import resonant.lib.prefab.tile.spatial.SpatialTile
import resonant.lib.prefab.tile.traits.TRotatable import resonant.lib.prefab.tile.traits.TRotatable
@ -38,7 +38,7 @@ object TileLaserEmitter
val texture = new ResourceLocation(Reference.domain, Reference.modelPath + "laserEmitter.png") val texture = new ResourceLocation(Reference.domain, Reference.modelPath + "laserEmitter.png")
} }
class TileLaserEmitter extends SpatialTile(Material.iron) with ILaserHandler with TSpatialNodeProvider with TRotatable class TileLaserEmitter extends SpatialTile(Material.iron) with ILaserHandler with TBlockNodeProvider with TRotatable
{ {
val electricNode = new NodeElectricComponent(this) val electricNode = new NodeElectricComponent(this)

View file

@ -11,7 +11,7 @@ import net.minecraft.util.{MovingObjectPosition, ResourceLocation}
import net.minecraftforge.client.model.AdvancedModelLoader import net.minecraftforge.client.model.AdvancedModelLoader
import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.common.util.ForgeDirection
import org.lwjgl.opengl.GL11._ import org.lwjgl.opengl.GL11._
import resonant.lib.grid.core.TSpatialNodeProvider import resonant.lib.grid.core.TBlockNodeProvider
import resonant.lib.grid.energy.electric.NodeElectricComponent import resonant.lib.grid.energy.electric.NodeElectricComponent
import resonant.lib.prefab.tile.spatial.SpatialTile import resonant.lib.prefab.tile.spatial.SpatialTile
import resonant.lib.prefab.tile.traits.TRotatable import resonant.lib.prefab.tile.traits.TRotatable
@ -30,7 +30,7 @@ object TileLaserReceiver
@SideOnly(Side.CLIENT) val texture = new ResourceLocation(Reference.domain, Reference.modelPath + "laserReceiver.png") @SideOnly(Side.CLIENT) val texture = new ResourceLocation(Reference.domain, Reference.modelPath + "laserReceiver.png")
} }
class TileLaserReceiver extends SpatialTile(Material.rock) with ILaserHandler with TSpatialNodeProvider with TRotatable class TileLaserReceiver extends SpatialTile(Material.rock) with ILaserHandler with TBlockNodeProvider with TRotatable
{ {
val electricNode = new NodeElectricComponent(this) val electricNode = new NodeElectricComponent(this)

View file

@ -13,17 +13,18 @@ import net.minecraft.nbt.NBTTagCompound
import net.minecraft.util.IIcon import net.minecraft.util.IIcon
import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.common.util.ForgeDirection
import resonant.api.tile.{IElectromagnet, IRotatable} import resonant.api.tile.{IElectromagnet, IRotatable}
import resonant.lib.content.prefab.TInventory
import resonant.lib.grid.energy.EnergyStorage import resonant.lib.grid.energy.EnergyStorage
import resonant.lib.network.discriminator.{PacketTile, PacketType} import resonant.lib.network.discriminator.{PacketTile, PacketType}
import resonant.lib.network.handle.{TPacketIDReceiver, TPacketSender} import resonant.lib.network.handle.{TPacketIDReceiver, TPacketSender}
import resonant.lib.prefab.tile.mixed.TileElectricInventory import resonant.lib.prefab.tile.spatial.SpatialTile
import resonant.lib.prefab.tile.traits.TEnergyProvider import resonant.lib.prefab.tile.traits.TEnergyProvider
import resonant.lib.transform.vector.Vector3 import resonant.lib.transform.vector.Vector3
import resonant.lib.utility.BlockUtility import resonant.lib.utility.BlockUtility
import scala.collection.JavaConversions._ import scala.collection.JavaConversions._
class TileAccelerator extends TileElectricInventory(Material.iron) with IElectromagnet with IRotatable with TPacketIDReceiver with TPacketSender with TEnergyProvider class TileAccelerator extends SpatialTile(Material.iron) with TInventory with IElectromagnet with IRotatable with TPacketIDReceiver with TPacketSender with TEnergyProvider
{ {
final val DESC_PACKET_ID = 2 final val DESC_PACKET_ID = 2
/** /**
@ -220,20 +221,6 @@ class TileAccelerator extends TileElectricInventory(Material.iron) with IElectro
return 0 return 0
} }
override def getDirection: ForgeDirection =
{
return ForgeDirection.getOrientation(getBlockMetadata)
}
/////////////////////////////////////////
/// Save handling ///
////////////////////////////////////////
override def setDirection(direction: ForgeDirection)
{
world.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, direction.ordinal, 3)
}
override def activate(player: EntityPlayer, side: Int, hit: Vector3): Boolean = override def activate(player: EntityPlayer, side: Int, hit: Vector3): Boolean =
{ {
player.openGui(Electrodynamics, 0, world, xi, yi, zi) player.openGui(Electrodynamics, 0, world, xi, yi, zi)
@ -241,7 +228,7 @@ class TileAccelerator extends TileElectricInventory(Material.iron) with IElectro
} }
///////////////////////////////////////// /////////////////////////////////////////
/// Inventory Overrides /// /// Save handling ///
//////////////////////////////////////// ////////////////////////////////////////
override def read(buf: ByteBuf, id: Int, player: EntityPlayer, packet: PacketType): Boolean = override def read(buf: ByteBuf, id: Int, player: EntityPlayer, packet: PacketType): Boolean =
@ -269,6 +256,10 @@ class TileAccelerator extends TileElectricInventory(Material.iron) with IElectro
antimatter = par1NBTTagCompound.getInteger("antimatter") antimatter = par1NBTTagCompound.getInteger("antimatter")
} }
/////////////////////////////////////////
/// Inventory Overrides ///
////////////////////////////////////////
override def writeToNBT(par1NBTTagCompound: NBTTagCompound) override def writeToNBT(par1NBTTagCompound: NBTTagCompound)
{ {
super.writeToNBT(par1NBTTagCompound) super.writeToNBT(par1NBTTagCompound)
@ -276,10 +267,6 @@ class TileAccelerator extends TileElectricInventory(Material.iron) with IElectro
par1NBTTagCompound.setInteger("antimatter", antimatter) par1NBTTagCompound.setInteger("antimatter", antimatter)
} }
/////////////////////////////////////////
/// Field Getters & Setters ///
////////////////////////////////////////
override def canInsertItem(slotID: Int, itemStack: ItemStack, j: Int): Boolean = override def canInsertItem(slotID: Int, itemStack: ItemStack, j: Int): Boolean =
{ {
return isItemValidForSlot(slotID, itemStack) && slotID != 2 && slotID != 3 return isItemValidForSlot(slotID, itemStack) && slotID != 2 && slotID != 3
@ -301,6 +288,10 @@ class TileAccelerator extends TileElectricInventory(Material.iron) with IElectro
return false return false
} }
/////////////////////////////////////////
/// Field Getters & Setters ///
////////////////////////////////////////
override def canExtractItem(slotID: Int, itemstack: ItemStack, j: Int): Boolean = override def canExtractItem(slotID: Int, itemstack: ItemStack, j: Int): Boolean =
{ {
return slotID == 2 || slotID == 3 return slotID == 2 || slotID == 3
@ -320,4 +311,14 @@ class TileAccelerator extends TileElectricInventory(Material.iron) with IElectro
} }
return getIcon return getIcon
} }
override def getDirection: ForgeDirection =
{
return ForgeDirection.getOrientation(getBlockMetadata)
}
override def setDirection(direction: ForgeDirection)
{
world.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, direction.ordinal, 3)
}
} }

View file

@ -11,11 +11,13 @@ import net.minecraft.network.Packet
import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.common.util.ForgeDirection
import net.minecraftforge.fluids._ import net.minecraftforge.fluids._
import resonant.core.ResonantEngine import resonant.core.ResonantEngine
import resonant.lib.content.prefab.TIO import resonant.lib.content.prefab.{TIO, TInventory}
import resonant.lib.grid.core.TBlockNodeProvider
import resonant.lib.grid.energy.EnergyStorage import resonant.lib.grid.energy.EnergyStorage
import resonant.lib.grid.energy.electric.NodeElectricComponent
import resonant.lib.network.discriminator.{PacketTile, PacketType} import resonant.lib.network.discriminator.{PacketTile, PacketType}
import resonant.lib.network.handle.IPacketReceiver import resonant.lib.network.handle.IPacketReceiver
import resonant.lib.prefab.tile.mixed.TileElectricInventory import resonant.lib.prefab.tile.spatial.SpatialTile
import resonant.lib.prefab.tile.traits.{TEnergyProvider, TRotatable} import resonant.lib.prefab.tile.traits.{TEnergyProvider, TRotatable}
import resonant.lib.transform.vector.Vector3 import resonant.lib.transform.vector.Vector3
@ -27,14 +29,12 @@ object TileNuclearBoiler
final val power: Long = 50000 final val power: Long = 50000
} }
class TileNuclearBoiler extends TileElectricInventory(Material.iron) with IPacketReceiver with IFluidHandler with TRotatable with TEnergyProvider with TIO class TileNuclearBoiler extends SpatialTile(Material.iron) with TInventory with TBlockNodeProvider with IPacketReceiver with IFluidHandler with TRotatable with TEnergyProvider with TIO
{ {
final val totalTime: Int = 20 * 15 final val totalTime: Int = 20 * 15
final val waterTank: FluidTank = new FluidTank(QuantumContent.fluidStackWater.copy, FluidContainerRegistry.BUCKET_VOLUME * 5) final val waterTank: FluidTank = new FluidTank(QuantumContent.fluidStackWater.copy, FluidContainerRegistry.BUCKET_VOLUME * 5)
final val gasTank: FluidTank = new FluidTank(QuantumContent.fluidStackUraniumHexaflouride.copy, FluidContainerRegistry.BUCKET_VOLUME * 5) final val gasTank: FluidTank = new FluidTank(QuantumContent.fluidStackUraniumHexaflouride.copy, FluidContainerRegistry.BUCKET_VOLUME * 5)
private val electricNode = new NodeElectricComponent(this)
var timer: Int = 0 var timer: Int = 0
var rotation: Float = 0 var rotation: Float = 0

View file

@ -11,12 +11,14 @@ import net.minecraft.nbt.NBTTagCompound
import net.minecraft.tileentity.TileEntity import net.minecraft.tileentity.TileEntity
import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.common.util.ForgeDirection
import net.minecraftforge.fluids._ import net.minecraftforge.fluids._
import resonant.lib.content.prefab.TIO import resonant.lib.content.prefab.{TIO, TInventory}
import resonant.lib.grid.core.TBlockNodeProvider
import resonant.lib.grid.energy.EnergyStorage import resonant.lib.grid.energy.EnergyStorage
import resonant.lib.grid.energy.electric.NodeElectricComponent
import resonant.lib.mod.compat.energy.Compatibility import resonant.lib.mod.compat.energy.Compatibility
import resonant.lib.network.discriminator.{PacketTile, PacketType} import resonant.lib.network.discriminator.{PacketTile, PacketType}
import resonant.lib.network.handle.IPacketReceiver import resonant.lib.network.handle.IPacketReceiver
import resonant.lib.prefab.tile.mixed.TileElectricInventory import resonant.lib.prefab.tile.spatial.SpatialTile
import resonant.lib.prefab.tile.traits.{TEnergyProvider, TRotatable} import resonant.lib.prefab.tile.traits.{TEnergyProvider, TRotatable}
import resonant.lib.transform.vector.Vector3 import resonant.lib.transform.vector.Vector3
@ -29,9 +31,10 @@ object TileCentrifuge
final val DIAN: Long = 500000 final val DIAN: Long = 500000
} }
class TileCentrifuge extends TileElectricInventory(Material.iron) with IPacketReceiver with IFluidHandler with IInventory with TEnergyProvider with TRotatable with TIO class TileCentrifuge extends SpatialTile(Material.iron) with TInventory with TBlockNodeProvider with IPacketReceiver with IFluidHandler with IInventory with TEnergyProvider with TRotatable with TIO
{ {
val gasTank: FluidTank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME * 5) val gasTank: FluidTank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME * 5)
private val electricNode = new NodeElectricComponent(this)
var timer: Int = 0 var timer: Int = 0
var rotation: Float = 0 var rotation: Float = 0
@ -148,22 +151,6 @@ class TileCentrifuge extends TileElectricInventory(Material.iron) with IPacketRe
return false return false
} }
override def isItemValidForSlot(i: Int, itemStack: ItemStack): Boolean =
{
i match
{
case 0 =>
return Compatibility.isHandler(itemStack.getItem, null)
case 1 =>
return true
case 2 =>
return itemStack.getItem eq QuantumContent.itemUranium
case 3 =>
return itemStack.getItem eq QuantumContent.itemUranium
}
return false
}
override def use(player: EntityPlayer, side: Int, hit: Vector3): Boolean = override def use(player: EntityPlayer, side: Int, hit: Vector3): Boolean =
{ {
openGui(player, QuantumContent) openGui(player, QuantumContent)
@ -258,6 +245,22 @@ class TileCentrifuge extends TileElectricInventory(Material.iron) with IPacketRe
return slotID == 1 && this.isItemValidForSlot(slotID, itemStack) return slotID == 1 && this.isItemValidForSlot(slotID, itemStack)
} }
override def isItemValidForSlot(i: Int, itemStack: ItemStack): Boolean =
{
i match
{
case 0 =>
return Compatibility.isHandler(itemStack.getItem, null)
case 1 =>
return true
case 2 =>
return itemStack.getItem eq QuantumContent.itemUranium
case 3 =>
return itemStack.getItem eq QuantumContent.itemUranium
}
return false
}
override def canExtractItem(slotID: Int, itemstack: ItemStack, j: Int): Boolean = override def canExtractItem(slotID: Int, itemstack: ItemStack, j: Int): Boolean =
{ {
return slotID == 2 || slotID == 3 return slotID == 2 || slotID == 3

View file

@ -4,14 +4,16 @@ import net.minecraft.block.material.Material
import net.minecraft.item.ItemStack import net.minecraft.item.ItemStack
import net.minecraftforge.fluids.{FluidContainerRegistry, FluidStack, FluidTank} import net.minecraftforge.fluids.{FluidContainerRegistry, FluidStack, FluidTank}
import resonant.api.recipe.{MachineRecipes, RecipeResource} import resonant.api.recipe.{MachineRecipes, RecipeResource}
import resonant.lib.prefab.tile.mixed.TileElectricInventory import resonant.lib.content.prefab.TInventory
import resonant.lib.grid.core.TBlockNodeProvider
import resonant.lib.prefab.tile.spatial.SpatialTile
/** /**
* General class for all machines that do traditional recipe processing * General class for all machines that do traditional recipe processing
* *
* @author Calclavia * @author Calclavia
*/ */
abstract class TileProcess(material: Material) extends TileElectricInventory(material) abstract class TileProcess(material: Material) extends SpatialTile(material) with TInventory with TBlockNodeProvider
{ {
protected var inputSlot: Int = 0 protected var inputSlot: Int = 0
protected var outputSlot: Int = 0 protected var outputSlot: Int = 0

View file

@ -2,7 +2,7 @@ package edx.quantum.machine.fulmination
import net.minecraft.block.material.Material import net.minecraft.block.material.Material
import resonant.lib.grid.energy.EnergyStorage import resonant.lib.grid.energy.EnergyStorage
import resonant.lib.prefab.tile.mixed.TileElectric import resonant.lib.prefab.tile.spatial.SpatialTile
import resonant.lib.prefab.tile.traits.TEnergyProvider import resonant.lib.prefab.tile.traits.TEnergyProvider
/** /**
@ -13,7 +13,7 @@ object TileFulmination
private final val maxEnergy: Long = 10000000000000L private final val maxEnergy: Long = 10000000000000L
} }
class TileFulmination extends TileElectric(Material.iron) with TEnergyProvider class TileFulmination extends SpatialTile(Material.iron) with TEnergyProvider
{ {
//TODO: Dummy //TODO: Dummy
energy = new EnergyStorage energy = new EnergyStorage

View file

@ -12,11 +12,13 @@ import net.minecraft.network.Packet
import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.common.util.ForgeDirection
import net.minecraftforge.fluids._ import net.minecraftforge.fluids._
import resonant.core.ResonantEngine import resonant.core.ResonantEngine
import resonant.lib.grid.core.TBlockNodeProvider
import resonant.lib.grid.energy.EnergyStorage import resonant.lib.grid.energy.EnergyStorage
import resonant.lib.grid.energy.electric.NodeElectricComponent
import resonant.lib.mod.config.Config import resonant.lib.mod.config.Config
import resonant.lib.network.discriminator.{PacketTile, PacketType} import resonant.lib.network.discriminator.{PacketTile, PacketType}
import resonant.lib.network.handle.IPacketReceiver import resonant.lib.network.handle.IPacketReceiver
import resonant.lib.prefab.tile.mixed.TileElectric import resonant.lib.prefab.tile.spatial.SpatialTile
import resonant.lib.prefab.tile.traits.TEnergyProvider import resonant.lib.prefab.tile.traits.TEnergyProvider
import resonant.lib.transform.vector.Vector3 import resonant.lib.transform.vector.Vector3
import resonant.lib.utility.science.UnitDisplay import resonant.lib.utility.science.UnitDisplay
@ -28,11 +30,12 @@ object TilePlasmaHeater
@Config var plasmaHeatAmount: Int = 100 @Config var plasmaHeatAmount: Int = 100
} }
class TilePlasmaHeater extends TileElectric(Material.iron) with IPacketReceiver with IFluidHandler with TEnergyProvider class TilePlasmaHeater extends SpatialTile(Material.iron) with TBlockNodeProvider with IPacketReceiver with IFluidHandler with TEnergyProvider
{ {
final val tankInputDeuterium: FluidTank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME * 10) final val tankInputDeuterium: FluidTank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME * 10)
final val tankInputTritium: FluidTank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME * 10) final val tankInputTritium: FluidTank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME * 10)
final val tankOutput: FluidTank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME * 10) final val tankOutput: FluidTank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME * 10)
private val electricNode = new NodeElectricComponent(this)
var rotation: Float = 0 var rotation: Float = 0
//Constructor //Constructor

View file

@ -9,10 +9,13 @@ import net.minecraft.entity.player.EntityPlayer
import net.minecraft.item.{Item, ItemStack} import net.minecraft.item.{Item, ItemStack}
import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagCompound
import resonant.api.recipe.QuantumAssemblerRecipes import resonant.api.recipe.QuantumAssemblerRecipes
import resonant.lib.content.prefab.TInventory
import resonant.lib.grid.core.TBlockNodeProvider
import resonant.lib.grid.energy.EnergyStorage import resonant.lib.grid.energy.EnergyStorage
import resonant.lib.grid.energy.electric.NodeElectricComponent
import resonant.lib.network.discriminator.{PacketTile, PacketType} import resonant.lib.network.discriminator.{PacketTile, PacketType}
import resonant.lib.network.handle.IPacketReceiver import resonant.lib.network.handle.IPacketReceiver
import resonant.lib.prefab.tile.mixed.TileElectricInventory import resonant.lib.prefab.tile.spatial.SpatialTile
import resonant.lib.prefab.tile.traits.TEnergyProvider import resonant.lib.prefab.tile.traits.TEnergyProvider
import resonant.lib.transform.vector.Vector3 import resonant.lib.transform.vector.Vector3
@ -21,8 +24,10 @@ import resonant.lib.transform.vector.Vector3
* *
* @author Calclavia, Darkguardsman * @author Calclavia, Darkguardsman
*/ */
class TileQuantumAssembler extends TileElectricInventory(Material.iron) with IPacketReceiver with TEnergyProvider class TileQuantumAssembler extends SpatialTile(Material.iron) with TInventory with TBlockNodeProvider with IPacketReceiver with TEnergyProvider
{ {
private val electricNode = new NodeElectricComponent(this)
private[quantum] var power: Long = 1000000000L private[quantum] var power: Long = 1000000000L
private[quantum] var MAX_TIME: Int = 20 * 120 private[quantum] var MAX_TIME: Int = 20 * 120
private[quantum] var time: Int = 0 private[quantum] var time: Int = 0
@ -44,6 +49,7 @@ class TileQuantumAssembler extends TileElectricInventory(Material.iron) with IPa
normalRender = false normalRender = false
customItemRender = true customItemRender = true
textureName = "machine" textureName = "machine"
nodes.add(electricNode)
override def getSizeInventory: Int = 7 override def getSizeInventory: Int = 7