diff --git a/assets/opencomputers/lang/de_DE.lang b/assets/opencomputers/lang/de_DE.lang index cbfde9276..29561c878 100644 --- a/assets/opencomputers/lang/de_DE.lang +++ b/assets/opencomputers/lang/de_DE.lang @@ -2,9 +2,9 @@ oc:block.Adapter.name=Adapter oc:block.Cable.name=Kabel oc:block.Capacitor.name=Kondensator -oc:block.CaseAdvanced.name=Hochwertiges Gehäuse -oc:block.CaseBasic.name=Einfaches Gehäuse -oc:block.CaseProfessional.name=Professionelles Gehäuse +oc:block.Case0.name=Einfaches Gehäuse +oc:block.Case1.name=Hochwertiges Gehäuse +oc:block.Case2.name=Ausgezeichnetes Gehäuse oc:block.Charger.name=Ladestation oc:block.DiskDrive.name=Diskettenlaufwerk oc:block.Keyboard.name=Tastatur @@ -13,33 +13,37 @@ oc:block.PowerDistributor.name=Stromverteiler oc:block.Robot.name=Roboter oc:block.RobotAfterimage.name=Roboter oc:block.Router.name=Router -oc:block.ScreenAdvanced.name=Hochwertiger Bildschirm -oc:block.ScreenBasic.name=Einfacher Bildschirm -oc:block.ScreenProfessional.name=Professioneller Bildschirm +oc:block.Screen0.name=Einfacher Bildschirm +oc:block.Screen1.name=Hochwertiger Bildschirm +oc:block.Screen2.name=Ausgezeichneter Bildschirm # Items +oc:item.ALU.name=Arithmetisch-logische Einheit (ALU) oc:item.Analyzer.name=Messgerät -oc:item.ArithmeticLogicUnit.name=Arithmetisch-logische Einheit (ALU) oc:item.ArrowKeys.name=Pfeiltasten oc:item.ButtonGroup.name=Tastengruppe -oc:item.CircuitBoard.name=Basis Platte +oc:item.CardBase.name=Kartenbasis +oc:item.CircuitBoard.name=Leiterplatte oc:item.ControlUnit.name=Steuerwerk (CU) oc:item.CPU.name=Hauptprozessor (CPU) -oc:item.Card.name=Karte -oc:item.Crafting.name=Crafting +oc:item.Crafting.name=Crafting Upgrade oc:item.CuttingWire.name=Schneidedraht -oc:item.FloppyDisk.name=Diskette -oc:item.Generator.name=Generator -oc:item.GraphicsCardAdvanced.name=Hochwertige Grafikkarte -oc:item.GraphicsCardBasic.name=Einfache Grafikkarte -oc:item.GraphicsCardProfessional.name=Professionelle Grafikkarte +oc:item.Disk.name=Platte +oc:item.Floppy.name=Diskette +oc:item.Generator.name=Generator Upgrade +oc:item.GraphicsCard0.name=Einfache Grafikkarte +oc:item.GraphicsCard1.name=Hochwertige Grafikkarte +oc:item.GraphicsCard2.name=Ausgezeichnete Grafikkarte oc:item.HardDiskDrive.name=Festplatte oc:item.IronNugget.name=Eisennugget oc:item.Memory.name=Speicher +oc:item.Microchip0.name=Einfacher Microchip +oc:item.Microchip1.name=Hochwertiger Microchip +oc:item.Microchip2.name=Ausgezeichneter Microchip oc:item.NetworkCard.name=Netzwerkkarte oc:item.NumPad.name=Ziffernblock -oc:item.PrintedCircuitBoard.name=Leiterplatte (PCB) -oc:item.RawCircuitBoard.name=Rohe Basis Platte +oc:item.PrintedCircuitBoard.name=Gedruckte Leiterplatte (PCB) +oc:item.RawCircuitBoard.name=Leiterplattenrohling oc:item.RedstoneCard.name=Redstonekarte oc:item.Transistor.name=Transistor oc:item.WirelessNetworkCard.name=Drahtlosnetzwerkkarte @@ -52,6 +56,7 @@ oc:gui.Analyzer.RobotName=Name oc:gui.Analyzer.RobotOwner=Besitzer oc:gui.Analyzer.StoredEnergy=Gespeicherte Energie oc:gui.Analyzer.TotalEnergy=Insgesamt gespeicherte Energie +oc:gui.Analyzer.Users=Benutzer oc:gui.Robot.Power=Energie oc:gui.Robot.TurnOff=Ausschalten oc:gui.Robot.TurnOn=Einschalten diff --git a/assets/opencomputers/lang/en_US.lang b/assets/opencomputers/lang/en_US.lang index 273cf59fa..4a254cbe7 100644 --- a/assets/opencomputers/lang/en_US.lang +++ b/assets/opencomputers/lang/en_US.lang @@ -6,9 +6,9 @@ oc:block.Adapter.name=Adapter oc:block.Cable.name=Cable oc:block.Capacitor.name=Capacitor -oc:block.CaseAdvanced.name=Advanced Case -oc:block.CaseBasic.name=Basic Case -oc:block.CaseProfessional.name=Professional Case +oc:block.Case0.name=Basic Case +oc:block.Case1.name=Advanced Case +oc:block.Case2.name=Superior Case oc:block.Charger.name=Charger oc:block.DiskDrive.name=Disk Drive oc:block.Keyboard.name=Keyboard @@ -17,29 +17,33 @@ oc:block.PowerDistributor.name=Power Distributor oc:block.Robot.name=Robot oc:block.RobotAfterimage.name=Robot oc:block.Router.name=Router -oc:block.ScreenAdvanced.name=Advanced Screen -oc:block.ScreenBasic.name=Basic Screen -oc:block.ScreenProfessional.name=Professional Screen +oc:block.Screen0.name=Basic Screen +oc:block.Screen1.name=Advanced Screen +oc:block.Screen2.name=Superior Screen # Items +oc:item.ALU.name=Arithmetic Logic Unit (ALU) oc:item.Analyzer.name=Analyzer -oc:item.ArithmeticLogicUnit.name=Arithmetic Logic Unit (ALU) oc:item.ArrowKeys.name=Arrow Keys oc:item.ButtonGroup.name=Button Group +oc:item.CardBase.name=Card Base oc:item.CircuitBoard.name=Circuit Board oc:item.ControlUnit.name=Control Unit (CU) oc:item.CPU.name=Central Processing Unit (CPU) -oc:item.Card.name=Card -oc:item.Crafting.name=Crafting +oc:item.Crafting.name=Crafting Upgrade oc:item.CuttingWire.name=Cutting Wire +oc:item.Disk.name=Disk Platter oc:item.FloppyDisk.name=Floppy Disk -oc:item.Generator.name=Generator -oc:item.GraphicsCardAdvanced.name=Advanced Graphics Card -oc:item.GraphicsCardBasic.name=Basic Graphics Card -oc:item.GraphicsCardProfessional.name=Professional Graphics Card +oc:item.Generator.name=Generator Upgrade +oc:item.GraphicsCard0.name=Basic Graphics Card +oc:item.GraphicsCard1.name=Advanced Graphics Card +oc:item.GraphicsCard2.name=Superior Graphics Card oc:item.HardDiskDrive.name=Hard Disk Drive oc:item.IronNugget.name=Iron Nugget oc:item.Memory.name=Memory +oc:item.Microchip0.name=Simple Microchip +oc:item.Microchip1.name=Advanced Microchip +oc:item.Microchip2.name=Superior Microchip oc:item.NetworkCard.name=Network Card oc:item.NumPad.name=Numeric Keypad oc:item.PrintedCircuitBoard.name=Printed Circuit Board (PCB) diff --git a/assets/opencomputers/lua/rom/bin/lua.lua b/assets/opencomputers/lua/rom/bin/lua.lua index e77fdde4f..770903c9d 100644 --- a/assets/opencomputers/lua/rom/bin/lua.lua +++ b/assets/opencomputers/lua/rom/bin/lua.lua @@ -16,7 +16,7 @@ while term.isAvailable() do local expression = load("return " .. command, "=stdin", "t", env) local code = expression or statement if code then - local result = table.pack(shell.execute(code)) + local result = table.pack(pcall(code)) if not result[1] or result.n > 1 then print(table.unpack(result, 2, result.n)) end diff --git a/assets/opencomputers/lua/rom/bin/pastebin.lua b/assets/opencomputers/lua/rom/bin/pastebin.lua new file mode 100644 index 000000000..82766d634 --- /dev/null +++ b/assets/opencomputers/lua/rom/bin/pastebin.lua @@ -0,0 +1,57 @@ +local args, options = shell.parse(...) +if #args < 2 then + print("Usage: pastebin [-f] ") + print(" -f: Force overwriting existing files.") + return +end + +local m = component.modem +if not m or not m.isWireless() then + print("no primary wireless modem found") + return +end + +if not m.isHttpEnabled() then + print("http support is not enabled") + return +end + +local id = args[1] +local filename = shell.resolve(args[2]) + +if fs.exists(filename) then + if not options.f or not os.remove(filename) then + print("file already exists") + return + end +end + +local url = "http://pastebin.com/raw.php?i=" .. id +local result, reason = m.send(url) +if not result then + print("failed sending request: " .. reason) + return +end + +local f, reason = io.open(filename, "w") +if not f then + print("failed opening file for writing: " .. reason) + return +end + +repeat + local _, responseUrl, result, reason = event.pull("http_response") + if responseUrl == url then + if not result and reason then + print("failed fetching data: " .. reason) + f:close() + return + end + if result then + f:write(result) + end + end +until not result + +f:close() +print("saved data to " .. filename) diff --git a/assets/opencomputers/lua/rom/lib/event.lua b/assets/opencomputers/lua/rom/lib/event.lua index 76e3dd202..98391adea 100644 --- a/assets/opencomputers/lua/rom/lib/event.lua +++ b/assets/opencomputers/lua/rom/lib/event.lua @@ -1,4 +1,5 @@ local event, listeners, timers = {}, {}, {} +local lastInterrupt = -math.huge local function matches(signal, name, filter) if name and not (type(signal[1]) == "string" and signal[1]:match(name)) @@ -144,6 +145,7 @@ function event.pull(...) end tick() if event.shouldInterrupt() then + lastInterrupt = os.uptime() error("interrupted", 0) end if not (seconds or hasFilter) or matches(signal, name, filter) then @@ -153,7 +155,8 @@ function event.pull(...) end function event.shouldInterrupt() - return keyboard.isControlDown() and + return os.uptime() - lastInterrupt > 1 and + keyboard.isControlDown() and keyboard.isAltDown() and keyboard.isKeyDown(keyboard.keys.c) end diff --git a/assets/opencomputers/lua/rom/lib/filesystem.lua b/assets/opencomputers/lua/rom/lib/filesystem.lua index c45601f17..514d81a15 100644 --- a/assets/opencomputers/lua/rom/lib/filesystem.lua +++ b/assets/opencomputers/lua/rom/lib/filesystem.lua @@ -153,6 +153,11 @@ function filesystem.mount(fs, path) end end +function filesystem.path(path) + local parts = segments(path) + return table.concat(parts, "/", 1, #parts - 1) .. "/" +end + function filesystem.name(path) local parts = segments(path) return parts[#parts] @@ -410,7 +415,7 @@ local function onComponentAdded(_, address, componentType) name = filesystem.concat("/mnt", name) filesystem.mount(proxy, name) if isAutorunEnabled then - shell.execute(filesystem.concat(name, "autorun"), proxy) + os.execute(filesystem.concat(name, "autorun"), proxy) end end end diff --git a/assets/opencomputers/lua/rom/lib/os.lua b/assets/opencomputers/lua/rom/lib/os.lua index 1c7546ed5..a791765e3 100644 --- a/assets/opencomputers/lua/rom/lib/os.lua +++ b/assets/opencomputers/lua/rom/lib/os.lua @@ -18,15 +18,11 @@ os.execute = function(command) for part in tail:gmatch("%S+") do table.insert(args, part) end - return shell.execute(head, table.unpack(args)) + return shell.execute(head, _ENV, table.unpack(args)) end function os.exit() - local result, reason = shell.kill(coroutine.running()) - if result then - coroutine.yield() -- never returns - end - error(reason, 2) + error("terminated", 0) end os.remove = fs.remove diff --git a/assets/opencomputers/lua/rom/lib/shell.lua b/assets/opencomputers/lua/rom/lib/shell.lua index f2cdb8b67..2a2758492 100644 --- a/assets/opencomputers/lua/rom/lib/shell.lua +++ b/assets/opencomputers/lua/rom/lib/shell.lua @@ -1,8 +1,8 @@ local shell = {} local cwd = "/" local path = {"/bin/", "/usr/bin/", "/home/bin/"} -local aliases = {dir="ls", move="mv", rename="mv", copy="cp", del="rm", - md="mkdir", cls="clear", more="less", rs="redstone", +local aliases = {dir="ls", list="ls", move="mv", rename="mv", copy="cp", + del="rm", md="mkdir", cls="clear", more="less", rs="redstone", view="edit -r"} local running = {} @@ -77,65 +77,6 @@ function shell.setWorkingDirectory(dir) end end -function shell.execute(program, ...) - if type(program) ~= "function" then - local where, reason = shell.resolve(program, "lua") - if not where then - return nil, reason - end - local code, reason = loadfile(where, "t", setmetatable({}, {__index=_ENV})) - if not code then - return nil, reason - end - program = code - end - local co, args, result = coroutine.create(program), table.pack(true, ...), nil - running[co] = true - while running[co] and args[1] do - result = table.pack(coroutine.resume(co, table.unpack(args, 2, args.n))) - if coroutine.status(co) ~= "dead" then - -- Emulate CC behavior by making yields a filtered event.wait. - if type(result[2]) == "string" then - args = table.pack(pcall(event.pull, table.unpack(result, 2, result.n))) - else - args = {true, n=1} - end - else - break - end - end - running[co] = nil - if not args[1] then - return false, "interrupted" - end - return table.unpack(result, 1, result.n) -end - -function shell.kill(co) - if running[co] ~= nil then - running[co] = nil - return true - end - return nil, "not a program thread" -end - -function shell.parse(...) - local params = table.pack(...) - local args = {} - local options = {} - for i = 1, params.n do - local param = params[i] - if unicode.sub(param, 1, 1) == "-" then - for j = 2, unicode.len(param) do - options[unicode.sub(param, j, j)] = true - end - else - table.insert(args, param) - end - end - return args, options -end - function shell.getPath() return table.concat(path, ":") end @@ -170,6 +111,59 @@ function shell.resolve(path, ext) end end +function shell.execute(program, env, ...) + checkArg(1, program, "string") + local filename, reason = shell.resolve(program, "lua") + if not filename then + return nil, reason + end + local code, reason = loadfile(filename, "t", setmetatable({}, {__index=env})) + if not code then + return nil, reason + end + local co, args, result = coroutine.create(code), table.pack(true, ...), nil + table.insert(running, filename) + -- Emulate CC behavior by making yields a filtered event.pull() + repeat + result = table.pack(coroutine.resume(co, table.unpack(args, 2, args.n))) + if coroutine.status(co) == "dead" then + break + end + if type(result[2]) == "string" then + args = table.pack(pcall(event.pull, table.unpack(result, 2, result.n))) + else + args = {true, n=1} + end + until not args[1] + table.remove(running) + if not args[1] then + return false, args[2] + end + return table.unpack(result, 1, result.n) +end + +function shell.parse(...) + local params = table.pack(...) + local args = {} + local options = {} + for i = 1, params.n do + local param = params[i] + if unicode.sub(param, 1, 1) == "-" then + for j = 2, unicode.len(param) do + options[unicode.sub(param, j, j)] = true + end + else + table.insert(args, param) + end + end + return args, options +end + +function shell.running(level) + level = level or 1 + return running[1 + (#running - level)] +end + ------------------------------------------------------------------------------- _G.shell = shell diff --git a/assets/opencomputers/textures/items/gpu0.png b/assets/opencomputers/textures/items/card_graphics0.png similarity index 100% rename from assets/opencomputers/textures/items/gpu0.png rename to assets/opencomputers/textures/items/card_graphics0.png diff --git a/assets/opencomputers/textures/items/gpu1.png b/assets/opencomputers/textures/items/card_graphics1.png similarity index 100% rename from assets/opencomputers/textures/items/gpu1.png rename to assets/opencomputers/textures/items/card_graphics1.png diff --git a/assets/opencomputers/textures/items/gpu2.png b/assets/opencomputers/textures/items/card_graphics2.png similarity index 100% rename from assets/opencomputers/textures/items/gpu2.png rename to assets/opencomputers/textures/items/card_graphics2.png diff --git a/assets/opencomputers/textures/items/lancard.png b/assets/opencomputers/textures/items/card_lan.png similarity index 100% rename from assets/opencomputers/textures/items/lancard.png rename to assets/opencomputers/textures/items/card_lan.png diff --git a/assets/opencomputers/textures/items/rscard.png b/assets/opencomputers/textures/items/card_redstone.png similarity index 100% rename from assets/opencomputers/textures/items/rscard.png rename to assets/opencomputers/textures/items/card_redstone.png diff --git a/assets/opencomputers/textures/items/wlancard.png b/assets/opencomputers/textures/items/card_wlan.png similarity index 100% rename from assets/opencomputers/textures/items/wlancard.png rename to assets/opencomputers/textures/items/card_wlan.png diff --git a/assets/opencomputers/textures/items/pcb.png b/assets/opencomputers/textures/items/circuit_board_printed.png similarity index 100% rename from assets/opencomputers/textures/items/pcb.png rename to assets/opencomputers/textures/items/circuit_board_printed.png diff --git a/assets/opencomputers/textures/items/raw_circuit_board.png b/assets/opencomputers/textures/items/circuit_board_raw.png similarity index 100% rename from assets/opencomputers/textures/items/raw_circuit_board.png rename to assets/opencomputers/textures/items/circuit_board_raw.png diff --git a/assets/opencomputers/textures/items/disc.png b/assets/opencomputers/textures/items/disc.png deleted file mode 100644 index 09b989b92..000000000 Binary files a/assets/opencomputers/textures/items/disc.png and /dev/null differ diff --git a/assets/opencomputers/textures/items/disk.png b/assets/opencomputers/textures/items/disk.png index 58cf5bafb..09b989b92 100644 Binary files a/assets/opencomputers/textures/items/disk.png and b/assets/opencomputers/textures/items/disk.png differ diff --git a/assets/opencomputers/textures/items/disk_floppy.png b/assets/opencomputers/textures/items/disk_floppy.png new file mode 100644 index 000000000..58cf5bafb Binary files /dev/null and b/assets/opencomputers/textures/items/disk_floppy.png differ diff --git a/assets/opencomputers/textures/items/hdd0.png b/assets/opencomputers/textures/items/disk_harddrive0.png similarity index 100% rename from assets/opencomputers/textures/items/hdd0.png rename to assets/opencomputers/textures/items/disk_harddrive0.png diff --git a/assets/opencomputers/textures/items/hdd1.png b/assets/opencomputers/textures/items/disk_harddrive1.png similarity index 100% rename from assets/opencomputers/textures/items/hdd1.png rename to assets/opencomputers/textures/items/disk_harddrive1.png diff --git a/assets/opencomputers/textures/items/hdd2.png b/assets/opencomputers/textures/items/disk_harddrive2.png similarity index 100% rename from assets/opencomputers/textures/items/hdd2.png rename to assets/opencomputers/textures/items/disk_harddrive2.png diff --git a/assets/opencomputers/textures/items/arrow_keys.png b/assets/opencomputers/textures/items/keys_arrow.png similarity index 100% rename from assets/opencomputers/textures/items/arrow_keys.png rename to assets/opencomputers/textures/items/keys_arrow.png diff --git a/assets/opencomputers/textures/items/button_group.png b/assets/opencomputers/textures/items/keys_group.png similarity index 100% rename from assets/opencomputers/textures/items/button_group.png rename to assets/opencomputers/textures/items/keys_group.png diff --git a/assets/opencomputers/textures/items/numpad.png b/assets/opencomputers/textures/items/keys_numpad.png similarity index 100% rename from assets/opencomputers/textures/items/numpad.png rename to assets/opencomputers/textures/items/keys_numpad.png diff --git a/assets/opencomputers/textures/items/ram0.png b/assets/opencomputers/textures/items/memory0.png similarity index 100% rename from assets/opencomputers/textures/items/ram0.png rename to assets/opencomputers/textures/items/memory0.png diff --git a/assets/opencomputers/textures/items/ram1.png b/assets/opencomputers/textures/items/memory1.png similarity index 100% rename from assets/opencomputers/textures/items/ram1.png rename to assets/opencomputers/textures/items/memory1.png diff --git a/assets/opencomputers/textures/items/ram2.png b/assets/opencomputers/textures/items/memory2.png similarity index 100% rename from assets/opencomputers/textures/items/ram2.png rename to assets/opencomputers/textures/items/memory2.png diff --git a/assets/opencomputers/textures/items/chipset0.png b/assets/opencomputers/textures/items/microchip0.png similarity index 100% rename from assets/opencomputers/textures/items/chipset0.png rename to assets/opencomputers/textures/items/microchip0.png diff --git a/assets/opencomputers/textures/items/chipset1.png b/assets/opencomputers/textures/items/microchip1.png similarity index 100% rename from assets/opencomputers/textures/items/chipset1.png rename to assets/opencomputers/textures/items/microchip1.png diff --git a/assets/opencomputers/textures/items/chipset2.png b/assets/opencomputers/textures/items/microchip2.png similarity index 100% rename from assets/opencomputers/textures/items/chipset2.png rename to assets/opencomputers/textures/items/microchip2.png diff --git a/assets/opencomputers/textures/items/crafting.png b/assets/opencomputers/textures/items/upgrade_crafting.png similarity index 100% rename from assets/opencomputers/textures/items/crafting.png rename to assets/opencomputers/textures/items/upgrade_crafting.png diff --git a/assets/opencomputers/textures/items/generator.png b/assets/opencomputers/textures/items/upgrade_generator.png similarity index 100% rename from assets/opencomputers/textures/items/generator.png rename to assets/opencomputers/textures/items/upgrade_generator.png diff --git a/li/cil/oc/Items.scala b/li/cil/oc/Items.scala index abb1ec610..c0542b962 100644 --- a/li/cil/oc/Items.scala +++ b/li/cil/oc/Items.scala @@ -4,7 +4,7 @@ import cpw.mods.fml.common.registry.GameRegistry import li.cil.oc.common.item import net.minecraft.item.{Item, ItemStack} import net.minecraftforge.oredict.OreDictionary -import li.cil.oc.common.item.Disc +import li.cil.oc.common.item.Disk object Items { var multi: item.Delegator = null @@ -36,11 +36,11 @@ object Items { // ----------------------------------------------------------------------- // // Crafting - var card: item.Card = null + var card: item.CardBase = null var circuitBoardBody: item.CircuitBoard = null var printedCircuitBoard: item.PrintedCircuitBoard = null var ironCutter: item.CuttingWire = null - var chip1, chip2, chip3: item.Chip = null + var chip1, chip2, chip3: item.Microchip = null var numPad: item.NumPad = null var arrowKeys: item.ArrowKeys = null var buttonGroup: item.ButtonGroup = null @@ -51,7 +51,7 @@ object Items { var ironNugget: item.IronNugget = null var rawCircuitBoard: item.RawCircuitBoard = null - var disc: item.Disc = null + var disc: item.Disk = null def init() { @@ -76,15 +76,15 @@ object Items { wlan = new item.WirelessNetworkCard(multi) crafting = new item.Crafting(multi) - card = new item.Card(multi) + card = new item.CardBase(multi) circuitBoardBody = new item.CircuitBoard(multi) printedCircuitBoard = new item.PrintedCircuitBoard(multi) ironCutter = new item.CuttingWire(multi) - chip1 = new item.Chip(multi, 0) - chip2 = new item.Chip(multi, 1) - chip3 = new item.Chip(multi, 2) + chip1 = new item.Microchip(multi, 0) + chip2 = new item.Microchip(multi, 1) + chip3 = new item.Microchip(multi, 2) numPad = new item.NumPad(multi) arrowKeys = new item.ArrowKeys(multi) @@ -105,6 +105,6 @@ object Items { OreDictionary.registerOre("potionPoison", new ItemStack(Item.potion, 1, 16452)) rawCircuitBoard = new item.RawCircuitBoard(multi) - disc = new item.Disc(multi) + disc = new item.Disk(multi) } } \ No newline at end of file diff --git a/li/cil/oc/common/block/Case.scala b/li/cil/oc/common/block/Case.scala index f17c1e18f..0be20709f 100644 --- a/li/cil/oc/common/block/Case.scala +++ b/li/cil/oc/common/block/Case.scala @@ -13,6 +13,7 @@ import net.minecraft.world.World import net.minecraftforge.common.ForgeDirection abstract class Case(val parent: SimpleDelegator) extends Computer with SimpleDelegate { + val unlocalizedName = "Case" + tier def tier: Int @@ -88,24 +89,18 @@ abstract class Case(val parent: SimpleDelegator) extends Computer with SimpleDel object Case { class Tier1(parent: SimpleDelegator) extends Case(parent) { - val unlocalizedName = "CaseBasic" - def tier = 0 override def color = 0x7F7F7F } class Tier2(parent: SimpleDelegator) extends Case(parent) { - val unlocalizedName = "CaseAdvanced" - def tier = 1 override def color = 0xFFFF66 } class Tier3(parent: SimpleDelegator) extends Case(parent) { - val unlocalizedName = "CaseProfessional" - def tier = 2 override def color = 0x66FFFF diff --git a/li/cil/oc/common/block/Screen.scala b/li/cil/oc/common/block/Screen.scala index a029d2145..f35a3b273 100644 --- a/li/cil/oc/common/block/Screen.scala +++ b/li/cil/oc/common/block/Screen.scala @@ -14,6 +14,7 @@ import net.minecraft.world.World import net.minecraftforge.common.ForgeDirection abstract class Screen(val parent: SimpleDelegator) extends SimpleDelegate { + val unlocalizedName = "Screen" + tier def tier: Int @@ -297,24 +298,18 @@ abstract class Screen(val parent: SimpleDelegator) extends SimpleDelegate { object Screen { class Tier1(parent: SimpleDelegator) extends Screen(parent) { - val unlocalizedName = "ScreenBasic" - def tier = 0 override def color = 0x7F7F7F } class Tier2(parent: SimpleDelegator) extends Screen(parent) { - val unlocalizedName = "ScreenAdvanced" - def tier = 1 override def color = 0xFFFF66 } class Tier3(parent: SimpleDelegator) extends Screen(parent) { - val unlocalizedName = "ScreenProfessional" - def tier = 2 override def color = 0x66FFFF diff --git a/li/cil/oc/common/item/Alu.scala b/li/cil/oc/common/item/Alu.scala index 394203828..4ae6a7fee 100644 --- a/li/cil/oc/common/item/Alu.scala +++ b/li/cil/oc/common/item/Alu.scala @@ -4,7 +4,7 @@ import li.cil.oc.Settings import net.minecraft.client.renderer.texture.IconRegister class ALU(val parent: Delegator) extends Delegate { - val unlocalizedName = "ArithmeticLogicUnit" + val unlocalizedName = "ALU" override def registerIcons(iconRegister: IconRegister) { super.registerIcons(iconRegister) diff --git a/li/cil/oc/common/item/ArrowKeys.scala b/li/cil/oc/common/item/ArrowKeys.scala index 8d0c769ff..4eec99441 100644 --- a/li/cil/oc/common/item/ArrowKeys.scala +++ b/li/cil/oc/common/item/ArrowKeys.scala @@ -9,6 +9,6 @@ class ArrowKeys(val parent: Delegator) extends Delegate { override def registerIcons(iconRegister: IconRegister) { super.registerIcons(iconRegister) - icon = iconRegister.registerIcon(Settings.resourceDomain + ":arrow_keys") + icon = iconRegister.registerIcon(Settings.resourceDomain + ":keys_arrow") } } diff --git a/li/cil/oc/common/item/ButtonGroup.scala b/li/cil/oc/common/item/ButtonGroup.scala index fd312a60f..11627d456 100644 --- a/li/cil/oc/common/item/ButtonGroup.scala +++ b/li/cil/oc/common/item/ButtonGroup.scala @@ -9,6 +9,6 @@ class ButtonGroup(val parent: Delegator) extends Delegate { override def registerIcons(iconRegister: IconRegister) { super.registerIcons(iconRegister) - icon = iconRegister.registerIcon(Settings.resourceDomain + ":button_group") + icon = iconRegister.registerIcon(Settings.resourceDomain + ":keys_group") } } diff --git a/li/cil/oc/common/item/Card.scala b/li/cil/oc/common/item/CardBase.scala similarity index 76% rename from li/cil/oc/common/item/Card.scala rename to li/cil/oc/common/item/CardBase.scala index 6453c43d9..7ef69e9d5 100644 --- a/li/cil/oc/common/item/Card.scala +++ b/li/cil/oc/common/item/CardBase.scala @@ -3,8 +3,8 @@ package li.cil.oc.common.item import li.cil.oc.Settings import net.minecraft.client.renderer.texture.IconRegister -class Card(val parent: Delegator) extends Delegate { - val unlocalizedName = "Card" +class CardBase(val parent: Delegator) extends Delegate { + val unlocalizedName = "CardBase" override def registerIcons(iconRegister: IconRegister) { super.registerIcons(iconRegister) diff --git a/li/cil/oc/common/item/Crafting.scala b/li/cil/oc/common/item/Crafting.scala index 3b843758b..70620f90d 100644 --- a/li/cil/oc/common/item/Crafting.scala +++ b/li/cil/oc/common/item/Crafting.scala @@ -18,6 +18,6 @@ class Crafting(val parent: Delegator) extends Delegate { override def registerIcons(iconRegister: IconRegister) = { super.registerIcons(iconRegister) - icon = iconRegister.registerIcon(Settings.resourceDomain + ":crafting") + icon = iconRegister.registerIcon(Settings.resourceDomain + ":upgrade_crafting") } } diff --git a/li/cil/oc/common/item/Disc.scala b/li/cil/oc/common/item/Disk.scala similarity index 75% rename from li/cil/oc/common/item/Disc.scala rename to li/cil/oc/common/item/Disk.scala index 33d5ade58..494581aed 100644 --- a/li/cil/oc/common/item/Disc.scala +++ b/li/cil/oc/common/item/Disk.scala @@ -3,12 +3,12 @@ package li.cil.oc.common.item import li.cil.oc.Settings import net.minecraft.client.renderer.texture.IconRegister -class Disc(val parent: Delegator) extends Delegate { - val unlocalizedName = "Disc" +class Disk(val parent: Delegator) extends Delegate { + val unlocalizedName = "Disk" override def registerIcons(iconRegister: IconRegister) { super.registerIcons(iconRegister) - icon = iconRegister.registerIcon(Settings.resourceDomain + ":disc") + icon = iconRegister.registerIcon(Settings.resourceDomain + ":disk") } } diff --git a/li/cil/oc/common/item/FloppyDisk.scala b/li/cil/oc/common/item/FloppyDisk.scala index 3daaf2b1c..904d35314 100644 --- a/li/cil/oc/common/item/FloppyDisk.scala +++ b/li/cil/oc/common/item/FloppyDisk.scala @@ -22,6 +22,6 @@ class FloppyDisk(val parent: Delegator) extends Delegate { override def registerIcons(iconRegister: IconRegister) { super.registerIcons(iconRegister) - icon = iconRegister.registerIcon(Settings.resourceDomain + ":disk") + icon = iconRegister.registerIcon(Settings.resourceDomain + ":disk_floppy") } } diff --git a/li/cil/oc/common/item/Generator.scala b/li/cil/oc/common/item/Generator.scala index 669b96310..6c476a306 100644 --- a/li/cil/oc/common/item/Generator.scala +++ b/li/cil/oc/common/item/Generator.scala @@ -18,6 +18,6 @@ class Generator(val parent: Delegator) extends Delegate { override def registerIcons(iconRegister: IconRegister) = { super.registerIcons(iconRegister) - icon = iconRegister.registerIcon(Settings.resourceDomain + ":generator") + icon = iconRegister.registerIcon(Settings.resourceDomain + ":upgrade_generator") } } diff --git a/li/cil/oc/common/item/GraphicsCard.scala b/li/cil/oc/common/item/GraphicsCard.scala index 426d8e0e3..24f1d988d 100644 --- a/li/cil/oc/common/item/GraphicsCard.scala +++ b/li/cil/oc/common/item/GraphicsCard.scala @@ -9,7 +9,7 @@ import net.minecraft.item.ItemStack class GraphicsCard(val parent: Delegator, val tier: Int) extends Delegate { val baseName = "GraphicsCard" - val unlocalizedName = baseName + Array("Basic", "Advanced", "Professional").apply(tier) + val unlocalizedName = baseName + tier override def tooltipLines(stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) { val (w, h) = Settings.screenResolutionsByTier(tier) @@ -27,6 +27,6 @@ class GraphicsCard(val parent: Delegator, val tier: Int) extends Delegate { override def registerIcons(iconRegister: IconRegister) { super.registerIcons(iconRegister) - icon = iconRegister.registerIcon(Settings.resourceDomain + ":gpu" + tier) + icon = iconRegister.registerIcon(Settings.resourceDomain + ":card_graphics" + tier) } } \ No newline at end of file diff --git a/li/cil/oc/common/item/HardDiskDrive.scala b/li/cil/oc/common/item/HardDiskDrive.scala index 46d32b06e..816f3f95f 100644 --- a/li/cil/oc/common/item/HardDiskDrive.scala +++ b/li/cil/oc/common/item/HardDiskDrive.scala @@ -44,6 +44,6 @@ class HardDiskDrive(val parent: Delegator, val tier: Int) extends Delegate { override def registerIcons(iconRegister: IconRegister) { super.registerIcons(iconRegister) - icon = iconRegister.registerIcon(Settings.resourceDomain + ":hdd" + tier) + icon = iconRegister.registerIcon(Settings.resourceDomain + ":disk_harddrive" + tier) } } \ No newline at end of file diff --git a/li/cil/oc/common/item/Memory.scala b/li/cil/oc/common/item/Memory.scala index e73973556..493d6965e 100644 --- a/li/cil/oc/common/item/Memory.scala +++ b/li/cil/oc/common/item/Memory.scala @@ -15,6 +15,6 @@ class Memory(val parent: Delegator, val tier: Int) extends Delegate { override def registerIcons(iconRegister: IconRegister) { super.registerIcons(iconRegister) - icon = iconRegister.registerIcon(Settings.resourceDomain + ":ram" + tier) + icon = iconRegister.registerIcon(Settings.resourceDomain + ":memory" + tier) } } diff --git a/li/cil/oc/common/item/Chip.scala b/li/cil/oc/common/item/Microchip.scala similarity index 58% rename from li/cil/oc/common/item/Chip.scala rename to li/cil/oc/common/item/Microchip.scala index de19a96e2..5e9f0c684 100644 --- a/li/cil/oc/common/item/Chip.scala +++ b/li/cil/oc/common/item/Microchip.scala @@ -3,13 +3,13 @@ package li.cil.oc.common.item import li.cil.oc.Settings import net.minecraft.client.renderer.texture.IconRegister -class Chip(val parent: Delegator, val tier: Int) extends Delegate { - val baseName = "Chip" - val unlocalizedName = baseName + Array("Basic", "Advanced", "Professional").apply(tier) +class Microchip(val parent: Delegator, val tier: Int) extends Delegate { + val baseName = "Microchip" + val unlocalizedName = baseName + tier override def registerIcons(iconRegister: IconRegister) = { super.registerIcons(iconRegister) - icon = iconRegister.registerIcon(Settings.resourceDomain + ":chipset" + tier) + icon = iconRegister.registerIcon(Settings.resourceDomain + ":microchip" + tier) } } diff --git a/li/cil/oc/common/item/NetworkCard.scala b/li/cil/oc/common/item/NetworkCard.scala index 8f9a081ff..0886942c8 100644 --- a/li/cil/oc/common/item/NetworkCard.scala +++ b/li/cil/oc/common/item/NetworkCard.scala @@ -9,6 +9,6 @@ class NetworkCard(val parent: Delegator) extends Delegate { override def registerIcons(iconRegister: IconRegister) = { super.registerIcons(iconRegister) - icon = iconRegister.registerIcon(Settings.resourceDomain + ":lancard") + icon = iconRegister.registerIcon(Settings.resourceDomain + ":card_lan") } } diff --git a/li/cil/oc/common/item/Numpad.scala b/li/cil/oc/common/item/Numpad.scala index fd9390fb8..f8e430910 100644 --- a/li/cil/oc/common/item/Numpad.scala +++ b/li/cil/oc/common/item/Numpad.scala @@ -9,6 +9,6 @@ class NumPad(val parent: Delegator) extends Delegate { override def registerIcons(iconRegister: IconRegister) { super.registerIcons(iconRegister) - icon = iconRegister.registerIcon(Settings.resourceDomain + ":numpad") + icon = iconRegister.registerIcon(Settings.resourceDomain + ":keys_numpad") } } diff --git a/li/cil/oc/common/item/PrintedCircuitBoard.scala b/li/cil/oc/common/item/PrintedCircuitBoard.scala index 4a139492e..9f643f0f1 100644 --- a/li/cil/oc/common/item/PrintedCircuitBoard.scala +++ b/li/cil/oc/common/item/PrintedCircuitBoard.scala @@ -9,6 +9,6 @@ class PrintedCircuitBoard(val parent: Delegator) extends Delegate { override def registerIcons(iconRegister: IconRegister) { super.registerIcons(iconRegister) - icon = iconRegister.registerIcon(Settings.resourceDomain + ":pcb") + icon = iconRegister.registerIcon(Settings.resourceDomain + ":circuit_board_printed") } } diff --git a/li/cil/oc/common/item/RawCircuitBoard.scala b/li/cil/oc/common/item/RawCircuitBoard.scala index 27bf9c2be..aa74f03f0 100644 --- a/li/cil/oc/common/item/RawCircuitBoard.scala +++ b/li/cil/oc/common/item/RawCircuitBoard.scala @@ -9,6 +9,6 @@ class RawCircuitBoard(val parent: Delegator) extends Delegate { override def registerIcons(iconRegister: IconRegister) { super.registerIcons(iconRegister) - icon = iconRegister.registerIcon(Settings.resourceDomain + ":raw_circuit_board") + icon = iconRegister.registerIcon(Settings.resourceDomain + ":circuit_board_raw") } } diff --git a/li/cil/oc/common/item/RedstoneCard.scala b/li/cil/oc/common/item/RedstoneCard.scala index f94064b8d..33479c568 100644 --- a/li/cil/oc/common/item/RedstoneCard.scala +++ b/li/cil/oc/common/item/RedstoneCard.scala @@ -25,6 +25,6 @@ class RedstoneCard(val parent: Delegator) extends Delegate { override def registerIcons(iconRegister: IconRegister) { super.registerIcons(iconRegister) - icon = iconRegister.registerIcon(Settings.resourceDomain + ":rscard") + icon = iconRegister.registerIcon(Settings.resourceDomain + ":card_redstone") } } diff --git a/li/cil/oc/common/item/WirelessNetworkCard.scala b/li/cil/oc/common/item/WirelessNetworkCard.scala index 929e1248f..af903c397 100644 --- a/li/cil/oc/common/item/WirelessNetworkCard.scala +++ b/li/cil/oc/common/item/WirelessNetworkCard.scala @@ -18,6 +18,6 @@ class WirelessNetworkCard(val parent: Delegator) extends Delegate { override def registerIcons(iconRegister: IconRegister) = { super.registerIcons(iconRegister) - icon = iconRegister.registerIcon(Settings.resourceDomain + ":wlancard") + icon = iconRegister.registerIcon(Settings.resourceDomain + ":card_wlan") } } diff --git a/li/cil/oc/server/component/WirelessNetworkCard.scala b/li/cil/oc/server/component/WirelessNetworkCard.scala index c35d9ec6d..acffd2224 100644 --- a/li/cil/oc/server/component/WirelessNetworkCard.scala +++ b/li/cil/oc/server/component/WirelessNetworkCard.scala @@ -36,9 +36,13 @@ class WirelessNetworkCard(val owner: TileEntity) extends NetworkCard { override def isWireless(context: Context, args: Arguments): Array[AnyRef] = result(true) + @LuaCallback(value = "isHttpEnabled", direct = true) + def isHttpEnabled(context: Context, args: Arguments): Array[AnyRef] = result(Settings.get.httpEnabled) + override def send(context: Context, args: Arguments) = { val address = args.checkString(0) - if (Settings.get.httpEnabled && isValidInternetRequest(address)) { + if (isHttpRequest(address)) { + checkAddress(address) val post = if (args.isString(1)) Option(args.checkString(1)) else None WirelessNetworkCard.threadPool.submit(new Runnable { def run() = try { @@ -59,7 +63,20 @@ class WirelessNetworkCard(val owner: TileEntity) extends NetworkCard { http.setRequestMethod("GET") http.setDoOutput(false) } - context.signal("http_response", address, scala.io.Source.fromInputStream(http.getInputStream).getLines().mkString("\n")) + var part: Option[String] = None + for (line <- scala.io.Source.fromInputStream(http.getInputStream).getLines()) { + if ((part + line).length <= Settings.get.maxNetworkPacketSize) { + part = Some(part.getOrElse("") + line + "\n") + } + else { + context.signal("http_response", address, part.get) + part = None + } + } + context.signal("http_response", address, part.orNull) + if (part.isDefined) { + context.signal("http_response", address) + } } finally { http.disconnect() @@ -68,7 +85,10 @@ class WirelessNetworkCard(val owner: TileEntity) extends NetworkCard { } } catch { - case e: Throwable => context.signal("http_response", address, Unit, Option(e.getMessage).getOrElse(e.toString)) + case e: FileNotFoundException => + context.signal("http_response", address, Unit, "not found: " + Option(e.getMessage).getOrElse(e.toString)) + case e: Throwable => + context.signal("http_response", address, Unit, Option(e.getMessage).getOrElse(e.toString)) } }) result(true) @@ -111,20 +131,9 @@ class WirelessNetworkCard(val owner: TileEntity) extends NetworkCard { } } - private def isValidInternetRequest(address: String) = { + private def isHttpRequest(address: String) = { try { - val url = new URL(address) - val protocol = url.getProtocol - if (!protocol.matches("^https?$")) { - throw new Exception() - } - val host = Matcher.quoteReplacement(url.getHost) - if (Settings.get.httpHostWhitelist.length > 0 && !Settings.get.httpHostWhitelist.exists(host.matches)) { - throw new Exception() - } - if (Settings.get.httpHostBlacklist.exists(host.matches)) { - throw new Exception() - } + new URL(address) true } catch { @@ -132,6 +141,21 @@ class WirelessNetworkCard(val owner: TileEntity) extends NetworkCard { } } + private def checkAddress(address: String) { + val url = new URL(address) + val protocol = url.getProtocol + if (!protocol.matches("^https?$")) { + throw new FileNotFoundException("unsupported protocol") + } + val host = Matcher.quoteReplacement(url.getHost) + if (Settings.get.httpHostWhitelist.length > 0 && !Settings.get.httpHostWhitelist.exists(host.matches)) { + throw new FileNotFoundException("domain is not whitelisted") + } + if (Settings.get.httpHostBlacklist.exists(host.matches)) { + throw new FileNotFoundException("domain is blacklisted") + } + } + // ----------------------------------------------------------------------- // override def update() { diff --git a/reference.conf b/reference.conf index 6e8493b63..c467d5587 100644 --- a/reference.conf +++ b/reference.conf @@ -428,9 +428,9 @@ opencomputers { # All entries are regular expression patterns, but they will only be # applied to the host name (domain) of a given URL. blacklist: [ - "127\\.0\\.0\\.1" - "10\\.\\d+\\.\\d+\\.\\d+" - "192\\.\\d+\\.\\d+\\.\\d+" + "^127\\.0\\.0\\.1$" + "^10\\.\\d+\\.\\d+\\.\\d+$" + "^192\\.\\d+\\.\\d+\\.\\d+$" ] # This is a list of whitelisted domain names. Requests may only be made to @@ -441,8 +441,8 @@ opencomputers { # All entries are regular expression patterns, but they will only be # applied to the host name (domain) of a given URL. whitelist: [ - "gist\\.github\\.com" - "pastebin\\.com" + "^gist\\.github\\.com$" + "^(:?www\\.)?pastebin\\.com$" ] }