mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-17 19:25:20 -04:00
multiple tiers for servers, with different inventory sizes and costs
This commit is contained in:
parent
b12913b8b7
commit
05fb8f01ba
@ -16,7 +16,7 @@ object Items {
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
// Servers
|
||||
var server: item.Server = _
|
||||
var server1, server2, server3: item.Server = _
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
// Memory
|
||||
@ -125,11 +125,13 @@ object Items {
|
||||
ram5 = new item.Memory(multi, 4)
|
||||
|
||||
// v1.2.0
|
||||
server = new item.Server(multi)
|
||||
server3 = new item.Server(multi, 2)
|
||||
terminal = new item.Terminal(multi)
|
||||
cpu1 = new item.CPU(multi, 1)
|
||||
cpu2 = new item.CPU(multi, 2)
|
||||
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.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) {
|
||||
addRecipe(Items.abstractBus.createItemStack(), recipes, "abstractBusCard")
|
||||
|
@ -165,7 +165,15 @@ class Settings(config: Config) {
|
||||
val maxClipboard = config.getInt("misc.maxClipboard") max 0
|
||||
val maxNetworkPacketSize = config.getInt("misc.maxNetworkPacketSize") 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 {
|
||||
|
@ -25,7 +25,9 @@ object GuiHandler extends CommonGuiHandler {
|
||||
case _ => Items.multi.subItem(player.getCurrentEquippedItem) match {
|
||||
case Some(server: item.Server) if id == GuiType.Server.id =>
|
||||
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
|
||||
})
|
||||
|
@ -20,6 +20,8 @@ abstract class GuiHandler extends IGuiHandler {
|
||||
case _ => Items.multi.subItem(player.getCurrentEquippedItem) match {
|
||||
case Some(server: item.Server) if id == GuiType.Server.id =>
|
||||
new container.Server(player.inventory, new ServerInventory {
|
||||
override def tier = server.tier
|
||||
|
||||
override def container = player.getCurrentEquippedItem
|
||||
|
||||
override def isUseableByPlayer(player: EntityPlayer) = player == player
|
||||
|
@ -9,15 +9,15 @@ class Server(playerInventory: InventoryPlayer, serverInventory: ServerInventory)
|
||||
addSlotToContainer(76, 7 + i * slotSize, api.driver.Slot.Card, 2 - i)
|
||||
}
|
||||
|
||||
for (i <- 0 to 3) {
|
||||
addSlotToContainer(100, 7 + i * slotSize, api.driver.Slot.Processor)
|
||||
for (i <- 0 to 1 + serverInventory.tier) {
|
||||
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)
|
||||
}
|
||||
|
||||
for (i <- 0 to 3) {
|
||||
for (i <- 0 to 1 + serverInventory.tier) {
|
||||
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.api.driver.Slot
|
||||
import li.cil.oc.server.driver.Registry
|
||||
import net.minecraft.item.ItemStack
|
||||
import net.minecraft.entity.player.EntityPlayer
|
||||
import net.minecraft.item.ItemStack
|
||||
|
||||
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 getInvName = Settings.namespace + "container.Server"
|
||||
|
||||
@ -15,8 +21,17 @@ trait ServerInventory extends ItemStackInventory {
|
||||
|
||||
override def isUseableByPlayer(player: EntityPlayer) = false
|
||||
|
||||
override def isItemValidForSlot(slot: Int, stack: ItemStack) =
|
||||
(slot, Registry.itemDriverFor(stack)) match {
|
||||
override def isItemValidForSlot(slot: Int, stack: ItemStack) = tier 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 (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
|
||||
@ -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 _ => 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)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7,21 +7,26 @@ import li.cil.oc.util.Tooltip
|
||||
import li.cil.oc.{Settings, OpenComputers}
|
||||
import net.minecraft.client.renderer.texture.IconRegister
|
||||
import net.minecraft.entity.player.EntityPlayer
|
||||
import net.minecraft.item.ItemStack
|
||||
import net.minecraft.item.{EnumRarity, ItemStack}
|
||||
import net.minecraft.world.World
|
||||
import scala.collection.mutable
|
||||
|
||||
class Server(val parent: Delegator) extends Delegate {
|
||||
val unlocalizedName = "Server"
|
||||
class Server(val parent: Delegator, val tier: Int) extends Delegate {
|
||||
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
|
||||
|
||||
private object HelperInventory extends ServerInventory {
|
||||
def tier = Server.this.tier
|
||||
|
||||
var container: ItemStack = null
|
||||
}
|
||||
|
||||
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.reinitialize()
|
||||
val items = mutable.Map.empty[String, Int]
|
||||
@ -41,7 +46,7 @@ class Server(val parent: Delegator) extends Delegate {
|
||||
override def registerIcons(iconRegister: 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) = {
|
||||
|
@ -105,7 +105,11 @@ class Rack extends Hub with PowerBalancer with Inventory with Rotatable with Bun
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
|
@ -1,9 +1,11 @@
|
||||
package li.cil.oc.server.component
|
||||
|
||||
import li.cil.oc.Items
|
||||
import li.cil.oc.api.driver
|
||||
import li.cil.oc.api.network.{Message, Node}
|
||||
import li.cil.oc.common.inventory.ComponentInventory
|
||||
import li.cil.oc.common.inventory.ServerInventory
|
||||
import li.cil.oc.common.item
|
||||
import li.cil.oc.common.tileentity
|
||||
import li.cil.oc.server.component.machine.Machine
|
||||
import li.cil.oc.server.driver.Registry
|
||||
@ -90,6 +92,11 @@ class Server(val rack: tileentity.Rack, val number: Int) extends Machine.Owner {
|
||||
}
|
||||
}
|
||||
|
||||
override def tier = Items.multi.subItem(container) match {
|
||||
case Some(server: item.Server) => server.tier
|
||||
case _ => 0
|
||||
}
|
||||
|
||||
var containerOverride: ItemStack = _
|
||||
|
||||
override def container = if (containerOverride != null) containerOverride else rack.getStackInSlot(number)
|
||||
|
@ -13,8 +13,8 @@ trait Item extends driver.Item {
|
||||
|
||||
protected def isOneOf(stack: ItemStack, items: common.item.Delegate*) =
|
||||
Items.multi.subItem(stack) match {
|
||||
case None => false
|
||||
case Some(subItem) => items.contains(subItem)
|
||||
case _ => false
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -60,7 +60,9 @@ oc:item.NumPad.name=Ziffernblock
|
||||
oc:item.PrintedCircuitBoard.name=Gedruckte Leiterplatte (PCB)
|
||||
oc:item.RawCircuitBoard.name=Leiterplattenrohling
|
||||
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.Transistor.name=Transistor
|
||||
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.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.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.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.
|
||||
|
@ -60,7 +60,9 @@ oc:item.NumPad.name=Numeric Keypad
|
||||
oc:item.PrintedCircuitBoard.name=Printed Circuit Board (PCB)
|
||||
oc:item.RawCircuitBoard.name=Raw Circuit Board
|
||||
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.Transistor.name=Transistor
|
||||
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.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.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.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.
|
||||
|
@ -12,11 +12,21 @@ terminal {
|
||||
[nuggetIron, "oc:craftingKeyboard", nuggetIron]]
|
||||
}
|
||||
|
||||
server {
|
||||
server1 {
|
||||
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"]
|
||||
[obsidian, "oc:craftingCircuitBoardPrinted", obsidian]]
|
||||
}
|
||||
server3 {
|
||||
input: [[obsidian, "oc:craftingRAMTier5", obsidian]
|
||||
["oc:circuitTier3", "oc:circuitTier3", "oc:circuitTier3"]
|
||||
[obsidian, "oc:craftingCircuitBoardPrinted", obsidian]]
|
||||
}
|
||||
|
||||
ram1 {
|
||||
input: [["oc:circuitTier1", "", "oc:circuitTier1"]
|
||||
|
@ -12,8 +12,18 @@ terminal {
|
||||
[nuggetIron, "oc:craftingKeyboard", nuggetIron]]
|
||||
}
|
||||
|
||||
server {
|
||||
input: [["oc:circuitTier3", "oc:craftingRAMTier4", "oc:circuitTier3"]
|
||||
server1 {
|
||||
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: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 |
@ -674,5 +674,8 @@ opencomputers {
|
||||
# like, you know, more than the loaded area.
|
||||
# See also: `wirelessStrength`.
|
||||
maxWirelessRange: 400
|
||||
|
||||
# The number of remote terminals supported by each server tier.
|
||||
terminalsPerTier: [2, 4, 8]
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user