From f7893ab2fe1de6e7f0aecb4fda9fc6f6abf7f766 Mon Sep 17 00:00:00 2001 From: kepler155c Date: Wed, 10 Jan 2018 16:48:23 -0500 Subject: [PATCH] autocrafting improvements --- apis/inventoryAdapter.lua | 63 +-- apis/nameDB.lua | 32 +- apps/chestManager.lua | 152 ++++-- apps/crafter.lua | 2 +- apps/namedb.lua | 50 ++ apps/recorder.lua | 100 ++-- apps/storageActivity.lua | 3 +- etc/names/appliedenergistics2.json | 592 ++++++++++++++++++++++ etc/names/computercraft.json | 20 + etc/names/enderio.json | 226 +++++++++ etc/names/exnihiloadscensio.json | 35 ++ etc/names/extrautils2.json | 70 +++ etc/names/ironchest.json | 22 + etc/{blocks.json => names/minecraft.json} | 0 etc/names/rftools.json | 37 ++ etc/names/storagedrawers.json | 33 ++ etc/names/tconstruct.json | 36 ++ etc/recipes/exnihilo.db | 31 ++ etc/recipes/extrautils2.db | 155 +++++- etc/recipes/ironchest.db | 114 +++++ etc/recipes/minecraft.db | 16 + etc/recipes/rftools.db | 126 +++++ etc/recipes/storagedrawers.db | 28 +- etc/recipes/tconstruct.db | 14 + 24 files changed, 1798 insertions(+), 159 deletions(-) create mode 100644 apps/namedb.lua create mode 100644 etc/names/appliedenergistics2.json create mode 100644 etc/names/computercraft.json create mode 100644 etc/names/enderio.json create mode 100644 etc/names/exnihiloadscensio.json create mode 100644 etc/names/extrautils2.json create mode 100644 etc/names/ironchest.json rename etc/{blocks.json => names/minecraft.json} (100%) create mode 100644 etc/names/rftools.json create mode 100644 etc/names/storagedrawers.json create mode 100644 etc/names/tconstruct.json create mode 100644 etc/recipes/ironchest.db create mode 100644 etc/recipes/rftools.db diff --git a/apis/inventoryAdapter.lua b/apis/inventoryAdapter.lua index 57d8a4b..c5d65ae 100644 --- a/apis/inventoryAdapter.lua +++ b/apis/inventoryAdapter.lua @@ -1,5 +1,3 @@ -local Util = require('util') - local Adapter = { } function Adapter.wrap(args) @@ -7,43 +5,46 @@ function Adapter.wrap(args) --'refinedAdapter', 'chestAdapter18', + -- adapters for version 1.7 'meAdapter', 'chestAdapter', } - if args and args.side and args.facing and not args.direction then - args = Util.shallowCopy(args) - local horz = { top = 'down', bottom = 'up' } - args.direction = horz[args.side] - - if not args.direction then - local sides = { - front = 0, - back = 2, - right = 1, - left = 3, - } --- pretty sure computer/turtle have sides reversed - local cards = { - east = 0, - south = 1, - west = 2, - north = 3, - } - local icards = { - [ 0 ] = 'west', - [ 1 ] = 'north', - [ 2 ] = 'east', - [ 3 ] = 'south', - } - args.direction = icards[(cards[args.facing] + sides[args.side]) % 4] - end - end - for _,adapterType in ipairs(adapters) do local adapter = require(adapterType)(args) if adapter:isValid() then + + -- figure out which direction to push/pull items from an inventory + -- based on the side the inventory is attached and which way the + -- turtle/computer is facing + if args and args.facing and adapter.side and not adapter.direction then + local horz = { top = 'down', bottom = 'up' } + adapter.direction = horz[adapter.side] + + if not adapter.direction then + local sides = { + front = 0, + right = 1, + back = 2, + left = 3, + } + -- pretty sure computer/turtle have sides reversed + local cards = { + east = 0, + south = 1, + west = 2, + north = 3, + } + local icards = { + [ 0 ] = 'west', + [ 1 ] = 'north', + [ 2 ] = 'east', + [ 3 ] = 'south', + } + adapter.direction = icards[(cards[args.facing] + sides[adapter.side]) % 4] + end + end return adapter end end diff --git a/apis/nameDB.lua b/apis/nameDB.lua index 0b22bde..f21851e 100644 --- a/apis/nameDB.lua +++ b/apis/nameDB.lua @@ -1,23 +1,33 @@ local JSON = require('json') local TableDB = require('tableDB') +local fs = _G.fs + +local NAME_DIR = '/usr/etc/names' + local nameDB = TableDB() function nameDB:load() - local blocks = JSON.decodeFromFile('usr/etc/blocks.json') + local files = fs.list(NAME_DIR) + table.sort(files) - if not blocks then - error('Unable to read usr/etc/blocks.json') - end + for _,file in ipairs(files) do + local mod = file:match('(%S+).json') + local blocks = JSON.decodeFromFile(fs.combine(NAME_DIR, file)) - for strId, block in pairs(blocks) do - strId = 'minecraft:' .. strId - if type(block.name) == 'string' then - self.data[strId .. ':0'] = block.name - else - for nid,name in pairs(block.name) do - self.data[strId .. ':' .. (nid-1)] = name + if not blocks then + error('Unable to read ' .. fs.combine(NAME_DIR, file)) + end + + for strId, block in pairs(blocks) do + strId = string.format('%s:%s', mod, strId) + if type(block.name) == 'string' then + self.data[strId .. ':0'] = block.name + else + for nid,name in pairs(block.name) do + self.data[strId .. ':' .. (nid-1)] = name + end end end end diff --git a/apps/chestManager.lua b/apps/chestManager.lua index 6c2db65..34420eb 100644 --- a/apps/chestManager.lua +++ b/apps/chestManager.lua @@ -23,13 +23,13 @@ local turtle = _G.turtle multishell.setTitle(multishell.getCurrent(), 'Resource Manager') local config = { - computerFacing = 'north', + computerFacing = 'north', -- direction turtle is facing - inventory = 'back', - craftingChest = 'top', + inventory = 'top', + craftingChest = 'bottom', controller = 'none', - trashDirection = 'up', -- trash /chest in relation to chest + trashDirection = 'up', -- trash/chest in relation to inventory monitor = 'type/monitor', } @@ -49,7 +49,6 @@ if device.workbench then [ 'left' ] = 'right', [ 'right' ] = 'left', } - local duckAntennaSide = oppositeSide[device.workbench.side] duckAntenna = peripheral.wrap(duckAntennaSide) if not duckAntenna or not duckAntenna.getAllStacks then @@ -57,11 +56,16 @@ if device.workbench then end end +local STATUS_INFO = 'info' +local STATUS_WARNING = 'warning' +local STATUS_ERROR = 'error' + local RESOURCE_FILE = 'usr/config/resources.db' local RECIPES_FILE = 'usr/config/recipes.db' local craftingPaused = false -local canCraft = not not duckAntenna or turtleChestAdapter +local canCraft = not not (turtle and turtle.craft) +local canLearn = not not duckAntenna or not not turtleChestAdapter local userRecipes = Util.readTable(RECIPES_FILE) or { } local jobList local resources @@ -188,6 +192,7 @@ local function addCraftingRequest(item, craftList, count) craftList[key] = request end request.count = request.count + count + return request end local function craftItem(recipe, items, originalItem, craftList, count) @@ -199,6 +204,7 @@ local function craftItem(recipe, items, originalItem, craftList, count) if not isGridClear() then if not clearGrid() then originalItem.status = 'Grid obstructed' + originalItem.statusCode = STATUS_ERROR return 0 end end @@ -207,7 +213,7 @@ local function craftItem(recipe, items, originalItem, craftList, count) local toCraft = Craft.getCraftableAmount(recipe, count, items, missing) if missing.name then originalItem.status = string.format('%s missing', itemDB:getName(missing.name)) - originalItem.statusCode = 'missing' + originalItem.statusCode = STATUS_WARNING end local crafted = 0 @@ -222,9 +228,15 @@ local function craftItem(recipe, items, originalItem, craftList, count) if count > 0 and items then local ingredients = Craft.getResourceList4(recipe, items, count) for _,ingredient in pairs(ingredients) do - --if not ingredient.recipe and ingredient.count < 0 then if ingredient.need > 0 then - addCraftingRequest(ingredient, craftList, ingredient.need) + local item = addCraftingRequest(ingredient, craftList, ingredient.need) + if Craft.findRecipe(item) then + item.status = string.format('%s missing', itemDB:getName(ingredient)) + item.statusCode = STATUS_WARNING + else + item.status = 'no recipe' + item.statusCode = STATUS_ERROR + end end end end @@ -278,7 +290,6 @@ local function forceCraftItem(inRecipe, items, originalItem, craftList, inCount) local c = sumItems(summedItem.recipe, need) -- 4 craftable = math.min(craftable, math.floor((used + c) / iqty)) summedItem.craftable = summedItem.craftable + c - end end end @@ -296,9 +307,14 @@ local function forceCraftItem(inRecipe, items, originalItem, craftList, inCount) if count < inCount then for _,ingredient in pairs(summed) do if ingredient.need > 0 then - addCraftingRequest(ingredient, craftList, ingredient.need) - originalItem.status = string.format('%s missing', itemDB:getName(ingredient)) - originalItem.statusCode = 'missing' + local item = addCraftingRequest(ingredient, craftList, ingredient.need) + if Craft.findRecipe(item) then + item.status = string.format('%s missing', itemDB:getName(ingredient)) + item.statusCode = STATUS_WARNING + else + item.status = '(no recipe)' + item.statusCode = STATUS_ERROR + end end end end @@ -306,43 +322,59 @@ local function forceCraftItem(inRecipe, items, originalItem, craftList, inCount) end local function craftItems(craftList, allItems) - for _,key in pairs(Util.keys(craftList)) do - local item = craftList[key] - local recipe = Craft.recipes[key] - if recipe then - item.status = nil - item.statusCode = nil - if item.forceCrafting then - item.crafted = forceCraftItem(recipe, allItems, item, craftList, item.count) - else - item.crafted = craftItem(recipe, allItems, item, craftList, item.count) + + -- turtle crafting + if canCraft then + for _,key in pairs(Util.keys(craftList)) do + local item = craftList[key] + local recipe = Craft.recipes[key] + if recipe then + item.status = nil + item.statusCode = nil + if item.forceCrafting then + item.crafted = forceCraftItem(recipe, allItems, item, craftList, item.count) + else + item.crafted = craftItem(recipe, allItems, item, craftList, item.count) + end + allItems = listItems() -- refresh counts + if not allItems then + break + end + elseif not controllerAdapter then + item.status = '(no recipe)' + item.statusCode = STATUS_ERROR end - allItems = listItems() -- refresh counts - if not allItems then - break - end - elseif item.rsControl then - item.status = 'Activated' end end - for key,item in pairs(craftList) do - if not Craft.recipes[key] and not item.rsControl then - if not controllerAdapter then - item.status = '(no recipe)' - else + -- redstone control + for _,item in pairs(craftList) do + if item.rsControl then + item.status = '(activated)' + item.statusCode = STATUS_INFO + end + end + + -- controller + if controllerAdapter then + for key,item in pairs(craftList) do + if not Craft.recipes[key] and not item.rsControl then if controllerAdapter:isCrafting(item) then item.status = '(crafting)' + item.statusCode = STATUS_INFO else local count = item.count while count >= 1 do -- try to request smaller quantities until successful local s = pcall(function() item.status = '(no recipe)' + item.statusCode = STATUS_ERROR if not controllerAdapter:craft(item, count) then item.status = '(missing ingredients)' + item.statusCode = STATUS_WARNING error('failed') end item.status = '(crafting)' + item.statusCode = STATUS_INFO end) if s then break -- successfully requested crafting @@ -353,6 +385,15 @@ local function craftItems(craftList, allItems) end end end + + if not controllerAdapter and not canCraft then + for _,item in pairs(craftList) do + if not item.rsControl then + item.status = 'Invalid setup' + item.statusCode = STATUS_INFO + end + end + end end local function jobMonitor() @@ -395,11 +436,11 @@ local function jobMonitor() end function jobList.grid:getRowTextColor(row, selected) - if row.status == '(no recipe)' then + if row.statusCode == STATUS_ERROR then return colors.red - elseif row.statusCode == 'missing' then + elseif row.statusCode == STATUS_WARNING then return colors.yellow - elseif row.statusCode == 'success' then + elseif row.statusCode == STATUS_INFO then return colors.lime end return UI.Grid:getRowTextColor(row, selected) @@ -580,12 +621,14 @@ local itemPage = UI.Page { }, help = 'Ignore NBT of item' }, +--[[ [6] = UI.Button { x = 2, y = -2, width = 10, formLabel = 'Redstone', event = 'show_rs', text = 'Configure', }, +]] infoButton = UI.Button { x = 2, y = -2, event = 'show_info', @@ -779,10 +822,10 @@ local listingPage = UI.Page { grid = UI.Grid { y = 2, ey = -2, columns = { - { heading = 'Name', key = 'displayName' , width = 22 }, - { heading = 'Qty', key = 'count' , width = 5 }, - { heading = 'Min', key = 'low' , width = 4 }, - { heading = 'Max', key = 'limit' , width = 4 }, + { heading = 'Name', key = 'displayName' }, + { heading = 'Qty', key = 'count' , width = 4 }, + { heading = 'Min', key = 'low' , width = 4 }, + { heading = 'Max', key = 'limit' , width = 4 }, }, sortColumn = 'displayName', }, @@ -802,6 +845,7 @@ local listingPage = UI.Page { text = 'A', }, }, + notification = UI.Notification(), accelerators = { r = 'refresh', q = 'quit', @@ -864,10 +908,18 @@ function listingPage:eventHandler(event) self.grid:draw() elseif event.type == 'learn' then - UI:setPage('learn') + if canLearn then + UI:setPage('learn') + else + self.notification:error('Missing a crafting chest\nCheck configuration') + end elseif event.type == 'craft' or event.type == 'grid_select_right' then - UI:setPage('craft', self.grid:getSelected()) + if Craft.findRecipe(self.grid:getSelected()) then + UI:setPage('craft', self.grid:getSelected()) + else + self.notification:error('No recipe defined') + end elseif event.type == 'forget' then local item = self.grid:getSelected() @@ -885,7 +937,7 @@ function listingPage:eventHandler(event) saveResources() end - self.statusBar:timedStatus('Forgot: ' .. item.name, 3) + self.notification:info('Forgot: ' .. item.name) self:refresh() self.grid:draw() end @@ -957,7 +1009,7 @@ local function learnRecipe(page) local ingredients = getTurtleInventory() if ingredients then turtle.select(1) - if canCraft and turtle.craft() then + if canLearn and turtle.craft() then local results = getTurtleInventory() if results and results[1] then clearGrid() @@ -1029,7 +1081,7 @@ local function learnRecipe(page) local displayName = itemDB:getName(recipe) listingPage.statusBar.filter:setValue(displayName) - listingPage.statusBar:timedStatus('Learned: ' .. displayName, 3) + listingPage.notification:success('Learned: ' .. displayName) listingPage.filter = displayName listingPage:refresh() listingPage.grid:draw() @@ -1037,10 +1089,10 @@ local function learnRecipe(page) return true end else - page.statusBar:timedStatus('Failed to craft', 3) + listingPage.notification:error('Failed to craft', 3) end else - page.statusBar:timedStatus('No recipe defined', 3) + listingPage.notification:error('No recipe defined', 3) end end @@ -1208,7 +1260,9 @@ function craftPage:eventHandler(event) end loadResources() -clearGrid() +if canCraft then + clearGrid() +end UI:setPages({ listing = listingPage, diff --git a/apps/crafter.lua b/apps/crafter.lua index 7933517..d73166c 100644 --- a/apps/crafter.lua +++ b/apps/crafter.lua @@ -19,7 +19,7 @@ multishell.setTitle(multishell.getCurrent(), 'Crafter') local config = { computerFacing = 'north', - monitor = 'monitor', + monitor = 'type/monitor', } Config.load('crafter', config) diff --git a/apps/namedb.lua b/apps/namedb.lua new file mode 100644 index 0000000..7d5fac9 --- /dev/null +++ b/apps/namedb.lua @@ -0,0 +1,50 @@ +_G.requireInjector() + +local itemDB = require('itemDB') +local json = require('json') +local Util = require('util') + +local args = { ... } +local mod = args[1] or error('Syntax: namedb MOD') + +--[[ + "double_plant": { + "name": ["Sunflower", + "Lilac", + "Double Tallgrass", + "Large Fern", + "Rose Bush", + "Peony"], + }, +--]] + +local list = { } + +for _,v in pairs(itemDB.data) do + local t = Util.split(v.name, '(.-):') + + if t[1] == mod then + local name = t[2] + local damage = v.damage or 0 + local entry = list[name] + if not entry then + entry = { } + list[name] = entry + end + if not entry.name and damage == 0 then + entry.name = v.displayName + else + if not entry.name then + entry.name = { } + elseif type(entry.name) == 'string' then + entry.name = { entry.name } + end + while #entry.name < damage do + entry.name[#entry.name + 1] = '' + end + entry.name[damage + 1] = v.displayName + end + end +end + +json.encodeToFile(string.format('usr/etc/names/%s.json', mod), list) diff --git a/apps/recorder.lua b/apps/recorder.lua index 33cfd34..43214a3 100644 --- a/apps/recorder.lua +++ b/apps/recorder.lua @@ -14,15 +14,17 @@ local version = "Version 1.1.6" -- Original code by Bomb Bloke -- Modified to integrate with opus os -requireInjector(getfenv(1)) +_G.requireInjector() local Util = require('util') +local multishell = _ENV.multishell +local os = _G.os + local recTerm, oldTerm, arg, showInput, skipLast, lastDelay, curInput = {}, Util.shallowCopy(multishell.term), {...}, false, false, 2, "" local curBlink, oldBlink, tTerm, buffer, colourNum, xPos, yPos, oldXPos, oldYPos, tCol, bCol, xSize, ySize = false, false, {}, {}, {}, 1, 1, 1, 1, colours.white, colours.black, oldTerm.getSize() local greys, buttons = {["0"] = true, ["7"] = true, ["8"] = true, ["f"] = true}, {"l", "r", "m"} local charW, charH, chars, resp -local filename local calls = { } local curCalls = { delay = 0 } @@ -39,7 +41,7 @@ end for i = #arg, 1, -1 do local curArg = arg[i]:lower() - + if curArg == "-i" then showInput, ySize = true, ySize + 1 table.remove(arg, i) @@ -108,23 +110,23 @@ end local function safeString(text) local newText = {} - + for i = 1, #text do local val = text:byte(i) newText[i] = (val > 31 and val < 127) and val or 63 end - + return string.char(unpack(newText)) end local function safeCol(text, subst) local newText = {} - + for i = 1, #text do local val = text:sub(i, i) newText[i] = greys[val] and val or subst end - + return table.concat(newText) end @@ -147,7 +149,7 @@ end local tabId = multishell.getCurrent() -multishell.addHotkey('control-p', function() +_G.device.keyboard.addHotkey('control-p', function() os.queueEvent('recorder_stop') end) @@ -185,7 +187,7 @@ while true do end end -multishell.removeHotkey('control-p') +_G.device.keyboard.removeHotkey('control-p') for k,fn in pairs(oldTerm) do multishell.term[k] = fn @@ -206,18 +208,18 @@ print(string.format("Encoding %d frames...", #calls)) do local callListCount, tempCalls, blink, oldBlink, curBlink, blinkDelay = 1, {}, false, false, true, 0 - + for i = 1, #calls - 1 do curCalls = calls[i] tempCalls[callListCount] = curCalls for j = 1, #curCalls do if curCalls[j][1] == "setCursorBlink" then blink = curCalls[j][2] end end - + if blink then if blinkDelay == 0 then curCalls[#curCalls + 1] = {"toggleCur", curBlink} blinkDelay, curBlink = 0.4, not curBlink end - + while tempCalls[callListCount].delay > blinkDelay do local remainder = tempCalls[callListCount].delay - blinkDelay tempCalls[callListCount].delay = blinkDelay @@ -225,19 +227,19 @@ do tempCalls[callListCount] = {{"toggleCur", curBlink}, ["delay"] = remainder} blinkDelay, curBlink = 0.4, not curBlink end - + blinkDelay = blinkDelay - tempCalls[callListCount].delay else if oldBlink then curCalls[#curCalls + 1] = {"toggleCur", false} end blinkDelay = (curCalls.delay - blinkDelay) % 0.4 end - + callListCount, oldBlink = callListCount + 1, blink end - + tempCalls[callListCount] = calls[#calls] tempCalls[callListCount][#tempCalls[callListCount] + 1] = {"toggleCur", false} - + calls, curCalls = tempCalls, nil end @@ -298,33 +300,33 @@ if showInput then for x = 1, xSize do buffer[ySize][x][3] = colourNum[colours.li tTerm.blit = function(text, fgCol, bgCol) if xPos > xSize or xPos + #text - 1 < 1 or yPos < 1 or yPos > ySize then return end - + if not _HOST then text = safeString(text) end - + if not term.isColour() then fgCol = safeCol(fgCol, "0") bgCol = safeCol(bgCol, "f") end - + if xPos < 1 then text = text:sub(2 - xPos) fgCol = fgCol:sub(2 - xPos) bgCol = bgCol:sub(2 - xPos) xPos = 1 end - + if xPos + #text - 1 > xSize then text = text:sub(1, xSize - xPos + 1) fgCol = fgCol:sub(1, xSize - xPos + 1) bgCol = bgCol:sub(1, xSize - xPos + 1) end - + for x = 1, #text do buffer[yPos][xPos + x - 1][1] = text:sub(x, x) buffer[yPos][xPos + x - 1][2] = fgCol:sub(x, x) buffer[yPos][xPos + x - 1][3] = bgCol:sub(x, x) end - + xPos = xPos + #text end @@ -335,21 +337,21 @@ end tTerm.clearLine = function() local oldXPos = xPos - + xPos = 1 tTerm.write(string.rep(" ", xSize)) - + xPos = oldXPos end tTerm.clear = function() local oldXPos, oldYPos = xPos, yPos - + for y = 1, ySize do xPos, yPos = 1, y tTerm.write(string.rep(" ", xSize)) end - + xPos, yPos = oldXPos, oldYPos end @@ -376,7 +378,7 @@ end tTerm.scroll = function(lines) if math.abs(lines) < ySize then local oldXPos, oldYPos = xPos, yPos - + for y = 1, ySize do if y + lines > 0 and y + lines <= ySize then for x = 1, xSize do @@ -388,7 +390,7 @@ tTerm.scroll = function(lines) tTerm.clearLine() end end - + xPos, yPos = oldXPos, oldYPos else tTerm.clear() end end @@ -400,12 +402,12 @@ end tTerm.newInput = function(input) local oldTC, oldBC, oldX, oldY = tCol, bCol, xPos, yPos tCol, bCol, xPos, yPos, ySize, input = colours.grey, colours.lightGrey, 1, ySize + 1, ySize + 1, input .. " " - + while #curInput + #input + 1 > xSize do curInput = curInput:sub(curInput:find(" ") + 1) end curInput = curInput .. input .. " " tTerm.clearLine() tTerm.write(curInput) - + tCol, bCol, xPos, yPos, ySize = oldTC, oldBC, oldX, oldY, ySize - 1 end @@ -422,18 +424,18 @@ local image = {["width"] = xSize * charW, ["height"] = ySize * charH} for i = 1, #calls do local xMin, yMin, xMax, yMax, oldBuffer, curCalls, changed = xSize + 1, ySize + 1, 0, 0, {}, calls[i], false calls[i] = nil - + for y = 1, ySize do oldBuffer[y] = {} for x = 1, xSize do oldBuffer[y][x] = {buffer[y][x][1], buffer[y][x][2], buffer[y][x][3], buffer[y][x][4]} end end - + snooze() - + if showInput then ySize = ySize - 1 end for j = 1, #curCalls do if tTerm[curCalls[j][1]] then tTerm[curCalls[j][1]](unpack(curCalls[j], 2)) end end if showInput then ySize = ySize + 1 end - + if i > 1 then for yy = 1, ySize do for xx = 1, xSize do if buffer[yy][xx][1] ~= oldBuffer[yy][xx][1] or (buffer[yy][xx][2] ~= oldBuffer[yy][xx][2] and buffer[yy][xx][1] ~= " ") or buffer[yy][xx][3] ~= oldBuffer[yy][xx][3] then changed = true @@ -443,7 +445,7 @@ for i = 1, #calls do if yy > yMax then yMax = yy end end end end else xMin, yMin, xMax, yMax, changed = 1, 1, xSize, ySize, true end - + if oldBlink and (xPos ~= oldXPos or yPos ~= oldYPos or not curBlink) and oldXPos > 0 and oldYPos > 0 and oldXPos <= xSize and oldYPos <= ySize then changed = true if oldXPos < xMin then xMin = oldXPos end @@ -452,7 +454,7 @@ for i = 1, #calls do if oldYPos > yMax then yMax = oldYPos end buffer[oldYPos][oldXPos][4] = false end - + if curBlink and (xPos ~= oldXPos or yPos ~= oldYPos or not oldBlink) and xPos > 0 and yPos > 0 and xPos <= xSize and yPos <= ySize then changed = true if xPos < xMin then xMin = xPos end @@ -461,9 +463,9 @@ for i = 1, #calls do if yPos > yMax then yMax = yPos end buffer[yPos][xPos][4] = true end - + oldBlink, oldXPos, oldYPos = curBlink, xPos, yPos - + local thisFrame = { ["xstart"] = (xMin - 1) * charW, ["ystart"] = (yMin - 1) * charH, @@ -472,18 +474,18 @@ for i = 1, #calls do ["delay"] = curCalls.delay, ["disposal"] = 1 } - + for y = 1, (yMax - yMin + 1) * charH do local row = {} for x = 1, (xMax - xMin + 1) * charW do row[x] = " " end thisFrame[y] = row end - + snooze() - + for yy = yMin, yMax do local yBump = (yy - yMin) * charH - + for xx = xMin, xMax do if buffer[yy][xx][1] ~= oldBuffer[yy][xx][1] or (buffer[yy][xx][2] ~= oldBuffer[yy][xx][2] and buffer[yy][xx][1] ~= " ") or buffer[yy][xx][3] ~= oldBuffer[yy][xx][3] or buffer[yy][xx][4] ~= oldBuffer[yy][xx][4] or i == 1 then local thisChar, thisT, thisB, xBump = chars[buffer[yy][xx][1]:byte()], buffer[yy][xx][2], buffer[yy][xx][3], (xx - xMin) * charW if thisChar then @@ -500,35 +502,35 @@ end for y = 1, charH do for x = 1, charW do if thisChar[y][x] then thisFrame[y + yBump][x + xBump] = thisT end end end end end end - + for y = yBump + 1, yBump + charH do local skip, chars, row = 0, {}, {} - + for x = 1, #thisFrame[y] do if thisFrame[y][x] == " " then if #chars > 0 then row[#row + 1] = table.concat(chars) chars = {} end - + skip = skip + 1 else if skip > 0 then row[#row + 1] = skip skip = 0 end - + chars[#chars + 1] = thisFrame[y][x] end end - + if #chars > 0 then row[#row + 1] = table.concat(chars) end thisFrame[y] = row end - + snooze() end - + if changed then image[#image + 1] = thisFrame else diff --git a/apps/storageActivity.lua b/apps/storageActivity.lua index f7e6d57..186f977 100644 --- a/apps/storageActivity.lua +++ b/apps/storageActivity.lua @@ -20,7 +20,7 @@ local changedPage = UI.Page { grid = UI.Grid { ey = -6, columns = { - { heading = 'Qty', key = 'count', width = 5 }, + { heading = 'Qty', key = 'count', width = 6 }, { heading = 'Change', key = 'change', width = 6 }, { heading = 'Rate', key = 'rate', width = 6 }, { heading = 'Name', key = 'displayName' }, @@ -64,6 +64,7 @@ function changedPage.grid:getDisplayValues(row) row.change = ind .. Util.toBytes(row.change) row.count = Util.toBytes(row.count) + row.rate = Util.toBytes(row.rate) return row end diff --git a/etc/names/appliedenergistics2.json b/etc/names/appliedenergistics2.json new file mode 100644 index 0000000..97afeff --- /dev/null +++ b/etc/names/appliedenergistics2.json @@ -0,0 +1,592 @@ +{ + "smooth_sky_stone_block": { + "name": "Sky Stone Block" + }, + "fluix_block": { + "name": "Fluix Block" + }, + "charger": { + "name": "Charger" + }, + "network_tool": { + "name": "Network Tool" + }, + "wireless_terminal": { + "name": [ + "Wireless Terminal" + ] + }, + "certus_quartz_cutting_knife": { + "name": "Certus Quartz Cutting Knife" + }, + "storage_cell_16k": { + "name": "16k ME Storage Cell" + }, + "grindstone": { + "name": "Quartz Grindstone" + }, + "material": { + "name": [ + "Certus Quartz Crystal", + "Charged Certus Quartz Crystal", + "Certus Quartz Dust", + "Nether Quartz Dust", + "", + "", + "", + "Fluix Crystal", + "Fluix Dust", + "Fluix Pearl", + "Pure Certus Quartz Crystal", + "Pure Nether Quartz Crystal", + "Pure Fluix Crystal", + "Inscriber Calculation Press", + "", + "", + "Printed Calculation Circuit", + "Printed Engineering Circuit", + "Printed Logic Circuit", + "", + "Printed Silicon", + "", + "Logic Processor", + "Calculation Processor", + "Engineering Processor", + "", + "", + "", + "Advanced Card", + "", + "Acceleration Card", + "", + "2³ Spatial Component", + "16³ Spatial Component", + "128³ Spatial Component", + "1k ME Storage Component", + "4k ME Storage Component", + "16k ME Storage Component", + "64k ME Storage Component", + "ME Storage Housing", + "", + "Wireless Receiver", + "Wireless Booster", + "Formation Core", + "Annihilation Core", + "", + "", + "", + "", + "", + "", + "", + "Blank Pattern" + ] + }, + "controller": { + "name": "ME Controller" + }, + "quartz_glass": { + "name": "Quartz Glass" + }, + "quartz_growth_accelerator": { + "name": "Crystal Growth Accelerator" + }, + "energy_acceptor": { + "name": "Energy Acceptor" + }, + "part": { + "name": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "ME Glass Cable - Fluix", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "Cable Anchor", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "Quartz Fiber", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "Illuminated Panel", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "ME Storage Bus", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "ME Annihilation Plane", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "ME Pattern Terminal", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "ME Crafting Terminal", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "ME Terminal", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "ME Interface" + ] + }, + "dense_energy_cell": { + "name": "Dense Energy Cell" + }, + "drive": { + "name": "ME Drive" + }, + "crafting_unit": { + "name": "Crafting Unit" + }, + "interface": { + "name": "ME Interface" + }, + "energy_cell": { + "name": "Energy Cell" + }, + "wireless_access_point": { + "name": "ME Wireless Access Point" + }, + "condenser": { + "name": "Matter Condenser" + }, + "nether_quartz_wrench": { + "name": "Nether Quartz Wrench" + }, + "crank": { + "name": "Wooden Crank" + }, + "molecular_assembler": { + "name": "Molecular Assembler" + }, + "chest": { + "name": "ME Chest" + }, + "security_station": { + "name": "ME Security Terminal" + }, + "sky_stone_block": { + "name": "Sky Stone" + }, + "crafting_storage_64k": { + "name": "64k Crafting Storage" + }, + "inscriber": { + "name": "Inscriber" + }, + "crystal_seed": { + "name": [ + "Nether Quartz Seed" + ] + } +} \ No newline at end of file diff --git a/etc/names/computercraft.json b/etc/names/computercraft.json new file mode 100644 index 0000000..64362b6 --- /dev/null +++ b/etc/names/computercraft.json @@ -0,0 +1,20 @@ +{ + "peripheral": { + "name": [ + "Disk Drive", + "", + "", + "", + "Advanced Monitor" + ] + }, + "advanced_modem": { + "name": "Ender Modem" + }, + "pocket_computer": { + "name": [ + "", + "Advanced Pocket Computer" + ] + } +} \ No newline at end of file diff --git a/etc/names/enderio.json b/etc/names/enderio.json new file mode 100644 index 0000000..cd2deb5 --- /dev/null +++ b/etc/names/enderio.json @@ -0,0 +1,226 @@ +{ + "blockSolarPanel": { + "name": [ + "Photovoltaic Cell", + "Advanced Photovoltaic Cell", + "Vibrant Photovoltaic Cell" + ] + }, + "blockFusedQuartz": { + "name": [ + "Fused Quartz", + "Quite Clear Glass", + "Enlightened Fused Quartz", + "", + "Dark Fused Quartz", + "Dark Clear Glass" + ] + }, + "blockVacuumChest": { + "name": [ + "Vacuum Chest" + ] + }, + "itemExtractSpeedUpgrade": { + "name": "Item Conduit Speed Upgrade" + }, + "blockPainter": { + "name": "Painting Machine" + }, + "blockTransceiver": { + "name": "Dimensional Transceiver" + }, + "darkSteel_chestplate": { + "name": "Dark Plate" + }, + "blockSliceAndSplice": { + "name": "Slice'N'Splice" + }, + "itemConduitFacade": { + "name": "Conduit Facade" + }, + "itemBasicFilterUpgrade": { + "name": [ + "Basic Item Filter", + "Advanced Item Filter", + "Counting Item Filter" + ] + }, + "blockExperienceObelisk": { + "name": "Experience Obelisk" + }, + "itemLiquidConduit": { + "name": [ + "Fluid Conduit", + "Pressurized Fluid Conduit", + "Ender Fluid Conduit" + ] + }, + "blockFarmStation": { + "name": "Farming Station" + }, + "blockEndermanSkull": { + "name": [ + "Enderman Head", + "", + "Tormented Enderman Head" + ] + }, + "blockAlloySmelter": { + "name": "Alloy Smelter" + }, + "itemRedstoneConduit": { + "name": "Redstone Conduit" + }, + "itemPowerConduit": { + "name": [ + "Energy Conduit", + "Enhanced Energy Conduit", + "Ender Energy Conduit" + ] + }, + "itemTravelStaff": { + "name": "Staff of Traveling" + }, + "blockSagMill": { + "name": [ + "SAG Mill (Configured)" + ] + }, + "itemItemConduit": { + "name": "Item Conduit" + }, + "itemConduitProbe": { + "name": "Conduit Probe" + }, + "itemPowderIngot": { + "name": [ + "", + "", + "", + "", + "", + "", + "Enderium Base" + ] + }, + "blockBuffer": { + "name": [ + "Item Buffer" + ] + }, + "blockPoweredSpawner": { + "name": "Powered Spawner" + }, + "itemBasicCapacitor": { + "name": [ + "Basic Capacitor", + "Double-Layer Capacitor", + "Octadic Capacitor", + "Modified Power Holding Device" + ] + }, + "blockCapBank": { + "name": [ + "", + "Basic Capacitor Bank", + "Capacitor Bank", + "Vibrant Capacitor Bank" + ] + }, + "blockTank": { + "name": [ + "Fluid Tank (Configured)" + ] + }, + "blockKillerJoe": { + "name": [ + "Killer Joe" + ] + }, + "blockWirelessCharger": { + "name": "Wireless Charger" + }, + "darkSteel_sword": { + "name": [ + "The Ender" + ] + }, + "blockVat": { + "name": [ + "The Vat" + ] + }, + "itemBrokenSpawner": { + "name": "Broken Spawner" + }, + "blockSoulBinder": { + "name": "Soul Binder" + }, + "itemMachinePart": { + "name": [ + "Machine Chassis", + "Basic Gear" + ] + }, + "itemYetaWrench": { + "name": "Yeta Wrench" + }, + "itemAlloy": { + "name": [ + "Electrical Steel", + "Energetic Alloy", + "Vibrant Alloy", + "Redstone Alloy", + "Conductive Iron", + "Pulsating Iron", + "Dark Steel", + "Soularium" + ] + }, + "itemXpTransfer": { + "name": "Experience Rod" + }, + "itemFrankenSkull": { + "name": [ + "Zombie Electrode", + "Z-Logic Controller", + "Frank'N'Zombie", + "Ender Resonator", + "Sentient Ender", + "Skeletal Contractor" + ] + }, + "blockReservoir": { + "name": "Reservoir" + }, + "itemSoulVessel": { + "name": [ + "Soul Vial", + "Soul Vial" + ] + }, + "itemMaterial": { + "name": [ + "Silicon", + "Conduit Binder", + "Binder Composite", + "Pulsating Iron Nugget", + "Vibrant Alloy Nugget", + "Pulsating Crystal", + "Vibrant Crystal", + "", + "Ender Crystal", + "Enticing Crystal", + "", + "", + "", + "Grains of the End", + "", + "Precient Crystal", + "", + "", + "Plant clippings and trimmings" + ] + } +} \ No newline at end of file diff --git a/etc/names/exnihiloadscensio.json b/etc/names/exnihiloadscensio.json new file mode 100644 index 0000000..f3bda42 --- /dev/null +++ b/etc/names/exnihiloadscensio.json @@ -0,0 +1,35 @@ +{ + "blockDust": { + "name": "Dust" + }, + "blockBarrel1": { + "name": "Stone Barrel" + }, + "hammerStone": { + "name": "Stone Hammer" + }, + "itemMaterial": { + "name": [ + "", + "Porcelain Clay", + "Silkworm", + "Ancient Spores", + "Grass Seeds" + ] + }, + "blockCrucible": { + "name": [ + "Unfired Crucible", + "Crucible" + ] + }, + "itemMesh": { + "name": [ + "", + "String Mesh", + "Flint Stiffened Mesh", + "Iron Stiffened Mesh", + "Diamond Stiffened Mesh" + ] + }, +} \ No newline at end of file diff --git a/etc/names/extrautils2.json b/etc/names/extrautils2.json new file mode 100644 index 0000000..7289a19 --- /dev/null +++ b/etc/names/extrautils2.json @@ -0,0 +1,70 @@ +{ + "resonator": { + "name": "Resonator" + }, + "endershard": { + "name": "Ender Shard" + }, + "glasscutter": { + "name": "Glass Cutter" + }, + "decorativesolid": { + "name": [ + "", + "", + "Polished Stone", + "Stoneburnt" + ] + }, + "passivegenerator": { + "name": [ + "", + "", + "", + "Water Mill", + "", + "", + "", + "Manual Mill" + ] + }, + "pipe": { + "name": "Transfer Pipe" + }, + "user": { + "name": "Mechanical User" + }, + "trashcan": { + "name": "Trash Can" + }, + "ingredients": { + "name": [ + "Resonating Redstone Crystal", + "Redstone Gear", + "Eye of Redstone", + "", + "", + "", + "Upgrade Speed", + "", + "", + "Upgrade Base", + "Drop of Evil" + ] + }, + "drum": { + "name": [ + "", + "Iron Drum" + ] + }, + "grocket": { + "name": [ + "", + "", + "Transfer Node (Fluids)", + "", + "Retrieval Node (Fluids)" + ] + } +} \ No newline at end of file diff --git a/etc/names/ironchest.json b/etc/names/ironchest.json new file mode 100644 index 0000000..b31f542 --- /dev/null +++ b/etc/names/ironchest.json @@ -0,0 +1,22 @@ +{ + "goldDiamondUpgrade": { + "name": "Gold to Diamond Chest Upgrade" + }, + "BlockIronChest": { + "name": [ + "Iron Chest", + "Gold Chest", + "Diamond Chest", + "", + "", + "Crystal Chest", + "Obsidian Chest" + ] + }, + "woodIronUpgrade": { + "name": "Wood to Iron Chest Upgrade" + }, + "ironGoldUpgrade": { + "name": "Iron to Gold Chest Upgrade" + } +} \ No newline at end of file diff --git a/etc/blocks.json b/etc/names/minecraft.json similarity index 100% rename from etc/blocks.json rename to etc/names/minecraft.json diff --git a/etc/names/rftools.json b/etc/names/rftools.json new file mode 100644 index 0000000..6dc6196 --- /dev/null +++ b/etc/names/rftools.json @@ -0,0 +1,37 @@ +{ + "crafter1": { + "name": "Crafter Tier 1" + }, + "modular_storage": { + "name": "Modular Storage" + }, + "crafter3": { + "name": "Crafter Tier 3" + }, + "machine_frame": { + "name": "Machine Frame" + }, + "storage_module": { + "name": [ + "Storage Module Tier 1", + "Storage Module Tier 2", + "Storage Module Tier 3", + "", + "", + "", + "Remote Storage Module" + ] + }, + "crafter2": { + "name": "Crafter Tier 2" + }, + "machine_base": { + "name": "Machine Base" + }, + "remote_storage": { + "name": "Remote Storage" + }, + "timer_block": { + "name": "Timer" + } +} \ No newline at end of file diff --git a/etc/names/storagedrawers.json b/etc/names/storagedrawers.json new file mode 100644 index 0000000..e4df70d --- /dev/null +++ b/etc/names/storagedrawers.json @@ -0,0 +1,33 @@ +{ + "compDrawers": { + "name": "Compacting Drawer" + }, + "upgradeTemplate": { + "name": "Upgrade Template" + }, + "controller": { + "name": "Drawer Controller" + }, + "basicDrawers": { + "name": [ + "Basic Drawer", + "", + "Basic Drawers 2x2" + ] + }, + "upgradeVoid": { + "name": "Void Upgrade" + }, + "upgradeStorage": { + "name": [ + "", + "", + "", + "", + "Storage Upgrade (V)" + ] + }, + "controllerSlave": { + "name": "Controller Slave" + } +} \ No newline at end of file diff --git a/etc/names/tconstruct.json b/etc/names/tconstruct.json new file mode 100644 index 0000000..496f224 --- /dev/null +++ b/etc/names/tconstruct.json @@ -0,0 +1,36 @@ +{ + "materials": { + "name": [ + "Seared Brick", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "Necrotic Bone" + ] + }, + "pattern": { + "name": "Blank Pattern" + }, + "cast": { + "name": "Blank Cast" + }, + "casting": { + "name": "Casting Table" + }, + "soil": { + "name": "Grout" + } +} \ No newline at end of file diff --git a/etc/recipes/exnihilo.db b/etc/recipes/exnihilo.db index ba1b117..dced359 100644 --- a/etc/recipes/exnihilo.db +++ b/etc/recipes/exnihilo.db @@ -1,4 +1,28 @@ { + [ "exnihiloadscensio:blockBarrel1:0" ] = { + ingredients = { + "minecraft:stone:0", + [ 9 ] = "minecraft:stone:0", + [ 10 ] = "minecraft:stone_slab:0", + [ 11 ] = "minecraft:stone:0", + [ 3 ] = "minecraft:stone:0", + [ 5 ] = "minecraft:stone:0", + [ 7 ] = "minecraft:stone:0", + }, + count = 1, + }, + [ "exnihiloadscensio:blockCrucible:0" ] = { + ingredients = { + "exnihiloadscensio:itemMaterial:1", + [ 9 ] = "exnihiloadscensio:itemMaterial:1", + [ 10 ] = "exnihiloadscensio:itemMaterial:1", + [ 11 ] = "exnihiloadscensio:itemMaterial:1", + [ 3 ] = "exnihiloadscensio:itemMaterial:1", + [ 5 ] = "exnihiloadscensio:itemMaterial:1", + [ 7 ] = "exnihiloadscensio:itemMaterial:1", + }, + count = 1, + }, [ "exnihiloadscensio:hammerStone:0" ] = { maxCount = 1, ingredients = { @@ -9,4 +33,11 @@ }, count = 1, }, + [ "exnihiloadscensio:itemMaterial:1" ] = { + ingredients = { + "minecraft:dye:15", + "minecraft:clay_ball:0", + }, + count = 1, + }, } \ No newline at end of file diff --git a/etc/recipes/extrautils2.db b/etc/recipes/extrautils2.db index 323f54f..fbece35 100644 --- a/etc/recipes/extrautils2.db +++ b/etc/recipes/extrautils2.db @@ -1,9 +1,24 @@ { - [ "extrautils2:user:0" ] = { + [ "extrautils2:decorativesolid:2" ] = { ingredients = { - "minecraft:dropper:0", - "extrautils2:ingredients:0", - [ 5 ] = "minecraft:lever:0", + "minecraft:stonebrick:0", + "minecraft:stonebrick:0", + [ 5 ] = "minecraft:stonebrick:0", + [ 6 ] = "minecraft:stonebrick:0", + }, + count = 4, + }, + [ "extrautils2:drum:1" ] = { + ingredients = { + "minecraft:iron_ingot:0", + "minecraft:heavy_weighted_pressure_plate:0", + "minecraft:iron_ingot:0", + [ 9 ] = "minecraft:iron_ingot:0", + [ 10 ] = "minecraft:heavy_weighted_pressure_plate:0", + [ 11 ] = "minecraft:iron_ingot:0", + [ 5 ] = "minecraft:iron_ingot:0", + [ 6 ] = "minecraft:cauldron:0", + [ 7 ] = "minecraft:iron_ingot:0", }, count = 1, }, @@ -18,4 +33,136 @@ maxCount = 1, count = 8, }, + [ "extrautils2:grocket:2" ] = { + ingredients = { + "minecraft:redstone:0", + "extrautils2:pipe:0", + "minecraft:redstone:0", + [ 5 ] = "minecraft:stone:0", + [ 6 ] = "minecraft:bucket:0", + [ 7 ] = "minecraft:stone:0", + }, + count = 4, + }, + [ "extrautils2:grocket:4" ] = { + ingredients = { + [ 10 ] = "minecraft:ender_pearl:0", + [ 2 ] = "minecraft:ender_pearl:0", + [ 5 ] = "extrautils2:grocket:2", + [ 6 ] = "minecraft:diamond:0", + [ 7 ] = "extrautils2:grocket:2", + }, + count = 2, + }, + [ "extrautils2:ingredients:0" ] = { + ingredients = { + "extrautils2:endershard:0", + "enderio:itemAlloy:3", + "enderio:itemAlloy:3", + [ 5 ] = "enderio:itemAlloy:3", + [ 6 ] = "enderio:itemAlloy:3", + [ 7 ] = "enderio:itemAlloy:3", + }, + count = 1, + }, + [ "extrautils2:ingredients:1" ] = { + ingredients = { + [ 10 ] = "minecraft:redstone_torch:0", + [ 2 ] = "minecraft:redstone_torch:0", + [ 5 ] = "minecraft:redstone_torch:0", + [ 6 ] = "minecraft:planks:0", + [ 7 ] = "minecraft:redstone_torch:0", + }, + count = 1, + }, + [ "extrautils2:ingredients:6" ] = { + count = 1, + ingredients = { + "extrautils2:ingredients:9", + "minecraft:gold_ingot:0", + [ 5 ] = "minecraft:redstone_block:0", + }, + maxCount = 4, + }, + [ "extrautils2:miner:0" ] = { + ingredients = { + "minecraft:dropper:0", + "extrautils2:ingredients:0", + [ 5 ] = "minecraft:iron_pickaxe:*", + }, + count = 1, + }, + [ "extrautils2:passivegenerator:3" ] = { + ingredients = { + "extrautils2:decorativesolid:3", + "extrautils2:decorativesolid:3", + "extrautils2:decorativesolid:3", + [ 9 ] = "extrautils2:decorativesolid:3", + [ 10 ] = "extrautils2:decorativesolid:3", + [ 11 ] = "extrautils2:decorativesolid:3", + [ 5 ] = "extrautils2:ingredients:1", + [ 6 ] = "extrautils2:ingredients:0", + [ 7 ] = "extrautils2:ingredients:1", + }, + count = 1, + }, + [ "extrautils2:passivegenerator:7" ] = { + ingredients = { + [ 7 ] = "extrautils2:decorativesolid:2", + [ 2 ] = "extrautils2:ingredients:1", + [ 5 ] = "extrautils2:decorativesolid:2", + [ 6 ] = "extrautils2:ingredients:0", + }, + count = 1, + }, + [ "extrautils2:pipe:0" ] = { + ingredients = { + "minecraft:stone_slab:0", + "minecraft:stone_slab:0", + "minecraft:stone_slab:0", + [ 9 ] = "minecraft:stone_slab:0", + [ 10 ] = "minecraft:stone_slab:0", + [ 11 ] = "minecraft:stone_slab:0", + [ 5 ] = "minecraft:glass:0", + [ 6 ] = "minecraft:redstone:0", + [ 7 ] = "minecraft:glass:0", + }, + count = 64, + }, + [ "extrautils2:resonator:0" ] = { + ingredients = { + "minecraft:redstone:0", + "minecraft:coal_block:0", + "minecraft:redstone:0", + [ 9 ] = "minecraft:iron_ingot:0", + [ 10 ] = "minecraft:iron_ingot:0", + [ 11 ] = "minecraft:iron_ingot:0", + [ 5 ] = "minecraft:iron_ingot:0", + [ 6 ] = "extrautils2:ingredients:0", + [ 7 ] = "minecraft:iron_ingot:0", + }, + count = 1, + }, + [ "extrautils2:trashcan:0" ] = { + ingredients = { + "minecraft:stone:0", + "minecraft:stone:0", + "minecraft:stone:0", + [ 9 ] = "minecraft:cobblestone:0", + [ 10 ] = "minecraft:cobblestone:0", + [ 11 ] = "minecraft:cobblestone:0", + [ 5 ] = "minecraft:cobblestone:0", + [ 6 ] = "minecraft:chest:0", + [ 7 ] = "minecraft:cobblestone:0", + }, + count = 1, + }, + [ "extrautils2:user:0" ] = { + ingredients = { + "minecraft:dropper:0", + "extrautils2:ingredients:0", + [ 5 ] = "minecraft:lever:0", + }, + count = 1, + }, } \ No newline at end of file diff --git a/etc/recipes/ironchest.db b/etc/recipes/ironchest.db new file mode 100644 index 0000000..c08d448 --- /dev/null +++ b/etc/recipes/ironchest.db @@ -0,0 +1,114 @@ +{ + [ "ironchest:BlockIronChest:0" ] = { + ingredients = { + "minecraft:iron_ingot:0", + "minecraft:iron_ingot:0", + "minecraft:iron_ingot:0", + [ 9 ] = "minecraft:iron_ingot:0", + [ 10 ] = "minecraft:iron_ingot:0", + [ 11 ] = "minecraft:iron_ingot:0", + [ 5 ] = "minecraft:iron_ingot:0", + [ 6 ] = "minecraft:chest:0", + [ 7 ] = "minecraft:iron_ingot:0", + }, + count = 1, + }, + [ "ironchest:BlockIronChest:1" ] = { + ingredients = { + "minecraft:gold_ingot:0", + "minecraft:gold_ingot:0", + "minecraft:gold_ingot:0", + [ 9 ] = "minecraft:gold_ingot:0", + [ 10 ] = "minecraft:gold_ingot:0", + [ 11 ] = "minecraft:gold_ingot:0", + [ 5 ] = "minecraft:gold_ingot:0", + [ 6 ] = "ironchest:BlockIronChest:0", + [ 7 ] = "minecraft:gold_ingot:0", + }, + count = 1, + }, + [ "ironchest:BlockIronChest:2" ] = { + ingredients = { + "minecraft:glass:0", + "minecraft:glass:0", + "minecraft:glass:0", + [ 9 ] = "minecraft:glass:0", + [ 10 ] = "minecraft:glass:0", + [ 11 ] = "minecraft:glass:0", + [ 5 ] = "minecraft:diamond:0", + [ 6 ] = "ironchest:BlockIronChest:1", + [ 7 ] = "minecraft:diamond:0", + }, + count = 1, + }, + [ "ironchest:BlockIronChest:5" ] = { + ingredients = { + "minecraft:glass:0", + "minecraft:glass:0", + "minecraft:glass:0", + [ 9 ] = "minecraft:glass:0", + [ 10 ] = "minecraft:glass:0", + [ 11 ] = "minecraft:glass:0", + [ 5 ] = "minecraft:glass:0", + [ 6 ] = "ironchest:BlockIronChest:2", + [ 7 ] = "minecraft:glass:0", + }, + count = 1, + }, + [ "ironchest:BlockIronChest:6" ] = { + ingredients = { + "minecraft:obsidian:0", + "minecraft:obsidian:0", + "minecraft:obsidian:0", + [ 9 ] = "minecraft:obsidian:0", + [ 10 ] = "minecraft:obsidian:0", + [ 11 ] = "minecraft:obsidian:0", + [ 5 ] = "minecraft:obsidian:0", + [ 6 ] = "ironchest:BlockIronChest:2", + [ 7 ] = "minecraft:obsidian:0", + }, + count = 1, + }, + [ "ironchest:goldDiamondUpgrade:0" ] = { + ingredients = { + "minecraft:glass:0", + "minecraft:glass:0", + "minecraft:glass:0", + [ 9 ] = "minecraft:glass:0", + [ 10 ] = "minecraft:glass:0", + [ 11 ] = "minecraft:glass:0", + [ 5 ] = "minecraft:diamond:0", + [ 6 ] = "minecraft:gold_ingot:0", + [ 7 ] = "minecraft:diamond:0", + }, + count = 1, + }, + [ "ironchest:ironGoldUpgrade:0" ] = { + ingredients = { + "minecraft:gold_ingot:0", + "minecraft:gold_ingot:0", + "minecraft:gold_ingot:0", + [ 9 ] = "minecraft:gold_ingot:0", + [ 10 ] = "minecraft:gold_ingot:0", + [ 11 ] = "minecraft:gold_ingot:0", + [ 5 ] = "minecraft:gold_ingot:0", + [ 6 ] = "minecraft:iron_ingot:0", + [ 7 ] = "minecraft:gold_ingot:0", + }, + count = 1, + }, + [ "ironchest:woodIronUpgrade:0" ] = { + ingredients = { + "minecraft:iron_ingot:0", + "minecraft:iron_ingot:0", + "minecraft:iron_ingot:0", + [ 9 ] = "minecraft:iron_ingot:0", + [ 10 ] = "minecraft:iron_ingot:0", + [ 11 ] = "minecraft:iron_ingot:0", + [ 5 ] = "minecraft:iron_ingot:0", + [ 6 ] = "minecraft:planks:0", + [ 7 ] = "minecraft:iron_ingot:0", + }, + count = 1, + }, +} diff --git a/etc/recipes/minecraft.db b/etc/recipes/minecraft.db index 5952192..d98f16d 100644 --- a/etc/recipes/minecraft.db +++ b/etc/recipes/minecraft.db @@ -1,4 +1,20 @@ { + [ "minecraft:flint_and_steel:0" ] = { + count = 1, + ingredients = { + "minecraft:flint:0", + "minecraft:iron_ingot:0", + }, + maxCount = 1, + }, + [ "minecraft:glass_bottle:0" ] = { + ingredients = { + "minecraft:glass:0", + [ 6 ] = "minecraft:glass:0", + [ 3 ] = "minecraft:glass:0", + }, + count = 3, + }, [ "minecraft:writable_book:0" ] = { ingredients = { "minecraft:book:0", diff --git a/etc/recipes/rftools.db b/etc/recipes/rftools.db new file mode 100644 index 0000000..ffe08d2 --- /dev/null +++ b/etc/recipes/rftools.db @@ -0,0 +1,126 @@ +{ + [ "rftools:crafter1:0" ] = { + ingredients = { + [ 10 ] = "minecraft:redstone_torch:0", + [ 2 ] = "minecraft:redstone_torch:0", + [ 5 ] = "minecraft:crafting_table:0", + [ 6 ] = "rftools:machine_frame:0", + [ 7 ] = "minecraft:crafting_table:0", + }, + count = 1, + }, + [ "rftools:crafter2:0" ] = { + ingredients = { + [ 10 ] = "minecraft:redstone_torch:0", + [ 2 ] = "minecraft:redstone_torch:0", + [ 5 ] = "minecraft:crafting_table:0", + [ 6 ] = "rftools:crafter1:0", + [ 7 ] = "minecraft:crafting_table:0", + }, + count = 1, + }, + [ "rftools:crafter3:0" ] = { + ingredients = { + [ 10 ] = "minecraft:redstone_torch:0", + [ 2 ] = "minecraft:redstone_torch:0", + [ 5 ] = "minecraft:crafting_table:0", + [ 6 ] = "rftools:crafter2:0", + [ 7 ] = "minecraft:crafting_table:0", + }, + count = 1, + }, + [ "rftools:machine_frame:0" ] = { + ingredients = { + "minecraft:iron_ingot:0", + "minecraft:dye:4", + "minecraft:iron_ingot:0", + [ 9 ] = "minecraft:iron_ingot:0", + [ 10 ] = "minecraft:dye:4", + [ 11 ] = "minecraft:iron_ingot:0", + [ 5 ] = "minecraft:gold_nugget:0", + [ 7 ] = "minecraft:gold_nugget:0", + }, + count = 1, + }, + [ "rftools:modular_storage:0" ] = { + ingredients = { + "minecraft:redstone:0", + "minecraft:chest:0", + "minecraft:redstone:0", + [ 9 ] = "minecraft:redstone:0", + [ 10 ] = "minecraft:quartz:0", + [ 11 ] = "minecraft:redstone:0", + [ 5 ] = "minecraft:quartz:0", + [ 6 ] = "rftools:machine_frame:0", + [ 7 ] = "minecraft:quartz:0", + }, + count = 1, + }, + [ "rftools:storage_module:2" ] = { + count = 1, + ingredients = { + [ 10 ] = "minecraft:redstone_block:0", + [ 11 ] = "minecraft:quartz_block:1", + [ 2 ] = "minecraft:chest:0", + [ 5 ] = "minecraft:gold_block:0", + [ 6 ] = "rftools:storage_module:1", + [ 7 ] = "minecraft:gold_block:0", + [ 9 ] = "minecraft:quartz_block:1", + }, + maxCount = 1, + }, + [ "rftools:remote_storage:0" ] = { + ingredients = { + "minecraft:ender_pearl:0", + "minecraft:chest:0", + "minecraft:ender_pearl:0", + [ 9 ] = "minecraft:ender_pearl:0", + [ 10 ] = "minecraft:quartz:0", + [ 11 ] = "minecraft:ender_pearl:0", + [ 5 ] = "minecraft:quartz:0", + [ 6 ] = "rftools:machine_frame:0", + [ 7 ] = "minecraft:quartz:0", + }, + count = 1, + }, + [ "rftools:storage_module:0" ] = { + count = 1, + ingredients = { + [ 10 ] = "minecraft:redstone:0", + [ 11 ] = "minecraft:quartz:0", + [ 2 ] = "minecraft:chest:0", + [ 5 ] = "minecraft:gold_nugget:0", + [ 6 ] = "minecraft:iron_ingot:0", + [ 7 ] = "minecraft:gold_nugget:0", + [ 9 ] = "minecraft:quartz:0", + }, + maxCount = 1, + }, + [ "rftools:storage_module:1" ] = { + count = 1, + ingredients = { + [ 10 ] = "minecraft:redstone:0", + [ 11 ] = "minecraft:quartz:0", + [ 2 ] = "minecraft:chest:0", + [ 5 ] = "minecraft:gold_ingot:0", + [ 6 ] = "rftools:storage_module:0", + [ 7 ] = "minecraft:gold_ingot:0", + [ 9 ] = "minecraft:quartz:0", + }, + maxCount = 1, + }, + [ "rftools:storage_module:6" ] = { + ingredients = { + "minecraft:ender_pearl:0", + "minecraft:chest:0", + "minecraft:ender_pearl:0", + [ 9 ] = "minecraft:quartz:0", + [ 10 ] = "minecraft:redstone:0", + [ 11 ] = "minecraft:quartz:0", + [ 5 ] = "minecraft:gold_nugget:0", + [ 6 ] = "minecraft:iron_ingot:0", + [ 7 ] = "minecraft:gold_nugget:0", + }, + count = 1, + }, +} diff --git a/etc/recipes/storagedrawers.db b/etc/recipes/storagedrawers.db index ae90d4e..466755b 100644 --- a/etc/recipes/storagedrawers.db +++ b/etc/recipes/storagedrawers.db @@ -1,17 +1,19 @@ { - [ "storagedrawers:basicDrawers:0:b85f006d9f6aa0e06184f8931d4e85c1" ] = { + [ "storagedrawers:upgradeStorage:4" ] = { ingredients = { - "minecraft:planks:0", - "minecraft:planks:0", - "minecraft:planks:0", - [ 9 ] = "minecraft:planks:0", - [ 10 ] = "minecraft:planks:0", - [ 11 ] = "minecraft:planks:0", - [ 6 ] = "minecraft:chest:0", + "minecraft:emerald:0", + "minecraft:stick:0", + "minecraft:emerald:0", + [ 9 ] = "minecraft:emerald:0", + [ 10 ] = "minecraft:stick:0", + [ 11 ] = "minecraft:emerald:0", + [ 5 ] = "minecraft:stick:0", + [ 6 ] = "storagedrawers:upgradeTemplate:0", + [ 7 ] = "minecraft:stick:0", }, count = 1, }, - [ "storagedrawers:upgradeTemplate:0" ] = { + [ "storagedrawers:upgradeVoid:0" ] = { ingredients = { "minecraft:stick:0", "minecraft:stick:0", @@ -19,10 +21,10 @@ [ 9 ] = "minecraft:stick:0", [ 10 ] = "minecraft:stick:0", [ 11 ] = "minecraft:stick:0", - [ 5 ] = "minecraft:stick:0", - [ 6 ] = "storagedrawers:basicDrawers:0:b85f006d9f6aa0e06184f8931d4e85c1", - [ 7 ] = "minecraft:stick:0", + [ 5 ] = "minecraft:obsidian:0", + [ 6 ] = "storagedrawers:upgradeTemplate:0", + [ 7 ] = "minecraft:obsidian:0", }, - count = 2, + count = 1, }, } \ No newline at end of file diff --git a/etc/recipes/tconstruct.db b/etc/recipes/tconstruct.db index c6b73a5..4039093 100644 --- a/etc/recipes/tconstruct.db +++ b/etc/recipes/tconstruct.db @@ -19,4 +19,18 @@ }, count = 4, }, + [ "tconstruct:soil:0" ] = { + ingredients = { + "minecraft:gravel:0", + "minecraft:sand:0", + "minecraft:gravel:0", + [ 9 ] = "minecraft:gravel:0", + [ 10 ] = "minecraft:sand:0", + [ 11 ] = "minecraft:gravel:0", + [ 5 ] = "minecraft:sand:0", + [ 6 ] = "minecraft:clay:0", + [ 7 ] = "minecraft:sand:0", + }, + count = 8, + }, } \ No newline at end of file