From ad33ec285a15af13d880fc535be016a05c8f44f8 Mon Sep 17 00:00:00 2001 From: payonel Date: Sun, 24 Apr 2016 21:55:43 -0700 Subject: [PATCH 01/48] big awesome update for devfs, command substitution, and io redirection Added another 60 tests, now totalling 901 all-passing tests. This change also reduces memory cost for boot by about 1300 bytes. This change should be fully compatible with any 1.6 user scripts. This makes no change to api, only improves shell support and makes important process handle cleanup (when pipes and redirection is used - we are not auto-closing user file handles). --- .../opencomputers/loot/OpenOS/boot/03_io.lua | 19 +- .../loot/OpenOS/boot/10_devfs.lua | 7 + .../opencomputers/loot/OpenOS/lib/devfs.lua | 87 +++++ .../opencomputers/loot/OpenOS/lib/pipes.lua | 37 +- .../opencomputers/loot/OpenOS/lib/process.lua | 15 +- .../opencomputers/loot/OpenOS/lib/sh.lua | 369 ++++++++++-------- .../opencomputers/loot/OpenOS/lib/shell.lua | 2 +- .../opencomputers/loot/OpenOS/lib/text.lua | 18 +- 8 files changed, 345 insertions(+), 209 deletions(-) create mode 100644 src/main/resources/assets/opencomputers/loot/OpenOS/boot/10_devfs.lua create mode 100644 src/main/resources/assets/opencomputers/loot/OpenOS/lib/devfs.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/boot/03_io.lua b/src/main/resources/assets/opencomputers/loot/OpenOS/boot/03_io.lua index 945ae2fa0..34a58b172 100644 --- a/src/main/resources/assets/opencomputers/loot/OpenOS/boot/03_io.lua +++ b/src/main/resources/assets/opencomputers/loot/OpenOS/boot/03_io.lua @@ -33,14 +33,19 @@ function stdoutStream:write(str) end function stderrStream:write(str) - local component = require("component") - if component.isAvailable("gpu") and component.gpu.getDepth() and component.gpu.getDepth() > 1 then - local foreground = component.gpu.setForeground(0xFF0000) - term.write(str, true) - component.gpu.setForeground(foreground) - else - term.write(str, true) + local gpu = term.gpu() + local set_depth = gpu and gpu.getDepth() and gpu.getDepth() > 1 + + if set_depth then + set_depth = gpu.setForeground(0xFF0000) end + + term.drawText(str, true) + + if set_depth then + gpu.setForeground(set_depth) + end + return self end diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/boot/10_devfs.lua b/src/main/resources/assets/opencomputers/loot/OpenOS/boot/10_devfs.lua new file mode 100644 index 000000000..22f1fd779 --- /dev/null +++ b/src/main/resources/assets/opencomputers/loot/OpenOS/boot/10_devfs.lua @@ -0,0 +1,7 @@ +require("filesystem").mount( +setmetatable({ + isReadOnly = function()return true end +}, +{ + __index=function(tbl,key)return require("devfs")[key]end +}), "/dev") diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/devfs.lua b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/devfs.lua new file mode 100644 index 000000000..ae413417f --- /dev/null +++ b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/devfs.lua @@ -0,0 +1,87 @@ +local fs = require("filesystem") + +local proxy = {points={},address=require("guid").next()} + +local nop = function()end + +function proxy.getLabel() + return "devfs" +end + +function proxy.list() + local keys = {} + for k,v in pairs(proxy.points) do + table.insert(keys, k) + end + return keys +end + +function proxy.exists(path) + return not not proxy.points[path] +end + +function proxy.remove(path) + if not proxy.exists(path) then return false end + proxy.points[path] = nil + return true +end + +function proxy.isDirectory(path) + return false +end + +function proxy.size(path) + return 0 +end + +function proxy.lastModified(path) + return fs.lastModified("/dev/") +end + +function proxy.read(h,...) + return h:read(...) +end + +function proxy.write(h,...) + return h:write(...) +end + +proxy.close = nop + +function proxy.open(path, mode) + checkArg(1, path, "string") + + local handle = proxy.points[path] + if not handle then return nil, "device point [" .. path .. "] does not exist" end + + local msg = "device point [" .. path .. "] cannot be opened for " + + if mode == "r" then + if not handle.read then + return nil, msg .. "read" + end + else + if not handle.write then + return nil, msg .. "write" + end + end + + return handle +end + +function proxy.create(path, handle) + handle.close = handle.close or nop + proxy.points[path] = handle + return true +end + +proxy.create("null", {write = nop}) +proxy.create("random", {read = function(_,n) + local chars = {} + for i=1,n do + table.insert(chars,string.char(math.random(0,255))) + end + return table.concat(chars) +end}) + +return proxy diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/pipes.lua b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/pipes.lua index 9231a25f1..8c1e972a8 100644 --- a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/pipes.lua +++ b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/pipes.lua @@ -15,16 +15,14 @@ function pipeStream.new(pm) return setmetatable(stream, metatable) end function pipeStream:resume() - local yield_args = table.pack(self.pm.pco.resume_all(table.unpack(self.pm.args))) + local yield_args = table.pack(self.pm.pco.resume_all()) if not yield_args[1] then - self.pm.args = {false} self.pm.dead = true if not yield_args[1] and yield_args[2] then io.stderr:write(tostring(yield_args[2]) .. "\n") end end - self.pm.args = {true} return table.unpack(yield_args) end function pipeStream:close() @@ -134,7 +132,6 @@ function plib.internal.create(fp) local pco = setmetatable( { stack = {}, - args = {}, next = nil, create = _co.create, wrap = _co.wrap, @@ -318,7 +315,7 @@ function pipeManager.new(prog, mode, env) end local pm = setmetatable( - {dead=false,closed=false,args={},prog=prog,mode=mode,env=env}, + {dead=false,closed=false,prog=prog,mode=mode,env=env}, {__index=pipeManager} ) pm.prog_id = pm.mode == "r" and 1 or 2 @@ -328,37 +325,29 @@ function pipeManager.new(prog, mode, env) function()pm.dead=true end pm.commands = {} - pm.commands[pm.prog_id] = {shellPath, sh.internal.buildCommandRedirects({})} - pm.commands[pm.self_id] = {pm.handler, sh.internal.buildCommandRedirects({})} + pm.commands[pm.prog_id] = {shellPath, {}} + pm.commands[pm.self_id] = {pm.handler, {}} pm.root = function() + local startup_args = {} + local reason - pm.threads, reason, pm.inputs, pm.outputs = - sh.internal.buildPipeStream(pm.commands, pm.env) + pm.threads, reason = sh.internal.createThreads(pm.commands, {}, pm.env) if not pm.threads then pm.dead = true - return false, reason -- 2nd return is reason, not pipes, on error :) + return false, reason end - pm.pipe = reason[1] -- an array of pipes of length 1 - local startup_args = {} + pm.pipe = process.info(pm.threads[1]).data.io[1] + process.info(pm.threads[pm.prog_id]).data.args = {pm.env,pm.prog} + -- if we are the writer, we need args to resume prog if pm.mode == "w" then - pm.pipe.stream.args = {pm.env,pm.prog,n=2} - startup_args = {true,n=1} - -- also, if we are the writer, we need to intercept the reader - pm.pipe.stream.redirect.read = plib.internal.redirectRead(pm) - else - startup_args = {true,pm.env,pm.prog,n=3} + pm.pipe.stream.redirect[0] = plib.internal.redirectRead(pm) end - return sh.internal.executePipeStream( - pm.threads, - {pm.pipe}, - pm.inputs, - pm.outputs, - startup_args) + return sh.internal.runThreads(pm.threads) end return pm diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/process.lua b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/process.lua index b7d3b9b81..f62b8b1b2 100644 --- a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/process.lua +++ b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/process.lua @@ -81,7 +81,7 @@ function process.load(path, env, init, name) return string.format('%s:\n%s', msg or '', stack) end, ...) } - process.list[thread] = nil + process.internal.close(thread) if not result[1] then -- msg can be a custom error object local msg = result[2] @@ -100,6 +100,7 @@ function process.load(path, env, init, name) env = env, data = setmetatable( { + handles = {}, io = setmetatable({}, {__index=p and p.data and p.data.io or nil}), coroutine_handler = setmetatable({}, {__index=p and p.data and p.data.coroutine_handler or nil}), }, {__index=p and p.data or nil}), @@ -133,4 +134,16 @@ function process.info(levelOrThread) end end +--table of undocumented api subject to change and intended for internal use +process.internal = {} +--this is a future stub for a more complete method to kill a process +function process.internal.close(thread) + checkArg(1,thread,"thread") + local pdata = process.info(thread).data + for k,v in pairs(pdata.handles) do + v:close() + end + process.list[thread] = nil +end + return process diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/sh.lua b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/sh.lua index fb63e7a19..758613098 100644 --- a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/sh.lua +++ b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/sh.lua @@ -8,13 +8,7 @@ local tx = require("transforms") local unicode = require("unicode") local sh = {} - -sh.internal = setmetatable({}, -{ - __tostring=function() - return "table of undocumented api subject to change and intended for internal use" - end -}) +sh.internal = {} -- --[[@@]] are not just comments, but custom annotations for delayload methods. -- See package.lua and the api wiki for more information @@ -133,29 +127,36 @@ function sh.internal.isIdentifier(key) end function sh.expand(value) - return value + local expanded = value :gsub("%$([_%w%?]+)", function(key) if key == "?" then return tostring(sh.getLastExitCode()) end - return os.getenv(key) or '' end) + return os.getenv(key) or '' + end) :gsub("%${(.*)}", function(key) if sh.internal.isIdentifier(key) then return sh.internal.expandKey(key) end error("${" .. key .. "}: bad substitution") end) + if expanded:find('`') then + expanded = sh.internal.parse_sub(expanded) + end + return expanded end function sh.internal.expand(word) if #word == 0 then return {} end - local result = '' for i=1,#word do local part = word[i] - result = result .. (not (part.qr and part.qr[3]) and sh.expand(part.txt) or part.txt) + -- sh.expand runs command substitution on backticks + -- if the entire quoted area is backtick quoted, then + -- we can save some checks by adding them back in + local q = part.qr and part.qr[1] == '`' and '`' or '' + result = result .. (not (part.qr and part.qr[3]) and sh.expand(q..part.txt..q) or part.txt) end - return {result} end @@ -205,49 +206,6 @@ function sh.hintHandler(full_line, cursor) return sh.internal.hintHandlerImpl(full_line, cursor) end -function sh.internal.buildCommandRedirects(args) - local input, output, mode = nil, nil, "write" - local tokens = args - args = {} - local function smt(call) -- state metatable factory - local function index(_, token) - if token == "<" or token == ">" or token == ">>" then - return "parse error near " .. token - end - call(token) - return "args" -- default, return to normal arg parsing - end - return {__index=index} - end - local sm = { -- state machine for redirect parsing - args = setmetatable({["<"]="input", [">"]="output", [">>"]="append"}, - smt(function(token) - table.insert(args, token) - end)), - input = setmetatable({}, smt(function(token) - input = token - end)), - output = setmetatable({}, smt(function(token) - output = token - mode = "write" - end)), - append = setmetatable({}, smt(function(token) - output = token - mode = "append" - end)) - } - -- Run state machine over tokens. - local state = "args" - for i = 1, #tokens do - local token = tokens[i] - state = sm[state][token] - if not sm[state] then - return nil, state - end - end - return args, input, output, mode -end - function sh.internal.parseCommand(words) checkArg(1, words, "table") if #words == 0 then @@ -263,10 +221,11 @@ function sh.internal.parseCommand(words) if not program then return nil, evaluated_words[1] .. ": " .. reason end - return program, sh.internal.buildCommandRedirects(tx.sub(evaluated_words, 2)) + evaluated_words = tx.sub(evaluated_words, 2) + return program, evaluated_words end -function sh.internal.buildPipeStream(commands, env) +function sh.internal.createThreads(commands, eargs, env) -- Piping data between programs works like so: -- program1 gets its output replaced with our custom stream. -- program2 gets its input replaced with our custom stream. @@ -274,109 +233,70 @@ function sh.internal.buildPipeStream(commands, env) -- custom stream triggers execution of "next" program after write. -- custom stream triggers yield before read if buffer is empty. -- custom stream may have "redirect" entries for fallback/duplication. - local threads, pipes, inputs, outputs = {}, {}, {}, {} + local threads = {} for i = 1, #commands do - local program, args, input, output, mode = table.unpack(commands[i]) - local process_name = tostring(program) - local reason + local program, args = table.unpack(commands[i]) + local name, thread = tostring(program) local thread_env = type(program) == "string" and env or nil - threads[i], reason = process.load(program, thread_env, function() - os.setenv("_", program) - if input then - local file, reason = io.open(shell.resolve(input)) - if not file then - error("could not open '" .. input .. "': " .. reason, 0) - end - table.insert(inputs, file) - if pipes[i - 1] then - pipes[i - 1].stream.redirect.read = file - io.input(pipes[i - 1]) - else - io.input(file) - end - elseif pipes[i - 1] then - io.input(pipes[i - 1]) + local thread, reason = process.load(program, thread_env, function() + os.setenv("_", name) + -- popen expects each process to first write an empty string + -- this is required for proper thread order + io.write('') + end, name) + + threads[i] = thread + + if thread then + -- smart check if ios should be loaded + if tx.first(args, function(token) return token == "<" or token:find(">") end) then + args, reason = sh.internal.buildCommandRedirects(thread, args) end - if output then - local file, reason = io.open(shell.resolve(output), mode == "append" and "a" or "w") - if not file then - error("could not open '" .. output .. "': " .. reason, 0) - end - table.insert(outputs, file) - if pipes[i] then - pipes[i].stream.redirect.write = file - io.output(pipes[i]) - else - io.output(file) - end - elseif pipes[i] then - io.output(pipes[i]) + end + + if not args or not thread then + for i,t in ipairs(threads) do + process.internal.close(t) end - io.write('') - end, process_name) - if not threads[i] then - return false, reason + return nil, reason end - if i < #commands then - pipes[i] = require("buffer").new("rw", sh.internal.newMemoryStream()) - pipes[i]:setvbuf("no") - end - if i > 1 then - pipes[i - 1].stream.next = threads[i] - pipes[i - 1].stream.args = args - end + process.info(thread).data.args = tx.concat(args, eargs or {}) end - return threads, pipes, inputs, outputs + + if #threads > 1 then + sh.internal.buildPipeChain(threads) + end + + return threads end -function sh.internal.executePipeStream(threads, pipes, inputs, outputs, args) +function sh.internal.runThreads(threads) local result = {} for i = 1, #threads do -- Emulate CC behavior by making yields a filtered event.pull() - while args[1] and coroutine.status(threads[i]) ~= "dead" do - result = table.pack(coroutine.resume(threads[i], table.unpack(args, 2, args.n))) - if coroutine.status(threads[i]) ~= "dead" then - local action = result[2] - if action == nil or type(action) == "number" then - args = table.pack(pcall(event.pull, table.unpack(result, 2, result.n))) - else - args = table.pack(coroutine.yield(table.unpack(result, 2, result.n))) - end + local thread, args = threads[i] + while coroutine.status(thread) ~= "dead" do + args = args or process.info(thread).data.args + result = table.pack(coroutine.resume(thread, table.unpack(args))) + if coroutine.status(thread) ~= "dead" then + args = sh.internal.handleThreadYield(result) -- in case this was the end of the line, args is returned result = args + if table.remove(args, 1) then + break + end end end - if pipes[i] then - pcall(pipes[i].close, pipes[i]) - end if not result[1] then - if type(result[2]) == "table" and result[2].reason == "terminated" then - if result[2].code then - result[1] = true - result.n = 1 - else - result[2] = "terminated" - end - elseif type(result[2]) == "string" then - result[2] = debug.traceback(threads[i], result[2]) - end + sh.internal.handleThreadCrash(thread, result) break end end - for _, input in ipairs(inputs) do input:close() end - for _, output in ipairs(outputs) do output:close() end return table.unpack(result) end -function sh.internal.executeStatement(env, commands, eargs) - local threads, pipes, inputs, outputs = sh.internal.buildPipeStream(commands, env) - if not threads then return false, pipes end - local args = tx.concat({true,n=1},commands[1][2] or {}, eargs) - return sh.internal.executePipeStream(threads, pipes, inputs, outputs, args) -end - -function sh.internal.executePipes(pipe_parts, eargs) +function sh.internal.executePipes(pipe_parts, eargs, env) local commands = {} for i=1,#pipe_parts do commands[i] = table.pack(sh.internal.parseCommand(pipe_parts[i])) @@ -388,9 +308,14 @@ function sh.internal.executePipes(pipe_parts, eargs) return sh.internal.ec.parseCommand end end - local result = table.pack(sh.internal.executeStatement(env,commands,eargs)) - local cmd_result = result[2] - if not result[1] then + local threads, reason = sh.internal.createThreads(commands, eargs, env) + if not threads then + io.stderr:write(reason,"\n") + return false + end + local result, cmd_result = sh.internal.runThreads(threads) + + if not result then if cmd_result then if type(cmd_result) == "string" then cmd_result = cmd_result:gsub("^/lib/process%.lua:%d+: /", '/') @@ -404,7 +329,6 @@ end function sh.execute(env, command, ...) checkArg(2, command, "string") - local eargs = {...} if command:find("^%s*#") then return true, 0 end local statements, reason = sh.internal.statements(command) if not statements or statements == true then @@ -413,15 +337,105 @@ function sh.execute(env, command, ...) return true, 0 end + local eargs = {...} + -- simple if reason then - sh.internal.ec.last = sh.internal.command_result_as_code(sh.internal.executePipes(statements,eargs)) + sh.internal.ec.last = sh.internal.command_result_as_code(sh.internal.executePipes(statements, eargs, env)) return true end - return sh.internal.execute_complex(statements) + return sh.internal.execute_complex(statements, eargs, env) end +function --[[@delayloaded-start@]] sh.internal.handleThreadYield(result) + local action = result[2] + if action == nil or type(action) == "number" then + return table.pack(pcall(event.pull, table.unpack(result, 2, result.n))) + else + return table.pack(coroutine.yield(table.unpack(result, 2, result.n))) + end +end --[[@delayloaded-end@]] + +function --[[@delayloaded-start@]] sh.internal.handleThreadCrash(thread, result) + if type(result[2]) == "table" and result[2].reason == "terminated" then + if result[2].code then + result[1] = true + result.n = 1 + else + result[2] = "terminated" + end + elseif type(result[2]) == "string" then + result[2] = debug.traceback(thread, result[2]) + end +end --[[@delayloaded-end@]] + +function --[[@delayloaded-start@]] sh.internal.buildCommandRedirects(thread, args) + local data = process.info(thread).data + local tokens, ios, handles = args, data.io, data.handles + args = {} + local from_io, to_io, mode + for i = 1, #tokens do + local token = tokens[i] + if token == "<" then + from_io = 0 + mode = "r" + else + local first_index, last_index, from_io_txt, mode_txt, to_io_txt = token:find("(%d*)(>>?)(.*)") + if mode_txt then + mode = mode_txt == ">>" and "a" or "w" + from_io = from_io_txt and tonumber(from_io_txt) or 1 + if to_io_txt ~= "" then + to_io = tonumber(to_io_txt:sub(2)) + ios[from_io] = ios[to_io] + mode = nil + end + else -- just an arg + if not mode then + table.insert(args, token) + else + local file, reason = io.open(shell.resolve(token), mode) + if not file then + return nil, "could not open '" .. token .. "': " .. reason + end + table.insert(handles, file) + ios[from_io] = file + end + mode = nil + end + end + end + + return args +end --[[@delayloaded-end@]] + +function --[[@delayloaded-start@]] sh.internal.buildPipeChain(threads) + local prev_pipe + for i=1,#threads do + local thread = threads[i] + local data = process.info(thread).data + local pio = data.io + + local pipe + if i < #threads then + pipe = require("buffer").new("rw", sh.internal.newMemoryStream()) + pipe:setvbuf("no") + pipe.stream.redirect[1] = rawget(pio, 1) + pio[1] = pipe + table.insert(data.handles, pipe) + end + + if prev_pipe then + prev_pipe.stream.redirect[0] = rawget(pio, 0) + prev_pipe.stream.next = thread + pio[0] = prev_pipe + end + + prev_pipe = pipe + end + +end --[[@delayloaded-end@]] + function --[[@delayloaded-start@]] sh.internal.glob(glob_pattern) local segments = text.split(glob_pattern, {"/"}, true) local hiddens = tx.select(segments,function(e)return e:match("^%%%.")==nil end) @@ -549,7 +563,7 @@ function --[[@delayloaded-start@]] sh.internal.hintHandlerImpl(full_line, cursor return {} end local result - local prefix, partial = line:match("^(.*=)(.*)$") + local prefix, partial = line:match("^(.*[=><])(.*)$") if not prefix then prefix, partial = line:match("^(.+%s+)(.*)$") end local partialPrefix = (partial or line) local name = partialPrefix:gsub(".*/", "") @@ -583,10 +597,11 @@ function --[[@delayloaded-start@]] sh.internal.hasValidPiping(words, pipes) return true end - pipes = pipes or tx.sub(text.syntax, 2) -- first text syntax is ; which CAN be repeated + local semi_split = tx.find(text.syntax, {";"}) -- all symbols before ; in syntax CAN be repeated + pipes = pipes or tx.sub(text.syntax, semi_split + 1) - local pies = tx.select(words, function(parts, i, t) - return (#parts == 1 and tx.first(pipes, {{parts[1].txt}}) and true or false), i + local pies = tx.select(words, function(parts, i) + return #parts == 1 and #text.split(parts[1].txt, pipes, true) == 0 and true or false end) local bad_pipe @@ -718,6 +733,7 @@ function --[[@delayloaded-start@]] sh.internal.newMemoryStream() function memoryStream:close() self.closed = true + self.redirect = {} end function memoryStream:seek() @@ -728,12 +744,12 @@ function --[[@delayloaded-start@]] sh.internal.newMemoryStream() if self.closed then return nil -- eof end - if self.redirect.read then + if self.redirect[0] then -- popen could be using this code path -- if that is the case, it is important to leave stream.buffer alone - return self.redirect.read:read(n) + return self.redirect[0]:read(n) elseif self.buffer == "" then - self.args = table.pack(coroutine.yield(table.unpack(self.result))) + process.info(self.next).data.args = table.pack(coroutine.yield(table.unpack(self.result))) end local result = string.sub(self.buffer, 1, n) self.buffer = string.sub(self.buffer, n + 1) @@ -741,16 +757,17 @@ function --[[@delayloaded-start@]] sh.internal.newMemoryStream() end function memoryStream:write(value) - if not self.redirect.write and self.closed then + if not self.redirect[1] and self.closed then -- if next is dead, ignore all writes if coroutine.status(self.next) ~= "dead" then error("attempt to use a closed stream") end - elseif self.redirect.write then - return self.redirect.write:write(value) + elseif self.redirect[1] then + return self.redirect[1]:write(value) elseif not self.closed then self.buffer = self.buffer .. value - self.result = table.pack(coroutine.resume(self.next, table.unpack(self.args))) + local args = process.info(self.next).data.args + self.result = table.pack(coroutine.resume(self.next, table.unpack(args))) if coroutine.status(self.next) == "dead" then self:close() end @@ -764,26 +781,52 @@ function --[[@delayloaded-start@]] sh.internal.newMemoryStream() end local stream = {closed = false, buffer = "", - redirect = {}, result = {}, args = {}} + redirect = {}, result = {}} local metatable = {__index = memoryStream, __metatable = "memorystream"} return setmetatable(stream, metatable) end --[[@delayloaded-end@]] -function --[[@delayloaded-start@]] sh.internal.execute_complex(statements) +function --[[@delayloaded-start@]] sh.internal.execute_complex(statements, eargs, env) for si=1,#statements do local s = statements[si] local chains = sh.internal.groupChains(s) - local last_code,br = sh.internal.boolean_executor(chains, function(chain, chain_index) + local last_code = sh.internal.boolean_executor(chains, function(chain, chain_index) local pipe_parts = sh.internal.splitChains(chain) - return sh.internal.executePipes(pipe_parts, - chain_index == #chains and si == #statements and eargs or {}) + local next_args = chain_index == #chains and si == #statements and eargs or {} + return sh.internal.executePipes(pipe_parts, next_args, env) end) - if br then - io.stderr:write(br,"\n") - end sh.internal.ec.last = sh.internal.command_result_as_code(last_code) end - return true, br + return true +end --[[@delayloaded-end@]] + + +function --[[@delayloaded-start@]] sh.internal.parse_sub(input) + -- cannot use gsub here becuase it is a [C] call, and io.popen needs to yield at times + local packed = {} + -- not using for i... because i can skip ahead + local i, len = 1, #input + + while i < len do + + local fi, si, capture = input:find("`([^`]*)`", i) + + if not fi then + table.insert(packed, input:sub(i)) + break + end + + local sub = io.popen(capture) + local result = sub:read("*a") + sub:close() + -- all whitespace is replaced by single spaces + -- we requote the result because tokenize will respect this as text + table.insert(packed, (text.trim(result):gsub("%s+"," "))) + + i = si+1 + end + + return table.concat(packed) end --[[@delayloaded-end@]] return sh, local_env diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/shell.lua b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/shell.lua index 259216f4e..9813f767b 100644 --- a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/shell.lua +++ b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/shell.lua @@ -35,7 +35,7 @@ local function findFile(name, ext) dir = fs.concat(fs.concat(dir, name), "..") local name = fs.name(name) local list = fs.list(dir) - if list then + if list and name then local files = {} for file in list do files[file] = true diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/text.lua b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/text.lua index 2c7e97d4c..9afc1c32b 100644 --- a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/text.lua +++ b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/text.lua @@ -8,14 +8,8 @@ local text = {} local local_env = {tx=tx,unicode=unicode} text.internal = {} -setmetatable(text.internal, -{ - __tostring=function() - return 'table of undocumented api subject to change and intended for internal use' - end -}) -text.syntax = {";","&&","||","|",">>",">","<"} +text.syntax = {"^%d*>>?&%d+$",";","&&","||?","^%d*>>?",">>?","<"} function --[[@delayloaded-start@]] text.detab(value, tabWidth) checkArg(1, value, "string") @@ -163,11 +157,12 @@ function text.internal.tokenize(value, quotes, delimiters) checkArg(1, value, "string") checkArg(2, quotes, "table", "nil") checkArg(3, delimiters, "table", "nil") + local custom = not not delimiters delimiters = delimiters or text.syntax local words, reason = text.internal.words(value, quotes) - local splitter = text.escapeMagic(table.concat(delimiters)) + local splitter = text.escapeMagic(custom and table.concat(delimiters) or "<>|;&") if type(words) ~= "table" or #splitter == 0 or not value:find("["..splitter.."]") then @@ -182,7 +177,7 @@ function text.internal.words(input, quotes) checkArg(1, input, "string") checkArg(2, quotes, "table", "nil") local qr = nil - quotes = quotes or {{"'","'",true},{'"','"'}} + quotes = quotes or {{"'","'",true},{'"','"'},{'`','`'}} local function append(dst, txt, qr) local size = #dst if size == 0 or dst[size].qr ~= qr then @@ -253,9 +248,6 @@ function --[[@delayloaded-start@]] text.internal.splitWords(words, delimiters) table.insert(split_words[#split_words], part) next_word = false end - local delimLookup = tx.select(delimiters, function(e,i) - return i, e - end) for wi=1,#words do local word = words[wi] next_word = true for pi=1,#word do local part = word[pi] @@ -265,7 +257,7 @@ function --[[@delayloaded-start@]] text.internal.splitWords(words, delimiters) else local part_text_splits = text.split(part.txt, delimiters) tx.foreach(part_text_splits, function(sub_txt, spi) - local delim = delimLookup[sub_txt] + local delim = #text.split(sub_txt, delimiters, true) == 0 next_word = next_word or delim add_part({txt=sub_txt,qr=qr}) next_word = delim From 8d9c699ce0dbf9e4180b778496366214c183ccfe Mon Sep 17 00:00:00 2001 From: payonel Date: Tue, 26 Apr 2016 21:26:50 -0700 Subject: [PATCH 02/48] fix onTouch for unicode support in shell (+backspace fix) --- .../opencomputers/loot/OpenOS/lib/term.lua | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/term.lua b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/term.lua index dd8f640cb..309292960 100644 --- a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/term.lua +++ b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/term.lua @@ -245,7 +245,7 @@ function term.readKeyboard(ops) if db ~= false then draw("\n") end term.internal.read_history(history,input) return input.data.."\n" - elseif char==8 then + elseif code==keys.back then input:update(-1) elseif code==keys.left then input:move(ctrl and term.internal.ctrl_movement(input, -1) or -1) @@ -400,11 +400,31 @@ function --[[@delayloaded-start@]] term.internal.ctrl_movement(input, dir) end --[[@delayloaded-end@]] function --[[@delayloaded-start@]] term.internal.onTouch(input,gx,gy) - input:move(math.huge) + if input.data == "" then return end + input:move(-math.huge) local w = W() gx,gy=gx-w.dx,gy-w.dy local x2,y2,d = input.w.x,input.w.y,input.w.w - input:move((gy*d+gx)-(y2*d+x2)) + local char_width_to_move = ((gy*d+gx)-(y2*d+x2)) + if char_width_to_move <= 0 then return end + local total_wlen = unicode.wlen(input.data) + if char_width_to_move >= total_wlen then + input:move(math.huge) + else + local chars_to_move = unicode.wtrunc(input.data, char_width_to_move + 1) + input:move(unicode.len(chars_to_move)) + end + -- fake white space can make the index off, redo adjustment for alignment + x2,y2,d = input.w.x,input.w.y,input.w.w + char_width_to_move = ((gy*d+gx)-(y2*d+x2)) + if (char_width_to_move < 0) then + -- using char_width_to_move as a type of index is wrong, but large enough and helps to speed this up + local up_to_cursor = unicode.sub(input.data, input.index+char_width_to_move, input.index) + local full_wlen = unicode.wlen(up_to_cursor) + local without_tail = unicode.wtrunc(up_to_cursor, full_wlen + char_width_to_move + 1) + local chars_cut = unicode.len(up_to_cursor) - unicode.len(without_tail) + input:move(-chars_cut) + end end --[[@delayloaded-end@]] function --[[@delayloaded-start@]] term.internal.build_horizontal_reader(input) From 00bc7e2cee7050807fe10169769002913957c6b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Wed, 27 Apr 2016 23:47:46 +0200 Subject: [PATCH 03/48] Added some missing methods to the devfs to avoid programs expecting them to be there breaking (such as df) and ordered them the same way as they are in the Scala filesystem component. --- .../opencomputers/loot/OpenOS/lib/devfs.lua | 66 +++++++++++++------ 1 file changed, 47 insertions(+), 19 deletions(-) diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/devfs.lua b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/devfs.lua index ae413417f..3291eaf2a 100644 --- a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/devfs.lua +++ b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/devfs.lua @@ -8,6 +8,38 @@ function proxy.getLabel() return "devfs" end +function proxy.setLabel(value) + error("drive does not support labeling") +end + +function proxy.isReadOnly() + return false +end + +function proxy.spaceTotal() + return 0 +end + +function proxy.spaceUsed() + return 0 +end + +function proxy.exists(path) + return not not proxy.points[path] +end + +function proxy.size(path) + return 0 +end + +function proxy.isDirectory(path) + return false +end + +function proxy.lastModified(path) + return fs.lastModified("/dev/") +end + function proxy.list() local keys = {} for k,v in pairs(proxy.points) do @@ -16,8 +48,8 @@ function proxy.list() return keys end -function proxy.exists(path) - return not not proxy.points[path] +function proxy.makeDirectory(path) + return false end function proxy.remove(path) @@ -26,26 +58,10 @@ function proxy.remove(path) return true end -function proxy.isDirectory(path) +function proxy.rename(from, to) return false end -function proxy.size(path) - return 0 -end - -function proxy.lastModified(path) - return fs.lastModified("/dev/") -end - -function proxy.read(h,...) - return h:read(...) -end - -function proxy.write(h,...) - return h:write(...) -end - proxy.close = nop function proxy.open(path, mode) @@ -69,6 +85,18 @@ function proxy.open(path, mode) return handle end +function proxy.read(h,...) + return h:read(...) +end + +function proxy.seek(h,...) + return h:seek(...) +end + +function proxy.write(h,...) + return h:write(...) +end + function proxy.create(path, handle) handle.close = handle.close or nop proxy.points[path] = handle From 2dd3efedc975f9e8a60548129554306af97f9eec Mon Sep 17 00:00:00 2001 From: payonel Date: Thu, 28 Apr 2016 16:43:57 -0700 Subject: [PATCH 04/48] isReadOnly is in boot/, move return false to boot file --- .../assets/opencomputers/loot/OpenOS/boot/10_devfs.lua | 2 +- .../resources/assets/opencomputers/loot/OpenOS/lib/devfs.lua | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/boot/10_devfs.lua b/src/main/resources/assets/opencomputers/loot/OpenOS/boot/10_devfs.lua index 22f1fd779..0da8de199 100644 --- a/src/main/resources/assets/opencomputers/loot/OpenOS/boot/10_devfs.lua +++ b/src/main/resources/assets/opencomputers/loot/OpenOS/boot/10_devfs.lua @@ -1,6 +1,6 @@ require("filesystem").mount( setmetatable({ - isReadOnly = function()return true end + isReadOnly = function()return false end }, { __index=function(tbl,key)return require("devfs")[key]end diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/devfs.lua b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/devfs.lua index 3291eaf2a..bee88b701 100644 --- a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/devfs.lua +++ b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/devfs.lua @@ -12,10 +12,6 @@ function proxy.setLabel(value) error("drive does not support labeling") end -function proxy.isReadOnly() - return false -end - function proxy.spaceTotal() return 0 end From 26c4c0d33c00fed61f9c6cd7435297fb8fcfab1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20H=C3=A5kansson?= Date: Fri, 29 Apr 2016 22:57:51 +0200 Subject: [PATCH 05/48] Adds three more names to the list --- src/main/resources/assets/opencomputers/robot.names | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/resources/assets/opencomputers/robot.names b/src/main/resources/assets/opencomputers/robot.names index 4e4593fde..fd43fa689 100644 --- a/src/main/resources/assets/opencomputers/robot.names +++ b/src/main/resources/assets/opencomputers/robot.names @@ -16,6 +16,7 @@ Anson Argyris # Perry Rhodan ASIMO # Honda Atlas # Portal Augustus # Perry Rhodan +Ava # Ex Machina Baymax # Big Hero 6 BB-8 # Star Wars Bender # Futurama @@ -42,10 +43,12 @@ Deep Thought # Hitchhiker's Guide to the Galaxy Deputy ANDY # Eureka Dog # Half-Life Donald Duck # Perry Rhodan +EDI # Mass Effect Eliza Cassan # Deus Ex Elmer # One of the first two robots developed by William Gray Walter. Elsie # One of the first two robots developed by William Gray Walter. *Emilia # Digital: A Love Story +E.V.E # Anno 2070 Eve # Wall-E Fact Core # Portal Flexo # Futurama From 200fd2d51ef726098cef2ba3c9e264956000c104 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Wed, 11 May 2016 21:50:45 +0200 Subject: [PATCH 06/48] Fix IC2 NPE. Fixes #1771. --- .../scala/li/cil/oc/integration/ic2/ElectricItemManager.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/li/cil/oc/integration/ic2/ElectricItemManager.scala b/src/main/scala/li/cil/oc/integration/ic2/ElectricItemManager.scala index 4b007d1b8..cb0f13511 100644 --- a/src/main/scala/li/cil/oc/integration/ic2/ElectricItemManager.scala +++ b/src/main/scala/li/cil/oc/integration/ic2/ElectricItemManager.scala @@ -40,7 +40,7 @@ object ElectricItemManager extends IElectricItemManager { false // TODO if we ever need it... } - override def getToolTip(stack: ItemStack): String = null + override def getToolTip(stack: ItemStack): String = "" override def getMaxCharge(stack: ItemStack): Double = Option(stack).map(_.getItem) match { case Some(item: IElectricItem) => item.getMaxCharge(stack) From 8dbdd383e5f5730dedd7f2d0d67c56cc5ddf5abb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Wed, 11 May 2016 22:18:56 +0200 Subject: [PATCH 07/48] Fixed coloring recipe duping stuff. --- .../cil/oc/common/recipe/ContainerItemAwareRecipe.scala | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/main/scala/li/cil/oc/common/recipe/ContainerItemAwareRecipe.scala b/src/main/scala/li/cil/oc/common/recipe/ContainerItemAwareRecipe.scala index f065e11b3..5448fb454 100644 --- a/src/main/scala/li/cil/oc/common/recipe/ContainerItemAwareRecipe.scala +++ b/src/main/scala/li/cil/oc/common/recipe/ContainerItemAwareRecipe.scala @@ -2,12 +2,8 @@ package li.cil.oc.common.recipe import net.minecraft.inventory.InventoryCrafting import net.minecraft.item.crafting.IRecipe +import net.minecraftforge.common.ForgeHooks trait ContainerItemAwareRecipe extends IRecipe { - override def getRemainingItems(inv: InventoryCrafting) = - (0 until inv.getSizeInventory). - map(inv.getStackInSlot). - map(net.minecraftforge.common.ForgeHooks.getContainerItem). - filter(_ != null). - toArray + override def getRemainingItems(inv: InventoryCrafting) = ForgeHooks.defaultRecipeGetRemainingItems(inv) } From da1dbecae91d8f1f9ef27adddb74c77ab54f2845 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 13 May 2016 18:37:55 +0200 Subject: [PATCH 08/48] Should fix generator upgrade eating container items if they're not taken out in time. Closes #1779. --- .../oc/server/component/UpgradeGenerator.scala | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala b/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala index cce44478c..1ec4abd90 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala @@ -94,13 +94,15 @@ class UpgradeGenerator(val host: EnvironmentHost with internal.Agent) extends pr if (remainingTicks <= 0 && inventory.isDefined) { val stack = inventory.get remainingTicks = TileEntityFurnace.getItemBurnTime(stack) - updateClient() - stack.stackSize -= 1 - if (stack.stackSize <= 0) { - if (stack.getItem.hasContainerItem(stack)) - inventory = Option(stack.getItem.getContainerItem(stack)) - else - inventory = None + if (remainingTicks > 0) { // If not we probably have a container item now (e.g. bucket after lava bucket). + updateClient() + stack.stackSize -= 1 + if (stack.stackSize <= 0) { + if (stack.getItem.hasContainerItem(stack)) + inventory = Option(stack.getItem.getContainerItem(stack)) + else + inventory = None + } } } if (remainingTicks > 0) { From 6a40619696c3bac9b56866698a70f1c93b878273 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 13 May 2016 19:27:59 +0200 Subject: [PATCH 09/48] Fix robots being able to drain from flowing liquid blocks... closes #1796. Seriously? Did flowing liquids always magically convert from BlockDynamicLiquid into BlockStaticLiquid after a while? Meta checks? Ugh... --- src/main/scala/li/cil/oc/util/FluidUtils.scala | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/scala/li/cil/oc/util/FluidUtils.scala b/src/main/scala/li/cil/oc/util/FluidUtils.scala index 754c22b93..0e52027d0 100644 --- a/src/main/scala/li/cil/oc/util/FluidUtils.scala +++ b/src/main/scala/li/cil/oc/util/FluidUtils.scala @@ -4,6 +4,7 @@ import li.cil.oc.util.ExtendedBlock._ import li.cil.oc.util.ExtendedWorld._ import net.minecraft.block.Block import net.minecraft.block.BlockLiquid +import net.minecraft.block.BlockStaticLiquid import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.fluids.Fluid import net.minecraftforge.fluids.FluidContainerRegistry @@ -72,11 +73,13 @@ object FluidUtils { def currentWrapper = if (position.world.get.blockExists(position)) position.world.get.getBlock(position) match { case block: IFluidBlock => Option(new FluidBlockWrapper(position, block)) - case block: BlockLiquid if FluidRegistry.lookupFluidForBlock(block) != null => Option(new LiquidBlockWrapper(position, block)) + case block: BlockStaticLiquid if FluidRegistry.lookupFluidForBlock(block) != null && isFullLiquidBlock => Option(new LiquidBlockWrapper(position, block)) case block: Block if block.isAir(position) || block.isReplaceable(position) => Option(new AirBlockWrapper(position, block)) case _ => None } else None + + def isFullLiquidBlock = position.world.get.getBlockMetadata(position) == 0 } private trait BlockWrapperBase extends IFluidHandler { @@ -141,7 +144,8 @@ object FluidUtils { if (resource != null && resource.getFluid.canBePlacedInWorld && resource.getFluid.getBlock != null) { if (doFill) { val world = position.world.get - world.breakBlock(position) + if (!world.isAirBlock(position) && !world.isAnyLiquid(position.bounds)) + world.breakBlock(position) world.setBlock(position, resource.getFluid.getBlock) // This fake neighbor update is required to get stills to start flowing. world.notifyBlockOfNeighborChange(position, world.getBlock(position)) From ca5d95cff5305c3c20f61ab88a2fa8440e45d9f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sat, 14 May 2016 13:23:11 +0200 Subject: [PATCH 10/48] Only pass X and Y to RackMountable.onActivate, adjusted to the actual surface area of the mountable (in [0, 1] for both, on the 14x3 pixel surface). Closes #1794. --- .../cil/oc/api/component/RackMountable.java | 9 +++---- .../scala/li/cil/oc/common/block/Rack.scala | 26 ++++++++++++++++--- .../oc/common/component/TerminalServer.scala | 2 +- .../server/component/DiskDriveMountable.scala | 2 +- .../li/cil/oc/server/component/Server.scala | 2 +- 5 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/main/java/li/cil/oc/api/component/RackMountable.java b/src/main/java/li/cil/oc/api/component/RackMountable.java index 2bfd30095..a94820c2c 100644 --- a/src/main/java/li/cil/oc/api/component/RackMountable.java +++ b/src/main/java/li/cil/oc/api/component/RackMountable.java @@ -7,7 +7,6 @@ import li.cil.oc.api.util.StateAware; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; /** * Use this interface on environments provided by drivers for items that can @@ -63,11 +62,9 @@ public interface RackMountable extends ManagedEnvironment, StateAware { * pointlessly compressed fashion (because MC is a dummy like that). * * @param player the player activating the mountable. - * @param side the side (in global coordinate space) of the rack that was activated. - * @param hitX the relative x coordinate of the activation. - * @param hitY the relative y coordinate of the activation. - * @param hitZ the relative z coordinate of the activation. + * @param hitX the relative x coordinate of the activation on the mountable. + * @param hitY the relative y coordinate of the activation on the mountable. * @return whether the activation was handled (e.g. GUI opened). */ - boolean onActivate(EntityPlayer player, ForgeDirection side, float hitX, float hitY, float hitZ); + boolean onActivate(EntityPlayer player, float hitX, float hitY); } diff --git a/src/main/scala/li/cil/oc/common/block/Rack.scala b/src/main/scala/li/cil/oc/common/block/Rack.scala index 113739d50..5e40c1985 100644 --- a/src/main/scala/li/cil/oc/common/block/Rack.scala +++ b/src/main/scala/li/cil/oc/common/block/Rack.scala @@ -10,6 +10,7 @@ import li.cil.oc.common.tileentity import net.minecraft.client.renderer.texture.IIconRegister import net.minecraft.entity.player.EntityPlayer import net.minecraft.util.IIcon +import net.minecraft.util.Vec3 import net.minecraft.world.IBlockAccess import net.minecraft.world.World import net.minecraftforge.common.util.ForgeDirection @@ -73,14 +74,31 @@ class Rack extends RedstoneAware with traits.SpecialBlock with traits.PowerAccep override def onBlockActivated(world: World, x: Int, y: Int, z: Int, player: EntityPlayer, side: ForgeDirection, hitX: Float, hitY: Float, hitZ: Float): Boolean = { world.getTileEntity(x, y, z) match { case rack: tileentity.Rack => rack.slotAt(side, hitX, hitY, hitZ) match { - case Some(slot) => rack.getMountable(slot) match { - case mountable: RackMountable if mountable.onActivate(player, side, hitX, hitY, hitZ) => return true // Activation handled by mountable. - case _ => - } + case Some(slot) => + val hitVec = Vec3.createVectorHelper(hitX, hitY, hitZ) + val rotation = side match { + case ForgeDirection.WEST => Math.toRadians(90).toFloat + case ForgeDirection.NORTH => Math.toRadians(180).toFloat + case ForgeDirection.EAST => Math.toRadians(270).toFloat + case _ => 0 + } + val localHitVec = rotate(hitVec.addVector(-0.5, -0.5, -0.5), rotation).addVector(0.5, 0.5, 0.5) + localHitVec.xCoord = ((if (side.offsetX != 0) 1 - localHitVec.xCoord else localHitVec.xCoord) * 16 - 1) / 14f + localHitVec.yCoord = ((1 - localHitVec.yCoord) * 16 - 2 - 3 * slot) / 3f + rack.getMountable(slot) match { + case mountable: RackMountable if mountable.onActivate(player, localHitVec.xCoord.toFloat, localHitVec.yCoord.toFloat) => return true // Activation handled by mountable. + case _ => + } case _ => } case _ => } super.onBlockActivated(world, x, y, z, player, side, hitX, hitY, hitZ) } + + def rotate(v: Vec3, t: Float): Vec3 = { + val cos = Math.cos(t) + val sin = Math.sin(t) + Vec3.createVectorHelper(v.xCoord * cos - v.zCoord * sin, v.yCoord, v.xCoord * sin + v.zCoord * cos) + } } diff --git a/src/main/scala/li/cil/oc/common/component/TerminalServer.scala b/src/main/scala/li/cil/oc/common/component/TerminalServer.scala index da5df8e09..5c7d82ccf 100644 --- a/src/main/scala/li/cil/oc/common/component/TerminalServer.scala +++ b/src/main/scala/li/cil/oc/common/component/TerminalServer.scala @@ -117,7 +117,7 @@ class TerminalServer(val rack: api.internal.Rack, val slot: Int) extends Environ override def getConnectableAt(index: Int): RackBusConnectable = null - override def onActivate(player: EntityPlayer, side: ForgeDirection, hitX: Float, hitY: Float, hitZ: Float): Boolean = { + override def onActivate(player: EntityPlayer, hitX: Float, hitY: Float): Boolean = { val stack = player.getHeldItem if (api.Items.get(stack) == api.Items.get(Constants.ItemName.Terminal)) { if (!world.isRemote) { diff --git a/src/main/scala/li/cil/oc/server/component/DiskDriveMountable.scala b/src/main/scala/li/cil/oc/server/component/DiskDriveMountable.scala index 6035e9a25..6886ad2eb 100644 --- a/src/main/scala/li/cil/oc/server/component/DiskDriveMountable.scala +++ b/src/main/scala/li/cil/oc/server/component/DiskDriveMountable.scala @@ -147,7 +147,7 @@ class DiskDriveMountable(val rack: api.internal.Rack, val slot: Int) extends pre override def getConnectableAt(index: Int): RackBusConnectable = null - override def onActivate(player: EntityPlayer, side: ForgeDirection, hitX: Float, hitY: Float, hitZ: Float): Boolean = { + override def onActivate(player: EntityPlayer, hitX: Float, hitY: Float): Boolean = { if (player.isSneaking) { val isDiskInDrive = getStackInSlot(0) != null val isHoldingDisk = isItemValidForSlot(0, player.getHeldItem) diff --git a/src/main/scala/li/cil/oc/server/component/Server.scala b/src/main/scala/li/cil/oc/server/component/Server.scala index 200c76001..fb7e08163 100644 --- a/src/main/scala/li/cil/oc/server/component/Server.scala +++ b/src/main/scala/li/cil/oc/server/component/Server.scala @@ -157,7 +157,7 @@ class Server(val rack: api.internal.Rack, val slot: Int) extends Environment wit case Some(busConnectable: RackBusConnectable) => busConnectable }.apply(index) - override def onActivate(player: EntityPlayer, side: ForgeDirection, hitX: Float, hitY: Float, hitZ: Float): Boolean = { + override def onActivate(player: EntityPlayer, hitX: Float, hitY: Float): Boolean = { if (!player.getEntityWorld.isRemote) { if (player.isSneaking) { if (!machine.isRunning && isUseableByPlayer(player)) { From cdd59cff050fbc5f289d8e30b3fc7c6d40af6be5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sat, 14 May 2016 13:59:31 +0200 Subject: [PATCH 11/48] Initialize components in client tile entities when loading / receiving description packet. Should fix #1801. --- .../tileentity/traits/ComponentInventory.scala | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/ComponentInventory.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/ComponentInventory.scala index cf63c1729..a2551cb49 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/ComponentInventory.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/ComponentInventory.scala @@ -98,6 +98,20 @@ trait ComponentInventory extends Environment with Inventory with inventory.Compo // ----------------------------------------------------------------------- // + override protected def initialize(): Unit = { + super.initialize() + if (isClient) { + connectComponents() + } + } + + override def dispose(): Unit = { + super.dispose() + if (isClient) { + disconnectComponents() + } + } + override def onConnect(node: Node) { super.onConnect(node) if (node == this.node) { @@ -122,5 +136,6 @@ trait ComponentInventory extends Environment with Inventory with inventory.Compo override def readFromNBTForClient(nbt: NBTTagCompound) { super.readFromNBTForClient(nbt) load(nbt) + connectComponents() } } From a21bb1ce3beb5d42651877a98495bca8d2872394 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sat, 14 May 2016 14:02:10 +0200 Subject: [PATCH 12/48] Might fix #1805. --- src/main/scala/li/cil/oc/common/inventory/ServerInventory.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/li/cil/oc/common/inventory/ServerInventory.scala b/src/main/scala/li/cil/oc/common/inventory/ServerInventory.scala index 0fb6ea968..4033a7f2a 100644 --- a/src/main/scala/li/cil/oc/common/inventory/ServerInventory.scala +++ b/src/main/scala/li/cil/oc/common/inventory/ServerInventory.scala @@ -8,7 +8,7 @@ import net.minecraft.entity.player.EntityPlayer import net.minecraft.item.ItemStack trait ServerInventory extends ItemStackInventory { - def tier: Int = ItemUtils.caseTier(container) + def tier: Int = ItemUtils.caseTier(container) max 0 override def getSizeInventory = InventorySlots.server(tier).length From df5ea067c9f9a3a7e33cc4caf9685a965ecc78c8 Mon Sep 17 00:00:00 2001 From: Vexatos Date: Sat, 14 May 2016 17:49:06 +0200 Subject: [PATCH 13/48] Fixed hover boots texture. --- .../opencomputers/models/item/hoverBoots.json | 3 ++- .../{HoverBootsLight.png => hoverBootsLight.png} | Bin 2 files changed, 2 insertions(+), 1 deletion(-) rename src/main/resources/assets/opencomputers/textures/items/{HoverBootsLight.png => hoverBootsLight.png} (100%) diff --git a/src/main/resources/assets/opencomputers/models/item/hoverBoots.json b/src/main/resources/assets/opencomputers/models/item/hoverBoots.json index aced9a6a0..cf951b1a4 100644 --- a/src/main/resources/assets/opencomputers/models/item/hoverBoots.json +++ b/src/main/resources/assets/opencomputers/models/item/hoverBoots.json @@ -1,6 +1,7 @@ { "parent": "opencomputers:item/flat", "textures": { - "layer0": "opencomputers:items/hoverBoots" + "layer0": "opencomputers:items/hoverBoots", + "layer1": "opencomputers:items/hoverBootsLight" } } diff --git a/src/main/resources/assets/opencomputers/textures/items/HoverBootsLight.png b/src/main/resources/assets/opencomputers/textures/items/hoverBootsLight.png similarity index 100% rename from src/main/resources/assets/opencomputers/textures/items/HoverBootsLight.png rename to src/main/resources/assets/opencomputers/textures/items/hoverBootsLight.png From 9e21c3d4f5e01221ed7046cb1b8457ff3caf82bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sat, 21 May 2016 13:44:14 +0200 Subject: [PATCH 14/48] Fix setResolution return false even when the resolution changed, closes #1809. --- src/main/scala/li/cil/oc/common/component/TextBuffer.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/scala/li/cil/oc/common/component/TextBuffer.scala b/src/main/scala/li/cil/oc/common/component/TextBuffer.scala index f0ea9e66c..e3fd0038c 100644 --- a/src/main/scala/li/cil/oc/common/component/TextBuffer.scala +++ b/src/main/scala/li/cil/oc/common/component/TextBuffer.scala @@ -246,8 +246,8 @@ class TextBuffer(val host: EnvironmentHost) extends prefab.ManagedEnvironment wi // backwards compatibility, and partially to enforce a valid one. val sizeChanged = data.size = (w, h) val viewportChanged = setViewport(w, h) - if (sizeChanged && !viewportChanged) { - if (node != null) { + if (sizeChanged || viewportChanged) { + if (!viewportChanged && node != null) { node.sendToReachable("computer.signal", "screen_resized", Int.box(w), Int.box(h)) } true From c819466b0469af1b587fb1630d04be1bf0c249fe Mon Sep 17 00:00:00 2001 From: payonel Date: Tue, 24 May 2016 19:04:33 -0700 Subject: [PATCH 15/48] simplify term hint text indexing and fix lua prompt hint handler --- .../assets/opencomputers/loot/OpenOS/bin/lua.lua | 13 ++++++++----- .../assets/opencomputers/loot/OpenOS/lib/term.lua | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/lua.lua b/src/main/resources/assets/opencomputers/loot/OpenOS/bin/lua.lua index f93854273..7e8042de5 100644 --- a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/lua.lua +++ b/src/main/resources/assets/opencomputers/loot/OpenOS/bin/lua.lua @@ -85,7 +85,9 @@ if #args == 0 or options.i then end end local function hint(line, index) - line = (line or ""):sub(1, index - 1) + line = (line or "") + local tail = line:sub(index) + line = line:sub(1, index - 1) local path = string.match(line, "[a-zA-Z_][a-zA-Z0-9_.]*$") if not path then return nil end local suffix = string.match(path, "[^.]+$") or "" @@ -95,7 +97,7 @@ if #args == 0 or options.i then local r1, r2 = {}, {} findKeys(t, r1, string.sub(line, 1, #line - #suffix), suffix) for k in pairs(r1) do - table.insert(r2, k) + table.insert(r2, k .. tail) end table.sort(r2) if #r2 == 1 then @@ -103,10 +105,11 @@ if #args == 0 or options.i then __index=function(tbl, key) if key==2 then local prev=tbl[1] - tbl[1]=nil local next = hint(prev,#prev+1) - for i,v in ipairs(next) do - tbl[i] = v + if next then + for i,v in ipairs(next) do + tbl[i] = v + end end setmetatable(tbl,getmetatable(next)) return tbl[1] diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/term.lua b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/term.lua index 309292960..d2a02ef32 100644 --- a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/term.lua +++ b/src/main/resources/assets/opencomputers/loot/OpenOS/lib/term.lua @@ -517,7 +517,7 @@ function --[[@delayloaded-start@]] term.internal.tab(input,hints) c.i=(c.i+change)%math.max(#c,1) local next=c[c.i+1] if next then - local tail = unicode.wlen(input.data) - input.index - 1 + local tail = unicode.len(input.data) - input.index input:clear() input:update(next) input:move(-tail) From 0817c6de08669312618a6f21d93fc1d063cf00d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Wed, 25 May 2016 18:07:07 +0200 Subject: [PATCH 16/48] Fixed swapping EEPROMs in MCUs. Closes #1814. --- src/main/scala/li/cil/oc/common/item/EEPROM.scala | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/scala/li/cil/oc/common/item/EEPROM.scala b/src/main/scala/li/cil/oc/common/item/EEPROM.scala index 736011fdc..f0f1bdc1b 100644 --- a/src/main/scala/li/cil/oc/common/item/EEPROM.scala +++ b/src/main/scala/li/cil/oc/common/item/EEPROM.scala @@ -1,6 +1,8 @@ package li.cil.oc.common.item import li.cil.oc.Settings +import li.cil.oc.util.BlockPosition +import net.minecraft.entity.player.EntityPlayer import net.minecraft.item.ItemStack class EEPROM(val parent: Delegator) extends traits.Delegate { @@ -16,4 +18,6 @@ class EEPROM(val parent: Delegator) extends traits.Delegate { } super.displayName(stack) } + + override def doesSneakBypassUse(position: BlockPosition, player: EntityPlayer): Boolean = true } From 3e8e94afa11a35b2b8f74c278802c8a43ca47fde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Wed, 25 May 2016 18:07:44 +0200 Subject: [PATCH 17/48] Update JEI. --- build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.properties b/build.properties index 5ecaf4e21..3783942ce 100644 --- a/build.properties +++ b/build.properties @@ -29,7 +29,7 @@ gc.version=3.0.7 gt.version=5.04.06 ic2.version=2.3.131-ex18 igwmod.version=1.1.3-18 -jei.version=2.28.7.174 +jei.version=2.28.18.186 mcmp.version=1.0.8 mekanism.build=5 mekanism.version=7.1.2 From 6e271c79d87374ee0a8215373772766203abb546 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Wed, 25 May 2016 18:33:15 +0200 Subject: [PATCH 18/48] Update player last active time to avoid AFK kicks while working in screens e.g. Closes #1811. --- src/main/scala/li/cil/oc/common/PacketHandler.scala | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/scala/li/cil/oc/common/PacketHandler.scala b/src/main/scala/li/cil/oc/common/PacketHandler.scala index ad149a766..d43f004aa 100644 --- a/src/main/scala/li/cil/oc/common/PacketHandler.scala +++ b/src/main/scala/li/cil/oc/common/PacketHandler.scala @@ -11,6 +11,7 @@ import li.cil.oc.OpenComputers import li.cil.oc.api import li.cil.oc.common.block.RobotAfterimage import net.minecraft.entity.player.EntityPlayer +import net.minecraft.entity.player.EntityPlayerMP import net.minecraft.item.ItemStack import net.minecraft.nbt.CompressedStreamTools import net.minecraft.world.World @@ -33,6 +34,13 @@ abstract class PacketHandler { case e: Throwable => OpenComputers.log.warn("Received a badly formatted packet.", e) } + + // Avoid AFK kicks by marking players as non-idle when they send packets. + // This will usually be stuff like typing while in screen GUIs. + player match { + case mp: EntityPlayerMP => mp.func_143004_u() + case _ => // Uh... OK? + } } /** From 41f51337b036769ba6b06bf0498892ef85be012e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Wed, 25 May 2016 18:34:01 +0200 Subject: [PATCH 19/48] Porting. --- src/main/scala/li/cil/oc/common/PacketHandler.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/li/cil/oc/common/PacketHandler.scala b/src/main/scala/li/cil/oc/common/PacketHandler.scala index 22b3f1bd9..77ab78fc1 100644 --- a/src/main/scala/li/cil/oc/common/PacketHandler.scala +++ b/src/main/scala/li/cil/oc/common/PacketHandler.scala @@ -55,7 +55,7 @@ abstract class PacketHandler { // Avoid AFK kicks by marking players as non-idle when they send packets. // This will usually be stuff like typing while in screen GUIs. player match { - case mp: EntityPlayerMP => mp.func_143004_u() + case mp: EntityPlayerMP => mp.markPlayerActive() case _ => // Uh... OK? } } From 726aa3616437cf2c2804f57cb013c7cd572473d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Thu, 26 May 2016 11:54:53 +0200 Subject: [PATCH 20/48] Wrap push/popAttrib, don't for now, since it breaks the GlStateManager. --- .../li/cil/oc/client/gui/Assembler.scala | 5 +- .../scala/li/cil/oc/client/gui/Drone.scala | 8 +- .../oc/client/gui/DynamicGuiContainer.scala | 10 +- .../scala/li/cil/oc/client/gui/Printer.scala | 5 +- .../scala/li/cil/oc/client/gui/Rack.scala | 5 +- .../scala/li/cil/oc/client/gui/Robot.scala | 4 +- .../client/renderer/HighlightRenderer.scala | 4 +- .../cil/oc/client/renderer/PetRenderer.scala | 4 +- .../WirelessNetworkDebugRenderer.scala | 4 +- .../renderer/entity/DroneRenderer.scala | 5 +- .../renderer/font/TextureFontRenderer.scala | 8 +- .../client/renderer/gui/BufferRenderer.scala | 4 +- .../renderer/item/HoverBootRenderer.scala | 5 +- .../client/renderer/markdown/Document.scala | 5 +- .../tileentity/AssemblerRenderer.scala | 4 +- .../renderer/tileentity/CaseRenderer.scala | 4 +- .../renderer/tileentity/ChargerRenderer.scala | 4 +- .../tileentity/DisassemblerRenderer.scala | 4 +- .../tileentity/DiskDriveRenderer.scala | 4 +- .../tileentity/GeolyzerRenderer.scala | 6 +- .../tileentity/HologramRenderer.scala | 4 +- .../tileentity/HologramRendererFallback.scala | 6 +- .../tileentity/MicrocontrollerRenderer.scala | 6 +- .../tileentity/NetSplitterRenderer.scala | 4 +- .../tileentity/PowerDistributorRenderer.scala | 4 +- .../renderer/tileentity/PrinterRenderer.scala | 4 +- .../renderer/tileentity/RackRenderer.scala | 8 +- .../renderer/tileentity/RaidRenderer.scala | 6 +- .../renderer/tileentity/RobotRenderer.scala | 8 +- .../renderer/tileentity/ScreenRenderer.scala | 4 +- .../renderer/tileentity/SwitchRenderer.scala | 4 +- .../tileentity/TransposerRenderer.scala | 4 +- .../scala/li/cil/oc/util/RenderState.scala | 102 ++---------------- 33 files changed, 91 insertions(+), 175 deletions(-) diff --git a/src/main/scala/li/cil/oc/client/gui/Assembler.scala b/src/main/scala/li/cil/oc/client/gui/Assembler.scala index 5010f239c..13887ff24 100644 --- a/src/main/scala/li/cil/oc/client/gui/Assembler.scala +++ b/src/main/scala/li/cil/oc/client/gui/Assembler.scala @@ -8,6 +8,7 @@ import li.cil.oc.common.container import li.cil.oc.common.container.ComponentSlot import li.cil.oc.common.template.AssemblerTemplates import li.cil.oc.common.tileentity +import li.cil.oc.util.RenderState import net.minecraft.client.gui.GuiButton import net.minecraft.client.renderer.GlStateManager import net.minecraft.entity.player.InventoryPlayer @@ -55,7 +56,7 @@ class Assembler(playerInventory: InventoryPlayer, val assembler: tileentity.Asse } override def drawSecondaryForegroundLayer(mouseX: Int, mouseY: Int) = { - GlStateManager.pushAttrib() + RenderState.pushAttrib() if (!inventoryContainer.isAssembling) { val message = if (!inventoryContainer.getSlot(0).getHasStack) { @@ -84,7 +85,7 @@ class Assembler(playerInventory: InventoryPlayer, val assembler: tileentity.Asse tooltip.add(Localization.Assembler.Progress(inventoryContainer.assemblyProgress, timeRemaining)) copiedDrawHoveringText(tooltip, mouseX - guiLeft, mouseY - guiTop, fontRendererObj) } - GlStateManager.popAttrib() + RenderState.popAttrib() } private def formatTime(seconds: Int) = { diff --git a/src/main/scala/li/cil/oc/client/gui/Drone.scala b/src/main/scala/li/cil/oc/client/gui/Drone.scala index 7f0ac6b16..dc8b7224c 100644 --- a/src/main/scala/li/cil/oc/client/gui/Drone.scala +++ b/src/main/scala/li/cil/oc/client/gui/Drone.scala @@ -78,18 +78,18 @@ class Drone(playerInventory: InventoryPlayer, val drone: entity.Drone) extends D RenderState.disableEntityLighting() RenderState.makeItBlend() GlStateManager.scale(scale, scale, 1) - GlStateManager.pushAttrib() + RenderState.pushAttrib() GlStateManager.depthMask(false) GlStateManager.color(0.5f, 0.5f, 1f) TextBufferRenderCache.render(bufferRenderer) - GlStateManager.popAttrib() + RenderState.popAttrib() } override protected def changeSize(w: Double, h: Double, recompile: Boolean) = 2.0 override protected def drawSecondaryForegroundLayer(mouseX: Int, mouseY: Int) { drawBufferLayer() - GlStateManager.pushAttrib() + RenderState.pushAttrib() if (isPointInRegion(power.x, power.y, power.width, power.height, mouseX, mouseY)) { val tooltip = new java.util.ArrayList[String] val format = Localization.Computer.Power + ": %d%% (%d/%d)" @@ -104,7 +104,7 @@ class Drone(playerInventory: InventoryPlayer, val drone: entity.Drone) extends D tooltip.addAll(asJavaCollection(if (drone.isRunning) Localization.Computer.TurnOff.lines.toIterable else Localization.Computer.TurnOn.lines.toIterable)) copiedDrawHoveringText(tooltip, mouseX - guiLeft, mouseY - guiTop, fontRendererObj) } - GlStateManager.popAttrib() + RenderState.popAttrib() } override protected def drawGuiContainerBackgroundLayer(dt: Float, mouseX: Int, mouseY: Int) { diff --git a/src/main/scala/li/cil/oc/client/gui/DynamicGuiContainer.scala b/src/main/scala/li/cil/oc/client/gui/DynamicGuiContainer.scala index fa7d87353..bfe04ca37 100644 --- a/src/main/scala/li/cil/oc/client/gui/DynamicGuiContainer.scala +++ b/src/main/scala/li/cil/oc/client/gui/DynamicGuiContainer.scala @@ -36,7 +36,7 @@ abstract class DynamicGuiContainer[C <: Container](container: C) extends CustomG } override protected def drawGuiContainerForegroundLayer(mouseX: Int, mouseY: Int) { - GlStateManager.pushAttrib() + RenderState.pushAttrib() drawSecondaryForegroundLayer(mouseX, mouseY) @@ -44,7 +44,7 @@ abstract class DynamicGuiContainer[C <: Container](container: C) extends CustomG drawSlotHighlight(inventorySlots.inventorySlots.get(slot)) } - GlStateManager.popAttrib() + RenderState.popAttrib() } protected def drawSecondaryBackgroundLayer() {} @@ -56,7 +56,7 @@ abstract class DynamicGuiContainer[C <: Container](container: C) extends CustomG drawSecondaryBackgroundLayer() RenderState.makeItBlend() - RenderState.disableLighting() + GlStateManager.disableLighting() drawInventorySlots() } @@ -82,10 +82,10 @@ abstract class DynamicGuiContainer[C <: Container](container: C) extends CustomG super.drawScreen(mouseX, mouseY, dt) if (Mods.NotEnoughItems.isAvailable) { - GlStateManager.pushAttrib() + RenderState.pushAttrib() RenderState.makeItBlend() // TODO NEI drawNEIHighlights() - GlStateManager.popAttrib() + RenderState.popAttrib() } } diff --git a/src/main/scala/li/cil/oc/client/gui/Printer.scala b/src/main/scala/li/cil/oc/client/gui/Printer.scala index cd6f5c705..3b5b6f8c0 100644 --- a/src/main/scala/li/cil/oc/client/gui/Printer.scala +++ b/src/main/scala/li/cil/oc/client/gui/Printer.scala @@ -6,6 +6,7 @@ import li.cil.oc.client.gui.widget.ProgressBar import li.cil.oc.common.container import li.cil.oc.common.container.ComponentSlot import li.cil.oc.common.tileentity +import li.cil.oc.util.RenderState import net.minecraft.client.renderer.GlStateManager import net.minecraft.entity.player.InventoryPlayer @@ -44,7 +45,7 @@ class Printer(playerInventory: InventoryPlayer, val printer: tileentity.Printer) fontRendererObj.drawString( Localization.localizeImmediately(printer.getName), 8, 6, 0x404040) - GlStateManager.pushAttrib() + RenderState.pushAttrib() if (isPointInRegion(materialBar.x, materialBar.y, materialBar.width, materialBar.height, mouseX, mouseY)) { val tooltip = new java.util.ArrayList[String] tooltip.add(inventoryContainer.amountMaterial + "/" + printer.maxAmountMaterial) @@ -55,7 +56,7 @@ class Printer(playerInventory: InventoryPlayer, val printer: tileentity.Printer) tooltip.add(inventoryContainer.amountInk + "/" + printer.maxAmountInk) copiedDrawHoveringText(tooltip, mouseX - guiLeft, mouseY - guiTop, fontRendererObj) } - GlStateManager.popAttrib() + RenderState.popAttrib() } override def drawGuiContainerBackgroundLayer(dt: Float, mouseX: Int, mouseY: Int) { diff --git a/src/main/scala/li/cil/oc/client/gui/Rack.scala b/src/main/scala/li/cil/oc/client/gui/Rack.scala index 27edd8ee2..d8d074986 100644 --- a/src/main/scala/li/cil/oc/client/gui/Rack.scala +++ b/src/main/scala/li/cil/oc/client/gui/Rack.scala @@ -5,6 +5,7 @@ import li.cil.oc.client.Textures import li.cil.oc.client.{PacketSender => ClientPacketSender} import li.cil.oc.common.container import li.cil.oc.common.tileentity +import li.cil.oc.util.RenderState import net.minecraft.client.gui.GuiButton import net.minecraft.client.renderer.GlStateManager import net.minecraft.client.renderer.Tessellator @@ -160,7 +161,7 @@ class Rack(playerInventory: InventoryPlayer, val rack: tileentity.Rack) extends override def drawSecondaryForegroundLayer(mouseX: Int, mouseY: Int) = { super.drawSecondaryForegroundLayer(mouseX, mouseY) - GlStateManager.pushAttrib() // Prevents NEI render glitch. + RenderState.pushAttrib() // Prevents NEI render glitch. fontRendererObj.drawString( Localization.localizeImmediately(rack.getName), @@ -250,7 +251,7 @@ class Rack(playerInventory: InventoryPlayer, val rack: tileentity.Rack) extends x, y, 0x404040) } - GlStateManager.popAttrib() + RenderState.popAttrib() } override def drawSecondaryBackgroundLayer() { diff --git a/src/main/scala/li/cil/oc/client/gui/Robot.scala b/src/main/scala/li/cil/oc/client/gui/Robot.scala index d80f3eb87..7daa6d006 100644 --- a/src/main/scala/li/cil/oc/client/gui/Robot.scala +++ b/src/main/scala/li/cil/oc/client/gui/Robot.scala @@ -128,7 +128,7 @@ class Robot(playerInventory: InventoryPlayer, val robot: tileentity.Robot) exten override protected def drawSecondaryForegroundLayer(mouseX: Int, mouseY: Int) { drawBufferLayer() - GlStateManager.pushAttrib() + RenderState.pushAttrib() if (isPointInRegion(power.x, power.y, power.width, power.height, mouseX, mouseY)) { val tooltip = new java.util.ArrayList[String] val format = Localization.Computer.Power + ": %d%% (%d/%d)" @@ -143,7 +143,7 @@ class Robot(playerInventory: InventoryPlayer, val robot: tileentity.Robot) exten tooltip.addAll(asJavaCollection(if (robot.isRunning) Localization.Computer.TurnOff.lines.toIterable else Localization.Computer.TurnOn.lines.toIterable)) copiedDrawHoveringText(tooltip, mouseX - guiLeft, mouseY - guiTop, fontRendererObj) } - GlStateManager.popAttrib() + RenderState.popAttrib() } override protected def drawGuiContainerBackgroundLayer(dt: Float, mouseX: Int, mouseY: Int) { diff --git a/src/main/scala/li/cil/oc/client/renderer/HighlightRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/HighlightRenderer.scala index 7573f68e6..5c2931f7f 100644 --- a/src/main/scala/li/cil/oc/client/renderer/HighlightRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/HighlightRenderer.scala @@ -49,7 +49,7 @@ object HighlightRenderer { val renderPos = blockPos.offset(-playerPos.xCoord, -playerPos.yCoord, -playerPos.zCoord) GlStateManager.pushMatrix() - GlStateManager.pushAttrib() + RenderState.pushAttrib() RenderState.makeItBlend() Textures.bind(Textures.Model.HologramEffect) @@ -102,7 +102,7 @@ object HighlightRenderer { } t.draw() - GlStateManager.popAttrib() + RenderState.popAttrib() GlStateManager.popMatrix() } } diff --git a/src/main/scala/li/cil/oc/client/renderer/PetRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/PetRenderer.scala index 7b456bc01..978cd43bb 100644 --- a/src/main/scala/li/cil/oc/client/renderer/PetRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/PetRenderer.scala @@ -60,7 +60,7 @@ object PetRenderer { }) GlStateManager.pushMatrix() - GlStateManager.pushAttrib() + RenderState.pushAttrib() val localPos = Minecraft.getMinecraft.thePlayer.getPositionEyes(e.partialRenderTick) val playerPos = e.entityPlayer.getPositionEyes(e.partialRenderTick) val correction = 1.62 - (if (e.entityPlayer.isSneaking) 0.125 else 0) @@ -84,7 +84,7 @@ object PetRenderer { RenderState.disableEntityLighting() GlStateManager.disableRescaleNormal() - GlStateManager.popAttrib() + RenderState.popAttrib() GlStateManager.popMatrix() rendering = None diff --git a/src/main/scala/li/cil/oc/client/renderer/WirelessNetworkDebugRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/WirelessNetworkDebugRenderer.scala index 22017b65d..627828840 100644 --- a/src/main/scala/li/cil/oc/client/renderer/WirelessNetworkDebugRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/WirelessNetworkDebugRenderer.scala @@ -28,7 +28,7 @@ object WirelessNetworkDebugRenderer { val py = player.lastTickPosY + (player.posY - player.lastTickPosY) * e.partialTicks val pz = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * e.partialTicks - GlStateManager.pushAttrib() + RenderState.pushAttrib() GlStateManager.pushMatrix() GL11.glTranslated(-px, -py, -pz) RenderState.makeItBlend() @@ -91,7 +91,7 @@ object WirelessNetworkDebugRenderer { } GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_FILL) - GlStateManager.popAttrib() + RenderState.popAttrib() GlStateManager.popMatrix() case _ => } diff --git a/src/main/scala/li/cil/oc/client/renderer/entity/DroneRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/entity/DroneRenderer.scala index f22721d1e..3f4d1ab44 100644 --- a/src/main/scala/li/cil/oc/client/renderer/entity/DroneRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/entity/DroneRenderer.scala @@ -2,6 +2,7 @@ package li.cil.oc.client.renderer.entity import li.cil.oc.client.Textures import li.cil.oc.common.entity.Drone +import li.cil.oc.util.RenderState import net.minecraft.client.Minecraft import net.minecraft.client.renderer.GlStateManager import net.minecraft.client.renderer.entity.Render @@ -12,13 +13,13 @@ object DroneRenderer extends Render[Drone](Minecraft.getMinecraft.getRenderManag override def doRender(entity: Drone, x: Double, y: Double, z: Double, yaw: Float, dt: Float) { bindEntityTexture(entity) GlStateManager.pushMatrix() - GlStateManager.pushAttrib() + RenderState.pushAttrib() GlStateManager.translate(x, y + 2 / 16f, z) model.render(entity, 0, 0, 0, 0, 0, dt) - GlStateManager.popAttrib() + RenderState.popAttrib() GlStateManager.popMatrix() } diff --git a/src/main/scala/li/cil/oc/client/renderer/font/TextureFontRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/font/TextureFontRenderer.scala index 5f2d204b1..b4a6e97b7 100644 --- a/src/main/scala/li/cil/oc/client/renderer/font/TextureFontRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/font/TextureFontRenderer.scala @@ -36,7 +36,7 @@ abstract class TextureFontRenderer { val format = buffer.format GlStateManager.pushMatrix() - GlStateManager.pushAttrib() + RenderState.pushAttrib() GlStateManager.scale(0.5f, 0.5f, 1) @@ -112,7 +112,7 @@ abstract class TextureFontRenderer { GlStateManager.bindTexture(0) GlStateManager.depthMask(true) GlStateManager.color(1, 1, 1) - GlStateManager.popAttrib() + RenderState.popAttrib() GlStateManager.popMatrix() RenderState.checkError(getClass.getName + ".drawBuffer: leaving") @@ -120,7 +120,7 @@ abstract class TextureFontRenderer { def drawString(s: String, x: Int, y: Int): Unit = { GlStateManager.pushMatrix() - GlStateManager.pushAttrib() + RenderState.pushAttrib() GlStateManager.translate(x, y, 0) GlStateManager.scale(0.5f, 0.5f, 1) @@ -141,7 +141,7 @@ abstract class TextureFontRenderer { GL11.glEnd() } - GlStateManager.popAttrib() + RenderState.popAttrib() GlStateManager.popMatrix() GlStateManager.color(1, 1, 1) } diff --git a/src/main/scala/li/cil/oc/client/renderer/gui/BufferRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/gui/BufferRenderer.scala index 10b0567fd..54023d938 100644 --- a/src/main/scala/li/cil/oc/client/renderer/gui/BufferRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/gui/BufferRenderer.scala @@ -89,11 +89,11 @@ object BufferRenderer { def drawText(screen: api.internal.TextBuffer) = if (textureManager.isDefined) { - GlStateManager.pushAttrib() + RenderState.pushAttrib() GlStateManager.depthMask(false) val changed = screen.renderText() GlStateManager.depthMask(true) - GlStateManager.popAttrib() + RenderState.popAttrib() changed } else false diff --git a/src/main/scala/li/cil/oc/client/renderer/item/HoverBootRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/item/HoverBootRenderer.scala index c5d67782e..5970b7b47 100644 --- a/src/main/scala/li/cil/oc/client/renderer/item/HoverBootRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/item/HoverBootRenderer.scala @@ -1,6 +1,7 @@ package li.cil.oc.client.renderer.item import li.cil.oc.Settings +import li.cil.oc.util.RenderState import net.minecraft.client.model.ModelBase import net.minecraft.client.model.ModelBiped import net.minecraft.client.model.ModelRenderer @@ -103,7 +104,7 @@ object HoverBootRenderer extends ModelBiped { class LightModelRenderer(modelBase: ModelBase, name: String) extends ModelRenderer(modelBase, name) { override def render(dt: Float): Unit = { - GlStateManager.pushAttrib() + RenderState.pushAttrib() GlStateManager.disableLighting() GlStateManager.depthFunc(GL11.GL_LEQUAL) GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE) @@ -117,7 +118,7 @@ object HoverBootRenderer extends ModelBiped { GlStateManager.color(1, 1, 1) GlStateManager.enableLighting() RenderHelper.enableStandardItemLighting() - GlStateManager.popAttrib() + RenderState.popAttrib() } } diff --git a/src/main/scala/li/cil/oc/client/renderer/markdown/Document.scala b/src/main/scala/li/cil/oc/client/renderer/markdown/Document.scala index b5e1ef7f1..1f04185d3 100644 --- a/src/main/scala/li/cil/oc/client/renderer/markdown/Document.scala +++ b/src/main/scala/li/cil/oc/client/renderer/markdown/Document.scala @@ -3,6 +3,7 @@ package li.cil.oc.client.renderer.markdown import li.cil.oc.api import li.cil.oc.client.renderer.markdown.segment.InteractiveSegment import li.cil.oc.client.renderer.markdown.segment.Segment +import li.cil.oc.util.RenderState import net.minecraft.client.Minecraft import net.minecraft.client.gui.FontRenderer import net.minecraft.client.renderer.GlStateManager @@ -69,7 +70,7 @@ object Document { def render(document: Segment, x: Int, y: Int, maxWidth: Int, maxHeight: Int, yOffset: Int, renderer: FontRenderer, mouseX: Int, mouseY: Int): Option[InteractiveSegment] = { val mc = Minecraft.getMinecraft - GlStateManager.pushAttrib() + RenderState.pushAttrib() // On some systems/drivers/graphics cards the next calls won't update the // depth buffer correctly if alpha test is enabled. Guess how we found out? @@ -120,7 +121,7 @@ object Document { if (mouseX < x || mouseX > x + maxWidth || mouseY < y || mouseY > y + maxHeight) hovered = None hovered.foreach(_.notifyHover()) - GlStateManager.popAttrib() + RenderState.popAttrib() GlStateManager.bindTexture(0) hovered diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/AssemblerRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/AssemblerRenderer.scala index 11df10a7e..6dc76ee7f 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/AssemblerRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/AssemblerRenderer.scala @@ -14,7 +14,7 @@ object AssemblerRenderer extends TileEntitySpecialRenderer[Assembler] { override def renderTileEntityAt(assembler: Assembler, x: Double, y: Double, z: Double, f: Float, damage: Int) { RenderState.checkError(getClass.getName + ".renderTileEntityAt: entering (aka: wasntme)") - GlStateManager.pushAttrib() + RenderState.pushAttrib() RenderState.disableEntityLighting() RenderState.makeItBlend() @@ -68,7 +68,7 @@ object AssemblerRenderer extends TileEntitySpecialRenderer[Assembler] { RenderState.enableEntityLighting() GlStateManager.popMatrix() - GlStateManager.popAttrib() + RenderState.popAttrib() RenderState.checkError(getClass.getName + ".renderTileEntityAt: leaving") } diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/CaseRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/CaseRenderer.scala index 1b305ab7e..fe7c1e739 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/CaseRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/CaseRenderer.scala @@ -15,7 +15,7 @@ object CaseRenderer extends TileEntitySpecialRenderer[Case] { override def renderTileEntityAt(computer: Case, x: Double, y: Double, z: Double, f: Float, damage: Int) { RenderState.checkError(getClass.getName + ".renderTileEntityAt: entering (aka: wasntme)") - GlStateManager.pushAttrib() + RenderState.pushAttrib() RenderState.disableEntityLighting() RenderState.makeItBlend() @@ -48,7 +48,7 @@ object CaseRenderer extends TileEntitySpecialRenderer[Case] { RenderState.enableEntityLighting() GlStateManager.popMatrix() - GlStateManager.popAttrib() + RenderState.popAttrib() RenderState.checkError(getClass.getName + ".renderTileEntityAt: leaving") } diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/ChargerRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/ChargerRenderer.scala index bd6c82e1d..cb5908c99 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/ChargerRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/ChargerRenderer.scala @@ -15,7 +15,7 @@ object ChargerRenderer extends TileEntitySpecialRenderer[Charger] { RenderState.checkError(getClass.getName + ".renderTileEntityAt: entering (aka: wasntme)") if (charger.chargeSpeed > 0) { - GlStateManager.pushAttrib() + RenderState.pushAttrib() RenderState.disableEntityLighting() RenderState.makeItBlend() @@ -75,7 +75,7 @@ object ChargerRenderer extends TileEntitySpecialRenderer[Charger] { RenderState.enableEntityLighting() GlStateManager.popMatrix() - GlStateManager.popAttrib() + RenderState.popAttrib() } RenderState.checkError(getClass.getName + ".renderTileEntityAt: leaving") diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/DisassemblerRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/DisassemblerRenderer.scala index f8c5fe78a..76bb2c44a 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/DisassemblerRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/DisassemblerRenderer.scala @@ -14,7 +14,7 @@ object DisassemblerRenderer extends TileEntitySpecialRenderer[tileentity.Disasse RenderState.checkError(getClass.getName + ".renderTileEntityAt: entering (aka: wasntme)") if (disassembler.isActive) { - GlStateManager.pushAttrib() + RenderState.pushAttrib() RenderState.disableEntityLighting() RenderState.makeItBlend() @@ -67,7 +67,7 @@ object DisassemblerRenderer extends TileEntitySpecialRenderer[tileentity.Disasse RenderState.enableEntityLighting() GlStateManager.popMatrix() - GlStateManager.popAttrib() + RenderState.popAttrib() } RenderState.checkError(getClass.getName + ".renderTileEntityAt: leaving") diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/DiskDriveRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/DiskDriveRenderer.scala index 0a60c59b1..daa18d581 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/DiskDriveRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/DiskDriveRenderer.scala @@ -18,7 +18,7 @@ object DiskDriveRenderer extends TileEntitySpecialRenderer[DiskDrive] { override def renderTileEntityAt(drive: DiskDrive, x: Double, y: Double, z: Double, f: Float, damage: Int) { RenderState.checkError(getClass.getName + ".renderTileEntityAt: entering (aka: wasntme)") - GlStateManager.pushAttrib() + RenderState.pushAttrib() GlStateManager.color(1, 1, 1, 1) GlStateManager.pushMatrix() @@ -77,7 +77,7 @@ object DiskDriveRenderer extends TileEntitySpecialRenderer[DiskDrive] { } GlStateManager.popMatrix() - GlStateManager.popAttrib() + RenderState.popAttrib() RenderState.checkError(getClass.getName + ".renderTileEntityAt: leaving") } diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/GeolyzerRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/GeolyzerRenderer.scala index 065c306ff..583ab5323 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/GeolyzerRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/GeolyzerRenderer.scala @@ -13,12 +13,12 @@ object GeolyzerRenderer extends TileEntitySpecialRenderer[Geolyzer] { override def renderTileEntityAt(geolyzer: Geolyzer, x: Double, y: Double, z: Double, f: Float, damage: Int) { RenderState.checkError(getClass.getName + ".renderTileEntityAt: entering (aka: wasntme)") - GlStateManager.pushAttrib() + RenderState.pushAttrib() RenderState.disableEntityLighting() RenderState.makeItBlend() RenderState.setBlendAlpha(1) - RenderState.color(1, 1, 1, 1) + GlStateManager.color(1, 1, 1, 1) GlStateManager.pushMatrix() @@ -43,7 +43,7 @@ object GeolyzerRenderer extends TileEntitySpecialRenderer[Geolyzer] { RenderState.enableEntityLighting() GlStateManager.popMatrix() - GlStateManager.popAttrib() + RenderState.popAttrib() RenderState.checkError(getClass.getName + ".renderTileEntityAt: leaving") } diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/HologramRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/HologramRenderer.scala index 61c4c4006..263e663d4 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/HologramRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/HologramRenderer.scala @@ -76,7 +76,7 @@ object HologramRenderer extends TileEntitySpecialRenderer[Hologram] with Callabl if (!hologram.hasPower) return GL11.glPushClientAttrib(GL11.GL_ALL_CLIENT_ATTRIB_BITS) - GlStateManager.pushAttrib() + RenderState.pushAttrib() RenderState.makeItBlend() GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE) @@ -151,7 +151,7 @@ object HologramRenderer extends TileEntitySpecialRenderer[Hologram] with Callabl GlStateManager.depthFunc(GL11.GL_LEQUAL) GlStateManager.popMatrix() - GlStateManager.popAttrib() + RenderState.popAttrib() GL11.glPopClientAttrib() RenderState.checkError(getClass.getName + ".renderTileEntityAt: leaving") diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/HologramRendererFallback.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/HologramRendererFallback.scala index e75977077..16b301216 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/HologramRendererFallback.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/HologramRendererFallback.scala @@ -14,14 +14,14 @@ object HologramRendererFallback extends TileEntitySpecialRenderer[Hologram] { val fontRenderer = Minecraft.getMinecraft.fontRendererObj - RenderState.pushMatrix() + GlStateManager.pushMatrix() GlStateManager.translate(x + 0.5, y + 0.75, z + 0.5) GlStateManager.scale(1 / 128f, -1 / 128f, 1 / 128f) - RenderState.disableCullFace() + GlStateManager.disableCull() fontRenderer.drawString(text, -fontRenderer.getStringWidth(text) / 2, 0, 0xFFFFFFFF) - RenderState.popMatrix() + GlStateManager.popMatrix() RenderState.checkError(getClass.getName + ".renderTileEntityAt: leaving") } diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/MicrocontrollerRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/MicrocontrollerRenderer.scala index 5b001857b..aa2315947 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/MicrocontrollerRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/MicrocontrollerRenderer.scala @@ -16,12 +16,12 @@ object MicrocontrollerRenderer extends TileEntitySpecialRenderer[Microcontroller override def renderTileEntityAt(mcu: Microcontroller, x: Double, y: Double, z: Double, f: Float, damage: Int) { RenderState.checkError(getClass.getName + ".renderTileEntityAt: entering (aka: wasntme)") - GlStateManager.pushAttrib() + RenderState.pushAttrib() RenderState.disableEntityLighting() RenderState.makeItBlend() RenderState.setBlendAlpha(1) - RenderState.color(1, 1, 1, 1) + GlStateManager.color(1, 1, 1, 1) GlStateManager.pushMatrix() @@ -57,7 +57,7 @@ object MicrocontrollerRenderer extends TileEntitySpecialRenderer[Microcontroller RenderState.enableEntityLighting() GlStateManager.popMatrix() - GlStateManager.popAttrib() + RenderState.popAttrib() RenderState.checkError(getClass.getName + ".renderTileEntityAt: leaving") } diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/NetSplitterRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/NetSplitterRenderer.scala index 8e53afece..2a6a6d30b 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/NetSplitterRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/NetSplitterRenderer.scala @@ -16,7 +16,7 @@ object NetSplitterRenderer extends TileEntitySpecialRenderer[tileentity.NetSplit RenderState.checkError(getClass.getName + ".renderTileEntityAt: entering (aka: wasntme)") if (splitter.openSides.contains(!splitter.isInverted)) { - GlStateManager.pushAttrib() + RenderState.pushAttrib() RenderState.disableEntityLighting() RenderState.makeItBlend() @@ -83,7 +83,7 @@ object NetSplitterRenderer extends TileEntitySpecialRenderer[tileentity.NetSplit RenderState.enableEntityLighting() GlStateManager.popMatrix() - GlStateManager.popAttrib() + RenderState.popAttrib() } RenderState.checkError(getClass.getName + ".renderTileEntityAt: leaving") diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/PowerDistributorRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/PowerDistributorRenderer.scala index fcd8fda91..57f1d7fe7 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/PowerDistributorRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/PowerDistributorRenderer.scala @@ -14,7 +14,7 @@ object PowerDistributorRenderer extends TileEntitySpecialRenderer[tileentity.Pow RenderState.checkError(getClass.getName + ".renderTileEntityAt: entering (aka: wasntme)") if (distributor.globalBuffer > 0) { - GlStateManager.pushAttrib() + RenderState.pushAttrib() RenderState.disableEntityLighting() RenderState.makeItBlend() @@ -68,7 +68,7 @@ object PowerDistributorRenderer extends TileEntitySpecialRenderer[tileentity.Pow RenderState.enableEntityLighting() GlStateManager.popMatrix() - GlStateManager.popAttrib() + RenderState.popAttrib() } RenderState.checkError(getClass.getName + ".renderTileEntityAt: leaving") diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/PrinterRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/PrinterRenderer.scala index c0e12bb71..406e832b9 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/PrinterRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/PrinterRenderer.scala @@ -17,7 +17,7 @@ object PrinterRenderer extends TileEntitySpecialRenderer[Printer] { if (printer.data.stateOff.nonEmpty) { val stack = printer.data.createItemStack() - GlStateManager.pushAttrib() + RenderState.pushAttrib() GlStateManager.pushMatrix() GlStateManager.translate(x + 0.5, y + 0.5 + 0.3, z + 0.5) @@ -35,7 +35,7 @@ object PrinterRenderer extends TileEntitySpecialRenderer[Printer] { Minecraft.getMinecraft.getRenderItem.renderItem(entity.getEntityItem, ItemCameraTransforms.TransformType.FIXED) GlStateManager.popMatrix() - GlStateManager.popAttrib() + RenderState.popAttrib() } RenderState.checkError(getClass.getName + ".renderTileEntityAt: leaving") diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/RackRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/RackRenderer.scala index 063828ffe..4863f0031 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/RackRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/RackRenderer.scala @@ -16,7 +16,7 @@ object RackRenderer extends TileEntitySpecialRenderer[Rack] { override def renderTileEntityAt(rack: Rack, x: Double, y: Double, z: Double, partialTicks: Float, destroyStage: Int): Unit = { RenderState.checkError(getClass.getName + ".renderTileEntityAt: entering (aka: wasntme)") - GlStateManager.popAttrib() + RenderState.pushAttrib() GlStateManager.pushMatrix() @@ -36,20 +36,20 @@ object RackRenderer extends TileEntitySpecialRenderer[Rack] { for (i <- 0 until rack.getSizeInventory) { if (rack.getStackInSlot(i) != null) { GlStateManager.pushMatrix() - GlStateManager.pushAttrib() + RenderState.pushAttrib() val v0 = vOffset + i * vSize val v1 = vOffset + (i + 1) * vSize val event = new RackMountableRenderEvent.TileEntity(rack, i, rack.lastData(i), v0, v1) MinecraftForge.EVENT_BUS.post(event) - GlStateManager.popAttrib() + RenderState.popAttrib() GlStateManager.popMatrix() } } GlStateManager.popMatrix() - GlStateManager.popAttrib() + RenderState.popAttrib() RenderState.checkError(getClass.getName + ".renderTileEntityAt: leaving") } diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/RaidRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/RaidRenderer.scala index 6cccd0d58..e0a572515 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/RaidRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/RaidRenderer.scala @@ -16,11 +16,11 @@ object RaidRenderer extends TileEntitySpecialRenderer[Raid] { override def renderTileEntityAt(raid: Raid, x: Double, y: Double, z: Double, f: Float, damage: Int) { RenderState.checkError(getClass.getName + ".renderTileEntityAt: entering (aka: wasntme)") - GlStateManager.pushAttrib() + RenderState.pushAttrib() RenderState.disableEntityLighting() RenderState.makeItBlend() - RenderState.color(1, 1, 1, 1) + GlStateManager.color(1, 1, 1, 1) GlStateManager.pushMatrix() @@ -65,7 +65,7 @@ object RaidRenderer extends TileEntitySpecialRenderer[Raid] { RenderState.enableEntityLighting() GlStateManager.popMatrix() - GlStateManager.popAttrib() + RenderState.popAttrib() RenderState.checkError(getClass.getName + ".renderTileEntityAt: leaving") } diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala index af48b2fbf..2b455159a 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala @@ -299,7 +299,7 @@ object RobotRenderer extends TileEntitySpecialRenderer[tileentity.RobotProxy] { val worldTime = robot.getWorld.getTotalWorldTime + f GlStateManager.pushMatrix() - GlStateManager.pushAttrib() + RenderState.pushAttrib() GlStateManager.translate(x + 0.5, y + 0.5, z + 0.5) // If the move started while we were rendering and we have a reference to @@ -349,7 +349,7 @@ object RobotRenderer extends TileEntitySpecialRenderer[tileentity.RobotProxy] { Option(robot.getStackInSlot(0)) match { case Some(stack) => - GlStateManager.pushAttrib() + RenderState.pushAttrib() GlStateManager.pushMatrix() try { // Copy-paste from player render code, with minor adjustments for @@ -408,7 +408,7 @@ object RobotRenderer extends TileEntitySpecialRenderer[tileentity.RobotProxy] { GlStateManager.enableCull() GlStateManager.disableRescaleNormal() GlStateManager.popMatrix() - GlStateManager.popAttrib() + RenderState.popAttrib() case _ => } @@ -495,7 +495,7 @@ object RobotRenderer extends TileEntitySpecialRenderer[tileentity.RobotProxy] { } GlStateManager.popMatrix() - GlStateManager.popAttrib() + RenderState.popAttrib() RenderState.checkError(getClass.getName + ".renderTileEntityAt: leaving") } diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala index 3d63e4dce..573fdada2 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala @@ -59,7 +59,7 @@ object ScreenRenderer extends TileEntitySpecialRenderer[Screen] { RenderState.checkError(getClass.getName + ".renderTileEntityAt: checks") - GlStateManager.pushAttrib() + RenderState.pushAttrib() RenderState.disableEntityLighting() RenderState.makeItBlend() @@ -93,7 +93,7 @@ object ScreenRenderer extends TileEntitySpecialRenderer[Screen] { GlStateManager.color(1, 1, 1, 1) // #1648 GlStateManager.popMatrix() - GlStateManager.popAttrib() + RenderState.popAttrib() RenderState.checkError(getClass.getName + ".renderTileEntityAt: leaving") } diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/SwitchRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/SwitchRenderer.scala index 5ae0d5273..db3b18352 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/SwitchRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/SwitchRenderer.scala @@ -15,7 +15,7 @@ class SwitchRenderer[T <: tileentity.traits.SwitchLike] extends TileEntitySpecia val activity = math.max(0, 1 - (System.currentTimeMillis() - switch.lastMessage) / 1000.0) if (activity > 0) { - GlStateManager.pushAttrib() + RenderState.pushAttrib() RenderState.disableEntityLighting() RenderState.makeItBlend() @@ -59,7 +59,7 @@ class SwitchRenderer[T <: tileentity.traits.SwitchLike] extends TileEntitySpecia RenderState.enableEntityLighting() GlStateManager.popMatrix() - GlStateManager.popAttrib() + RenderState.popAttrib() } RenderState.checkError(getClass.getName + ".renderTileEntityAt: leaving") diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/TransposerRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/TransposerRenderer.scala index a7821a075..5bc8367ca 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/TransposerRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/TransposerRenderer.scala @@ -15,7 +15,7 @@ object TransposerRenderer extends TileEntitySpecialRenderer[tileentity.Transpose val activity = math.max(0, 1 - (System.currentTimeMillis() - transposer.lastOperation) / 1000.0) if (activity > 0) { - GlStateManager.pushAttrib() + RenderState.pushAttrib() RenderState.disableEntityLighting() RenderState.makeItBlend() @@ -69,7 +69,7 @@ object TransposerRenderer extends TileEntitySpecialRenderer[tileentity.Transpose RenderState.enableEntityLighting() GlStateManager.popMatrix() - GlStateManager.popAttrib() + RenderState.popAttrib() } RenderState.checkError(getClass.getName + ".renderTileEntityAt: leaving") diff --git a/src/main/scala/li/cil/oc/util/RenderState.scala b/src/main/scala/li/cil/oc/util/RenderState.scala index 701ff9dbc..f32ddca8e 100644 --- a/src/main/scala/li/cil/oc/util/RenderState.scala +++ b/src/main/scala/li/cil/oc/util/RenderState.scala @@ -34,75 +34,15 @@ object RenderState { else false } - def pushAttrib(mask: Int = 8256): Unit = { - GL11.glPushAttrib(mask) + // pushAttrib/popAttrib currently breaks the GlStateManager because it doesn't + // accordingly pushes/pops its cache, so it gets into an illegal state... + // See https://gist.github.com/fnuecke/9a5b2499835fca9b52419277dc6239ca + def pushAttrib(): Unit = { +// GlStateManager.glPushAttrib(mask) } def popAttrib(): Unit = { - GlStateManager.popAttrib() - } - - def pushMatrix(): Unit = { - GlStateManager.pushMatrix() - } - - def popMatrix(): Unit = { - GlStateManager.popMatrix() - } - - def color(r: Float, g: Float, b: Float, a: Float = 1f): Unit = { - GlStateManager.color(r, g, b, a) - GL11.glColor4f(r, g, b, a) - } - - def disableColorMask(): Unit = { - GlStateManager.colorMask(false, false, false, false) - GL11.glColorMask(false, false, false, false) - } - - def enableColorMask(): Unit = { - GlStateManager.colorMask(true, true, true, true) - GL11.glColorMask(true, true, true, true) - } - - def disableCullFace(): Unit = { - GlStateManager.disableCull() - GL11.glDisable(GL11.GL_CULL_FACE) - } - - def enableCullFace(): Unit = { - GlStateManager.enableCull() - GL11.glEnable(GL11.GL_CULL_FACE) - } - - def disableDepth(): Unit = { - GlStateManager.disableDepth() - GL11.glDisable(GL11.GL_DEPTH_TEST) - } - - def enableDepth(): Unit = { - GlStateManager.enableDepth() - GL11.glEnable(GL11.GL_DEPTH_TEST) - } - - def disableDepthMask(): Unit = { - GlStateManager.depthMask(false) - GL11.glDepthMask(false) - } - - def enableDepthMask(): Unit = { - GlStateManager.depthMask(true) - GL11.glDepthMask(true) - } - - def disableLighting(): Unit = { - GlStateManager.disableLighting() - GL11.glDisable(GL11.GL_LIGHTING) - } - - def enableLighting(): Unit = { - GlStateManager.enableLighting() - GL11.glEnable(GL11.GL_LIGHTING) +// GlStateManager.popAttrib() } def disableEntityLighting() { @@ -115,42 +55,12 @@ object RenderState { RenderHelper.enableStandardItemLighting() } - def disableRescaleNormal(): Unit = { - GlStateManager.disableRescaleNormal() - GL11.glDisable(GL12.GL_RESCALE_NORMAL) - } - - def enableRescaleNormal(): Unit = { - GlStateManager.enableRescaleNormal() - GL11.glEnable(GL12.GL_RESCALE_NORMAL) - } - def makeItBlend() { GlStateManager.enableBlend() GL11.glEnable(GL11.GL_BLEND) GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA) } - def disableBlend(): Unit = { - GlStateManager.disableBlend() - GL11.glDisable(GL11.GL_BLEND) - } - - def blendFunc(sFactor: Int, dFactor: Int): Unit = { - GlStateManager.blendFunc(sFactor, dFactor) - GL11.glBlendFunc(sFactor, dFactor) - } - - def cullFace(mode: Int): Unit = { - GlStateManager.cullFace(mode) - GL11.glCullFace(mode) - } - - def depthFunc(func: Int): Unit = { - GlStateManager.depthFunc(func) - GL11.glDepthFunc(func) - } - def setBlendAlpha(alpha: Float) = { GlStateManager.color(1, 1, 1, alpha) GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE) From ea37f4db678d6c20176c9ede361a0103ea3a8fc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Thu, 26 May 2016 17:34:37 +0200 Subject: [PATCH 21/48] Not all things must tick. --- .../scala/li/cil/oc/common/block/RedstoneAware.scala | 6 +----- .../scala/li/cil/oc/common/tileentity/Adapter.scala | 6 ++---- .../scala/li/cil/oc/common/tileentity/Assembler.scala | 4 +--- src/main/scala/li/cil/oc/common/tileentity/Cable.scala | 2 -- .../scala/li/cil/oc/common/tileentity/Capacitor.scala | 2 -- src/main/scala/li/cil/oc/common/tileentity/Case.scala | 2 -- .../scala/li/cil/oc/common/tileentity/Charger.scala | 4 +--- .../li/cil/oc/common/tileentity/Disassembler.scala | 6 ++---- .../scala/li/cil/oc/common/tileentity/DiskDrive.scala | 2 -- .../scala/li/cil/oc/common/tileentity/Geolyzer.scala | 2 -- .../scala/li/cil/oc/common/tileentity/Hologram.scala | 4 +--- .../scala/li/cil/oc/common/tileentity/Keyboard.scala | 2 -- .../li/cil/oc/common/tileentity/Microcontroller.scala | 4 +--- .../li/cil/oc/common/tileentity/MotionSensor.scala | 7 ++----- .../li/cil/oc/common/tileentity/NetSplitter.scala | 2 -- .../li/cil/oc/common/tileentity/PowerConverter.scala | 5 ++++- .../li/cil/oc/common/tileentity/PowerDistributor.scala | 2 -- src/main/scala/li/cil/oc/common/tileentity/Print.scala | 2 -- .../scala/li/cil/oc/common/tileentity/Printer.scala | 10 ++++++---- src/main/scala/li/cil/oc/common/tileentity/Raid.scala | 2 -- .../scala/li/cil/oc/common/tileentity/Redstone.scala | 8 +++++--- src/main/scala/li/cil/oc/common/tileentity/Relay.scala | 2 -- .../scala/li/cil/oc/common/tileentity/Screen.scala | 2 -- .../scala/li/cil/oc/common/tileentity/Switch.scala | 2 -- .../scala/li/cil/oc/common/tileentity/Transposer.scala | 2 -- .../scala/li/cil/oc/common/tileentity/Waypoint.scala | 2 +- .../li/cil/oc/common/tileentity/traits/Computer.scala | 2 +- .../cil/oc/common/tileentity/traits/Environment.scala | 2 +- .../scala/li/cil/oc/common/tileentity/traits/Hub.scala | 2 +- .../oc/common/tileentity/traits/PowerBalancer.scala | 2 +- .../oc/common/tileentity/traits/RedstoneAware.scala | 8 ++++++-- .../cil/oc/common/tileentity/traits/TextBuffer.scala | 2 +- .../li/cil/oc/common/tileentity/traits/Tickable.scala | 9 +++++++++ .../cil/oc/common/tileentity/traits/TileEntity.scala | 9 +-------- .../traits/power/IndustrialCraft2Experimental.scala | 3 ++- src/main/scala/li/cil/oc/server/machine/Machine.scala | 1 + 36 files changed, 51 insertions(+), 83 deletions(-) create mode 100644 src/main/scala/li/cil/oc/common/tileentity/traits/Tickable.scala diff --git a/src/main/scala/li/cil/oc/common/block/RedstoneAware.scala b/src/main/scala/li/cil/oc/common/block/RedstoneAware.scala index e99eb7666..2891b4cf7 100644 --- a/src/main/scala/li/cil/oc/common/block/RedstoneAware.scala +++ b/src/main/scala/li/cil/oc/common/block/RedstoneAware.scala @@ -54,11 +54,7 @@ abstract class RedstoneAware extends SimpleBlock /* with IRedNetOmniNode TODO MF } */ world.getTileEntity(pos) match { - case redstone: tileentity.traits.RedstoneAware => - if (redstone.canUpdate) - redstone.checkRedstoneInputChanged() - else - EnumFacing.values().foreach(redstone.updateRedstoneInput) + case redstone: tileentity.traits.RedstoneAware => redstone.checkRedstoneInputChanged() case _ => // Ignore. } } diff --git a/src/main/scala/li/cil/oc/common/tileentity/Adapter.scala b/src/main/scala/li/cil/oc/common/tileentity/Adapter.scala index 73740bf41..f29918572 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Adapter.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Adapter.scala @@ -16,7 +16,7 @@ import net.minecraftforge.common.util.Constants.NBT import scala.collection.mutable -class Adapter extends traits.Environment with traits.ComponentInventory with Analyzable with internal.Adapter { +class Adapter extends traits.Environment with traits.ComponentInventory with traits.Tickable with Analyzable with internal.Adapter { val node = api.Network.newNode(this, Visibility.Network).create() private val blocks = Array.fill[Option[(ManagedEnvironment, api.driver.SidedBlock)]](6)(None) @@ -33,11 +33,9 @@ class Adapter extends traits.Environment with traits.ComponentInventory with Ana // ----------------------------------------------------------------------- // - override def canUpdate = isServer - override def updateEntity() { super.updateEntity() - if (updatingBlocks.nonEmpty) { + if (isServer && updatingBlocks.nonEmpty) { for (block <- updatingBlocks) { block.update() } diff --git a/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala b/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala index 65cf13549..5271e944a 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala @@ -17,7 +17,7 @@ import net.minecraft.util.EnumFacing import net.minecraftforge.fml.relauncher.Side import net.minecraftforge.fml.relauncher.SideOnly -class Assembler extends traits.Environment with traits.PowerAcceptor with traits.Inventory with SidedEnvironment with traits.StateAware { +class Assembler extends traits.Environment with traits.PowerAcceptor with traits.Inventory with SidedEnvironment with traits.StateAware with traits.Tickable { val node = api.Network.newNode(this, Visibility.Network). withComponent("assembler"). withConnector(Settings.get.bufferConverter). @@ -106,8 +106,6 @@ class Assembler extends traits.Environment with traits.PowerAcceptor with traits // ----------------------------------------------------------------------- // - override def canUpdate = isServer - override def updateEntity() { super.updateEntity() if (output.isDefined && world.getTotalWorldTime % Settings.get.tickFrequency == 0) { diff --git a/src/main/scala/li/cil/oc/common/tileentity/Cable.scala b/src/main/scala/li/cil/oc/common/tileentity/Cable.scala index 022f4b053..7c2596260 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Cable.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Cable.scala @@ -40,7 +40,5 @@ class Cable extends traits.Environment with traits.NotAnalyzable with traits.Imm } } - override def canUpdate = false - override def getRenderBoundingBox = common.block.Cable.bounds(world, getPos).offset(x, y, z) } diff --git a/src/main/scala/li/cil/oc/common/tileentity/Capacitor.scala b/src/main/scala/li/cil/oc/common/tileentity/Capacitor.scala index 93236c49c..f316d7558 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Capacitor.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Capacitor.scala @@ -15,8 +15,6 @@ class Capacitor extends traits.Environment { // ----------------------------------------------------------------------- // - override def canUpdate = false - override def dispose() { super.dispose() if (isServer) { 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 8b440c30b..e75e449c4 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Case.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Case.scala @@ -42,8 +42,6 @@ class Case(var tier: Int) extends traits.PowerAcceptor with traits.Computer with // ----------------------------------------------------------------------- // - override def canUpdate = isServer - override def updateEntity() { if (isServer && isCreative && world.getTotalWorldTime % Settings.get.tickFrequency == 0) { // Creative case, make it generate power. diff --git a/src/main/scala/li/cil/oc/common/tileentity/Charger.scala b/src/main/scala/li/cil/oc/common/tileentity/Charger.scala index df74e40f0..19a013348 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Charger.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Charger.scala @@ -26,7 +26,7 @@ import net.minecraftforge.fml.relauncher.SideOnly import scala.collection.convert.WrapAsScala._ import scala.collection.mutable -class Charger extends traits.Environment with traits.PowerAcceptor with traits.RedstoneAware with traits.Rotatable with traits.ComponentInventory with Analyzable with traits.StateAware { +class Charger extends traits.Environment with traits.PowerAcceptor with traits.RedstoneAware with traits.Rotatable with traits.ComponentInventory with traits.Tickable with Analyzable with traits.StateAware { val node = api.Network.newNode(this, Visibility.None). withConnector(Settings.get.bufferConverter). create() @@ -64,8 +64,6 @@ class Charger extends traits.Environment with traits.PowerAcceptor with traits.R // ----------------------------------------------------------------------- // - override def canUpdate = true - override def updateEntity() { super.updateEntity() diff --git a/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala b/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala index 6c9623570..1a45da846 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala @@ -21,7 +21,7 @@ import net.minecraftforge.fml.relauncher.SideOnly import scala.collection.mutable -class Disassembler extends traits.Environment with traits.PowerAcceptor with traits.Inventory with traits.StateAware with traits.PlayerInputAware { +class Disassembler extends traits.Environment with traits.PowerAcceptor with traits.Inventory with traits.StateAware with traits.PlayerInputAware with traits.Tickable { val node = api.Network.newNode(this, Visibility.None). withConnector(Settings.get.bufferConverter). create() @@ -61,11 +61,9 @@ class Disassembler extends traits.Environment with traits.PowerAcceptor with tra // ----------------------------------------------------------------------- // - override def canUpdate = isServer - override def updateEntity() { super.updateEntity() - if (world.getTotalWorldTime % Settings.get.tickFrequency == 0) { + if (isServer && world.getTotalWorldTime % Settings.get.tickFrequency == 0) { if (queue.isEmpty) { val instant = disassembleNextInstantly // Is reset via decrStackSize disassemble(decrStackSize(0, 1), instant) diff --git a/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala b/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala index 7a15a352e..7b72bdddd 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala @@ -102,8 +102,6 @@ class DiskDrive extends traits.Environment with traits.ComponentInventory with t // ----------------------------------------------------------------------- // // TileEntity - override def canUpdate = false - @SideOnly(Side.CLIENT) override def readFromNBTForClient(nbt: NBTTagCompound) { super.readFromNBTForClient(nbt) diff --git a/src/main/scala/li/cil/oc/common/tileentity/Geolyzer.scala b/src/main/scala/li/cil/oc/common/tileentity/Geolyzer.scala index ff2c8aeba..f5e8e9bb8 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Geolyzer.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Geolyzer.scala @@ -8,8 +8,6 @@ class Geolyzer extends traits.Environment { def node = geolyzer.node - override def canUpdate = false - override def readFromNBTForServer(nbt: NBTTagCompound) { super.readFromNBTForServer(nbt) geolyzer.load(nbt) 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 36028eb0b..8f3238ac6 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala @@ -20,7 +20,7 @@ import net.minecraftforge.fml.relauncher.SideOnly import scala.collection.mutable -class Hologram(var tier: Int) extends traits.Environment with SidedEnvironment with Analyzable with traits.Rotatable { +class Hologram(var tier: Int) extends traits.Environment with SidedEnvironment with Analyzable with traits.Rotatable with traits.Tickable { def this() = this(0) val node = api.Network.newNode(this, Visibility.Network). @@ -367,8 +367,6 @@ class Hologram(var tier: Int) extends traits.Environment with SidedEnvironment w // ----------------------------------------------------------------------- // - override def canUpdate = isServer - override def updateEntity() { super.updateEntity() if (isServer) { diff --git a/src/main/scala/li/cil/oc/common/tileentity/Keyboard.scala b/src/main/scala/li/cil/oc/common/tileentity/Keyboard.scala index a3a05d1fd..4b8053490 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Keyboard.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Keyboard.scala @@ -37,8 +37,6 @@ class Keyboard extends traits.Environment with traits.Rotatable with traits.Immi // ----------------------------------------------------------------------- // - override def canUpdate = false - override def readFromNBTForServer(nbt: NBTTagCompound) { super.readFromNBTForServer(nbt) if (isServer) { diff --git a/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala b/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala index 7a08eb146..6ae966e14 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala @@ -111,13 +111,11 @@ class Microcontroller extends traits.PowerAcceptor with traits.Hub with traits.C // ----------------------------------------------------------------------- // - override def canUpdate = isServer - override def updateEntity() { super.updateEntity() // Pump energy into the internal network. - if (world.getTotalWorldTime % Settings.get.tickFrequency == 0) { + if (isServer && world.getTotalWorldTime % Settings.get.tickFrequency == 0) { for (side <- EnumFacing.values if side != facing) { sidedNode(side) match { case connector: Connector => diff --git a/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala b/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala index c30fcc629..899bc2e77 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala @@ -15,7 +15,7 @@ import net.minecraft.util.Vec3 import scala.collection.convert.WrapAsScala._ import scala.collection.mutable -class MotionSensor extends traits.Environment { +class MotionSensor extends traits.Environment with traits.Tickable { val node = api.Network.newNode(this, Visibility.Network). withComponent("motion_sensor"). withConnector(). @@ -29,16 +29,13 @@ class MotionSensor extends traits.Environment { // ----------------------------------------------------------------------- // - override def canUpdate = isServer - override def updateEntity() { super.updateEntity() - if (world.getTotalWorldTime % 10 == 0) { + if (isServer && world.getTotalWorldTime % 10 == 0) { // Get a list of all living entities we could possibly detect, using a rough // bounding box check, then refining it using the actual distance and an // actual visibility check. val entities = world.getEntitiesWithinAABB(classOf[EntityLivingBase], sensorBounds) - .map(_.asInstanceOf[EntityLivingBase]) .filter(entity => entity.isEntityAlive && isInRange(entity) && isVisible(entity)) .toSet // Get rid of all tracked entities that are no longer visible. diff --git a/src/main/scala/li/cil/oc/common/tileentity/NetSplitter.scala b/src/main/scala/li/cil/oc/common/tileentity/NetSplitter.scala index ae3ed49f3..e097d50cc 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/NetSplitter.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/NetSplitter.scala @@ -54,8 +54,6 @@ class NetSplitter extends traits.Environment with traits.RedstoneAware with api. // ----------------------------------------------------------------------- // - override def canUpdate = false - override protected def initialize(): Unit = { super.initialize() EventHandler.scheduleServer(this) diff --git a/src/main/scala/li/cil/oc/common/tileentity/PowerConverter.scala b/src/main/scala/li/cil/oc/common/tileentity/PowerConverter.scala index ecb375fe6..0b0e9d4f3 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/PowerConverter.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/PowerConverter.scala @@ -19,5 +19,8 @@ class PowerConverter extends traits.PowerAcceptor with traits.Environment with t override def energyThroughput = Settings.get.powerConverterRate - override def canUpdate = isServer + override def updateEntity(): Unit = { + super[PowerAcceptor].updateEntity() + super[Environment].updateEntity() + } } diff --git a/src/main/scala/li/cil/oc/common/tileentity/PowerDistributor.scala b/src/main/scala/li/cil/oc/common/tileentity/PowerDistributor.scala index e6439a904..f30e7e345 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/PowerDistributor.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/PowerDistributor.scala @@ -19,8 +19,6 @@ class PowerDistributor extends traits.Environment with traits.PowerBalancer with override protected def isConnected = nodes.exists(node => node.address != null && node.network != null) - override def canUpdate = isServer - // ----------------------------------------------------------------------- // @SideOnly(Side.CLIENT) diff --git a/src/main/scala/li/cil/oc/common/tileentity/Print.scala b/src/main/scala/li/cil/oc/common/tileentity/Print.scala index c527b6521..eeba5768e 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Print.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Print.scala @@ -139,8 +139,6 @@ class Print(val canToggle: Option[() => Boolean], val scheduleUpdate: Option[Int } } - override def canUpdate = false - override protected def onRedstoneInputChanged(side: EnumFacing, oldMaxValue: Int, newMaxValue: Int): Unit = { super.onRedstoneInputChanged(side, oldMaxValue, newMaxValue) val newState = newMaxValue > 0 diff --git a/src/main/scala/li/cil/oc/common/tileentity/Printer.scala b/src/main/scala/li/cil/oc/common/tileentity/Printer.scala index dc130f321..f46d5b8fc 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Printer.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Printer.scala @@ -19,7 +19,7 @@ import net.minecraft.util.EnumFacing import net.minecraftforge.fml.relauncher.Side import net.minecraftforge.fml.relauncher.SideOnly -class Printer extends traits.Environment with traits.Inventory with traits.Rotatable with SidedEnvironment with traits.StateAware with ISidedInventory { +class Printer extends traits.Environment with traits.Inventory with traits.Rotatable with SidedEnvironment with traits.StateAware with traits.Tickable with ISidedInventory { val node = api.Network.newNode(this, Visibility.Network). withComponent("printer3d"). withConnector(Settings.get.bufferConverter). @@ -209,11 +209,13 @@ class Printer extends traits.Environment with traits.Inventory with traits.Rotat // ----------------------------------------------------------------------- // - override def canUpdate = isServer - - override def updateEntity() { + override def updateEntity(): Unit = { super.updateEntity() + if (isClient) { + return + } + def canMergeOutput = { val presentStack = getStackInSlot(slotOutput) val outputStack = data.createItemStack() diff --git a/src/main/scala/li/cil/oc/common/tileentity/Raid.scala b/src/main/scala/li/cil/oc/common/tileentity/Raid.scala index cc86452c1..26a9aed21 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Raid.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Raid.scala @@ -36,8 +36,6 @@ class Raid extends traits.Environment with traits.Inventory with traits.Rotatabl override def onAnalyze(player: EntityPlayer, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float) = Array(filesystem.map(_.node).orNull) - override def canUpdate = false - // ----------------------------------------------------------------------- // override def getSizeInventory = 3 diff --git a/src/main/scala/li/cil/oc/common/tileentity/Redstone.scala b/src/main/scala/li/cil/oc/common/tileentity/Redstone.scala index 8101e61ef..8da8265ef 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Redstone.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Redstone.scala @@ -9,7 +9,7 @@ import li.cil.oc.util.ExtendedNBT._ import net.minecraft.nbt.NBTTagCompound import net.minecraft.util.EnumFacing -class Redstone extends traits.Environment with traits.BundledRedstoneAware { +class Redstone extends traits.Environment with traits.BundledRedstoneAware with traits.Tickable { val instance = if (BundledRedstone.isAvailable) new component.Redstone.Bundled(this) @@ -24,10 +24,12 @@ class Redstone extends traits.Environment with traits.BundledRedstoneAware { } else null - override def canUpdate = isServer - // ----------------------------------------------------------------------- // + override def updateEntity(): Unit = { + super[Environment].updateEntity() + } + override def readFromNBTForServer(nbt: NBTTagCompound) { super.readFromNBTForServer(nbt) instance.load(nbt.getCompoundTag(Settings.namespace + "redstone")) diff --git a/src/main/scala/li/cil/oc/common/tileentity/Relay.scala b/src/main/scala/li/cil/oc/common/tileentity/Relay.scala index e0bd75f8e..17392445e 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Relay.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Relay.scala @@ -50,8 +50,6 @@ class Relay extends traits.SwitchLike with traits.ComponentInventory with traits withComponent("relay"). create()) - override def canUpdate = isServer - // ----------------------------------------------------------------------- // @SideOnly(Side.CLIENT) diff --git a/src/main/scala/li/cil/oc/common/tileentity/Screen.scala b/src/main/scala/li/cil/oc/common/tileentity/Screen.scala index 0b0befaac..45f7d3d00 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Screen.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Screen.scala @@ -178,8 +178,6 @@ class Screen(var tier: Int) extends traits.TextBuffer with SidedEnvironment with // ----------------------------------------------------------------------- // - override def canUpdate = true - override def updateEntity() { super.updateEntity() if (shouldCheckForMultiBlock && ((isClient && isClientReadyForMultiBlockCheck) || (isServer && isConnected))) { diff --git a/src/main/scala/li/cil/oc/common/tileentity/Switch.scala b/src/main/scala/li/cil/oc/common/tileentity/Switch.scala index 2069df42d..59f7ac4ca 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Switch.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Switch.scala @@ -17,8 +17,6 @@ class Switch extends traits.SwitchLike with traits.NotAnalyzable with traits.Com override def isLinkedEnabled = false - override def canUpdate = isServer - // ----------------------------------------------------------------------- // protected def queueMessage(source: String, destination: String, port: Int, answerPort: Int, args: Array[AnyRef]) { diff --git a/src/main/scala/li/cil/oc/common/tileentity/Transposer.scala b/src/main/scala/li/cil/oc/common/tileentity/Transposer.scala index 4860a866f..78a7fc8e9 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Transposer.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Transposer.scala @@ -11,8 +11,6 @@ class Transposer extends traits.Environment { // Used on client side to check whether to render activity indicators. var lastOperation = 0L - override def canUpdate = false - override def readFromNBTForServer(nbt: NBTTagCompound) { super.readFromNBTForServer(nbt) transposer.load(nbt) diff --git a/src/main/scala/li/cil/oc/common/tileentity/Waypoint.scala b/src/main/scala/li/cil/oc/common/tileentity/Waypoint.scala index 0c9f9c820..a136c2243 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Waypoint.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Waypoint.scala @@ -13,7 +13,7 @@ import net.minecraft.util.EnumParticleTypes import net.minecraftforge.fml.relauncher.Side import net.minecraftforge.fml.relauncher.SideOnly -class Waypoint extends traits.Environment with traits.Rotatable with traits.RedstoneAware { +class Waypoint extends traits.Environment with traits.Rotatable with traits.RedstoneAware with traits.Tickable { val node = api.Network.newNode(this, Visibility.Network). withComponent("waypoint"). create() diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/Computer.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/Computer.scala index ee79e08f2..3e8feef8e 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/Computer.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/Computer.scala @@ -24,7 +24,7 @@ import net.minecraftforge.fml.relauncher.SideOnly import scala.collection.convert.WrapAsJava._ import scala.collection.mutable -trait Computer extends Environment with ComponentInventory with Rotatable with BundledRedstoneAware with api.network.Analyzable with api.machine.MachineHost with StateAware { +trait Computer extends Environment with ComponentInventory with Rotatable with BundledRedstoneAware with api.network.Analyzable with api.machine.MachineHost with StateAware with Tickable { private lazy val _machine = if (isServer) api.Machine.create(this) else null def machine = _machine diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/Environment.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/Environment.scala index 9aa550d30..6d75c3463 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/Environment.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/Environment.scala @@ -25,7 +25,7 @@ trait Environment extends TileEntity with network.Environment with network.Envir override def zPosition = z + 0.5 - override def markChanged() = if (canUpdate) isChangeScheduled = true else world.markChunkDirty(getPos, this) + override def markChanged() = if (this.isInstanceOf[Tickable]) isChangeScheduled = true else world.markChunkDirty(getPos, this) protected def isConnected = node.address != null && node.network != null diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/Hub.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/Hub.scala index 5659d43d7..f069138fd 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/Hub.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/Hub.scala @@ -14,7 +14,7 @@ import net.minecraftforge.fml.relauncher.SideOnly import scala.collection.mutable -trait Hub extends traits.Environment with SidedEnvironment { +trait Hub extends traits.Environment with SidedEnvironment with Tickable { override def node: Node = null override protected def isConnected = plugs.exists(plug => plug.node.address != null && plug.node.network != null) diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/PowerBalancer.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/PowerBalancer.scala index 070d5b215..debe38bae 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/PowerBalancer.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/PowerBalancer.scala @@ -5,7 +5,7 @@ import li.cil.oc.api.network.Connector import li.cil.oc.api.network.SidedEnvironment import net.minecraft.util.EnumFacing -trait PowerBalancer extends PowerInformation with SidedEnvironment { +trait PowerBalancer extends PowerInformation with SidedEnvironment with Tickable { var globalBuffer, globalBufferSize = 0.0 protected def isConnected: Boolean diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/RedstoneAware.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/RedstoneAware.scala index a660c00d2..7dc091082 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/RedstoneAware.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/RedstoneAware.scala @@ -69,7 +69,11 @@ trait RedstoneAware extends RotationAware /* with IConnectable with IRedstoneEmi } def checkRedstoneInputChanged() { - shouldUpdateInput = isServer + if (this.isInstanceOf[Tickable]) { + shouldUpdateInput = isServer + } else { + EnumFacing.values().foreach(updateRedstoneInput) + } } // ----------------------------------------------------------------------- // @@ -86,7 +90,7 @@ trait RedstoneAware extends RotationAware /* with IConnectable with IRedstoneEmi override def validate(): Unit = { super.validate() - if (!canUpdate) { + if (!this.isInstanceOf[Tickable]) { EventHandler.scheduleServer(() => EnumFacing.values().foreach(updateRedstoneInput)) } } diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/TextBuffer.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/TextBuffer.scala index 1e1181562..ffcb64e49 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/TextBuffer.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/TextBuffer.scala @@ -7,7 +7,7 @@ import net.minecraft.nbt.NBTTagCompound import net.minecraftforge.fml.relauncher.Side import net.minecraftforge.fml.relauncher.SideOnly -trait TextBuffer extends Environment { +trait TextBuffer extends Environment with Tickable { lazy val buffer = { val screenItem = api.Items.get(Constants.BlockName.ScreenTier1).createItemStack(1) val buffer = api.Driver.driverFor(screenItem, getClass).createEnvironment(screenItem, this).asInstanceOf[api.internal.TextBuffer] diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/Tickable.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/Tickable.scala new file mode 100644 index 000000000..5f70403f3 --- /dev/null +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/Tickable.scala @@ -0,0 +1,9 @@ +package li.cil.oc.common.tileentity.traits + +import net.minecraft.util.ITickable + +trait Tickable extends ITickable { + override def update(): Unit = updateEntity() + + def updateEntity(): Unit = {} +} diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/TileEntity.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/TileEntity.scala index 8d5e8eb8f..4a901513f 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/TileEntity.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/TileEntity.scala @@ -16,8 +16,7 @@ import net.minecraft.world.World import net.minecraftforge.fml.relauncher.Side import net.minecraftforge.fml.relauncher.SideOnly -// TODO only implement ticking interface where needed. -trait TileEntity extends net.minecraft.tileentity.TileEntity with ITickable { +trait TileEntity extends net.minecraft.tileentity.TileEntity { def world = getWorld def x = getPos.getX @@ -34,12 +33,6 @@ trait TileEntity extends net.minecraft.tileentity.TileEntity with ITickable { // ----------------------------------------------------------------------- // - def canUpdate = true - - override def update(): Unit = { - if (canUpdate) updateEntity() - } - def updateEntity() { if (Settings.get.periodicallyForceLightUpdate && world.getTotalWorldTime % 40 == 0 && getBlockType.getLightValue(world, getPos) > 0) { world.markBlockForUpdate(getPos) diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/power/IndustrialCraft2Experimental.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/power/IndustrialCraft2Experimental.scala index 0ef26dd21..4cf3b591d 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/power/IndustrialCraft2Experimental.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/power/IndustrialCraft2Experimental.scala @@ -5,6 +5,7 @@ import li.cil.oc.OpenComputers import li.cil.oc.Settings import li.cil.oc.common.EventHandler import li.cil.oc.common.asm.Injectable +import li.cil.oc.common.tileentity.traits import li.cil.oc.integration.Mods import li.cil.oc.integration.util.Power import net.minecraft.nbt.NBTTagCompound @@ -14,7 +15,7 @@ import net.minecraftforge.fml.common.Optional import net.minecraftforge.fml.common.eventhandler.Event @Injectable.Interface(value = "ic2.api.energy.tile.IEnergySink", modid = Mods.IDs.IndustrialCraft2) -trait IndustrialCraft2Experimental extends Common with IndustrialCraft2Common { +trait IndustrialCraft2Experimental extends Common with IndustrialCraft2Common with traits.Tickable { private var conversionBuffer = 0.0 private lazy val useIndustrialCraft2Power = isServer && Mods.IndustrialCraft2.isAvailable diff --git a/src/main/scala/li/cil/oc/server/machine/Machine.scala b/src/main/scala/li/cil/oc/server/machine/Machine.scala index e659ed8bf..fd1e69c9c 100644 --- a/src/main/scala/li/cil/oc/server/machine/Machine.scala +++ b/src/main/scala/li/cil/oc/server/machine/Machine.scala @@ -440,6 +440,7 @@ class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with mach // Component overflow check, crash if too many components are connected, to // avoid confusion on the user's side due to components not showing up. if (componentCount > maxComponents) { + beep("-..") crash("gui.Error.ComponentOverflow") } From 7eca6c1a107aed92227a34c0669f712a80aa69c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Thu, 26 May 2016 19:57:30 +0200 Subject: [PATCH 22/48] Fix lighting issues with print preview in 3d printer. --- .../client/renderer/tileentity/PrinterRenderer.scala | 11 ++++++----- src/main/scala/li/cil/oc/common/block/Printer.scala | 1 - 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/PrinterRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/PrinterRenderer.scala index 406e832b9..66c1c2c22 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/PrinterRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/PrinterRenderer.scala @@ -6,9 +6,9 @@ import li.cil.oc.util.RenderState import net.minecraft.client.Minecraft import net.minecraft.client.renderer.GlStateManager import net.minecraft.client.renderer.OpenGlHelper +import net.minecraft.client.renderer.RenderHelper import net.minecraft.client.renderer.block.model.ItemCameraTransforms import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer -import net.minecraft.entity.item.EntityItem object PrinterRenderer extends TileEntitySpecialRenderer[Printer] { override def renderTileEntityAt(printer: Printer, x: Double, y: Double, z: Double, f: Float, damage: Int) { @@ -25,14 +25,15 @@ object PrinterRenderer extends TileEntitySpecialRenderer[Printer] { GlStateManager.rotate((System.currentTimeMillis() % 20000) / 20000f * 360, 0, 1, 0) GlStateManager.scale(0.75, 0.75, 0.75) + RenderHelper.enableStandardItemLighting() + val brightness = printer.world.getCombinedLight(printer.getPos, 0) OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, brightness % 65536, brightness / 65536) - // This is very 'meh', but item frames do it like this, too! - val entity = new EntityItem(printer.world, 0, 0, 0, stack) - entity.hoverStart = 0 Textures.Block.bind() - Minecraft.getMinecraft.getRenderItem.renderItem(entity.getEntityItem, ItemCameraTransforms.TransformType.FIXED) + Minecraft.getMinecraft.getRenderItem.renderItem(stack, ItemCameraTransforms.TransformType.FIXED) + + RenderHelper.disableStandardItemLighting() GlStateManager.popMatrix() RenderState.popAttrib() diff --git a/src/main/scala/li/cil/oc/common/block/Printer.scala b/src/main/scala/li/cil/oc/common/block/Printer.scala index 0dc6d0218..cfd44775a 100644 --- a/src/main/scala/li/cil/oc/common/block/Printer.scala +++ b/src/main/scala/li/cil/oc/common/block/Printer.scala @@ -2,7 +2,6 @@ package li.cil.oc.common.block import li.cil.oc.common.GuiType import li.cil.oc.common.tileentity -import net.minecraft.block.state.IBlockState import net.minecraft.util.BlockPos import net.minecraft.util.EnumFacing import net.minecraft.world.IBlockAccess From b50d3872eebfcd2d2b34f323dea5d7842b31384e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 27 May 2016 13:32:12 +0200 Subject: [PATCH 23/48] Moved all the things! Renamed all the things! Broke all the things! Made most component ROMs into loot disks (except robot for hopefully obvious reasons). Changed loot disk naming convention (this will break existing loot disks). Closes #1456. Made all loot disks craftable by cycling through them by crafting one with a wrench (so e.g. craft OpenOS then cycle through). --- .../assets/opencomputers/loot/README.md | 2 +- .../loot/{Builder => builder}/build.lua | 0 .../loot/{Builder => builder}/build.man | 0 .../loot/{Builder => builder}/example.plan | 0 .../{lua/component => loot}/data/.autorun.lua | 0 .../loot/{Plan9k/usr => data}/bin/base64.lua | 0 .../loot/{Plan9k/usr => data}/bin/deflate.lua | 0 .../{lua/component => loot}/data/bin/gpg.lua | 0 .../loot/{Plan9k/usr => data}/bin/inflate.lua | 0 .../component => loot}/data/bin/md5sum.lua | 54 ++++++------ .../{Plan9k/usr => data}/bin/sha256sum.lua | 0 .../loot/{Plan9k/usr => data}/lib/data.lua | 0 .../loot/{TheDig => dig}/dig.lua | 0 .../loot/{TheDig => dig}/dig.man | 0 .../component => loot}/generator/.autorun.lua | 0 .../generator/bin/refuel.lua | 0 .../component => loot}/internet/.autorun.lua | 0 .../internet/bin/pastebin.lua | 0 .../component => loot}/internet/bin/wget.lua | 0 .../internet/lib/internet.lua | 0 .../internet/usr/man/pastebin | 0 .../component => loot}/internet/usr/man/wget | 0 .../loot/{OpenIRC => irc}/irc.lua | 0 .../assets/opencomputers/loot/loot.properties | 30 ++++--- .../loot/{MazeGen => maze}/maze.lua | 0 .../loot/{MazeGen => maze}/maze.man | 0 .../loot/{Network => network}/autorun.lua | 0 .../{Network => network}/data/bin/arp.lua | 0 .../data/bin/ifconfig.lua | 0 .../{Network => network}/data/bin/ping.lua | 0 .../{Network => network}/data/bin/route.lua | 0 .../data/boot/80_network.lua | 0 .../data/boot/95_hostname.lua | 0 .../{Network => network}/data/lib/network.lua | 0 .../data/lib/network/loopback.lua | 0 .../data/lib/network/modem.lua | 0 .../data/lib/network/tunnel.lua | 0 .../{Network => network}/data/usr/bin/nc.lua | 0 .../data/usr/man/ifconfig | 0 .../{Network => network}/data/usr/man/network | 0 .../{Network => network}/data/usr/man/ping | 0 .../{Network => network}/installNetwork.lua | 0 .../loot/{Network => network}/protocol | 0 .../{OpenLoader => openloader}/OpenLoader.man | 0 .../{OpenLoader => openloader}/autorun.lua | 0 .../bin/opl-flash.lua | 0 .../loot/{OpenLoader => openloader}/init.lua | 0 .../loot/{OpenOS => openos}/.osprop | 0 .../loot/{OpenOS => openos}/bin/address.lua | 0 .../loot/{OpenOS => openos}/bin/alias.lua | 0 .../loot/{OpenOS => openos}/bin/cat.lua | 0 .../loot/{OpenOS => openos}/bin/cd.lua | 0 .../loot/{OpenOS => openos}/bin/clear.lua | 0 .../{OpenOS => openos}/bin/components.lua | 0 .../loot/{OpenOS => openos}/bin/cp.lua | 0 .../loot/{OpenOS => openos}/bin/date.lua | 0 .../loot/{OpenOS => openos}/bin/df.lua | 0 .../loot/{OpenOS => openos}/bin/dmesg.lua | 0 .../loot/{OpenOS => openos}/bin/du.lua | 0 .../loot/{OpenOS => openos}/bin/echo.lua | 0 .../loot/{OpenOS => openos}/bin/edit.lua | 0 .../loot/{OpenOS => openos}/bin/find.lua | 0 .../loot/{OpenOS => openos}/bin/flash.lua | 0 .../loot/{OpenOS => openos}/bin/grep.lua | 0 .../loot/{OpenOS => openos}/bin/head.lua | 0 .../loot/{OpenOS => openos}/bin/hostname.lua | 0 .../loot/{OpenOS => openos}/bin/install.lua | 0 .../loot/{OpenOS => openos}/bin/label.lua | 0 .../loot/{OpenOS => openos}/bin/ln.lua | 0 .../loot/{OpenOS => openos}/bin/ls.lua | 0 .../loot/{OpenOS => openos}/bin/lua.lua | 0 .../loot/{OpenOS => openos}/bin/man.lua | 0 .../loot/{OpenOS => openos}/bin/mkdir.lua | 0 .../loot/{OpenOS => openos}/bin/mktmp.lua | 0 .../loot/{OpenOS => openos}/bin/more.lua | 0 .../loot/{OpenOS => openos}/bin/mount.lua | 0 .../loot/{OpenOS => openos}/bin/mv.lua | 0 .../loot/{OpenOS => openos}/bin/primary.lua | 0 .../loot/{OpenOS => openos}/bin/pwd.lua | 0 .../loot/{OpenOS => openos}/bin/rc.lua | 0 .../loot/{OpenOS => openos}/bin/reboot.lua | 0 .../loot/{OpenOS => openos}/bin/redstone.lua | 0 .../{OpenOS => openos}/bin/resolution.lua | 0 .../loot/{OpenOS => openos}/bin/rm.lua | 0 .../loot/{OpenOS => openos}/bin/rmdir.lua | 0 .../loot/{OpenOS => openos}/bin/set.lua | 0 .../loot/{OpenOS => openos}/bin/sh.lua | 0 .../loot/{OpenOS => openos}/bin/shutdown.lua | 0 .../loot/{OpenOS => openos}/bin/sleep.lua | 0 .../loot/{OpenOS => openos}/bin/source.lua | 0 .../loot/{OpenOS => openos}/bin/time.lua | 0 .../loot/{OpenOS => openos}/bin/touch.lua | 0 .../loot/{OpenOS => openos}/bin/umount.lua | 0 .../loot/{OpenOS => openos}/bin/unalias.lua | 0 .../loot/{OpenOS => openos}/bin/unset.lua | 0 .../loot/{OpenOS => openos}/bin/uptime.lua | 0 .../loot/{OpenOS => openos}/bin/useradd.lua | 0 .../loot/{OpenOS => openos}/bin/userdel.lua | 0 .../loot/{OpenOS => openos}/bin/which.lua | 0 .../loot/{OpenOS => openos}/bin/yes.lua | 0 .../loot/{OpenOS => openos}/boot/00_base.lua | 0 .../{OpenOS => openos}/boot/01_process.lua | 0 .../loot/{OpenOS => openos}/boot/02_os.lua | 0 .../loot/{OpenOS => openos}/boot/03_io.lua | 0 .../{OpenOS => openos}/boot/04_component.lua | 0 .../loot/{OpenOS => openos}/boot/10_devfs.lua | 0 .../{OpenOS => openos}/boot/90_filesystem.lua | 0 .../loot/{OpenOS => openos}/boot/91_gpu.lua | 0 .../{OpenOS => openos}/boot/92_keyboard.lua | 0 .../loot/{OpenOS => openos}/boot/93_term.lua | 0 .../loot/{OpenOS => openos}/boot/94_shell.lua | 0 .../loot/{OpenOS => openos}/boot/99_rc.lua | 0 .../loot/{OpenOS => openos}/etc/motd | 0 .../loot/{OpenOS => openos}/etc/profile | 0 .../loot/{OpenOS => openos}/etc/rc.cfg | 0 .../{OpenOS => openos}/etc/rc.d/example.lua | 0 .../loot/{OpenOS => openos}/home/.shrc | 0 .../loot/{OpenOS => openos}/init.lua | 0 .../loot/{OpenOS => openos}/lib/bit32.lua | 0 .../loot/{OpenOS => openos}/lib/buffer.lua | 0 .../loot/{OpenOS => openos}/lib/colors.lua | 0 .../loot/{OpenOS => openos}/lib/devfs.lua | 0 .../loot/{OpenOS => openos}/lib/event.lua | 0 .../{OpenOS => openos}/lib/filesystem.lua | 0 .../loot/{OpenOS => openos}/lib/guid.lua | 0 .../loot/{OpenOS => openos}/lib/io.lua | 0 .../loot/{OpenOS => openos}/lib/keyboard.lua | 0 .../loot/{OpenOS => openos}/lib/note.lua | 0 .../loot/{OpenOS => openos}/lib/package.lua | 0 .../loot/{OpenOS => openos}/lib/pipes.lua | 0 .../loot/{OpenOS => openos}/lib/process.lua | 0 .../loot/{OpenOS => openos}/lib/rc.lua | 0 .../{OpenOS => openos}/lib/serialization.lua | 0 .../loot/{OpenOS => openos}/lib/sh.lua | 0 .../loot/{OpenOS => openos}/lib/shell.lua | 0 .../loot/{OpenOS => openos}/lib/sides.lua | 0 .../loot/{OpenOS => openos}/lib/term.lua | 0 .../loot/{OpenOS => openos}/lib/text.lua | 0 .../lib/tools/delayLookup.lua | 0 .../lib/tools/delayParse.lua | 0 .../lib/tools/keyboard_full.lua | 0 .../{OpenOS => openos}/lib/transforms.lua | 0 .../loot/{OpenOS => openos}/usr/man/address | 0 .../loot/{OpenOS => openos}/usr/man/alias | 0 .../loot/{OpenOS => openos}/usr/man/cat | 0 .../loot/{OpenOS => openos}/usr/man/cd | 0 .../loot/{OpenOS => openos}/usr/man/clear | 0 .../loot/{OpenOS => openos}/usr/man/cp | 0 .../loot/{OpenOS => openos}/usr/man/date | 0 .../loot/{OpenOS => openos}/usr/man/df | 0 .../loot/{OpenOS => openos}/usr/man/dmesg | 0 .../loot/{OpenOS => openos}/usr/man/echo | 0 .../loot/{OpenOS => openos}/usr/man/edit | 0 .../loot/{OpenOS => openos}/usr/man/grep | 0 .../loot/{OpenOS => openos}/usr/man/head | 0 .../loot/{OpenOS => openos}/usr/man/hostname | 0 .../loot/{OpenOS => openos}/usr/man/label | 0 .../loot/{OpenOS => openos}/usr/man/ln | 0 .../loot/{OpenOS => openos}/usr/man/ls | 0 .../loot/{OpenOS => openos}/usr/man/lua | 0 .../loot/{OpenOS => openos}/usr/man/man | 0 .../loot/{OpenOS => openos}/usr/man/mkdir | 0 .../loot/{OpenOS => openos}/usr/man/more | 0 .../loot/{OpenOS => openos}/usr/man/mount | 0 .../loot/{OpenOS => openos}/usr/man/mv | 0 .../loot/{OpenOS => openos}/usr/man/primary | 0 .../loot/{OpenOS => openos}/usr/man/pwd | 0 .../loot/{OpenOS => openos}/usr/man/rc | 0 .../loot/{OpenOS => openos}/usr/man/reboot | 0 .../loot/{OpenOS => openos}/usr/man/redstone | 0 .../{OpenOS => openos}/usr/man/resolution | 0 .../loot/{OpenOS => openos}/usr/man/rm | 0 .../loot/{OpenOS => openos}/usr/man/sh | 0 .../loot/{OpenOS => openos}/usr/man/shutdown | 0 .../loot/{OpenOS => openos}/usr/man/umount | 0 .../loot/{OpenOS => openos}/usr/man/unalias | 0 .../loot/{OpenOS => openos}/usr/man/uptime | 0 .../loot/{OpenOS => openos}/usr/man/useradd | 0 .../loot/{OpenOS => openos}/usr/man/userdel | 0 .../loot/{OpenOS => openos}/usr/man/which | 0 .../loot/{OpenOS => openos}/usr/man/yes | 0 .../{OpenOS => openos}/usr/misc/greetings.txt | 0 .../loot/{OPPM => oppm}/autorun.lua | 0 .../loot/{OPPM => oppm}/etc/oppm.cfg | 0 .../loot/{OPPM => oppm}/oppm.lua | 0 .../loot/{Plan9k => plan9k}/bin/arp.lua | 0 .../loot/{Plan9k => plan9k}/bin/cat.lua | 0 .../loot/{Plan9k => plan9k}/bin/clear.lua | 0 .../{Plan9k => plan9k}/bin/components.lua | 0 .../loot/{Plan9k => plan9k}/bin/cp.lua | 0 .../loot/{Plan9k => plan9k}/bin/dd.lua | 0 .../loot/{Plan9k => plan9k}/bin/df.lua | 0 .../loot/{Plan9k => plan9k}/bin/dmesg.lua | 0 .../loot/{Plan9k => plan9k}/bin/du.lua | 0 .../loot/{Plan9k => plan9k}/bin/echo.lua | 0 .../loot/{Plan9k => plan9k}/bin/edit.lua | 0 .../loot/{Plan9k => plan9k}/bin/getty.lua | 0 .../loot/{Plan9k => plan9k}/bin/hostname.lua | 0 .../loot/{Plan9k => plan9k}/bin/ifconfig.lua | 0 .../loot/{Plan9k => plan9k}/bin/init.lua | 0 .../loot/{Plan9k => plan9k}/bin/install.lua | 0 .../loot/{Plan9k => plan9k}/bin/kill.lua | 0 .../loot/{Plan9k => plan9k}/bin/label.lua | 0 .../loot/{Plan9k => plan9k}/bin/ln.lua | 0 .../loot/{Plan9k => plan9k}/bin/ls.lua | 0 .../loot/{Plan9k => plan9k}/bin/lua.lua | 0 .../loot/{Plan9k => plan9k}/bin/mkdir.lua | 0 .../loot/{Plan9k => plan9k}/bin/more.lua | 0 .../loot/{Plan9k => plan9k}/bin/mount.cow.lua | 0 .../loot/{Plan9k => plan9k}/bin/mount.lua | 0 .../{Plan9k => plan9k}/bin/mount.msdos.lua | 0 .../loot/{Plan9k => plan9k}/bin/mv.lua | 0 .../loot/{Plan9k => plan9k}/bin/passwd.lua | 0 .../loot/{Plan9k => plan9k}/bin/pastebin.lua | 0 .../loot/{Plan9k => plan9k}/bin/ping.lua | 0 .../loot/{Plan9k => plan9k}/bin/ps.lua | 0 .../loot/{Plan9k => plan9k}/bin/pwd.lua | 0 .../loot/{Plan9k => plan9k}/bin/rc.lua | 0 .../loot/{Plan9k => plan9k}/bin/readkey.lua | 0 .../loot/{Plan9k => plan9k}/bin/reboot.lua | 0 .../{Plan9k => plan9k}/bin/resolution.lua | 0 .../loot/{Plan9k => plan9k}/bin/rm.lua | 0 .../loot/{Plan9k => plan9k}/bin/route.lua | 0 .../loot/{Plan9k => plan9k}/bin/sandbox.lua | 0 .../loot/{Plan9k => plan9k}/bin/sh.lua | 0 .../loot/{Plan9k => plan9k}/bin/shutdown.lua | 0 .../loot/{Plan9k => plan9k}/bin/sleep.lua | 0 .../loot/{Plan9k => plan9k}/bin/sshd.lua | 0 .../loot/{Plan9k => plan9k}/bin/tee.lua | 0 .../loot/{Plan9k => plan9k}/bin/touch.lua | 0 .../loot/{Plan9k => plan9k}/bin/uptime.lua | 0 .../loot/{Plan9k => plan9k}/bin/watch.lua | 0 .../loot/{Plan9k => plan9k}/bin/wc.lua | 0 .../loot/{Plan9k => plan9k}/bin/wget.lua | 0 .../loot/{Plan9k => plan9k}/boot/kernel/pipes | 0 .../etc/rc.d/autoupdate.lua | 0 .../loot/{Plan9k => plan9k}/etc/rc.d/sshd.lua | 0 .../loot/{Plan9k => plan9k}/init.lua | 0 .../loot/{Plan9k => plan9k}/lib/event.lua | 0 .../loot/{Plan9k => plan9k}/lib/internet.lua | 0 .../lib/modules/base/01_gc.lua | 0 .../lib/modules/base/01_util.lua | 0 .../lib/modules/base/02_cmd.lua | 0 .../lib/modules/base/05_vfs.lua | 0 .../lib/modules/base/06_cowfs.lua | 0 .../lib/modules/base/09_rootfs.lua | 0 .../lib/modules/base/10_devfs.lua | 0 .../lib/modules/base/10_procfs.lua | 0 .../lib/modules/base/15_keventd.lua | 0 .../lib/modules/base/15_userspace.lua | 0 .../lib/modules/base/16_buffer.lua | 0 .../lib/modules/base/16_component.lua | 0 .../lib/modules/base/16_require.lua | 0 .../lib/modules/base/17_chatbox.lua | 0 .../lib/modules/base/17_data.lua | 0 .../lib/modules/base/17_drive.lua | 0 .../lib/modules/base/17_eeprom.lua | 0 .../lib/modules/base/17_io.lua | 0 .../lib/modules/base/17_ipc.lua | 0 .../lib/modules/base/17_keyboard.lua | 0 .../lib/modules/base/17_network.lua | 0 .../lib/modules/base/17_nfc.lua | 0 .../lib/modules/base/17_tape.lua | 0 .../lib/modules/base/18_pty.lua | 0 .../lib/modules/base/18_syscall.lua | 0 .../lib/modules/base/19_cgroups.lua | 0 .../lib/modules/base/19_libnetwork.lua | 0 .../lib/modules/base/19_manageg.lua | 0 .../lib/modules/base/20_threading.lua | 0 .../lib/modules/base/21_threadUtil.lua | 0 .../lib/modules/base/21_timer.lua | 0 .../lib/modules/base/25_init.lua | 0 .../lib/modules/network/loopback.lua | 0 .../lib/modules/network/modem.lua | 0 .../lib/modules/network/tunnel.lua | 0 .../loot/{Plan9k => plan9k}/lib/msdosfs.lua | 0 .../loot/{Plan9k => plan9k}/lib/rc.lua | 0 .../{Plan9k => plan9k}/lib/serialization.lua | 0 .../loot/{Plan9k => plan9k}/lib/shell.lua | 0 .../loot/{Plan9k => plan9k}/lib/term.lua | 0 .../loot/{Plan9k => plan9k}/lib/text.lua | 0 .../data => loot/plan9k/usr}/bin/base64.lua | 84 +++++++++---------- .../data => loot/plan9k/usr}/bin/deflate.lua | 50 +++++------ .../loot/{Plan9k => plan9k}/usr/bin/gpg.lua | 0 .../data => loot/plan9k/usr}/bin/inflate.lua | 50 +++++------ .../{Plan9k => plan9k}/usr/bin/md5sum.lua | 0 .../{Plan9k => plan9k}/usr/bin/mkdosfs.lua | 0 .../loot/{Plan9k => plan9k}/usr/bin/mpt.lua | 0 .../loot/{Plan9k => plan9k}/usr/bin/nc.lua | 0 .../plan9k/usr}/bin/sha256sum.lua | 54 ++++++------ .../loot/{Plan9k => plan9k}/usr/bin/ssh.lua | 0 .../data => loot/plan9k/usr}/lib/data.lua | 52 ++++++------ .../loot/{Plan9k => plan9k}/usr/man/pipes | 0 .../usr/sbin/sshsession.lua | 0 .../{Plan9k => plan9k}/var/lib/mpt/config.db | 0 .../{Plan9k => plan9k}/var/lib/mpt/mpt.db | 0 .../opencomputers/recipes/default.recipes | 4 +- src/main/scala/li/cil/oc/Constants.scala | 2 +- .../scala/li/cil/oc/common/EventHandler.scala | 16 ++++ src/main/scala/li/cil/oc/common/Loot.scala | 26 +++--- .../common/recipe/LootDiskCyclingRecipe.scala | 40 +++++++++ .../li/cil/oc/common/recipe/Recipes.scala | 43 ++++++---- .../recipes/LootDiskProgrammableRecipe.scala | 2 +- .../scala/li/cil/oc/server/PacketSender.scala | 2 +- .../li/cil/oc/server/component/DataCard.scala | 33 -------- .../oc/server/component/InternetCard.scala | 49 +++++------ .../server/component/UpgradeGenerator.scala | 20 +---- 307 files changed, 316 insertions(+), 297 deletions(-) rename src/main/resources/assets/opencomputers/loot/{Builder => builder}/build.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Builder => builder}/build.man (100%) rename src/main/resources/assets/opencomputers/loot/{Builder => builder}/example.plan (100%) rename src/main/resources/assets/opencomputers/{lua/component => loot}/data/.autorun.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k/usr => data}/bin/base64.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k/usr => data}/bin/deflate.lua (100%) rename src/main/resources/assets/opencomputers/{lua/component => loot}/data/bin/gpg.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k/usr => data}/bin/inflate.lua (100%) rename src/main/resources/assets/opencomputers/{lua/component => loot}/data/bin/md5sum.lua (96%) rename src/main/resources/assets/opencomputers/loot/{Plan9k/usr => data}/bin/sha256sum.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k/usr => data}/lib/data.lua (100%) rename src/main/resources/assets/opencomputers/loot/{TheDig => dig}/dig.lua (100%) rename src/main/resources/assets/opencomputers/loot/{TheDig => dig}/dig.man (100%) rename src/main/resources/assets/opencomputers/{lua/component => loot}/generator/.autorun.lua (100%) rename src/main/resources/assets/opencomputers/{lua/component => loot}/generator/bin/refuel.lua (100%) rename src/main/resources/assets/opencomputers/{lua/component => loot}/internet/.autorun.lua (100%) rename src/main/resources/assets/opencomputers/{lua/component => loot}/internet/bin/pastebin.lua (100%) rename src/main/resources/assets/opencomputers/{lua/component => loot}/internet/bin/wget.lua (100%) rename src/main/resources/assets/opencomputers/{lua/component => loot}/internet/lib/internet.lua (100%) rename src/main/resources/assets/opencomputers/{lua/component => loot}/internet/usr/man/pastebin (100%) rename src/main/resources/assets/opencomputers/{lua/component => loot}/internet/usr/man/wget (100%) rename src/main/resources/assets/opencomputers/loot/{OpenIRC => irc}/irc.lua (100%) rename src/main/resources/assets/opencomputers/loot/{MazeGen => maze}/maze.lua (100%) rename src/main/resources/assets/opencomputers/loot/{MazeGen => maze}/maze.man (100%) rename src/main/resources/assets/opencomputers/loot/{Network => network}/autorun.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Network => network}/data/bin/arp.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Network => network}/data/bin/ifconfig.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Network => network}/data/bin/ping.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Network => network}/data/bin/route.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Network => network}/data/boot/80_network.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Network => network}/data/boot/95_hostname.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Network => network}/data/lib/network.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Network => network}/data/lib/network/loopback.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Network => network}/data/lib/network/modem.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Network => network}/data/lib/network/tunnel.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Network => network}/data/usr/bin/nc.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Network => network}/data/usr/man/ifconfig (100%) rename src/main/resources/assets/opencomputers/loot/{Network => network}/data/usr/man/network (100%) rename src/main/resources/assets/opencomputers/loot/{Network => network}/data/usr/man/ping (100%) rename src/main/resources/assets/opencomputers/loot/{Network => network}/installNetwork.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Network => network}/protocol (100%) rename src/main/resources/assets/opencomputers/loot/{OpenLoader => openloader}/OpenLoader.man (100%) rename src/main/resources/assets/opencomputers/loot/{OpenLoader => openloader}/autorun.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenLoader => openloader}/bin/opl-flash.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenLoader => openloader}/init.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/.osprop (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/address.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/alias.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/cat.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/cd.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/clear.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/components.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/cp.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/date.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/df.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/dmesg.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/du.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/echo.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/edit.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/find.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/flash.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/grep.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/head.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/hostname.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/install.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/label.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/ln.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/ls.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/lua.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/man.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/mkdir.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/mktmp.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/more.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/mount.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/mv.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/primary.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/pwd.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/rc.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/reboot.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/redstone.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/resolution.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/rm.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/rmdir.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/set.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/sh.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/shutdown.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/sleep.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/source.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/time.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/touch.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/umount.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/unalias.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/unset.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/uptime.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/useradd.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/userdel.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/which.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/bin/yes.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/boot/00_base.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/boot/01_process.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/boot/02_os.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/boot/03_io.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/boot/04_component.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/boot/10_devfs.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/boot/90_filesystem.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/boot/91_gpu.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/boot/92_keyboard.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/boot/93_term.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/boot/94_shell.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/boot/99_rc.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/etc/motd (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/etc/profile (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/etc/rc.cfg (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/etc/rc.d/example.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/home/.shrc (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/init.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/bit32.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/buffer.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/colors.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/devfs.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/event.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/filesystem.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/guid.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/io.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/keyboard.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/note.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/package.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/pipes.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/process.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/rc.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/serialization.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/sh.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/shell.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/sides.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/term.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/text.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/tools/delayLookup.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/tools/delayParse.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/tools/keyboard_full.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/lib/transforms.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/address (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/alias (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/cat (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/cd (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/clear (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/cp (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/date (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/df (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/dmesg (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/echo (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/edit (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/grep (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/head (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/hostname (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/label (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/ln (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/ls (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/lua (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/man (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/mkdir (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/more (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/mount (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/mv (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/primary (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/pwd (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/rc (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/reboot (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/redstone (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/resolution (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/rm (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/sh (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/shutdown (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/umount (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/unalias (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/uptime (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/useradd (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/userdel (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/which (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/man/yes (100%) rename src/main/resources/assets/opencomputers/loot/{OpenOS => openos}/usr/misc/greetings.txt (100%) rename src/main/resources/assets/opencomputers/loot/{OPPM => oppm}/autorun.lua (100%) rename src/main/resources/assets/opencomputers/loot/{OPPM => oppm}/etc/oppm.cfg (100%) rename src/main/resources/assets/opencomputers/loot/{OPPM => oppm}/oppm.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/arp.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/cat.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/clear.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/components.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/cp.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/dd.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/df.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/dmesg.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/du.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/echo.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/edit.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/getty.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/hostname.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/ifconfig.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/init.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/install.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/kill.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/label.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/ln.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/ls.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/lua.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/mkdir.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/more.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/mount.cow.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/mount.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/mount.msdos.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/mv.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/passwd.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/pastebin.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/ping.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/ps.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/pwd.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/rc.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/readkey.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/reboot.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/resolution.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/rm.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/route.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/sandbox.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/sh.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/shutdown.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/sleep.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/sshd.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/tee.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/touch.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/uptime.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/watch.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/wc.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/bin/wget.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/boot/kernel/pipes (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/etc/rc.d/autoupdate.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/etc/rc.d/sshd.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/init.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/event.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/internet.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/01_gc.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/01_util.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/02_cmd.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/05_vfs.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/06_cowfs.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/09_rootfs.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/10_devfs.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/10_procfs.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/15_keventd.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/15_userspace.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/16_buffer.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/16_component.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/16_require.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/17_chatbox.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/17_data.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/17_drive.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/17_eeprom.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/17_io.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/17_ipc.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/17_keyboard.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/17_network.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/17_nfc.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/17_tape.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/18_pty.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/18_syscall.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/19_cgroups.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/19_libnetwork.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/19_manageg.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/20_threading.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/21_threadUtil.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/21_timer.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/base/25_init.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/network/loopback.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/network/modem.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/modules/network/tunnel.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/msdosfs.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/rc.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/serialization.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/shell.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/term.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/lib/text.lua (100%) rename src/main/resources/assets/opencomputers/{lua/component/data => loot/plan9k/usr}/bin/base64.lua (95%) rename src/main/resources/assets/opencomputers/{lua/component/data => loot/plan9k/usr}/bin/deflate.lua (95%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/usr/bin/gpg.lua (100%) rename src/main/resources/assets/opencomputers/{lua/component/data => loot/plan9k/usr}/bin/inflate.lua (95%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/usr/bin/md5sum.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/usr/bin/mkdosfs.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/usr/bin/mpt.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/usr/bin/nc.lua (100%) rename src/main/resources/assets/opencomputers/{lua/component/data => loot/plan9k/usr}/bin/sha256sum.lua (96%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/usr/bin/ssh.lua (100%) rename src/main/resources/assets/opencomputers/{lua/component/data => loot/plan9k/usr}/lib/data.lua (96%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/usr/man/pipes (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/usr/sbin/sshsession.lua (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/var/lib/mpt/config.db (100%) rename src/main/resources/assets/opencomputers/loot/{Plan9k => plan9k}/var/lib/mpt/mpt.db (100%) create mode 100644 src/main/scala/li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala diff --git a/src/main/resources/assets/opencomputers/loot/README.md b/src/main/resources/assets/opencomputers/loot/README.md index a0da8107a..05528523a 100644 --- a/src/main/resources/assets/opencomputers/loot/README.md +++ b/src/main/resources/assets/opencomputers/loot/README.md @@ -7,4 +7,4 @@ To add a disk, create a folder and put the files the disk should contain into th You are invited to submit your own programs as pull requests! The more the merrier :-) -For example, say you have a program named "chat.lua". You'd create a folder, say `NetChat` or whatever the program likes to call itself, and put the `chat.lua` file into that folder. You then add the line `NetChat=chat` to the `loot.properties` file. And that's it. Make a pull request and your program is in OpenComputers - unless it fails the arbitrary quality check, of course. Feel free to submit pull requests for fixes to your submitted programs (or of others) at any time! +For example, say you have a program named "chat.lua". You'd create a folder, say `netchat` or whatever the program likes to call itself, and put the `chat.lua` file into that folder. You then add the line `netchat=NetChat` to the `loot.properties` file. And that's it. Make a pull request and your program is in OpenComputers - unless it fails the arbitrary quality check, of course. Feel free to submit pull requests for fixes to your submitted programs (or of others) at any time! diff --git a/src/main/resources/assets/opencomputers/loot/Builder/build.lua b/src/main/resources/assets/opencomputers/loot/builder/build.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Builder/build.lua rename to src/main/resources/assets/opencomputers/loot/builder/build.lua diff --git a/src/main/resources/assets/opencomputers/loot/Builder/build.man b/src/main/resources/assets/opencomputers/loot/builder/build.man similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Builder/build.man rename to src/main/resources/assets/opencomputers/loot/builder/build.man diff --git a/src/main/resources/assets/opencomputers/loot/Builder/example.plan b/src/main/resources/assets/opencomputers/loot/builder/example.plan similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Builder/example.plan rename to src/main/resources/assets/opencomputers/loot/builder/example.plan diff --git a/src/main/resources/assets/opencomputers/lua/component/data/.autorun.lua b/src/main/resources/assets/opencomputers/loot/data/.autorun.lua similarity index 100% rename from src/main/resources/assets/opencomputers/lua/component/data/.autorun.lua rename to src/main/resources/assets/opencomputers/loot/data/.autorun.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/usr/bin/base64.lua b/src/main/resources/assets/opencomputers/loot/data/bin/base64.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/usr/bin/base64.lua rename to src/main/resources/assets/opencomputers/loot/data/bin/base64.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/usr/bin/deflate.lua b/src/main/resources/assets/opencomputers/loot/data/bin/deflate.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/usr/bin/deflate.lua rename to src/main/resources/assets/opencomputers/loot/data/bin/deflate.lua diff --git a/src/main/resources/assets/opencomputers/lua/component/data/bin/gpg.lua b/src/main/resources/assets/opencomputers/loot/data/bin/gpg.lua similarity index 100% rename from src/main/resources/assets/opencomputers/lua/component/data/bin/gpg.lua rename to src/main/resources/assets/opencomputers/loot/data/bin/gpg.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/usr/bin/inflate.lua b/src/main/resources/assets/opencomputers/loot/data/bin/inflate.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/usr/bin/inflate.lua rename to src/main/resources/assets/opencomputers/loot/data/bin/inflate.lua diff --git a/src/main/resources/assets/opencomputers/lua/component/data/bin/md5sum.lua b/src/main/resources/assets/opencomputers/loot/data/bin/md5sum.lua similarity index 96% rename from src/main/resources/assets/opencomputers/lua/component/data/bin/md5sum.lua rename to src/main/resources/assets/opencomputers/loot/data/bin/md5sum.lua index ebdb3ba2c..65c45a962 100644 --- a/src/main/resources/assets/opencomputers/lua/component/data/bin/md5sum.lua +++ b/src/main/resources/assets/opencomputers/loot/data/bin/md5sum.lua @@ -1,27 +1,27 @@ -local shell = require("shell") -local data = require("data") - -local args = shell.parse(...) -if #args == 0 then - local read = "" - repeat - local current = io.read("*a") - read = read .. current - until current ~= "" - io.write(data.toHex(data.md5(read))) -else - for i = 1, #args do - local read = "" - local file, reason = io.open(shell.resolve(args[i])) - if not file then - io.stderr:write(tostring(reason) .. "\n") - os.exit(false) - end - repeat - local current = file:read("*a") - read = read .. current - until current ~= "" - file:close() - io.write(data.toHex(data.md5(read)) .. "\t".. args[i] .. "\n") - end -end +local shell = require("shell") +local data = require("data") + +local args = shell.parse(...) +if #args == 0 then + local read = "" + repeat + local current = io.read("*a") + read = read .. current + until current ~= "" + io.write(data.toHex(data.md5(read))) +else + for i = 1, #args do + local read = "" + local file, reason = io.open(shell.resolve(args[i])) + if not file then + io.stderr:write(tostring(reason) .. "\n") + os.exit(false) + end + repeat + local current = file:read("*a") + read = read .. current + until current ~= "" + file:close() + io.write(data.toHex(data.md5(read)) .. "\t".. args[i] .. "\n") + end +end diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/usr/bin/sha256sum.lua b/src/main/resources/assets/opencomputers/loot/data/bin/sha256sum.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/usr/bin/sha256sum.lua rename to src/main/resources/assets/opencomputers/loot/data/bin/sha256sum.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/usr/lib/data.lua b/src/main/resources/assets/opencomputers/loot/data/lib/data.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/usr/lib/data.lua rename to src/main/resources/assets/opencomputers/loot/data/lib/data.lua diff --git a/src/main/resources/assets/opencomputers/loot/TheDig/dig.lua b/src/main/resources/assets/opencomputers/loot/dig/dig.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/TheDig/dig.lua rename to src/main/resources/assets/opencomputers/loot/dig/dig.lua diff --git a/src/main/resources/assets/opencomputers/loot/TheDig/dig.man b/src/main/resources/assets/opencomputers/loot/dig/dig.man similarity index 100% rename from src/main/resources/assets/opencomputers/loot/TheDig/dig.man rename to src/main/resources/assets/opencomputers/loot/dig/dig.man diff --git a/src/main/resources/assets/opencomputers/lua/component/generator/.autorun.lua b/src/main/resources/assets/opencomputers/loot/generator/.autorun.lua similarity index 100% rename from src/main/resources/assets/opencomputers/lua/component/generator/.autorun.lua rename to src/main/resources/assets/opencomputers/loot/generator/.autorun.lua diff --git a/src/main/resources/assets/opencomputers/lua/component/generator/bin/refuel.lua b/src/main/resources/assets/opencomputers/loot/generator/bin/refuel.lua similarity index 100% rename from src/main/resources/assets/opencomputers/lua/component/generator/bin/refuel.lua rename to src/main/resources/assets/opencomputers/loot/generator/bin/refuel.lua diff --git a/src/main/resources/assets/opencomputers/lua/component/internet/.autorun.lua b/src/main/resources/assets/opencomputers/loot/internet/.autorun.lua similarity index 100% rename from src/main/resources/assets/opencomputers/lua/component/internet/.autorun.lua rename to src/main/resources/assets/opencomputers/loot/internet/.autorun.lua diff --git a/src/main/resources/assets/opencomputers/lua/component/internet/bin/pastebin.lua b/src/main/resources/assets/opencomputers/loot/internet/bin/pastebin.lua similarity index 100% rename from src/main/resources/assets/opencomputers/lua/component/internet/bin/pastebin.lua rename to src/main/resources/assets/opencomputers/loot/internet/bin/pastebin.lua diff --git a/src/main/resources/assets/opencomputers/lua/component/internet/bin/wget.lua b/src/main/resources/assets/opencomputers/loot/internet/bin/wget.lua similarity index 100% rename from src/main/resources/assets/opencomputers/lua/component/internet/bin/wget.lua rename to src/main/resources/assets/opencomputers/loot/internet/bin/wget.lua diff --git a/src/main/resources/assets/opencomputers/lua/component/internet/lib/internet.lua b/src/main/resources/assets/opencomputers/loot/internet/lib/internet.lua similarity index 100% rename from src/main/resources/assets/opencomputers/lua/component/internet/lib/internet.lua rename to src/main/resources/assets/opencomputers/loot/internet/lib/internet.lua diff --git a/src/main/resources/assets/opencomputers/lua/component/internet/usr/man/pastebin b/src/main/resources/assets/opencomputers/loot/internet/usr/man/pastebin similarity index 100% rename from src/main/resources/assets/opencomputers/lua/component/internet/usr/man/pastebin rename to src/main/resources/assets/opencomputers/loot/internet/usr/man/pastebin diff --git a/src/main/resources/assets/opencomputers/lua/component/internet/usr/man/wget b/src/main/resources/assets/opencomputers/loot/internet/usr/man/wget similarity index 100% rename from src/main/resources/assets/opencomputers/lua/component/internet/usr/man/wget rename to src/main/resources/assets/opencomputers/loot/internet/usr/man/wget diff --git a/src/main/resources/assets/opencomputers/loot/OpenIRC/irc.lua b/src/main/resources/assets/opencomputers/loot/irc/irc.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenIRC/irc.lua rename to src/main/resources/assets/opencomputers/loot/irc/irc.lua diff --git a/src/main/resources/assets/opencomputers/loot/loot.properties b/src/main/resources/assets/opencomputers/loot/loot.properties index 22fc94ac4..aab1c027a 100644 --- a/src/main/resources/assets/opencomputers/loot/loot.properties +++ b/src/main/resources/assets/opencomputers/loot/loot.properties @@ -5,15 +5,21 @@ # weight 2 is two times as likely to be generated than an item with # weight 1. Weight 0 means it will not spawn at all. #The color defaults to gray. It must be a dye's ore-dict name. -Builder=build:1:dyeYellow -MazeGen=maze:1:dyeOrange -Network=network:1:dyeLime -Plan9k=plan9k:1:dyeRed -OpenIRC=irc:1:dyeLightBlue -OpenLoader=openloader:1:dyeMagenta -OpenOS=openOS:0:dyeGreen -OPPM=oppm:0:dyeCyan -# Higher chance to find the dig program, because it has the most immediate -# use - OpenOS is craftable and IRC can be downloaded once an internet card -# is available - which one needs anyway, to use the program... -TheDig=dig:2:dyeBrown + +# General purpose. +network=Network (Network Stack):1:dyeLime +plan9k=Plan9k (Operating System):1:dyeRed +irc=OpenIRC (IRC Client):1:dyeLightBlue +openloader=OpenLoader (Boot Loader):1:dyeMagenta +openos=OpenOS (Operating System):0:dyeGreen +oppm=OPPM (Package Manager):0:dyeCyan + +# Robot utilities. +builder=Builder:1:dyeYellow +dig=Digger:2:dyeBrown +maze=Mazer:1:dyeOrange + +# Drivers for components. +data=Data Card Software:0:dyePink +generator=Generator Upgrade Software:0:dyePurple +internet=Internet Card Software:0:dyeBlue \ No newline at end of file diff --git a/src/main/resources/assets/opencomputers/loot/MazeGen/maze.lua b/src/main/resources/assets/opencomputers/loot/maze/maze.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/MazeGen/maze.lua rename to src/main/resources/assets/opencomputers/loot/maze/maze.lua diff --git a/src/main/resources/assets/opencomputers/loot/MazeGen/maze.man b/src/main/resources/assets/opencomputers/loot/maze/maze.man similarity index 100% rename from src/main/resources/assets/opencomputers/loot/MazeGen/maze.man rename to src/main/resources/assets/opencomputers/loot/maze/maze.man diff --git a/src/main/resources/assets/opencomputers/loot/Network/autorun.lua b/src/main/resources/assets/opencomputers/loot/network/autorun.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Network/autorun.lua rename to src/main/resources/assets/opencomputers/loot/network/autorun.lua diff --git a/src/main/resources/assets/opencomputers/loot/Network/data/bin/arp.lua b/src/main/resources/assets/opencomputers/loot/network/data/bin/arp.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Network/data/bin/arp.lua rename to src/main/resources/assets/opencomputers/loot/network/data/bin/arp.lua diff --git a/src/main/resources/assets/opencomputers/loot/Network/data/bin/ifconfig.lua b/src/main/resources/assets/opencomputers/loot/network/data/bin/ifconfig.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Network/data/bin/ifconfig.lua rename to src/main/resources/assets/opencomputers/loot/network/data/bin/ifconfig.lua diff --git a/src/main/resources/assets/opencomputers/loot/Network/data/bin/ping.lua b/src/main/resources/assets/opencomputers/loot/network/data/bin/ping.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Network/data/bin/ping.lua rename to src/main/resources/assets/opencomputers/loot/network/data/bin/ping.lua diff --git a/src/main/resources/assets/opencomputers/loot/Network/data/bin/route.lua b/src/main/resources/assets/opencomputers/loot/network/data/bin/route.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Network/data/bin/route.lua rename to src/main/resources/assets/opencomputers/loot/network/data/bin/route.lua diff --git a/src/main/resources/assets/opencomputers/loot/Network/data/boot/80_network.lua b/src/main/resources/assets/opencomputers/loot/network/data/boot/80_network.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Network/data/boot/80_network.lua rename to src/main/resources/assets/opencomputers/loot/network/data/boot/80_network.lua diff --git a/src/main/resources/assets/opencomputers/loot/Network/data/boot/95_hostname.lua b/src/main/resources/assets/opencomputers/loot/network/data/boot/95_hostname.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Network/data/boot/95_hostname.lua rename to src/main/resources/assets/opencomputers/loot/network/data/boot/95_hostname.lua diff --git a/src/main/resources/assets/opencomputers/loot/Network/data/lib/network.lua b/src/main/resources/assets/opencomputers/loot/network/data/lib/network.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Network/data/lib/network.lua rename to src/main/resources/assets/opencomputers/loot/network/data/lib/network.lua diff --git a/src/main/resources/assets/opencomputers/loot/Network/data/lib/network/loopback.lua b/src/main/resources/assets/opencomputers/loot/network/data/lib/network/loopback.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Network/data/lib/network/loopback.lua rename to src/main/resources/assets/opencomputers/loot/network/data/lib/network/loopback.lua diff --git a/src/main/resources/assets/opencomputers/loot/Network/data/lib/network/modem.lua b/src/main/resources/assets/opencomputers/loot/network/data/lib/network/modem.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Network/data/lib/network/modem.lua rename to src/main/resources/assets/opencomputers/loot/network/data/lib/network/modem.lua diff --git a/src/main/resources/assets/opencomputers/loot/Network/data/lib/network/tunnel.lua b/src/main/resources/assets/opencomputers/loot/network/data/lib/network/tunnel.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Network/data/lib/network/tunnel.lua rename to src/main/resources/assets/opencomputers/loot/network/data/lib/network/tunnel.lua diff --git a/src/main/resources/assets/opencomputers/loot/Network/data/usr/bin/nc.lua b/src/main/resources/assets/opencomputers/loot/network/data/usr/bin/nc.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Network/data/usr/bin/nc.lua rename to src/main/resources/assets/opencomputers/loot/network/data/usr/bin/nc.lua diff --git a/src/main/resources/assets/opencomputers/loot/Network/data/usr/man/ifconfig b/src/main/resources/assets/opencomputers/loot/network/data/usr/man/ifconfig similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Network/data/usr/man/ifconfig rename to src/main/resources/assets/opencomputers/loot/network/data/usr/man/ifconfig diff --git a/src/main/resources/assets/opencomputers/loot/Network/data/usr/man/network b/src/main/resources/assets/opencomputers/loot/network/data/usr/man/network similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Network/data/usr/man/network rename to src/main/resources/assets/opencomputers/loot/network/data/usr/man/network diff --git a/src/main/resources/assets/opencomputers/loot/Network/data/usr/man/ping b/src/main/resources/assets/opencomputers/loot/network/data/usr/man/ping similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Network/data/usr/man/ping rename to src/main/resources/assets/opencomputers/loot/network/data/usr/man/ping diff --git a/src/main/resources/assets/opencomputers/loot/Network/installNetwork.lua b/src/main/resources/assets/opencomputers/loot/network/installNetwork.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Network/installNetwork.lua rename to src/main/resources/assets/opencomputers/loot/network/installNetwork.lua diff --git a/src/main/resources/assets/opencomputers/loot/Network/protocol b/src/main/resources/assets/opencomputers/loot/network/protocol similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Network/protocol rename to src/main/resources/assets/opencomputers/loot/network/protocol diff --git a/src/main/resources/assets/opencomputers/loot/OpenLoader/OpenLoader.man b/src/main/resources/assets/opencomputers/loot/openloader/OpenLoader.man similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenLoader/OpenLoader.man rename to src/main/resources/assets/opencomputers/loot/openloader/OpenLoader.man diff --git a/src/main/resources/assets/opencomputers/loot/OpenLoader/autorun.lua b/src/main/resources/assets/opencomputers/loot/openloader/autorun.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenLoader/autorun.lua rename to src/main/resources/assets/opencomputers/loot/openloader/autorun.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenLoader/bin/opl-flash.lua b/src/main/resources/assets/opencomputers/loot/openloader/bin/opl-flash.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenLoader/bin/opl-flash.lua rename to src/main/resources/assets/opencomputers/loot/openloader/bin/opl-flash.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenLoader/init.lua b/src/main/resources/assets/opencomputers/loot/openloader/init.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenLoader/init.lua rename to src/main/resources/assets/opencomputers/loot/openloader/init.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/.osprop b/src/main/resources/assets/opencomputers/loot/openos/.osprop similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/.osprop rename to src/main/resources/assets/opencomputers/loot/openos/.osprop diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/address.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/address.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/address.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/address.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/alias.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/alias.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/alias.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/alias.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/cat.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/cat.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/cat.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/cat.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/cd.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/cd.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/cd.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/cd.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/clear.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/clear.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/clear.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/clear.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/components.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/components.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/components.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/components.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/cp.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/cp.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/cp.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/cp.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/date.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/date.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/date.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/date.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/df.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/df.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/df.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/df.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/dmesg.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/dmesg.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/dmesg.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/dmesg.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/du.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/du.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/du.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/du.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/echo.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/echo.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/echo.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/echo.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/edit.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/edit.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/edit.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/edit.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/find.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/find.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/find.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/find.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/flash.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/flash.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/flash.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/flash.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/grep.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/grep.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/grep.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/grep.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/head.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/head.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/head.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/head.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/hostname.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/hostname.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/hostname.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/hostname.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/install.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/install.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/install.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/install.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/label.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/label.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/label.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/label.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/ln.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/ln.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/ln.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/ln.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/ls.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/ls.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/ls.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/ls.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/lua.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/lua.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/lua.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/lua.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/man.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/man.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/man.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/man.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/mkdir.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/mkdir.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/mkdir.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/mkdir.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/mktmp.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/mktmp.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/mktmp.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/mktmp.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/more.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/more.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/more.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/more.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/mount.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/mount.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/mount.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/mount.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/mv.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/mv.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/mv.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/mv.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/primary.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/primary.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/primary.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/primary.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/pwd.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/pwd.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/pwd.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/pwd.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/rc.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/rc.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/rc.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/rc.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/reboot.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/reboot.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/reboot.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/reboot.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/redstone.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/redstone.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/redstone.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/redstone.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/resolution.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/resolution.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/resolution.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/resolution.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/rm.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/rm.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/rm.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/rm.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/rmdir.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/rmdir.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/rmdir.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/rmdir.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/set.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/set.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/set.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/set.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/sh.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/sh.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/sh.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/sh.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/shutdown.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/shutdown.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/shutdown.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/shutdown.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/sleep.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/sleep.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/sleep.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/sleep.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/source.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/source.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/source.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/source.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/time.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/time.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/time.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/time.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/touch.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/touch.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/touch.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/touch.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/umount.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/umount.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/umount.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/umount.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/unalias.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/unalias.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/unalias.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/unalias.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/unset.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/unset.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/unset.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/unset.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/uptime.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/uptime.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/uptime.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/uptime.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/useradd.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/useradd.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/useradd.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/useradd.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/userdel.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/userdel.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/userdel.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/userdel.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/which.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/which.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/which.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/which.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/bin/yes.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/yes.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/bin/yes.lua rename to src/main/resources/assets/opencomputers/loot/openos/bin/yes.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/boot/00_base.lua b/src/main/resources/assets/opencomputers/loot/openos/boot/00_base.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/boot/00_base.lua rename to src/main/resources/assets/opencomputers/loot/openos/boot/00_base.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/boot/01_process.lua b/src/main/resources/assets/opencomputers/loot/openos/boot/01_process.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/boot/01_process.lua rename to src/main/resources/assets/opencomputers/loot/openos/boot/01_process.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/boot/02_os.lua b/src/main/resources/assets/opencomputers/loot/openos/boot/02_os.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/boot/02_os.lua rename to src/main/resources/assets/opencomputers/loot/openos/boot/02_os.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/boot/03_io.lua b/src/main/resources/assets/opencomputers/loot/openos/boot/03_io.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/boot/03_io.lua rename to src/main/resources/assets/opencomputers/loot/openos/boot/03_io.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/boot/04_component.lua b/src/main/resources/assets/opencomputers/loot/openos/boot/04_component.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/boot/04_component.lua rename to src/main/resources/assets/opencomputers/loot/openos/boot/04_component.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/boot/10_devfs.lua b/src/main/resources/assets/opencomputers/loot/openos/boot/10_devfs.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/boot/10_devfs.lua rename to src/main/resources/assets/opencomputers/loot/openos/boot/10_devfs.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/boot/90_filesystem.lua b/src/main/resources/assets/opencomputers/loot/openos/boot/90_filesystem.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/boot/90_filesystem.lua rename to src/main/resources/assets/opencomputers/loot/openos/boot/90_filesystem.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/boot/91_gpu.lua b/src/main/resources/assets/opencomputers/loot/openos/boot/91_gpu.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/boot/91_gpu.lua rename to src/main/resources/assets/opencomputers/loot/openos/boot/91_gpu.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/boot/92_keyboard.lua b/src/main/resources/assets/opencomputers/loot/openos/boot/92_keyboard.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/boot/92_keyboard.lua rename to src/main/resources/assets/opencomputers/loot/openos/boot/92_keyboard.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/boot/93_term.lua b/src/main/resources/assets/opencomputers/loot/openos/boot/93_term.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/boot/93_term.lua rename to src/main/resources/assets/opencomputers/loot/openos/boot/93_term.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/boot/94_shell.lua b/src/main/resources/assets/opencomputers/loot/openos/boot/94_shell.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/boot/94_shell.lua rename to src/main/resources/assets/opencomputers/loot/openos/boot/94_shell.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/boot/99_rc.lua b/src/main/resources/assets/opencomputers/loot/openos/boot/99_rc.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/boot/99_rc.lua rename to src/main/resources/assets/opencomputers/loot/openos/boot/99_rc.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/etc/motd b/src/main/resources/assets/opencomputers/loot/openos/etc/motd similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/etc/motd rename to src/main/resources/assets/opencomputers/loot/openos/etc/motd diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/etc/profile b/src/main/resources/assets/opencomputers/loot/openos/etc/profile similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/etc/profile rename to src/main/resources/assets/opencomputers/loot/openos/etc/profile diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/etc/rc.cfg b/src/main/resources/assets/opencomputers/loot/openos/etc/rc.cfg similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/etc/rc.cfg rename to src/main/resources/assets/opencomputers/loot/openos/etc/rc.cfg diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/etc/rc.d/example.lua b/src/main/resources/assets/opencomputers/loot/openos/etc/rc.d/example.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/etc/rc.d/example.lua rename to src/main/resources/assets/opencomputers/loot/openos/etc/rc.d/example.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/home/.shrc b/src/main/resources/assets/opencomputers/loot/openos/home/.shrc similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/home/.shrc rename to src/main/resources/assets/opencomputers/loot/openos/home/.shrc diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/init.lua b/src/main/resources/assets/opencomputers/loot/openos/init.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/init.lua rename to src/main/resources/assets/opencomputers/loot/openos/init.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/bit32.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/bit32.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/bit32.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/bit32.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/buffer.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/buffer.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/buffer.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/buffer.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/colors.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/colors.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/colors.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/colors.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/devfs.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/devfs.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/devfs.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/devfs.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/event.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/event.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/event.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/event.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/filesystem.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/filesystem.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/filesystem.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/filesystem.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/guid.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/guid.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/guid.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/guid.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/io.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/io.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/io.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/io.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/keyboard.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/keyboard.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/keyboard.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/keyboard.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/note.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/note.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/note.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/note.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/package.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/package.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/package.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/package.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/pipes.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/pipes.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/pipes.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/pipes.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/process.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/process.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/process.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/process.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/rc.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/rc.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/rc.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/rc.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/serialization.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/serialization.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/serialization.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/serialization.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/sh.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/sh.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/sh.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/sh.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/shell.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/shell.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/shell.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/shell.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/sides.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/sides.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/sides.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/sides.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/term.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/term.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/term.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/term.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/text.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/text.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/text.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/text.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/tools/delayLookup.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/tools/delayLookup.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/tools/delayLookup.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/tools/delayLookup.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/tools/delayParse.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/tools/delayParse.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/tools/delayParse.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/tools/delayParse.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/tools/keyboard_full.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/tools/keyboard_full.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/tools/keyboard_full.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/tools/keyboard_full.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/lib/transforms.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/transforms.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/lib/transforms.lua rename to src/main/resources/assets/opencomputers/loot/openos/lib/transforms.lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/address b/src/main/resources/assets/opencomputers/loot/openos/usr/man/address similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/address rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/address diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/alias b/src/main/resources/assets/opencomputers/loot/openos/usr/man/alias similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/alias rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/alias diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/cat b/src/main/resources/assets/opencomputers/loot/openos/usr/man/cat similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/cat rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/cat diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/cd b/src/main/resources/assets/opencomputers/loot/openos/usr/man/cd similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/cd rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/cd diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/clear b/src/main/resources/assets/opencomputers/loot/openos/usr/man/clear similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/clear rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/clear diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/cp b/src/main/resources/assets/opencomputers/loot/openos/usr/man/cp similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/cp rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/cp diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/date b/src/main/resources/assets/opencomputers/loot/openos/usr/man/date similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/date rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/date diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/df b/src/main/resources/assets/opencomputers/loot/openos/usr/man/df similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/df rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/df diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/dmesg b/src/main/resources/assets/opencomputers/loot/openos/usr/man/dmesg similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/dmesg rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/dmesg diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/echo b/src/main/resources/assets/opencomputers/loot/openos/usr/man/echo similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/echo rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/echo diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/edit b/src/main/resources/assets/opencomputers/loot/openos/usr/man/edit similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/edit rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/edit diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/grep b/src/main/resources/assets/opencomputers/loot/openos/usr/man/grep similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/grep rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/grep diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/head b/src/main/resources/assets/opencomputers/loot/openos/usr/man/head similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/head rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/head diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/hostname b/src/main/resources/assets/opencomputers/loot/openos/usr/man/hostname similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/hostname rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/hostname diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/label b/src/main/resources/assets/opencomputers/loot/openos/usr/man/label similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/label rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/label diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/ln b/src/main/resources/assets/opencomputers/loot/openos/usr/man/ln similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/ln rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/ln diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/ls b/src/main/resources/assets/opencomputers/loot/openos/usr/man/ls similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/ls rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/ls diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/lua b/src/main/resources/assets/opencomputers/loot/openos/usr/man/lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/lua rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/lua diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/man b/src/main/resources/assets/opencomputers/loot/openos/usr/man/man similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/man rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/man diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/mkdir b/src/main/resources/assets/opencomputers/loot/openos/usr/man/mkdir similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/mkdir rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/mkdir diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/more b/src/main/resources/assets/opencomputers/loot/openos/usr/man/more similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/more rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/more diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/mount b/src/main/resources/assets/opencomputers/loot/openos/usr/man/mount similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/mount rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/mount diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/mv b/src/main/resources/assets/opencomputers/loot/openos/usr/man/mv similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/mv rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/mv diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/primary b/src/main/resources/assets/opencomputers/loot/openos/usr/man/primary similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/primary rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/primary diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/pwd b/src/main/resources/assets/opencomputers/loot/openos/usr/man/pwd similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/pwd rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/pwd diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/rc b/src/main/resources/assets/opencomputers/loot/openos/usr/man/rc similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/rc rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/rc diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/reboot b/src/main/resources/assets/opencomputers/loot/openos/usr/man/reboot similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/reboot rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/reboot diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/redstone b/src/main/resources/assets/opencomputers/loot/openos/usr/man/redstone similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/redstone rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/redstone diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/resolution b/src/main/resources/assets/opencomputers/loot/openos/usr/man/resolution similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/resolution rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/resolution diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/rm b/src/main/resources/assets/opencomputers/loot/openos/usr/man/rm similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/rm rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/rm diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/sh b/src/main/resources/assets/opencomputers/loot/openos/usr/man/sh similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/sh rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/sh diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/shutdown b/src/main/resources/assets/opencomputers/loot/openos/usr/man/shutdown similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/shutdown rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/shutdown diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/umount b/src/main/resources/assets/opencomputers/loot/openos/usr/man/umount similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/umount rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/umount diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/unalias b/src/main/resources/assets/opencomputers/loot/openos/usr/man/unalias similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/unalias rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/unalias diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/uptime b/src/main/resources/assets/opencomputers/loot/openos/usr/man/uptime similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/uptime rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/uptime diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/useradd b/src/main/resources/assets/opencomputers/loot/openos/usr/man/useradd similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/useradd rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/useradd diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/userdel b/src/main/resources/assets/opencomputers/loot/openos/usr/man/userdel similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/userdel rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/userdel diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/which b/src/main/resources/assets/opencomputers/loot/openos/usr/man/which similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/which rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/which diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/yes b/src/main/resources/assets/opencomputers/loot/openos/usr/man/yes similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/man/yes rename to src/main/resources/assets/opencomputers/loot/openos/usr/man/yes diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/usr/misc/greetings.txt b/src/main/resources/assets/opencomputers/loot/openos/usr/misc/greetings.txt similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OpenOS/usr/misc/greetings.txt rename to src/main/resources/assets/opencomputers/loot/openos/usr/misc/greetings.txt diff --git a/src/main/resources/assets/opencomputers/loot/OPPM/autorun.lua b/src/main/resources/assets/opencomputers/loot/oppm/autorun.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OPPM/autorun.lua rename to src/main/resources/assets/opencomputers/loot/oppm/autorun.lua diff --git a/src/main/resources/assets/opencomputers/loot/OPPM/etc/oppm.cfg b/src/main/resources/assets/opencomputers/loot/oppm/etc/oppm.cfg similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OPPM/etc/oppm.cfg rename to src/main/resources/assets/opencomputers/loot/oppm/etc/oppm.cfg diff --git a/src/main/resources/assets/opencomputers/loot/OPPM/oppm.lua b/src/main/resources/assets/opencomputers/loot/oppm/oppm.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/OPPM/oppm.lua rename to src/main/resources/assets/opencomputers/loot/oppm/oppm.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/arp.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/arp.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/arp.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/arp.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/cat.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/cat.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/cat.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/cat.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/clear.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/clear.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/clear.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/clear.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/components.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/components.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/components.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/components.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/cp.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/cp.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/cp.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/cp.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/dd.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/dd.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/dd.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/dd.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/df.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/df.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/df.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/df.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/dmesg.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/dmesg.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/dmesg.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/dmesg.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/du.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/du.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/du.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/du.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/echo.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/echo.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/echo.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/echo.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/edit.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/edit.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/edit.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/edit.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/getty.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/getty.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/getty.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/getty.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/hostname.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/hostname.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/hostname.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/hostname.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/ifconfig.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/ifconfig.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/ifconfig.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/ifconfig.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/init.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/init.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/init.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/init.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/install.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/install.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/install.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/install.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/kill.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/kill.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/kill.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/kill.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/label.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/label.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/label.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/label.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/ln.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/ln.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/ln.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/ln.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/ls.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/ls.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/ls.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/ls.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/lua.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/lua.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/lua.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/lua.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/mkdir.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/mkdir.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/mkdir.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/mkdir.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/more.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/more.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/more.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/more.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/mount.cow.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/mount.cow.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/mount.cow.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/mount.cow.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/mount.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/mount.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/mount.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/mount.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/mount.msdos.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/mount.msdos.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/mount.msdos.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/mount.msdos.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/mv.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/mv.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/mv.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/mv.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/passwd.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/passwd.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/passwd.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/passwd.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/pastebin.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/pastebin.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/pastebin.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/pastebin.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/ping.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/ping.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/ping.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/ping.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/ps.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/ps.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/ps.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/ps.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/pwd.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/pwd.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/pwd.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/pwd.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/rc.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/rc.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/rc.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/rc.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/readkey.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/readkey.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/readkey.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/readkey.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/reboot.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/reboot.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/reboot.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/reboot.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/resolution.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/resolution.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/resolution.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/resolution.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/rm.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/rm.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/rm.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/rm.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/route.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/route.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/route.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/route.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/sandbox.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/sandbox.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/sandbox.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/sandbox.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/sh.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/sh.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/sh.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/sh.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/shutdown.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/shutdown.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/shutdown.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/shutdown.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/sleep.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/sleep.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/sleep.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/sleep.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/sshd.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/sshd.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/sshd.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/sshd.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/tee.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/tee.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/tee.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/tee.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/touch.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/touch.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/touch.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/touch.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/uptime.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/uptime.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/uptime.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/uptime.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/watch.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/watch.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/watch.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/watch.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/wc.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/wc.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/wc.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/wc.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/bin/wget.lua b/src/main/resources/assets/opencomputers/loot/plan9k/bin/wget.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/bin/wget.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/bin/wget.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/boot/kernel/pipes b/src/main/resources/assets/opencomputers/loot/plan9k/boot/kernel/pipes similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/boot/kernel/pipes rename to src/main/resources/assets/opencomputers/loot/plan9k/boot/kernel/pipes diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/etc/rc.d/autoupdate.lua b/src/main/resources/assets/opencomputers/loot/plan9k/etc/rc.d/autoupdate.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/etc/rc.d/autoupdate.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/etc/rc.d/autoupdate.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/etc/rc.d/sshd.lua b/src/main/resources/assets/opencomputers/loot/plan9k/etc/rc.d/sshd.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/etc/rc.d/sshd.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/etc/rc.d/sshd.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/init.lua b/src/main/resources/assets/opencomputers/loot/plan9k/init.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/init.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/init.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/event.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/event.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/event.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/event.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/internet.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/internet.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/internet.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/internet.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/01_gc.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/01_gc.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/01_gc.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/01_gc.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/01_util.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/01_util.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/01_util.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/01_util.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/02_cmd.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/02_cmd.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/02_cmd.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/02_cmd.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/05_vfs.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/05_vfs.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/05_vfs.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/05_vfs.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/06_cowfs.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/06_cowfs.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/06_cowfs.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/06_cowfs.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/09_rootfs.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/09_rootfs.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/09_rootfs.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/09_rootfs.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/10_devfs.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/10_devfs.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/10_devfs.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/10_devfs.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/10_procfs.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/10_procfs.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/10_procfs.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/10_procfs.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/15_keventd.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/15_keventd.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/15_keventd.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/15_keventd.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/15_userspace.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/15_userspace.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/15_userspace.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/15_userspace.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/16_buffer.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/16_buffer.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/16_buffer.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/16_buffer.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/16_component.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/16_component.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/16_component.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/16_component.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/16_require.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/16_require.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/16_require.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/16_require.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/17_chatbox.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/17_chatbox.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/17_chatbox.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/17_chatbox.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/17_data.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/17_data.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/17_data.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/17_data.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/17_drive.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/17_drive.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/17_drive.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/17_drive.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/17_eeprom.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/17_eeprom.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/17_eeprom.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/17_eeprom.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/17_io.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/17_io.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/17_io.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/17_io.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/17_ipc.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/17_ipc.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/17_ipc.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/17_ipc.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/17_keyboard.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/17_keyboard.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/17_keyboard.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/17_keyboard.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/17_network.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/17_network.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/17_network.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/17_network.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/17_nfc.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/17_nfc.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/17_nfc.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/17_nfc.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/17_tape.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/17_tape.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/17_tape.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/17_tape.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/18_pty.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/18_pty.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/18_pty.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/18_pty.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/18_syscall.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/18_syscall.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/18_syscall.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/18_syscall.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/19_cgroups.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/19_cgroups.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/19_cgroups.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/19_cgroups.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/19_libnetwork.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/19_libnetwork.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/19_libnetwork.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/19_libnetwork.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/19_manageg.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/19_manageg.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/19_manageg.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/19_manageg.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/20_threading.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/20_threading.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/20_threading.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/20_threading.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/21_threadUtil.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/21_threadUtil.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/21_threadUtil.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/21_threadUtil.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/21_timer.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/21_timer.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/21_timer.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/21_timer.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/25_init.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/25_init.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/base/25_init.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/base/25_init.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/network/loopback.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/network/loopback.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/network/loopback.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/network/loopback.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/network/modem.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/network/modem.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/network/modem.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/network/modem.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/network/tunnel.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/network/tunnel.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/modules/network/tunnel.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/modules/network/tunnel.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/msdosfs.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/msdosfs.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/msdosfs.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/msdosfs.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/rc.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/rc.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/rc.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/rc.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/serialization.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/serialization.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/serialization.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/serialization.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/shell.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/shell.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/shell.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/shell.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/term.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/term.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/term.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/term.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/lib/text.lua b/src/main/resources/assets/opencomputers/loot/plan9k/lib/text.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/lib/text.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/lib/text.lua diff --git a/src/main/resources/assets/opencomputers/lua/component/data/bin/base64.lua b/src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/base64.lua similarity index 95% rename from src/main/resources/assets/opencomputers/lua/component/data/bin/base64.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/base64.lua index 155dba981..2a5d9d58f 100644 --- a/src/main/resources/assets/opencomputers/lua/component/data/bin/base64.lua +++ b/src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/base64.lua @@ -1,42 +1,42 @@ -local shell = require("shell") -local data = require("data") - - -local args, parms = shell.parse(...) -if parms.h or parms.help then - io.stderr:write("See: man base64" .. "\n") - os.exit(true) -end -local encodingfun = nil -local encode -if parms.d or parms.decode then - encodingfun = data.decode64 - encode = false -else - encodingfun = data.encode64 - encode = true -end - -if #args == 0 then - repeat - local read = io.read(encode and 3 or 4) - if read then - io.write(encodingfun(read)) - end - until not read -else - for i = 1, #args do - local file, reason = io.open(shell.resolve(args[i])) - if not file then - io.stderr:write(tostring(reason) .. "\n") - os.exit(false) - end - repeat - local line = file:read(encode and 3 or 4) - if line then - io.write(encodingfun(line)) - end - until not line - file:close() - end -end +local shell = require("shell") +local data = require("data") + + +local args, parms = shell.parse(...) +if parms.h or parms.help then + io.stderr:write("See: man base64" .. "\n") + os.exit(true) +end +local encodingfun = nil +local encode +if parms.d or parms.decode then + encodingfun = data.decode64 + encode = false +else + encodingfun = data.encode64 + encode = true +end + +if #args == 0 then + repeat + local read = io.read(encode and 3 or 4) + if read then + io.write(encodingfun(read)) + end + until not read +else + for i = 1, #args do + local file, reason = io.open(shell.resolve(args[i])) + if not file then + io.stderr:write(tostring(reason) .. "\n") + os.exit(false) + end + repeat + local line = file:read(encode and 3 or 4) + if line then + io.write(encodingfun(line)) + end + until not line + file:close() + end +end diff --git a/src/main/resources/assets/opencomputers/lua/component/data/bin/deflate.lua b/src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/deflate.lua similarity index 95% rename from src/main/resources/assets/opencomputers/lua/component/data/bin/deflate.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/deflate.lua index 0ba356e3a..cd8660ac2 100644 --- a/src/main/resources/assets/opencomputers/lua/component/data/bin/deflate.lua +++ b/src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/deflate.lua @@ -1,25 +1,25 @@ -local shell = require("shell") -local data = require("data") - -local args = shell.parse(...) -if #args == 0 then - local read = "" - repeat - local current = io.read("*a") - read = read .. current - until current ~= "" - io.write(data.deflate(read)) -else - local read = "" - local file, reason = io.open(shell.resolve(args[1])) - if not file then - io.stderr:write(tostring(reason) .. "\n") - os.exit(false) - end - repeat - local current = file:read("*a") - read = read .. current - until current ~= "" - file:close() - io.write(data.deflate(read)) -end +local shell = require("shell") +local data = require("data") + +local args = shell.parse(...) +if #args == 0 then + local read = "" + repeat + local current = io.read("*a") + read = read .. current + until current ~= "" + io.write(data.deflate(read)) +else + local read = "" + local file, reason = io.open(shell.resolve(args[1])) + if not file then + io.stderr:write(tostring(reason) .. "\n") + os.exit(false) + end + repeat + local current = file:read("*a") + read = read .. current + until current ~= "" + file:close() + io.write(data.deflate(read)) +end diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/usr/bin/gpg.lua b/src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/gpg.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/usr/bin/gpg.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/gpg.lua diff --git a/src/main/resources/assets/opencomputers/lua/component/data/bin/inflate.lua b/src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/inflate.lua similarity index 95% rename from src/main/resources/assets/opencomputers/lua/component/data/bin/inflate.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/inflate.lua index c78fd7287..349c5f18b 100644 --- a/src/main/resources/assets/opencomputers/lua/component/data/bin/inflate.lua +++ b/src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/inflate.lua @@ -1,25 +1,25 @@ -local shell = require("shell") -local data = require("data") - -local args = shell.parse(...) -if #args == 0 then - local read = "" - repeat - local current = io.read("*a") - read = read .. current - until current ~= "" - io.write(data.inflate(read)) -else - local read = "" - local file, reason = io.open(shell.resolve(args[1])) - if not file then - io.stderr:write(tostring(reason) .. "\n") - os.exit(false) - end - repeat - local current = file:read("*a") - read = read .. current - until current ~= "" - file:close() - io.write(data.inflate(read)) -end +local shell = require("shell") +local data = require("data") + +local args = shell.parse(...) +if #args == 0 then + local read = "" + repeat + local current = io.read("*a") + read = read .. current + until current ~= "" + io.write(data.inflate(read)) +else + local read = "" + local file, reason = io.open(shell.resolve(args[1])) + if not file then + io.stderr:write(tostring(reason) .. "\n") + os.exit(false) + end + repeat + local current = file:read("*a") + read = read .. current + until current ~= "" + file:close() + io.write(data.inflate(read)) +end diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/usr/bin/md5sum.lua b/src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/md5sum.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/usr/bin/md5sum.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/md5sum.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/usr/bin/mkdosfs.lua b/src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/mkdosfs.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/usr/bin/mkdosfs.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/mkdosfs.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/usr/bin/mpt.lua b/src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/mpt.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/usr/bin/mpt.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/mpt.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/usr/bin/nc.lua b/src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/nc.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/usr/bin/nc.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/nc.lua diff --git a/src/main/resources/assets/opencomputers/lua/component/data/bin/sha256sum.lua b/src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/sha256sum.lua similarity index 96% rename from src/main/resources/assets/opencomputers/lua/component/data/bin/sha256sum.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/sha256sum.lua index 5e63c7c61..33d5b25c7 100644 --- a/src/main/resources/assets/opencomputers/lua/component/data/bin/sha256sum.lua +++ b/src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/sha256sum.lua @@ -1,27 +1,27 @@ -local shell = require("shell") -local data = require("data") - -local args = shell.parse(...) -if #args == 0 then - local read = "" - repeat - local current = io.read("*a") - read = read .. current - until current ~= "" - io.write(data.toHex(data.sha256(read))) -else - for i = 1, #args do - local read = "" - local file, reason = io.open(shell.resolve(args[i])) - if not file then - io.stderr:write(tostring(reason) .. "\n") - os.exit(false) - end - repeat - local current = file:read("*a") - read = read .. current - until current ~= "" - file:close() - io.write(data.toHex(data.sha256(read)) .. "\t".. args[i] .. "\n") - end -end +local shell = require("shell") +local data = require("data") + +local args = shell.parse(...) +if #args == 0 then + local read = "" + repeat + local current = io.read("*a") + read = read .. current + until current ~= "" + io.write(data.toHex(data.sha256(read))) +else + for i = 1, #args do + local read = "" + local file, reason = io.open(shell.resolve(args[i])) + if not file then + io.stderr:write(tostring(reason) .. "\n") + os.exit(false) + end + repeat + local current = file:read("*a") + read = read .. current + until current ~= "" + file:close() + io.write(data.toHex(data.sha256(read)) .. "\t".. args[i] .. "\n") + end +end diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/usr/bin/ssh.lua b/src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/ssh.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/usr/bin/ssh.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/usr/bin/ssh.lua diff --git a/src/main/resources/assets/opencomputers/lua/component/data/lib/data.lua b/src/main/resources/assets/opencomputers/loot/plan9k/usr/lib/data.lua similarity index 96% rename from src/main/resources/assets/opencomputers/lua/component/data/lib/data.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/usr/lib/data.lua index 38251a926..04fa9ff9c 100644 --- a/src/main/resources/assets/opencomputers/lua/component/data/lib/data.lua +++ b/src/main/resources/assets/opencomputers/loot/plan9k/usr/lib/data.lua @@ -1,26 +1,26 @@ -local component = require("component") - -local data = {} - -------------------------------------------------------------------------------- - --- Converts binary data into hexadecimal string. -function data.toHex(data) - return (data:gsub('.', function (c) - return string.format('%02X', string.byte(c)) - end)) -end - --- Converts hexadecimal string into binary data. -function data.fromHex(hex) - return (hex:gsub('..', function (cc) - return string.char(tonumber(cc, 16)) - end)) -end - --- Forward everything else to the primary data card. -setmetatable(data, { __index = function(_, key) return component.data[key] end }) - -------------------------------------------------------------------------------- - -return data +local component = require("component") + +local data = {} + +------------------------------------------------------------------------------- + +-- Converts binary data into hexadecimal string. +function data.toHex(data) + return (data:gsub('.', function (c) + return string.format('%02X', string.byte(c)) + end)) +end + +-- Converts hexadecimal string into binary data. +function data.fromHex(hex) + return (hex:gsub('..', function (cc) + return string.char(tonumber(cc, 16)) + end)) +end + +-- Forward everything else to the primary data card. +setmetatable(data, { __index = function(_, key) return component.data[key] end }) + +------------------------------------------------------------------------------- + +return data diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/usr/man/pipes b/src/main/resources/assets/opencomputers/loot/plan9k/usr/man/pipes similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/usr/man/pipes rename to src/main/resources/assets/opencomputers/loot/plan9k/usr/man/pipes diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/usr/sbin/sshsession.lua b/src/main/resources/assets/opencomputers/loot/plan9k/usr/sbin/sshsession.lua similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/usr/sbin/sshsession.lua rename to src/main/resources/assets/opencomputers/loot/plan9k/usr/sbin/sshsession.lua diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/var/lib/mpt/config.db b/src/main/resources/assets/opencomputers/loot/plan9k/var/lib/mpt/config.db similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/var/lib/mpt/config.db rename to src/main/resources/assets/opencomputers/loot/plan9k/var/lib/mpt/config.db diff --git a/src/main/resources/assets/opencomputers/loot/Plan9k/var/lib/mpt/mpt.db b/src/main/resources/assets/opencomputers/loot/plan9k/var/lib/mpt/mpt.db similarity index 100% rename from src/main/resources/assets/opencomputers/loot/Plan9k/var/lib/mpt/mpt.db rename to src/main/resources/assets/opencomputers/loot/plan9k/var/lib/mpt/mpt.db diff --git a/src/main/resources/assets/opencomputers/recipes/default.recipes b/src/main/resources/assets/opencomputers/recipes/default.recipes index d006c6b61..bf1ae8df7 100644 --- a/src/main/resources/assets/opencomputers/recipes/default.recipes +++ b/src/main/resources/assets/opencomputers/recipes/default.recipes @@ -32,12 +32,12 @@ wrench { } lootDisks: [ { - name: OpenOS + name: "OpenComputers:openos" type: shapeless input: ["oc:floppy", "oc:manual"] }, { - name: OPPM + name: "OpenComputers:oppm" type: shapeless input: ["oc:floppy", "oc:materialInterweb"] } diff --git a/src/main/scala/li/cil/oc/Constants.scala b/src/main/scala/li/cil/oc/Constants.scala index d43386194..b2aa91fe6 100644 --- a/src/main/scala/li/cil/oc/Constants.scala +++ b/src/main/scala/li/cil/oc/Constants.scala @@ -126,7 +126,7 @@ object Constants { final val NavigationUpgrade = "navigationUpgrade" final val NetworkCard = "lanCard" final val NumPad = "numPad" - final val OpenOS = "openOS" + final val OpenOS = "openos" final val PistonUpgrade = "pistonUpgrade" final val Present = "present" final val PrintedCircuitBoard = "printedCircuitBoard" diff --git a/src/main/scala/li/cil/oc/common/EventHandler.scala b/src/main/scala/li/cil/oc/common/EventHandler.scala index 6b1b2c21c..3d4922f5e 100644 --- a/src/main/scala/li/cil/oc/common/EventHandler.scala +++ b/src/main/scala/li/cil/oc/common/EventHandler.scala @@ -26,6 +26,7 @@ import li.cil.oc.common.tileentity.Robot import li.cil.oc.common.tileentity.traits.power import li.cil.oc.integration.Mods import li.cil.oc.integration.util +import li.cil.oc.integration.util.Wrench import li.cil.oc.server.component.Keyboard import li.cil.oc.server.machine.Callbacks import li.cil.oc.server.machine.Machine @@ -269,6 +270,7 @@ object EventHandler { lazy val drone = api.Items.get(Constants.ItemName.Drone) lazy val eeprom = api.Items.get(Constants.ItemName.EEPROM) + lazy val floppy = api.Items.get(Constants.ItemName.Floppy) lazy val mcu = api.Items.get(Constants.BlockName.Microcontroller) lazy val navigationUpgrade = api.Items.get(Constants.ItemName.NavigationUpgrade) lazy val robot = api.Items.get(Constants.BlockName.Robot) @@ -306,6 +308,20 @@ object EventHandler { new TabletData(stack).items.collect { case Some(item) => item }.find(api.Items.get(_) == eeprom) }) || didRecraft + didRecraft = { + if (Loot.isLootDisk(e.crafting)) { + val stacks = (0 until e.craftMatrix.getSizeInventory).flatMap(i => Option(e.craftMatrix.getStackInSlot(i))).toArray + if (stacks.length == 2) stacks.find(Wrench.isWrench) match { + case Some(stack) => + stack.stackSize += 1 + true + case _ => didRecraft + } + else didRecraft + } + else didRecraft + } + // Presents? e.player match { case _: FakePlayer => // No presents for you, automaton. Such discrimination. Much bad conscience. diff --git a/src/main/scala/li/cil/oc/common/Loot.scala b/src/main/scala/li/cil/oc/common/Loot.scala index 2cb79c1b3..0f2d23cde 100644 --- a/src/main/scala/li/cil/oc/common/Loot.scala +++ b/src/main/scala/li/cil/oc/common/Loot.scala @@ -19,6 +19,7 @@ import net.minecraft.nbt.NBTTagCompound import net.minecraft.util.WeightedRandomChestContent import net.minecraftforge.common.ChestGenHooks import net.minecraftforge.common.DimensionManager +import net.minecraftforge.common.util.Constants.NBT import net.minecraftforge.event.world.WorldEvent import scala.collection.convert.WrapAsScala._ @@ -41,14 +42,16 @@ object Loot { val factories = mutable.Map.empty[String, Callable[FileSystem]] - val globalDisks = mutable.Map.empty[String, (ItemStack, Int)] + val globalDisks = mutable.ArrayBuffer.empty[(ItemStack, Int)] - val worldDisks = mutable.Map.empty[String, (ItemStack, Int)] + val worldDisks = mutable.ArrayBuffer.empty[(ItemStack, Int)] val disksForSampling = mutable.ArrayBuffer.empty[ItemStack] val disksForClient = mutable.ArrayBuffer.empty[ItemStack] + def isLootDisk(stack: ItemStack): Boolean = api.Items.get(stack) == api.Items.get(Constants.ItemName.Floppy) && stack.hasTagCompound && stack.getTagCompound.hasKey(Settings.namespace + "lootFactory", NBT.TAG_STRING) + def registerLootDisk(name: String, color: Int, factory: Callable[FileSystem]): ItemStack = { val mod = Loader.instance.activeModContainer.getModId @@ -106,26 +109,26 @@ object Loot { } } } - for ((name, entry) <- globalDisks if !worldDisks.contains(name)) { - worldDisks += name -> entry + for (entry <- globalDisks if !worldDisks.contains(entry)) { + worldDisks += entry } - for ((_, (stack, count)) <- worldDisks) { + for ((stack, count) <- worldDisks) { for (i <- 0 until count) { disksForSampling += stack } } } - private def parseLootDisks(list: java.util.Properties, acc: mutable.Map[String, (ItemStack, Int)], external: Boolean) { + private def parseLootDisks(list: java.util.Properties, acc: mutable.ArrayBuffer[(ItemStack, Int)], external: Boolean) { for (key <- list.stringPropertyNames) { val value = list.getProperty(key) try value.split(":") match { case Array(name, count, color) => - acc += key -> ((createLootDisk(name, key, external, Some(Color.dyes.indexOf(color))), count.toInt)) + acc += ((createLootDisk(name, key, external, Some(Color.dyes.indexOf(color))), count.toInt)) case Array(name, count) => - acc += key -> ((createLootDisk(name, key, external), count.toInt)) + acc += ((createLootDisk(name, key, external), count.toInt)) case _ => - acc += key -> ((createLootDisk(value, key, external), 1)) + acc += ((createLootDisk(value, key, external), 1)) } catch { case t: Throwable => OpenComputers.log.warn("Bad loot descriptor: " + value, t) @@ -139,9 +142,10 @@ object Loot { } else new Callable[FileSystem] { override def call(): FileSystem = api.FileSystem.fromClass(OpenComputers.getClass, Settings.resourceDomain, "loot/" + path) } - val stack = registerLootDisk(name, color.getOrElse(8), callable) + val stack = registerLootDisk(path, color.getOrElse(8), callable) + stack.setStackDisplayName(name) if (!external) { - Items.registerStack(stack, name) + Items.registerStack(stack, path) } stack } diff --git a/src/main/scala/li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala b/src/main/scala/li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala new file mode 100644 index 000000000..90dd4d315 --- /dev/null +++ b/src/main/scala/li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala @@ -0,0 +1,40 @@ +package li.cil.oc.common.recipe + +import li.cil.oc.Constants +import li.cil.oc.Settings +import li.cil.oc.api +import li.cil.oc.common.Loot +import li.cil.oc.integration.util.Wrench +import net.minecraft.inventory.InventoryCrafting +import net.minecraft.item.ItemStack +import net.minecraft.item.crafting.IRecipe +import net.minecraft.world.World + +class LootDiskCyclingRecipe extends IRecipe { + private final val Floppy = api.Items.get(Constants.ItemName.Floppy) + + override def matches(crafting: InventoryCrafting, world: World): Boolean = { + val stacks = collectStacks(crafting).toArray + stacks.length == 2 && stacks.exists(Loot.isLootDisk) && stacks.exists(Wrench.isWrench) + } + + override def getCraftingResult(crafting: InventoryCrafting): ItemStack = { + collectStacks(crafting).find(Loot.isLootDisk) match { + case Some(lootDisk) => + val lootFactoryName = getLootFactoryName(lootDisk) + val lootDiskStacks = Loot.worldDisks.map(_._1) + val oldIndex = lootDiskStacks.indexWhere(s => getLootFactoryName(s) == lootFactoryName) + val newIndex = (oldIndex + 1) % lootDiskStacks.length + lootDiskStacks(newIndex).copy() + case _ => null + } + } + + def getLootFactoryName(stack: ItemStack) = stack.getTagCompound.getString(Settings.namespace + "lootFactory") + + def collectStacks(crafting: InventoryCrafting) = (0 until crafting.getSizeInventory).flatMap(i => Option(crafting.getStackInSlot(i))) + + override def getRecipeSize: Int = 2 + + override def getRecipeOutput: ItemStack = null +} diff --git a/src/main/scala/li/cil/oc/common/recipe/Recipes.scala b/src/main/scala/li/cil/oc/common/recipe/Recipes.scala index 041847848..0db93fe56 100644 --- a/src/main/scala/li/cil/oc/common/recipe/Recipes.scala +++ b/src/main/scala/li/cil/oc/common/recipe/Recipes.scala @@ -157,10 +157,11 @@ object Recipes { // Register all unknown recipes. Well. Loot disk recipes. if (recipes.hasPath("lootDisks")) try { val lootRecipes = recipes.getConfigList("lootDisks") + val lootStacks = Loot.globalDisks.map(_._1) for (recipe <- lootRecipes) { val name = recipe.getString("name") - Loot.globalDisks.get(name) match { - case Some((stack, _)) => addRecipe(stack, recipe, s"loot disk '$name'") + lootStacks.find(s => s.getTagCompound.getString(Settings.namespace + "lootFactory") == name) match { + case Some(stack) => addRecipe(stack, recipe, s"loot disk '$name'") case _ => OpenComputers.log.warn(s"Failed adding recipe for loot disk '$name': No such global loot disk.") hadErrors = true @@ -192,17 +193,22 @@ object Recipes { } // Recrafting operations. - val navigationUpgrade = api.Items.get(Constants.ItemName.NavigationUpgrade) - val mcu = api.Items.get(Constants.BlockName.Microcontroller) - val floppy = api.Items.get(Constants.ItemName.Floppy) - val lootDisk = api.Items.get(Constants.ItemName.LootDisk) - val drone = api.Items.get(Constants.ItemName.Drone) - val eeprom = api.Items.get(Constants.ItemName.EEPROM) - val robot = api.Items.get(Constants.BlockName.Robot) - val tablet = api.Items.get(Constants.ItemName.Tablet) + val accessPoint = api.Items.get(Constants.BlockName.AccessPoint) + val cable = api.Items.get(Constants.BlockName.Cable) val chamelium = api.Items.get(Constants.ItemName.Chamelium) val chameliumBlock = api.Items.get(Constants.BlockName.ChameliumBlock) + val drone = api.Items.get(Constants.ItemName.Drone) + val eeprom = api.Items.get(Constants.ItemName.EEPROM) + val floppy = api.Items.get(Constants.ItemName.Floppy) + val hoverBoots = api.Items.get(Constants.ItemName.HoverBoots) + val lootDisk = api.Items.get(Constants.ItemName.LootDisk) + val mcu = api.Items.get(Constants.BlockName.Microcontroller) + val navigationUpgrade = api.Items.get(Constants.ItemName.NavigationUpgrade) val print = api.Items.get(Constants.BlockName.Print) + val relay = api.Items.get(Constants.BlockName.Relay) + val robot = api.Items.get(Constants.BlockName.Robot) + val switch = api.Items.get(Constants.BlockName.Switch) + val tablet = api.Items.get(Constants.ItemName.Tablet) // Navigation upgrade recrafting. GameRegistry.addRecipe(new ExtendedShapelessOreRecipe( @@ -320,18 +326,19 @@ object Recipes { print.createItemStack(1), new ItemStack(net.minecraft.init.Blocks.glowstone))) // Switch/AccessPoint -> Relay conversion - GameRegistry.addShapelessRecipe(api.Items.get(Constants.BlockName.Relay).createItemStack(1), - api.Items.get(Constants.BlockName.AccessPoint).createItemStack(1)) - GameRegistry.addShapelessRecipe(api.Items.get(Constants.BlockName.Relay).createItemStack(1), - api.Items.get(Constants.BlockName.Switch).createItemStack(1)) + GameRegistry.addShapelessRecipe(relay.createItemStack(1), accessPoint.createItemStack(1)) + GameRegistry.addShapelessRecipe(relay.createItemStack(1), switch.createItemStack(1)) // Hover Boot dyeing - GameRegistry.addRecipe(new ColorizeRecipe(api.Items.get(Constants.ItemName.HoverBoots).item())) - GameRegistry.addRecipe(new DecolorizeRecipe(api.Items.get(Constants.ItemName.HoverBoots).item())) + GameRegistry.addRecipe(new ColorizeRecipe(hoverBoots.item())) + GameRegistry.addRecipe(new DecolorizeRecipe(hoverBoots.item())) // Cable dyeing - GameRegistry.addRecipe(new ColorizeRecipe(api.Items.get(Constants.BlockName.Cable).block())) - GameRegistry.addRecipe(new DecolorizeRecipe(api.Items.get(Constants.BlockName.Cable).block())) + GameRegistry.addRecipe(new ColorizeRecipe(cable.block())) + GameRegistry.addRecipe(new DecolorizeRecipe(cable.block())) + + // Loot disk cycling. + GameRegistry.addRecipe(new LootDiskCyclingRecipe()) } catch { case e: Throwable => OpenComputers.log.error("Error parsing recipes, you may not be able to craft any items from this mod!", e) diff --git a/src/main/scala/li/cil/oc/integration/buildcraft/recipes/LootDiskProgrammableRecipe.scala b/src/main/scala/li/cil/oc/integration/buildcraft/recipes/LootDiskProgrammableRecipe.scala index 4af8c2c39..137802cc3 100644 --- a/src/main/scala/li/cil/oc/integration/buildcraft/recipes/LootDiskProgrammableRecipe.scala +++ b/src/main/scala/li/cil/oc/integration/buildcraft/recipes/LootDiskProgrammableRecipe.scala @@ -24,7 +24,7 @@ object LootDiskProgrammableRecipe extends IProgrammingRecipe { val options = mutable.ArrayBuffer.empty[ItemStack] options.sizeHint(width * height) - for ((name, (stack, chance)) <- Loot.worldDisks) { + for ((stack, _) <- Loot.worldDisks) { options += stack.copy() } diff --git a/src/main/scala/li/cil/oc/server/PacketSender.scala b/src/main/scala/li/cil/oc/server/PacketSender.scala index d0dd30a65..a8ea39da0 100644 --- a/src/main/scala/li/cil/oc/server/PacketSender.scala +++ b/src/main/scala/li/cil/oc/server/PacketSender.scala @@ -279,7 +279,7 @@ object PacketSender { def sendLootDisks(p: EntityPlayerMP): Unit = { // Sending as separate packets, because CompressedStreamTools hiccups otherwise... - val stacks = Loot.worldDisks.values.map(_._1) + val stacks = Loot.worldDisks.map(_._1) for (stack <- stacks) { val pb = new SimplePacketBuilder(PacketType.LootDisk) diff --git a/src/main/scala/li/cil/oc/server/component/DataCard.scala b/src/main/scala/li/cil/oc/server/component/DataCard.scala index bb5189960..5eddb1227 100644 --- a/src/main/scala/li/cil/oc/server/component/DataCard.scala +++ b/src/main/scala/li/cil/oc/server/component/DataCard.scala @@ -13,17 +13,13 @@ import javax.crypto.spec.IvParameterSpec import javax.crypto.spec.SecretKeySpec import com.google.common.hash.Hashing -import li.cil.oc.OpenComputers import li.cil.oc.Settings -import li.cil.oc.api import li.cil.oc.api.Network import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context -import li.cil.oc.api.network.Node import li.cil.oc.api.network.Visibility import li.cil.oc.api.prefab -import li.cil.oc.util.ExtendedNBT._ import net.minecraft.nbt.NBTTagCompound import org.apache.commons.codec.binary.Base64 import org.apache.commons.io.output.ByteArrayOutputStream @@ -34,9 +30,6 @@ abstract class DataCard extends prefab.ManagedEnvironment { withConnector(). create() - val romData = Option(api.FileSystem.asManagedEnvironment(api.FileSystem. - fromClass(OpenComputers.getClass, Settings.resourceDomain, "lua/component/data"), "data")) - // ----------------------------------------------------------------------- // protected def checkCost(context: Context, args: Arguments, baseCost: Double, byteCost: Double): Array[Byte] = { @@ -70,32 +63,6 @@ abstract class DataCard extends prefab.ManagedEnvironment { def getLimit(context: Context, args: Arguments): Array[AnyRef] = { result(Settings.get.dataCardHardLimit) } - - // ----------------------------------------------------------------------- // - - override def onConnect(node: Node) { - super.onConnect(node) - if (node.isNeighborOf(this.node)) { - romData.foreach(fs => node.connect(fs.node)) - } - } - - override def onDisconnect(node: Node) { - super.onDisconnect(node) - if (node == this.node) { - romData.foreach(_.node.remove()) - } - } - - override def load(nbt: NBTTagCompound) { - super.load(nbt) - romData.foreach(_.load(nbt.getCompoundTag("romData"))) - } - - override def save(nbt: NBTTagCompound) { - super.save(nbt) - romData.foreach(fs => nbt.setNewCompoundTag("romData", fs.save)) - } } object DataCard { diff --git a/src/main/scala/li/cil/oc/server/component/InternetCard.scala b/src/main/scala/li/cil/oc/server/component/InternetCard.scala index ff57fb9fa..8d3fa2bd6 100644 --- a/src/main/scala/li/cil/oc/server/component/InternetCard.scala +++ b/src/main/scala/li/cil/oc/server/component/InternetCard.scala @@ -1,19 +1,27 @@ package li.cil.oc.server.component -import java.io.{BufferedWriter, FileNotFoundException, IOException, InputStream, OutputStreamWriter} +import java.io.BufferedWriter +import java.io.FileNotFoundException +import java.io.IOException +import java.io.InputStream +import java.io.OutputStreamWriter import java.net._ import java.nio.ByteBuffer import java.nio.channels.SocketChannel -import java.util.concurrent.{Callable, ConcurrentLinkedQueue, ExecutionException, Future} +import java.util.concurrent.Callable +import java.util.concurrent.ConcurrentLinkedQueue +import java.util.concurrent.ExecutionException +import java.util.concurrent.Future -import li.cil.oc.{OpenComputers, Settings, api} -import li.cil.oc.api.machine.{Arguments, Callback, Context} +import li.cil.oc.Settings +import li.cil.oc.api.machine.Arguments +import li.cil.oc.api.machine.Callback +import li.cil.oc.api.machine.Context import li.cil.oc.api.network._ -import li.cil.oc.api.{Network, prefab} import li.cil.oc.api.prefab.AbstractValue -import li.cil.oc.util.ExtendedNBT._ +import li.cil.oc.api.Network +import li.cil.oc.api.prefab import li.cil.oc.util.ThreadPoolFactory -import net.minecraft.nbt.NBTTagCompound import net.minecraft.server.MinecraftServer import scala.collection.convert.WrapAsScala._ @@ -24,9 +32,6 @@ class InternetCard extends prefab.ManagedEnvironment { withComponent("internet", Visibility.Neighbors). create() - val romInternet = Option(api.FileSystem.asManagedEnvironment(api.FileSystem. - fromClass(OpenComputers.getClass, Settings.resourceDomain, "lua/component/internet"), "internet")) - protected var owner: Option[Context] = None protected val connections = mutable.Set.empty[InternetCard.Closable] @@ -48,8 +53,9 @@ class InternetCard extends prefab.ManagedEnvironment { } val post = if (args.isString(1)) Option(args.checkString(1)) else None val headers = if (args.isTable(2)) args.checkTable(2).collect { - case (key: String, value: AnyRef) => (key, value.toString) - }.toMap else Map.empty[String, String] + case (key: String, value: AnyRef) => (key, value.toString) + }.toMap + else Map.empty[String, String] if (!Settings.get.httpHeadersEnabled && headers.nonEmpty) { return result(Unit, "http request headers are unavailable") } @@ -90,7 +96,6 @@ class InternetCard extends prefab.ManagedEnvironment { super.onConnect(node) if (owner.isEmpty && node.host.isInstanceOf[Context] && node.isNeighborOf(this.node)) { owner = Some(node.host.asInstanceOf[Context]) - romInternet.foreach(fs => node.connect(fs.node)) } } @@ -102,7 +107,6 @@ class InternetCard extends prefab.ManagedEnvironment { connections.foreach(_.close()) connections.clear() } - romInternet.foreach(_.node.remove()) } } @@ -120,18 +124,6 @@ class InternetCard extends prefab.ManagedEnvironment { // ----------------------------------------------------------------------- // - override def load(nbt: NBTTagCompound) { - super.load(nbt) - romInternet.foreach(_.load(nbt.getCompoundTag("romInternet"))) - } - - override def save(nbt: NBTTagCompound) { - super.save(nbt) - romInternet.foreach(fs => nbt.setNewCompoundTag("romInternet", fs.save)) - } - - // ----------------------------------------------------------------------- // - private def checkUri(address: String, port: Int): URI = { try { val parsed = new URI(address) @@ -271,13 +263,14 @@ object InternetCard { resolved } } + } def checkLists(inetAddress: InetAddress, host: String) { - if (Settings.get.httpHostWhitelist.length > 0 && !Settings.get.httpHostWhitelist.exists(_(inetAddress, host))) { + if (Settings.get.httpHostWhitelist.length > 0 && !Settings.get.httpHostWhitelist.exists(_ (inetAddress, host))) { throw new FileNotFoundException("address is not whitelisted") } - if (Settings.get.httpHostBlacklist.length > 0 && Settings.get.httpHostBlacklist.exists(_(inetAddress, host))) { + if (Settings.get.httpHostBlacklist.length > 0 && Settings.get.httpHostBlacklist.exists(_ (inetAddress, host))) { throw new FileNotFoundException("address is blacklisted") } } diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala b/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala index 1ec4abd90..ef69e0f47 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala @@ -1,14 +1,12 @@ package li.cil.oc.server.component -import li.cil.oc.OpenComputers import li.cil.oc.Settings -import li.cil.oc.api import li.cil.oc.api.Network -import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.api.internal import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context +import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.api.network._ import li.cil.oc.api.prefab import li.cil.oc.util.ExtendedNBT._ @@ -23,9 +21,6 @@ class UpgradeGenerator(val host: EnvironmentHost with internal.Agent) extends pr withConnector(). create() - val romGenerator = Option(api.FileSystem.asManagedEnvironment(api.FileSystem. - fromClass(OpenComputers.getClass, Settings.resourceDomain, "lua/component/generator"), "generator")) - var inventory: Option[ItemStack] = None var remainingTicks = 0 @@ -94,7 +89,8 @@ class UpgradeGenerator(val host: EnvironmentHost with internal.Agent) extends pr if (remainingTicks <= 0 && inventory.isDefined) { val stack = inventory.get remainingTicks = TileEntityFurnace.getItemBurnTime(stack) - if (remainingTicks > 0) { // If not we probably have a container item now (e.g. bucket after lava bucket). + if (remainingTicks > 0) { + // If not we probably have a container item now (e.g. bucket after lava bucket). updateClient() stack.stackSize -= 1 if (stack.stackSize <= 0) { @@ -121,13 +117,6 @@ class UpgradeGenerator(val host: EnvironmentHost with internal.Agent) extends pr // ----------------------------------------------------------------------- // - override def onConnect(node: Node) { - super.onConnect(node) - if (node.isNeighborOf(this.node)) { - romGenerator.foreach(fs => node.connect(fs.node)) - } - } - override def onDisconnect(node: Node) { super.onDisconnect(node) if (node == this.node) { @@ -142,13 +131,11 @@ class UpgradeGenerator(val host: EnvironmentHost with internal.Agent) extends pr case _ => } remainingTicks = 0 - romGenerator.foreach(_.node.remove()) } } override def load(nbt: NBTTagCompound) { super.load(nbt) - romGenerator.foreach(_.load(nbt.getCompoundTag("romGenerator"))) if (nbt.hasKey("inventory")) { inventory = Option(ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("inventory"))) } @@ -157,7 +144,6 @@ class UpgradeGenerator(val host: EnvironmentHost with internal.Agent) extends pr override def save(nbt: NBTTagCompound) { super.save(nbt) - romGenerator.foreach(fs => nbt.setNewCompoundTag("romGenerator", fs.save)) inventory match { case Some(stack) => nbt.setNewCompoundTag("inventory", stack.writeToNBT) case _ => From 896bfa2728d810e5abfc8a087a177488e43713dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 27 May 2016 13:43:15 +0200 Subject: [PATCH 24/48] Cleanup. --- .../scala/li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/scala/li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala b/src/main/scala/li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala index 90dd4d315..16c61b68e 100644 --- a/src/main/scala/li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala +++ b/src/main/scala/li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala @@ -1,8 +1,6 @@ package li.cil.oc.common.recipe -import li.cil.oc.Constants import li.cil.oc.Settings -import li.cil.oc.api import li.cil.oc.common.Loot import li.cil.oc.integration.util.Wrench import net.minecraft.inventory.InventoryCrafting @@ -11,8 +9,6 @@ import net.minecraft.item.crafting.IRecipe import net.minecraft.world.World class LootDiskCyclingRecipe extends IRecipe { - private final val Floppy = api.Items.get(Constants.ItemName.Floppy) - override def matches(crafting: InventoryCrafting, world: World): Boolean = { val stacks = collectStacks(crafting).toArray stacks.length == 2 && stacks.exists(Loot.isLootDisk) && stacks.exists(Wrench.isWrench) From 4737520b6af0006b5d33d4f493b0f746df1e999b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 27 May 2016 14:34:08 +0200 Subject: [PATCH 25/48] Recipe sorting. --- src/main/scala/li/cil/oc/common/recipe/Recipes.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/scala/li/cil/oc/common/recipe/Recipes.scala b/src/main/scala/li/cil/oc/common/recipe/Recipes.scala index 0db93fe56..33342bb0e 100644 --- a/src/main/scala/li/cil/oc/common/recipe/Recipes.scala +++ b/src/main/scala/li/cil/oc/common/recipe/Recipes.scala @@ -91,6 +91,7 @@ object Recipes { RecipeSorter.register(Settings.namespace + "extshapeless", classOf[ExtendedShapelessOreRecipe], Category.SHAPELESS, "after:forge:shapelessore") RecipeSorter.register(Settings.namespace + "colorizer", classOf[ColorizeRecipe], Category.SHAPELESS, "after:forge:shapelessore") RecipeSorter.register(Settings.namespace + "decolorizer", classOf[DecolorizeRecipe], Category.SHAPELESS, "after:oc:colorizer") + RecipeSorter.register(Settings.namespace + "lootcycler", classOf[LootDiskCyclingRecipe], Category.SHAPELESS, "after:forge:shapelessore") for ((name, stack) <- oreDictEntries) { if (!OreDictionary.getOres(name).contains(stack)) { From ba59e9493f9dd3f953d269491508b38938cc7f9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 27 May 2016 15:07:28 +0200 Subject: [PATCH 26/48] JEI integration for loot disk recrafting (more or less :P). --- .../jei/ModPluginOpenComputers.scala | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/main/scala/li/cil/oc/integration/jei/ModPluginOpenComputers.scala b/src/main/scala/li/cil/oc/integration/jei/ModPluginOpenComputers.scala index 3de037a99..753609ec5 100644 --- a/src/main/scala/li/cil/oc/integration/jei/ModPluginOpenComputers.scala +++ b/src/main/scala/li/cil/oc/integration/jei/ModPluginOpenComputers.scala @@ -1,5 +1,11 @@ package li.cil.oc.integration.jei +import java.util + +import li.cil.oc.Constants +import li.cil.oc.api +import li.cil.oc.common.Loot +import li.cil.oc.common.recipe.LootDiskCyclingRecipe import li.cil.oc.integration.util.ItemBlacklist import mezz.jei.api.IItemRegistry import mezz.jei.api.IJeiHelpers @@ -8,6 +14,14 @@ import mezz.jei.api.IModPlugin import mezz.jei.api.IModRegistry import mezz.jei.api.IRecipeRegistry import mezz.jei.api.JEIPlugin +import mezz.jei.api.recipe.BlankRecipeWrapper +import mezz.jei.api.recipe.IRecipeHandler +import mezz.jei.api.recipe.IRecipeWrapper +import mezz.jei.api.recipe.VanillaRecipeCategoryUid +import mezz.jei.api.recipe.wrapper.ICraftingRecipeWrapper +import net.minecraft.item.ItemStack + +import scala.collection.convert.WrapAsJava._ @JEIPlugin class ModPluginOpenComputers extends IModPlugin { @@ -19,7 +33,7 @@ class ModPluginOpenComputers extends IModPlugin { } override def register(registry: IModRegistry): Unit = { - registry.addRecipeHandlers() + registry.addRecipeHandlers(LootDiskCyclingRecipeHandler) } override def onRecipeRegistryAvailable(recipeRegistry: IRecipeRegistry): Unit = { @@ -27,4 +41,21 @@ class ModPluginOpenComputers extends IModPlugin { override def onRuntimeAvailable(jeiRuntime: IJeiRuntime): Unit = { } + + object LootDiskCyclingRecipeHandler extends IRecipeHandler[LootDiskCyclingRecipe] { + override def getRecipeClass: Class[LootDiskCyclingRecipe] = classOf[LootDiskCyclingRecipe] + + override def getRecipeCategoryUid: String = VanillaRecipeCategoryUid.CRAFTING + + override def getRecipeWrapper(recipe: LootDiskCyclingRecipe): IRecipeWrapper = new LootDiskCyclingRecipeWrapper(recipe) + + override def isRecipeValid(recipe: LootDiskCyclingRecipe): Boolean = true + } + + class LootDiskCyclingRecipeWrapper(val recipe: LootDiskCyclingRecipe) extends BlankRecipeWrapper with ICraftingRecipeWrapper { + override def getInputs: util.List[_] = List(seqAsJavaList(Loot.worldDisks.map(_._1)), api.Items.get(Constants.ItemName.Wrench).createItemStack(1)) + + override def getOutputs: util.List[ItemStack] = Loot.worldDisks.map(_._1).toList + } + } From ae92c73a913e6905d627e6d6ad12acddc03ef30d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 27 May 2016 15:11:57 +0200 Subject: [PATCH 27/48] Why IntelliJ, whyyyy? D: --- src/main/scala/li/cil/oc/common/Loot.scala | 22 +++++++++---------- .../li/cil/oc/common/tileentity/Rack.scala | 18 +++++++-------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/main/scala/li/cil/oc/common/Loot.scala b/src/main/scala/li/cil/oc/common/Loot.scala index e52b072d5..77993557e 100644 --- a/src/main/scala/li/cil/oc/common/Loot.scala +++ b/src/main/scala/li/cil/oc/common/Loot.scala @@ -11,17 +11,17 @@ import li.cil.oc.api import li.cil.oc.api.fs.FileSystem import li.cil.oc.common.init.Items import li.cil.oc.util.Color -import _root_.net.minecraft.inventory.IInventory -import _root_.net.minecraft.item.EnumDyeColor -import _root_.net.minecraft.item.ItemStack -import _root_.net.minecraft.nbt.NBTTagCompound -import _root_.net.minecraft.util.WeightedRandomChestContent -import _root_.net.minecraftforge.common.ChestGenHooks -import _root_.net.minecraftforge.common.DimensionManager -import _root_.net.minecraftforge.common.util.Constants.NBT -import _root_.net.minecraftforge.event.world.WorldEvent -import _root_.net.minecraftforge.fml.common.Loader -import _root_.net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import net.minecraft.inventory.IInventory +import net.minecraft.item.EnumDyeColor +import net.minecraft.item.ItemStack +import net.minecraft.nbt.NBTTagCompound +import net.minecraft.util.WeightedRandomChestContent +import net.minecraftforge.common.ChestGenHooks +import net.minecraftforge.common.DimensionManager +import net.minecraftforge.common.util.Constants.NBT +import net.minecraftforge.event.world.WorldEvent +import net.minecraftforge.fml.common.Loader +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import scala.collection.convert.WrapAsScala._ import scala.collection.mutable diff --git a/src/main/scala/li/cil/oc/common/tileentity/Rack.scala b/src/main/scala/li/cil/oc/common/tileentity/Rack.scala index a69ecafc4..0097dbcb0 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Rack.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Rack.scala @@ -19,15 +19,15 @@ import li.cil.oc.integration.opencomputers.DriverRedstoneCard import li.cil.oc.server.{PacketSender => ServerPacketSender} import li.cil.oc.util.ExtendedInventory._ import li.cil.oc.util.ExtendedNBT._ -import _root_.net.minecraft.entity.player.EntityPlayer -import _root_.net.minecraft.inventory.IInventory -import _root_.net.minecraft.item.ItemStack -import _root_.net.minecraft.nbt.NBTTagCompound -import _root_.net.minecraft.nbt.NBTTagIntArray -import _root_.net.minecraft.util.EnumFacing -import _root_.net.minecraftforge.common.util.Constants.NBT -import _root_.net.minecraftforge.fml.relauncher.Side -import _root_.net.minecraftforge.fml.relauncher.SideOnly +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.inventory.IInventory +import net.minecraft.item.ItemStack +import net.minecraft.nbt.NBTTagCompound +import net.minecraft.nbt.NBTTagIntArray +import net.minecraft.util.EnumFacing +import net.minecraftforge.common.util.Constants.NBT +import net.minecraftforge.fml.relauncher.Side +import net.minecraftforge.fml.relauncher.SideOnly class Rack extends traits.PowerAcceptor with traits.Hub with traits.PowerBalancer with traits.ComponentInventory with traits.Rotatable with traits.BundledRedstoneAware with Analyzable with internal.Rack with traits.StateAware { var isRelayEnabled = true From 030ebb518d8cc5009a96af06ff25f65b0339e6a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 27 May 2016 15:27:14 +0200 Subject: [PATCH 28/48] This is way more weird than I thought... --- .../li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/scala/li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala b/src/main/scala/li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala index ebd9d907e..f87e3edcb 100644 --- a/src/main/scala/li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala +++ b/src/main/scala/li/cil/oc/common/recipe/LootDiskCyclingRecipe.scala @@ -37,8 +37,10 @@ class LootDiskCyclingRecipe extends IRecipe { override def getRemainingItems(crafting: InventoryCrafting): Array[ItemStack] = { val result = new Array[ItemStack](crafting.getSizeInventory) for (slot <- 0 until crafting.getSizeInventory) { - if (Wrench.isWrench(crafting.getStackInSlot(slot))) { - result(slot) = crafting.getStackInSlot(slot) + val stack = crafting.getStackInSlot(slot) + if (Wrench.isWrench(stack)) { + result(slot) = stack.copy() + stack.stackSize = 0 } } result From f1c1c064aef914bbcca9bb4a128c53e0c950451c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 27 May 2016 16:14:31 +0200 Subject: [PATCH 29/48] What do you mean, access to client classes on a server? :P --- .../cil/oc/integration/mcmp/MCMultiPart.scala | 24 ++++------------- .../integration/mcmp/MCMultiPartClient.scala | 27 +++++++++++++++++++ 2 files changed, 32 insertions(+), 19 deletions(-) create mode 100644 src/main/scala/li/cil/oc/integration/mcmp/MCMultiPartClient.scala diff --git a/src/main/scala/li/cil/oc/integration/mcmp/MCMultiPart.scala b/src/main/scala/li/cil/oc/integration/mcmp/MCMultiPart.scala index 00ee92361..613e3e34b 100644 --- a/src/main/scala/li/cil/oc/integration/mcmp/MCMultiPart.scala +++ b/src/main/scala/li/cil/oc/integration/mcmp/MCMultiPart.scala @@ -3,16 +3,11 @@ package li.cil.oc.integration.mcmp import li.cil.oc.Constants import li.cil.oc.Settings import li.cil.oc.api -import li.cil.oc.client.renderer.block.ModelInitialization import mcmultipart.item.PartPlacementWrapper import mcmultipart.multipart.MultipartRegistry -import net.minecraft.client.resources.model.IBakedModel import net.minecraft.client.resources.model.ModelResourceLocation -import net.minecraft.util.RegistrySimple -import net.minecraftforge.client.event.ModelBakeEvent -import net.minecraftforge.common.MinecraftForge -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import net.minecraftforge.fml.common.eventhandler.EventPriority +import net.minecraftforge.fml.common.FMLCommonHandler +import net.minecraftforge.fml.relauncher.Side object MCMultiPart { final val CableMultipartLocation = new ModelResourceLocation(Settings.resourceDomain + ":" + Constants.BlockName.Cable, "multipart") @@ -28,17 +23,8 @@ object MCMultiPart { new PartPlacementWrapper(api.Items.get(Constants.BlockName.Cable).createItemStack(1), PartFactory).register(PartFactory.PartTypeCable) new PartPlacementWrapper(api.Items.get(Constants.BlockName.Print).createItemStack(1), PartFactory).register(PartFactory.PartTypePrint) - MinecraftForge.EVENT_BUS.register(this) - } - - @SubscribeEvent(priority = EventPriority.LOW) - def onModelBake(e: ModelBakeEvent): Unit = { - val registry = e.modelRegistry.asInstanceOf[RegistrySimple[ModelResourceLocation, IBakedModel]] - - // Replace default cable model with part model to properly handle connection - // rendering to multipart cables. - registry.putObject(ModelInitialization.CableBlockLocation, PartCableModel) - registry.putObject(CableMultipartLocation, PartCableModel) - registry.putObject(PrintMultipartLocation, PartPrintModel) + if (FMLCommonHandler.instance.getSide == Side.CLIENT) { + MCMultiPartClient.init() + } } } diff --git a/src/main/scala/li/cil/oc/integration/mcmp/MCMultiPartClient.scala b/src/main/scala/li/cil/oc/integration/mcmp/MCMultiPartClient.scala new file mode 100644 index 000000000..33bd2b40f --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/mcmp/MCMultiPartClient.scala @@ -0,0 +1,27 @@ +package li.cil.oc.integration.mcmp + +import li.cil.oc.client.renderer.block.ModelInitialization +import net.minecraft.client.resources.model.IBakedModel +import net.minecraft.client.resources.model.ModelResourceLocation +import net.minecraft.util.RegistrySimple +import net.minecraftforge.client.event.ModelBakeEvent +import net.minecraftforge.common.MinecraftForge +import net.minecraftforge.fml.common.eventhandler.EventPriority +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +object MCMultiPartClient { + def init(): Unit = { + MinecraftForge.EVENT_BUS.register(this) + } + + @SubscribeEvent(priority = EventPriority.LOW) + def onModelBake(e: ModelBakeEvent): Unit = { + val registry = e.modelRegistry.asInstanceOf[RegistrySimple[ModelResourceLocation, IBakedModel]] + + // Replace default cable model with part model to properly handle connection + // rendering to multipart cables. + registry.putObject(ModelInitialization.CableBlockLocation, PartCableModel) + registry.putObject(MCMultiPart.CableMultipartLocation, PartCableModel) + registry.putObject(MCMultiPart.PrintMultipartLocation, PartPrintModel) + } +} From 632f5b7ddb65219721a5d3bde93bd8617587f3ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 27 May 2016 16:45:56 +0200 Subject: [PATCH 30/48] Underp ticking. --- src/main/scala/li/cil/oc/common/tileentity/Case.scala | 1 - .../scala/li/cil/oc/common/tileentity/PowerConverter.scala | 5 ----- src/main/scala/li/cil/oc/common/tileentity/Redstone.scala | 4 ---- .../scala/li/cil/oc/common/tileentity/traits/Tickable.scala | 4 +--- 4 files changed, 1 insertion(+), 13 deletions(-) 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 e75e449c4..615f3a9af 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Case.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Case.scala @@ -33,7 +33,6 @@ class Case(var tier: Int) extends traits.PowerAcceptor with traits.Computer with override def energyThroughput = Settings.get.caseRate(tier) - def isCreative = tier == Tier.Four // ----------------------------------------------------------------------- // diff --git a/src/main/scala/li/cil/oc/common/tileentity/PowerConverter.scala b/src/main/scala/li/cil/oc/common/tileentity/PowerConverter.scala index 0b0e9d4f3..bdd795b49 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/PowerConverter.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/PowerConverter.scala @@ -18,9 +18,4 @@ class PowerConverter extends traits.PowerAcceptor with traits.Environment with t override protected def connector(side: EnumFacing) = Option(node) override def energyThroughput = Settings.get.powerConverterRate - - override def updateEntity(): Unit = { - super[PowerAcceptor].updateEntity() - super[Environment].updateEntity() - } } diff --git a/src/main/scala/li/cil/oc/common/tileentity/Redstone.scala b/src/main/scala/li/cil/oc/common/tileentity/Redstone.scala index 8da8265ef..aae0cb7b5 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Redstone.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Redstone.scala @@ -26,10 +26,6 @@ class Redstone extends traits.Environment with traits.BundledRedstoneAware with // ----------------------------------------------------------------------- // - override def updateEntity(): Unit = { - super[Environment].updateEntity() - } - override def readFromNBTForServer(nbt: NBTTagCompound) { super.readFromNBTForServer(nbt) instance.load(nbt.getCompoundTag(Settings.namespace + "redstone")) diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/Tickable.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/Tickable.scala index 5f70403f3..9632cb67e 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/Tickable.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/Tickable.scala @@ -2,8 +2,6 @@ package li.cil.oc.common.tileentity.traits import net.minecraft.util.ITickable -trait Tickable extends ITickable { +trait Tickable extends TileEntity with ITickable { override def update(): Unit = updateEntity() - - def updateEntity(): Unit = {} } From 5964911a804778f6ccea3f6117931c2fbfc3faf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 27 May 2016 16:51:06 +0200 Subject: [PATCH 31/48] Allow disabling loot disk cycling via config as per special request :P --- src/main/resources/application.conf | 3 +++ src/main/scala/li/cil/oc/Settings.scala | 1 + src/main/scala/li/cil/oc/common/recipe/Recipes.scala | 4 +++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/resources/application.conf b/src/main/resources/application.conf index a662f9621..070d6949f 100644 --- a/src/main/resources/application.conf +++ b/src/main/resources/application.conf @@ -1248,6 +1248,9 @@ opencomputers { # is decided in an extra roll of the dice. lootProbability: 5 + # Whether to allow loot disk cycling by crafting them with a wrench. + lootRecrafting: true + # The range, in blocks, in which the Geolyzer can scan blocks. Note that # it uses the maximum-distance, not the euclidean one, i.e. it can scan # in a cube surrounding it with twice this value as its edge length. diff --git a/src/main/scala/li/cil/oc/Settings.scala b/src/main/scala/li/cil/oc/Settings.scala index 8eb7f165d..801a3bb0d 100644 --- a/src/main/scala/li/cil/oc/Settings.scala +++ b/src/main/scala/li/cil/oc/Settings.scala @@ -329,6 +329,7 @@ class Settings(val config: Config) { val terminalsPerServer = 4 val updateCheck = config.getBoolean("misc.updateCheck") val lootProbability = config.getInt("misc.lootProbability") + val lootRecrafting = config.getBoolean("misc.lootRecrafting") val geolyzerRange = config.getInt("misc.geolyzerRange") val geolyzerNoise = config.getDouble("misc.geolyzerNoise").toFloat max 0 val disassembleAllTheThings = config.getBoolean("misc.disassembleAllTheThings") diff --git a/src/main/scala/li/cil/oc/common/recipe/Recipes.scala b/src/main/scala/li/cil/oc/common/recipe/Recipes.scala index 33342bb0e..6994d3d53 100644 --- a/src/main/scala/li/cil/oc/common/recipe/Recipes.scala +++ b/src/main/scala/li/cil/oc/common/recipe/Recipes.scala @@ -339,7 +339,9 @@ object Recipes { GameRegistry.addRecipe(new DecolorizeRecipe(cable.block())) // Loot disk cycling. - GameRegistry.addRecipe(new LootDiskCyclingRecipe()) + if (Settings.get.lootRecrafting) { + GameRegistry.addRecipe(new LootDiskCyclingRecipe()) + } } catch { case e: Throwable => OpenComputers.log.error("Error parsing recipes, you may not be able to craft any items from this mod!", e) From 080240846efc5c7a1e02f81438372e5de2ae3a5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 27 May 2016 16:52:55 +0200 Subject: [PATCH 32/48] Also disable JEI recipe handler when loot cycling is disabled. --- .../li/cil/oc/integration/jei/ModPluginOpenComputers.scala | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/scala/li/cil/oc/integration/jei/ModPluginOpenComputers.scala b/src/main/scala/li/cil/oc/integration/jei/ModPluginOpenComputers.scala index 753609ec5..6201ac40f 100644 --- a/src/main/scala/li/cil/oc/integration/jei/ModPluginOpenComputers.scala +++ b/src/main/scala/li/cil/oc/integration/jei/ModPluginOpenComputers.scala @@ -3,6 +3,7 @@ package li.cil.oc.integration.jei import java.util import li.cil.oc.Constants +import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.common.Loot import li.cil.oc.common.recipe.LootDiskCyclingRecipe @@ -33,7 +34,9 @@ class ModPluginOpenComputers extends IModPlugin { } override def register(registry: IModRegistry): Unit = { - registry.addRecipeHandlers(LootDiskCyclingRecipeHandler) + if (Settings.get.lootRecrafting) { + registry.addRecipeHandlers(LootDiskCyclingRecipeHandler) + } } override def onRecipeRegistryAvailable(recipeRegistry: IRecipeRegistry): Unit = { From 3a99e30f40e4df83d1e153186f8f8043c0978fd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 27 May 2016 18:00:24 +0200 Subject: [PATCH 33/48] Fix tile entity renderers turning other stuff transparent (yay no push/popAttrib .-.) --- .../oc/client/renderer/HighlightRenderer.scala | 1 + .../renderer/font/TextureFontRenderer.scala | 1 + .../renderer/tileentity/AssemblerRenderer.scala | 1 + .../client/renderer/tileentity/CaseRenderer.scala | 2 ++ .../renderer/tileentity/ChargerRenderer.scala | 1 + .../tileentity/DisassemblerRenderer.scala | 1 + .../renderer/tileentity/DiskDriveRenderer.scala | 1 + .../renderer/tileentity/GeolyzerRenderer.scala | 1 + .../renderer/tileentity/HologramRenderer.scala | 2 ++ .../tileentity/MicrocontrollerRenderer.scala | 1 + .../renderer/tileentity/NetSplitterRenderer.scala | 1 + .../tileentity/PowerDistributorRenderer.scala | 1 + .../renderer/tileentity/PrinterRenderer.scala | 4 ---- .../client/renderer/tileentity/RaidRenderer.scala | 1 + .../renderer/tileentity/RobotRenderer.scala | 2 +- .../renderer/tileentity/ScreenRenderer.scala | 1 + .../renderer/tileentity/SwitchRenderer.scala | 1 + .../renderer/tileentity/TransposerRenderer.scala | 1 + .../common/event/RackMountableRenderHandler.scala | 3 +++ src/main/scala/li/cil/oc/util/RenderState.scala | 15 +++++++++++++-- 20 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/main/scala/li/cil/oc/client/renderer/HighlightRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/HighlightRenderer.scala index 5c2931f7f..259742520 100644 --- a/src/main/scala/li/cil/oc/client/renderer/HighlightRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/HighlightRenderer.scala @@ -102,6 +102,7 @@ object HighlightRenderer { } t.draw() + RenderState.disableBlend() RenderState.popAttrib() GlStateManager.popMatrix() } diff --git a/src/main/scala/li/cil/oc/client/renderer/font/TextureFontRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/font/TextureFontRenderer.scala index b4a6e97b7..5ed2c4b48 100644 --- a/src/main/scala/li/cil/oc/client/renderer/font/TextureFontRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/font/TextureFontRenderer.scala @@ -112,6 +112,7 @@ abstract class TextureFontRenderer { GlStateManager.bindTexture(0) GlStateManager.depthMask(true) GlStateManager.color(1, 1, 1) + RenderState.disableBlend() RenderState.popAttrib() GlStateManager.popMatrix() diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/AssemblerRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/AssemblerRenderer.scala index 6dc76ee7f..b49866a0d 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/AssemblerRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/AssemblerRenderer.scala @@ -65,6 +65,7 @@ object AssemblerRenderer extends TileEntitySpecialRenderer[Assembler] { GlStateManager.rotate(90, 0, 1, 0) } + RenderState.disableBlend() RenderState.enableEntityLighting() GlStateManager.popMatrix() diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/CaseRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/CaseRenderer.scala index fe7c1e739..23bb968b6 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/CaseRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/CaseRenderer.scala @@ -4,6 +4,7 @@ import li.cil.oc.client.Textures import li.cil.oc.common.tileentity.Case import li.cil.oc.util.RenderState import net.minecraft.client.renderer.GlStateManager +import net.minecraft.client.renderer.RenderHelper import net.minecraft.client.renderer.Tessellator import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer import net.minecraft.client.renderer.vertex.DefaultVertexFormats @@ -45,6 +46,7 @@ object CaseRenderer extends TileEntitySpecialRenderer[Case] { renderFrontOverlay(Textures.Block.CaseFrontError) } + RenderState.disableBlend() RenderState.enableEntityLighting() GlStateManager.popMatrix() diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/ChargerRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/ChargerRenderer.scala index cb5908c99..7a68ec85e 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/ChargerRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/ChargerRenderer.scala @@ -72,6 +72,7 @@ object ChargerRenderer extends TileEntitySpecialRenderer[Charger] { t.draw() + RenderState.disableBlend() RenderState.enableEntityLighting() GlStateManager.popMatrix() diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/DisassemblerRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/DisassemblerRenderer.scala index 76bb2c44a..f7f044b19 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/DisassemblerRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/DisassemblerRenderer.scala @@ -64,6 +64,7 @@ object DisassemblerRenderer extends TileEntitySpecialRenderer[tileentity.Disasse t.draw() + RenderState.disableBlend() RenderState.enableEntityLighting() GlStateManager.popMatrix() diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/DiskDriveRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/DiskDriveRenderer.scala index daa18d581..785137b4e 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/DiskDriveRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/DiskDriveRenderer.scala @@ -73,6 +73,7 @@ object DiskDriveRenderer extends TileEntitySpecialRenderer[DiskDrive] { t.draw() + RenderState.disableBlend() RenderState.enableEntityLighting() } diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/GeolyzerRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/GeolyzerRenderer.scala index 583ab5323..cd148d708 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/GeolyzerRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/GeolyzerRenderer.scala @@ -40,6 +40,7 @@ object GeolyzerRenderer extends TileEntitySpecialRenderer[Geolyzer] { t.draw() + RenderState.disableBlend() RenderState.enableEntityLighting() GlStateManager.popMatrix() diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/HologramRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/HologramRenderer.scala index 263e663d4..b69825c13 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/HologramRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/HologramRenderer.scala @@ -151,6 +151,8 @@ object HologramRenderer extends TileEntitySpecialRenderer[Hologram] with Callabl GlStateManager.depthFunc(GL11.GL_LEQUAL) GlStateManager.popMatrix() + + RenderState.disableBlend() RenderState.popAttrib() GL11.glPopClientAttrib() diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/MicrocontrollerRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/MicrocontrollerRenderer.scala index aa2315947..23bd2354c 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/MicrocontrollerRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/MicrocontrollerRenderer.scala @@ -54,6 +54,7 @@ object MicrocontrollerRenderer extends TileEntitySpecialRenderer[Microcontroller t.draw() + RenderState.disableBlend() RenderState.enableEntityLighting() GlStateManager.popMatrix() diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/NetSplitterRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/NetSplitterRenderer.scala index 2a6a6d30b..7dc54cca4 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/NetSplitterRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/NetSplitterRenderer.scala @@ -80,6 +80,7 @@ object NetSplitterRenderer extends TileEntitySpecialRenderer[tileentity.NetSplit t.draw() + RenderState.disableBlend() RenderState.enableEntityLighting() GlStateManager.popMatrix() diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/PowerDistributorRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/PowerDistributorRenderer.scala index 57f1d7fe7..cd6b3bf77 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/PowerDistributorRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/PowerDistributorRenderer.scala @@ -65,6 +65,7 @@ object PowerDistributorRenderer extends TileEntitySpecialRenderer[tileentity.Pow t.draw() + RenderState.disableBlend() RenderState.enableEntityLighting() GlStateManager.popMatrix() diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/PrinterRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/PrinterRenderer.scala index 66c1c2c22..427337e21 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/PrinterRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/PrinterRenderer.scala @@ -25,16 +25,12 @@ object PrinterRenderer extends TileEntitySpecialRenderer[Printer] { GlStateManager.rotate((System.currentTimeMillis() % 20000) / 20000f * 360, 0, 1, 0) GlStateManager.scale(0.75, 0.75, 0.75) - RenderHelper.enableStandardItemLighting() - val brightness = printer.world.getCombinedLight(printer.getPos, 0) OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, brightness % 65536, brightness / 65536) Textures.Block.bind() Minecraft.getMinecraft.getRenderItem.renderItem(stack, ItemCameraTransforms.TransformType.FIXED) - RenderHelper.disableStandardItemLighting() - GlStateManager.popMatrix() RenderState.popAttrib() } diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/RaidRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/RaidRenderer.scala index e0a572515..ad441e11b 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/RaidRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/RaidRenderer.scala @@ -62,6 +62,7 @@ object RaidRenderer extends TileEntitySpecialRenderer[Raid] { t.draw() + RenderState.disableBlend() RenderState.enableEntityLighting() GlStateManager.popMatrix() diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala index 2b455159a..3f15bf4ea 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala @@ -489,7 +489,7 @@ object RobotRenderer extends TileEntitySpecialRenderer[tileentity.RobotProxy] { GlStateManager.depthMask(true) GlStateManager.enableLighting() - GlStateManager.disableBlend() + RenderState.disableBlend() GlStateManager.popMatrix() } diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala index 573fdada2..1c2965194 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala @@ -89,6 +89,7 @@ object ScreenRenderer extends TileEntitySpecialRenderer[Screen] { draw() } + RenderState.disableBlend() RenderState.enableEntityLighting() GlStateManager.color(1, 1, 1, 1) // #1648 diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/SwitchRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/SwitchRenderer.scala index db3b18352..eb3f68b10 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/SwitchRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/SwitchRenderer.scala @@ -56,6 +56,7 @@ class SwitchRenderer[T <: tileentity.traits.SwitchLike] extends TileEntitySpecia t.draw() + RenderState.disableBlend() RenderState.enableEntityLighting() GlStateManager.popMatrix() diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/TransposerRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/TransposerRenderer.scala index 5bc8367ca..c9e738d0e 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/TransposerRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/TransposerRenderer.scala @@ -66,6 +66,7 @@ object TransposerRenderer extends TileEntitySpecialRenderer[tileentity.Transpose t.draw() + RenderState.disableBlend() RenderState.enableEntityLighting() GlStateManager.popMatrix() diff --git a/src/main/scala/li/cil/oc/common/event/RackMountableRenderHandler.scala b/src/main/scala/li/cil/oc/common/event/RackMountableRenderHandler.scala index 42c20339c..e2e4b4527 100644 --- a/src/main/scala/li/cil/oc/common/event/RackMountableRenderHandler.scala +++ b/src/main/scala/li/cil/oc/common/event/RackMountableRenderHandler.scala @@ -61,6 +61,7 @@ object RackMountableRenderHandler { e.renderOverlayFromAtlas(Textures.Block.RackDiskDriveActivity) + RenderState.disableBlend() RenderState.enableEntityLighting() } } @@ -82,6 +83,7 @@ object RackMountableRenderHandler { e.renderOverlayFromAtlas(Textures.Block.RackServerNetworkActivity) } + RenderState.disableBlend() RenderState.enableEntityLighting() } else if (e.data != null && TerminalServer == api.Items.get(e.rack.getStackInSlot(e.mountable))) { @@ -98,6 +100,7 @@ object RackMountableRenderHandler { e.renderOverlayFromAtlas(Textures.Block.RackTerminalServerPresence, u0, u1) } + RenderState.disableBlend() RenderState.enableEntityLighting() } } diff --git a/src/main/scala/li/cil/oc/util/RenderState.scala b/src/main/scala/li/cil/oc/util/RenderState.scala index f32ddca8e..5eb36f76e 100644 --- a/src/main/scala/li/cil/oc/util/RenderState.scala +++ b/src/main/scala/li/cil/oc/util/RenderState.scala @@ -47,12 +47,18 @@ object RenderState { def disableEntityLighting() { Minecraft.getMinecraft.entityRenderer.disableLightmap() - RenderHelper.disableStandardItemLighting() + GlStateManager.disableLighting() + GlStateManager.disableLight(0) + GlStateManager.disableLight(1) + GlStateManager.disableColorMaterial() } def enableEntityLighting() { Minecraft.getMinecraft.entityRenderer.enableLightmap() - RenderHelper.enableStandardItemLighting() + GlStateManager.enableLighting() + GlStateManager.enableLight(0) + GlStateManager.enableLight(1) + GlStateManager.enableColorMaterial() } def makeItBlend() { @@ -61,6 +67,11 @@ object RenderState { GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA) } + def disableBlend() { + GlStateManager.disableBlend() + GL11.glDisable(GL11.GL_BLEND) + } + def setBlendAlpha(alpha: Float) = { GlStateManager.color(1, 1, 1, alpha) GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE) From 7ab37217b09bd11eed4b3934e6bfd2d13b11d34f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 27 May 2016 23:37:05 +0200 Subject: [PATCH 34/48] Well that certainly was a fascinating derp to track down. --- .../cil/oc/common/component/TextBuffer.scala | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/main/scala/li/cil/oc/common/component/TextBuffer.scala b/src/main/scala/li/cil/oc/common/component/TextBuffer.scala index e3fd0038c..c918ae8f7 100644 --- a/src/main/scala/li/cil/oc/common/component/TextBuffer.scala +++ b/src/main/scala/li/cil/oc/common/component/TextBuffer.scala @@ -113,16 +113,21 @@ class TextBuffer(val host: EnvironmentHost) extends prefab.ManagedEnvironment wi // origin. val w = getViewportWidth val h = getViewportHeight - relativeLitArea = (data.buffer, data.color).zipped.foldLeft(0) { - case (acc, (line, colors)) => acc + (line, colors).zipped.foldLeft(0) { - case (acc2, (char, color)) => - val bg = PackedColor.unpackBackground(color, data.format) - val fg = PackedColor.unpackForeground(color, data.format) - acc2 + (if (char == ' ') if (bg == 0) 0 else 1 - else if (char == 0x2588) if (fg == 0) 0 else 1 - else if (fg == 0 && bg == 0) 0 else 1) + var acc = 0f + for (y <- 0 until h) { + val line = data.buffer(y) + val colors = data.color(y) + for (x <- 0 until w) { + val char = line(x) + val color = colors(x) + val bg = PackedColor.unpackBackground(color, data.format) + val fg = PackedColor.unpackForeground(color, data.format) + acc += (if (char == ' ') if (bg == 0) 0 else 1 + else if (char == 0x2588) if (fg == 0) 0 else 1 + else if (fg == 0 && bg == 0) 0 else 1) } - } / (w * h).toDouble + } + relativeLitArea = acc / (w * h).toDouble } if (node != null) { val hadPower = hasPower From 027b0c20695eb12b59689b720d7447b790b3a39b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 27 May 2016 23:52:27 +0200 Subject: [PATCH 35/48] Fixed rotatables not getting their onRotationChanged notification when using block state based rotation. Closes #1826. --- .../scala/li/cil/oc/common/tileentity/traits/Rotatable.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/Rotatable.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/Rotatable.scala index b887ce3e2..233a0f991 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/Rotatable.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/Rotatable.scala @@ -122,6 +122,7 @@ trait Rotatable extends RotationAware with internal.Rotatable { def setState(newState: IBlockState): Boolean = { if (oldState.hashCode() != newState.hashCode()) { world.setBlockState(getPos, newState) + updateTranslation() true } else false From 7524e6877eba5c05597543e937dc4f1f714a2c5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sat, 28 May 2016 11:59:49 +0200 Subject: [PATCH 36/48] Hopefully fixes color of rendered text bleeding into other tile entity renderers. --- .../oc/api/prefab/TextureTabIconRenderer.java | 3 ++- .../li/cil/oc/client/gui/ImageButton.scala | 4 +-- .../renderer/TextBufferRenderCache.scala | 6 ++++- .../renderer/font/TextureFontRenderer.scala | 15 ++++++----- .../client/renderer/markdown/Document.scala | 2 +- .../markdown/segment/CodeSegment.scala | 4 +-- .../markdown/segment/RenderSegment.scala | 27 ++++++++++--------- .../markdown/segment/TextSegment.scala | 11 ++++---- .../render/ItemStackImageRenderer.scala | 5 ++-- .../segment/render/TextureImageRenderer.scala | 3 ++- .../renderer/tileentity/ScreenRenderer.scala | 1 - 11 files changed, 46 insertions(+), 35 deletions(-) diff --git a/src/main/java/li/cil/oc/api/prefab/TextureTabIconRenderer.java b/src/main/java/li/cil/oc/api/prefab/TextureTabIconRenderer.java index 415a295ed..97d6f6ef3 100644 --- a/src/main/java/li/cil/oc/api/prefab/TextureTabIconRenderer.java +++ b/src/main/java/li/cil/oc/api/prefab/TextureTabIconRenderer.java @@ -2,6 +2,7 @@ package li.cil.oc.api.prefab; import li.cil.oc.api.manual.TabIconRenderer; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.WorldRenderer; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; @@ -25,7 +26,7 @@ public class TextureTabIconRenderer implements TabIconRenderer { @SideOnly(Side.CLIENT) public void render() { Minecraft.getMinecraft().getTextureManager().bindTexture(location); - GL11.glBindTexture(GL11.GL_TEXTURE_2D, Minecraft.getMinecraft().getTextureManager().getTexture(location).getGlTextureId()); + GlStateManager.bindTexture(Minecraft.getMinecraft().getTextureManager().getTexture(location).getGlTextureId()); final Tessellator t = Tessellator.getInstance(); final WorldRenderer r = t.getWorldRenderer(); r.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); diff --git a/src/main/scala/li/cil/oc/client/gui/ImageButton.scala b/src/main/scala/li/cil/oc/client/gui/ImageButton.scala index c80f8e901..e5c573b73 100644 --- a/src/main/scala/li/cil/oc/client/gui/ImageButton.scala +++ b/src/main/scala/li/cil/oc/client/gui/ImageButton.scala @@ -53,7 +53,7 @@ class ImageButton(id: Int, x: Int, y: Int, w: Int, h: Int, r.pos(x0, y0, zLevel).tex(u0, v0).endVertex() } else if (isHovered) { - GL11.glColor4f(1, 1, 1, 0.8f) + GlStateManager.color(1, 1, 1, 0.8f) r.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION) r.pos(x0, y1, zLevel).endVertex() @@ -62,7 +62,7 @@ class ImageButton(id: Int, x: Int, y: Int, w: Int, h: Int, r.pos(x0, y0, zLevel).endVertex() } else { - GL11.glColor4f(1, 1, 1, 0.4f) + GlStateManager.color(1, 1, 1, 0.4f) r.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION) r.pos(x0, y1, zLevel).endVertex() diff --git a/src/main/scala/li/cil/oc/client/renderer/TextBufferRenderCache.scala b/src/main/scala/li/cil/oc/client/renderer/TextBufferRenderCache.scala index 571d04f37..fa2120688 100644 --- a/src/main/scala/li/cil/oc/client/renderer/TextBufferRenderCache.scala +++ b/src/main/scala/li/cil/oc/client/renderer/TextBufferRenderCache.scala @@ -71,10 +71,14 @@ object TextBufferRenderCache extends Callable[Int] with RemovalListener[TileEnti } else { GL11.glCallList(list) - RenderState.bindTexture(0) GlStateManager.depthMask(true) GlStateManager.color(1, 1, 1) + // Because display lists and the GlStateManager don't like each other, apparently. + RenderState.bindTexture(0) + GL11.glDepthMask(true) + GL11.glColor4f(1, 1, 1, 1) + RenderState.checkError(getClass.getName + ".compileOrDraw: glCallList") } } diff --git a/src/main/scala/li/cil/oc/client/renderer/font/TextureFontRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/font/TextureFontRenderer.scala index 5ed2c4b48..0104ae4d2 100644 --- a/src/main/scala/li/cil/oc/client/renderer/font/TextureFontRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/font/TextureFontRenderer.scala @@ -26,7 +26,7 @@ abstract class TextureFontRenderer { * be generated inside the draw call. */ def generateChars(chars: Array[Char]) { - GL11.glEnable(GL11.GL_TEXTURE_2D) + GlStateManager.enableTexture2D() for (char <- chars) { generateChar(char) } @@ -92,10 +92,10 @@ abstract class TextureFontRenderer { // Check if color changed. if (col != cfg) { cfg = col - GL11.glColor3ub( - ((cfg & 0xFF0000) >> 16).toByte, - ((cfg & 0x00FF00) >> 8).toByte, - ((cfg & 0x0000FF) >> 0).toByte) + GlStateManager.color( + ((cfg & 0xFF0000) >> 16) / 255f, + ((cfg & 0x00FF00) >> 8) / 255f, + ((cfg & 0x0000FF) >> 0) / 255f) } // Don't render whitespace. if (ch != ' ') { @@ -164,7 +164,10 @@ abstract class TextureFontRenderer { val x1 = (x + width) * charWidth val y0 = y * charHeight val y1 = (y + 1) * charHeight - GL11.glColor3ub(((color >> 16) & 0xFF).toByte, ((color >> 8) & 0xFF).toByte, (color & 0xFF).toByte) + GlStateManager.color( + ((color >> 16) & 0xFF) / 255f, + ((color >> 8) & 0xFF) / 255f, + (color & 0xFF) / 255f) GL11.glVertex3d(x0, y1, 0) GL11.glVertex3d(x1, y1, 0) GL11.glVertex3d(x1, y0, 0) diff --git a/src/main/scala/li/cil/oc/client/renderer/markdown/Document.scala b/src/main/scala/li/cil/oc/client/renderer/markdown/Document.scala index 1f04185d3..82ca004ff 100644 --- a/src/main/scala/li/cil/oc/client/renderer/markdown/Document.scala +++ b/src/main/scala/li/cil/oc/client/renderer/markdown/Document.scala @@ -87,7 +87,7 @@ object Document { GlStateManager.colorMask(false, false, false, false) GlStateManager.pushMatrix() - GL11.glTranslatef(0, 0, 500) + GlStateManager.translate(0, 0, 500) GL11.glBegin(GL11.GL_QUADS) GL11.glVertex2f(0, y) GL11.glVertex2f(mc.displayWidth, y) diff --git a/src/main/scala/li/cil/oc/client/renderer/markdown/segment/CodeSegment.scala b/src/main/scala/li/cil/oc/client/renderer/markdown/segment/CodeSegment.scala index 5356e55e4..692019483 100644 --- a/src/main/scala/li/cil/oc/client/renderer/markdown/segment/CodeSegment.scala +++ b/src/main/scala/li/cil/oc/client/renderer/markdown/segment/CodeSegment.scala @@ -3,7 +3,7 @@ package li.cil.oc.client.renderer.markdown.segment import li.cil.oc.client.renderer.TextBufferRenderCache import li.cil.oc.client.renderer.markdown.MarkupFormat import net.minecraft.client.gui.FontRenderer -import org.lwjgl.opengl.GL11 +import net.minecraft.client.renderer.GlStateManager private[markdown] class CodeSegment(val parent: Segment, val text: String) extends BasicTextSegment { override def render(x: Int, y: Int, indent: Int, maxWidth: Int, renderer: FontRenderer, mouseX: Int, mouseY: Int): Option[InteractiveSegment] = { @@ -16,7 +16,7 @@ private[markdown] class CodeSegment(val parent: Segment, val text: String) exten var numChars = maxChars(chars, maxWidth - indent, maxWidth - wrapIndent, renderer) while (chars.length > 0) { val part = chars.take(numChars) - GL11.glColor4f(0.75f, 0.8f, 1, 1) + GlStateManager.color(0.75f, 0.8f, 1, 1) TextBufferRenderCache.renderer.drawString(part, currentX, currentY) currentX = x + wrapIndent currentY += lineHeight(renderer) diff --git a/src/main/scala/li/cil/oc/client/renderer/markdown/segment/RenderSegment.scala b/src/main/scala/li/cil/oc/client/renderer/markdown/segment/RenderSegment.scala index d635e98d5..4f484c354 100644 --- a/src/main/scala/li/cil/oc/client/renderer/markdown/segment/RenderSegment.scala +++ b/src/main/scala/li/cil/oc/client/renderer/markdown/segment/RenderSegment.scala @@ -5,6 +5,7 @@ import li.cil.oc.api.manual.InteractiveImageRenderer import li.cil.oc.client.renderer.markdown.Document import li.cil.oc.client.renderer.markdown.MarkupFormat import net.minecraft.client.gui.FontRenderer +import net.minecraft.client.renderer.GlStateManager import org.lwjgl.opengl.GL11 private[markdown] class RenderSegment(val parent: Segment, val title: String, val imageRenderer: ImageRenderer) extends InteractiveSegment { @@ -43,34 +44,34 @@ private[markdown] class RenderSegment(val parent: Segment, val title: String, va val hovered = checkHovered(mouseX, mouseY, x + xOffset, y + yOffset, width, height) - GL11.glPushMatrix() - GL11.glTranslatef(x + xOffset, y + yOffset, 0) - GL11.glScalef(s, s, s) + GlStateManager.pushMatrix() + GlStateManager.translate(x + xOffset, y + yOffset, 0) + GlStateManager.scale(s, s, s) - GL11.glEnable(GL11.GL_BLEND) - GL11.glEnable(GL11.GL_ALPHA_TEST) + GlStateManager.enableBlend() + GlStateManager.enableAlpha() if (hovered.isDefined) { - GL11.glColor4f(1, 1, 1, 0.15f) - GL11.glDisable(GL11.GL_TEXTURE_2D) + GlStateManager.color(1, 1, 1, 0.15f) + GlStateManager.disableTexture2D() GL11.glBegin(GL11.GL_QUADS) GL11.glVertex2f(0, 0) GL11.glVertex2f(0, imageRenderer.getHeight) GL11.glVertex2f(imageRenderer.getWidth, imageRenderer.getHeight) GL11.glVertex2f(imageRenderer.getWidth, 0) GL11.glEnd() - GL11.glEnable(GL11.GL_TEXTURE_2D) + GlStateManager.enableTexture2D() } - GL11.glColor4f(1, 1, 1, 1) + GlStateManager.color(1, 1, 1, 1) imageRenderer.render(mouseX - x, mouseY - y) - GL11.glDisable(GL11.GL_BLEND) - GL11.glDisable(GL11.GL_ALPHA_TEST) - GL11.glDisable(GL11.GL_LIGHTING) + GlStateManager.disableBlend() + GlStateManager.disableAlpha() + GlStateManager.disableLighting() - GL11.glPopMatrix() + GlStateManager.popMatrix() hovered } diff --git a/src/main/scala/li/cil/oc/client/renderer/markdown/segment/TextSegment.scala b/src/main/scala/li/cil/oc/client/renderer/markdown/segment/TextSegment.scala index 491c6faad..f89032ba5 100644 --- a/src/main/scala/li/cil/oc/client/renderer/markdown/segment/TextSegment.scala +++ b/src/main/scala/li/cil/oc/client/renderer/markdown/segment/TextSegment.scala @@ -2,6 +2,7 @@ package li.cil.oc.client.renderer.markdown.segment import li.cil.oc.client.renderer.markdown.Document import net.minecraft.client.gui.FontRenderer +import net.minecraft.client.renderer.GlStateManager import org.lwjgl.opengl.GL11 import scala.collection.mutable @@ -19,12 +20,12 @@ private[markdown] class TextSegment(val parent: Segment, val text: String) exten while (chars.length > 0) { val part = chars.take(numChars) hovered = hovered.orElse(resolvedInteractive.fold(None: Option[InteractiveSegment])(_.checkHovered(mouseX, mouseY, currentX, currentY, stringWidth(part, renderer), (Document.lineHeight(renderer) * resolvedScale).toInt))) - GL11.glPushMatrix() - GL11.glTranslatef(currentX, currentY, 0) - GL11.glScalef(resolvedScale, resolvedScale, resolvedScale) - GL11.glTranslatef(-currentX, -currentY, 0) + GlStateManager.pushMatrix() + GlStateManager.translate(currentX, currentY, 0) + GlStateManager.scale(resolvedScale, resolvedScale, resolvedScale) + GlStateManager.translate(-currentX, -currentY, 0) renderer.drawString(resolvedFormat + part, currentX, currentY, resolvedColor) - GL11.glPopMatrix() + GlStateManager.popMatrix() currentX = x + wrapIndent currentY += lineHeight(renderer) chars = chars.drop(numChars).dropWhile(_.isWhitespace) diff --git a/src/main/scala/li/cil/oc/client/renderer/markdown/segment/render/ItemStackImageRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/markdown/segment/render/ItemStackImageRenderer.scala index bb9e7c1ce..277591b0f 100644 --- a/src/main/scala/li/cil/oc/client/renderer/markdown/segment/render/ItemStackImageRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/markdown/segment/render/ItemStackImageRenderer.scala @@ -2,6 +2,7 @@ package li.cil.oc.client.renderer.markdown.segment.render import li.cil.oc.api.manual.ImageRenderer import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.GlStateManager import net.minecraft.client.renderer.OpenGlHelper import net.minecraft.client.renderer.RenderHelper import net.minecraft.item.ItemStack @@ -21,8 +22,8 @@ private[markdown] class ItemStackImageRenderer(val stacks: Array[ItemStack]) ext val index = (System.currentTimeMillis() % (cycleSpeed * stacks.length)).toInt / cycleSpeed val stack = stacks(index) - GL11.glScalef(getWidth / 16, getHeight / 16, getWidth / 16) - GL11.glEnable(GL12.GL_RESCALE_NORMAL) + GlStateManager.scale(getWidth / 16, getHeight / 16, getWidth / 16) + GlStateManager.enableRescaleNormal() RenderHelper.enableGUIStandardItemLighting() OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240) mc.getRenderItem.renderItemAndEffectIntoGUI(stack, 0, 0) diff --git a/src/main/scala/li/cil/oc/client/renderer/markdown/segment/render/TextureImageRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/markdown/segment/render/TextureImageRenderer.scala index e43d3308a..4af762c09 100644 --- a/src/main/scala/li/cil/oc/client/renderer/markdown/segment/render/TextureImageRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/markdown/segment/render/TextureImageRenderer.scala @@ -6,6 +6,7 @@ import javax.imageio.ImageIO import li.cil.oc.api.manual.ImageRenderer import li.cil.oc.client.Textures import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.GlStateManager import net.minecraft.client.renderer.texture.AbstractTexture import net.minecraft.client.renderer.texture.TextureUtil import net.minecraft.client.resources.IResourceManager @@ -33,7 +34,7 @@ class TextureImageRenderer(val location: ResourceLocation) extends ImageRenderer override def render(mouseX: Int, mouseY: Int): Unit = { Textures.bind(location) - GL11.glColor4f(1, 1, 1, 1) + GlStateManager.color(1, 1, 1, 1) GL11.glBegin(GL11.GL_QUADS) GL11.glTexCoord2f(0, 0) GL11.glVertex2f(0, 0) diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala index 1c2965194..547719d98 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala @@ -91,7 +91,6 @@ object ScreenRenderer extends TileEntitySpecialRenderer[Screen] { RenderState.disableBlend() RenderState.enableEntityLighting() - GlStateManager.color(1, 1, 1, 1) // #1648 GlStateManager.popMatrix() RenderState.popAttrib() From ce77d77baf37d8439c13ab4e7153955b31338ecd Mon Sep 17 00:00:00 2001 From: payonel Date: Sat, 28 May 2016 10:19:13 -0700 Subject: [PATCH 37/48] tab complete fix where whitespace after redirection would not be trimmed --- .../opencomputers/loot/openos/lib/sh.lua | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/opencomputers/loot/openos/lib/sh.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/sh.lua index 758613098..5da1ef026 100644 --- a/src/main/resources/assets/opencomputers/loot/openos/lib/sh.lua +++ b/src/main/resources/assets/opencomputers/loot/openos/lib/sh.lua @@ -553,36 +553,55 @@ function --[[@delayloaded-start@]] sh.internal.hintHandlerSplit(line) end --[[@delayloaded-end@]] function --[[@delayloaded-start@]] sh.internal.hintHandlerImpl(full_line, cursor) + -- line: text preceding the cursor: we want to hint this part (expand it) local line = unicode.sub(full_line, 1, cursor - 1) + -- suffix: text following the cursor (if any, else empty string) to append to the hints local suffix = unicode.sub(full_line, cursor) + -- if there is no text to hint, there are no hints if not line or #line < 1 then return {} end + -- hintHandlerSplit helps make the hints work even after delimiters such as ; + -- it also catches parse errors such as unclosed quotes local prev,line = sh.internal.hintHandlerSplit(line) if not prev then -- failed to parse, e.g. unclosed quote, no hints return {} end local result - local prefix, partial = line:match("^(.*[=><])(.*)$") + -- prefix: text (if any) that will not be expanded (such as a command word preceding a file name that we are expanding) + -- partial: text that we want to expand + -- this first match determines if partial comes after redirect symbols such as > + local prefix, partial = line:match("^(.*[=><]%s*)(.*)$") + -- if redirection was not found, partial could just be arguments following a command if not prefix then prefix, partial = line:match("^(.+%s+)(.*)$") end + -- partialPrefix: text of the partial that will not be expanded (i.e. a diretory path ending with /) + -- first, partialPrefix holds the whole text being expanded (we truncate later) local partialPrefix = (partial or line) - local name = partialPrefix:gsub(".*/", "") + -- name: text of the partial file name being expanded + local name = partialPrefix:gsub("^.*/", "") + -- here we remove the name text from the partialPrefix partialPrefix = partialPrefix:sub(1, -unicode.len(name) - 1) + -- if no prefix was found and partialPrefix did not specify a closed directory path then we are expanding the first argument + -- i.e. the command word (a program name) local searchInPath = not prefix and not partialPrefix:find("/") if searchInPath then result = sh.getMatchingPrograms(line) else result = sh.getMatchingFiles(partialPrefix, name) end + -- in very special cases, the suffix should include a blank space to indicate to the user that the hint is discrete local resultSuffix = suffix if #result > 0 and unicode.sub(result[1], -1) ~= "/" and not suffix:sub(1,1):find('%s') and (#result == 1 or searchInPath or not prefix) then resultSuffix = " " .. resultSuffix end + -- prefix no longer needs to refer to just the expanding section of the text + -- here we reintroduce the previous section of the text that hintHandlerSplit cut for us prefix = prev .. (prefix or "") table.sort(result) for i = 1, #result do + -- the hints define the whole line of text result[i] = prefix .. result[i] .. resultSuffix end return result From 533e7443e89593c6a45df655f9af921cbe83e9b3 Mon Sep 17 00:00:00 2001 From: Lizzy Date: Sat, 28 May 2016 19:15:01 +0100 Subject: [PATCH 38/48] link update --- .../assets/opencomputers/loot/openos/usr/misc/greetings.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/opencomputers/loot/openos/usr/misc/greetings.txt b/src/main/resources/assets/opencomputers/loot/openos/usr/misc/greetings.txt index 68d49726b..17467d51d 100644 --- a/src/main/resources/assets/opencomputers/loot/openos/usr/misc/greetings.txt +++ b/src/main/resources/assets/opencomputers/loot/openos/usr/misc/greetings.txt @@ -23,6 +23,6 @@ You can get a list of all attached components using the `components` program. If you encounter out of memory errors, throw more RAM at your computer. Have you tried turning it off and on again? To disable this greeting, install OpenOS to a writeable medium and delete `/etc/motd`. -Did you know OpenComputers has a forum? No? Well, it's at http://oc.cil.li/. +Did you know OpenComputers has a forum? No? Well, it's at https://oc.cil.li/. Please report bugs on the Github issue tracker, thank you! Beware of cycles when building networks, or you may get duplicate messages! From 06792b0d66497ee95a62395da1fe4d2a1477dfb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 29 May 2016 15:39:15 +0200 Subject: [PATCH 39/48] Allow components to expose capabilities. This is completely untested... --- .../traits/ComponentInventory.scala | 24 +++++++++++++++++++ .../li/cil/oc/server/component/Server.scala | 16 ++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/ComponentInventory.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/ComponentInventory.scala index 02e118244..e4fa049bc 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/ComponentInventory.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/ComponentInventory.scala @@ -8,6 +8,9 @@ import li.cil.oc.common.inventory import li.cil.oc.util.ExtendedInventory._ import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound +import net.minecraft.util.EnumFacing +import net.minecraftforge.common.capabilities.Capability +import net.minecraftforge.common.capabilities.ICapabilityProvider import net.minecraftforge.fml.relauncher.Side import net.minecraftforge.fml.relauncher.SideOnly @@ -148,6 +151,27 @@ trait ComponentInventory extends Environment with Inventory with inventory.Compo } } + override def hasCapability(capability: Capability[_], facing: EnumFacing): Boolean = { + val localFacing = this match { + case rotatable: Rotatable => rotatable.toLocal(facing) + case _ => facing + } + super.hasCapability(capability, facing) || components.exists { + case Some(component: ICapabilityProvider) => component.hasCapability(capability, localFacing) + case _ => false + } + } + + override def getCapability[T](capability: Capability[T], facing: EnumFacing): T = { + val localFacing = this match { + case rotatable: Rotatable => rotatable.toLocal(facing) + case _ => facing + } + Option(super.getCapability(capability, facing)).orElse(components.collectFirst { + case Some(component: ICapabilityProvider) if component.hasCapability(capability, localFacing) => component.getCapability(capability, localFacing) + }).getOrElse(null.asInstanceOf[T]) + } + override def writeToNBTForClient(nbt: NBTTagCompound) { connectComponents() super.writeToNBTForClient(nbt) diff --git a/src/main/scala/li/cil/oc/server/component/Server.scala b/src/main/scala/li/cil/oc/server/component/Server.scala index 169292532..a93bb58bb 100644 --- a/src/main/scala/li/cil/oc/server/component/Server.scala +++ b/src/main/scala/li/cil/oc/server/component/Server.scala @@ -28,10 +28,12 @@ import net.minecraft.entity.player.EntityPlayer import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound import net.minecraft.util.EnumFacing +import net.minecraftforge.common.capabilities.Capability +import net.minecraftforge.common.capabilities.ICapabilityProvider import scala.collection.convert.WrapAsJava._ -class Server(val rack: api.internal.Rack, val slot: Int) extends Environment with MachineHost with ServerInventory with ComponentInventory with Analyzable with internal.Server { +class Server(val rack: api.internal.Rack, val slot: Int) extends Environment with MachineHost with ServerInventory with ComponentInventory with Analyzable with internal.Server with ICapabilityProvider { lazy val machine = Machine.create(this) val node = if (!rack.world.isRemote) machine.node else null @@ -208,4 +210,16 @@ class Server(val rack: api.internal.Rack, val slot: Int) extends Environment wit // Analyzable override def onAnalyze(player: EntityPlayer, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float) = Array(machine.node) + + // ----------------------------------------------------------------------- // + // ICapabilityProvider + + override def hasCapability(capability: Capability[_], facing: EnumFacing): Boolean = components.exists { + case Some(component: ICapabilityProvider) => component.hasCapability(capability, host.toLocal(facing)) + case _ => false + } + + override def getCapability[T](capability: Capability[T], facing: EnumFacing): T = components.collectFirst { + case Some(component: ICapabilityProvider) if component.hasCapability(capability, host.toLocal(facing)) => component.getCapability[T](capability, host.toLocal(facing)) + }.getOrElse(null.asInstanceOf[T]) } From 9acb5eb26fbcf0ec64ba548d423128f26dbed87f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Mon, 30 May 2016 20:36:37 +0200 Subject: [PATCH 40/48] Should fix tablet disassembly ignoring upgrade container, closes #1838. --- src/main/java/li/cil/oc/api/IMC.java | 10 +++++++++- .../li/cil/oc/common/template/TabletTemplate.scala | 4 ++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/li/cil/oc/api/IMC.java b/src/main/java/li/cil/oc/api/IMC.java index fecc03eef..3e2d7c5a3 100644 --- a/src/main/java/li/cil/oc/api/IMC.java +++ b/src/main/java/li/cil/oc/api/IMC.java @@ -166,9 +166,17 @@ public final class IMC { * Signature of callbacks must be: *
      * boolean select(ItemStack stack)
-     * ItemStack[] disassemble(ItemStack stack, ItemStack[] ingredients)
+     * Object disassemble(ItemStack stack, ItemStack[] ingredients)
      * 
*

+ * Where the Object returned from the disassemble + * method must be one of the following: + *

    + *
  • ItemStack[]: list of resulting items, subject to random failure.
  • + *
  • Object[]{ItemStack[],ItemStack[]}: two lists of resulting items, the first being subject to + * random failure, the second being guaranteed drops (e.g. for item inventory contents).
  • + *
+ *

* Callbacks must be declared as packagePath.className.methodName. * For example: com.example.Integration.callbackMethod. * diff --git a/src/main/scala/li/cil/oc/common/template/TabletTemplate.scala b/src/main/scala/li/cil/oc/common/template/TabletTemplate.scala index 1ab9b3820..457c89c61 100644 --- a/src/main/scala/li/cil/oc/common/template/TabletTemplate.scala +++ b/src/main/scala/li/cil/oc/common/template/TabletTemplate.scala @@ -57,9 +57,9 @@ object TabletTemplate extends Template { def disassemble(stack: ItemStack, ingredients: Array[ItemStack]) = { val info = new TabletData(stack) val itemName = Constants.ItemName.TabletCase(info.tier) - Array(api.Items.get(itemName).createItemStack(1)) ++ info.items.collect { + (Array(api.Items.get(itemName).createItemStack(1), info.container.orNull) ++ info.items.collect { case Some(item) => item - }.drop(1) // Screen. + }.drop(1) /* Screen */).filter(_ != null) } def register() { From aa546dfce53e42f1ad700f7ac7b92bbdad9228a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Mon, 30 May 2016 20:46:53 +0200 Subject: [PATCH 41/48] I think this should work. Closes #1839. --- src/main/scala/li/cil/oc/client/PacketHandler.scala | 6 ++++++ src/main/scala/li/cil/oc/common/PacketType.scala | 1 + .../li/cil/oc/common/nanomachines/NeuralNetwork.scala | 11 ++++++++--- src/main/scala/li/cil/oc/server/PacketSender.scala | 8 ++++++++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/main/scala/li/cil/oc/client/PacketHandler.scala b/src/main/scala/li/cil/oc/client/PacketHandler.scala index 31bf47bfa..ea3ca4563 100644 --- a/src/main/scala/li/cil/oc/client/PacketHandler.scala +++ b/src/main/scala/li/cil/oc/client/PacketHandler.scala @@ -5,6 +5,7 @@ import java.io.EOFException import cpw.mods.fml.common.eventhandler.SubscribeEvent import cpw.mods.fml.common.network.FMLNetworkEvent.ClientCustomPacketEvent import li.cil.oc.Localization +import li.cil.oc.OpenComputers import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.event.FileSystemAccessEvent @@ -43,6 +44,7 @@ object PacketHandler extends CommonPacketHandler { case PacketType.AbstractBusState => onAbstractBusState(p) case PacketType.Analyze => onAnalyze(p) case PacketType.ChargerState => onChargerState(p) + case PacketType.ClientLog => onClientLog(p) case PacketType.ColorChange => onColorChange(p) case PacketType.ComputerState => onComputerState(p) case PacketType.ComputerUserList => onComputerUserList(p) @@ -117,6 +119,10 @@ object PacketHandler extends CommonPacketHandler { case _ => // Invalid packet. } + def onClientLog(p: PacketParser) = { + OpenComputers.log.info(p.readUTF()) + } + def onColorChange(p: PacketParser) = p.readTileEntity[Colored]() match { case Some(t) => diff --git a/src/main/scala/li/cil/oc/common/PacketType.scala b/src/main/scala/li/cil/oc/common/PacketType.scala index 0dd5168a9..807520dea 100644 --- a/src/main/scala/li/cil/oc/common/PacketType.scala +++ b/src/main/scala/li/cil/oc/common/PacketType.scala @@ -6,6 +6,7 @@ object PacketType extends Enumeration { AbstractBusState, Analyze, ChargerState, + ClientLog, ColorChange, ComputerState, ComputerUserList, diff --git a/src/main/scala/li/cil/oc/common/nanomachines/NeuralNetwork.scala b/src/main/scala/li/cil/oc/common/nanomachines/NeuralNetwork.scala index 47f7d6602..cbec0f8eb 100644 --- a/src/main/scala/li/cil/oc/common/nanomachines/NeuralNetwork.scala +++ b/src/main/scala/li/cil/oc/common/nanomachines/NeuralNetwork.scala @@ -6,14 +6,15 @@ import li.cil.oc.api import li.cil.oc.api.Persistable import li.cil.oc.api.nanomachines.Behavior import li.cil.oc.api.nanomachines.BehaviorProvider +import li.cil.oc.server.PacketSender import li.cil.oc.util.ExtendedNBT._ import net.minecraft.entity.player.EntityPlayer +import net.minecraft.entity.player.EntityPlayerMP import net.minecraft.nbt.NBTTagCompound import net.minecraft.util.ChatComponentText import net.minecraft.util.EnumChatFormatting import net.minecraftforge.common.util.Constants.NBT -import scala.StringBuilder import scala.collection.convert.WrapAsScala._ import scala.collection.mutable import scala.util.Random @@ -97,7 +98,11 @@ class NeuralNetwork(controller: ControllerImpl) extends Persistable { // Enter debug configuration, one input -> one behavior, and list mapping in console. def debug(): Unit = { - OpenComputers.log.info(s"Creating debug configuration for nanomachines in player ${controller.player.getDisplayName}.") + val log = controller.player match { + case playerMP: EntityPlayerMP => (s: String) => PacketSender.sendClientLog(s, playerMP) + case _ => (s: String) => OpenComputers.log.info(s) + } + log(s"Creating debug configuration for nanomachines in player ${controller.player.getDisplayName}.") behaviors.clear() behaviors ++= api.Nanomachines.getProviders. @@ -114,7 +119,7 @@ class NeuralNetwork(controller: ControllerImpl) extends Persistable { triggers += trigger behavior.inputs += trigger - OpenComputers.log.info(s"$i -> ${behavior.behavior.getNameHint} (${behavior.behavior.getClass.toString})") + log(s"$i -> ${behavior.behavior.getNameHint} (${behavior.behavior.getClass.toString})") } } diff --git a/src/main/scala/li/cil/oc/server/PacketSender.scala b/src/main/scala/li/cil/oc/server/PacketSender.scala index a8ea39da0..093a75484 100644 --- a/src/main/scala/li/cil/oc/server/PacketSender.scala +++ b/src/main/scala/li/cil/oc/server/PacketSender.scala @@ -50,6 +50,14 @@ object PacketSender { pb.sendToPlayersNearTileEntity(t) } + def sendClientLog(line: String, player: EntityPlayerMP) { + val pb = new CompressedPacketBuilder(PacketType.ClientLog) + + pb.writeUTF(line) + + pb.sendToPlayer(player) + } + def sendColorChange(t: Colored) { val pb = new SimplePacketBuilder(PacketType.ColorChange) From 8531c221060125109559f5468c699a5864ae7021 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sat, 4 Jun 2016 01:46:21 +0200 Subject: [PATCH 42/48] Added DeviceInfo API, allows environments to provide basic information even when they do not expose a component. Made available via `computer.getDeviceInfo()`. Must be implemented on Environments. Queried on environments of nodes reachable / visible (when a component / not) from a machine. Added very *very* basic program for listing device info from shell, `lshw`. --- .../java/li/cil/oc/api/driver/DeviceInfo.java | 39 +++++++++ .../opencomputers/loot/openos/bin/lshw.lua | 42 +++++++++ .../assets/opencomputers/lua/machine.lua | 5 +- src/main/scala/li/cil/oc/Constants.scala | 38 ++++++++ .../oc/common/component/TerminalServer.scala | 19 +++- .../cil/oc/common/component/TextBuffer.scala | 17 +++- .../item/data/NavigationUpgradeData.scala | 5 ++ .../li/cil/oc/common/tileentity/Adapter.scala | 18 +++- .../cil/oc/common/tileentity/Assembler.scala | 17 +++- .../cil/oc/common/tileentity/Capacitor.scala | 20 ++++- .../li/cil/oc/common/tileentity/Case.scala | 23 ++++- .../li/cil/oc/common/tileentity/Charger.scala | 16 +++- .../oc/common/tileentity/Disassembler.scala | 16 +++- .../cil/oc/common/tileentity/DiskDrive.scala | 19 +++- .../cil/oc/common/tileentity/Hologram.scala | 24 +++++- .../common/tileentity/Microcontroller.scala | 17 +++- .../oc/common/tileentity/MotionSensor.scala | 19 +++- .../oc/common/tileentity/PowerConverter.scala | 20 ++++- .../li/cil/oc/common/tileentity/Printer.scala | 17 +++- .../integration/opencomputers/DriverAPU.scala | 6 +- .../integration/opencomputers/DriverCPU.scala | 3 +- .../opencomputers/DriverMemory.scala | 3 +- .../DriverUpgradeTractorBeam.scala | 2 +- .../li/cil/oc/server/component/APU.scala | 24 ++++++ .../li/cil/oc/server/component/CPU.scala | 29 +++++++ .../li/cil/oc/server/component/DataCard.scala | 41 ++++++++- .../server/component/DiskDriveMountable.scala | 21 ++++- .../li/cil/oc/server/component/Drive.scala | 38 +++++--- .../li/cil/oc/server/component/Drone.scala | 20 ++++- .../li/cil/oc/server/component/EEPROM.scala | 25 +++++- .../cil/oc/server/component/FileSystem.scala | 32 +++++-- .../li/cil/oc/server/component/Geolyzer.scala | 20 ++++- .../oc/server/component/GraphicsCard.scala | 46 +++++++--- .../oc/server/component/InternetCard.scala | 19 +++- .../li/cil/oc/server/component/Keyboard.scala | 20 ++++- .../cil/oc/server/component/LinkedCard.scala | 21 ++++- .../li/cil/oc/server/component/Memory.scala | 29 +++++++ .../cil/oc/server/component/NetworkCard.scala | 22 ++++- .../li/cil/oc/server/component/Redstone.scala | 20 ++++- .../oc/server/component/RedstoneBundled.scala | 20 +++++ .../oc/server/component/RedstoneVanilla.scala | 23 ++++- .../server/component/RedstoneWireless.scala | 21 ++++- .../li/cil/oc/server/component/Robot.scala | 20 ++++- .../li/cil/oc/server/component/Server.scala | 17 +++- .../li/cil/oc/server/component/Tablet.scala | 20 ++++- .../cil/oc/server/component/Transposer.scala | 20 ++++- .../oc/server/component/UpgradeAngel.scala | 22 ++++- .../oc/server/component/UpgradeBattery.scala | 20 ++++- .../server/component/UpgradeChunkloader.scala | 19 +++- .../oc/server/component/UpgradeCrafting.scala | 18 +++- .../oc/server/component/UpgradeDatabase.scala | 22 ++++- .../server/component/UpgradeExperience.scala | 19 +++- .../server/component/UpgradeGenerator.scala | 20 ++++- .../UpgradeInventoryController.scala | 25 +++++- .../oc/server/component/UpgradeLeash.scala | 24 +++++- .../server/component/UpgradeNavigation.scala | 30 +++++-- .../oc/server/component/UpgradePiston.scala | 19 +++- .../cil/oc/server/component/UpgradeSign.scala | 19 +++- .../component/UpgradeSolarGenerator.scala | 19 +++- .../cil/oc/server/component/UpgradeTank.scala | 22 ++++- .../component/UpgradeTankController.scala | 25 +++++- .../server/component/UpgradeTractorBeam.scala | 86 +++++++++++-------- .../oc/server/component/UpgradeTrading.scala | 18 +++- .../component/WirelessNetworkCard.scala | 18 ++++ .../li/cil/oc/server/machine/Machine.scala | 24 ++++++ 65 files changed, 1302 insertions(+), 140 deletions(-) create mode 100644 src/main/java/li/cil/oc/api/driver/DeviceInfo.java create mode 100644 src/main/resources/assets/opencomputers/loot/openos/bin/lshw.lua create mode 100644 src/main/scala/li/cil/oc/server/component/APU.scala create mode 100644 src/main/scala/li/cil/oc/server/component/CPU.scala create mode 100644 src/main/scala/li/cil/oc/server/component/Memory.scala diff --git a/src/main/java/li/cil/oc/api/driver/DeviceInfo.java b/src/main/java/li/cil/oc/api/driver/DeviceInfo.java new file mode 100644 index 000000000..751190547 --- /dev/null +++ b/src/main/java/li/cil/oc/api/driver/DeviceInfo.java @@ -0,0 +1,39 @@ +package li.cil.oc.api.driver; + +import java.util.Map; + +/** + * Implement this on {@link li.cil.oc.api.network.Environment}s if you wish to + * expose some (typically static) information about the device represented by + * that environment to a {@link li.cil.oc.api.Machine} connected to it. + *

+ * This is intended to permit programs to reflect on the hardware they are + * running on, typically for purely informational purposes, but possibly to + * toggle certain hardware specific features. + *

+ * For example, graphics cards may expose their timings via this interface, so + * that programs may determine at what speed they can redraw, and optimize + * execution order. + *

+ * While the format of the returned table of information is entirely up to you, + * it is recommended to orient yourself on the key values and names that + * lshw uses (http://www.ezix.org/project/wiki/HardwareLiSter), + * where applicable. + */ +public interface DeviceInfo { + /** + * Compile a list of device information strings as key-value pairs. + *

+ * For example, this may list the type of the device, a vendor (for example + * your mod name, or something more creative if you like), specifications + * of the device (speeds, capacities). + *

+ * For example, OC's tier one memory module returns the following: + * + * + *
+ * + * @return the table of information on this device, or null. + */ + Map getDeviceInfo(); +} diff --git a/src/main/resources/assets/opencomputers/loot/openos/bin/lshw.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/lshw.lua new file mode 100644 index 000000000..60459422e --- /dev/null +++ b/src/main/resources/assets/opencomputers/loot/openos/bin/lshw.lua @@ -0,0 +1,42 @@ +local computer = require("computer") +local shell = require("shell") +local text = require("text") + +local args, options = shell.parse(...) + +local devices = computer.getDeviceInfo() +local columns = {} + +if not next(options, nil) then + options.t = true + options.d = true + options.p = true +end +if options.t then table.insert(columns, "Class") end +if options.d then table.insert(columns, "Description") end +if options.p then table.insert(columns, "Product") end +if options.v then table.insert(columns, "Vendor") end +if options.c then table.insert(columns, "Capacity") end +if options.w then table.insert(columns, "Width") end +if options.s then table.insert(columns, "Clock") end + +local m = {} +for address, info in pairs(devices) do + for col, name in ipairs(columns) do + m[col] = math.max(m[col] or 1, (info[name:lower()] or ""):len()) + end +end + +io.write(text.padRight("Address", 10)) +for col, name in ipairs(columns) do + io.write(text.padRight(name, m[col] + 2)) +end +io.write("\n") + +for address, info in pairs(devices) do + io.write(text.padRight(address:sub(1, 5).."...", 10)) + for col, name in ipairs(columns) do + io.write(text.padRight(info[name:lower()] or "", m[col] + 2)) + end + io.write("\n") +end diff --git a/src/main/resources/assets/opencomputers/lua/machine.lua b/src/main/resources/assets/opencomputers/lua/machine.lua index 0ecc007e5..23b3e45b1 100644 --- a/src/main/resources/assets/opencomputers/lua/machine.lua +++ b/src/main/resources/assets/opencomputers/lua/machine.lua @@ -1332,7 +1332,10 @@ local libcomputer = { end, beep = function(...) - libcomponent.invoke(computer.address(), "beep", ...) + return libcomponent.invoke(computer.address(), "beep", ...) + end, + getDeviceInfo = function(...) + return libcomponent.invoke(computer.address(), "getDeviceInfo", ...) end, getArchitectures = function(...) diff --git a/src/main/scala/li/cil/oc/Constants.scala b/src/main/scala/li/cil/oc/Constants.scala index b2aa91fe6..cdc7540cd 100644 --- a/src/main/scala/li/cil/oc/Constants.scala +++ b/src/main/scala/li/cil/oc/Constants.scala @@ -171,4 +171,42 @@ object Constants { def TabletCase(tier: Int) = ItemUtils.caseNameWithTierSuffix("tabletCase", tier) } + object DeviceInfo { + + object DeviceAttribute { + final val Class = "class" + final val Description = "description" + final val Vendor = "vendor" + final val Product = "product" + final val Capacity = "capacity" + final val Size = "size" + final val Clock = "clock" + final val Width = "width" + } + + object DeviceClass { + final val System = "system" + final val Bridge = "bridge" + final val Memory = "memory" + final val Processor = "processor" + final val Address = "address" + final val Storage = "storage" + final val Disk = "disk" + final val Tape = "tape" + final val Bus = "bus" + final val Network = "network" + final val Display = "display" + final val Input = "input" + final val Printer = "printer" + final val Multimedia = "multimedia" + final val Communication = "communication" + final val Power = "power" + final val Volume = "volume" + final val Generic = "generic" + } + + final val DefaultVendor = "MightPirates GmbH & Co. KG" + + } + } diff --git a/src/main/scala/li/cil/oc/common/component/TerminalServer.scala b/src/main/scala/li/cil/oc/common/component/TerminalServer.scala index 5c7d82ccf..81f8066e2 100644 --- a/src/main/scala/li/cil/oc/common/component/TerminalServer.scala +++ b/src/main/scala/li/cil/oc/common/component/TerminalServer.scala @@ -4,10 +4,13 @@ import java.util import java.util.UUID import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.component.RackBusConnectable import li.cil.oc.api.component.RackMountable +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.internal.Keyboard.UsabilityChecker import li.cil.oc.api.network.Analyzable import li.cil.oc.api.network.Environment @@ -26,11 +29,11 @@ import net.minecraft.entity.player.EntityPlayer import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagString import net.minecraftforge.common.util.Constants.NBT -import net.minecraftforge.common.util.ForgeDirection +import scala.collection.convert.WrapAsJava._ import scala.collection.mutable -class TerminalServer(val rack: api.internal.Rack, val slot: Int) extends Environment with EnvironmentHost with Analyzable with RackMountable with Lifecycle { +class TerminalServer(val rack: api.internal.Rack, val slot: Int) extends Environment with EnvironmentHost with Analyzable with RackMountable with Lifecycle with DeviceInfo { val node = api.Network.newNode(this, Visibility.None).create() lazy val buffer = { @@ -67,6 +70,18 @@ class TerminalServer(val rack: api.internal.Rack, val slot: Int) extends Environ else rack.getMountableData(slot).getTagList("keys", NBT.TAG_STRING).map((tag: NBTTagString) => tag.func_150285_a_()) } + // ----------------------------------------------------------------------- // + // DeviceInfo + + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Generic, + DeviceAttribute.Description -> "Terminal server", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "RemoteViewing EX" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + // ----------------------------------------------------------------------- // // Environment diff --git a/src/main/scala/li/cil/oc/common/component/TextBuffer.scala b/src/main/scala/li/cil/oc/common/component/TextBuffer.scala index c918ae8f7..f30dec9da 100644 --- a/src/main/scala/li/cil/oc/common/component/TextBuffer.scala +++ b/src/main/scala/li/cil/oc/common/component/TextBuffer.scala @@ -5,9 +5,12 @@ import cpw.mods.fml.common.eventhandler.SubscribeEvent import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.OpenComputers import li.cil.oc.Settings import li.cil.oc.api +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context @@ -32,10 +35,11 @@ import net.minecraft.nbt.NBTTagCompound import net.minecraftforge.event.world.ChunkEvent import net.minecraftforge.event.world.WorldEvent +import scala.collection.convert.WrapAsJava._ import scala.collection.convert.WrapAsScala._ import scala.collection.mutable -class TextBuffer(val host: EnvironmentHost) extends prefab.ManagedEnvironment with api.internal.TextBuffer { +class TextBuffer(val host: EnvironmentHost) extends prefab.ManagedEnvironment with api.internal.TextBuffer with DeviceInfo { override val node = api.Network.newNode(this, Visibility.Network). withComponent("screen"). withConnector(). @@ -99,6 +103,17 @@ class TextBuffer(val host: EnvironmentHost) extends prefab.ManagedEnvironment wi relativeLitArea = -1 // Recompute lit area, avoid screens blanking out until something changes. } + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Display, + DeviceAttribute.Description -> "Text buffer", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Text Screen V0", + DeviceAttribute.Capacity -> (maxResolution._1 * maxResolution._2).toString, + DeviceAttribute.Width -> Array("1", "4", "8").apply(maxDepth.ordinal()) + ) + + override def getDeviceInfo: java.util.Map[String, String] = deviceInfo + // ----------------------------------------------------------------------- // override val canUpdate = true diff --git a/src/main/scala/li/cil/oc/common/item/data/NavigationUpgradeData.scala b/src/main/scala/li/cil/oc/common/item/data/NavigationUpgradeData.scala index 7ec24ff14..ca0759bd8 100644 --- a/src/main/scala/li/cil/oc/common/item/data/NavigationUpgradeData.scala +++ b/src/main/scala/li/cil/oc/common/item/data/NavigationUpgradeData.scala @@ -20,6 +20,11 @@ class NavigationUpgradeData extends ItemData(Constants.ItemName.NavigationUpgrad case _: Throwable => throw new Exception("invalid map") } + def getSize(world: World) = { + val info = mapData(world) + 128 * (1 << info.scale) + } + override def load(stack: ItemStack) { if (stack.hasTagCompound) { load(stack.getTagCompound.getCompoundTag(Settings.namespace + "data")) diff --git a/src/main/scala/li/cil/oc/common/tileentity/Adapter.scala b/src/main/scala/li/cil/oc/common/tileentity/Adapter.scala index 68d2d1bc5..5f8b4d3e0 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Adapter.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Adapter.scala @@ -1,8 +1,14 @@ package li.cil.oc.common.tileentity +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.Driver +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.internal import li.cil.oc.api.network.Analyzable import li.cil.oc.api.network._ @@ -14,9 +20,10 @@ import net.minecraft.nbt.NBTTagList import net.minecraftforge.common.util.Constants.NBT import net.minecraftforge.common.util.ForgeDirection +import scala.collection.convert.WrapAsJava._ import scala.collection.mutable -class Adapter extends traits.Environment with traits.ComponentInventory with Analyzable with internal.Adapter { +class Adapter extends traits.Environment with traits.ComponentInventory with Analyzable with internal.Adapter with DeviceInfo { val node = api.Network.newNode(this, Visibility.Network).create() private val blocks = Array.fill[Option[(ManagedEnvironment, api.driver.SidedBlock)]](6)(None) @@ -25,6 +32,15 @@ class Adapter extends traits.Environment with traits.ComponentInventory with Ana private val blocksData = Array.fill[Option[BlockData]](6)(None) + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Bus, + DeviceAttribute.Description -> "Adapter", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Multiplug Ext.1" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + // ----------------------------------------------------------------------- // override def onAnalyze(player: EntityPlayer, side: Int, hitX: Float, hitY: Float, hitZ: Float) = blocks collect { diff --git a/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala b/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala index 1df52c5a3..e601cfec2 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala @@ -4,8 +4,12 @@ import java.util import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context @@ -17,7 +21,9 @@ import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound import net.minecraftforge.common.util.ForgeDirection -class Assembler extends traits.Environment with traits.PowerAcceptor with traits.Inventory with SidedEnvironment with traits.StateAware { +import scala.collection.convert.WrapAsJava._ + +class Assembler extends traits.Environment with traits.PowerAcceptor with traits.Inventory with SidedEnvironment with traits.StateAware with DeviceInfo { val node = api.Network.newNode(this, Visibility.Network). withComponent("assembler"). withConnector(Settings.get.bufferConverter). @@ -29,6 +35,15 @@ class Assembler extends traits.Environment with traits.PowerAcceptor with traits var requiredEnergy = 0.0 + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Generic, + DeviceAttribute.Description -> "Assembler", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Factorizer R1D1" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + // ----------------------------------------------------------------------- // @SideOnly(Side.CLIENT) diff --git a/src/main/scala/li/cil/oc/common/tileentity/Capacitor.scala b/src/main/scala/li/cil/oc/common/tileentity/Capacitor.scala index 19b773931..4e24c3b78 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Capacitor.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Capacitor.scala @@ -1,18 +1,36 @@ package li.cil.oc.common.tileentity +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.network.Node import li.cil.oc.api.network.Visibility import net.minecraftforge.common.util.ForgeDirection -class Capacitor extends traits.Environment { +import scala.collection.convert.WrapAsJava._ + +class Capacitor extends traits.Environment with DeviceInfo { // Start with maximum theoretical capacity, gets reduced after validation. // This is done so that we don't lose energy while loading. val node = api.Network.newNode(this, Visibility.Network). withConnector(maxCapacity). create() + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Power, + DeviceAttribute.Description -> "Battery", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "CapBank3x", + DeviceAttribute.Capacity -> maxCapacity.toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + // ----------------------------------------------------------------------- // override def canUpdate = false 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 2904bc106..79468c444 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Case.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Case.scala @@ -1,9 +1,15 @@ package li.cil.oc.common.tileentity +import java.util + import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Driver +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.internal import li.cil.oc.api.network.Connector import li.cil.oc.common @@ -16,7 +22,9 @@ import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound import net.minecraftforge.common.util.ForgeDirection -class Case(var tier: Int) extends traits.PowerAcceptor with traits.Computer with traits.Colored with internal.Case { +import scala.collection.convert.WrapAsJava._ + +class Case(var tier: Int) extends traits.PowerAcceptor with traits.Computer with traits.Colored with internal.Case with DeviceInfo { def this() = this(0) // Used on client side to check whether to render disk activity/network indicators. @@ -25,6 +33,18 @@ class Case(var tier: Int) extends traits.PowerAcceptor with traits.Computer with color = Color.byTier(tier) + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.System, + DeviceAttribute.Description -> "Computer", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Blocker", + DeviceAttribute.Capacity -> getSizeInventory.toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + + // ----------------------------------------------------------------------- // + @SideOnly(Side.CLIENT) override protected def hasConnector(side: ForgeDirection) = side != facing @@ -34,7 +54,6 @@ class Case(var tier: Int) extends traits.PowerAcceptor with traits.Computer with override def getWorld = world - def isCreative = tier == Tier.Four // ----------------------------------------------------------------------- // diff --git a/src/main/scala/li/cil/oc/common/tileentity/Charger.scala b/src/main/scala/li/cil/oc/common/tileentity/Charger.scala index a10c22029..a5b6c630f 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Charger.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Charger.scala @@ -4,10 +4,14 @@ import java.util import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Localization import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.Driver +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.nanomachines.Controller import li.cil.oc.api.network._ import li.cil.oc.common.Slot @@ -22,10 +26,11 @@ import net.minecraft.nbt.NBTTagCompound import net.minecraft.util.Vec3 import net.minecraftforge.common.util.ForgeDirection +import scala.collection.convert.WrapAsJava._ import scala.collection.convert.WrapAsScala._ import scala.collection.mutable -class Charger extends traits.Environment with traits.PowerAcceptor with traits.RedstoneAware with traits.Rotatable with traits.ComponentInventory with Analyzable with traits.StateAware { +class Charger extends traits.Environment with traits.PowerAcceptor with traits.RedstoneAware with traits.Rotatable with traits.ComponentInventory with Analyzable with traits.StateAware with DeviceInfo { val node = api.Network.newNode(this, Visibility.None). withConnector(Settings.get.bufferConverter). create() @@ -38,6 +43,15 @@ class Charger extends traits.Environment with traits.PowerAcceptor with traits.R var invertSignal = false + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Generic, + DeviceAttribute.Description -> "Charger", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "PowerUpper" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + // ----------------------------------------------------------------------- // @SideOnly(Side.CLIENT) diff --git a/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala b/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala index ab8542a84..eea4c70f0 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala @@ -4,8 +4,12 @@ import java.util import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.network.Visibility import li.cil.oc.common.template.DisassemblerTemplates import li.cil.oc.server.{PacketSender => ServerPacketSender} @@ -19,9 +23,10 @@ import net.minecraft.nbt.NBTTagCompound import net.minecraftforge.common.util.Constants.NBT import net.minecraftforge.common.util.ForgeDirection +import scala.collection.convert.WrapAsJava._ import scala.collection.mutable -class Disassembler extends traits.Environment with traits.PowerAcceptor with traits.Inventory with traits.StateAware with traits.PlayerInputAware { +class Disassembler extends traits.Environment with traits.PowerAcceptor with traits.Inventory with traits.StateAware with traits.PlayerInputAware with DeviceInfo { val node = api.Network.newNode(this, Visibility.None). withConnector(Settings.get.bufferConverter). create() @@ -44,6 +49,15 @@ class Disassembler extends traits.Environment with traits.PowerAcceptor with tra world.notifyBlocksOfNeighborChange(x, y, z, block) } + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Generic, + DeviceAttribute.Description -> "Disassembler", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Break.3R-100" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + // ----------------------------------------------------------------------- // @SideOnly(Side.CLIENT) diff --git a/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala b/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala index ec39d43d2..8d037094a 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala @@ -1,9 +1,15 @@ package li.cil.oc.common.tileentity +import java.util + import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.api import li.cil.oc.api.Driver +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context @@ -20,7 +26,9 @@ import net.minecraft.entity.player.EntityPlayer import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound -class DiskDrive extends traits.Environment with traits.ComponentInventory with traits.Rotatable with Analyzable { +import scala.collection.convert.WrapAsJava._ + +class DiskDrive extends traits.Environment with traits.ComponentInventory with traits.Rotatable with Analyzable with DeviceInfo { // Used on client side to check whether to render disk activity indicators. var lastAccess = 0L @@ -29,6 +37,15 @@ class DiskDrive extends traits.Environment with traits.ComponentInventory with t case _ => None } + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Disk, + DeviceAttribute.Description -> "Floppy disk drive", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Spinner 520p1" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + // ----------------------------------------------------------------------- // // Environment 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 6e664dde6..ac1876399 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala @@ -1,9 +1,13 @@ package li.cil.oc.common.tileentity +import java.util + import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly -import li.cil.oc.Settings -import li.cil.oc.api +import li.cil.oc._ +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context @@ -18,9 +22,10 @@ import net.minecraft.util.AxisAlignedBB import net.minecraft.util.Vec3 import net.minecraftforge.common.util.ForgeDirection +import scala.collection.convert.WrapAsJava._ import scala.collection.mutable -class Hologram(var tier: Int) extends traits.Environment with SidedEnvironment with Analyzable with traits.Rotatable { +class Hologram(var tier: Int) extends traits.Environment with SidedEnvironment with Analyzable with traits.Rotatable with DeviceInfo { def this() = this(0) val node = api.Network.newNode(this, Visibility.Network). @@ -32,6 +37,19 @@ class Hologram(var tier: Int) extends traits.Environment with SidedEnvironment w final val height = 2 * 16 // 32 bit in an int + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Display, + DeviceAttribute.Description -> "Holographic projector", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> ("VirtualViewer H1-" + tier.toString), + DeviceAttribute.Capacity -> (width * width * height).toString, + DeviceAttribute.Width -> colors.length.toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + + // ----------------------------------------------------------------------- // + // Layout is: first half is lower bit, second half is higher bit for the // voxels in the cube. This is to retain compatibility with pre 1.3 saves. val volume = new Array[Int](width * width * 2) diff --git a/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala b/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala index 6f5660afe..88d6a3f21 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala @@ -1,10 +1,15 @@ package li.cil.oc.common.tileentity +import java.util + import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.internal import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback @@ -22,7 +27,7 @@ import net.minecraftforge.common.util.ForgeDirection import scala.collection.convert.WrapAsJava._ -class Microcontroller extends traits.PowerAcceptor with traits.Hub with traits.Computer with internal.Microcontroller { +class Microcontroller extends traits.PowerAcceptor with traits.Hub with traits.Computer with internal.Microcontroller with DeviceInfo { val info = new MicrocontrollerData() override def node = null @@ -47,6 +52,16 @@ class Microcontroller extends traits.PowerAcceptor with traits.Hub with traits.C override protected def runSound = None // Microcontrollers are silent. + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.System, + DeviceAttribute.Description -> "Microcontroller", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Cubicle", + DeviceAttribute.Capacity -> getSizeInventory.toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + // ----------------------------------------------------------------------- // @SideOnly(Side.CLIENT) diff --git a/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala b/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala index 6178a45e4..5a03f9e71 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala @@ -1,7 +1,13 @@ package li.cil.oc.common.tileentity +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context @@ -12,10 +18,11 @@ import net.minecraft.potion.Potion import net.minecraft.util.AxisAlignedBB import net.minecraft.util.Vec3 +import scala.collection.convert.WrapAsJava._ import scala.collection.convert.WrapAsScala._ import scala.collection.mutable -class MotionSensor extends traits.Environment { +class MotionSensor extends traits.Environment with DeviceInfo { val node = api.Network.newNode(this, Visibility.Network). withComponent("motion_sensor"). withConnector(). @@ -27,6 +34,16 @@ class MotionSensor extends traits.Environment { private val trackedEntities = mutable.Map.empty[EntityLivingBase, (Double, Double, Double)] + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Generic, + DeviceAttribute.Description -> "Motion sensor", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Blinker M1K0", + DeviceAttribute.Capacity -> radius.toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + // ----------------------------------------------------------------------- // override def canUpdate = isServer diff --git a/src/main/scala/li/cil/oc/common/tileentity/PowerConverter.scala b/src/main/scala/li/cil/oc/common/tileentity/PowerConverter.scala index 37ed5e7bd..ff74a2993 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/PowerConverter.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/PowerConverter.scala @@ -1,17 +1,35 @@ package li.cil.oc.common.tileentity +import java.util + import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.network._ import net.minecraftforge.common.util.ForgeDirection -class PowerConverter extends traits.PowerAcceptor with traits.Environment with traits.NotAnalyzable { +import scala.collection.convert.WrapAsJava._ + +class PowerConverter extends traits.PowerAcceptor with traits.Environment with traits.NotAnalyzable with DeviceInfo { val node = api.Network.newNode(this, Visibility.None). withConnector(Settings.get.bufferConverter). create() + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Power, + DeviceAttribute.Description -> "Power converter", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Transgizer-PX5", + DeviceAttribute.Capacity -> energyThroughput.toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + @SideOnly(Side.CLIENT) override protected def hasConnector(side: ForgeDirection) = true diff --git a/src/main/scala/li/cil/oc/common/tileentity/Printer.scala b/src/main/scala/li/cil/oc/common/tileentity/Printer.scala index 3d85529c9..f8729b5af 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Printer.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Printer.scala @@ -4,8 +4,12 @@ import java.util import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context @@ -19,7 +23,9 @@ import net.minecraft.nbt.NBTTagCompound import net.minecraft.util.AxisAlignedBB import net.minecraftforge.common.util.ForgeDirection -class Printer extends traits.Environment with traits.Inventory with traits.Rotatable with SidedEnvironment with traits.StateAware with ISidedInventory { +import scala.collection.convert.WrapAsJava._ + +class Printer extends traits.Environment with traits.Inventory with traits.Rotatable with SidedEnvironment with traits.StateAware with ISidedInventory with DeviceInfo { val node = api.Network.newNode(this, Visibility.Network). withComponent("printer3d"). withConnector(Settings.get.bufferConverter). @@ -41,6 +47,15 @@ class Printer extends traits.Environment with traits.Inventory with traits.Rotat val slotInk = 1 val slotOutput = 2 + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Printer, + DeviceAttribute.Description -> "3D Printer", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Omni-Materializer T6.1" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + // ----------------------------------------------------------------------- // @SideOnly(Side.CLIENT) diff --git a/src/main/scala/li/cil/oc/integration/opencomputers/DriverAPU.scala b/src/main/scala/li/cil/oc/integration/opencomputers/DriverAPU.scala index f1a9329d6..4072a146f 100644 --- a/src/main/scala/li/cil/oc/integration/opencomputers/DriverAPU.scala +++ b/src/main/scala/li/cil/oc/integration/opencomputers/DriverAPU.scala @@ -20,9 +20,9 @@ object DriverAPU extends DriverCPU with HostAware { override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = if (host.world != null && host.world.isRemote) null else gpuTier(stack) match { - case Tier.One => new component.GraphicsCard(Tier.One) - case Tier.Two => new component.GraphicsCard(Tier.Two) - case Tier.Three => new component.GraphicsCard(Tier.Three) + case Tier.One => new component.APU(Tier.One) + case Tier.Two => new component.APU(Tier.Two) + case Tier.Three => new component.APU(Tier.Three) case _ => null } diff --git a/src/main/scala/li/cil/oc/integration/opencomputers/DriverCPU.scala b/src/main/scala/li/cil/oc/integration/opencomputers/DriverCPU.scala index 98c662727..ee5a35adc 100644 --- a/src/main/scala/li/cil/oc/integration/opencomputers/DriverCPU.scala +++ b/src/main/scala/li/cil/oc/integration/opencomputers/DriverCPU.scala @@ -8,6 +8,7 @@ import li.cil.oc.common.Slot import li.cil.oc.common.Tier import li.cil.oc.common.item import li.cil.oc.common.item.Delegator +import li.cil.oc.server.component import li.cil.oc.server.machine.luac.NativeLuaArchitecture import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound @@ -23,7 +24,7 @@ abstract class DriverCPU extends Item with api.driver.item.MutableProcessor with api.Items.get(Constants.ItemName.CPUTier2), api.Items.get(Constants.ItemName.CPUTier3)) - override def createEnvironment(stack: ItemStack, host: api.network.EnvironmentHost): api.network.ManagedEnvironment = null + override def createEnvironment(stack: ItemStack, host: api.network.EnvironmentHost): api.network.ManagedEnvironment = new component.CPU(tier(stack)) override def slot(stack: ItemStack) = Slot.CPU diff --git a/src/main/scala/li/cil/oc/integration/opencomputers/DriverMemory.scala b/src/main/scala/li/cil/oc/integration/opencomputers/DriverMemory.scala index d4a0c1467..7b74581b1 100644 --- a/src/main/scala/li/cil/oc/integration/opencomputers/DriverMemory.scala +++ b/src/main/scala/li/cil/oc/integration/opencomputers/DriverMemory.scala @@ -7,6 +7,7 @@ import li.cil.oc.common.Slot import li.cil.oc.common.Tier import li.cil.oc.common.item import li.cil.oc.common.item.Delegator +import li.cil.oc.server.component import net.minecraft.item.ItemStack object DriverMemory extends Item with api.driver.item.Memory with api.driver.item.CallBudget { @@ -26,7 +27,7 @@ object DriverMemory extends Item with api.driver.item.Memory with api.driver.ite api.Items.get(Constants.ItemName.RAMTier5), api.Items.get(Constants.ItemName.RAMTier6)) - override def createEnvironment(stack: ItemStack, host: api.network.EnvironmentHost) = null + override def createEnvironment(stack: ItemStack, host: api.network.EnvironmentHost) = new component.Memory(tier(stack)) override def slot(stack: ItemStack) = Slot.Memory diff --git a/src/main/scala/li/cil/oc/integration/opencomputers/DriverUpgradeTractorBeam.scala b/src/main/scala/li/cil/oc/integration/opencomputers/DriverUpgradeTractorBeam.scala index 8d01e4232..63306e940 100644 --- a/src/main/scala/li/cil/oc/integration/opencomputers/DriverUpgradeTractorBeam.scala +++ b/src/main/scala/li/cil/oc/integration/opencomputers/DriverUpgradeTractorBeam.scala @@ -34,7 +34,7 @@ object DriverUpgradeTractorBeam extends Item with HostAware { object Provider extends EnvironmentProvider { override def getEnvironment(stack: ItemStack): Class[_] = if (worksWith(stack)) - classOf[component.UpgradeTractorBeam] + classOf[component.UpgradeTractorBeam.Common] else null } diff --git a/src/main/scala/li/cil/oc/server/component/APU.scala b/src/main/scala/li/cil/oc/server/component/APU.scala new file mode 100644 index 000000000..c08b7cd9c --- /dev/null +++ b/src/main/scala/li/cil/oc/server/component/APU.scala @@ -0,0 +1,24 @@ +package li.cil.oc.server.component + +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.Settings + +import scala.collection.convert.WrapAsJava._ + +class APU(tier: Int) extends GraphicsCard(tier) { + private final lazy val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Processor, + DeviceAttribute.Description -> "APU", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> ("FlexiArch " + tier.toString + " Processor (Builtin Graphics)"), + DeviceAttribute.Capacity -> capacityInfo, + DeviceAttribute.Width -> widthInfo, + DeviceAttribute.Clock -> ((Settings.get.callBudgets(tier) * 1000).toInt.toString + "+" + clockInfo) + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo +} diff --git a/src/main/scala/li/cil/oc/server/component/CPU.scala b/src/main/scala/li/cil/oc/server/component/CPU.scala new file mode 100644 index 000000000..8928fa84b --- /dev/null +++ b/src/main/scala/li/cil/oc/server/component/CPU.scala @@ -0,0 +1,29 @@ +package li.cil.oc.server.component + +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.Settings +import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo +import li.cil.oc.api.network.Visibility +import li.cil.oc.api.prefab + +import scala.collection.convert.WrapAsJava._ + +class CPU(val tier: Int) extends prefab.ManagedEnvironment with DeviceInfo { + override val node = Network.newNode(this, Visibility.Network). + create() + + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Processor, + DeviceAttribute.Description -> "CPU", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> ("FlexiArch " + tier.toString + " Processor"), + DeviceAttribute.Clock -> (Settings.get.callBudgets(tier) * 1000).toInt.toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo +} diff --git a/src/main/scala/li/cil/oc/server/component/DataCard.scala b/src/main/scala/li/cil/oc/server/component/DataCard.scala index 5eddb1227..ef619aa61 100644 --- a/src/main/scala/li/cil/oc/server/component/DataCard.scala +++ b/src/main/scala/li/cil/oc/server/component/DataCard.scala @@ -4,6 +4,7 @@ import java.security._ import java.security.interfaces.ECPublicKey import java.security.spec.PKCS8EncodedKeySpec import java.security.spec.X509EncodedKeySpec +import java.util import java.util.zip.DeflaterOutputStream import java.util.zip.InflaterOutputStream import javax.crypto.Cipher @@ -13,8 +14,11 @@ import javax.crypto.spec.IvParameterSpec import javax.crypto.spec.SecretKeySpec import com.google.common.hash.Hashing +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context @@ -24,7 +28,9 @@ import net.minecraft.nbt.NBTTagCompound import org.apache.commons.codec.binary.Base64 import org.apache.commons.io.output.ByteArrayOutputStream -abstract class DataCard extends prefab.ManagedEnvironment { +import scala.collection.convert.WrapAsJava._ + +abstract class DataCard extends prefab.ManagedEnvironment with DeviceInfo { override val node = Network.newNode(this, Visibility.Neighbors). withComponent("data", Visibility.Neighbors). withConnector(). @@ -71,6 +77,17 @@ object DataCard { } class Tier1 extends DataCard { + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Processor, + DeviceAttribute.Description -> "Data processor card", + DeviceAttribute.Vendor -> "S.C. Ltd.", + DeviceAttribute.Product -> "SC01D H45h3r" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + + // ----------------------------------------------------------------------- // + @Callback(direct = true, limit = 32, doc = """function(data:string):string -- Applies base64 encoding to the data.""") def encode64(context: Context, args: Arguments): Array[AnyRef] = { result(Base64.encodeBase64(trivialCost(context, args))) @@ -121,6 +138,17 @@ object DataCard { } class Tier2 extends Tier1 { + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Processor, + DeviceAttribute.Description -> "Data processor card", + DeviceAttribute.Vendor -> "S.C. Ltd.", + DeviceAttribute.Product -> "SC02D Cryptic" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + + // ----------------------------------------------------------------------- // + @Callback(direct = true, limit = 8, doc = """function(data:string[, hmacKey:string]):string -- Computes MD5 hash of the data. Result is binary data.""") override def md5(context: Context, args: Arguments): Array[AnyRef] = if (args.count() > 1) { @@ -184,6 +212,17 @@ object DataCard { } class Tier3 extends Tier2 { + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Processor, + DeviceAttribute.Description -> "Data processor card", + DeviceAttribute.Vendor -> "S.C. Ltd.", + DeviceAttribute.Product -> "SC03D Signer" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + + // ----------------------------------------------------------------------- // + @Callback(direct = true, limit = 1, doc = """function([bitLen:number]):userdata, userdata -- Generates key pair. Returns: public, private keys. Allowed key lengths: 256, 384 bits.""") def generateKeyPair(context: Context, args: Arguments): Array[AnyRef] = { checkCost(Settings.get.dataCardAsymmetric) diff --git a/src/main/scala/li/cil/oc/server/component/DiskDriveMountable.scala b/src/main/scala/li/cil/oc/server/component/DiskDriveMountable.scala index 6886ad2eb..797c877ef 100644 --- a/src/main/scala/li/cil/oc/server/component/DiskDriveMountable.scala +++ b/src/main/scala/li/cil/oc/server/component/DiskDriveMountable.scala @@ -2,10 +2,14 @@ package li.cil.oc.server.component import java.util +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.api import li.cil.oc.api.Driver import li.cil.oc.api.component.RackBusConnectable import li.cil.oc.api.component.RackMountable +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context @@ -25,9 +29,10 @@ import li.cil.oc.util.InventoryUtils import net.minecraft.entity.player.EntityPlayer import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound -import net.minecraftforge.common.util.ForgeDirection -class DiskDriveMountable(val rack: api.internal.Rack, val slot: Int) extends prefab.ManagedEnvironment with ItemStackInventory with ComponentInventory with RackMountable with Analyzable { +import scala.collection.convert.WrapAsJava._ + +class DiskDriveMountable(val rack: api.internal.Rack, val slot: Int) extends prefab.ManagedEnvironment with ItemStackInventory with ComponentInventory with RackMountable with Analyzable with DeviceInfo { // Stored for filling data packet when queried. var lastAccess = 0L @@ -36,6 +41,18 @@ class DiskDriveMountable(val rack: api.internal.Rack, val slot: Int) extends pre case _ => None } + // ----------------------------------------------------------------------- // + // DeviceInfo + + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Disk, + DeviceAttribute.Description -> "Floppy disk drive", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "RackDrive 100 Rev. 2" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + // ----------------------------------------------------------------------- // // Environment diff --git a/src/main/scala/li/cil/oc/server/component/Drive.scala b/src/main/scala/li/cil/oc/server/component/Drive.scala index 62ef1cba5..6d25cca61 100644 --- a/src/main/scala/li/cil/oc/server/component/Drive.scala +++ b/src/main/scala/li/cil/oc/server/component/Drive.scala @@ -3,25 +3,32 @@ package li.cil.oc.server.component import java.io import java.io.ByteArrayInputStream import java.io.ByteArrayOutputStream +import java.util import java.util.zip.GZIPInputStream import java.util.zip.GZIPOutputStream import com.google.common.io.Files +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.OpenComputers import li.cil.oc.Settings import li.cil.oc.api.Network -import li.cil.oc.api.network.EnvironmentHost +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.fs.Label import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context +import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.api.network.Visibility import li.cil.oc.api.prefab import li.cil.oc.server.{PacketSender => ServerPacketSender} import net.minecraft.nbt.NBTTagCompound import net.minecraftforge.common.DimensionManager -class Drive(val capacity: Int, val platterCount: Int, val label: Label, host: Option[EnvironmentHost], val sound: Option[String], val speed: Int) extends prefab.ManagedEnvironment { +import scala.collection.convert.WrapAsJava._ + +class Drive(val capacity: Int, val platterCount: Int, val label: Label, host: Option[EnvironmentHost], val sound: Option[String], val speed: Int) extends prefab.ManagedEnvironment with DeviceInfo { override val node = Network.newNode(this, Visibility.Network). withComponent("drive", Visibility.Neighbors). withConnector(). @@ -39,6 +46,25 @@ class Drive(val capacity: Int, val platterCount: Int, val label: Label, host: Op private var headPos = 0 + final val readSectorCosts = Array(1.0 / 10, 1.0 / 20, 1.0 / 30, 1.0 / 40, 1.0 / 50, 1.0 / 60) + final val writeSectorCosts = Array(1.0 / 5, 1.0 / 10, 1.0 / 15, 1.0 / 20, 1.0 / 25, 1.0 / 30) + final val readByteCosts = Array(1.0 / 48, 1.0 / 64, 1.0 / 80, 1.0 / 96, 1.0 / 112, 1.0 / 128) + final val writeByteCosts = Array(1.0 / 24, 1.0 / 32, 1.0 / 40, 1.0 / 48, 1.0 / 56, 1.0 / 64) + + // ----------------------------------------------------------------------- // + + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Disk, + DeviceAttribute.Description -> "Hard disk drive", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> ("MPD" + (capacity / 1024).toString + "L" + platterCount.toString), + DeviceAttribute.Capacity -> (capacity * 1.024).toInt.toString, + DeviceAttribute.Size -> capacity.toString, + DeviceAttribute.Clock -> (((2000 / readSectorCosts(speed)).toInt / 100).toString + "/" + ((2000 / writeSectorCosts(speed)).toInt / 100).toString + "/" + ((2000 / readByteCosts(speed)).toInt / 100).toString + "/" + ((2000 / writeByteCosts(speed)).toInt / 100).toString) + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + // ----------------------------------------------------------------------- // @Callback(direct = true, doc = """function():string -- Get the current label of the drive.""") @@ -73,8 +99,6 @@ class Drive(val capacity: Int, val platterCount: Int, val label: Label, host: Op result(sectorData) } - final val readSectorCosts = Array(1.0 / 10, 1.0 / 20, 1.0 / 30, 1.0 / 40, 1.0 / 50, 1.0 / 60) - @Callback(direct = true, doc = """function(sector:number, value:string) -- Write the specified contents to the specified sector.""") def writeSector(context: Context, args: Arguments): Array[AnyRef] = this.synchronized { context.consumeCallBudget(writeSectorCosts(speed)) @@ -85,8 +109,6 @@ class Drive(val capacity: Int, val platterCount: Int, val label: Label, host: Op null } - final val writeSectorCosts = Array(1.0 / 5, 1.0 / 10, 1.0 / 15, 1.0 / 20, 1.0 / 25, 1.0 / 30) - @Callback(direct = true, doc = """function(offset:number):number -- Read a single byte at the specified offset.""") def readByte(context: Context, args: Arguments): Array[AnyRef] = this.synchronized { context.consumeCallBudget(readByteCosts(speed)) @@ -96,8 +118,6 @@ class Drive(val capacity: Int, val platterCount: Int, val label: Label, host: Op result(data(offset)) } - final val readByteCosts = Array(1.0 / 48, 1.0 / 64, 1.0 / 80, 1.0 / 96, 1.0 / 112, 1.0 / 128) - @Callback(direct = true, doc = """function(offset:number, value:number) -- Write a single byte to the specified offset.""") def writeByte(context: Context, args: Arguments): Array[AnyRef] = this.synchronized { context.consumeCallBudget(writeByteCosts(speed)) @@ -109,8 +129,6 @@ class Drive(val capacity: Int, val platterCount: Int, val label: Label, host: Op null } - final val writeByteCosts = Array(1.0 / 24, 1.0 / 32, 1.0 / 40, 1.0 / 48, 1.0 / 56, 1.0 / 64) - // ----------------------------------------------------------------------- // override def load(nbt: NBTTagCompound) = this.synchronized { diff --git a/src/main/scala/li/cil/oc/server/component/Drone.scala b/src/main/scala/li/cil/oc/server/component/Drone.scala index ee0e68207..927f39b45 100644 --- a/src/main/scala/li/cil/oc/server/component/Drone.scala +++ b/src/main/scala/li/cil/oc/server/component/Drone.scala @@ -1,7 +1,13 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context @@ -13,12 +19,24 @@ import li.cil.oc.util.InventoryUtils import net.minecraft.entity.item.EntityItem import net.minecraftforge.common.util.ForgeDirection -class Drone(val agent: entity.Drone) extends prefab.ManagedEnvironment with Agent { +import scala.collection.convert.WrapAsJava._ + +class Drone(val agent: entity.Drone) extends prefab.ManagedEnvironment with Agent with DeviceInfo { override val node = Network.newNode(this, Visibility.Network). withComponent("drone"). withConnector(Settings.get.bufferDrone). create() + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.System, + DeviceAttribute.Description -> "Drone", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Overwatcher", + DeviceAttribute.Capacity -> agent.inventorySize.toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + override protected def checkSideForAction(args: Arguments, n: Int) = args.checkSideAny(n) diff --git a/src/main/scala/li/cil/oc/server/component/EEPROM.scala b/src/main/scala/li/cil/oc/server/component/EEPROM.scala index 5641c6302..e8de86db3 100644 --- a/src/main/scala/li/cil/oc/server/component/EEPROM.scala +++ b/src/main/scala/li/cil/oc/server/component/EEPROM.scala @@ -1,8 +1,14 @@ package li.cil.oc.server.component +import java.util + import com.google.common.hash.Hashing +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context @@ -10,14 +16,16 @@ import li.cil.oc.api.network._ import li.cil.oc.api.prefab import net.minecraft.nbt.NBTTagCompound -class EEPROM extends prefab.ManagedEnvironment { +import scala.collection.convert.WrapAsJava._ + +class EEPROM extends prefab.ManagedEnvironment with DeviceInfo { override val node = Network.newNode(this, Visibility.Neighbors). withComponent("eeprom", Visibility.Neighbors). withConnector(). create() var codeData = Array.empty[Byte] - + var volatileData = Array.empty[Byte] var readonly = false @@ -28,6 +36,19 @@ class EEPROM extends prefab.ManagedEnvironment { // ----------------------------------------------------------------------- // + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Memory, + DeviceAttribute.Description -> "EEPROM", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "FlashStick2k", + DeviceAttribute.Capacity -> Settings.get.eepromSize.toString, + DeviceAttribute.Size -> Settings.get.eepromSize.toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + + // ----------------------------------------------------------------------- // + @Callback(direct = true, doc = """function():string -- Get the currently stored byte array.""") def get(context: Context, args: Arguments): Array[AnyRef] = result(codeData) diff --git a/src/main/scala/li/cil/oc/server/component/FileSystem.scala b/src/main/scala/li/cil/oc/server/component/FileSystem.scala index ec43a01c1..600da9312 100644 --- a/src/main/scala/li/cil/oc/server/component/FileSystem.scala +++ b/src/main/scala/li/cil/oc/server/component/FileSystem.scala @@ -2,9 +2,14 @@ package li.cil.oc.server.component import java.io.FileNotFoundException import java.io.IOException +import java.util +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.fs.Label import li.cil.oc.api.fs.Mode import li.cil.oc.api.fs.{FileSystem => IFileSystem} @@ -23,9 +28,10 @@ import net.minecraft.nbt.NBTTagIntArray import net.minecraft.nbt.NBTTagList import net.minecraftforge.common.util.Constants.NBT +import scala.collection.convert.WrapAsJava._ import scala.collection.mutable -class FileSystem(val fileSystem: IFileSystem, var label: Label, val host: Option[EnvironmentHost], val sound: Option[String], val speed: Int) extends prefab.ManagedEnvironment { +class FileSystem(val fileSystem: IFileSystem, var label: Label, val host: Option[EnvironmentHost], val sound: Option[String], val speed: Int) extends prefab.ManagedEnvironment with DeviceInfo { override val node = Network.newNode(this, Visibility.Network). withComponent("filesystem", Visibility.Neighbors). withConnector(). @@ -33,6 +39,24 @@ class FileSystem(val fileSystem: IFileSystem, var label: Label, val host: Option private val owners = mutable.Map.empty[String, mutable.Set[Int]] + final val readCosts = Array(1.0 / 1, 1.0 / 4, 1.0 / 7, 1.0 / 10, 1.0 / 13, 1.0 / 15) + final val seekCosts = Array(1.0 / 1, 1.0 / 4, 1.0 / 7, 1.0 / 10, 1.0 / 13, 1.0 / 15) + final val writeCosts = Array(1.0 / 1, 1.0 / 2, 1.0 / 3, 1.0 / 4, 1.0 / 5, 1.0 / 6) + + // ----------------------------------------------------------------------- // + + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Volume, + DeviceAttribute.Description -> "Filesystem", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "MPFS.21.6", + DeviceAttribute.Capacity -> (fileSystem.spaceTotal * 1.024).toInt.toString, + DeviceAttribute.Size -> fileSystem.spaceTotal.toString, + DeviceAttribute.Clock -> (((2000 / readCosts(speed)).toInt / 100).toString + "/" + ((2000 / seekCosts(speed)).toInt / 100).toString + "/" + ((2000 / writeCosts(speed)).toInt / 100).toString) + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + // ----------------------------------------------------------------------- // @Callback(direct = true, doc = """function():string -- Get the current label of the drive.""") @@ -178,8 +202,6 @@ class FileSystem(val fileSystem: IFileSystem, var label: Label, val host: Option } } - final val readCosts = Array(1.0 / 1, 1.0 / 4, 1.0 / 7, 1.0 / 10, 1.0 / 13, 1.0 / 15) - @Callback(direct = true, doc = """function(handle:userdata, whence:string, offset:number):number -- Seeks in an open file descriptor with the specified handle. Returns the new pointer position.""") def seek(context: Context, args: Arguments): Array[AnyRef] = fileSystem.synchronized { context.consumeCallBudget(seekCosts(speed)) @@ -200,8 +222,6 @@ class FileSystem(val fileSystem: IFileSystem, var label: Label, val host: Option } } - final val seekCosts = Array(1.0 / 1, 1.0 / 4, 1.0 / 7, 1.0 / 10, 1.0 / 13, 1.0 / 15) - @Callback(direct = true, doc = """function(handle:userdata, value:string):boolean -- Writes the specified data to an open file descriptor with the specified handle.""") def write(context: Context, args: Arguments): Array[AnyRef] = fileSystem.synchronized { context.consumeCallBudget(writeCosts(speed)) @@ -220,8 +240,6 @@ class FileSystem(val fileSystem: IFileSystem, var label: Label, val host: Option } } - final val writeCosts = Array(1.0 / 1, 1.0 / 2, 1.0 / 3, 1.0 / 4, 1.0 / 5, 1.0 / 6) - // ----------------------------------------------------------------------- // def checkHandle(args: Arguments, index: Int) = { diff --git a/src/main/scala/li/cil/oc/server/component/Geolyzer.scala b/src/main/scala/li/cil/oc/server/component/Geolyzer.scala index b0d201b98..676a04da7 100644 --- a/src/main/scala/li/cil/oc/server/component/Geolyzer.scala +++ b/src/main/scala/li/cil/oc/server/component/Geolyzer.scala @@ -1,7 +1,13 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.api.event.GeolyzerEvent import li.cil.oc.api.event.GeolyzerEvent.Analyze @@ -27,12 +33,24 @@ import scala.collection.convert.WrapAsJava._ import scala.collection.convert.WrapAsScala._ import scala.language.existentials -class Geolyzer(val host: EnvironmentHost) extends prefab.ManagedEnvironment { +class Geolyzer(val host: EnvironmentHost) extends prefab.ManagedEnvironment with DeviceInfo { override val node = api.Network.newNode(this, Visibility.Network). withComponent("geolyzer"). withConnector(). create() + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Generic, + DeviceAttribute.Description -> "Geolyzer", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Terrain Analyzer MkII", + DeviceAttribute.Capacity -> Settings.get.geolyzerRange.toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + + // ----------------------------------------------------------------------- // + @Callback(doc = """function(x:number, z:number[, y:number, w:number, d:number, h:number][, ignoreReplaceable:boolean|options:table]):table -- Analyzes the density of the column at the specified relative coordinates.""") def scan(computer: Context, args: Arguments): Array[AnyRef] = { val (minX, minY, minZ, maxX, maxY, maxZ, optIndex) = getScanArgs(args) 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 49d0d3d3c..23d0763c1 100644 --- a/src/main/scala/li/cil/oc/server/component/GraphicsCard.scala +++ b/src/main/scala/li/cil/oc/server/component/GraphicsCard.scala @@ -1,9 +1,15 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Localization import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context @@ -12,6 +18,7 @@ import li.cil.oc.api.prefab import li.cil.oc.util.PackedColor import net.minecraft.nbt.NBTTagCompound +import scala.collection.convert.WrapAsJava._ import scala.util.matching.Regex // IMPORTANT: usually methods with side effects should *not* be direct @@ -26,7 +33,7 @@ import scala.util.matching.Regex // saved, but before the computer was saved, leading to mismatching states in // the save file - a Bad Thing (TM). -class GraphicsCard(val tier: Int) extends prefab.ManagedEnvironment { +class GraphicsCard(val tier: Int) extends prefab.ManagedEnvironment with DeviceInfo { override val node = Network.newNode(this, Visibility.Neighbors). withComponent("gpu"). withConnector(). @@ -45,6 +52,31 @@ class GraphicsCard(val tier: Int) extends prefab.ManagedEnvironment { case _ => Array(Unit, "no screen") } + final val setBackgroundCosts = Array(1.0 / 32, 1.0 / 64, 1.0 / 128) + final val setForegroundCosts = Array(1.0 / 32, 1.0 / 64, 1.0 / 128) + final val setPaletteColorCosts = Array(1.0 / 2, 1.0 / 8, 1.0 / 16) + final val setCosts = Array(1.0 / 64, 1.0 / 128, 1.0 / 256) + final val copyCosts = Array(1.0 / 16, 1.0 / 32, 1.0 / 64) + final val fillCosts = Array(1.0 / 32, 1.0 / 64, 1.0 / 128) + + // ----------------------------------------------------------------------- // + + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Display, + DeviceAttribute.Description -> "Graphics controller", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> ("MPG" + (tier * 1000).toString + " GTZ"), + DeviceAttribute.Capacity -> capacityInfo, + DeviceAttribute.Width -> widthInfo, + DeviceAttribute.Clock -> clockInfo + ) + + def capacityInfo = (maxResolution._1 * maxResolution._2).toString + def widthInfo = Array("1", "4", "8").apply(maxDepth.ordinal()) + def clockInfo = ((2000 / setBackgroundCosts(tier)).toInt / 100).toString + "/" + ((2000 / setForegroundCosts(tier)).toInt / 100).toString + "/" + ((2000 / setPaletteColorCosts(tier)).toInt / 100).toString + "/" + ((2000 / setCosts(tier)).toInt / 100).toString + "/" + ((2000 / copyCosts(tier)).toInt / 100).toString + "/" + ((2000 / fillCosts(tier)).toInt / 100).toString + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + // ----------------------------------------------------------------------- // override val canUpdate = true @@ -117,8 +149,6 @@ class GraphicsCard(val tier: Int) extends prefab.ManagedEnvironment { }) } - final val setBackgroundCosts = Array(1.0 / 32, 1.0 / 64, 1.0 / 128) - @Callback(direct = true, doc = """function():number, boolean -- Get the current foreground color and whether it's from the palette or not.""") def getForeground(context: Context, args: Arguments): Array[AnyRef] = screen(s => result(s.getForegroundColor, s.isForegroundFromPalette)) @@ -141,8 +171,6 @@ class GraphicsCard(val tier: Int) extends prefab.ManagedEnvironment { }) } - final val setForegroundCosts = Array(1.0 / 32, 1.0 / 64, 1.0 / 128) - @Callback(direct = true, doc = """function(index:number):number -- Get the palette color at the specified palette index.""") def getPaletteColor(context: Context, args: Arguments): Array[AnyRef] = { val index = args.checkInteger(0) @@ -167,8 +195,6 @@ class GraphicsCard(val tier: Int) extends prefab.ManagedEnvironment { }) } - final val setPaletteColorCosts = Array(1.0 / 2, 1.0 / 8, 1.0 / 16) - @Callback(direct = true, doc = """function():number -- Returns the currently set color depth.""") def getDepth(context: Context, args: Arguments): Array[AnyRef] = screen(s => result(PackedColor.Depth.bits(s.getColorDepth))) @@ -281,8 +307,6 @@ class GraphicsCard(val tier: Int) extends prefab.ManagedEnvironment { }) } - final val setCosts = Array(1.0 / 64, 1.0 / 128, 1.0 / 256) - @Callback(direct = true, doc = """function(x:number, y:number, width:number, height:number, tx:number, ty:number):boolean -- Copies a portion of the screen from the specified location with the specified size by the specified translation.""") def copy(context: Context, args: Arguments): Array[AnyRef] = { context.consumeCallBudget(copyCosts(tier)) @@ -301,8 +325,6 @@ class GraphicsCard(val tier: Int) extends prefab.ManagedEnvironment { }) } - final val copyCosts = Array(1.0 / 16, 1.0 / 32, 1.0 / 64) - @Callback(direct = true, doc = """function(x:number, y:number, width:number, height:number, char:string):boolean -- Fills a portion of the screen at the specified position with the specified size with the specified character.""") def fill(context: Context, args: Arguments): Array[AnyRef] = { context.consumeCallBudget(fillCosts(tier)) @@ -325,8 +347,6 @@ class GraphicsCard(val tier: Int) extends prefab.ManagedEnvironment { else throw new Exception("invalid fill value") } - final val fillCosts = Array(1.0 / 32, 1.0 / 64, 1.0 / 128) - private def consumePower(n: Double, cost: Double) = node.tryChangeBuffer(-n * cost) // ----------------------------------------------------------------------- // diff --git a/src/main/scala/li/cil/oc/server/component/InternetCard.scala b/src/main/scala/li/cil/oc/server/component/InternetCard.scala index 8d3fa2bd6..d1d3ffe13 100644 --- a/src/main/scala/li/cil/oc/server/component/InternetCard.scala +++ b/src/main/scala/li/cil/oc/server/component/InternetCard.scala @@ -8,11 +8,15 @@ import java.io.OutputStreamWriter import java.net._ import java.nio.ByteBuffer import java.nio.channels.SocketChannel +import java.util import java.util.concurrent.Callable import java.util.concurrent.ConcurrentLinkedQueue import java.util.concurrent.ExecutionException import java.util.concurrent.Future +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback @@ -20,14 +24,16 @@ import li.cil.oc.api.machine.Context import li.cil.oc.api.network._ import li.cil.oc.api.prefab.AbstractValue import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.prefab import li.cil.oc.util.ThreadPoolFactory import net.minecraft.server.MinecraftServer +import scala.collection.convert.WrapAsJava._ import scala.collection.convert.WrapAsScala._ import scala.collection.mutable -class InternetCard extends prefab.ManagedEnvironment { +class InternetCard extends prefab.ManagedEnvironment with DeviceInfo { override val node = Network.newNode(this, Visibility.Network). withComponent("internet", Visibility.Neighbors). create() @@ -38,6 +44,17 @@ class InternetCard extends prefab.ManagedEnvironment { // ----------------------------------------------------------------------- // + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Communication, + DeviceAttribute.Description -> "Internet modem", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "SuperLink X-D4NK" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + + // ----------------------------------------------------------------------- // + @Callback(direct = true, doc = """function():boolean -- Returns whether HTTP requests can be made (config setting).""") def isHttpEnabled(context: Context, args: Arguments): Array[AnyRef] = result(Settings.get.httpEnabled) diff --git a/src/main/scala/li/cil/oc/server/component/Keyboard.scala b/src/main/scala/li/cil/oc/server/component/Keyboard.scala index cea89a397..15e311678 100644 --- a/src/main/scala/li/cil/oc/server/component/Keyboard.scala +++ b/src/main/scala/li/cil/oc/server/component/Keyboard.scala @@ -1,8 +1,14 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.internal.Keyboard.UsabilityChecker import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.api.network.Message @@ -10,12 +16,13 @@ import li.cil.oc.api.network.Visibility import li.cil.oc.api.prefab import net.minecraft.entity.player.EntityPlayer +import scala.collection.convert.WrapAsJava._ import scala.collection.mutable // TODO key up when screen is disconnected from which the key down came // TODO key up after load for anything that was pressed -class Keyboard(val host: EnvironmentHost) extends prefab.ManagedEnvironment with api.internal.Keyboard { +class Keyboard(val host: EnvironmentHost) extends prefab.ManagedEnvironment with api.internal.Keyboard with DeviceInfo { override val node = Network.newNode(this, Visibility.Network). withComponent("keyboard"). create() @@ -28,6 +35,17 @@ class Keyboard(val host: EnvironmentHost) extends prefab.ManagedEnvironment with // ----------------------------------------------------------------------- // + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Input, + DeviceAttribute.Description -> "Keyboard", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Fancytyper MX-Stone" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + + // ----------------------------------------------------------------------- // + def releasePressedKeys(player: EntityPlayer) { pressedKeys.get(player) match { case Some(keys) => for ((code, char) <- keys) { diff --git a/src/main/scala/li/cil/oc/server/component/LinkedCard.scala b/src/main/scala/li/cil/oc/server/component/LinkedCard.scala index 62fadcb94..1f379b487 100644 --- a/src/main/scala/li/cil/oc/server/component/LinkedCard.scala +++ b/src/main/scala/li/cil/oc/server/component/LinkedCard.scala @@ -1,18 +1,25 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context import li.cil.oc.api.network._ import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.prefab import li.cil.oc.server.network.QuantumNetwork import net.minecraft.nbt.NBTTagCompound +import scala.collection.convert.WrapAsJava._ import scala.collection.convert.WrapAsScala._ -class LinkedCard extends prefab.ManagedEnvironment with QuantumNetwork.QuantumNode { +class LinkedCard extends prefab.ManagedEnvironment with QuantumNetwork.QuantumNode with DeviceInfo { override val node = Network.newNode(this, Visibility.Network). withComponent("tunnel", Visibility.Neighbors). withConnector(). @@ -22,6 +29,18 @@ class LinkedCard extends prefab.ManagedEnvironment with QuantumNetwork.QuantumNo // ----------------------------------------------------------------------- // + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Network, + DeviceAttribute.Description -> "Quantumnet controller", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "HyperLink IV: Ender Edition", + DeviceAttribute.Capacity -> Settings.get.maxNetworkPacketSize.toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + + // ----------------------------------------------------------------------- // + @Callback(doc = """function(data...) -- Sends the specified data to the card this one is linked to.""") def send(context: Context, args: Arguments): Array[AnyRef] = { val endpoints = QuantumNetwork.getEndpoints(tunnel).filter(_ != this) diff --git a/src/main/scala/li/cil/oc/server/component/Memory.scala b/src/main/scala/li/cil/oc/server/component/Memory.scala new file mode 100644 index 000000000..28316eed8 --- /dev/null +++ b/src/main/scala/li/cil/oc/server/component/Memory.scala @@ -0,0 +1,29 @@ +package li.cil.oc.server.component + +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.Settings +import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo +import li.cil.oc.api.network.Visibility +import li.cil.oc.api.prefab + +import scala.collection.convert.WrapAsJava._ + +class Memory(val tier: Int) extends prefab.ManagedEnvironment with DeviceInfo { + override val node = Network.newNode(this, Visibility.Network). + create() + + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Memory, + DeviceAttribute.Description -> "Memory bank", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Multipurpose RAM Type", + DeviceAttribute.Clock -> (Settings.get.callBudgets(tier) * 1000).toInt.toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo +} diff --git a/src/main/scala/li/cil/oc/server/component/NetworkCard.scala b/src/main/scala/li/cil/oc/server/component/NetworkCard.scala index e0e7a0421..0c7b25a29 100644 --- a/src/main/scala/li/cil/oc/server/component/NetworkCard.scala +++ b/src/main/scala/li/cil/oc/server/component/NetworkCard.scala @@ -1,10 +1,16 @@ package li.cil.oc.server.component +import java.util + import com.google.common.base.Charsets +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.Network import li.cil.oc.api.component.RackBusConnectable +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.internal.Rack import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback @@ -15,10 +21,11 @@ import li.cil.oc.api.prefab import li.cil.oc.server.{PacketSender => ServerPacketSender} import net.minecraft.nbt._ +import scala.collection.convert.WrapAsJava._ import scala.collection.convert.WrapAsScala._ import scala.collection.mutable -class NetworkCard(val host: EnvironmentHost) extends prefab.ManagedEnvironment with RackBusConnectable { +class NetworkCard(val host: EnvironmentHost) extends prefab.ManagedEnvironment with RackBusConnectable with DeviceInfo { protected val visibility = host match { case _: Rack => Visibility.Neighbors case _ => Visibility.Network @@ -36,6 +43,18 @@ class NetworkCard(val host: EnvironmentHost) extends prefab.ManagedEnvironment w // ----------------------------------------------------------------------- // + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Network, + DeviceAttribute.Description -> "Ethernet controller", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "42i520 (MPN-01)", + DeviceAttribute.Capacity -> Settings.get.maxNetworkPacketSize.toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + + // ----------------------------------------------------------------------- // + @Callback(doc = """function(port:number):boolean -- Opens the specified port. Returns true if the port was opened.""") def open(context: Context, args: Arguments): Array[AnyRef] = { val port = checkPort(args.checkInteger(0)) @@ -87,6 +106,7 @@ class NetworkCard(val host: EnvironmentHost) extends prefab.ManagedEnvironment w result(true) } + // TODO 1.7 Remove, covered by device info now @Callback(direct = true, doc = """function():number -- Gets the maximum packet size (config setting).""") def maxPacketSize(context: Context, args: Arguments): Array[AnyRef] = result(Settings.get.maxNetworkPacketSize) diff --git a/src/main/scala/li/cil/oc/server/component/Redstone.scala b/src/main/scala/li/cil/oc/server/component/Redstone.scala index 8fc0b1fcb..481139c0c 100644 --- a/src/main/scala/li/cil/oc/server/component/Redstone.scala +++ b/src/main/scala/li/cil/oc/server/component/Redstone.scala @@ -1,10 +1,17 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.common.tileentity.traits.BundledRedstoneAware import li.cil.oc.common.tileentity.traits.RedstoneAware import li.cil.oc.server.component +import scala.collection.convert.WrapAsJava._ + object Redstone { class Vanilla(val redstone: EnvironmentHost with RedstoneAware) @@ -20,6 +27,17 @@ object Redstone { extends component.RedstoneVanilla with component.RedstoneWireless class BundledWireless(val redstone: EnvironmentHost with BundledRedstoneAware) - extends component.RedstoneVanilla with component.RedstoneBundled with component.RedstoneWireless + extends component.RedstoneVanilla with component.RedstoneBundled with component.RedstoneWireless { + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Communication, + DeviceAttribute.Description -> "Combined redstone controller", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Rx900-M", + DeviceAttribute.Capacity -> "65536", + DeviceAttribute.Width -> "16" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + } } diff --git a/src/main/scala/li/cil/oc/server/component/RedstoneBundled.scala b/src/main/scala/li/cil/oc/server/component/RedstoneBundled.scala index 17783792d..47dfd3aa8 100644 --- a/src/main/scala/li/cil/oc/server/component/RedstoneBundled.scala +++ b/src/main/scala/li/cil/oc/server/component/RedstoneBundled.scala @@ -1,5 +1,10 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.api.machine.Arguments @@ -7,7 +12,22 @@ import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context import li.cil.oc.common.tileentity.traits.BundledRedstoneAware +import scala.collection.convert.WrapAsJava._ + trait RedstoneBundled extends RedstoneVanilla { + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Communication, + DeviceAttribute.Description -> "Advanced redstone controller", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Rb800-M", + DeviceAttribute.Capacity -> "65536", + DeviceAttribute.Width -> "16" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + + // ----------------------------------------------------------------------- // + override def redstone: EnvironmentHost with BundledRedstoneAware @Callback(direct = true, doc = """function(side:number[, color:number]):number or table -- Get the bundled redstone input on the specified side and with the specified color.""") diff --git a/src/main/scala/li/cil/oc/server/component/RedstoneVanilla.scala b/src/main/scala/li/cil/oc/server/component/RedstoneVanilla.scala index c3ee1694a..f87f13628 100644 --- a/src/main/scala/li/cil/oc/server/component/RedstoneVanilla.scala +++ b/src/main/scala/li/cil/oc/server/component/RedstoneVanilla.scala @@ -1,6 +1,12 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback @@ -12,11 +18,26 @@ import li.cil.oc.util.ExtendedWorld._ import li.cil.oc.util.ExtendedBlock._ import net.minecraftforge.common.util.ForgeDirection -trait RedstoneVanilla extends RedstoneSignaller { +import scala.collection.convert.WrapAsJava._ + +trait RedstoneVanilla extends RedstoneSignaller with DeviceInfo { def redstone: EnvironmentHost with RedstoneAware // ----------------------------------------------------------------------- // + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Communication, + DeviceAttribute.Description -> "Redstone controller", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Rs100-V", + DeviceAttribute.Capacity -> "16", + DeviceAttribute.Width -> "1" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + + // ----------------------------------------------------------------------- // + @Callback(direct = true, doc = """function(side:number):number -- Get the redstone input on the specified side.""") def getInput(context: Context, args: Arguments): Array[AnyRef] = { val side = checkSide(args, 0) diff --git a/src/main/scala/li/cil/oc/server/component/RedstoneWireless.scala b/src/main/scala/li/cil/oc/server/component/RedstoneWireless.scala index 0b000f1c2..c6d059f85 100644 --- a/src/main/scala/li/cil/oc/server/component/RedstoneWireless.scala +++ b/src/main/scala/li/cil/oc/server/component/RedstoneWireless.scala @@ -4,7 +4,11 @@ import codechicken.lib.vec.Vector3 import codechicken.wirelessredstone.core.WirelessReceivingDevice import codechicken.wirelessredstone.core.WirelessTransmittingDevice import cpw.mods.fml.common.Optional +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback @@ -15,11 +19,13 @@ import li.cil.oc.integration.Mods import li.cil.oc.integration.util import net.minecraft.nbt.NBTTagCompound +import scala.collection.convert.WrapAsJava._ + @Optional.InterfaceList(Array( new Optional.Interface(iface = "codechicken.wirelessredstone.core.WirelessReceivingDevice", modid = Mods.IDs.WirelessRedstoneCBE), new Optional.Interface(iface = "codechicken.wirelessredstone.core.WirelessTransmittingDevice", modid = Mods.IDs.WirelessRedstoneCBE) )) -trait RedstoneWireless extends RedstoneSignaller with WirelessReceivingDevice with WirelessTransmittingDevice { +trait RedstoneWireless extends RedstoneSignaller with WirelessReceivingDevice with WirelessTransmittingDevice with DeviceInfo { def redstone: EnvironmentHost var wirelessFrequency = 0 @@ -30,6 +36,19 @@ trait RedstoneWireless extends RedstoneSignaller with WirelessReceivingDevice wi // ----------------------------------------------------------------------- // + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Communication, + DeviceAttribute.Description -> "Wireless redstone controller", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Rw400-M", + DeviceAttribute.Capacity -> "1", + DeviceAttribute.Width -> "1" + ) + + override def getDeviceInfo: java.util.Map[String, String] = deviceInfo + + // ----------------------------------------------------------------------- // + @Callback(doc = """function():number -- Get the wireless redstone input.""") def getWirelessInput(context: Context, args: Arguments): Array[AnyRef] = { wirelessInput = util.WirelessRedstone.getInput(this) diff --git a/src/main/scala/li/cil/oc/server/component/Robot.scala b/src/main/scala/li/cil/oc/server/component/Robot.scala index 0dbc66064..f13bf3bff 100644 --- a/src/main/scala/li/cil/oc/server/component/Robot.scala +++ b/src/main/scala/li/cil/oc/server/component/Robot.scala @@ -1,8 +1,14 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.OpenComputers import li.cil.oc.Settings import li.cil.oc.api +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context @@ -17,7 +23,9 @@ import li.cil.oc.util.ExtendedNBT._ import net.minecraft.nbt.NBTTagCompound import net.minecraftforge.common.util.ForgeDirection -class Robot(val agent: tileentity.Robot) extends prefab.ManagedEnvironment with Agent { +import scala.collection.convert.WrapAsJava._ + +class Robot(val agent: tileentity.Robot) extends prefab.ManagedEnvironment with Agent with DeviceInfo { override val node = api.Network.newNode(this, Visibility.Network). withComponent("robot"). withConnector(Settings.get.bufferRobot). @@ -26,6 +34,16 @@ class Robot(val agent: tileentity.Robot) extends prefab.ManagedEnvironment with val romRobot = Option(api.FileSystem.asManagedEnvironment(api.FileSystem. fromClass(OpenComputers.getClass, Settings.resourceDomain, "lua/component/robot"), "robot")) + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.System, + DeviceAttribute.Description -> "Robot", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Caterpillar", + DeviceAttribute.Capacity -> agent.getSizeInventory.toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + // ----------------------------------------------------------------------- // override protected def checkSideForAction(args: Arguments, n: Int) = agent.toGlobal(args.checkSideForAction(n)) diff --git a/src/main/scala/li/cil/oc/server/component/Server.scala b/src/main/scala/li/cil/oc/server/component/Server.scala index fb7e08163..b73acb772 100644 --- a/src/main/scala/li/cil/oc/server/component/Server.scala +++ b/src/main/scala/li/cil/oc/server/component/Server.scala @@ -3,10 +3,14 @@ package li.cil.oc.server.component import java.lang.Iterable import java.util +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.OpenComputers import li.cil.oc.api import li.cil.oc.api.Machine import li.cil.oc.api.component.RackBusConnectable +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.internal import li.cil.oc.api.machine.MachineHost import li.cil.oc.api.network.Analyzable @@ -27,11 +31,10 @@ import li.cil.oc.util.ExtendedNBT._ import net.minecraft.entity.player.EntityPlayer import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound -import net.minecraftforge.common.util.ForgeDirection import scala.collection.convert.WrapAsJava._ -class Server(val rack: api.internal.Rack, val slot: Int) extends Environment with MachineHost with ServerInventory with ComponentInventory with Analyzable with internal.Server { +class Server(val rack: api.internal.Rack, val slot: Int) extends Environment with MachineHost with ServerInventory with ComponentInventory with Analyzable with internal.Server with DeviceInfo { lazy val machine = Machine.create(this) val node = if (!rack.world.isRemote) machine.node else null @@ -41,6 +44,16 @@ class Server(val rack: api.internal.Rack, val slot: Int) extends Environment wit var lastFileSystemAccess = 0L var lastNetworkActivity = 0L + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.System, + DeviceAttribute.Description -> "Server", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Blader", + DeviceAttribute.Capacity -> getSizeInventory.toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + // ----------------------------------------------------------------------- // // Environment diff --git a/src/main/scala/li/cil/oc/server/component/Tablet.scala b/src/main/scala/li/cil/oc/server/component/Tablet.scala index 2b53ed0e5..90975d2f2 100644 --- a/src/main/scala/li/cil/oc/server/component/Tablet.scala +++ b/src/main/scala/li/cil/oc/server/component/Tablet.scala @@ -1,7 +1,13 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context @@ -9,12 +15,24 @@ import li.cil.oc.api.network.Visibility import li.cil.oc.api.prefab import li.cil.oc.common.item.TabletWrapper -class Tablet(val tablet: TabletWrapper) extends prefab.ManagedEnvironment { +import scala.collection.convert.WrapAsJava._ + +class Tablet(val tablet: TabletWrapper) extends prefab.ManagedEnvironment with DeviceInfo { override val node = Network.newNode(this, Visibility.Network). withComponent("tablet"). withConnector(Settings.get.bufferTablet). create() + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.System, + DeviceAttribute.Description -> "Tablet", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Jogger", + DeviceAttribute.Capacity -> tablet.getSizeInventory.toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + // ----------------------------------------------------------------------- // @Callback(doc = """function():number -- Gets the pitch of the player holding the tablet.""") diff --git a/src/main/scala/li/cil/oc/server/component/Transposer.scala b/src/main/scala/li/cil/oc/server/component/Transposer.scala index 721de5d3b..71b3d222a 100644 --- a/src/main/scala/li/cil/oc/server/component/Transposer.scala +++ b/src/main/scala/li/cil/oc/server/component/Transposer.scala @@ -1,9 +1,15 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api -import li.cil.oc.api.network.EnvironmentHost +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.machine.Arguments +import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.api.network.Visibility import li.cil.oc.api.prefab import li.cil.oc.common.tileentity @@ -11,16 +17,26 @@ import li.cil.oc.server.{PacketSender => ServerPacketSender} import li.cil.oc.util.BlockPosition import li.cil.oc.util.ExtendedArguments._ +import scala.collection.convert.WrapAsJava._ import scala.language.existentials object Transposer { - abstract class Common extends prefab.ManagedEnvironment with traits.WorldInventoryAnalytics with traits.WorldTankAnalytics with traits.InventoryTransfer { + abstract class Common extends prefab.ManagedEnvironment with traits.WorldInventoryAnalytics with traits.WorldTankAnalytics with traits.InventoryTransfer with DeviceInfo { override val node = api.Network.newNode(this, Visibility.Network). withComponent("transposer"). withConnector(). create() + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Generic, + DeviceAttribute.Description -> "Transposer", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "TP4k-iX" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + override protected def checkSideForAction(args: Arguments, n: Int) = args.checkSideAny(n) diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeAngel.scala b/src/main/scala/li/cil/oc/server/component/UpgradeAngel.scala index 6198cdb2b..f50103397 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeAngel.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeAngel.scala @@ -1,13 +1,33 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.Settings import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.network.Visibility import li.cil.oc.api.prefab +import scala.collection.convert.WrapAsJava._ + // Note-to-self: this has a component to allow the robot telling it has the // upgrade. -class UpgradeAngel extends prefab.ManagedEnvironment { +// TODO Remove component in OC 1.7 (device info is sufficient) +class UpgradeAngel extends prefab.ManagedEnvironment with DeviceInfo { override val node = Network.newNode(this, Visibility.Network). withComponent("angel"). create() + + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Generic, + DeviceAttribute.Description -> "Angel upgrade", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "FreePlacer (TM)", + DeviceAttribute.Capacity -> Settings.get.maxNetworkPacketSize.toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo } diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeBattery.scala b/src/main/scala/li/cil/oc/server/component/UpgradeBattery.scala index 56a2cdf6c..44a9c3e1e 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeBattery.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeBattery.scala @@ -1,12 +1,30 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.network.Visibility import li.cil.oc.api.prefab -class UpgradeBattery(val tier: Int) extends prefab.ManagedEnvironment { +import scala.collection.convert.WrapAsJava._ + +class UpgradeBattery(val tier: Int) extends prefab.ManagedEnvironment with DeviceInfo { override val node = Network.newNode(this, Visibility.Network). withConnector(Settings.get.bufferCapacitorUpgrades(tier)). create() + + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Power, + DeviceAttribute.Description -> "Battery", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Unlimited Power (Almost Ed.)", + DeviceAttribute.Capacity -> Settings.get.bufferCapacitorUpgrades(tier).toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo } diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala b/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala index a3834459c..8a933d334 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala @@ -1,8 +1,14 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.OpenComputers import li.cil.oc.Settings import li.cil.oc.api +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context @@ -13,12 +19,23 @@ import li.cil.oc.common.event.ChunkloaderUpgradeHandler import net.minecraftforge.common.ForgeChunkManager import net.minecraftforge.common.ForgeChunkManager.Ticket -class UpgradeChunkloader(val host: EnvironmentHost) extends prefab.ManagedEnvironment { +import scala.collection.convert.WrapAsJava._ + +class UpgradeChunkloader(val host: EnvironmentHost) extends prefab.ManagedEnvironment with DeviceInfo { override val node = api.Network.newNode(this, Visibility.Network). withComponent("chunkloader"). withConnector(). create() + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Generic, + DeviceAttribute.Description -> "World stabilizer", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Realizer9001-CL" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + var ticket: Option[Ticket] = None override val canUpdate = true diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeCrafting.scala b/src/main/scala/li/cil/oc/server/component/UpgradeCrafting.scala index e19c5f8a1..5f358221b 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeCrafting.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeCrafting.scala @@ -1,7 +1,13 @@ package li.cil.oc.server.component +import java.util + import cpw.mods.fml.common.FMLCommonHandler +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.api.internal import li.cil.oc.api.machine.Arguments @@ -17,14 +23,24 @@ import net.minecraft.item.crafting.CraftingManager import net.minecraftforge.common.MinecraftForge import net.minecraftforge.event.entity.player.PlayerDestroyItemEvent +import scala.collection.convert.WrapAsJava._ import scala.collection.mutable import scala.util.control.Breaks._ -class UpgradeCrafting(val host: EnvironmentHost with internal.Robot) extends prefab.ManagedEnvironment { +class UpgradeCrafting(val host: EnvironmentHost with internal.Robot) extends prefab.ManagedEnvironment with DeviceInfo { override val node = Network.newNode(this, Visibility.Network). withComponent("crafting"). create() + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Generic, + DeviceAttribute.Description -> "Assembly controller", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "MultiCombinator-9S" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + @Callback(doc = """function([count:number]):number -- Tries to craft the specified number of items in the top left area of the inventory.""") def craft(context: Context, args: Arguments): Array[AnyRef] = { val count = args.optInteger(0, 64) max 0 min 64 diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeDatabase.scala b/src/main/scala/li/cil/oc/server/component/UpgradeDatabase.scala index fa46803f1..34cf41389 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeDatabase.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeDatabase.scala @@ -1,7 +1,13 @@ package li.cil.oc.server.component +import java.util + import com.google.common.hash.Hashing +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.internal import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback @@ -15,12 +21,24 @@ import net.minecraft.inventory.IInventory import net.minecraft.item.ItemStack import net.minecraft.nbt.CompressedStreamTools -class UpgradeDatabase(val data: IInventory) extends prefab.ManagedEnvironment with internal.Database { +import scala.collection.convert.WrapAsJava._ + +class UpgradeDatabase(val data: IInventory) extends prefab.ManagedEnvironment with internal.Database with DeviceInfo { override val node = Network.newNode(this, Visibility.Network). withComponent("database"). create() - override def size() = data.getSizeInventory + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Generic, + DeviceAttribute.Description -> "Object catalogue", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "iCatalogue (patent pending)", + DeviceAttribute.Capacity -> size.toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + + override def size = data.getSizeInventory override def getStackInSlot(slot: Int) = Option(data.getStackInSlot(slot)).map(_.copy()).orNull diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeExperience.scala b/src/main/scala/li/cil/oc/server/component/UpgradeExperience.scala index 77f4087b9..a3136fd2a 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeExperience.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeExperience.scala @@ -1,7 +1,13 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.api.internal import li.cil.oc.api.machine.Arguments @@ -14,14 +20,25 @@ import net.minecraft.enchantment.EnchantmentHelper import net.minecraft.init.Items import net.minecraft.nbt.NBTTagCompound +import scala.collection.convert.WrapAsJava._ import scala.collection.convert.WrapAsScala._ -class UpgradeExperience(val host: EnvironmentHost with internal.Agent) extends prefab.ManagedEnvironment { +class UpgradeExperience(val host: EnvironmentHost with internal.Agent) extends prefab.ManagedEnvironment with DeviceInfo { override val node = api.Network.newNode(this, Visibility.Network). withComponent("experience"). withConnector(30 * Settings.get.bufferPerLevel). create() + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Generic, + DeviceAttribute.Description -> "Knowledge database", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "ERSO (Event Recorder and Self-Optimizer)", + DeviceAttribute.Capacity -> "30" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + var experience = 0.0 var level = 0 diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala b/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala index ef69e0f47..549b65221 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala @@ -1,7 +1,13 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.internal import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback @@ -15,7 +21,9 @@ import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound import net.minecraft.tileentity.TileEntityFurnace -class UpgradeGenerator(val host: EnvironmentHost with internal.Agent) extends prefab.ManagedEnvironment { +import scala.collection.convert.WrapAsJava._ + +class UpgradeGenerator(val host: EnvironmentHost with internal.Agent) extends prefab.ManagedEnvironment with DeviceInfo { override val node = Network.newNode(this, Visibility.Network). withComponent("generator", Visibility.Neighbors). withConnector(). @@ -25,6 +33,16 @@ class UpgradeGenerator(val host: EnvironmentHost with internal.Agent) extends pr var remainingTicks = 0 + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Power, + DeviceAttribute.Description -> "Generator", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Portagen 2.0 (Rev. 3)", + DeviceAttribute.Capacity -> "1" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + // ----------------------------------------------------------------------- // @Callback(doc = """function([count:number]):boolean -- Tries to insert fuel from the selected slot into the generator's queue.""") diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeInventoryController.scala b/src/main/scala/li/cil/oc/server/component/UpgradeInventoryController.scala index 4eeccdc62..6d931e129 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeInventoryController.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeInventoryController.scala @@ -1,6 +1,12 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.internal import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback @@ -12,9 +18,22 @@ import li.cil.oc.common.tileentity import li.cil.oc.util.BlockPosition import li.cil.oc.util.ExtendedArguments._ +import scala.collection.convert.WrapAsJava._ + object UpgradeInventoryController { - class Adapter(val host: EnvironmentHost) extends prefab.ManagedEnvironment with traits.WorldInventoryAnalytics { + trait Common extends DeviceInfo { + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Generic, + DeviceAttribute.Description -> "Inventory controller", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Item Cataloguer R1" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + } + + class Adapter(val host: EnvironmentHost) extends prefab.ManagedEnvironment with traits.WorldInventoryAnalytics with Common { override val node = Network.newNode(this, Visibility.Network). withComponent("inventory_controller", Visibility.Network). create() @@ -26,7 +45,7 @@ object UpgradeInventoryController { override protected def checkSideForAction(args: Arguments, n: Int) = args.checkSideAny(n) } - class Drone(val host: EnvironmentHost with internal.Agent) extends prefab.ManagedEnvironment with traits.InventoryAnalytics with traits.InventoryWorldControlMk2 with traits.WorldInventoryAnalytics with traits.ItemInventoryControl { + class Drone(val host: EnvironmentHost with internal.Agent) extends prefab.ManagedEnvironment with traits.InventoryAnalytics with traits.InventoryWorldControlMk2 with traits.WorldInventoryAnalytics with traits.ItemInventoryControl with Common { override val node = Network.newNode(this, Visibility.Network). withComponent("inventory_controller", Visibility.Neighbors). create() @@ -44,7 +63,7 @@ object UpgradeInventoryController { override protected def checkSideForAction(args: Arguments, n: Int) = args.checkSideAny(n) } - class Robot(val host: EnvironmentHost with tileentity.Robot) extends prefab.ManagedEnvironment with traits.InventoryAnalytics with traits.InventoryWorldControlMk2 with traits.WorldInventoryAnalytics with traits.ItemInventoryControl { + class Robot(val host: EnvironmentHost with tileentity.Robot) extends prefab.ManagedEnvironment with traits.InventoryAnalytics with traits.InventoryWorldControlMk2 with traits.WorldInventoryAnalytics with traits.ItemInventoryControl with Common { override val node = Network.newNode(this, Visibility.Network). withComponent("inventory_controller", Visibility.Neighbors). create() diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeLeash.scala b/src/main/scala/li/cil/oc/server/component/UpgradeLeash.scala index 73a3850e2..128f2baee 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeLeash.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeLeash.scala @@ -1,9 +1,14 @@ package li.cil.oc.server.component +import java.util import java.util.UUID +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.OpenComputers import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context @@ -20,20 +25,33 @@ import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagString import net.minecraftforge.common.util.Constants.NBT +import scala.collection.convert.WrapAsJava._ import scala.collection.mutable -class UpgradeLeash(val host: Entity) extends prefab.ManagedEnvironment with traits.WorldAware { +class UpgradeLeash(val host: Entity) extends prefab.ManagedEnvironment with traits.WorldAware with DeviceInfo { override val node = Network.newNode(this, Visibility.Network). withComponent("leash"). create() + final val MaxLeashedEntities = 8 + + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Generic, + DeviceAttribute.Description -> "Leash", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "FlockControl (FC-3LS)", + DeviceAttribute.Capacity -> MaxLeashedEntities.toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + val leashedEntities = mutable.Set.empty[UUID] override def position = BlockPosition(host) @Callback(doc = """function(side:number):boolean -- Tries to put an entity on the specified side of the device onto a leash.""") def leash(context: Context, args: Arguments): Array[AnyRef] = { - if (leashedEntities.size >= 8) return result(Unit, "too many leashed entities") + if (leashedEntities.size >= MaxLeashedEntities) return result(Unit, "too many leashed entities") val side = args.checkSideAny(0) val nearBounds = position.bounds val farBounds = nearBounds.offset(side.offsetX * 2.0, side.offsetY * 2.0, side.offsetZ * 2.0) @@ -85,7 +103,7 @@ class UpgradeLeash(val host: Entity) extends prefab.ManagedEnvironment with trai } }) val missing = leashedEntities.diff(foundEntities) - if (missing.size > 0) { + if (missing.nonEmpty) { OpenComputers.log.info(s"Could not find ${missing.size} leashed entities after loading!") leashedEntities --= missing } diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeNavigation.scala b/src/main/scala/li/cil/oc/server/component/UpgradeNavigation.scala index b25f70e01..7b902e144 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeNavigation.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeNavigation.scala @@ -1,14 +1,20 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.Network -import li.cil.oc.api.network.EnvironmentHost +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.internal import li.cil.oc.api.internal.Rotatable import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context +import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.api.network._ import li.cil.oc.api.prefab import li.cil.oc.common.item.data.NavigationUpgradeData @@ -19,7 +25,9 @@ import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound import net.minecraftforge.common.util.ForgeDirection -class UpgradeNavigation(val host: EnvironmentHost with Rotatable) extends prefab.ManagedEnvironment { +import scala.collection.convert.WrapAsJava._ + +class UpgradeNavigation(val host: EnvironmentHost with Rotatable) extends prefab.ManagedEnvironment with DeviceInfo { override val node = Network.newNode(this, Visibility.Network). withComponent("navigation", Visibility.Neighbors). withConnector(). @@ -27,12 +35,22 @@ class UpgradeNavigation(val host: EnvironmentHost with Rotatable) extends prefab val data = new NavigationUpgradeData() + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Generic, + DeviceAttribute.Description -> "Navigation upgrade", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "PathFinder v3", + DeviceAttribute.Capacity -> data.getSize(host.world).toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + // ----------------------------------------------------------------------- // @Callback(doc = """function():number, number, number -- Get the current relative position of the robot.""") def getPosition(context: Context, args: Arguments): Array[AnyRef] = { val info = data.mapData(host.world) - val size = 128 * (1 << info.scale) + val size = data.getSize(host.world) val relativeX = host.xPosition - info.xCenter val relativeZ = host.zPosition - info.zCenter @@ -46,11 +64,7 @@ class UpgradeNavigation(val host: EnvironmentHost with Rotatable) extends prefab def getFacing(context: Context, args: Arguments): Array[AnyRef] = result(host.facing.ordinal) @Callback(doc = """function():number -- Get the operational range of the navigation upgrade.""") - def getRange(context: Context, args: Arguments): Array[AnyRef] = { - val info = data.mapData(host.world) - val size = 128 * (1 << info.scale) - result(size / 2) - } + def getRange(context: Context, args: Arguments): Array[AnyRef] = result(data.getSize(host.world) / 2) @Callback(doc = """function(range:number):table -- Find waypoints in the specified range.""") def findWaypoints(context: Context, args: Arguments): Array[AnyRef] = { diff --git a/src/main/scala/li/cil/oc/server/component/UpgradePiston.scala b/src/main/scala/li/cil/oc/server/component/UpgradePiston.scala index 6c3326bf0..11d95b6dd 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradePiston.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradePiston.scala @@ -1,7 +1,13 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.api.internal import li.cil.oc.api.machine.Arguments @@ -15,12 +21,23 @@ import li.cil.oc.util.ExtendedWorld._ import net.minecraft.init.Blocks import net.minecraftforge.common.util.ForgeDirection -abstract class UpgradePiston(val host: EnvironmentHost) extends prefab.ManagedEnvironment { +import scala.collection.convert.WrapAsJava._ + +abstract class UpgradePiston(val host: EnvironmentHost) extends prefab.ManagedEnvironment with DeviceInfo { override val node = Network.newNode(this, Visibility.Network). withComponent("piston"). withConnector(). create() + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Generic, + DeviceAttribute.Description -> "Piston upgrade", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Displacer II+" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + def pushDirection(args: Arguments, index: Int): ForgeDirection def pushOrigin(side: ForgeDirection) = BlockPosition(host) diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeSign.scala b/src/main/scala/li/cil/oc/server/component/UpgradeSign.scala index 754183385..e1decceda 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeSign.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeSign.scala @@ -1,8 +1,14 @@ package li.cil.oc.server.component +import java.util + import cpw.mods.fml.common.eventhandler.Event +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.api.internal import li.cil.oc.api.network.Message @@ -19,7 +25,18 @@ import net.minecraftforge.common.util.FakePlayerFactory import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.event.world.BlockEvent -abstract class UpgradeSign extends prefab.ManagedEnvironment { +import scala.collection.convert.WrapAsJava._ + +abstract class UpgradeSign extends prefab.ManagedEnvironment with DeviceInfo { + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Generic, + DeviceAttribute.Description -> "Sign upgrade", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Labelizer Deluxe" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + def host: EnvironmentHost protected def getValue(tileEntity: Option[TileEntitySign]): Array[AnyRef] = { diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeSolarGenerator.scala b/src/main/scala/li/cil/oc/server/component/UpgradeSolarGenerator.scala index 183d4b409..d277de285 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeSolarGenerator.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeSolarGenerator.scala @@ -1,7 +1,13 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.api.network.Visibility import li.cil.oc.api.prefab @@ -9,7 +15,9 @@ import li.cil.oc.util.BlockPosition import net.minecraft.world.biome.BiomeGenDesert import net.minecraftforge.common.util.ForgeDirection -class UpgradeSolarGenerator(val host: EnvironmentHost) extends prefab.ManagedEnvironment { +import scala.collection.convert.WrapAsJava._ + +class UpgradeSolarGenerator(val host: EnvironmentHost) extends prefab.ManagedEnvironment with DeviceInfo { override val node = Network.newNode(this, Visibility.Network). withConnector(). create() @@ -18,6 +26,15 @@ class UpgradeSolarGenerator(val host: EnvironmentHost) extends prefab.ManagedEnv var isSunShining = false + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Power, + DeviceAttribute.Description -> "Solar panel", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Enligh10" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + // ----------------------------------------------------------------------- // override val canUpdate = true diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeTank.scala b/src/main/scala/li/cil/oc/server/component/UpgradeTank.scala index 82ea720ed..315a96445 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeTank.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeTank.scala @@ -1,6 +1,12 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.api.network.Visibility import li.cil.oc.api.prefab @@ -9,9 +15,23 @@ import net.minecraftforge.fluids.FluidStack import net.minecraftforge.fluids.FluidTank import net.minecraftforge.fluids.IFluidTank -class UpgradeTank(val owner: EnvironmentHost, val capacity: Int) extends prefab.ManagedEnvironment with IFluidTank { +import scala.collection.convert.WrapAsJava._ + +class UpgradeTank(val owner: EnvironmentHost, val capacity: Int) extends prefab.ManagedEnvironment with IFluidTank with DeviceInfo { override val node = Network.newNode(this, Visibility.None).create() + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Generic, + DeviceAttribute.Description -> "Tank upgrade", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Superblubb V10", + DeviceAttribute.Capacity -> capacity.toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + + // ----------------------------------------------------------------------- // + val tank = new FluidTank(capacity) override def load(nbt: NBTTagCompound) { diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeTankController.scala b/src/main/scala/li/cil/oc/server/component/UpgradeTankController.scala index 7c7cfd508..c1de38a95 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeTankController.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeTankController.scala @@ -1,6 +1,12 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.api.internal import li.cil.oc.api.machine.Arguments @@ -10,9 +16,22 @@ import li.cil.oc.common.tileentity import li.cil.oc.util.BlockPosition import li.cil.oc.util.ExtendedArguments._ +import scala.collection.convert.WrapAsJava._ + object UpgradeTankController { - class Adapter(val host: EnvironmentHost) extends prefab.ManagedEnvironment with traits.WorldTankAnalytics { + trait Common extends DeviceInfo { + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Generic, + DeviceAttribute.Description -> "Tank controller", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "FlowCheckDX" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + } + + class Adapter(val host: EnvironmentHost) extends prefab.ManagedEnvironment with traits.WorldTankAnalytics with Common { override val node = Network.newNode(this, Visibility.Network). withComponent("tank_controller", Visibility.Network). create() @@ -24,7 +43,7 @@ object UpgradeTankController { override protected def checkSideForAction(args: Arguments, n: Int) = args.checkSideAny(n) } - class Drone(val host: EnvironmentHost with internal.Agent) extends prefab.ManagedEnvironment with traits.TankInventoryControl with traits.WorldTankAnalytics { + class Drone(val host: EnvironmentHost with internal.Agent) extends prefab.ManagedEnvironment with traits.TankInventoryControl with traits.WorldTankAnalytics with Common { override val node = Network.newNode(this, Visibility.Network). withComponent("tank_controller", Visibility.Neighbors). create() @@ -46,7 +65,7 @@ object UpgradeTankController { override protected def checkSideForAction(args: Arguments, n: Int) = args.checkSideAny(n) } - class Robot(val host: EnvironmentHost with tileentity.Robot) extends prefab.ManagedEnvironment with traits.TankInventoryControl with traits.WorldTankAnalytics { + class Robot(val host: EnvironmentHost with tileentity.Robot) extends prefab.ManagedEnvironment with traits.TankInventoryControl with traits.WorldTankAnalytics with Common { override val node = Network.newNode(this, Visibility.Network). withComponent("tank_controller", Visibility.Neighbors). create() diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeTractorBeam.scala b/src/main/scala/li/cil/oc/server/component/UpgradeTractorBeam.scala index 2b3d6c2d7..1d792ca67 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeTractorBeam.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeTractorBeam.scala @@ -1,7 +1,13 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.api.internal import li.cil.oc.api.machine.Arguments @@ -14,17 +20,60 @@ import li.cil.oc.util.InventoryUtils import net.minecraft.entity.item.EntityItem import net.minecraft.entity.player.EntityPlayer +import scala.collection.convert.WrapAsJava._ import scala.collection.convert.WrapAsScala._ object UpgradeTractorBeam { - class Player(val owner: EnvironmentHost, val player: () => EntityPlayer) extends UpgradeTractorBeam { + abstract class Common extends prefab.ManagedEnvironment with DeviceInfo { + override val node = Network.newNode(this, Visibility.Network). + withComponent("tractor_beam"). + create() + + private val pickupRadius = 3 + + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Generic, + DeviceAttribute.Description -> "Tractor beam", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "T313-K1N.3515" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + + protected def position: BlockPosition + + protected def collectItem(item: EntityItem): Unit + + private def world = position.world.get + + @Callback(doc = """function():boolean -- Tries to pick up a random item in the robots' vicinity.""") + def suck(context: Context, args: Arguments): Array[AnyRef] = { + val items = world.getEntitiesWithinAABB(classOf[EntityItem], position.bounds.expand(pickupRadius, pickupRadius, pickupRadius)) + .map(_.asInstanceOf[EntityItem]) + .filter(item => item.isEntityAlive && item.delayBeforeCanPickup <= 0) + if (items.nonEmpty) { + val item = items(world.rand.nextInt(items.size)) + val stack = item.getEntityItem + val size = stack.stackSize + collectItem(item) + if (stack.stackSize < size || item.isDead) { + context.pause(Settings.get.suckDelay) + world.playAuxSFX(2003, math.floor(item.posX).toInt, math.floor(item.posY).toInt, math.floor(item.posZ).toInt, 0) + return result(true) + } + } + result(false) + } + } + + class Player(val owner: EnvironmentHost, val player: () => EntityPlayer) extends Common { override protected def position = BlockPosition(owner) override protected def collectItem(item: EntityItem) = item.onCollideWithPlayer(player()) } - class Drone(val owner: internal.Agent) extends UpgradeTractorBeam { + class Drone(val owner: internal.Agent) extends Common { override protected def position = BlockPosition(owner) override protected def collectItem(item: EntityItem) = { @@ -35,36 +84,3 @@ object UpgradeTractorBeam { } } - -abstract class UpgradeTractorBeam extends prefab.ManagedEnvironment { - override val node = Network.newNode(this, Visibility.Network). - withComponent("tractor_beam"). - create() - - private val pickupRadius = 3 - - protected def position: BlockPosition - - protected def collectItem(item: EntityItem): Unit - - private def world = position.world.get - - @Callback(doc = """function():boolean -- Tries to pick up a random item in the robots' vicinity.""") - def suck(context: Context, args: Arguments): Array[AnyRef] = { - val items = world.getEntitiesWithinAABB(classOf[EntityItem], position.bounds.expand(pickupRadius, pickupRadius, pickupRadius)) - .map(_.asInstanceOf[EntityItem]) - .filter(item => item.isEntityAlive && item.delayBeforeCanPickup <= 0) - if (items.nonEmpty) { - val item = items(world.rand.nextInt(items.size)) - val stack = item.getEntityItem - val size = stack.stackSize - collectItem(item) - if (stack.stackSize < size || item.isDead) { - context.pause(Settings.get.suckDelay) - world.playAuxSFX(2003, math.floor(item.posX).toInt, math.floor(item.posY).toInt, math.floor(item.posZ).toInt, 0) - return result(true) - } - } - result(false) - } -} diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeTrading.scala b/src/main/scala/li/cil/oc/server/component/UpgradeTrading.scala index 589204214..a7e7228c8 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeTrading.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeTrading.scala @@ -1,7 +1,13 @@ package li.cil.oc.server.component +import java.util + +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context @@ -13,13 +19,23 @@ import net.minecraft.entity.Entity import net.minecraft.entity.IMerchant import net.minecraft.util.Vec3 +import scala.collection.convert.WrapAsJava._ import scala.collection.convert.WrapAsScala._ -class UpgradeTrading(val host: EnvironmentHost) extends prefab.ManagedEnvironment with traits.WorldAware { +class UpgradeTrading(val host: EnvironmentHost) extends prefab.ManagedEnvironment with traits.WorldAware with DeviceInfo { override val node = Network.newNode(this, Visibility.Network). withComponent("trading"). create() + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Generic, + DeviceAttribute.Description -> "Trading upgrade", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "Capitalism H.O. 1200T" + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + override def position = BlockPosition(host) def maxRange = Settings.get.tradingRange diff --git a/src/main/scala/li/cil/oc/server/component/WirelessNetworkCard.scala b/src/main/scala/li/cil/oc/server/component/WirelessNetworkCard.scala index 378df9279..812173c05 100644 --- a/src/main/scala/li/cil/oc/server/component/WirelessNetworkCard.scala +++ b/src/main/scala/li/cil/oc/server/component/WirelessNetworkCard.scala @@ -1,7 +1,11 @@ package li.cil.oc.server.component import java.io._ +import java.util +import li.cil.oc.Constants +import li.cil.oc.Constants.DeviceInfo.DeviceAttribute +import li.cil.oc.Constants.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.Network @@ -13,6 +17,7 @@ import li.cil.oc.api.network._ import li.cil.oc.util.BlockPosition import net.minecraft.nbt.NBTTagCompound +import scala.collection.convert.WrapAsJava._ import scala.language.implicitConversions class WirelessNetworkCard(host: EnvironmentHost) extends NetworkCard(host) with WirelessEndpoint { @@ -25,6 +30,19 @@ class WirelessNetworkCard(host: EnvironmentHost) extends NetworkCard(host) with // ----------------------------------------------------------------------- // + private final val deviceInfo = Map( + DeviceAttribute.Class -> DeviceClass.Network, + DeviceAttribute.Description -> "Wireless ethernet controller", + DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, + DeviceAttribute.Product -> "62i230 (MPW-01)", + DeviceAttribute.Capacity -> Settings.get.maxNetworkPacketSize.toString, + DeviceAttribute.Width -> Settings.get.maxWirelessRange.toString + ) + + override def getDeviceInfo: util.Map[String, String] = deviceInfo + + // ----------------------------------------------------------------------- // + override def x = BlockPosition(host).x override def y = BlockPosition(host).y diff --git a/src/main/scala/li/cil/oc/server/machine/Machine.scala b/src/main/scala/li/cil/oc/server/machine/Machine.scala index 3fbc61b46..27041ebbe 100644 --- a/src/main/scala/li/cil/oc/server/machine/Machine.scala +++ b/src/main/scala/li/cil/oc/server/machine/Machine.scala @@ -7,6 +7,7 @@ import li.cil.oc.Settings import li.cil.oc.api.Driver import li.cil.oc.api.Network import li.cil.oc.api.detail.MachineAPI +import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.driver.item.CallBudget import li.cil.oc.api.driver.item.Processor import li.cil.oc.api.machine @@ -420,6 +421,29 @@ class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with mach null } + @Callback(direct = true, doc = """function():table -- Collect information on all connected devices.""") + def getDeviceInfo(context: Context, args: Arguments): Array[AnyRef] = { + context.pause(1) // Iterating all nodes is potentially expensive, and I see no practical reason for having to call this frequently. + Array[AnyRef](node.network.nodes.map(n => (n, n.host)).collect { + case (n: Component, deviceInfo: DeviceInfo) => + if (n.canBeSeenFrom(node)) { + Option(deviceInfo.getDeviceInfo) match { + case Some(info) => Option(n.address -> info) + case _ => None + } + } + else None + case (n, deviceInfo: DeviceInfo) => + if (n.canBeReachedFrom(node)) { + Option(deviceInfo.getDeviceInfo) match { + case Some(info) => Option(n.address -> info) + case _ => None + } + } + else None + }.collect { case Some(kvp) => kvp }.toMap) + } + // ----------------------------------------------------------------------- // def isExecuting = state.synchronized(state.contains(Machine.State.Running)) From 9fb8ad57f94c1402f5936284128670b633c63b22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sat, 4 Jun 2016 02:13:31 +0200 Subject: [PATCH 43/48] Avoid herpderps. --- .../scala/li/cil/oc/common/component/TerminalServer.scala | 2 +- src/main/scala/li/cil/oc/common/component/TextBuffer.scala | 2 +- src/main/scala/li/cil/oc/common/tileentity/Adapter.scala | 2 +- src/main/scala/li/cil/oc/common/tileentity/Assembler.scala | 2 +- src/main/scala/li/cil/oc/common/tileentity/Capacitor.scala | 2 +- src/main/scala/li/cil/oc/common/tileentity/Case.scala | 2 +- src/main/scala/li/cil/oc/common/tileentity/Charger.scala | 2 +- .../scala/li/cil/oc/common/tileentity/Disassembler.scala | 2 +- src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala | 2 +- src/main/scala/li/cil/oc/common/tileentity/Hologram.scala | 2 +- .../scala/li/cil/oc/common/tileentity/Microcontroller.scala | 2 +- .../scala/li/cil/oc/common/tileentity/MotionSensor.scala | 2 +- .../scala/li/cil/oc/common/tileentity/PowerConverter.scala | 2 +- src/main/scala/li/cil/oc/common/tileentity/Printer.scala | 2 +- src/main/scala/li/cil/oc/server/component/CPU.scala | 2 +- src/main/scala/li/cil/oc/server/component/DataCard.scala | 6 +++--- .../li/cil/oc/server/component/DiskDriveMountable.scala | 2 +- src/main/scala/li/cil/oc/server/component/Drive.scala | 2 +- src/main/scala/li/cil/oc/server/component/Drone.scala | 2 +- src/main/scala/li/cil/oc/server/component/EEPROM.scala | 2 +- src/main/scala/li/cil/oc/server/component/FileSystem.scala | 2 +- src/main/scala/li/cil/oc/server/component/Geolyzer.scala | 2 +- .../scala/li/cil/oc/server/component/GraphicsCard.scala | 2 +- .../scala/li/cil/oc/server/component/InternetCard.scala | 2 +- src/main/scala/li/cil/oc/server/component/Keyboard.scala | 2 +- src/main/scala/li/cil/oc/server/component/LinkedCard.scala | 2 +- src/main/scala/li/cil/oc/server/component/Memory.scala | 2 +- src/main/scala/li/cil/oc/server/component/NetworkCard.scala | 2 +- src/main/scala/li/cil/oc/server/component/Redstone.scala | 2 +- .../scala/li/cil/oc/server/component/RedstoneBundled.scala | 2 +- .../scala/li/cil/oc/server/component/RedstoneVanilla.scala | 2 +- .../scala/li/cil/oc/server/component/RedstoneWireless.scala | 2 +- src/main/scala/li/cil/oc/server/component/Robot.scala | 2 +- src/main/scala/li/cil/oc/server/component/Server.scala | 2 +- src/main/scala/li/cil/oc/server/component/Tablet.scala | 2 +- src/main/scala/li/cil/oc/server/component/Transposer.scala | 2 +- .../scala/li/cil/oc/server/component/UpgradeAngel.scala | 2 +- .../scala/li/cil/oc/server/component/UpgradeBattery.scala | 2 +- .../li/cil/oc/server/component/UpgradeChunkloader.scala | 2 +- .../scala/li/cil/oc/server/component/UpgradeCrafting.scala | 2 +- .../scala/li/cil/oc/server/component/UpgradeDatabase.scala | 2 +- .../li/cil/oc/server/component/UpgradeExperience.scala | 2 +- .../scala/li/cil/oc/server/component/UpgradeGenerator.scala | 2 +- .../oc/server/component/UpgradeInventoryController.scala | 2 +- .../scala/li/cil/oc/server/component/UpgradeLeash.scala | 2 +- .../li/cil/oc/server/component/UpgradeNavigation.scala | 2 +- .../scala/li/cil/oc/server/component/UpgradePiston.scala | 2 +- src/main/scala/li/cil/oc/server/component/UpgradeSign.scala | 2 +- .../li/cil/oc/server/component/UpgradeSolarGenerator.scala | 2 +- src/main/scala/li/cil/oc/server/component/UpgradeTank.scala | 2 +- .../li/cil/oc/server/component/UpgradeTankController.scala | 2 +- .../li/cil/oc/server/component/UpgradeTractorBeam.scala | 2 +- .../scala/li/cil/oc/server/component/UpgradeTrading.scala | 2 +- .../li/cil/oc/server/component/WirelessNetworkCard.scala | 2 +- 54 files changed, 56 insertions(+), 56 deletions(-) diff --git a/src/main/scala/li/cil/oc/common/component/TerminalServer.scala b/src/main/scala/li/cil/oc/common/component/TerminalServer.scala index 81f8066e2..f0e75ede5 100644 --- a/src/main/scala/li/cil/oc/common/component/TerminalServer.scala +++ b/src/main/scala/li/cil/oc/common/component/TerminalServer.scala @@ -73,7 +73,7 @@ class TerminalServer(val rack: api.internal.Rack, val slot: Int) extends Environ // ----------------------------------------------------------------------- // // DeviceInfo - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Generic, DeviceAttribute.Description -> "Terminal server", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/common/component/TextBuffer.scala b/src/main/scala/li/cil/oc/common/component/TextBuffer.scala index f30dec9da..480255a3b 100644 --- a/src/main/scala/li/cil/oc/common/component/TextBuffer.scala +++ b/src/main/scala/li/cil/oc/common/component/TextBuffer.scala @@ -103,7 +103,7 @@ class TextBuffer(val host: EnvironmentHost) extends prefab.ManagedEnvironment wi relativeLitArea = -1 // Recompute lit area, avoid screens blanking out until something changes. } - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Display, DeviceAttribute.Description -> "Text buffer", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/common/tileentity/Adapter.scala b/src/main/scala/li/cil/oc/common/tileentity/Adapter.scala index 5f8b4d3e0..cbe66e75a 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Adapter.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Adapter.scala @@ -32,7 +32,7 @@ class Adapter extends traits.Environment with traits.ComponentInventory with Ana private val blocksData = Array.fill[Option[BlockData]](6)(None) - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Bus, DeviceAttribute.Description -> "Adapter", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala b/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala index e601cfec2..f3145492f 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala @@ -35,7 +35,7 @@ class Assembler extends traits.Environment with traits.PowerAcceptor with traits var requiredEnergy = 0.0 - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Generic, DeviceAttribute.Description -> "Assembler", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/common/tileentity/Capacitor.scala b/src/main/scala/li/cil/oc/common/tileentity/Capacitor.scala index 4e24c3b78..935b92d28 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Capacitor.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Capacitor.scala @@ -21,7 +21,7 @@ class Capacitor extends traits.Environment with DeviceInfo { withConnector(maxCapacity). create() - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Power, DeviceAttribute.Description -> "Battery", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, 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 79468c444..68db7bb44 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Case.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Case.scala @@ -33,7 +33,7 @@ class Case(var tier: Int) extends traits.PowerAcceptor with traits.Computer with color = Color.byTier(tier) - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.System, DeviceAttribute.Description -> "Computer", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/common/tileentity/Charger.scala b/src/main/scala/li/cil/oc/common/tileentity/Charger.scala index a5b6c630f..f73cd23cc 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Charger.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Charger.scala @@ -43,7 +43,7 @@ class Charger extends traits.Environment with traits.PowerAcceptor with traits.R var invertSignal = false - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Generic, DeviceAttribute.Description -> "Charger", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala b/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala index eea4c70f0..e2e7e2172 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala @@ -49,7 +49,7 @@ class Disassembler extends traits.Environment with traits.PowerAcceptor with tra world.notifyBlocksOfNeighborChange(x, y, z, block) } - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Generic, DeviceAttribute.Description -> "Disassembler", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala b/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala index 8d037094a..123c67c5b 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala @@ -37,7 +37,7 @@ class DiskDrive extends traits.Environment with traits.ComponentInventory with t case _ => None } - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Disk, DeviceAttribute.Description -> "Floppy disk drive", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, 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 ac1876399..f4276b1fb 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala @@ -37,7 +37,7 @@ class Hologram(var tier: Int) extends traits.Environment with SidedEnvironment w final val height = 2 * 16 // 32 bit in an int - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Display, DeviceAttribute.Description -> "Holographic projector", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala b/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala index 88d6a3f21..f782abae2 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala @@ -52,7 +52,7 @@ class Microcontroller extends traits.PowerAcceptor with traits.Hub with traits.C override protected def runSound = None // Microcontrollers are silent. - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.System, DeviceAttribute.Description -> "Microcontroller", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala b/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala index 5a03f9e71..e4c7cd69d 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala @@ -34,7 +34,7 @@ class MotionSensor extends traits.Environment with DeviceInfo { private val trackedEntities = mutable.Map.empty[EntityLivingBase, (Double, Double, Double)] - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Generic, DeviceAttribute.Description -> "Motion sensor", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/common/tileentity/PowerConverter.scala b/src/main/scala/li/cil/oc/common/tileentity/PowerConverter.scala index ff74a2993..3155a830b 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/PowerConverter.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/PowerConverter.scala @@ -20,7 +20,7 @@ class PowerConverter extends traits.PowerAcceptor with traits.Environment with t withConnector(Settings.get.bufferConverter). create() - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Power, DeviceAttribute.Description -> "Power converter", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/common/tileentity/Printer.scala b/src/main/scala/li/cil/oc/common/tileentity/Printer.scala index f8729b5af..b33e608ee 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Printer.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Printer.scala @@ -47,7 +47,7 @@ class Printer extends traits.Environment with traits.Inventory with traits.Rotat val slotInk = 1 val slotOutput = 2 - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Printer, DeviceAttribute.Description -> "3D Printer", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/CPU.scala b/src/main/scala/li/cil/oc/server/component/CPU.scala index 8928fa84b..1d88e1193 100644 --- a/src/main/scala/li/cil/oc/server/component/CPU.scala +++ b/src/main/scala/li/cil/oc/server/component/CPU.scala @@ -17,7 +17,7 @@ class CPU(val tier: Int) extends prefab.ManagedEnvironment with DeviceInfo { override val node = Network.newNode(this, Visibility.Network). create() - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Processor, DeviceAttribute.Description -> "CPU", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/DataCard.scala b/src/main/scala/li/cil/oc/server/component/DataCard.scala index ef619aa61..e4df559fc 100644 --- a/src/main/scala/li/cil/oc/server/component/DataCard.scala +++ b/src/main/scala/li/cil/oc/server/component/DataCard.scala @@ -77,7 +77,7 @@ object DataCard { } class Tier1 extends DataCard { - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Processor, DeviceAttribute.Description -> "Data processor card", DeviceAttribute.Vendor -> "S.C. Ltd.", @@ -138,7 +138,7 @@ object DataCard { } class Tier2 extends Tier1 { - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Processor, DeviceAttribute.Description -> "Data processor card", DeviceAttribute.Vendor -> "S.C. Ltd.", @@ -212,7 +212,7 @@ object DataCard { } class Tier3 extends Tier2 { - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Processor, DeviceAttribute.Description -> "Data processor card", DeviceAttribute.Vendor -> "S.C. Ltd.", diff --git a/src/main/scala/li/cil/oc/server/component/DiskDriveMountable.scala b/src/main/scala/li/cil/oc/server/component/DiskDriveMountable.scala index 797c877ef..1788b0265 100644 --- a/src/main/scala/li/cil/oc/server/component/DiskDriveMountable.scala +++ b/src/main/scala/li/cil/oc/server/component/DiskDriveMountable.scala @@ -44,7 +44,7 @@ class DiskDriveMountable(val rack: api.internal.Rack, val slot: Int) extends pre // ----------------------------------------------------------------------- // // DeviceInfo - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Disk, DeviceAttribute.Description -> "Floppy disk drive", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/Drive.scala b/src/main/scala/li/cil/oc/server/component/Drive.scala index 6d25cca61..1f5dc49bb 100644 --- a/src/main/scala/li/cil/oc/server/component/Drive.scala +++ b/src/main/scala/li/cil/oc/server/component/Drive.scala @@ -53,7 +53,7 @@ class Drive(val capacity: Int, val platterCount: Int, val label: Label, host: Op // ----------------------------------------------------------------------- // - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Disk, DeviceAttribute.Description -> "Hard disk drive", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/Drone.scala b/src/main/scala/li/cil/oc/server/component/Drone.scala index 927f39b45..83f2c9ad9 100644 --- a/src/main/scala/li/cil/oc/server/component/Drone.scala +++ b/src/main/scala/li/cil/oc/server/component/Drone.scala @@ -27,7 +27,7 @@ class Drone(val agent: entity.Drone) extends prefab.ManagedEnvironment with Agen withConnector(Settings.get.bufferDrone). create() - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.System, DeviceAttribute.Description -> "Drone", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/EEPROM.scala b/src/main/scala/li/cil/oc/server/component/EEPROM.scala index e8de86db3..e8b9c41f5 100644 --- a/src/main/scala/li/cil/oc/server/component/EEPROM.scala +++ b/src/main/scala/li/cil/oc/server/component/EEPROM.scala @@ -36,7 +36,7 @@ class EEPROM extends prefab.ManagedEnvironment with DeviceInfo { // ----------------------------------------------------------------------- // - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Memory, DeviceAttribute.Description -> "EEPROM", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/FileSystem.scala b/src/main/scala/li/cil/oc/server/component/FileSystem.scala index 600da9312..62415e04d 100644 --- a/src/main/scala/li/cil/oc/server/component/FileSystem.scala +++ b/src/main/scala/li/cil/oc/server/component/FileSystem.scala @@ -45,7 +45,7 @@ class FileSystem(val fileSystem: IFileSystem, var label: Label, val host: Option // ----------------------------------------------------------------------- // - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Volume, DeviceAttribute.Description -> "Filesystem", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/Geolyzer.scala b/src/main/scala/li/cil/oc/server/component/Geolyzer.scala index 676a04da7..b7e621b00 100644 --- a/src/main/scala/li/cil/oc/server/component/Geolyzer.scala +++ b/src/main/scala/li/cil/oc/server/component/Geolyzer.scala @@ -39,7 +39,7 @@ class Geolyzer(val host: EnvironmentHost) extends prefab.ManagedEnvironment with withConnector(). create() - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Generic, DeviceAttribute.Description -> "Geolyzer", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, 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 23d0763c1..70e2e4285 100644 --- a/src/main/scala/li/cil/oc/server/component/GraphicsCard.scala +++ b/src/main/scala/li/cil/oc/server/component/GraphicsCard.scala @@ -61,7 +61,7 @@ class GraphicsCard(val tier: Int) extends prefab.ManagedEnvironment with DeviceI // ----------------------------------------------------------------------- // - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Display, DeviceAttribute.Description -> "Graphics controller", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/InternetCard.scala b/src/main/scala/li/cil/oc/server/component/InternetCard.scala index d1d3ffe13..71e43aae3 100644 --- a/src/main/scala/li/cil/oc/server/component/InternetCard.scala +++ b/src/main/scala/li/cil/oc/server/component/InternetCard.scala @@ -44,7 +44,7 @@ class InternetCard extends prefab.ManagedEnvironment with DeviceInfo { // ----------------------------------------------------------------------- // - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Communication, DeviceAttribute.Description -> "Internet modem", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/Keyboard.scala b/src/main/scala/li/cil/oc/server/component/Keyboard.scala index 15e311678..860144208 100644 --- a/src/main/scala/li/cil/oc/server/component/Keyboard.scala +++ b/src/main/scala/li/cil/oc/server/component/Keyboard.scala @@ -35,7 +35,7 @@ class Keyboard(val host: EnvironmentHost) extends prefab.ManagedEnvironment with // ----------------------------------------------------------------------- // - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Input, DeviceAttribute.Description -> "Keyboard", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/LinkedCard.scala b/src/main/scala/li/cil/oc/server/component/LinkedCard.scala index 1f379b487..914183775 100644 --- a/src/main/scala/li/cil/oc/server/component/LinkedCard.scala +++ b/src/main/scala/li/cil/oc/server/component/LinkedCard.scala @@ -29,7 +29,7 @@ class LinkedCard extends prefab.ManagedEnvironment with QuantumNetwork.QuantumNo // ----------------------------------------------------------------------- // - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Network, DeviceAttribute.Description -> "Quantumnet controller", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/Memory.scala b/src/main/scala/li/cil/oc/server/component/Memory.scala index 28316eed8..71ec2df14 100644 --- a/src/main/scala/li/cil/oc/server/component/Memory.scala +++ b/src/main/scala/li/cil/oc/server/component/Memory.scala @@ -17,7 +17,7 @@ class Memory(val tier: Int) extends prefab.ManagedEnvironment with DeviceInfo { override val node = Network.newNode(this, Visibility.Network). create() - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Memory, DeviceAttribute.Description -> "Memory bank", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/NetworkCard.scala b/src/main/scala/li/cil/oc/server/component/NetworkCard.scala index 0c7b25a29..41c9e4e4b 100644 --- a/src/main/scala/li/cil/oc/server/component/NetworkCard.scala +++ b/src/main/scala/li/cil/oc/server/component/NetworkCard.scala @@ -43,7 +43,7 @@ class NetworkCard(val host: EnvironmentHost) extends prefab.ManagedEnvironment w // ----------------------------------------------------------------------- // - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Network, DeviceAttribute.Description -> "Ethernet controller", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/Redstone.scala b/src/main/scala/li/cil/oc/server/component/Redstone.scala index 481139c0c..e772184ca 100644 --- a/src/main/scala/li/cil/oc/server/component/Redstone.scala +++ b/src/main/scala/li/cil/oc/server/component/Redstone.scala @@ -28,7 +28,7 @@ object Redstone { class BundledWireless(val redstone: EnvironmentHost with BundledRedstoneAware) extends component.RedstoneVanilla with component.RedstoneBundled with component.RedstoneWireless { - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Communication, DeviceAttribute.Description -> "Combined redstone controller", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/RedstoneBundled.scala b/src/main/scala/li/cil/oc/server/component/RedstoneBundled.scala index 47dfd3aa8..18b8a3e13 100644 --- a/src/main/scala/li/cil/oc/server/component/RedstoneBundled.scala +++ b/src/main/scala/li/cil/oc/server/component/RedstoneBundled.scala @@ -15,7 +15,7 @@ import li.cil.oc.common.tileentity.traits.BundledRedstoneAware import scala.collection.convert.WrapAsJava._ trait RedstoneBundled extends RedstoneVanilla { - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Communication, DeviceAttribute.Description -> "Advanced redstone controller", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/RedstoneVanilla.scala b/src/main/scala/li/cil/oc/server/component/RedstoneVanilla.scala index f87f13628..8238c1d09 100644 --- a/src/main/scala/li/cil/oc/server/component/RedstoneVanilla.scala +++ b/src/main/scala/li/cil/oc/server/component/RedstoneVanilla.scala @@ -25,7 +25,7 @@ trait RedstoneVanilla extends RedstoneSignaller with DeviceInfo { // ----------------------------------------------------------------------- // - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Communication, DeviceAttribute.Description -> "Redstone controller", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/RedstoneWireless.scala b/src/main/scala/li/cil/oc/server/component/RedstoneWireless.scala index c6d059f85..1ac05ecf7 100644 --- a/src/main/scala/li/cil/oc/server/component/RedstoneWireless.scala +++ b/src/main/scala/li/cil/oc/server/component/RedstoneWireless.scala @@ -36,7 +36,7 @@ trait RedstoneWireless extends RedstoneSignaller with WirelessReceivingDevice wi // ----------------------------------------------------------------------- // - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Communication, DeviceAttribute.Description -> "Wireless redstone controller", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/Robot.scala b/src/main/scala/li/cil/oc/server/component/Robot.scala index f13bf3bff..e0b9b6622 100644 --- a/src/main/scala/li/cil/oc/server/component/Robot.scala +++ b/src/main/scala/li/cil/oc/server/component/Robot.scala @@ -34,7 +34,7 @@ class Robot(val agent: tileentity.Robot) extends prefab.ManagedEnvironment with val romRobot = Option(api.FileSystem.asManagedEnvironment(api.FileSystem. fromClass(OpenComputers.getClass, Settings.resourceDomain, "lua/component/robot"), "robot")) - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.System, DeviceAttribute.Description -> "Robot", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/Server.scala b/src/main/scala/li/cil/oc/server/component/Server.scala index b73acb772..2eac77135 100644 --- a/src/main/scala/li/cil/oc/server/component/Server.scala +++ b/src/main/scala/li/cil/oc/server/component/Server.scala @@ -44,7 +44,7 @@ class Server(val rack: api.internal.Rack, val slot: Int) extends Environment wit var lastFileSystemAccess = 0L var lastNetworkActivity = 0L - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.System, DeviceAttribute.Description -> "Server", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/Tablet.scala b/src/main/scala/li/cil/oc/server/component/Tablet.scala index 90975d2f2..92aa6be82 100644 --- a/src/main/scala/li/cil/oc/server/component/Tablet.scala +++ b/src/main/scala/li/cil/oc/server/component/Tablet.scala @@ -23,7 +23,7 @@ class Tablet(val tablet: TabletWrapper) extends prefab.ManagedEnvironment with D withConnector(Settings.get.bufferTablet). create() - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.System, DeviceAttribute.Description -> "Tablet", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/Transposer.scala b/src/main/scala/li/cil/oc/server/component/Transposer.scala index 71b3d222a..7a36cb3d0 100644 --- a/src/main/scala/li/cil/oc/server/component/Transposer.scala +++ b/src/main/scala/li/cil/oc/server/component/Transposer.scala @@ -28,7 +28,7 @@ object Transposer { withConnector(). create() - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Generic, DeviceAttribute.Description -> "Transposer", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeAngel.scala b/src/main/scala/li/cil/oc/server/component/UpgradeAngel.scala index f50103397..034e5edb3 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeAngel.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeAngel.scala @@ -21,7 +21,7 @@ class UpgradeAngel extends prefab.ManagedEnvironment with DeviceInfo { withComponent("angel"). create() - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Generic, DeviceAttribute.Description -> "Angel upgrade", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeBattery.scala b/src/main/scala/li/cil/oc/server/component/UpgradeBattery.scala index 44a9c3e1e..cefd6d4e8 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeBattery.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeBattery.scala @@ -18,7 +18,7 @@ class UpgradeBattery(val tier: Int) extends prefab.ManagedEnvironment with Devic withConnector(Settings.get.bufferCapacitorUpgrades(tier)). create() - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Power, DeviceAttribute.Description -> "Battery", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala b/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala index 8a933d334..d476f5979 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala @@ -27,7 +27,7 @@ class UpgradeChunkloader(val host: EnvironmentHost) extends prefab.ManagedEnviro withConnector(). create() - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Generic, DeviceAttribute.Description -> "World stabilizer", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeCrafting.scala b/src/main/scala/li/cil/oc/server/component/UpgradeCrafting.scala index 5f358221b..3ff4ce490 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeCrafting.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeCrafting.scala @@ -32,7 +32,7 @@ class UpgradeCrafting(val host: EnvironmentHost with internal.Robot) extends pre withComponent("crafting"). create() - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Generic, DeviceAttribute.Description -> "Assembly controller", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeDatabase.scala b/src/main/scala/li/cil/oc/server/component/UpgradeDatabase.scala index 34cf41389..3e0a3644f 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeDatabase.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeDatabase.scala @@ -28,7 +28,7 @@ class UpgradeDatabase(val data: IInventory) extends prefab.ManagedEnvironment wi withComponent("database"). create() - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Generic, DeviceAttribute.Description -> "Object catalogue", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeExperience.scala b/src/main/scala/li/cil/oc/server/component/UpgradeExperience.scala index a3136fd2a..df0127746 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeExperience.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeExperience.scala @@ -29,7 +29,7 @@ class UpgradeExperience(val host: EnvironmentHost with internal.Agent) extends p withConnector(30 * Settings.get.bufferPerLevel). create() - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Generic, DeviceAttribute.Description -> "Knowledge database", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala b/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala index 549b65221..12a68b2ce 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala @@ -33,7 +33,7 @@ class UpgradeGenerator(val host: EnvironmentHost with internal.Agent) extends pr var remainingTicks = 0 - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Power, DeviceAttribute.Description -> "Generator", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeInventoryController.scala b/src/main/scala/li/cil/oc/server/component/UpgradeInventoryController.scala index 6d931e129..fe05aa9b4 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeInventoryController.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeInventoryController.scala @@ -23,7 +23,7 @@ import scala.collection.convert.WrapAsJava._ object UpgradeInventoryController { trait Common extends DeviceInfo { - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Generic, DeviceAttribute.Description -> "Inventory controller", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeLeash.scala b/src/main/scala/li/cil/oc/server/component/UpgradeLeash.scala index 128f2baee..1b3181722 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeLeash.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeLeash.scala @@ -35,7 +35,7 @@ class UpgradeLeash(val host: Entity) extends prefab.ManagedEnvironment with trai final val MaxLeashedEntities = 8 - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Generic, DeviceAttribute.Description -> "Leash", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeNavigation.scala b/src/main/scala/li/cil/oc/server/component/UpgradeNavigation.scala index 7b902e144..fbb0eb6c3 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeNavigation.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeNavigation.scala @@ -35,7 +35,7 @@ class UpgradeNavigation(val host: EnvironmentHost with Rotatable) extends prefab val data = new NavigationUpgradeData() - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Generic, DeviceAttribute.Description -> "Navigation upgrade", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/UpgradePiston.scala b/src/main/scala/li/cil/oc/server/component/UpgradePiston.scala index 11d95b6dd..b68fcd4d4 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradePiston.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradePiston.scala @@ -29,7 +29,7 @@ abstract class UpgradePiston(val host: EnvironmentHost) extends prefab.ManagedEn withConnector(). create() - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Generic, DeviceAttribute.Description -> "Piston upgrade", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeSign.scala b/src/main/scala/li/cil/oc/server/component/UpgradeSign.scala index e1decceda..884af9d7c 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeSign.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeSign.scala @@ -28,7 +28,7 @@ import net.minecraftforge.event.world.BlockEvent import scala.collection.convert.WrapAsJava._ abstract class UpgradeSign extends prefab.ManagedEnvironment with DeviceInfo { - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Generic, DeviceAttribute.Description -> "Sign upgrade", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeSolarGenerator.scala b/src/main/scala/li/cil/oc/server/component/UpgradeSolarGenerator.scala index d277de285..e371903e1 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeSolarGenerator.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeSolarGenerator.scala @@ -26,7 +26,7 @@ class UpgradeSolarGenerator(val host: EnvironmentHost) extends prefab.ManagedEnv var isSunShining = false - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Power, DeviceAttribute.Description -> "Solar panel", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeTank.scala b/src/main/scala/li/cil/oc/server/component/UpgradeTank.scala index 315a96445..0633a112f 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeTank.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeTank.scala @@ -20,7 +20,7 @@ import scala.collection.convert.WrapAsJava._ class UpgradeTank(val owner: EnvironmentHost, val capacity: Int) extends prefab.ManagedEnvironment with IFluidTank with DeviceInfo { override val node = Network.newNode(this, Visibility.None).create() - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Generic, DeviceAttribute.Description -> "Tank upgrade", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeTankController.scala b/src/main/scala/li/cil/oc/server/component/UpgradeTankController.scala index c1de38a95..34e7a619d 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeTankController.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeTankController.scala @@ -21,7 +21,7 @@ import scala.collection.convert.WrapAsJava._ object UpgradeTankController { trait Common extends DeviceInfo { - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Generic, DeviceAttribute.Description -> "Tank controller", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeTractorBeam.scala b/src/main/scala/li/cil/oc/server/component/UpgradeTractorBeam.scala index 1d792ca67..6eae252a7 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeTractorBeam.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeTractorBeam.scala @@ -32,7 +32,7 @@ object UpgradeTractorBeam { private val pickupRadius = 3 - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Generic, DeviceAttribute.Description -> "Tractor beam", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeTrading.scala b/src/main/scala/li/cil/oc/server/component/UpgradeTrading.scala index a7e7228c8..8d40e1775 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeTrading.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeTrading.scala @@ -27,7 +27,7 @@ class UpgradeTrading(val host: EnvironmentHost) extends prefab.ManagedEnvironmen withComponent("trading"). create() - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Generic, DeviceAttribute.Description -> "Trading upgrade", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, diff --git a/src/main/scala/li/cil/oc/server/component/WirelessNetworkCard.scala b/src/main/scala/li/cil/oc/server/component/WirelessNetworkCard.scala index 812173c05..19b0bed94 100644 --- a/src/main/scala/li/cil/oc/server/component/WirelessNetworkCard.scala +++ b/src/main/scala/li/cil/oc/server/component/WirelessNetworkCard.scala @@ -30,7 +30,7 @@ class WirelessNetworkCard(host: EnvironmentHost) extends NetworkCard(host) with // ----------------------------------------------------------------------- // - private final val deviceInfo = Map( + private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Network, DeviceAttribute.Description -> "Wireless ethernet controller", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, From 4626e1ca8e8136a485ca56247069877c25a33f7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sat, 4 Jun 2016 13:55:22 +0200 Subject: [PATCH 44/48] Moved attribute and class constants into API. --- .../java/li/cil/oc/api/driver/DeviceInfo.java | 58 +++++++++++++++++++ src/main/scala/li/cil/oc/Constants.scala | 34 +---------- .../oc/common/component/TerminalServer.scala | 4 +- .../cil/oc/common/component/TextBuffer.scala | 4 +- .../li/cil/oc/common/tileentity/Adapter.scala | 4 +- .../cil/oc/common/tileentity/Assembler.scala | 4 +- .../cil/oc/common/tileentity/Capacitor.scala | 4 +- .../li/cil/oc/common/tileentity/Case.scala | 4 +- .../li/cil/oc/common/tileentity/Charger.scala | 4 +- .../oc/common/tileentity/Disassembler.scala | 4 +- .../cil/oc/common/tileentity/DiskDrive.scala | 4 +- .../cil/oc/common/tileentity/Hologram.scala | 4 +- .../common/tileentity/Microcontroller.scala | 4 +- .../oc/common/tileentity/MotionSensor.scala | 4 +- .../oc/common/tileentity/PowerConverter.scala | 4 +- .../li/cil/oc/common/tileentity/Printer.scala | 4 +- .../li/cil/oc/server/component/APU.scala | 4 +- .../li/cil/oc/server/component/CPU.scala | 4 +- .../li/cil/oc/server/component/DataCard.scala | 4 +- .../server/component/DiskDriveMountable.scala | 4 +- .../li/cil/oc/server/component/Drive.scala | 4 +- .../li/cil/oc/server/component/Drone.scala | 4 +- .../li/cil/oc/server/component/EEPROM.scala | 4 +- .../cil/oc/server/component/FileSystem.scala | 4 +- .../li/cil/oc/server/component/Geolyzer.scala | 4 +- .../oc/server/component/GraphicsCard.scala | 4 +- .../oc/server/component/InternetCard.scala | 4 +- .../li/cil/oc/server/component/Keyboard.scala | 4 +- .../cil/oc/server/component/LinkedCard.scala | 4 +- .../li/cil/oc/server/component/Memory.scala | 4 +- .../cil/oc/server/component/NetworkCard.scala | 4 +- .../li/cil/oc/server/component/Redstone.scala | 4 +- .../oc/server/component/RedstoneBundled.scala | 4 +- .../oc/server/component/RedstoneVanilla.scala | 4 +- .../server/component/RedstoneWireless.scala | 4 +- .../li/cil/oc/server/component/Robot.scala | 4 +- .../li/cil/oc/server/component/Server.scala | 4 +- .../li/cil/oc/server/component/Tablet.scala | 4 +- .../cil/oc/server/component/Transposer.scala | 4 +- .../oc/server/component/UpgradeAngel.scala | 4 +- .../oc/server/component/UpgradeBattery.scala | 4 +- .../server/component/UpgradeChunkloader.scala | 4 +- .../oc/server/component/UpgradeCrafting.scala | 4 +- .../oc/server/component/UpgradeDatabase.scala | 4 +- .../server/component/UpgradeExperience.scala | 4 +- .../server/component/UpgradeGenerator.scala | 4 +- .../UpgradeInventoryController.scala | 4 +- .../oc/server/component/UpgradeLeash.scala | 4 +- .../server/component/UpgradeNavigation.scala | 4 +- .../oc/server/component/UpgradePiston.scala | 4 +- .../cil/oc/server/component/UpgradeSign.scala | 4 +- .../component/UpgradeSolarGenerator.scala | 4 +- .../cil/oc/server/component/UpgradeTank.scala | 4 +- .../component/UpgradeTankController.scala | 4 +- .../server/component/UpgradeTractorBeam.scala | 4 +- .../oc/server/component/UpgradeTrading.scala | 4 +- .../component/WirelessNetworkCard.scala | 4 +- 57 files changed, 169 insertions(+), 143 deletions(-) diff --git a/src/main/java/li/cil/oc/api/driver/DeviceInfo.java b/src/main/java/li/cil/oc/api/driver/DeviceInfo.java index 751190547..76ef8b05d 100644 --- a/src/main/java/li/cil/oc/api/driver/DeviceInfo.java +++ b/src/main/java/li/cil/oc/api/driver/DeviceInfo.java @@ -36,4 +36,62 @@ public interface DeviceInfo { * @return the table of information on this device, or null. */ Map getDeviceInfo(); + + /** + * Recommended list of key values for the device info table. + *

+ * You are strongly encouraged to at least define class, description, + * vendor and product, to allow a more homogenous experience for the + * end-user reading this information via a script. + *

+ * Feel free to be somewhat... flexible with the designated uses of these fields. For example, + * the capacity and size fields have differing meaning depending on the device in OpenComputers + * itself (e.g. they're used for maximum number of characters for graphics cards, width is + * used for bit depth on graphics cards, etc.), just try to stick with what's somewhat logical. + */ + final class DeviceAttribute { + public static final String Class = "class"; // device's class (see below), e.g. "processor" + public static final String Description = "description"; // human-readable description of the hardware node, e.g. "Ethernet interface" + public static final String Vendor = "vendor"; // vendor/manufacturer of the device, e.g. "Minecorp Inc." + public static final String Product = "product"; // product name of the device, e.g. "ATY Raderps 4200X" + public static final String Version = "version"; // version/release of the device, e.g. "2.1.0" + public static final String Serial = "serial"; // serial number of the device + public static final String Capacity = "capacity"; // maximum capacity reported by the device, e.g. unformatted size of a disk + public static final String Size = "size"; // actual size of the device, e.g. actual usable space on a disk + public static final String Clock = "clock"; // bus clock (in Hz) of the device, e.g. call speed(s) of a component + public static final String Width = "width"; // address width of the device, in the broadest sense + + private DeviceAttribute() { + } + } + + /** + * Recommended list of values for the class attribute (see above). + *

+ * Again, feel free to be somewhat creative with those. When in doubt, use generic. + */ + final class DeviceClass { + public static final String System = "system"; // used to refer to the whole machine, e.g. "Computer", "Server", "Robot" + public static final String Bridge = "bridge"; // internal bus converter, maybe useful for some low-level archs? + public static final String Memory = "memory"; // memory bank that can contain data, executable code, e.g. RAM, EEPROM + public static final String Processor = "processor"; // execution processor, e.g. CPU, cryptography support + public static final String Address = "address"; // memory address range, e.g. video memory (again, low-level archs maybe?) + public static final String Storage = "storage"; // storage controller, e.g. IDE controller (low-level...) + public static final String Disk = "disk"; // random-access storage device, e.g. floppies + public static final String Tape = "tape"; // sequential-access storage device, e.g. cassette tapes + public static final String Bus = "bus"; // device-connecting bus, e.g. USB + public static final String Network = "network"; // network interface, e.g. ethernet, wlan + public static final String Display = "display"; // display adapter, e.g. graphics cards + public static final String Input = "input"; // user input device, e.g. keyboard, mouse + public static final String Printer = "printer"; // printing device, e.g. printer, 3D-printer + public static final String Multimedia = "multimedia"; // audio/video device, e.g. sound cards + public static final String Communication = "communication"; // line communication device, e.g. modem, serial ports + public static final String Power = "power"; // energy source, e.g. battery, power supply + public static final String Volume = "volume"; // disk volume, e.g. file system + public static final String Generic = "generic"; // generic device (used when no other class is suitable) + + private DeviceClass() { + } + } + } diff --git a/src/main/scala/li/cil/oc/Constants.scala b/src/main/scala/li/cil/oc/Constants.scala index cdc7540cd..fcb543b6a 100644 --- a/src/main/scala/li/cil/oc/Constants.scala +++ b/src/main/scala/li/cil/oc/Constants.scala @@ -173,39 +173,7 @@ object Constants { object DeviceInfo { - object DeviceAttribute { - final val Class = "class" - final val Description = "description" - final val Vendor = "vendor" - final val Product = "product" - final val Capacity = "capacity" - final val Size = "size" - final val Clock = "clock" - final val Width = "width" - } - - object DeviceClass { - final val System = "system" - final val Bridge = "bridge" - final val Memory = "memory" - final val Processor = "processor" - final val Address = "address" - final val Storage = "storage" - final val Disk = "disk" - final val Tape = "tape" - final val Bus = "bus" - final val Network = "network" - final val Display = "display" - final val Input = "input" - final val Printer = "printer" - final val Multimedia = "multimedia" - final val Communication = "communication" - final val Power = "power" - final val Volume = "volume" - final val Generic = "generic" - } - - final val DefaultVendor = "MightPirates GmbH & Co. KG" + final val DefaultVendor = "MightyPirates GmbH & Co. KG" } diff --git a/src/main/scala/li/cil/oc/common/component/TerminalServer.scala b/src/main/scala/li/cil/oc/common/component/TerminalServer.scala index f0e75ede5..3129da961 100644 --- a/src/main/scala/li/cil/oc/common/component/TerminalServer.scala +++ b/src/main/scala/li/cil/oc/common/component/TerminalServer.scala @@ -4,8 +4,8 @@ import java.util import java.util.UUID import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.component.RackBusConnectable diff --git a/src/main/scala/li/cil/oc/common/component/TextBuffer.scala b/src/main/scala/li/cil/oc/common/component/TextBuffer.scala index 480255a3b..b923b762d 100644 --- a/src/main/scala/li/cil/oc/common/component/TextBuffer.scala +++ b/src/main/scala/li/cil/oc/common/component/TextBuffer.scala @@ -5,8 +5,8 @@ import cpw.mods.fml.common.eventhandler.SubscribeEvent import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.OpenComputers import li.cil.oc.Settings import li.cil.oc.api diff --git a/src/main/scala/li/cil/oc/common/tileentity/Adapter.scala b/src/main/scala/li/cil/oc/common/tileentity/Adapter.scala index cbe66e75a..565fed8f2 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Adapter.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Adapter.scala @@ -3,8 +3,8 @@ package li.cil.oc.common.tileentity import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.Driver diff --git a/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala b/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala index f3145492f..790bf02aa 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Assembler.scala @@ -5,8 +5,8 @@ import java.util import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/common/tileentity/Capacitor.scala b/src/main/scala/li/cil/oc/common/tileentity/Capacitor.scala index 935b92d28..825afbe35 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Capacitor.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Capacitor.scala @@ -3,8 +3,8 @@ package li.cil.oc.common.tileentity import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.driver.DeviceInfo 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 68db7bb44..b71f7464c 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Case.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Case.scala @@ -5,8 +5,8 @@ import java.util import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Driver import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/common/tileentity/Charger.scala b/src/main/scala/li/cil/oc/common/tileentity/Charger.scala index f73cd23cc..faae2be53 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Charger.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Charger.scala @@ -5,8 +5,8 @@ import java.util import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Localization import li.cil.oc.Settings import li.cil.oc.api diff --git a/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala b/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala index e2e7e2172..25c03a21f 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Disassembler.scala @@ -5,8 +5,8 @@ import java.util import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala b/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala index 123c67c5b..3ca7a8665 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala @@ -5,8 +5,8 @@ import java.util import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.api import li.cil.oc.api.Driver import li.cil.oc.api.driver.DeviceInfo 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 f4276b1fb..184df2d5f 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala @@ -5,8 +5,8 @@ import java.util import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly import li.cil.oc._ -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback diff --git a/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala b/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala index f782abae2..24be8b7ee 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Microcontroller.scala @@ -5,8 +5,8 @@ import java.util import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala b/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala index e4c7cd69d..ba6bdfdbc 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/MotionSensor.scala @@ -3,8 +3,8 @@ package li.cil.oc.common.tileentity import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/common/tileentity/PowerConverter.scala b/src/main/scala/li/cil/oc/common/tileentity/PowerConverter.scala index 3155a830b..49e8176aa 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/PowerConverter.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/PowerConverter.scala @@ -5,8 +5,8 @@ import java.util import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/common/tileentity/Printer.scala b/src/main/scala/li/cil/oc/common/tileentity/Printer.scala index b33e608ee..66d9e74bc 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Printer.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Printer.scala @@ -5,8 +5,8 @@ import java.util import cpw.mods.fml.relauncher.Side import cpw.mods.fml.relauncher.SideOnly import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/server/component/APU.scala b/src/main/scala/li/cil/oc/server/component/APU.scala index c08b7cd9c..296f1f1ec 100644 --- a/src/main/scala/li/cil/oc/server/component/APU.scala +++ b/src/main/scala/li/cil/oc/server/component/APU.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import scala.collection.convert.WrapAsJava._ diff --git a/src/main/scala/li/cil/oc/server/component/CPU.scala b/src/main/scala/li/cil/oc/server/component/CPU.scala index 1d88e1193..107d4afe3 100644 --- a/src/main/scala/li/cil/oc/server/component/CPU.scala +++ b/src/main/scala/li/cil/oc/server/component/CPU.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/server/component/DataCard.scala b/src/main/scala/li/cil/oc/server/component/DataCard.scala index e4df559fc..a416242ce 100644 --- a/src/main/scala/li/cil/oc/server/component/DataCard.scala +++ b/src/main/scala/li/cil/oc/server/component/DataCard.scala @@ -14,8 +14,8 @@ import javax.crypto.spec.IvParameterSpec import javax.crypto.spec.SecretKeySpec import com.google.common.hash.Hashing -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/server/component/DiskDriveMountable.scala b/src/main/scala/li/cil/oc/server/component/DiskDriveMountable.scala index 1788b0265..270a1287e 100644 --- a/src/main/scala/li/cil/oc/server/component/DiskDriveMountable.scala +++ b/src/main/scala/li/cil/oc/server/component/DiskDriveMountable.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.api import li.cil.oc.api.Driver import li.cil.oc.api.component.RackBusConnectable diff --git a/src/main/scala/li/cil/oc/server/component/Drive.scala b/src/main/scala/li/cil/oc/server/component/Drive.scala index 1f5dc49bb..3d44eab6a 100644 --- a/src/main/scala/li/cil/oc/server/component/Drive.scala +++ b/src/main/scala/li/cil/oc/server/component/Drive.scala @@ -9,8 +9,8 @@ import java.util.zip.GZIPOutputStream import com.google.common.io.Files import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.OpenComputers import li.cil.oc.Settings import li.cil.oc.api.Network diff --git a/src/main/scala/li/cil/oc/server/component/Drone.scala b/src/main/scala/li/cil/oc/server/component/Drone.scala index 83f2c9ad9..1de1a27b3 100644 --- a/src/main/scala/li/cil/oc/server/component/Drone.scala +++ b/src/main/scala/li/cil/oc/server/component/Drone.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/server/component/EEPROM.scala b/src/main/scala/li/cil/oc/server/component/EEPROM.scala index e8b9c41f5..cc907aff6 100644 --- a/src/main/scala/li/cil/oc/server/component/EEPROM.scala +++ b/src/main/scala/li/cil/oc/server/component/EEPROM.scala @@ -4,8 +4,8 @@ import java.util import com.google.common.hash.Hashing import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/server/component/FileSystem.scala b/src/main/scala/li/cil/oc/server/component/FileSystem.scala index 62415e04d..1b529e6fb 100644 --- a/src/main/scala/li/cil/oc/server/component/FileSystem.scala +++ b/src/main/scala/li/cil/oc/server/component/FileSystem.scala @@ -5,8 +5,8 @@ import java.io.IOException import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/server/component/Geolyzer.scala b/src/main/scala/li/cil/oc/server/component/Geolyzer.scala index b7e621b00..2f5c0f2f1 100644 --- a/src/main/scala/li/cil/oc/server/component/Geolyzer.scala +++ b/src/main/scala/li/cil/oc/server/component/Geolyzer.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.driver.DeviceInfo 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 70e2e4285..dd499c302 100644 --- a/src/main/scala/li/cil/oc/server/component/GraphicsCard.scala +++ b/src/main/scala/li/cil/oc/server/component/GraphicsCard.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Localization import li.cil.oc.Settings import li.cil.oc.api diff --git a/src/main/scala/li/cil/oc/server/component/InternetCard.scala b/src/main/scala/li/cil/oc/server/component/InternetCard.scala index 71e43aae3..ec8f74da4 100644 --- a/src/main/scala/li/cil/oc/server/component/InternetCard.scala +++ b/src/main/scala/li/cil/oc/server/component/InternetCard.scala @@ -15,8 +15,8 @@ import java.util.concurrent.ExecutionException import java.util.concurrent.Future import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback diff --git a/src/main/scala/li/cil/oc/server/component/Keyboard.scala b/src/main/scala/li/cil/oc/server/component/Keyboard.scala index 860144208..16c9524cc 100644 --- a/src/main/scala/li/cil/oc/server/component/Keyboard.scala +++ b/src/main/scala/li/cil/oc/server/component/Keyboard.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.Network diff --git a/src/main/scala/li/cil/oc/server/component/LinkedCard.scala b/src/main/scala/li/cil/oc/server/component/LinkedCard.scala index 914183775..ac7f0d8dd 100644 --- a/src/main/scala/li/cil/oc/server/component/LinkedCard.scala +++ b/src/main/scala/li/cil/oc/server/component/LinkedCard.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback diff --git a/src/main/scala/li/cil/oc/server/component/Memory.scala b/src/main/scala/li/cil/oc/server/component/Memory.scala index 71ec2df14..10ded3517 100644 --- a/src/main/scala/li/cil/oc/server/component/Memory.scala +++ b/src/main/scala/li/cil/oc/server/component/Memory.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/server/component/NetworkCard.scala b/src/main/scala/li/cil/oc/server/component/NetworkCard.scala index 41c9e4e4b..d5823d184 100644 --- a/src/main/scala/li/cil/oc/server/component/NetworkCard.scala +++ b/src/main/scala/li/cil/oc/server/component/NetworkCard.scala @@ -4,8 +4,8 @@ import java.util import com.google.common.base.Charsets import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.Network diff --git a/src/main/scala/li/cil/oc/server/component/Redstone.scala b/src/main/scala/li/cil/oc/server/component/Redstone.scala index e772184ca..93cdd36fd 100644 --- a/src/main/scala/li/cil/oc/server/component/Redstone.scala +++ b/src/main/scala/li/cil/oc/server/component/Redstone.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.common.tileentity.traits.BundledRedstoneAware import li.cil.oc.common.tileentity.traits.RedstoneAware diff --git a/src/main/scala/li/cil/oc/server/component/RedstoneBundled.scala b/src/main/scala/li/cil/oc/server/component/RedstoneBundled.scala index 18b8a3e13..616da070e 100644 --- a/src/main/scala/li/cil/oc/server/component/RedstoneBundled.scala +++ b/src/main/scala/li/cil/oc/server/component/RedstoneBundled.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.network.EnvironmentHost import li.cil.oc.api.machine.Arguments diff --git a/src/main/scala/li/cil/oc/server/component/RedstoneVanilla.scala b/src/main/scala/li/cil/oc/server/component/RedstoneVanilla.scala index 8238c1d09..b3a5c86ba 100644 --- a/src/main/scala/li/cil/oc/server/component/RedstoneVanilla.scala +++ b/src/main/scala/li/cil/oc/server/component/RedstoneVanilla.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.network.EnvironmentHost diff --git a/src/main/scala/li/cil/oc/server/component/RedstoneWireless.scala b/src/main/scala/li/cil/oc/server/component/RedstoneWireless.scala index 1ac05ecf7..3b4f04597 100644 --- a/src/main/scala/li/cil/oc/server/component/RedstoneWireless.scala +++ b/src/main/scala/li/cil/oc/server/component/RedstoneWireless.scala @@ -5,8 +5,8 @@ import codechicken.wirelessredstone.core.WirelessReceivingDevice import codechicken.wirelessredstone.core.WirelessTransmittingDevice import cpw.mods.fml.common.Optional import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.network.EnvironmentHost diff --git a/src/main/scala/li/cil/oc/server/component/Robot.scala b/src/main/scala/li/cil/oc/server/component/Robot.scala index e0b9b6622..40f662803 100644 --- a/src/main/scala/li/cil/oc/server/component/Robot.scala +++ b/src/main/scala/li/cil/oc/server/component/Robot.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.OpenComputers import li.cil.oc.Settings import li.cil.oc.api diff --git a/src/main/scala/li/cil/oc/server/component/Server.scala b/src/main/scala/li/cil/oc/server/component/Server.scala index 2eac77135..61bc9b305 100644 --- a/src/main/scala/li/cil/oc/server/component/Server.scala +++ b/src/main/scala/li/cil/oc/server/component/Server.scala @@ -4,8 +4,8 @@ import java.lang.Iterable import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.OpenComputers import li.cil.oc.api import li.cil.oc.api.Machine diff --git a/src/main/scala/li/cil/oc/server/component/Tablet.scala b/src/main/scala/li/cil/oc/server/component/Tablet.scala index 92aa6be82..bb9aae736 100644 --- a/src/main/scala/li/cil/oc/server/component/Tablet.scala +++ b/src/main/scala/li/cil/oc/server/component/Tablet.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/server/component/Transposer.scala b/src/main/scala/li/cil/oc/server/component/Transposer.scala index 7a36cb3d0..2340b4bbb 100644 --- a/src/main/scala/li/cil/oc/server/component/Transposer.scala +++ b/src/main/scala/li/cil/oc/server/component/Transposer.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeAngel.scala b/src/main/scala/li/cil/oc/server/component/UpgradeAngel.scala index 034e5edb3..77c370224 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeAngel.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeAngel.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeBattery.scala b/src/main/scala/li/cil/oc/server/component/UpgradeBattery.scala index cefd6d4e8..6932f4009 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeBattery.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeBattery.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala b/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala index d476f5979..11234badc 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeChunkloader.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.OpenComputers import li.cil.oc.Settings import li.cil.oc.api diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeCrafting.scala b/src/main/scala/li/cil/oc/server/component/UpgradeCrafting.scala index 3ff4ce490..10f949dc2 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeCrafting.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeCrafting.scala @@ -4,8 +4,8 @@ import java.util import cpw.mods.fml.common.FMLCommonHandler import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.api.Network import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.network.EnvironmentHost diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeDatabase.scala b/src/main/scala/li/cil/oc/server/component/UpgradeDatabase.scala index 3e0a3644f..d38f9ae79 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeDatabase.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeDatabase.scala @@ -4,8 +4,8 @@ import java.util import com.google.common.hash.Hashing import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.api.Network import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.internal diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeExperience.scala b/src/main/scala/li/cil/oc/server/component/UpgradeExperience.scala index df0127746..ebaf9b735 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeExperience.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeExperience.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala b/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala index 12a68b2ce..710f8129a 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeGenerator.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeInventoryController.scala b/src/main/scala/li/cil/oc/server/component/UpgradeInventoryController.scala index fe05aa9b4..f7c7818ab 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeInventoryController.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeInventoryController.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.api.Network import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.internal diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeLeash.scala b/src/main/scala/li/cil/oc/server/component/UpgradeLeash.scala index 1b3181722..5b030a1ec 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeLeash.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeLeash.scala @@ -4,8 +4,8 @@ import java.util import java.util.UUID import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.OpenComputers import li.cil.oc.api.Network import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeNavigation.scala b/src/main/scala/li/cil/oc/server/component/UpgradeNavigation.scala index fbb0eb6c3..0d73a9e0e 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeNavigation.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeNavigation.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.Network diff --git a/src/main/scala/li/cil/oc/server/component/UpgradePiston.scala b/src/main/scala/li/cil/oc/server/component/UpgradePiston.scala index b68fcd4d4..40813ac2d 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradePiston.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradePiston.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeSign.scala b/src/main/scala/li/cil/oc/server/component/UpgradeSign.scala index 884af9d7c..75fab3803 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeSign.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeSign.scala @@ -4,8 +4,8 @@ import java.util import cpw.mods.fml.common.eventhandler.Event import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeSolarGenerator.scala b/src/main/scala/li/cil/oc/server/component/UpgradeSolarGenerator.scala index e371903e1..ec7419a0e 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeSolarGenerator.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeSolarGenerator.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeTank.scala b/src/main/scala/li/cil/oc/server/component/UpgradeTank.scala index 0633a112f..46a5caa8a 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeTank.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeTank.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.api.Network import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.network.EnvironmentHost diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeTankController.scala b/src/main/scala/li/cil/oc/server/component/UpgradeTankController.scala index 34e7a619d..620e50cb5 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeTankController.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeTankController.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.api.Network import li.cil.oc.api.driver.DeviceInfo import li.cil.oc.api.network.EnvironmentHost diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeTractorBeam.scala b/src/main/scala/li/cil/oc/server/component/UpgradeTractorBeam.scala index 6eae252a7..69fc26b25 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeTractorBeam.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeTractorBeam.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/server/component/UpgradeTrading.scala b/src/main/scala/li/cil/oc/server/component/UpgradeTrading.scala index 8d40e1775..7a9c3854a 100644 --- a/src/main/scala/li/cil/oc/server/component/UpgradeTrading.scala +++ b/src/main/scala/li/cil/oc/server/component/UpgradeTrading.scala @@ -3,8 +3,8 @@ package li.cil.oc.server.component import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api.Network import li.cil.oc.api.driver.DeviceInfo diff --git a/src/main/scala/li/cil/oc/server/component/WirelessNetworkCard.scala b/src/main/scala/li/cil/oc/server/component/WirelessNetworkCard.scala index 19b0bed94..5638aa821 100644 --- a/src/main/scala/li/cil/oc/server/component/WirelessNetworkCard.scala +++ b/src/main/scala/li/cil/oc/server/component/WirelessNetworkCard.scala @@ -4,8 +4,8 @@ import java.io._ import java.util import li.cil.oc.Constants -import li.cil.oc.Constants.DeviceInfo.DeviceAttribute -import li.cil.oc.Constants.DeviceInfo.DeviceClass +import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute +import li.cil.oc.api.driver.DeviceInfo.DeviceClass import li.cil.oc.Settings import li.cil.oc.api import li.cil.oc.api.Network From 735ed6b27167df2750cb6828540bce41b9722a8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sat, 4 Jun 2016 16:11:42 +0200 Subject: [PATCH 45/48] For example indeed... --- src/main/java/li/cil/oc/api/driver/DeviceInfo.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/li/cil/oc/api/driver/DeviceInfo.java b/src/main/java/li/cil/oc/api/driver/DeviceInfo.java index 76ef8b05d..0a1c9ae1b 100644 --- a/src/main/java/li/cil/oc/api/driver/DeviceInfo.java +++ b/src/main/java/li/cil/oc/api/driver/DeviceInfo.java @@ -30,7 +30,11 @@ public interface DeviceInfo { *

* For example, OC's tier one memory module returns the following: * - * + * + * + * + * + * *
classmemory
descriptionMemory bank
vendorMightyPirates GmbH & Co. KG
productMultipurpose RAM Type
clock500
* * @return the table of information on this device, or null. From 8da15681bfdfeada401232eb1cfbb18461181e04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 5 Jun 2016 11:04:06 +0200 Subject: [PATCH 46/48] Fixed CPU and memory not being neighbor only visible. Fixed tier numbers being used 0-indexed in device info texts. Fixed machine hosts' device info not being exposed. --- src/main/java/li/cil/oc/api/driver/DeviceInfo.java | 5 +++++ .../scala/li/cil/oc/common/tileentity/Hologram.scala | 2 +- src/main/scala/li/cil/oc/server/component/APU.scala | 2 +- src/main/scala/li/cil/oc/server/component/CPU.scala | 4 ++-- .../li/cil/oc/server/component/GraphicsCard.scala | 2 +- .../scala/li/cil/oc/server/component/Memory.scala | 2 +- .../scala/li/cil/oc/server/machine/Machine.scala | 12 ++++++++++-- 7 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/main/java/li/cil/oc/api/driver/DeviceInfo.java b/src/main/java/li/cil/oc/api/driver/DeviceInfo.java index 0a1c9ae1b..7b12d21fa 100644 --- a/src/main/java/li/cil/oc/api/driver/DeviceInfo.java +++ b/src/main/java/li/cil/oc/api/driver/DeviceInfo.java @@ -7,6 +7,11 @@ import java.util.Map; * expose some (typically static) information about the device represented by * that environment to a {@link li.cil.oc.api.Machine} connected to it. *

+ * You may also implement this on a {@link li.cil.oc.api.machine.MachineHost} + * in which case the Machine will forward that information as + * its own (since MachineHosts usually use the machine's node as + * their own, this avoids a dummy environment used solely for device info). + *

* This is intended to permit programs to reflect on the hardware they are * running on, typically for purely informational purposes, but possibly to * toggle certain hardware specific features. 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 184df2d5f..305f70ce5 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Hologram.scala @@ -41,7 +41,7 @@ class Hologram(var tier: Int) extends traits.Environment with SidedEnvironment w DeviceAttribute.Class -> DeviceClass.Display, DeviceAttribute.Description -> "Holographic projector", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, - DeviceAttribute.Product -> ("VirtualViewer H1-" + tier.toString), + DeviceAttribute.Product -> ("VirtualViewer H1-" + (tier + 1).toString), DeviceAttribute.Capacity -> (width * width * height).toString, DeviceAttribute.Width -> colors.length.toString ) diff --git a/src/main/scala/li/cil/oc/server/component/APU.scala b/src/main/scala/li/cil/oc/server/component/APU.scala index 296f1f1ec..cb3e3a948 100644 --- a/src/main/scala/li/cil/oc/server/component/APU.scala +++ b/src/main/scala/li/cil/oc/server/component/APU.scala @@ -14,7 +14,7 @@ class APU(tier: Int) extends GraphicsCard(tier) { DeviceAttribute.Class -> DeviceClass.Processor, DeviceAttribute.Description -> "APU", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, - DeviceAttribute.Product -> ("FlexiArch " + tier.toString + " Processor (Builtin Graphics)"), + DeviceAttribute.Product -> ("FlexiArch " + (tier + 1).toString + " Processor (Builtin Graphics)"), DeviceAttribute.Capacity -> capacityInfo, DeviceAttribute.Width -> widthInfo, DeviceAttribute.Clock -> ((Settings.get.callBudgets(tier) * 1000).toInt.toString + "+" + clockInfo) diff --git a/src/main/scala/li/cil/oc/server/component/CPU.scala b/src/main/scala/li/cil/oc/server/component/CPU.scala index 107d4afe3..185d95e5b 100644 --- a/src/main/scala/li/cil/oc/server/component/CPU.scala +++ b/src/main/scala/li/cil/oc/server/component/CPU.scala @@ -14,14 +14,14 @@ import li.cil.oc.api.prefab import scala.collection.convert.WrapAsJava._ class CPU(val tier: Int) extends prefab.ManagedEnvironment with DeviceInfo { - override val node = Network.newNode(this, Visibility.Network). + override val node = Network.newNode(this, Visibility.Neighbors). create() private final lazy val deviceInfo = Map( DeviceAttribute.Class -> DeviceClass.Processor, DeviceAttribute.Description -> "CPU", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, - DeviceAttribute.Product -> ("FlexiArch " + tier.toString + " Processor"), + DeviceAttribute.Product -> ("FlexiArch " + (tier + 1).toString + " Processor"), DeviceAttribute.Clock -> (Settings.get.callBudgets(tier) * 1000).toInt.toString ) 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 dd499c302..0fe212ccf 100644 --- a/src/main/scala/li/cil/oc/server/component/GraphicsCard.scala +++ b/src/main/scala/li/cil/oc/server/component/GraphicsCard.scala @@ -65,7 +65,7 @@ class GraphicsCard(val tier: Int) extends prefab.ManagedEnvironment with DeviceI DeviceAttribute.Class -> DeviceClass.Display, DeviceAttribute.Description -> "Graphics controller", DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor, - DeviceAttribute.Product -> ("MPG" + (tier * 1000).toString + " GTZ"), + DeviceAttribute.Product -> ("MPG" + ((tier + 1) * 1000).toString + " GTZ"), DeviceAttribute.Capacity -> capacityInfo, DeviceAttribute.Width -> widthInfo, DeviceAttribute.Clock -> clockInfo diff --git a/src/main/scala/li/cil/oc/server/component/Memory.scala b/src/main/scala/li/cil/oc/server/component/Memory.scala index 10ded3517..64b63d5a0 100644 --- a/src/main/scala/li/cil/oc/server/component/Memory.scala +++ b/src/main/scala/li/cil/oc/server/component/Memory.scala @@ -14,7 +14,7 @@ import li.cil.oc.api.prefab import scala.collection.convert.WrapAsJava._ class Memory(val tier: Int) extends prefab.ManagedEnvironment with DeviceInfo { - override val node = Network.newNode(this, Visibility.Network). + override val node = Network.newNode(this, Visibility.Neighbors). create() private final lazy val deviceInfo = Map( diff --git a/src/main/scala/li/cil/oc/server/machine/Machine.scala b/src/main/scala/li/cil/oc/server/machine/Machine.scala index 27041ebbe..0a04b298e 100644 --- a/src/main/scala/li/cil/oc/server/machine/Machine.scala +++ b/src/main/scala/li/cil/oc/server/machine/Machine.scala @@ -1,5 +1,6 @@ package li.cil.oc.server.machine +import java.util import java.util.concurrent.TimeUnit import li.cil.oc.OpenComputers @@ -47,7 +48,7 @@ import scala.collection.convert.WrapAsJava._ import scala.collection.convert.WrapAsScala._ import scala.collection.mutable -class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with machine.Machine with Runnable { +class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with machine.Machine with Runnable with DeviceInfo { override val node = Network.newNode(this, Visibility.Network). withComponent("computer", Visibility.Neighbors). withConnector(Settings.get.bufferComputer). @@ -178,6 +179,13 @@ class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with mach // ----------------------------------------------------------------------- // + override def getDeviceInfo: util.Map[String, String] = host match { + case deviceInfo: DeviceInfo => deviceInfo.getDeviceInfo + case _ => null + } + + // ----------------------------------------------------------------------- // + override def canInteract(player: String) = !Settings.get.canComputersBeOwned || _users.synchronized(_users.isEmpty || _users.contains(player)) || MinecraftServer.getServer.isSinglePlayer || { @@ -426,7 +434,7 @@ class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with mach context.pause(1) // Iterating all nodes is potentially expensive, and I see no practical reason for having to call this frequently. Array[AnyRef](node.network.nodes.map(n => (n, n.host)).collect { case (n: Component, deviceInfo: DeviceInfo) => - if (n.canBeSeenFrom(node)) { + if (n.canBeSeenFrom(node) || n == node) { Option(deviceInfo.getDeviceInfo) match { case Some(info) => Option(n.address -> info) case _ => None From d931f190077196f02e997aa86d4559e7648a7a0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Mon, 6 Jun 2016 20:12:58 +0200 Subject: [PATCH 47/48] Added saveConfiguration to manual. --- .../assets/opencomputers/doc/en_US/item/nanomachines.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/assets/opencomputers/doc/en_US/item/nanomachines.md b/src/main/resources/assets/opencomputers/doc/en_US/item/nanomachines.md index eff8bfbe8..ac87a14e9 100644 --- a/src/main/resources/assets/opencomputers/doc/en_US/item/nanomachines.md +++ b/src/main/resources/assets/opencomputers/doc/en_US/item/nanomachines.md @@ -27,6 +27,7 @@ Nanomachines react to a simple, proprietary protocol: each packet must consist o - `getInput(index:number)` - Request the current state of the input with the specified index. - `setInput(index:number, value:boolean)` - Set the state of the input with the specified index to the specified value. - `getActiveEffects()` - Request a list of active effects. Note that some effects may not show up in this list. +- `saveConfiguration()` - Requires a set of nanomachines in the players inventory, will store the current configuration to it. For example, in OpenOS: - `component.modem.broadcast(1, "nanomachines", "setInput", 1, true)` will enable the first input. From 2874f4720a01c2d23e4f0d96898c8df6f923a0c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Mon, 6 Jun 2016 20:52:54 +0200 Subject: [PATCH 48/48] Added IMC message to notify OC of a 3rd party power system. Closes #1784. --- src/main/java/li/cil/oc/api/IMC.java | 11 +++++++++++ src/main/scala/li/cil/oc/Settings.scala | 3 ++- src/main/scala/li/cil/oc/common/IMC.scala | 3 +++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/li/cil/oc/api/IMC.java b/src/main/java/li/cil/oc/api/IMC.java index 3e2d7c5a3..4cf7a391b 100644 --- a/src/main/java/li/cil/oc/api/IMC.java +++ b/src/main/java/li/cil/oc/api/IMC.java @@ -361,6 +361,17 @@ public final class IMC { FMLInterModComms.sendMessage(MOD_ID, "blacklistHost", nbt); } + /** + * Notifies OpenComputers that there is some 3rd-party power system present + * that adds integration on its side. + *

+ * This will suppress the "no power system found" message on start up, and + * avoid auto-disabling power use. + */ + public static void registerCustomPowerSystem() { + FMLInterModComms.sendMessage(MOD_ID, "registerCustomPowerSystem", "true"); + } + // ----------------------------------------------------------------------- // private static final String MOD_ID = "OpenComputers"; diff --git a/src/main/scala/li/cil/oc/Settings.scala b/src/main/scala/li/cil/oc/Settings.scala index 801a3bb0d..bb38fce98 100644 --- a/src/main/scala/li/cil/oc/Settings.scala +++ b/src/main/scala/li/cil/oc/Settings.scala @@ -135,8 +135,9 @@ class Settings(val config: Config) { // ----------------------------------------------------------------------- // // power + var is3rdPartyPowerSystemPresent = false val pureIgnorePower = config.getBoolean("power.ignorePower") - lazy val ignorePower = pureIgnorePower || !Mods.isPowerProvidingModPresent + lazy val ignorePower = pureIgnorePower || (!is3rdPartyPowerSystemPresent && !Mods.isPowerProvidingModPresent) val tickFrequency = config.getDouble("power.tickFrequency") max 1 val chargeRateExternal = config.getDouble("power.chargerChargeRate") val chargeRateTablet = config.getDouble("power.chargerChargeRateTablet") diff --git a/src/main/scala/li/cil/oc/common/IMC.scala b/src/main/scala/li/cil/oc/common/IMC.scala index 78aba802e..7cdd67891 100644 --- a/src/main/scala/li/cil/oc/common/IMC.scala +++ b/src/main/scala/li/cil/oc/common/IMC.scala @@ -90,6 +90,9 @@ object IMC { case t: Throwable => OpenComputers.log.warn("Failed registering ink provider.", t) } } + else if (message.key == "registerCustomPowerSystem" && message.isStringMessage) { + Settings.get.is3rdPartyPowerSystemPresent = message.getStringValue == "true" + } else { OpenComputers.log.warn(s"Got an unrecognized or invalid IMC message '${message.key}' from mod ${message.getSender}.") }