mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-18 11:48:02 -04:00
Merge branch 'master' of https://github.com/MightyPirates/OpenComputers into MC1.7
This commit is contained in:
commit
f826a62cbe
@ -60,7 +60,9 @@ oc:item.NumPad.name=Ziffernblock
|
|||||||
oc:item.PrintedCircuitBoard.name=Gedruckte Leiterplatte (PCB)
|
oc:item.PrintedCircuitBoard.name=Gedruckte Leiterplatte (PCB)
|
||||||
oc:item.RawCircuitBoard.name=Leiterplattenrohling
|
oc:item.RawCircuitBoard.name=Leiterplattenrohling
|
||||||
oc:item.RedstoneCard.name=Redstonekarte
|
oc:item.RedstoneCard.name=Redstonekarte
|
||||||
oc:item.Server.name=Server
|
oc:item.Server0.name=Server (Stufe 1)
|
||||||
|
oc:item.Server1.name=Server (Stufe 2)
|
||||||
|
oc:item.Server2.name=Server (Stufe 3)
|
||||||
oc:item.Terminal.name=Fernbedienung
|
oc:item.Terminal.name=Fernbedienung
|
||||||
oc:item.Transistor.name=Transistor
|
oc:item.Transistor.name=Transistor
|
||||||
oc:item.UpgradeCrafting.name=Fertigungs-Upgrade
|
oc:item.UpgradeCrafting.name=Fertigungs-Upgrade
|
||||||
@ -154,7 +156,7 @@ oc:tooltip.Robot_Level=§fStufe§7: §a%s§7.
|
|||||||
oc:tooltip.Robot_StoredEnergy=§fGespeicherte Energie§7: §a%s§7.
|
oc:tooltip.Robot_StoredEnergy=§fGespeicherte Energie§7: §a%s§7.
|
||||||
oc:tooltip.Router=Erlaubt es, mehrere Netzwerke miteinander zu verbinden. Leitet ausschließlich Netzwerknachrichten weiter, Komponenten "hinter" dem Router sind nicht sichtbar. Nützlich, um Netzwerke zu trennen, jedoch nach wie vor Kommunikation zwischen den Netzwerken zu erlauben, z.b. mittels Netzwerkkarten.
|
oc:tooltip.Router=Erlaubt es, mehrere Netzwerke miteinander zu verbinden. Leitet ausschließlich Netzwerknachrichten weiter, Komponenten "hinter" dem Router sind nicht sichtbar. Nützlich, um Netzwerke zu trennen, jedoch nach wie vor Kommunikation zwischen den Netzwerken zu erlauben, z.b. mittels Netzwerkkarten.
|
||||||
oc:tooltip.Screen=Zeigt Text an, gesteuert von Grafikkarten in Computern.[nl] Höchstauflösung: §f%sx%s§7.[nl] Maximale Farbtiefe: §f%s§7.
|
oc:tooltip.Screen=Zeigt Text an, gesteuert von Grafikkarten in Computern.[nl] Höchstauflösung: §f%sx%s§7.[nl] Maximale Farbtiefe: §f%s§7.
|
||||||
oc:tooltip.Server=Ein Server kann wie ein gewöhnliches Computergehäuse mit Komponenten verbessert werden. Um den Server zu starten, muss er in einem Servergehäuse installiert werden.
|
oc:tooltip.Server=Ein Server kann wie ein gewöhnliches Computergehäuse mit Komponenten verbessert werden. Um den Server zu starten, muss er in einem Servergehäuse installiert werden.[nl] Anzahl unterstützter Fernbedienungen: §f%s§7.
|
||||||
oc:tooltip.Server.Components=Installierte Komponenten:
|
oc:tooltip.Server.Components=Installierte Komponenten:
|
||||||
oc:tooltip.ServerRack=Erlaubt die Installation von bis zu vier Servern. Stellt für jeden eingebauten Server eine virtuelle Tastatur- und Bildschirmkomponente zur Verfügung, welche je eine Fernbedienung repräsentieren.
|
oc:tooltip.ServerRack=Erlaubt die Installation von bis zu vier Servern. Stellt für jeden eingebauten Server eine virtuelle Tastatur- und Bildschirmkomponente zur Verfügung, welche je eine Fernbedienung repräsentieren.
|
||||||
oc:tooltip.Terminal=Erlaubt es, einen Server aus der Ferne zu steuern, so lange man sich in Reichweite des Servers befindet. Verhält sich wie Bildschirm und Tastatur in einem. Kann mit Shift-Rechtsklick an einen Server in einem Serverschrank gebunden werden.
|
oc:tooltip.Terminal=Erlaubt es, einen Server aus der Ferne zu steuern, so lange man sich in Reichweite des Servers befindet. Verhält sich wie Bildschirm und Tastatur in einem. Kann mit Shift-Rechtsklick an einen Server in einem Serverschrank gebunden werden.
|
||||||
|
@ -60,7 +60,9 @@ oc:item.NumPad.name=Numeric Keypad
|
|||||||
oc:item.PrintedCircuitBoard.name=Printed Circuit Board (PCB)
|
oc:item.PrintedCircuitBoard.name=Printed Circuit Board (PCB)
|
||||||
oc:item.RawCircuitBoard.name=Raw Circuit Board
|
oc:item.RawCircuitBoard.name=Raw Circuit Board
|
||||||
oc:item.RedstoneCard.name=Redstone Card
|
oc:item.RedstoneCard.name=Redstone Card
|
||||||
oc:item.Server.name=Server
|
oc:item.Server0.name=Server (Tier 1)
|
||||||
|
oc:item.Server1.name=Server (Tier 2)
|
||||||
|
oc:item.Server2.name=Server (Tier 3)
|
||||||
oc:item.Terminal.name=Remote Terminal
|
oc:item.Terminal.name=Remote Terminal
|
||||||
oc:item.Transistor.name=Transistor
|
oc:item.Transistor.name=Transistor
|
||||||
oc:item.UpgradeCrafting.name=Crafting Upgrade
|
oc:item.UpgradeCrafting.name=Crafting Upgrade
|
||||||
@ -154,7 +156,7 @@ oc:tooltip.Robot_Level=§fLevel§7: §a%s§7.
|
|||||||
oc:tooltip.Robot_StoredEnergy=§fStored energy§7: §a%s§7.
|
oc:tooltip.Robot_StoredEnergy=§fStored energy§7: §a%s§7.
|
||||||
oc:tooltip.Router=Allows connecting different networks to each other. Only network messages will be passed along, components will not be visible through this. Use this to separate networks while still allowing communication using Network Cards, for example.
|
oc:tooltip.Router=Allows connecting different networks to each other. Only network messages will be passed along, components will not be visible through this. Use this to separate networks while still allowing communication using Network Cards, for example.
|
||||||
oc:tooltip.Screen=Display text, controlled by a Graphics Card in a Case.[nl] Maximum resolution: §f%sx%s§7.[nl] Maximum color depth: §f%s§7.
|
oc:tooltip.Screen=Display text, controlled by a Graphics Card in a Case.[nl] Maximum resolution: §f%sx%s§7.[nl] Maximum color depth: §f%s§7.
|
||||||
oc:tooltip.Server=This is a server, there are many like it, but this one can be upgraded with components much like a computer case can be. It can be run by inserting it into a server rack.
|
oc:tooltip.Server=This is a server, there are many like it, but this one can be upgraded with components much like a computer case can be. It can be run by inserting it into a server rack.[nl] Number of supported terminals: §f%s§7.
|
||||||
oc:tooltip.Server.Components=Installed components:
|
oc:tooltip.Server.Components=Installed components:
|
||||||
oc:tooltip.ServerRack=Allows the installation of up to four servers. Provides a built-in virtual keyboard and screen component for each server, representing a remote terminal.
|
oc:tooltip.ServerRack=Allows the installation of up to four servers. Provides a built-in virtual keyboard and screen component for each server, representing a remote terminal.
|
||||||
oc:tooltip.Terminal=Allows controlling a server remotely, as long as you are in range of it. Acts like a portable screen and keyboard. Shift-right-click a server in a server rack to bind the terminal to it.
|
oc:tooltip.Terminal=Allows controlling a server remotely, as long as you are in range of it. Acts like a portable screen and keyboard. Shift-right-click a server in a server rack to bind the terminal to it.
|
||||||
|
@ -12,11 +12,21 @@ terminal {
|
|||||||
[nuggetIron, "oc:craftingKeyboard", nuggetIron]]
|
[nuggetIron, "oc:craftingKeyboard", nuggetIron]]
|
||||||
}
|
}
|
||||||
|
|
||||||
server {
|
server1 {
|
||||||
input: [[obsidian, "oc:craftingRAMTier3", obsidian]
|
input: [[obsidian, "oc:craftingRAMTier3", obsidian]
|
||||||
|
["oc:circuitTier1", "oc:circuitTier2", "oc:circuitTier1"]
|
||||||
|
[obsidian, "oc:craftingCircuitBoardPrinted", obsidian]]
|
||||||
|
}
|
||||||
|
server2 {
|
||||||
|
input: [[obsidian, "oc:craftingRAMTier4", obsidian]
|
||||||
["oc:circuitTier2", "oc:circuitTier3", "oc:circuitTier2"]
|
["oc:circuitTier2", "oc:circuitTier3", "oc:circuitTier2"]
|
||||||
[obsidian, "oc:craftingCircuitBoardPrinted", obsidian]]
|
[obsidian, "oc:craftingCircuitBoardPrinted", obsidian]]
|
||||||
}
|
}
|
||||||
|
server3 {
|
||||||
|
input: [[obsidian, "oc:craftingRAMTier5", obsidian]
|
||||||
|
["oc:circuitTier3", "oc:circuitTier3", "oc:circuitTier3"]
|
||||||
|
[obsidian, "oc:craftingCircuitBoardPrinted", obsidian]]
|
||||||
|
}
|
||||||
|
|
||||||
ram1 {
|
ram1 {
|
||||||
input: [["oc:circuitTier1", "", "oc:circuitTier1"]
|
input: [["oc:circuitTier1", "", "oc:circuitTier1"]
|
||||||
|
@ -12,8 +12,18 @@ terminal {
|
|||||||
[nuggetIron, "oc:craftingKeyboard", nuggetIron]]
|
[nuggetIron, "oc:craftingKeyboard", nuggetIron]]
|
||||||
}
|
}
|
||||||
|
|
||||||
server {
|
server1 {
|
||||||
input: [["oc:circuitTier3", "oc:craftingRAMTier4", "oc:circuitTier3"]
|
input: [["oc:circuitTier1", "oc:craftingRAMTier3", "oc:circuitTier1"]
|
||||||
|
["oc:circuitTier2", "oc:craftingCaseTier1", "oc:circuitTier2"]
|
||||||
|
["oc:craftingCircuitBoardPrinted", "oc:craftingCircuitBoardPrinted", "oc:craftingCircuitBoardPrinted"]]
|
||||||
|
}
|
||||||
|
server2 {
|
||||||
|
input: [["oc:circuitTier2", "oc:craftingRAMTier4", "oc:circuitTier2"]
|
||||||
|
["oc:circuitTier3", "oc:craftingCaseTier2", "oc:circuitTier3"]
|
||||||
|
["oc:craftingCircuitBoardPrinted", "oc:craftingCircuitBoardPrinted", "oc:craftingCircuitBoardPrinted"]]
|
||||||
|
}
|
||||||
|
server3 {
|
||||||
|
input: [["oc:circuitTier3", "oc:craftingRAMTier5", "oc:circuitTier3"]
|
||||||
["oc:circuitTier3", "oc:craftingCaseTier3", "oc:circuitTier3"]
|
["oc:circuitTier3", "oc:craftingCaseTier3", "oc:circuitTier3"]
|
||||||
["oc:craftingCircuitBoardPrinted", "oc:craftingCircuitBoardPrinted", "oc:craftingCircuitBoardPrinted"]]
|
["oc:craftingCircuitBoardPrinted", "oc:craftingCircuitBoardPrinted", "oc:craftingCircuitBoardPrinted"]]
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 517 B |
Binary file not shown.
After Width: | Height: | Size: 521 B |
Binary file not shown.
After Width: | Height: | Size: 525 B |
Binary file not shown.
After Width: | Height: | Size: 531 B |
@ -659,5 +659,8 @@ opencomputers {
|
|||||||
# like, you know, more than the loaded area.
|
# like, you know, more than the loaded area.
|
||||||
# See also: `wirelessStrength`.
|
# See also: `wirelessStrength`.
|
||||||
maxWirelessRange: 400
|
maxWirelessRange: 400
|
||||||
|
|
||||||
|
# The number of remote terminals supported by each server tier.
|
||||||
|
terminalsPerTier: [2, 4, 8]
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -15,7 +15,7 @@ object Items {
|
|||||||
|
|
||||||
// ----------------------------------------------------------------------- //
|
// ----------------------------------------------------------------------- //
|
||||||
// Servers
|
// Servers
|
||||||
var server: item.Server = _
|
var server1, server2, server3: item.Server = _
|
||||||
|
|
||||||
// ----------------------------------------------------------------------- //
|
// ----------------------------------------------------------------------- //
|
||||||
// Memory
|
// Memory
|
||||||
@ -124,11 +124,13 @@ object Items {
|
|||||||
ram5 = new item.Memory(multi, 4)
|
ram5 = new item.Memory(multi, 4)
|
||||||
|
|
||||||
// v1.2.0
|
// v1.2.0
|
||||||
server = new item.Server(multi)
|
server3 = new item.Server(multi, 2)
|
||||||
terminal = new item.Terminal(multi)
|
terminal = new item.Terminal(multi)
|
||||||
cpu1 = new item.CPU(multi, 1)
|
cpu1 = new item.CPU(multi, 1)
|
||||||
cpu2 = new item.CPU(multi, 2)
|
cpu2 = new item.CPU(multi, 2)
|
||||||
internet = new item.InternetCard(multi)
|
internet = new item.InternetCard(multi)
|
||||||
|
server1 = new item.Server(multi, 0)
|
||||||
|
server2 = new item.Server(multi, 1)
|
||||||
|
|
||||||
// ----------------------------------------------------------------------- //
|
// ----------------------------------------------------------------------- //
|
||||||
|
|
||||||
|
@ -68,7 +68,9 @@ object Recipes {
|
|||||||
addRecipe(Items.hdd2.createItemStack(), recipes, "hdd2")
|
addRecipe(Items.hdd2.createItemStack(), recipes, "hdd2")
|
||||||
addRecipe(Items.hdd3.createItemStack(), recipes, "hdd3")
|
addRecipe(Items.hdd3.createItemStack(), recipes, "hdd3")
|
||||||
|
|
||||||
addRecipe(Items.server.createItemStack(), recipes, "server")
|
addRecipe(Items.server1.createItemStack(), recipes, "server1")
|
||||||
|
addRecipe(Items.server2.createItemStack(), recipes, "server2")
|
||||||
|
addRecipe(Items.server3.createItemStack(), recipes, "server3")
|
||||||
|
|
||||||
if (StargateTech2.isAvailable) {
|
if (StargateTech2.isAvailable) {
|
||||||
addRecipe(Items.abstractBus.createItemStack(), recipes, "abstractBusCard")
|
addRecipe(Items.abstractBus.createItemStack(), recipes, "abstractBusCard")
|
||||||
|
@ -156,7 +156,15 @@ class Settings(config: Config) {
|
|||||||
val maxClipboard = config.getInt("misc.maxClipboard") max 0
|
val maxClipboard = config.getInt("misc.maxClipboard") max 0
|
||||||
val maxNetworkPacketSize = config.getInt("misc.maxNetworkPacketSize") max 0
|
val maxNetworkPacketSize = config.getInt("misc.maxNetworkPacketSize") max 0
|
||||||
val maxWirelessRange = config.getDouble("misc.maxWirelessRange") max 0
|
val maxWirelessRange = config.getDouble("misc.maxWirelessRange") max 0
|
||||||
val rTreeMaxEntries = 10 // TODO config?
|
val rTreeMaxEntries = 10
|
||||||
|
val terminalsPerTier = Array(config.getIntList("misc.terminalsPerTier"): _*) match {
|
||||||
|
case Array(tier1, tier2, tier3) =>
|
||||||
|
Array(tier1: Int, tier2: Int, tier3: Int)
|
||||||
|
case _ =>
|
||||||
|
OpenComputers.log.warning("Bad number of Remote Terminal counts, ignoring.")
|
||||||
|
Array(2, 4, 8)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
object Settings {
|
object Settings {
|
||||||
|
@ -25,7 +25,9 @@ object GuiHandler extends CommonGuiHandler {
|
|||||||
case _ => Items.multi.subItem(player.getCurrentEquippedItem) match {
|
case _ => Items.multi.subItem(player.getCurrentEquippedItem) match {
|
||||||
case Some(server: item.Server) if id == GuiType.Server.id =>
|
case Some(server: item.Server) if id == GuiType.Server.id =>
|
||||||
new gui.Server(player.inventory, new ServerInventory {
|
new gui.Server(player.inventory, new ServerInventory {
|
||||||
def container = player.getCurrentEquippedItem
|
override def tier = server.tier
|
||||||
|
|
||||||
|
override def container = player.getCurrentEquippedItem
|
||||||
|
|
||||||
override def isUseableByPlayer(player: EntityPlayer) = player == player
|
override def isUseableByPlayer(player: EntityPlayer) = player == player
|
||||||
})
|
})
|
||||||
@ -46,7 +48,7 @@ object GuiHandler extends CommonGuiHandler {
|
|||||||
case Some(term) =>
|
case Some(term) =>
|
||||||
def inRange = player.isEntityAlive && term.rack.getDistanceFrom(player.posX, player.posY, player.posZ) < term.rack.range * term.rack.range
|
def inRange = player.isEntityAlive && term.rack.getDistanceFrom(player.posX, player.posY, player.posZ) < term.rack.range * term.rack.range
|
||||||
if (inRange) {
|
if (inRange) {
|
||||||
if (term.key.isDefined && term.key.get == key) return new gui.Screen(term.buffer, true, () => {
|
if (term.keys.contains(key)) return new gui.Screen(term.buffer, true, () => {
|
||||||
// Check if someone else bound a term to our server.
|
// Check if someone else bound a term to our server.
|
||||||
if (stack.getTagCompound.getString(Settings.namespace + "key") != key) {
|
if (stack.getTagCompound.getString(Settings.namespace + "key") != key) {
|
||||||
Minecraft.getMinecraft.displayGuiScreen(null)
|
Minecraft.getMinecraft.displayGuiScreen(null)
|
||||||
|
@ -84,9 +84,11 @@ object PacketHandler extends CommonPacketHandler {
|
|||||||
else {
|
else {
|
||||||
t.setRunning(number, p.readBoolean())
|
t.setRunning(number, p.readBoolean())
|
||||||
t.sides(number) = p.readDirection()
|
t.sides(number) = p.readDirection()
|
||||||
val key = p.readUTF()
|
val keyCount = p.readInt()
|
||||||
if (key != "") {
|
val keys = t.terminals(number).keys
|
||||||
t.terminals(number).key = Option(key)
|
keys.clear()
|
||||||
|
for (i <- 0 until keyCount) {
|
||||||
|
keys += p.readUTF()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case _ => // Invalid packet.
|
case _ => // Invalid packet.
|
||||||
|
@ -20,6 +20,8 @@ abstract class GuiHandler extends IGuiHandler {
|
|||||||
case _ => Items.multi.subItem(player.getCurrentEquippedItem) match {
|
case _ => Items.multi.subItem(player.getCurrentEquippedItem) match {
|
||||||
case Some(server: item.Server) if id == GuiType.Server.id =>
|
case Some(server: item.Server) if id == GuiType.Server.id =>
|
||||||
new container.Server(player.inventory, new ServerInventory {
|
new container.Server(player.inventory, new ServerInventory {
|
||||||
|
override def tier = server.tier
|
||||||
|
|
||||||
override def container = player.getCurrentEquippedItem
|
override def container = player.getCurrentEquippedItem
|
||||||
|
|
||||||
override def isUseableByPlayer(player: EntityPlayer) = player == player
|
override def isUseableByPlayer(player: EntityPlayer) = player == player
|
||||||
|
@ -10,7 +10,8 @@ import li.cil.oc.util.ExtendedNBT._
|
|||||||
import li.cil.oc.util.PackedColor.Depth
|
import li.cil.oc.util.PackedColor.Depth
|
||||||
import li.cil.oc.{Items, Settings, common}
|
import li.cil.oc.{Items, Settings, common}
|
||||||
import net.minecraft.entity.player.EntityPlayer
|
import net.minecraft.entity.player.EntityPlayer
|
||||||
import net.minecraft.nbt.NBTTagCompound
|
import net.minecraft.nbt.{NBTTagString, NBTTagCompound}
|
||||||
|
import scala.collection.mutable
|
||||||
|
|
||||||
class Terminal(val rack: tileentity.Rack, val number: Int) extends Buffer.Owner {
|
class Terminal(val rack: tileentity.Rack, val number: Int) extends Buffer.Owner {
|
||||||
val buffer = new common.component.Buffer(this)
|
val buffer = new common.component.Buffer(this)
|
||||||
@ -22,8 +23,7 @@ class Terminal(val rack: tileentity.Rack, val number: Int) extends Buffer.Owner
|
|||||||
override def isUseableByPlayer(p: EntityPlayer) = {
|
override def isUseableByPlayer(p: EntityPlayer) = {
|
||||||
val stack = p.getCurrentEquippedItem
|
val stack = p.getCurrentEquippedItem
|
||||||
Items.multi.subItem(stack) match {
|
Items.multi.subItem(stack) match {
|
||||||
case Some(t: item.Terminal) if key.isDefined && stack.hasTagCompound =>
|
case Some(t: item.Terminal) if stack.hasTagCompound => keys.contains(stack.getTagCompound.getString(Settings.namespace + "key"))
|
||||||
key.get == stack.getTagCompound.getString(Settings.namespace + "key")
|
|
||||||
case _ => false
|
case _ => false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -31,7 +31,7 @@ class Terminal(val rack: tileentity.Rack, val number: Int) extends Buffer.Owner
|
|||||||
}
|
}
|
||||||
else null
|
else null
|
||||||
|
|
||||||
var key: Option[String] = None
|
val keys = mutable.ListBuffer.empty[String]
|
||||||
|
|
||||||
def isServer = rack.isServer
|
def isServer = rack.isServer
|
||||||
|
|
||||||
@ -48,34 +48,28 @@ class Terminal(val rack: tileentity.Rack, val number: Int) extends Buffer.Owner
|
|||||||
def load(nbt: NBTTagCompound) {
|
def load(nbt: NBTTagCompound) {
|
||||||
buffer.load(nbt.getCompoundTag(Settings.namespace + "buffer"))
|
buffer.load(nbt.getCompoundTag(Settings.namespace + "buffer"))
|
||||||
keyboard.load(nbt.getCompoundTag(Settings.namespace + "keyboard"))
|
keyboard.load(nbt.getCompoundTag(Settings.namespace + "keyboard"))
|
||||||
|
// Compatibility for previous dev versions where there was only one term.
|
||||||
if (nbt.hasKey(Settings.namespace + "key")) {
|
if (nbt.hasKey(Settings.namespace + "key")) {
|
||||||
key = Option(nbt.getString(Settings.namespace + "key"))
|
keys += nbt.getString(Settings.namespace + "key")
|
||||||
}
|
}
|
||||||
|
nbt.getTagList(Settings.namespace + "keys").foreach[NBTTagString](keys += _.data)
|
||||||
}
|
}
|
||||||
|
|
||||||
def save(nbt: NBTTagCompound) {
|
def save(nbt: NBTTagCompound) {
|
||||||
nbt.setNewCompoundTag(Settings.namespace + "buffer", buffer.save)
|
nbt.setNewCompoundTag(Settings.namespace + "buffer", buffer.save)
|
||||||
nbt.setNewCompoundTag(Settings.namespace + "keyboard", keyboard.save)
|
nbt.setNewCompoundTag(Settings.namespace + "keyboard", keyboard.save)
|
||||||
key match {
|
nbt.setNewTagList("keys", keys)
|
||||||
case Some(value) => nbt.setString(Settings.namespace + "key", value)
|
|
||||||
case _ =>
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
def readFromNBTForClient(nbt: NBTTagCompound) {
|
def readFromNBTForClient(nbt: NBTTagCompound) {
|
||||||
buffer.buffer.load(nbt)
|
buffer.buffer.load(nbt)
|
||||||
if (nbt.hasKey("key")) {
|
nbt.getTagList("keys").foreach[NBTTagString](keys += _.data)
|
||||||
key = Option(nbt.getString("key"))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def writeToNBTForClient(nbt: NBTTagCompound) {
|
def writeToNBTForClient(nbt: NBTTagCompound) {
|
||||||
buffer.buffer.save(nbt)
|
buffer.buffer.save(nbt)
|
||||||
key match {
|
nbt.setNewTagList("keys", keys)
|
||||||
case Some(value) => nbt.setString("key", value)
|
|
||||||
case _ =>
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------- //
|
// ----------------------------------------------------------------------- //
|
||||||
|
@ -9,15 +9,15 @@ class Server(playerInventory: InventoryPlayer, serverInventory: ServerInventory)
|
|||||||
addSlotToContainer(76, 7 + i * slotSize, api.driver.Slot.Card, 2 - i)
|
addSlotToContainer(76, 7 + i * slotSize, api.driver.Slot.Card, 2 - i)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i <- 0 to 3) {
|
for (i <- 0 to 1 + serverInventory.tier) {
|
||||||
addSlotToContainer(100, 7 + i * slotSize, api.driver.Slot.Processor)
|
addSlotToContainer(100, 7 + i * slotSize, api.driver.Slot.Processor, 2)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i <- 0 to 3) {
|
for (i <- 0 to 1 + serverInventory.tier) {
|
||||||
addSlotToContainer(124, 7 + i * slotSize, api.driver.Slot.Memory, 2)
|
addSlotToContainer(124, 7 + i * slotSize, api.driver.Slot.Memory, 2)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i <- 0 to 3) {
|
for (i <- 0 to 1 + serverInventory.tier) {
|
||||||
addSlotToContainer(148, 7 + i * slotSize, api.driver.Slot.HardDiskDrive, 2)
|
addSlotToContainer(148, 7 + i * slotSize, api.driver.Slot.HardDiskDrive, 2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,11 +3,17 @@ package li.cil.oc.common.inventory
|
|||||||
import li.cil.oc.Settings
|
import li.cil.oc.Settings
|
||||||
import li.cil.oc.api.driver.Slot
|
import li.cil.oc.api.driver.Slot
|
||||||
import li.cil.oc.server.driver.Registry
|
import li.cil.oc.server.driver.Registry
|
||||||
import net.minecraft.item.ItemStack
|
|
||||||
import net.minecraft.entity.player.EntityPlayer
|
import net.minecraft.entity.player.EntityPlayer
|
||||||
|
import net.minecraft.item.ItemStack
|
||||||
|
|
||||||
trait ServerInventory extends ItemStackInventory {
|
trait ServerInventory extends ItemStackInventory {
|
||||||
override def getSizeInventory = 14
|
def tier: Int
|
||||||
|
|
||||||
|
override def getSizeInventory = tier match {
|
||||||
|
case 1 => 11
|
||||||
|
case 2 => 14
|
||||||
|
case _ => 8
|
||||||
|
}
|
||||||
|
|
||||||
override def getInventoryName = Settings.namespace + "container.Server"
|
override def getInventoryName = Settings.namespace + "container.Server"
|
||||||
|
|
||||||
@ -15,8 +21,17 @@ trait ServerInventory extends ItemStackInventory {
|
|||||||
|
|
||||||
override def isUseableByPlayer(player: EntityPlayer) = false
|
override def isUseableByPlayer(player: EntityPlayer) = false
|
||||||
|
|
||||||
override def isItemValidForSlot(slot: Int, stack: ItemStack) =
|
override def isItemValidForSlot(slot: Int, stack: ItemStack) = tier match {
|
||||||
(slot, Registry.itemDriverFor(stack)) match {
|
case 1 => (slot, Registry.itemDriverFor(stack)) match {
|
||||||
|
case (_, None) => false // Invalid item.
|
||||||
|
case (0, Some(driver)) => driver.slot(stack) == Slot.Card && driver.tier(stack) <= 2
|
||||||
|
case (1, Some(driver)) => driver.slot(stack) == Slot.Card && driver.tier(stack) <= 1
|
||||||
|
case (2 | 3 | 4, Some(driver)) => driver.slot(stack) == Slot.Processor && driver.tier(stack) <= 2
|
||||||
|
case (5 | 6 | 7, Some(driver)) => driver.slot(stack) == Slot.Memory && driver.tier(stack) <= 2
|
||||||
|
case (8 | 9 | 10, Some(driver)) => driver.slot(stack) == Slot.HardDiskDrive && driver.tier(stack) <= 2
|
||||||
|
case _ => false // Invalid slot.
|
||||||
|
}
|
||||||
|
case 2 => (slot, Registry.itemDriverFor(stack)) match {
|
||||||
case (_, None) => false // Invalid item.
|
case (_, None) => false // Invalid item.
|
||||||
case (0, Some(driver)) => driver.slot(stack) == Slot.Card && driver.tier(stack) <= 2
|
case (0, Some(driver)) => driver.slot(stack) == Slot.Card && driver.tier(stack) <= 2
|
||||||
case (1, Some(driver)) => driver.slot(stack) == Slot.Card && driver.tier(stack) <= 1
|
case (1, Some(driver)) => driver.slot(stack) == Slot.Card && driver.tier(stack) <= 1
|
||||||
@ -25,4 +40,14 @@ trait ServerInventory extends ItemStackInventory {
|
|||||||
case (10 | 11 | 12 | 13, Some(driver)) => driver.slot(stack) == Slot.HardDiskDrive && driver.tier(stack) <= 2
|
case (10 | 11 | 12 | 13, Some(driver)) => driver.slot(stack) == Slot.HardDiskDrive && driver.tier(stack) <= 2
|
||||||
case _ => false // Invalid slot.
|
case _ => false // Invalid slot.
|
||||||
}
|
}
|
||||||
|
case _ => (slot, Registry.itemDriverFor(stack)) match {
|
||||||
|
case (_, None) => false // Invalid item.
|
||||||
|
case (0, Some(driver)) => driver.slot(stack) == Slot.Card && driver.tier(stack) <= 2
|
||||||
|
case (1, Some(driver)) => driver.slot(stack) == Slot.Card && driver.tier(stack) <= 1
|
||||||
|
case (2 | 3, Some(driver)) => driver.slot(stack) == Slot.Processor && driver.tier(stack) <= 2
|
||||||
|
case (4 | 5, Some(driver)) => driver.slot(stack) == Slot.Memory && driver.tier(stack) <= 2
|
||||||
|
case (6 | 7, Some(driver)) => driver.slot(stack) == Slot.HardDiskDrive && driver.tier(stack) <= 2
|
||||||
|
case _ => false // Invalid slot.
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,4 +25,3 @@ class CPU(val parent: Delegator, val tier: Int) extends Delegate {
|
|||||||
icon = iconRegister.registerIcon(Settings.resourceDomain + ":cpu" + tier)
|
icon = iconRegister.registerIcon(Settings.resourceDomain + ":cpu" + tier)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,21 +7,26 @@ import li.cil.oc.util.Tooltip
|
|||||||
import li.cil.oc.{Settings, OpenComputers}
|
import li.cil.oc.{Settings, OpenComputers}
|
||||||
import net.minecraft.client.renderer.texture.IIconRegister
|
import net.minecraft.client.renderer.texture.IIconRegister
|
||||||
import net.minecraft.entity.player.EntityPlayer
|
import net.minecraft.entity.player.EntityPlayer
|
||||||
import net.minecraft.item.ItemStack
|
import net.minecraft.item.{EnumRarity, ItemStack}
|
||||||
import net.minecraft.world.World
|
import net.minecraft.world.World
|
||||||
import scala.collection.mutable
|
import scala.collection.mutable
|
||||||
|
|
||||||
class Server(val parent: Delegator) extends Delegate {
|
class Server(val parent: Delegator, val tier: Int) extends Delegate {
|
||||||
val unlocalizedName = "Server"
|
val baseName = "Server"
|
||||||
|
val unlocalizedName = baseName + tier
|
||||||
|
|
||||||
|
override def rarity = Array(EnumRarity.common, EnumRarity.uncommon, EnumRarity.rare).apply(tier max 0 min 2)
|
||||||
|
|
||||||
override def maxStackSize = 1
|
override def maxStackSize = 1
|
||||||
|
|
||||||
private object HelperInventory extends ServerInventory {
|
private object HelperInventory extends ServerInventory {
|
||||||
|
def tier = Server.this.tier
|
||||||
|
|
||||||
var container: ItemStack = null
|
var container: ItemStack = null
|
||||||
}
|
}
|
||||||
|
|
||||||
override def tooltipLines(stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) {
|
override def tooltipLines(stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) {
|
||||||
tooltip.addAll(Tooltip.get(unlocalizedName))
|
tooltip.addAll(Tooltip.get(baseName, Settings.get.terminalsPerTier(tier)))
|
||||||
HelperInventory.container = stack
|
HelperInventory.container = stack
|
||||||
HelperInventory.reinitialize()
|
HelperInventory.reinitialize()
|
||||||
val items = mutable.Map.empty[String, Int]
|
val items = mutable.Map.empty[String, Int]
|
||||||
@ -41,7 +46,7 @@ class Server(val parent: Delegator) extends Delegate {
|
|||||||
override def registerIcons(iconRegister: IIconRegister) {
|
override def registerIcons(iconRegister: IIconRegister) {
|
||||||
super.registerIcons(iconRegister)
|
super.registerIcons(iconRegister)
|
||||||
|
|
||||||
icon = iconRegister.registerIcon(Settings.resourceDomain + ":server")
|
icon = iconRegister.registerIcon(Settings.resourceDomain + ":server" + tier)
|
||||||
}
|
}
|
||||||
|
|
||||||
override def onItemRightClick(stack: ItemStack, world: World, player: EntityPlayer) = {
|
override def onItemRightClick(stack: ItemStack, world: World, player: EntityPlayer) = {
|
||||||
|
@ -58,11 +58,16 @@ class Terminal(val parent: Delegator) extends Delegate {
|
|||||||
if (!world.isRemote) {
|
if (!world.isRemote) {
|
||||||
rack.servers(slot) match {
|
rack.servers(slot) match {
|
||||||
case Some(server) =>
|
case Some(server) =>
|
||||||
|
val key = UUID.randomUUID().toString
|
||||||
|
val keys = rack.terminals(slot).keys
|
||||||
if (!stack.hasTagCompound) {
|
if (!stack.hasTagCompound) {
|
||||||
stack.setTagCompound(new NBTTagCompound())
|
stack.setTagCompound(new NBTTagCompound())
|
||||||
}
|
}
|
||||||
val key = UUID.randomUUID().toString
|
else {
|
||||||
rack.terminals(slot).key = Some(key)
|
keys -= stack.getTagCompound.getString(Settings.namespace + "key")
|
||||||
|
}
|
||||||
|
keys.remove(0, math.max(0, 1 + keys.length - Settings.get.terminalsPerTier(server.tier)))
|
||||||
|
keys += key
|
||||||
ServerPacketSender.sendServerState(rack, slot)
|
ServerPacketSender.sendServerState(rack, slot)
|
||||||
stack.getTagCompound.setString(Settings.namespace + "key", key)
|
stack.getTagCompound.setString(Settings.namespace + "key", key)
|
||||||
stack.getTagCompound.setString(Settings.namespace + "server", server.machine.node.address)
|
stack.getTagCompound.setString(Settings.namespace + "server", server.machine.node.address)
|
||||||
|
@ -18,7 +18,7 @@ import stargatetech2.api.bus.IBusDevice
|
|||||||
|
|
||||||
// See AbstractBusAware as to why we have to define the IBusDevice here.
|
// See AbstractBusAware as to why we have to define the IBusDevice here.
|
||||||
@Optional.Interface(iface = "stargatetech2.api.bus.IBusDevice", modid = "StargateTech2")
|
@Optional.Interface(iface = "stargatetech2.api.bus.IBusDevice", modid = "StargateTech2")
|
||||||
abstract class Computer(isRemote: Boolean) extends Environment with ComponentInventory with Rotatable with BundledRedstoneAware with AbstractBusAware with IBusDevice with Analyzable with Context with Machine.Owner {
|
abstract class Computer(isRemote: Boolean) extends Environment with ComponentInventory with Rotatable with BundledRedstoneAware with AbstractBusAware with IBusDevice with Analyzable with Machine.Owner {
|
||||||
protected val _computer = if (isRemote) null else new Machine(this)
|
protected val _computer = if (isRemote) null else new Machine(this)
|
||||||
|
|
||||||
def computer = _computer
|
def computer = _computer
|
||||||
|
@ -2,6 +2,7 @@ package li.cil.oc.common.tileentity
|
|||||||
|
|
||||||
import com.google.common.base.Strings
|
import com.google.common.base.Strings
|
||||||
import cpw.mods.fml.common.Optional
|
import cpw.mods.fml.common.Optional
|
||||||
|
import cpw.mods.fml.common.Optional.Method
|
||||||
import cpw.mods.fml.relauncher.{Side, SideOnly}
|
import cpw.mods.fml.relauncher.{Side, SideOnly}
|
||||||
import li.cil.oc.api.Network
|
import li.cil.oc.api.Network
|
||||||
import li.cil.oc.api.network.{Connector, Visibility, Node, Analyzable}
|
import li.cil.oc.api.network.{Connector, Visibility, Node, Analyzable}
|
||||||
@ -41,6 +42,12 @@ class Rack extends Hub with PowerBalancer with Inventory with Rotatable with Bun
|
|||||||
|
|
||||||
override def canConnect(side: ForgeDirection) = side != facing
|
override def canConnect(side: ForgeDirection) = side != facing
|
||||||
|
|
||||||
|
@Method(modid = "StargateTech2")
|
||||||
|
override def getInterfaces(side: Int) = if (side != facing.ordinal) {
|
||||||
|
super.getInterfaces(side)
|
||||||
|
}
|
||||||
|
else null
|
||||||
|
|
||||||
// ----------------------------------------------------------------------- //
|
// ----------------------------------------------------------------------- //
|
||||||
|
|
||||||
def isRunning(number: Int) =
|
def isRunning(number: Int) =
|
||||||
@ -100,7 +107,11 @@ class Rack extends Hub with PowerBalancer with Inventory with Rotatable with Bun
|
|||||||
|
|
||||||
override def getInventoryStackLimit = 1
|
override def getInventoryStackLimit = 1
|
||||||
|
|
||||||
override def isItemValidForSlot(i: Int, stack: ItemStack) = Items.server.createItemStack().isItemEqual(stack)
|
override def isItemValidForSlot(i: Int, stack: ItemStack) =
|
||||||
|
Items.multi.subItem(stack) match {
|
||||||
|
case Some(subItem) => subItem == Items.server1 || subItem == Items.server2 || subItem == Items.server3
|
||||||
|
case _ => false
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------- //
|
// ----------------------------------------------------------------------- //
|
||||||
|
|
||||||
|
@ -317,7 +317,11 @@ object PacketSender {
|
|||||||
pb.writeInt(number)
|
pb.writeInt(number)
|
||||||
pb.writeBoolean(t.isRunning(number))
|
pb.writeBoolean(t.isRunning(number))
|
||||||
pb.writeDirection(t.sides(number))
|
pb.writeDirection(t.sides(number))
|
||||||
pb.writeUTF(t.terminals(number).key.getOrElse(""))
|
val keys = t.terminals(number).keys
|
||||||
|
pb.writeInt(keys.length)
|
||||||
|
for (key <- keys) {
|
||||||
|
pb.writeUTF(key)
|
||||||
|
}
|
||||||
|
|
||||||
player match {
|
player match {
|
||||||
case Some(p) => pb.sendToPlayer(p)
|
case Some(p) => pb.sendToPlayer(p)
|
||||||
|
@ -2,19 +2,19 @@ package li.cil.oc.server.component
|
|||||||
|
|
||||||
import li.cil.oc.Settings
|
import li.cil.oc.Settings
|
||||||
import li.cil.oc.api.Network
|
import li.cil.oc.api.Network
|
||||||
import li.cil.oc.api.network.{Arguments, Context, Callback, Visibility}
|
import li.cil.oc.api.network._
|
||||||
import net.minecraft.nbt.NBTTagCompound
|
import net.minecraft.nbt.NBTTagCompound
|
||||||
import scala.collection.convert.WrapAsScala._
|
import scala.collection.convert.WrapAsScala._
|
||||||
import stargatetech2.api.StargateTechAPI
|
import stargatetech2.api.StargateTechAPI
|
||||||
import stargatetech2.api.bus._
|
import stargatetech2.api.bus._
|
||||||
|
|
||||||
class AbstractBus(val owner: Context with IBusDevice) extends ManagedComponent with IBusDriver {
|
class AbstractBus(val device: IBusDevice) extends ManagedComponent with IBusDriver {
|
||||||
val node = Network.newNode(this, Visibility.Neighbors).
|
val node = Network.newNode(this, Visibility.Neighbors).
|
||||||
withComponent("abstract_bus").
|
withComponent("abstract_bus").
|
||||||
withConnector().
|
withConnector().
|
||||||
create()
|
create()
|
||||||
|
|
||||||
val busInterface: IBusInterface = StargateTechAPI.api.getFactory.getIBusInterface(owner, this)
|
val busInterface: IBusInterface = StargateTechAPI.api.getFactory.getIBusInterface(device, this)
|
||||||
|
|
||||||
protected var isEnabled = true
|
protected var isEnabled = true
|
||||||
|
|
||||||
@ -22,6 +22,8 @@ class AbstractBus(val owner: Context with IBusDevice) extends ManagedComponent w
|
|||||||
|
|
||||||
protected var sendQueue: Option[QueuedPacket] = None
|
protected var sendQueue: Option[QueuedPacket] = None
|
||||||
|
|
||||||
|
protected var owner: Option[Context] = None
|
||||||
|
|
||||||
// ----------------------------------------------------------------------- //
|
// ----------------------------------------------------------------------- //
|
||||||
|
|
||||||
override def canHandlePacket(sender: Short, protocolID: Int, hasLIP: Boolean) = hasLIP
|
override def canHandlePacket(sender: Short, protocolID: Int, hasLIP: Boolean) = hasLIP
|
||||||
@ -30,7 +32,7 @@ class AbstractBus(val owner: Context with IBusDevice) extends ManagedComponent w
|
|||||||
val lip = packet.getPlainText
|
val lip = packet.getPlainText
|
||||||
val data = Map(lip.getEntryList.map(key => (key, lip.get(key))): _*)
|
val data = Map(lip.getEntryList.map(key => (key, lip.get(key))): _*)
|
||||||
val metadata = Map("mod" -> lip.getMetadata.modID, "device" -> lip.getMetadata.deviceName, "player" -> lip.getMetadata.playerName)
|
val metadata = Map("mod" -> lip.getMetadata.modID, "device" -> lip.getMetadata.deviceName, "player" -> lip.getMetadata.playerName)
|
||||||
owner.signal("bus_message", Int.box(packet.getProtocolID), Int.box(packet.getSender), Int.box(packet.getTarget), data, metadata)
|
owner.foreach(_.signal("bus_message", Int.box(packet.getProtocolID), Int.box(packet.getSender), Int.box(packet.getTarget), data, metadata))
|
||||||
}
|
}
|
||||||
|
|
||||||
override def getNextPacketToSend = if (sendQueue.isDefined) {
|
override def getNextPacketToSend = if (sendQueue.isDefined) {
|
||||||
@ -87,6 +89,20 @@ class AbstractBus(val owner: Context with IBusDevice) extends ManagedComponent w
|
|||||||
|
|
||||||
// ----------------------------------------------------------------------- //
|
// ----------------------------------------------------------------------- //
|
||||||
|
|
||||||
|
override def onConnect(node: Node) {
|
||||||
|
super.onConnect(node)
|
||||||
|
if (owner.isEmpty && node.host.isInstanceOf[Context]) {
|
||||||
|
owner = Some(node.host.asInstanceOf[Context])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override def onDisconnect(node: Node) {
|
||||||
|
super.onDisconnect(node)
|
||||||
|
if (owner.isDefined && node.host.isInstanceOf[Context] && (node.host.asInstanceOf[Context] == owner.get)) {
|
||||||
|
owner = None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override def load(nbt: NBTTagCompound) {
|
override def load(nbt: NBTTagCompound) {
|
||||||
super.load(nbt)
|
super.load(nbt)
|
||||||
busInterface.readFromNBT(nbt, "bus")
|
busInterface.readFromNBT(nbt, "bus")
|
||||||
|
@ -8,16 +8,16 @@ import java.util.regex.Matcher
|
|||||||
import li.cil.oc.api
|
import li.cil.oc.api
|
||||||
import li.cil.oc.api.Network
|
import li.cil.oc.api.Network
|
||||||
import li.cil.oc.api.network._
|
import li.cil.oc.api.network._
|
||||||
|
import li.cil.oc.util.ExtendedNBT._
|
||||||
import li.cil.oc.util.ThreadPoolFactory
|
import li.cil.oc.util.ThreadPoolFactory
|
||||||
import li.cil.oc.{OpenComputers, Settings}
|
import li.cil.oc.{OpenComputers, Settings}
|
||||||
import li.cil.oc.util.ExtendedNBT._
|
|
||||||
import net.minecraft.nbt.NBTTagCompound
|
import net.minecraft.nbt.NBTTagCompound
|
||||||
import net.minecraft.server.MinecraftServer
|
import net.minecraft.server.MinecraftServer
|
||||||
import scala.Array
|
import scala.Array
|
||||||
import scala.collection.mutable
|
|
||||||
import scala.collection.convert.WrapAsScala._
|
import scala.collection.convert.WrapAsScala._
|
||||||
|
import scala.collection.mutable
|
||||||
|
|
||||||
class InternetCard(val owner: Context) extends ManagedComponent {
|
class InternetCard extends ManagedComponent {
|
||||||
val node = Network.newNode(this, Visibility.Network).
|
val node = Network.newNode(this, Visibility.Network).
|
||||||
withComponent("internet", Visibility.Neighbors).
|
withComponent("internet", Visibility.Neighbors).
|
||||||
create()
|
create()
|
||||||
@ -25,6 +25,8 @@ class InternetCard(val owner: Context) extends ManagedComponent {
|
|||||||
val romInternet = Option(api.FileSystem.asManagedEnvironment(api.FileSystem.
|
val romInternet = Option(api.FileSystem.asManagedEnvironment(api.FileSystem.
|
||||||
fromClass(OpenComputers.getClass, Settings.resourceDomain, "lua/component/internet"), "internet"))
|
fromClass(OpenComputers.getClass, Settings.resourceDomain, "lua/component/internet"), "internet"))
|
||||||
|
|
||||||
|
protected var owner: Option[Context] = None
|
||||||
|
|
||||||
protected val connections = mutable.Map.empty[Int, SocketChannel]
|
protected val connections = mutable.Map.empty[Int, SocketChannel]
|
||||||
|
|
||||||
// For HTTP requests the state switches like so:
|
// For HTTP requests the state switches like so:
|
||||||
@ -49,7 +51,7 @@ class InternetCard(val owner: Context) extends ManagedComponent {
|
|||||||
|
|
||||||
@Callback
|
@Callback
|
||||||
def request(context: Context, args: Arguments): Array[AnyRef] = {
|
def request(context: Context, args: Arguments): Array[AnyRef] = {
|
||||||
if (context.node.address != owner.node.address) {
|
if (owner.isEmpty || context.node.address != owner.get.node.address) {
|
||||||
throw new IllegalArgumentException("can only be used by the owning computer")
|
throw new IllegalArgumentException("can only be used by the owning computer")
|
||||||
}
|
}
|
||||||
val address = args.checkString(0)
|
val address = args.checkString(0)
|
||||||
@ -105,16 +107,16 @@ class InternetCard(val owner: Context) extends ManagedComponent {
|
|||||||
finally {
|
finally {
|
||||||
http.disconnect()
|
http.disconnect()
|
||||||
}
|
}
|
||||||
case other => owner.signal("http_response", address, Unit, "connection failed")
|
case other => owner.foreach(_.signal("http_response", address, Unit, "connection failed"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch {
|
catch {
|
||||||
case e: FileNotFoundException =>
|
case e: FileNotFoundException =>
|
||||||
owner.signal("http_response", address, Unit, "not found: " + Option(e.getMessage).getOrElse(e.toString))
|
owner.foreach(_.signal("http_response", address, Unit, "not found: " + Option(e.getMessage).getOrElse(e.toString)))
|
||||||
case _: SocketTimeoutException =>
|
case _: SocketTimeoutException =>
|
||||||
owner.signal("http_response", address, Unit, "timeout")
|
owner.foreach(_.signal("http_response", address, Unit, "timeout"))
|
||||||
case e: Throwable =>
|
case e: Throwable =>
|
||||||
owner.signal("http_response", address, Unit, Option(e.getMessage).getOrElse(e.toString))
|
owner.foreach(_.signal("http_response", address, Unit, Option(e.getMessage).getOrElse(e.toString)))
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
InternetCard.this.synchronized {
|
InternetCard.this.synchronized {
|
||||||
@ -200,7 +202,7 @@ class InternetCard(val owner: Context) extends ManagedComponent {
|
|||||||
this.synchronized {
|
this.synchronized {
|
||||||
if (request.isEmpty && queue.isDefined) {
|
if (request.isEmpty && queue.isDefined) {
|
||||||
val (address, packets) = queue.get
|
val (address, packets) = queue.get
|
||||||
if (owner.signal("http_response", address, packets.front)) {
|
if (owner.fold(true)(_.signal("http_response", address, packets.front))) {
|
||||||
packets.dequeue()
|
packets.dequeue()
|
||||||
}
|
}
|
||||||
if (packets.isEmpty) {
|
if (packets.isEmpty) {
|
||||||
@ -214,6 +216,9 @@ class InternetCard(val owner: Context) extends ManagedComponent {
|
|||||||
|
|
||||||
override def onConnect(node: Node) {
|
override def onConnect(node: Node) {
|
||||||
super.onConnect(node)
|
super.onConnect(node)
|
||||||
|
if (owner.isEmpty && node.host.isInstanceOf[Context]) {
|
||||||
|
owner = Some(node.host.asInstanceOf[Context])
|
||||||
|
}
|
||||||
if (node == this.node) {
|
if (node == this.node) {
|
||||||
romInternet.foreach(rom => node.neighbors.head.connect(rom.node))
|
romInternet.foreach(rom => node.neighbors.head.connect(rom.node))
|
||||||
}
|
}
|
||||||
@ -221,6 +226,9 @@ class InternetCard(val owner: Context) extends ManagedComponent {
|
|||||||
|
|
||||||
override def onDisconnect(node: Node) {
|
override def onDisconnect(node: Node) {
|
||||||
super.onDisconnect(node)
|
super.onDisconnect(node)
|
||||||
|
if (owner.isDefined && node.host.isInstanceOf[Context] && (node.host.asInstanceOf[Context] == owner.get)) {
|
||||||
|
owner = None
|
||||||
|
}
|
||||||
if (node == this.node) {
|
if (node == this.node) {
|
||||||
for ((_, socket) <- connections) {
|
for ((_, socket) <- connections) {
|
||||||
socket.close()
|
socket.close()
|
||||||
@ -235,7 +243,7 @@ class InternetCard(val owner: Context) extends ManagedComponent {
|
|||||||
override def onMessage(message: Message) {
|
override def onMessage(message: Message) {
|
||||||
super.onMessage(message)
|
super.onMessage(message)
|
||||||
message.data match {
|
message.data match {
|
||||||
case Array() if (message.name == "computer.stopped" || message.name == "computer.started") && message.source.address == owner.node.address =>
|
case Array() if (message.name == "computer.stopped" || message.name == "computer.started") && owner.isDefined && message.source.address == owner.get.node.address =>
|
||||||
connections.values.foreach(_.close())
|
connections.values.foreach(_.close())
|
||||||
connections.clear()
|
connections.clear()
|
||||||
InternetCard.this.synchronized {
|
InternetCard.this.synchronized {
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
package li.cil.oc.server.component
|
package li.cil.oc.server.component
|
||||||
|
|
||||||
|
import li.cil.oc.Items
|
||||||
import li.cil.oc.api.driver
|
import li.cil.oc.api.driver
|
||||||
import li.cil.oc.api.network.{Message, Node}
|
import li.cil.oc.api.network.{Message, Node}
|
||||||
import li.cil.oc.common.inventory.ComponentInventory
|
import li.cil.oc.common.inventory.ComponentInventory
|
||||||
import li.cil.oc.common.inventory.ServerInventory
|
import li.cil.oc.common.inventory.ServerInventory
|
||||||
|
import li.cil.oc.common.item
|
||||||
import li.cil.oc.common.tileentity
|
import li.cil.oc.common.tileentity
|
||||||
import li.cil.oc.server.component.machine.Machine
|
import li.cil.oc.server.component.machine.Machine
|
||||||
import li.cil.oc.server.driver.Registry
|
import li.cil.oc.server.driver.Registry
|
||||||
@ -16,6 +18,31 @@ class Server(val rack: tileentity.Rack, val number: Int) extends Machine.Owner {
|
|||||||
|
|
||||||
val inventory = new NetworkedInventory()
|
val inventory = new NetworkedInventory()
|
||||||
|
|
||||||
|
def tier = Items.multi.subItem(rack.getStackInSlot(number)) match {
|
||||||
|
case Some(server: item.Server) => server.tier
|
||||||
|
case _ => 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------- //
|
||||||
|
|
||||||
|
override def address() = machine.node.address
|
||||||
|
|
||||||
|
override def node() = machine.node
|
||||||
|
|
||||||
|
override def start() = machine.start()
|
||||||
|
|
||||||
|
override def stop() = machine.stop()
|
||||||
|
|
||||||
|
override def pause(seconds: Double) = machine.pause(seconds)
|
||||||
|
|
||||||
|
override def isPaused = machine.isPaused
|
||||||
|
|
||||||
|
override def isRunning = machine.isRunning
|
||||||
|
|
||||||
|
override def signal(name: String, args: AnyRef*) = machine.signal(name, args: _*)
|
||||||
|
|
||||||
|
override def canInteract(player: String) = machine.canInteract(player)
|
||||||
|
|
||||||
// ----------------------------------------------------------------------- //
|
// ----------------------------------------------------------------------- //
|
||||||
|
|
||||||
override def installedMemory = inventory.items.foldLeft(0)((sum, stack) => sum + (stack match {
|
override def installedMemory = inventory.items.foldLeft(0)((sum, stack) => sum + (stack match {
|
||||||
@ -70,6 +97,8 @@ class Server(val rack: tileentity.Rack, val number: Int) extends Machine.Owner {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override def tier = Server.this.tier
|
||||||
|
|
||||||
var containerOverride: ItemStack = _
|
var containerOverride: ItemStack = _
|
||||||
|
|
||||||
override def container = if (containerOverride != null) containerOverride else rack.getStackInSlot(number)
|
override def container = if (containerOverride != null) containerOverride else rack.getStackInSlot(number)
|
||||||
|
@ -7,10 +7,9 @@ import li.cil.oc.util.ExtendedNBT._
|
|||||||
import net.minecraft.entity.item.EntityItem
|
import net.minecraft.entity.item.EntityItem
|
||||||
import net.minecraft.item.ItemStack
|
import net.minecraft.item.ItemStack
|
||||||
import net.minecraft.nbt.NBTTagCompound
|
import net.minecraft.nbt.NBTTagCompound
|
||||||
import net.minecraft.tileentity.{TileEntity => MCTileEntity, TileEntityFurnace}
|
import net.minecraft.tileentity.{TileEntity, TileEntityFurnace}
|
||||||
import scala.Some
|
|
||||||
|
|
||||||
class UpgradeGenerator(val owner: MCTileEntity) extends ManagedComponent {
|
class UpgradeGenerator(val owner: TileEntity) extends ManagedComponent {
|
||||||
val node = Network.newNode(this, Visibility.Network).
|
val node = Network.newNode(this, Visibility.Network).
|
||||||
withComponent("generator", Visibility.Neighbors).
|
withComponent("generator", Visibility.Neighbors).
|
||||||
withConnector().
|
withConnector().
|
||||||
|
@ -485,10 +485,11 @@ class Machine(val owner: Machine.Owner) extends ManagedComponent with Context wi
|
|||||||
val invalid = mutable.Set.empty[String]
|
val invalid = mutable.Set.empty[String]
|
||||||
for ((address, name) <- components) {
|
for ((address, name) <- components) {
|
||||||
if (node.network.node(address) == null) {
|
if (node.network.node(address) == null) {
|
||||||
OpenComputers.log.fine("A component of type '%s' disappeared! This usually means that it didn't save its node.".format(name))
|
|
||||||
if (name == "filesystem") {
|
if (name == "filesystem") {
|
||||||
OpenComputers.log.fine("If this was a file system provided by a ComputerCraft peripheral, this is normal.");
|
OpenComputers.log.fine("A component of type '%s' disappeared! This usually means that it didn't save its node.".format(name))
|
||||||
|
OpenComputers.log.fine("If this was a file system provided by a ComputerCraft peripheral, this is normal.")
|
||||||
}
|
}
|
||||||
|
else OpenComputers.log.warning("A component of type '%s' disappeared! This usually means that it didn't save its node.".format(name))
|
||||||
signal("component_removed", address, name)
|
signal("component_removed", address, name)
|
||||||
invalid += address
|
invalid += address
|
||||||
}
|
}
|
||||||
@ -800,7 +801,7 @@ object Machine {
|
|||||||
|
|
||||||
private val threadPool = ThreadPoolFactory.create("Computer", Settings.get.threads)
|
private val threadPool = ThreadPoolFactory.create("Computer", Settings.get.threads)
|
||||||
|
|
||||||
trait Owner {
|
trait Owner extends Context {
|
||||||
def installedMemory: Int
|
def installedMemory: Int
|
||||||
|
|
||||||
def maxComponents: Int
|
def maxComponents: Int
|
||||||
|
@ -2,19 +2,20 @@ package li.cil.oc.server.driver.item
|
|||||||
|
|
||||||
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.common.tileentity
|
|
||||||
import li.cil.oc.server.component
|
import li.cil.oc.server.component
|
||||||
import li.cil.oc.util.mods.StargateTech2
|
import li.cil.oc.util.mods.StargateTech2
|
||||||
import net.minecraft.item.ItemStack
|
import net.minecraft.item.ItemStack
|
||||||
import net.minecraft.tileentity.{TileEntity => MCTileEntity}
|
import net.minecraft.tileentity.{TileEntity => MCTileEntity}
|
||||||
|
import stargatetech2.api.bus.IBusDevice
|
||||||
|
|
||||||
object AbstractBusCard extends Item {
|
object AbstractBusCard extends Item {
|
||||||
override def worksWith(stack: ItemStack) = isOneOf(stack, Items.abstractBus)
|
override def worksWith(stack: ItemStack) = isOneOf(stack, Items.abstractBus)
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, container: MCTileEntity) = container match {
|
override def createEnvironment(stack: ItemStack, container: MCTileEntity) = if (StargateTech2.isAvailable) container match {
|
||||||
case computer: tileentity.Computer if StargateTech2.isAvailable => new component.AbstractBus(computer)
|
case device: IBusDevice => new component.AbstractBus(device)
|
||||||
case _ => null
|
case _ => null
|
||||||
}
|
}
|
||||||
|
else null
|
||||||
|
|
||||||
override def slot(stack: ItemStack) = Slot.Card
|
override def slot(stack: ItemStack) = Slot.Card
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@ import li.cil.oc
|
|||||||
import li.cil.oc.api.driver.Slot
|
import li.cil.oc.api.driver.Slot
|
||||||
import li.cil.oc.api.fs.Label
|
import li.cil.oc.api.fs.Label
|
||||||
import li.cil.oc.common.item.{FloppyDisk, HardDiskDrive}
|
import li.cil.oc.common.item.{FloppyDisk, HardDiskDrive}
|
||||||
import li.cil.oc.common.tileentity.TileEntity
|
|
||||||
import li.cil.oc.util.mods.ComputerCraft
|
import li.cil.oc.util.mods.ComputerCraft
|
||||||
import li.cil.oc.{Settings, Items}
|
import li.cil.oc.{Settings, Items}
|
||||||
import net.minecraft.item.ItemStack
|
import net.minecraft.item.ItemStack
|
||||||
@ -16,17 +15,13 @@ object FileSystem extends Item {
|
|||||||
override def worksWith(stack: ItemStack) = isOneOf(stack, Items.hdd1, Items.hdd2, Items.hdd3, Items.floppyDisk) || ComputerCraft.isDisk(stack)
|
override def worksWith(stack: ItemStack) = isOneOf(stack, Items.hdd1, Items.hdd2, Items.hdd3, Items.floppyDisk) || ComputerCraft.isDisk(stack)
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, container: MCTileEntity) =
|
override def createEnvironment(stack: ItemStack, container: MCTileEntity) =
|
||||||
if (ComputerCraft.isDisk(stack)) {
|
if (ComputerCraft.isDisk(stack) && container != null) {
|
||||||
container match {
|
val address = addressFromTag(dataTag(stack))
|
||||||
case tileEntity: TileEntity =>
|
val mount = ComputerCraft.createDiskMount(stack, container.getWorldObj)
|
||||||
val address = addressFromTag(dataTag(stack))
|
Option(oc.api.FileSystem.asManagedEnvironment(mount, new ComputerCraftLabel(stack))) match {
|
||||||
val mount = ComputerCraft.createDiskMount(stack, tileEntity.world)
|
case Some(environment) =>
|
||||||
Option(oc.api.FileSystem.asManagedEnvironment(mount, new ComputerCraftLabel(stack))) match {
|
environment.node.asInstanceOf[oc.server.network.Node].address = address
|
||||||
case Some(environment) =>
|
environment
|
||||||
environment.node.asInstanceOf[oc.server.network.Node].address = address
|
|
||||||
environment
|
|
||||||
case _ => null
|
|
||||||
}
|
|
||||||
case _ => null
|
case _ => null
|
||||||
}
|
}
|
||||||
} else Items.multi.subItem(stack) match {
|
} else Items.multi.subItem(stack) match {
|
||||||
|
@ -2,18 +2,14 @@ package li.cil.oc.server.driver.item
|
|||||||
|
|
||||||
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.Context
|
|
||||||
import li.cil.oc.server.component
|
import li.cil.oc.server.component
|
||||||
import net.minecraft.item.ItemStack
|
import net.minecraft.item.ItemStack
|
||||||
import net.minecraft.tileentity.{TileEntity => MCTileEntity}
|
import net.minecraft.tileentity.TileEntity
|
||||||
|
|
||||||
object InternetCard extends Item {
|
object InternetCard extends Item {
|
||||||
override def worksWith(stack: ItemStack) = isOneOf(stack, Items.internet)
|
override def worksWith(stack: ItemStack) = isOneOf(stack, Items.internet)
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, container: MCTileEntity) = container match {
|
override def createEnvironment(stack: ItemStack, container: TileEntity) = new component.InternetCard()
|
||||||
case context: Context => new component.InternetCard(context)
|
|
||||||
case _ => null
|
|
||||||
}
|
|
||||||
|
|
||||||
override def slot(stack: ItemStack) = Slot.Card
|
override def slot(stack: ItemStack) = Slot.Card
|
||||||
|
|
||||||
|
@ -13,8 +13,8 @@ trait Item extends driver.Item {
|
|||||||
|
|
||||||
protected def isOneOf(stack: ItemStack, items: common.item.Delegate*) =
|
protected def isOneOf(stack: ItemStack, items: common.item.Delegate*) =
|
||||||
Items.multi.subItem(stack) match {
|
Items.multi.subItem(stack) match {
|
||||||
case None => false
|
|
||||||
case Some(subItem) => items.contains(subItem)
|
case Some(subItem) => items.contains(subItem)
|
||||||
|
case _ => false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,12 +4,12 @@ import li.cil.oc.Items
|
|||||||
import li.cil.oc.api.driver.Slot
|
import li.cil.oc.api.driver.Slot
|
||||||
import li.cil.oc.server.component
|
import li.cil.oc.server.component
|
||||||
import net.minecraft.item.ItemStack
|
import net.minecraft.item.ItemStack
|
||||||
import net.minecraft.tileentity.{TileEntity => MCTileEntity}
|
import net.minecraft.tileentity.TileEntity
|
||||||
|
|
||||||
object UpgradeGenerator extends Item {
|
object UpgradeGenerator extends Item {
|
||||||
override def worksWith(stack: ItemStack) = isOneOf(stack, Items.upgradeGenerator)
|
override def worksWith(stack: ItemStack) = isOneOf(stack, Items.upgradeGenerator)
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, container: MCTileEntity) = new component.UpgradeGenerator(container)
|
override def createEnvironment(stack: ItemStack, container: TileEntity) = new component.UpgradeGenerator(container)
|
||||||
|
|
||||||
override def slot(stack: ItemStack) = Slot.Upgrade
|
override def slot(stack: ItemStack) = Slot.Upgrade
|
||||||
}
|
}
|
||||||
|
@ -5,12 +5,12 @@ import li.cil.oc.server.component
|
|||||||
import li.cil.oc.server.driver.Registry
|
import li.cil.oc.server.driver.Registry
|
||||||
import li.cil.oc.{Settings, Items}
|
import li.cil.oc.{Settings, Items}
|
||||||
import net.minecraft.item.ItemStack
|
import net.minecraft.item.ItemStack
|
||||||
import net.minecraft.tileentity.{TileEntity => MCTileEntity}
|
import net.minecraft.tileentity.TileEntity
|
||||||
|
|
||||||
object UpgradeNavigation extends Item {
|
object UpgradeNavigation extends Item {
|
||||||
override def worksWith(stack: ItemStack) = isOneOf(stack, Items.upgradeNavigation)
|
override def worksWith(stack: ItemStack) = isOneOf(stack, Items.upgradeNavigation)
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, container: MCTileEntity) = {
|
override def createEnvironment(stack: ItemStack, container: TileEntity) = {
|
||||||
val nbt = Registry.itemDriverFor(stack) match {
|
val nbt = Registry.itemDriverFor(stack) match {
|
||||||
case Some(driver) => driver.dataTag(stack)
|
case Some(driver) => driver.dataTag(stack)
|
||||||
case _ => null
|
case _ => null
|
||||||
|
@ -4,12 +4,12 @@ import li.cil.oc.Items
|
|||||||
import li.cil.oc.api.driver.Slot
|
import li.cil.oc.api.driver.Slot
|
||||||
import li.cil.oc.server.component
|
import li.cil.oc.server.component
|
||||||
import net.minecraft.item.ItemStack
|
import net.minecraft.item.ItemStack
|
||||||
import net.minecraft.tileentity.{TileEntity => MCTileEntity}
|
import net.minecraft.tileentity.TileEntity
|
||||||
|
|
||||||
object WirelessNetworkCard extends Item {
|
object WirelessNetworkCard extends Item {
|
||||||
override def worksWith(stack: ItemStack) = isOneOf(stack, Items.wlan)
|
override def worksWith(stack: ItemStack) = isOneOf(stack, Items.wlan)
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, container: MCTileEntity) =
|
override def createEnvironment(stack: ItemStack, container: TileEntity) =
|
||||||
if (container != null) new component.WirelessNetworkCard(container) else null
|
if (container != null) new component.WirelessNetworkCard(container) else null
|
||||||
|
|
||||||
override def slot(stack: ItemStack) = Slot.Card
|
override def slot(stack: ItemStack) = Slot.Card
|
||||||
|
Loading…
x
Reference in New Issue
Block a user