basic computer network just registering for now

This commit is contained in:
Johannes Lohrer 2013-10-05 14:21:46 +02:00
parent 0441f10a54
commit 26574bf9b6
8 changed files with 144 additions and 14 deletions

View File

@ -4,11 +4,11 @@ import java.lang.annotation.Documented;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import javax.annotation.meta.TypeQualifierNickname; //import javax.annotation.meta.TypeQualifierNickname;
import javax.annotation.meta.When; import javax.annotation.meta.When;
@Documented @Documented
@TypeQualifierNickname //@TypeQualifierNickname
@Nonnull(when = When.UNKNOWN) @Nonnull(when = When.UNKNOWN)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
public @interface Nullable { public @interface Nullable {

View File

@ -9,7 +9,7 @@ object Blocks {
var screen: Screen = null var screen: Screen = null
var keyboard: Keyboard = null var keyboard: Keyboard = null
var powersupply: PowerSupply = null var powersupply: PowerSupply = null
var powerdistributer: PowerDistributer = null
def init() { def init() {
// IMPORTANT: the multi block must come first, since the sub blocks will // IMPORTANT: the multi block must come first, since the sub blocks will
// try to register with it. Also, the order the sub blocks are created in // try to register with it. Also, the order the sub blocks are created in
@ -21,5 +21,6 @@ object Blocks {
screen = new Screen(blockSimple) screen = new Screen(blockSimple)
keyboard = new Keyboard(blockSpecial) keyboard = new Keyboard(blockSpecial)
powersupply = new PowerSupply(blockSimple) powersupply = new PowerSupply(blockSimple)
powerdistributer = new PowerDistributer(blockSimple)
} }
} }

View File

@ -0,0 +1,30 @@
package li.cil.oc.api.network
/**
* Created with IntelliJ IDEA.
* User: lordjoda
* Date: 04.10.13
* Time: 17:29
* To change this template use File | Settings | File Templates.
*/
trait PoweredNode extends Node{
var main:Node = null
var demand = 2;
override def receive(message: Message): Option[Array[Any]] = {
val ret = super.receive(message)
message.name match {
case "power.connect" => {
println("connect")
if(main != message.source){
println("setting main")
main = message.source
network.foreach(_.sendToAddress(this,message.source.address.get,"power.request",demand))
}
}
case "network.disconnect"=> {if(message.source == main)main = null}
case _ => // Ignore.
}
return ret
}
}

View File

@ -0,0 +1,30 @@
package li.cil.oc.common.block
import cpw.mods.fml.common.registry.GameRegistry
import li.cil.oc.common.tileentity
import net.minecraft.world.World
/**
* Created with IntelliJ IDEA.
* User: lordjoda
* Date: 03.10.13
* Time: 19:48
* To change this template use File | Settings | File Templates.
*/
class PowerDistributer (val parent: Delegator) extends Delegate {
GameRegistry.registerTileEntity(classOf[tileentity.PowerDistributer], "oc.powerdistributer" )
val unlocalizedName = "PowerDistributer"
override def breakBlock(world: World, x: Int, y: Int, z: Int, blockId: Int, metadata: Int) = {
//world.getBlockTileEntity(x, y, z).asInstanceOf[tileentity.PowerDistributer]
super.breakBlock(world, x, y, z, blockId, metadata)
}
// ----------------------------------------------------------------------- //
// Tile entity
// ----------------------------------------------------------------------- //
override def hasTileEntity = true
override def createTileEntity(world: World, metadata: Int) = Some(new tileentity.PowerDistributer)
}

View File

@ -1,6 +1,6 @@
package li.cil.oc.common.component package li.cil.oc.common.component
import li.cil.oc.api.network.{Visibility, Node, Message} import li.cil.oc.api.network.{PoweredNode, Visibility, Node, Message}
import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagCompound
/** /**
@ -10,7 +10,7 @@ import net.minecraft.nbt.NBTTagCompound
* between server and client. These callbacks are only called on the server * between server and client. These callbacks are only called on the server
* side to trigger changes being sent to clients and saving the current state. * side to trigger changes being sent to clients and saving the current state.
*/ */
trait ScreenEnvironment extends Node { trait ScreenEnvironment extends PoweredNode {
val screen = new Screen(this) val screen = new Screen(this)
override def name = "screen" override def name = "screen"

View File

@ -2,7 +2,7 @@ package li.cil.oc.common.tileentity
import li.cil.oc.Items import li.cil.oc.Items
import li.cil.oc.api.driver.Slot import li.cil.oc.api.driver.Slot
import li.cil.oc.api.network.Node import li.cil.oc.api.network.{PoweredNode, Node}
import li.cil.oc.common.item import li.cil.oc.common.item
import li.cil.oc.server.component import li.cil.oc.server.component
import li.cil.oc.server.driver.Registry import li.cil.oc.server.driver.Registry
@ -12,7 +12,7 @@ import net.minecraft.nbt.NBTTagCompound
import net.minecraft.nbt.NBTTagList import net.minecraft.nbt.NBTTagList
import net.minecraft.world.World import net.minecraft.world.World
trait ComponentInventory extends IInventory with Node { trait ComponentInventory extends IInventory with PoweredNode {
protected val inventory = new Array[ItemStack](inventorySize) protected val inventory = new Array[ItemStack](inventorySize)
protected val itemComponents = Array.fill[Option[Node]](inventorySize)(None) protected val itemComponents = Array.fill[Option[Node]](inventorySize)(None)

View File

@ -0,0 +1,72 @@
package li.cil.oc.common.tileentity
import li.cil.oc.api.network.{PoweredNode, Message, Visibility, Node}
/**
* Created with IntelliJ IDEA.
* User: lordjoda
* Date: 03.10.13
* Time: 19:51
* To change this template use File | Settings | File Templates.
*/
class PowerDistributer extends Rotatable with PoweredNode {
var powerDemand:Int = 0
override def name = "powerdistributer"
override def visibility = Visibility.Network
override def receive(message: Message): Option[Array[Any]] = {
message.name match {
case "network.disconnect"=> {
println("recieved disc")
if(message.source == main){
main = this
network.foreach(_.sendToAddress(this,address.get,"power.request",demand))
network.foreach(_.sendToVisible(this, "power.connect"))
}
}
case _ => // Ignore.
}
val ret = super.receive(message)
message.name match {
case "network.connect"=>{
if(main==this){
network.foreach(_.sendToAddress(this,message.source.address.get,"power.connect"))
}
}
case "power.find"=>{
if(main==this){
network.foreach(_.sendToAddress(this,message.source.address.get,"power.connect"))
message.cancel()
}
}
case "power.request"=>{
println("recieved power request")
if(main == this){
println("this is main")
message.data match {
case Array(value:Int)=> {
powerDemand+=value
println("now demanding "+powerDemand)
}
case _ => // Ignore.
}
}
}
case _ => // Ignore.
}
return ret
}
override protected def onConnect() {
network.foreach(_.sendToVisible(this, "power.find"))
if(main==null)
{ main = this
network.foreach(_.sendToAddress(this,address.get,"power.request",demand))
}
super.onConnect()
}
}

View File

@ -1,7 +1,7 @@
package li.cil.oc.common.tileentity package li.cil.oc.common.tileentity
import net.minecraft.tileentity.TileEntity import net.minecraft.tileentity.TileEntity
import li.cil.oc.api.network.{Visibility, Node} import li.cil.oc.api.network.{PoweredNode, Visibility, Node}
import net.minecraftforge.common.{ForgeDirection, MinecraftForge} import net.minecraftforge.common.{ForgeDirection, MinecraftForge}
import ic2.api.energy.event.{EnergyTileLoadEvent, EnergyTileUnloadEvent} import ic2.api.energy.event.{EnergyTileLoadEvent, EnergyTileUnloadEvent}
import cpw.mods.fml.common.FMLCommonHandler import cpw.mods.fml.common.FMLCommonHandler
@ -9,7 +9,6 @@ import ic2.api.energy.tile.IEnergySink
import buildcraft.api.power.{PowerHandler, IPowerReceptor} import buildcraft.api.power.{PowerHandler, IPowerReceptor}
import net.minecraft.world.World import net.minecraft.world.World
import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagCompound
import buildcraft.api.power.PowerHandler.PerditionCalculator
import universalelectricity.core.block.IElectrical import universalelectricity.core.block.IElectrical
import universalelectricity.core.electricity.ElectricityPack import universalelectricity.core.electricity.ElectricityPack
@ -20,7 +19,7 @@ import universalelectricity.core.electricity.ElectricityPack
* Time: 20:37 * Time: 20:37
* To change this template use File | Settings | File Templates. * To change this template use File | Settings | File Templates.
*/ */
class PowerSupply extends Rotatable with Node with IEnergySink with IPowerReceptor with IElectrical{ class PowerSupply extends Rotatable with PoweredNode with IEnergySink with IPowerReceptor with IElectrical{
var addedToEnet = false var addedToEnet = false
var powerHandler:PowerHandler = null var powerHandler:PowerHandler = null
override def name = "powersupply" override def name = "powersupply"
@ -149,7 +148,7 @@ class PowerSupply extends Rotatable with Node with IEnergySink with IPowerRecept
*/ */
def getPowerReceiver(side: ForgeDirection): PowerHandler#PowerReceiver={ def getPowerReceiver(side: ForgeDirection): PowerHandler#PowerReceiver={
return getPowerProvider() .getPowerReceiver return getPowerProvider().getPowerReceiver
} }
def getPowerProvider():PowerHandler= def getPowerProvider():PowerHandler=
{ {
@ -171,9 +170,7 @@ class PowerSupply extends Rotatable with Node with IEnergySink with IPowerRecept
* @param workProvider * @param workProvider
*/ */
def doWork(workProvider: PowerHandler){ def doWork(workProvider: PowerHandler){
println("do work")
storedEnergy+=getPowerProvider().useEnergy(1,MAXENERGY-storedEnergy.toFloat,true)
println("stored: "+storedEnergy)
} }
def getWorld: World=worldObj def getWorld: World=worldObj