From 44c78504b9044f8ec2cf8dd0f1d586c02cfcb55d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Mon, 7 Apr 2014 02:32:00 +0200 Subject: [PATCH 1/4] Added hologram.copy, which is slightly more efficient than hologram.fill'ing the same area (for larger areas anyway). Fixed something that wasn't really a bug since it would have happened for illegal arguments anyway. --- .../cil/oc/common/tileentity/Hologram.scala | 75 ++++++++++++++++--- src/main/scala/li/cil/oc/util/ItemCosts.scala | 7 +- .../scala/li/cil/oc/util/TextBuffer.scala | 4 +- 3 files changed, 71 insertions(+), 15 deletions(-) diff --git a/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala b/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala index db89c170f..3a5389c43 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala @@ -82,19 +82,13 @@ class Hologram extends traits.Environment with SidedEnvironment with Analyzable @Callback(direct = true, doc = """function(x:number, z:number):number -- Returns the bit mask representing the specified column.""") def get(computer: Context, args: Arguments): Array[AnyRef] = this.synchronized { - val x = args.checkInteger(0) - 1 - if (x < 0 || x >= width) throw new ArrayIndexOutOfBoundsException() - val z = args.checkInteger(1) - 1 - if (z < 0 || z >= width) throw new ArrayIndexOutOfBoundsException() + val (x, z) = checkCoordinates(args) result(volume(x + z * width)) } @Callback(direct = true, limit = 256, doc = """function(x:number, z:number, value:number) -- Set the bit mask for the specified column.""") def set(computer: Context, args: Arguments): Array[AnyRef] = this.synchronized { - val x = args.checkInteger(0) - 1 - if (x < 0 || x >= width) throw new ArrayIndexOutOfBoundsException() - val z = args.checkInteger(1) - 1 - if (z < 0 || z >= width) throw new ArrayIndexOutOfBoundsException() + val (x, z) = checkCoordinates(args) val value = args.checkDouble(2).longValue.intValue volume(x + z * width) = value setDirty(x, z) @@ -103,10 +97,7 @@ class Hologram extends traits.Environment with SidedEnvironment with Analyzable @Callback(direct = true, limit = 128, doc = """function(x:number, z:number, height:number) -- Fills a column to the specified height.""") def fill(computer: Context, args: Arguments): Array[AnyRef] = this.synchronized { - val x = args.checkInteger(0) - 1 - if (x < 0 || x >= width) throw new ArrayIndexOutOfBoundsException() - val z = args.checkInteger(1) - 1 - if (z < 0 || z >= width) throw new ArrayIndexOutOfBoundsException() + val (x, z) = checkCoordinates(args) val height = math.min(32, math.max(0, args.checkInteger(2))) // Bit shifts in the JVM only use the lowest five bits... so we have to // manually check the height, to avoid the shift being a no-op. @@ -115,6 +106,58 @@ class Hologram extends traits.Environment with SidedEnvironment with Analyzable null } + @Callback(doc = """function(x:number, z:number, sx:number, sz:number, tx:number, tz:number) -- Copies an area of columns by the specified translation.""") + def copy(computer: Context, args: Arguments): Array[AnyRef] = this.synchronized { + val (x, z) = checkCoordinates(args) + val w = args.checkInteger(2) + val h = args.checkInteger(3) + val tx = args.checkInteger(4) + val tz = args.checkInteger(5) + + // Anything to do at all? + if (w <= 0 || h <= 0) return null + if (tx == 0 && tz == 0) return null + // Loop over the target rectangle, starting from the directions away from + // the source rectangle and copy the data. This way we ensure we don't + // overwrite anything we still need to copy. + val (dx0, dx1) = (math.max(0, math.min(width - 1, x + tx + w - 1)), math.max(0, math.min(width, x + tx))) match { + case dx if tx > 0 => dx + case dx => dx.swap + } + val (dz0, dz1) = (math.max(0, math.min(width - 1, z + tz + h - 1)), math.max(0, math.min(width, z + tz))) match { + case dz if tz > 0 => dz + case dz => dz.swap + } + val (sx, sz) = (if (tx > 0) -1 else 1, if (tz > 0) -1 else 1) + // Copy values to destination rectangle if there source is valid. + for (nz <- dz0 to dz1 by sz) { + nz - tz match { + case oz if oz >= 0 && oz < width => + for (nx <- dx0 to dx1 by sx) { + nx - tx match { + case ox if ox >= 0 && ox < width => + volume(nz * width + nx) = volume(oz * width + ox) + case _ => /* Got no source column. */ + } + } + case _ => /* Got no source row. */ + } + } + + // Mark target rectangle dirty. + setDirty(math.min(dx0, dx1), math.min(dz0, dz1)) + setDirty(math.max(dx0, dx1), math.max(dz0, dz1)) + + // The reasoning here is: it'd take 18 ticks to do the whole are with fills, + // so make this slightly more efficient (15 ticks - 0.75 seconds). Make it + // 'free' if it's less than 0.25 seconds, i.e. for small copies. + val area = (math.max(dx0, dx1) - math.min(dx0, dx1)) * (math.max(dz0, dz1) - math.min(dz0, dz1)) + val relativeArea = math.max(0, area / (width * width).toFloat - 0.25) + computer.pause(relativeArea) + + null + } + @Callback(doc = """function():number -- Returns the render scale of the hologram.""") def getScale(computer: Context, args: Arguments): Array[AnyRef] = { result(scale) @@ -127,6 +170,14 @@ class Hologram extends traits.Environment with SidedEnvironment with Analyzable null } + private def checkCoordinates(args: Arguments) = { + val x = args.checkInteger(0) - 1 + if (x < 0 || x >= width) throw new ArrayIndexOutOfBoundsException() + val z = args.checkInteger(1) - 1 + if (z < 0 || z >= width) throw new ArrayIndexOutOfBoundsException() + (x, z) + } + // ----------------------------------------------------------------------- // override def updateEntity() { diff --git a/src/main/scala/li/cil/oc/util/ItemCosts.scala b/src/main/scala/li/cil/oc/util/ItemCosts.scala index 8c263f4c8..80a685104 100644 --- a/src/main/scala/li/cil/oc/util/ItemCosts.scala +++ b/src/main/scala/li/cil/oc/util/ItemCosts.scala @@ -122,5 +122,10 @@ object ItemCosts { accumulate(what) } - def fuzzyEquals(stack1: ItemStack, stack2: ItemStack) = stack1.isItemEqual(stack2) || (stack1.itemID == stack2.itemID && (stack1.getItemDamage == OreDictionary.WILDCARD_VALUE || stack2.getItemDamage == OreDictionary.WILDCARD_VALUE)) + // In case you'd like to use this class for your items and your items use + // NBT data in the item stack to differentiate them uncomment the last part. + // We don't use this in OC because the NBT of items can change dynamically, + // for example by components being assigned an address, which will break the + // equals check. + private def fuzzyEquals(stack1: ItemStack, stack2: ItemStack) = stack1.isItemEqual(stack2) || (stack1.itemID == stack2.itemID && (stack1.getItemDamage == OreDictionary.WILDCARD_VALUE || stack2.getItemDamage == OreDictionary.WILDCARD_VALUE)) // && ItemStack.areItemStackTagsEqual(stack1, stack2) } diff --git a/src/main/scala/li/cil/oc/util/TextBuffer.scala b/src/main/scala/li/cil/oc/util/TextBuffer.scala index d49b58f2f..4e046bd6f 100644 --- a/src/main/scala/li/cil/oc/util/TextBuffer.scala +++ b/src/main/scala/li/cil/oc/util/TextBuffer.scala @@ -134,11 +134,11 @@ class TextBuffer(var width: Int, var height: Int, initialDepth: PackedColor.Dept // Loop over the target rectangle, starting from the directions away from // the source rectangle and copy the data. This way we ensure we don't // overwrite anything we still need to copy. - val (dx0, dx1) = (math.max(col + tx + w - 1, math.min(0, width - 1)), math.max(col + tx, math.min(0, width))) match { + val (dx0, dx1) = (math.max(0, math.min(width - 1, col + tx + w - 1)), math.max(0, math.min(width, col + tx))) match { case dx if tx > 0 => dx case dx => dx.swap } - val (dy0, dy1) = (math.max(row + ty + h - 1, math.min(0, height - 1)), math.max(row + ty, math.min(0, height))) match { + val (dy0, dy1) = (math.max(0, math.min(height - 1, row + ty + h - 1)), math.max(0, math.min(height, row + ty))) match { case dy if ty > 0 => dy case dy => dy.swap } From 7e19d2b8d78708ba1ce4dde43d12d06152b32c92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Mon, 7 Apr 2014 03:16:20 +0200 Subject: [PATCH 2/4] Added tier 1.5 RAM. So many files touched, so little changed. Using RAM T1.5 for robots' built-in ram sizes. --- .../assets/opencomputers/lang/de_DE.lang | 9 ++--- .../assets/opencomputers/lang/en_US.lang | 9 ++--- .../assets/opencomputers/lang/fr_FR.lang | 9 ++--- .../assets/opencomputers/lang/ru_RU.lang | 9 ++--- .../assets/opencomputers/lang/zh_TW.lang | 9 ++--- .../opencomputers/recipes/default.recipes | 20 ++++++----- .../opencomputers/recipes/gregtech.recipes | 31 +++++++++++++----- .../opencomputers/recipes/hardmode.recipes | 26 ++++++++------- .../opencomputers/textures/items/memory0.png | Bin 308 -> 308 bytes .../opencomputers/textures/items/memory1.png | Bin 322 -> 300 bytes .../opencomputers/textures/items/memory2.png | Bin 281 -> 322 bytes .../opencomputers/textures/items/memory3.png | Bin 323 -> 281 bytes .../opencomputers/textures/items/memory4.png | Bin 281 -> 323 bytes .../opencomputers/textures/items/memory5.png | Bin 0 -> 281 bytes src/main/resources/reference.conf | 9 ++--- src/main/scala/li/cil/oc/Items.scala | 8 +++-- src/main/scala/li/cil/oc/Settings.scala | 10 +++--- .../scala/li/cil/oc/common/item/Memory.scala | 2 +- .../li/cil/oc/common/tileentity/Robot.scala | 2 +- 19 files changed, 93 insertions(+), 60 deletions(-) create mode 100644 src/main/resources/assets/opencomputers/textures/items/memory5.png diff --git a/src/main/resources/assets/opencomputers/lang/de_DE.lang b/src/main/resources/assets/opencomputers/lang/de_DE.lang index 5216d4f50..d329c9cb9 100644 --- a/src/main/resources/assets/opencomputers/lang/de_DE.lang +++ b/src/main/resources/assets/opencomputers/lang/de_DE.lang @@ -51,10 +51,11 @@ oc:item.InternetCard.name=Internetkarte oc:item.Interweb.name=Interweb oc:item.IronNugget.name=Eisennugget oc:item.Memory0.name=Speicher (Stufe 1) -oc:item.Memory1.name=Speicher (Stufe 2) -oc:item.Memory2.name=Speicher (Stufe 2.5) -oc:item.Memory3.name=Speicher (Stufe 3) -oc:item.Memory4.name=Speicher (Stufe 3.5) +oc:item.Memory1.name=Speicher (Stufe 1.5) +oc:item.Memory2.name=Speicher (Stufe 2) +oc:item.Memory3.name=Speicher (Stufe 2.5) +oc:item.Memory4.name=Speicher (Stufe 3) +oc:item.Memory5.name=Speicher (Stufe 3.5) oc:item.Microchip0.name=Microchip (Stufe 1) oc:item.Microchip1.name=Microchip (Stufe 2) oc:item.Microchip2.name=Microchip (Stufe 3) diff --git a/src/main/resources/assets/opencomputers/lang/en_US.lang b/src/main/resources/assets/opencomputers/lang/en_US.lang index 07d666009..9f7eb1283 100644 --- a/src/main/resources/assets/opencomputers/lang/en_US.lang +++ b/src/main/resources/assets/opencomputers/lang/en_US.lang @@ -51,10 +51,11 @@ oc:item.InternetCard.name=Internet Card oc:item.Interweb.name=Interweb oc:item.IronNugget.name=Iron Nugget oc:item.Memory0.name=Memory (Tier 1) -oc:item.Memory1.name=Memory (Tier 2) -oc:item.Memory2.name=Memory (Tier 2.5) -oc:item.Memory3.name=Memory (Tier 3) -oc:item.Memory4.name=Memory (Tier 3.5) +oc:item.Memory1.name=Memory (Tier 1.5) +oc:item.Memory2.name=Memory (Tier 2) +oc:item.Memory3.name=Memory (Tier 2.5) +oc:item.Memory4.name=Memory (Tier 3) +oc:item.Memory5.name=Memory (Tier 3.5) oc:item.Microchip0.name=Microchip (Tier 1) oc:item.Microchip1.name=Microchip (Tier 2) oc:item.Microchip2.name=Microchip (Tier 3) diff --git a/src/main/resources/assets/opencomputers/lang/fr_FR.lang b/src/main/resources/assets/opencomputers/lang/fr_FR.lang index 058e747b9..e4e68e8f8 100644 --- a/src/main/resources/assets/opencomputers/lang/fr_FR.lang +++ b/src/main/resources/assets/opencomputers/lang/fr_FR.lang @@ -41,10 +41,11 @@ oc:item.HardDiskDrive1.name=Disque dur (Niveau 2) oc:item.HardDiskDrive2.name=Disque dur (Niveau 3) oc:item.IronNugget.name=Pépite de fer oc:item.Memory0.name=Mémoire (Niveau 1) -oc:item.Memory1.name=Mémoire (Niveau 2) -oc:item.Memory2.name=Mémoire (Niveau 2.5) -oc:item.Memory3.name=Mémoire (Niveau 3) -oc:item.Memory4.name=Mémoire (Niveau 3.5) +oc:item.Memory1.name=Mémoire (Niveau 1.5) +oc:item.Memory2.name=Mémoire (Niveau 2) +oc:item.Memory3.name=Mémoire (Niveau 2.5) +oc:item.Memory4.name=Mémoire (Niveau 3) +oc:item.Memory5.name=Mémoire (Niveau 3.5) oc:item.Microchip0.name=Puce électronique (Niveau 1) oc:item.Microchip1.name=Puce électronique (Niveau 2) oc:item.Microchip2.name=Puce électronique (Niveau 3) diff --git a/src/main/resources/assets/opencomputers/lang/ru_RU.lang b/src/main/resources/assets/opencomputers/lang/ru_RU.lang index e67e76cab..a1ecfbf88 100644 --- a/src/main/resources/assets/opencomputers/lang/ru_RU.lang +++ b/src/main/resources/assets/opencomputers/lang/ru_RU.lang @@ -51,10 +51,11 @@ oc:item.InternetCard.name=Интернет-плата oc:item.Interweb.name=Интерсеть oc:item.IronNugget.name=Железный самородок oc:item.Memory0.name=ОЗУ (Ур. 1) -oc:item.Memory1.name=ОЗУ (Ур. 2) -oc:item.Memory2.name=ОЗУ (Ур. 2.5) -oc:item.Memory3.name=ОЗУ (Ур. 3) -oc:item.Memory4.name=ОЗУ (Ур. 3.5) +oc:item.Memory1.name=ОЗУ (Ур. 1.5) +oc:item.Memory2.name=ОЗУ (Ур. 2) +oc:item.Memory3.name=ОЗУ (Ур. 2.5) +oc:item.Memory4.name=ОЗУ (Ур. 3) +oc:item.Memory5.name=ОЗУ (Ур. 3.5) oc:item.Microchip0.name=Микрочип (Ур. 1) oc:item.Microchip1.name=Микрочип (Ур. 2) oc:item.Microchip2.name=Микрочип (Ур. 3) diff --git a/src/main/resources/assets/opencomputers/lang/zh_TW.lang b/src/main/resources/assets/opencomputers/lang/zh_TW.lang index 87ddb695e..6fe88ee43 100644 --- a/src/main/resources/assets/opencomputers/lang/zh_TW.lang +++ b/src/main/resources/assets/opencomputers/lang/zh_TW.lang @@ -48,10 +48,11 @@ oc:item.HardDiskDrive2.name=硬碟機 (3級) oc:item.InternetCard.name=上網卡 oc:item.IronNugget.name=鐵粒 oc:item.Memory0.name=記憶卡 (1級) -oc:item.Memory1.name=記憶卡 (2級) -oc:item.Memory2.name=記憶卡 (2.5級) -oc:item.Memory3.name=記憶卡 (3級) -oc:item.Memory4.name=記憶卡 (3.5級) +oc:item.Memory1.name=記憶卡 (1.5級) +oc:item.Memory2.name=記憶卡 (2級) +oc:item.Memory3.name=記憶卡 (2.5級) +oc:item.Memory4.name=記憶卡 (3級) +oc:item.Memory5.name=記憶卡 (3.5級) oc:item.Microchip0.name=微晶片 (1級) oc:item.Microchip1.name=微晶片 (2級) oc:item.Microchip2.name=微晶片 (3級) diff --git a/src/main/resources/assets/opencomputers/recipes/default.recipes b/src/main/resources/assets/opencomputers/recipes/default.recipes index 9fdfb4b45..b4625b6d3 100644 --- a/src/main/resources/assets/opencomputers/recipes/default.recipes +++ b/src/main/resources/assets/opencomputers/recipes/default.recipes @@ -13,17 +13,17 @@ terminal { } server1 { - input: [[obsidian, "oc:craftingRAMTier3", obsidian] + input: [[obsidian, "oc:craftingRAMTier4", obsidian] ["oc:circuitTier1", "oc:circuitTier2", "oc:circuitTier1"] [obsidian, "oc:craftingCircuitBoardPrinted", obsidian]] } server2 { - input: [[obsidian, "oc:craftingRAMTier4", obsidian] + input: [[obsidian, "oc:craftingRAMTier5", obsidian] ["oc:circuitTier2", "oc:circuitTier3", "oc:circuitTier2"] [obsidian, "oc:craftingCircuitBoardPrinted", obsidian]] } server3 { - input: [[obsidian, "oc:craftingRAMTier5", obsidian] + input: [[obsidian, "oc:craftingRAMTier6", obsidian] ["oc:circuitTier3", "oc:circuitTier3", "oc:circuitTier3"] [obsidian, "oc:craftingCircuitBoardPrinted", obsidian]] } @@ -33,18 +33,22 @@ ram1 { ["", "oc:craftingCircuitBoardPrinted", ""]] } ram2 { - input: [["oc:circuitTier2", "", "oc:circuitTier2"] + input: [["oc:circuitTier1", "oc:circuitTier1", "oc:circuitTier1"] ["", "oc:craftingCircuitBoardPrinted", ""]] } ram3 { - input: [["oc:circuitTier2", "oc:circuitTier2", "oc:circuitTier2"] + input: [["oc:circuitTier2", "", "oc:circuitTier2"] ["", "oc:craftingCircuitBoardPrinted", ""]] } ram4 { - input: [["oc:circuitTier3", "", "oc:circuitTier3"] + input: [["oc:circuitTier2", "oc:circuitTier2", "oc:circuitTier2"] ["", "oc:craftingCircuitBoardPrinted", ""]] } ram5 { + input: [["oc:circuitTier3", "", "oc:circuitTier3"] + ["", "oc:craftingCircuitBoardPrinted", ""]] +} +ram6 { input: [["oc:circuitTier3", "oc:circuitTier3", "oc:circuitTier3"] ["", "oc:craftingCircuitBoardPrinted", ""]] } @@ -79,11 +83,11 @@ graphicsCard1 { ["", "oc:craftingCard", ""]] } graphicsCard2 { - input: [["oc:circuitTier2", "oc:craftingALU", "oc:craftingRAMTier2"] + input: [["oc:circuitTier2", "oc:craftingALU", "oc:craftingRAMTier3"] ["", "oc:craftingCard", ""]] } graphicsCard3 { - input: [["oc:circuitTier3", "oc:craftingALU", "oc:craftingRAMTier4"] + input: [["oc:circuitTier3", "oc:craftingALU", "oc:craftingRAMTier5"] ["", "oc:craftingCard", ""]] } internetCard { diff --git a/src/main/resources/assets/opencomputers/recipes/gregtech.recipes b/src/main/resources/assets/opencomputers/recipes/gregtech.recipes index 98c76932f..55a4d3b54 100644 --- a/src/main/resources/assets/opencomputers/recipes/gregtech.recipes +++ b/src/main/resources/assets/opencomputers/recipes/gregtech.recipes @@ -9,8 +9,18 @@ analyzer { [screwAluminium, craftingToolScrewdriver, screwAluminium]] } -server { - input: [["oc:circuitTier3", "oc:craftingRAMTier4", "oc:circuitTier3"] +server1 { + input: [["oc:circuitTier1", "oc:craftingRAMTier4", "oc:circuitTier1"] + ["oc:circuitTier1", "oc:craftingCaseTier1", "oc:circuitTier2"] + [craftingToolScrewdriver, "oc:craftingCircuitBoardPrinted", craftingToolWrench]] +} +server2 { + input: [["oc:circuitTier2", "oc:craftingRAMTier5", "oc:circuitTier2"] + ["oc:circuitTier3", "oc:craftingCaseTier2", "oc:circuitTier3"] + [craftingToolScrewdriver, "oc:craftingCircuitBoardPrinted", craftingToolWrench]] +} +server3 { + input: [["oc:circuitTier3", "oc:craftingRAMTier6", "oc:circuitTier3"] ["oc:circuitTier3", "oc:craftingCaseTier3", "oc:circuitTier3"] [craftingToolScrewdriver, "oc:craftingCircuitBoardPrinted", craftingToolWrench]] } @@ -23,9 +33,9 @@ ram1 { time: 250 } ram2 { - input: [["oc:circuitTier2", "oc:circuitTier2", "oc:circuitTier2"] - ["oc:craftingRAMTier1", "oc:craftingCircuitBoardPrinted", "oc:craftingRAMTier1"] - [Dataorb, craftingToolWrench, Dataorb]] + input: [["oc:circuitTier1", "oc:circuitTier1", "oc:circuitTier1"] + ["", "oc:craftingRAMTier1", ""] + ["", craftingToolWrench, ""]] } ram3 { input: [["oc:circuitTier2", "oc:circuitTier2", "oc:circuitTier2"] @@ -33,7 +43,7 @@ ram3 { [Dataorb, craftingToolWrench, Dataorb]] } ram4 { - input: [["oc:circuitTier3", "oc:circuitTier3", "oc:circuitTier3"] + input: [["oc:circuitTier2", "oc:circuitTier2", "oc:circuitTier2"] ["oc:craftingRAMTier3", "oc:craftingCircuitBoardPrinted", "oc:craftingRAMTier3"] [Dataorb, craftingToolWrench, Dataorb]] } @@ -42,6 +52,11 @@ ram5 { ["oc:craftingRAMTier4", "oc:craftingCircuitBoardPrinted", "oc:craftingRAMTier4"] [Dataorb, craftingToolWrench, Dataorb]] } +ram6 { + input: [["oc:circuitTier3", "oc:circuitTier3", "oc:circuitTier3"] + ["oc:craftingRAMTier5", "oc:craftingCircuitBoardPrinted", "oc:craftingRAMTier5"] + [Dataorb, craftingToolWrench, Dataorb]] +} floppy { input: [[screwAluminium, lever, screwAluminium] @@ -174,12 +189,12 @@ cpu0 { } cpu1 { input: [["oc:circuitTier2", plateStainlessSteel, "oc:circuitTier2"] - ["oc:craftingRAMTier2", "oc:craftingCPUTier1", "oc:craftingRAMTier2"] + ["oc:craftingRAMTier3", "oc:craftingCPUTier1", "oc:craftingRAMTier3"] ["oc:circuitTier2", craftingToolScrewdriver, "oc:circuitTier2"]] } cpu2 { input: [["oc:circuitTier3", plateTitanium, "oc:circuitTier3"] - ["oc:craftingRAMTier4", "oc:craftingCPUTier2", "oc:craftingRAMTier4"] + ["oc:craftingRAMTier5", "oc:craftingCPUTier2", "oc:craftingRAMTier5"] ["oc:circuitTier3", craftingToolScrewdriver, "oc:circuitTier3"]] } cu { diff --git a/src/main/resources/assets/opencomputers/recipes/hardmode.recipes b/src/main/resources/assets/opencomputers/recipes/hardmode.recipes index eeb8ffe6d..66ac1b83e 100644 --- a/src/main/resources/assets/opencomputers/recipes/hardmode.recipes +++ b/src/main/resources/assets/opencomputers/recipes/hardmode.recipes @@ -15,17 +15,17 @@ terminal { } server1 { - input: [["oc:circuitTier1", "oc:craftingRAMTier3", "oc:circuitTier1"] + input: [["oc:circuitTier1", "oc:craftingRAMTier4", "oc:circuitTier1"] ["oc:circuitTier2", "oc:craftingCaseTier1", "oc:circuitTier2"] ["oc:craftingCircuitBoardPrinted", "oc:craftingCircuitBoardPrinted", "oc:craftingCircuitBoardPrinted"]] } server2 { - input: [["oc:circuitTier2", "oc:craftingRAMTier4", "oc:circuitTier2"] + input: [["oc:circuitTier2", "oc:craftingRAMTier5", "oc:circuitTier2"] ["oc:circuitTier3", "oc:craftingCaseTier2", "oc:circuitTier3"] ["oc:craftingCircuitBoardPrinted", "oc:craftingCircuitBoardPrinted", "oc:craftingCircuitBoardPrinted"]] } server3 { - input: [["oc:circuitTier3", "oc:craftingRAMTier5", "oc:circuitTier3"] + input: [["oc:circuitTier3", "oc:craftingRAMTier6", "oc:circuitTier3"] ["oc:circuitTier3", "oc:craftingCaseTier3", "oc:circuitTier3"] ["oc:craftingCircuitBoardPrinted", "oc:craftingCircuitBoardPrinted", "oc:craftingCircuitBoardPrinted"]] } @@ -36,20 +36,24 @@ ram1 { } ram2 { input: [["oc:circuitTier2", "oc:circuitTier2", "oc:circuitTier2"] - ["oc:craftingRAMTier1", "oc:craftingCircuitBoardPrinted", "oc:craftingRAMTier1"]] + ["", "oc:craftingRAMTier1", ""]] } ram3 { input: [["oc:circuitTier2", "oc:circuitTier2", "oc:circuitTier2"] ["oc:craftingRAMTier2", "oc:craftingCircuitBoardPrinted", "oc:craftingRAMTier2"]] } ram4 { - input: [["oc:circuitTier3", "oc:circuitTier3", "oc:circuitTier3"] + input: [["oc:circuitTier2", "oc:circuitTier2", "oc:circuitTier2"] ["oc:craftingRAMTier3", "oc:craftingCircuitBoardPrinted", "oc:craftingRAMTier3"]] } ram5 { input: [["oc:circuitTier3", "oc:circuitTier3", "oc:circuitTier3"] ["oc:craftingRAMTier4", "oc:craftingCircuitBoardPrinted", "oc:craftingRAMTier4"]] } +ram6 { + input: [["oc:circuitTier3", "oc:circuitTier3", "oc:circuitTier3"] + ["oc:craftingRAMTier5", "oc:craftingCircuitBoardPrinted", "oc:craftingRAMTier5"]] +} floppy { input: [[nuggetIron, lever, nuggetIron] @@ -81,11 +85,11 @@ graphicsCard1 { ["", "oc:craftingCard", ""]] } graphicsCard2 { - input: [["oc:circuitTier2", "oc:circuitTier2", "oc:craftingRAMTier2"] + input: [["oc:circuitTier2", "oc:circuitTier2", "oc:craftingRAMTier3"] ["", "oc:craftingGPUTier1", ""]] } graphicsCard3 { - input: [["oc:circuitTier3", "oc:circuitTier3", "oc:craftingRAMTier4"] + input: [["oc:circuitTier3", "oc:circuitTier3", "oc:craftingRAMTier5"] ["", "oc:craftingGPUTier2", ""]] } internetCard { @@ -193,14 +197,14 @@ cpu0 { [nuggetIron, "oc:craftingALU", nuggetIron]] } cpu1 { - input: [[nuggetGold, "oc:craftingRAMTier2", nuggetGold] + input: [[nuggetGold, "oc:craftingRAMTier3", nuggetGold] ["oc:circuitTier2", "oc:craftingCPUTier1", "oc:circuitTier2"] - [nuggetGold, "oc:craftingRAMTier2", nuggetGold]] + [nuggetGold, "oc:craftingRAMTier3", nuggetGold]] } cpu2 { - input: [[diamond, "oc:craftingRAMTier4", diamond] + input: [[diamond, "oc:craftingRAMTier5", diamond] ["oc:circuitTier3", "oc:craftingCPUTier2", "oc:circuitTier3"] - [diamond, "oc:craftingRAMTier4", diamond]] + [diamond, "oc:craftingRAMTier5", diamond]] } cu { input: [[nuggetGold, torchRedstoneActive, nuggetGold] diff --git a/src/main/resources/assets/opencomputers/textures/items/memory0.png b/src/main/resources/assets/opencomputers/textures/items/memory0.png index 4158e553e4caad79fe4fcefbbb898eccf0029f12..7f372124dc00af8e44d49ba2bc98e7ed87a24ab4 100644 GIT binary patch delta 190 zcmV;v073t>0<;2Cif+8yaf2+d5cFduNourHY z3&vq)5OpyCG`@K?a2+Y_*gk-eN{O%r&OOFRz7Z5ks|Oew2l5;LBV^6$EObt-HE3$9 s{h&6qViT!VMa3qvjP&ILK92wc0Cgb_D;6G89smFU07*qoM6N<$f@=Fo{r~^~ delta 190 zcmV;v073t>0<;2FuCAP%oZQ^p|NsB-XX2=lku7#h7Qi3~1B0R>ZSBwdpS9IR;WY~u^AZOA z7mUNqAnIZOIQimY;NElIuzUb9uWNucaBLw2@{OoaDjr~H97u2ckC-&6v(PcM)}X0v s_Jhu$6`M$FDk?USI@0S0d>#P?0B2MVE2hCHU;qFB07*qoM6N<$f@K;|7XSbN diff --git a/src/main/resources/assets/opencomputers/textures/items/memory1.png b/src/main/resources/assets/opencomputers/textures/items/memory1.png index d61e552f2f9481247ec942742fae79ecf94c19af..53efb704dc28fba9e72d1b7ad6ed0ecb58422da3 100644 GIT binary patch delta 216 zcmV;}04M*#0;~d%Nl83VOjJc7J0So7052~u7%UhfA|fb7D7?IJ5+f235fKR!2`f-5 z+1Y{`I2x|5uFA^FL_|b|g@xSQ+?<@8|Ns9)of?M#000z`o)>=rPfzC&0001HNklI delta 257 zcmZ3(bckt!XT3*&Pl&6cwITxpgM^NRzP`Sak`kvdr-rM>o;`)FEk#1gLI!aLf`WoK zZ#G%PTPV3GUA?-*#l=N0NKeUD>GbJ7n_QdQw>L^zNd5o+{{nZ?B#=QRL4LtNE;hh$ zR#@*9P)&}fi(^Q|t*V$lZ@vQx9IS#@yw-00_WW;tRH@<;=SNAOCa`~H|8l&VzhkPa zjEl%$rKWi~yg9)Pk+)k^6lSrlayek9H8Dt2{Z!uvv(-{f8qm9Y(B(u}{hC$#fk ob84$Q|1{CExv!R8sA1w^$omdKI;Vst01v2c+W-In diff --git a/src/main/resources/assets/opencomputers/textures/items/memory2.png b/src/main/resources/assets/opencomputers/textures/items/memory2.png index 1163de4c4a291d9517303f11f741d93886d8f1c8..d1522c9b5e50a9621274ddd3d3c46c01dd022153 100644 GIT binary patch delta 257 zcmbQqbckt!XT3*&Pl&6cwITxpgM^NRzP`SalG2_%g{>_`8m=0g!kj|NLI!aLf`WoK zZ#G@My2K*h!o|f!FGx?xMd|eEKAT({C0nK2w>L^zNd5o+-{JFHMvy@zL4LtNE;hh$ zR#@*9P)&}fi(^Q|t*V$lZ@vQx9IS$Cyw+Z;+xy>lwO&h!M~si$rv?8S{#CqZ+_TS{Qs-WR`yeBSZR0{!i-fEM0*XGkCiCxvXh=uAP|#l#KUuaSW-r)zWJzbijav z*-}{e`Gf!KdwmmUm;^d*RMvek|3IM4DlerxPCu7BCH@WJ=?jt>ot`mna+L1z$ZT=; zQkHpC-}lM&P@q)P-^3kz8(wah6JepFel2Z}Zop?Q1BUDSxFsK|yio+&#o+1c=d#Wz Gp$P!dd|O2T diff --git a/src/main/resources/assets/opencomputers/textures/items/memory3.png b/src/main/resources/assets/opencomputers/textures/items/memory3.png index 290f1349be7a17ed36e6be093486419ae7ee0e1a..84bbc73f669e2193004108ec0f9f1697b0cfe850 100644 GIT binary patch delta 216 zcmX@iG?Qt9XT5QNPlzi61B1T4zLJuXqP3!gjs&ML=bk-<8m=0Gf`UTILN{+VxwyDo zy}IP~?Tu0vQm0S%{r~@;b?>AvKy890L4LtNE(%~!T{|-gC>ihR;uunKtEJac=zswS z^G+EbzkmO4-4JQ>6c!b+zQpv8^Gx94RXUHRJ#aX(E}ChNAJaYY1QjU-={t!oUdl2- zQV#|G7f;a_>boRhBj0qJdj{X>&ep?4Nx8>vGnuYuU}kvg$1VBiie)~~E(T9mKbLh* G2~7aePg%?W delta 258 zcmbQqbeL&^XT3*&Pl&6cwITxpgTB7LgpP!gl9EB3!Ja*ZoWh(Mt{VAmokGe&H*Yox z3JNOOD(MC3S;SkoxVS93bj>E$rgP4`p5tevETlHvyz~G6{|B+9RzQO!N`m}?fn02W z;jFOUE1;TOPZ!6Kid)q&eV#%G6gXG}O#&ZHy8HjX$t%YdCZTe>*d$ljFR;H?t*}Zb z$^FO+als#Q*AAGmF4*ep!L%rIf>+Cxwva_r<_MpRw1{>7FL>u^(=MmQ?OpgTe~DWM4fXQFa& diff --git a/src/main/resources/assets/opencomputers/textures/items/memory4.png b/src/main/resources/assets/opencomputers/textures/items/memory4.png index 41f2411c81877c895f5cfdc29635470688d0b517..a732b1716c9c1763cd85fac6871a8d38fe942ed4 100644 GIT binary patch delta 258 zcmbQqbeL&^XT3*&Pl&6cwITxpgTB7LgpP!gk`kvd=bk-<25|-&t{OthLiuf-H*Yox z3JNOODlNKn%_81HFG$bD#lrLC~&X}Zs`jBz5e_D%&V;v_&U2!I?G*=zc62bNg!0L zP$7w{n`2Lx=>|W>j9lSK4JlGfgbcSUPQ9_M_Pk2^!!Nvl-M_5wf5p`+r{x$Sm;G*) r%lm_y4lQOs&9&RFG&sYKk&U7Dg#dH+q=;icn;AS^{an^LB{Ts53FU9* delta 216 zcmX@iG?Qt9XT5QNPlzi61B1T4zLJuXqP3!gj>Milg@S^DoWh(Mt{OthLN{+VExL5g z#l>aA%{x8E&q!HF{r~^pHcM>^P@7;$kY6y6ivk!_*Un4=O2&J-IEGZ*YU#BUI$*%T zyi>?|PV@i$W@fF4mt0tn_HAjXXA1nhLaTd+s)b@Dc{Z+S|b(>;^p+w2D)nU)hw+Z@hnA7FSipIh=+%NJIlT@0SCelF{r G5}E*$>|5yo diff --git a/src/main/resources/assets/opencomputers/textures/items/memory5.png b/src/main/resources/assets/opencomputers/textures/items/memory5.png new file mode 100644 index 0000000000000000000000000000000000000000..2a851fa245076a757c153c25eeb3cd15fdd81b61 GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!fo;{cx!S0Jsgudk$}q-d=up(C+pPobcopoXgkr!c3Gve3<& zO)f4ji!NQ;aPy9og;dY+Gynhpce90?TwL`3@~i-sdA-pAXKu?Luy3pknd*8+XimqD*V7o*`yDvW)Z@aO(p)Yv z@e)V-6gP__|7D(bw=6bc`R!a#&3HM{a$`Y+-l5CNSJB=9WCS{Pt0xRScf4 KelF{r5}E*Acx*iY literal 0 HcmV?d00001 diff --git a/src/main/resources/reference.conf b/src/main/resources/reference.conf index e528416bd..47e013196 100644 --- a/src/main/resources/reference.conf +++ b/src/main/resources/reference.conf @@ -111,12 +111,13 @@ opencomputers { # run in a low-priority worker thread, this should be barely noticeable. activeGC: true - # The sizes of the five levels of RAM, in kilobytes. This list must - # contain exactly five entries, or it will be ignored. Note that while - # there are five levels of RAM, they still fall into the three tiers of - # items (level 1 = tier 1, level 2, 3 = tier 2, level 4, 5 = tier 3). + # The sizes of the six levels of RAM, in kilobytes. This list must + # contain exactly six entries, or it will be ignored. Note that while + # there are six levels of RAM, they still fall into the three tiers of + # items (level 1, 2 = tier 1, level 3, 4 = tier 2, level 5, 6 = tier 3). ramSizes: [ 64 + 96 128 256 512 diff --git a/src/main/scala/li/cil/oc/Items.scala b/src/main/scala/li/cil/oc/Items.scala index 09ebc388d..6df5ded19 100644 --- a/src/main/scala/li/cil/oc/Items.scala +++ b/src/main/scala/li/cil/oc/Items.scala @@ -22,7 +22,7 @@ object Items { // ----------------------------------------------------------------------- // // Memory - var ram1, ram2, ram3, ram4, ram5: item.Memory = _ + var ram1, ram2, ram3, ram4, ram5, ram6: item.Memory = _ // ----------------------------------------------------------------------- // // Storage @@ -79,8 +79,8 @@ object Items { analyzer = Recipes.addItemDelegate(new item.Analyzer(multi), "analyzer") ram1 = Recipes.addItemDelegate(new item.Memory(multi, 0), "ram1") - ram2 = Recipes.addItemDelegate(new item.Memory(multi, 1), "ram2") ram3 = Recipes.addItemDelegate(new item.Memory(multi, 2), "ram3") + ram4 = Recipes.addItemDelegate(new item.Memory(multi, 3), "ram4") floppyDisk = Recipes.addItemDelegate(new item.FloppyDisk(multi), "floppy") hdd1 = Recipes.addItemDelegate(new item.HardDiskDrive(multi, 0), "hdd1") @@ -130,8 +130,8 @@ object Items { Recipes.addItemDelegate(abstractBus, "abstractBusCard") } - ram4 = Recipes.addItemDelegate(new item.Memory(multi, 3), "ram4") ram5 = Recipes.addItemDelegate(new item.Memory(multi, 4), "ram5") + ram6 = Recipes.addItemDelegate(new item.Memory(multi, 5), "ram6") // v1.2.0 server3 = Recipes.addItemDelegate(new item.Server(multi, 2), "server3") @@ -150,6 +150,7 @@ object Items { // v1.2.6 interweb = Recipes.addItemDelegate(new item.Interweb(multi), "interweb") upgradeAngel = Recipes.addItemDelegate(new item.UpgradeAngel(multi), "angelUpgrade") + ram2 = Recipes.addItemDelegate(new item.Memory(multi, 1), "ram2") // Initialize API. api.Items.AbstractBusCard = abstractBus.createItemStack() @@ -211,6 +212,7 @@ object Items { register("oc:craftingRAMTier3", ram3.createItemStack()) register("oc:craftingRAMTier4", ram4.createItemStack()) register("oc:craftingRAMTier5", ram5.createItemStack()) + register("oc:craftingRAMTier6", ram6.createItemStack()) register("oc:craftingHDDTier1", hdd1.createItemStack()) register("oc:craftingHDDTier2", hdd2.createItemStack()) diff --git a/src/main/scala/li/cil/oc/Settings.scala b/src/main/scala/li/cil/oc/Settings.scala index d528d2aed..d1d317dda 100644 --- a/src/main/scala/li/cil/oc/Settings.scala +++ b/src/main/scala/li/cil/oc/Settings.scala @@ -1,7 +1,6 @@ package li.cil.oc import com.typesafe.config.{ConfigRenderOptions, Config, ConfigFactory} -import cpw.mods.fml.common.{ModAPIManager, Loader} import java.io._ import java.util.logging.Level import li.cil.oc.util.PackedColor @@ -43,11 +42,14 @@ class Settings(config: Config) { case Array(tier1, tier2, tier3) => // For compatibility with older config files. Array(tier1: Int, tier2: Int, tier3: Int, tier3 * 2: Int, tier3 * 4: Int) - case Array(tier1, tier2, tier3, tier4, tier5) => - Array(tier1: Int, tier2: Int, tier3: Int, tier4: Int, tier5: Int) + case Array(tier1, tier3, tier4, tier5, tier6) => + // For compatibility with older config files. + Array(tier1: Int, (tier1: Int) * 3 / 2, tier3: Int, tier4: Int, tier5: Int, tier6: Int) + case Array(tier1, tier2, tier3, tier4, tier5, tier6) => + Array(tier1: Int, tier2: Int, tier3: Int, tier4: Int, tier5: Int, tier6: Int) case _ => OpenComputers.log.warning("Bad number of RAM sizes, ignoring.") - Array(64, 128, 256, 512, 1024) + Array(64, 96, 128, 256, 512, 1024) } val ramScaleFor64Bit = config.getDouble("computer.ramScaleFor64Bit") max 1 val cpuComponentSupport = Array(config.getIntList("computer.cpuComponentCount"): _*) match { diff --git a/src/main/scala/li/cil/oc/common/item/Memory.scala b/src/main/scala/li/cil/oc/common/item/Memory.scala index 40ceefd2a..3dc31f42d 100644 --- a/src/main/scala/li/cil/oc/common/item/Memory.scala +++ b/src/main/scala/li/cil/oc/common/item/Memory.scala @@ -14,7 +14,7 @@ class Memory(val parent: Delegator, val tier: Int) extends Delegate { val kiloBytes = Settings.get.ramSizes(tier) - override def rarity = Array(EnumRarity.common, EnumRarity.uncommon, EnumRarity.uncommon, EnumRarity.rare, EnumRarity.rare).apply(tier max 0 min 4) + override def rarity = Array(EnumRarity.common, EnumRarity.common, EnumRarity.uncommon, EnumRarity.uncommon, EnumRarity.rare, EnumRarity.rare).apply(tier max 0 min Settings.get.ramSizes.length) override def displayName(stack: ItemStack) = Some(parent.getItemStackDisplayName(stack) + " (%dKB)".format(kiloBytes)) diff --git a/src/main/scala/li/cil/oc/common/tileentity/Robot.scala b/src/main/scala/li/cil/oc/common/tileentity/Robot.scala index 65ed76000..a344b8654 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Robot.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Robot.scala @@ -543,7 +543,7 @@ class Robot(val isRemote: Boolean) extends traits.Computer with traits.TextBuffe // ----------------------------------------------------------------------- // - override def installedMemory = 96 * 1024 + override def installedMemory = Settings.get.ramSizes(1) * 1024 override def tier = 0 From 7c615026ac94b298c764e57ce47860fdfaa31104 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Mon, 7 Apr 2014 16:24:20 +0200 Subject: [PATCH 3/4] Fixed bug in resolution.lua when setting to currently set resolution. Allowing h x w resolutions as long as h <= maxWidth and the overall area is <= maxWidth * maxHeight. --- .../assets/opencomputers/lua/rom/bin/resolution.lua | 4 +++- src/main/scala/li/cil/oc/common/component/Buffer.scala | 2 +- .../scala/li/cil/oc/server/component/GraphicsCard.scala | 7 +++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/resources/assets/opencomputers/lua/rom/bin/resolution.lua b/src/main/resources/assets/opencomputers/lua/rom/bin/resolution.lua index 528981221..65e405b37 100644 --- a/src/main/resources/assets/opencomputers/lua/rom/bin/resolution.lua +++ b/src/main/resources/assets/opencomputers/lua/rom/bin/resolution.lua @@ -23,7 +23,9 @@ end local result, reason = component.gpu.setResolution(w, h) if not result then - io.stderr:write(reason) + if reason then -- otherwise we didn't change anything + io.stderr:write(reason) + end return end term.clear() \ No newline at end of file diff --git a/src/main/scala/li/cil/oc/common/component/Buffer.scala b/src/main/scala/li/cil/oc/common/component/Buffer.scala index 9bb573863..30e2fed12 100644 --- a/src/main/scala/li/cil/oc/common/component/Buffer.scala +++ b/src/main/scala/li/cil/oc/common/component/Buffer.scala @@ -71,7 +71,7 @@ class Buffer(val owner: Buffer.Owner) extends api.network.Environment { def resolution_=(value: (Int, Int)) = { val (w, h) = value val (mw, mh) = maxResolution - if (w < 1 || w > mw || h < 1 || h > mh) + if (w < 1 || h < 1 || w > mw || h > mw || h * w > mw * mh) throw new IllegalArgumentException("unsupported resolution") if (buffer.size = value) { if (node != null) { diff --git a/src/main/scala/li/cil/oc/server/component/GraphicsCard.scala b/src/main/scala/li/cil/oc/server/component/GraphicsCard.scala index 0a919c5d1..76e810fa1 100644 --- a/src/main/scala/li/cil/oc/server/component/GraphicsCard.scala +++ b/src/main/scala/li/cil/oc/server/component/GraphicsCard.scala @@ -123,8 +123,11 @@ abstract class GraphicsCard extends ManagedComponent { val w = args.checkInteger(0) val h = args.checkInteger(1) val (mw, mh) = maxResolution - if (w > 0 && h > 0 && w <= mw && h <= mh) screen(s => result(s.resolution = (w, h))) - else throw new IllegalArgumentException("unsupported resolution") + // Even though the buffer itself checks this again, we need this here for + // the minimum of screen and GPU resolution. + if (w < 1 || h < 1 || w > mw || h > mw || h * w > mw * mh) + throw new IllegalArgumentException("unsupported resolution") + screen(s => result(s.resolution = (w, h))) } @Callback(direct = true) From 73cbe3127be49140f28b81ec85ca92ece3f7a089 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Mon, 7 Apr 2014 17:20:26 +0200 Subject: [PATCH 4/4] Fixed memory slot checks. Added creative tier case with all max-tier slots, closes #171. This case also generates an infinite amount of energy. --- .../assets/opencomputers/lang/de_DE.lang | 1 + .../assets/opencomputers/lang/en_US.lang | 1 + src/main/scala/li/cil/oc/Blocks.scala | 5 ++++- .../scala/li/cil/oc/common/block/Case.scala | 9 ++++++-- .../li/cil/oc/common/container/Case.scala | 6 ++--- .../li/cil/oc/common/tileentity/Case.scala | 22 ++++++++++++++++++- .../li/cil/oc/server/driver/item/Memory.scala | 4 ++-- src/main/scala/li/cil/oc/util/Color.scala | 2 +- 8 files changed, 40 insertions(+), 10 deletions(-) diff --git a/src/main/resources/assets/opencomputers/lang/de_DE.lang b/src/main/resources/assets/opencomputers/lang/de_DE.lang index d329c9cb9..2bf07739c 100644 --- a/src/main/resources/assets/opencomputers/lang/de_DE.lang +++ b/src/main/resources/assets/opencomputers/lang/de_DE.lang @@ -9,6 +9,7 @@ oc:tile.Capacitor.name=Kondensator oc:tile.Case0.name=Computergehäuse (Stufe 1) oc:tile.Case1.name=Computergehäuse (Stufe 2) oc:tile.Case2.name=Computergehäuse (Stufe 3) +oc:tile.Case3.name=Computergehäuse (Creative) oc:tile.Charger.name=Ladestation oc:tile.DiskDrive.name=Diskettenlaufwerk oc:tile.Keyboard.name=Tastatur diff --git a/src/main/resources/assets/opencomputers/lang/en_US.lang b/src/main/resources/assets/opencomputers/lang/en_US.lang index 9f7eb1283..026e5a023 100644 --- a/src/main/resources/assets/opencomputers/lang/en_US.lang +++ b/src/main/resources/assets/opencomputers/lang/en_US.lang @@ -9,6 +9,7 @@ oc:tile.Capacitor.name=Capacitor oc:tile.Case0.name=Computer Case (Tier 1) oc:tile.Case1.name=Computer Case (Tier 2) oc:tile.Case2.name=Computer Case (Tier 3) +oc:tile.Case3.name=Computer Case (Creative) oc:tile.Charger.name=Charger oc:tile.DiskDrive.name=Disk Drive oc:tile.Keyboard.name=Keyboard diff --git a/src/main/scala/li/cil/oc/Blocks.scala b/src/main/scala/li/cil/oc/Blocks.scala index 0b6b4282f..47531b852 100644 --- a/src/main/scala/li/cil/oc/Blocks.scala +++ b/src/main/scala/li/cil/oc/Blocks.scala @@ -18,7 +18,7 @@ object Blocks { var cable: Cable = _ var capacitor: Capacitor = _ var charger: Charger = _ - var case1, case2, case3: Case = _ + var case1, case2, case3, case4: Case = _ var diskDrive: DiskDrive = _ var keyboard: Keyboard = _ var hologram: Hologram = _ @@ -103,6 +103,9 @@ object Blocks { hologram = Recipes.addBlockDelegate(new Hologram(blockSpecial), "hologram") wirelessRouter = Recipes.addBlockDelegate(new WirelessRouter(blockSimple), "wirelessRouter") + // v1.2.6 + case4 = new Case.TierCreative(blockSimpleWithRedstone) + // Initialize API. api.Blocks.AccessPoint = wirelessRouter.createItemStack() api.Blocks.Adapter = adapter.createItemStack() diff --git a/src/main/scala/li/cil/oc/common/block/Case.scala b/src/main/scala/li/cil/oc/common/block/Case.scala index 5e8c54083..b143541a1 100644 --- a/src/main/scala/li/cil/oc/common/block/Case.scala +++ b/src/main/scala/li/cil/oc/common/block/Case.scala @@ -21,7 +21,7 @@ abstract class Case(val parent: SimpleDelegator) extends RedstoneAware with Simp def tier: Int - override def rarity = Array(EnumRarity.common, EnumRarity.uncommon, EnumRarity.rare).apply(tier) + override def rarity = Array(EnumRarity.common, EnumRarity.uncommon, EnumRarity.rare, EnumRarity.epic).apply(tier) @SideOnly(Side.CLIENT) override def color = Color.byTier(tier) @@ -30,7 +30,8 @@ abstract class Case(val parent: SimpleDelegator) extends RedstoneAware with Simp val slots = tier match { case 0 => "2/1/1" case 1 => "2/2/2" - case 2 => "3/2/3" + case 2 | 3 => "3/2/3" + case _ => "0/0/0" } tooltip.addAll(Tooltip.get("Case", slots)) } @@ -118,4 +119,8 @@ object Case { def tier = 2 } + class TierCreative(parent: SimpleDelegator) extends Case(parent) { + def tier = 3 + } + } diff --git a/src/main/scala/li/cil/oc/common/container/Case.scala b/src/main/scala/li/cil/oc/common/container/Case.scala index 1895fc247..8d2e4eb05 100644 --- a/src/main/scala/li/cil/oc/common/container/Case.scala +++ b/src/main/scala/li/cil/oc/common/container/Case.scala @@ -5,7 +5,7 @@ import li.cil.oc.common.tileentity import net.minecraft.entity.player.{EntityPlayer, InventoryPlayer} class Case(playerInventory: InventoryPlayer, computer: tileentity.Case) extends Player(playerInventory, computer) { - for (i <- 0 to (if (computer.tier == 2) 2 else 1)) { + for (i <- 0 to (if (computer.tier >= 2) 2 else 1)) { addSlotToContainer(98, 16 + i * slotSize, api.driver.Slot.Card, computer.maxComponentTierForSlot(getInventory.size)) } @@ -17,11 +17,11 @@ class Case(playerInventory: InventoryPlayer, computer: tileentity.Case) extends addSlotToContainer(142, 16 + i * slotSize, api.driver.Slot.HardDiskDrive, computer.maxComponentTierForSlot(getInventory.size)) } - if (computer.tier == 2) { + if (computer.tier >= 2) { addSlotToContainer(142, 16 + 2 * slotSize, api.driver.Slot.Disk) } - addSlotToContainer(120, 16, api.driver.Slot.Processor, computer.tier) + addSlotToContainer(120, 16, api.driver.Slot.Processor, computer.maxComponentTierForSlot(getInventory.size)) if (computer.tier == 0) { addSlotToContainer(120, 16 + 2 * slotSize, api.driver.Slot.Memory, computer.maxComponentTierForSlot(getInventory.size)) diff --git a/src/main/scala/li/cil/oc/common/tileentity/Case.scala b/src/main/scala/li/cil/oc/common/tileentity/Case.scala index 599e0f589..a711f54d8 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Case.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Case.scala @@ -52,10 +52,18 @@ class Case(var tier: Int, val isRemote: Boolean) extends traits.PowerAcceptor wi case _ => false } + override def updateEntity() { + if (tier == 3 && isServer && world.getWorldTime % Settings.get.tickFrequency == 0) { + // Creative case, make it generate power. + node.asInstanceOf[Connector].changeBuffer(Double.PositiveInfinity) + } + super.updateEntity() + } + // ----------------------------------------------------------------------- // override def readFromNBT(nbt: NBTTagCompound) { - tier = nbt.getByte(Settings.namespace + "tier") max 0 min 2 + tier = nbt.getByte(Settings.namespace + "tier") max 0 min 3 color = Color.byTier(tier) super.readFromNBT(nbt) recomputeMaxComponents() @@ -79,6 +87,7 @@ class Case(var tier: Int, val isRemote: Boolean) extends traits.PowerAcceptor wi case 0 => 6 case 1 => 7 case 2 => 9 + case 3 => 9 case _ => 0 } @@ -114,6 +123,16 @@ class Case(var tier: Int, val isRemote: Boolean) extends traits.PowerAcceptor wi case (7, Some(driver)) => driver.slot(stack) == Slot.Disk case (8, Some(driver)) => driver.slot(stack) == Slot.Processor && driver.tier(stack) <= maxComponentTierForSlot(slot) case _ => false // Invalid slot. + + } + case 3 => (slot, Registry.itemDriverFor(stack)) match { + case (_, None) => false // Invalid item. + case (0 | 1 | 2, Some(driver)) => driver.slot(stack) == Slot.Card + case (3 | 4, Some(driver)) => driver.slot(stack) == Slot.Memory + case (5 | 6, Some(driver)) => driver.slot(stack) == Slot.HardDiskDrive + case (7, Some(driver)) => driver.slot(stack) == Slot.Disk + case (8, Some(driver)) => driver.slot(stack) == Slot.Processor + case _ => false // Invalid slot. } case _ => false } @@ -139,6 +158,7 @@ class Case(var tier: Int, val isRemote: Boolean) extends traits.PowerAcceptor wi case 8 => 2 case _ => -1 // Invalid slot. } + case 3 => 2 case _ => -1 } } \ No newline at end of file diff --git a/src/main/scala/li/cil/oc/server/driver/item/Memory.scala b/src/main/scala/li/cil/oc/server/driver/item/Memory.scala index 6f9d4ff55..bc123ef5b 100644 --- a/src/main/scala/li/cil/oc/server/driver/item/Memory.scala +++ b/src/main/scala/li/cil/oc/server/driver/item/Memory.scala @@ -13,7 +13,7 @@ object Memory extends Item with driver.Memory { case _ => 0 } - override def worksWith(stack: ItemStack) = isOneOf(stack, Items.ram1, Items.ram2, Items.ram3, Items.ram4, Items.ram5) + override def worksWith(stack: ItemStack) = isOneOf(stack, Items.ram1, Items.ram2, Items.ram3, Items.ram4, Items.ram5, Items.ram6) override def createEnvironment(stack: ItemStack, container: MCTileEntity) = null @@ -21,7 +21,7 @@ object Memory extends Item with driver.Memory { override def tier(stack: ItemStack) = Items.multi.subItem(stack) match { - case Some(memory: item.Memory) => (memory.tier + 1) / 2 + case Some(memory: item.Memory) => memory.tier / 2 case _ => 0 } } diff --git a/src/main/scala/li/cil/oc/util/Color.scala b/src/main/scala/li/cil/oc/util/Color.scala index 1a97b70d9..7e1bb435e 100644 --- a/src/main/scala/li/cil/oc/util/Color.scala +++ b/src/main/scala/li/cil/oc/util/Color.scala @@ -47,7 +47,7 @@ object Color { "dyeOrange" -> Orange, "dyeWhite" -> White) - val byTier = Array(LightGray, Yellow, Cyan) + val byTier = Array(LightGray, Yellow, Cyan, Magenta) def isDye(stack: ItemStack) = byOreName.contains(OreDictionary.getOreName(OreDictionary.getOreID(stack)))