autocrafting improvements

This commit is contained in:
kepler155c
2018-01-10 16:48:23 -05:00
parent d4cf76b8e8
commit f7893ab2fe
24 changed files with 1798 additions and 159 deletions

View File

@@ -1,5 +1,3 @@
local Util = require('util')
local Adapter = { } local Adapter = { }
function Adapter.wrap(args) function Adapter.wrap(args)
@@ -7,43 +5,46 @@ function Adapter.wrap(args)
--'refinedAdapter', --'refinedAdapter',
'chestAdapter18', 'chestAdapter18',
-- adapters for version 1.7
'meAdapter', 'meAdapter',
'chestAdapter', '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 for _,adapterType in ipairs(adapters) do
local adapter = require(adapterType)(args) local adapter = require(adapterType)(args)
if adapter:isValid() then 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 return adapter
end end
end end

View File

@@ -1,23 +1,33 @@
local JSON = require('json') local JSON = require('json')
local TableDB = require('tableDB') local TableDB = require('tableDB')
local fs = _G.fs
local NAME_DIR = '/usr/etc/names'
local nameDB = TableDB() local nameDB = TableDB()
function nameDB:load() function nameDB:load()
local blocks = JSON.decodeFromFile('usr/etc/blocks.json') local files = fs.list(NAME_DIR)
table.sort(files)
if not blocks then for _,file in ipairs(files) do
error('Unable to read usr/etc/blocks.json') local mod = file:match('(%S+).json')
end local blocks = JSON.decodeFromFile(fs.combine(NAME_DIR, file))
for strId, block in pairs(blocks) do if not blocks then
strId = 'minecraft:' .. strId error('Unable to read ' .. fs.combine(NAME_DIR, file))
if type(block.name) == 'string' then end
self.data[strId .. ':0'] = block.name
else for strId, block in pairs(blocks) do
for nid,name in pairs(block.name) do strId = string.format('%s:%s', mod, strId)
self.data[strId .. ':' .. (nid-1)] = name 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 end
end end

View File

@@ -23,13 +23,13 @@ local turtle = _G.turtle
multishell.setTitle(multishell.getCurrent(), 'Resource Manager') multishell.setTitle(multishell.getCurrent(), 'Resource Manager')
local config = { local config = {
computerFacing = 'north', computerFacing = 'north', -- direction turtle is facing
inventory = 'back', inventory = 'top',
craftingChest = 'top', craftingChest = 'bottom',
controller = 'none', controller = 'none',
trashDirection = 'up', -- trash /chest in relation to chest trashDirection = 'up', -- trash/chest in relation to inventory
monitor = 'type/monitor', monitor = 'type/monitor',
} }
@@ -49,7 +49,6 @@ if device.workbench then
[ 'left' ] = 'right', [ 'left' ] = 'right',
[ 'right' ] = 'left', [ 'right' ] = 'left',
} }
local duckAntennaSide = oppositeSide[device.workbench.side] local duckAntennaSide = oppositeSide[device.workbench.side]
duckAntenna = peripheral.wrap(duckAntennaSide) duckAntenna = peripheral.wrap(duckAntennaSide)
if not duckAntenna or not duckAntenna.getAllStacks then if not duckAntenna or not duckAntenna.getAllStacks then
@@ -57,11 +56,16 @@ if device.workbench then
end end
end end
local STATUS_INFO = 'info'
local STATUS_WARNING = 'warning'
local STATUS_ERROR = 'error'
local RESOURCE_FILE = 'usr/config/resources.db' local RESOURCE_FILE = 'usr/config/resources.db'
local RECIPES_FILE = 'usr/config/recipes.db' local RECIPES_FILE = 'usr/config/recipes.db'
local craftingPaused = false 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 userRecipes = Util.readTable(RECIPES_FILE) or { }
local jobList local jobList
local resources local resources
@@ -188,6 +192,7 @@ local function addCraftingRequest(item, craftList, count)
craftList[key] = request craftList[key] = request
end end
request.count = request.count + count request.count = request.count + count
return request
end end
local function craftItem(recipe, items, originalItem, craftList, count) 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 isGridClear() then
if not clearGrid() then if not clearGrid() then
originalItem.status = 'Grid obstructed' originalItem.status = 'Grid obstructed'
originalItem.statusCode = STATUS_ERROR
return 0 return 0
end end
end end
@@ -207,7 +213,7 @@ local function craftItem(recipe, items, originalItem, craftList, count)
local toCraft = Craft.getCraftableAmount(recipe, count, items, missing) local toCraft = Craft.getCraftableAmount(recipe, count, items, missing)
if missing.name then if missing.name then
originalItem.status = string.format('%s missing', itemDB:getName(missing.name)) originalItem.status = string.format('%s missing', itemDB:getName(missing.name))
originalItem.statusCode = 'missing' originalItem.statusCode = STATUS_WARNING
end end
local crafted = 0 local crafted = 0
@@ -222,9 +228,15 @@ local function craftItem(recipe, items, originalItem, craftList, count)
if count > 0 and items then if count > 0 and items then
local ingredients = Craft.getResourceList4(recipe, items, count) local ingredients = Craft.getResourceList4(recipe, items, count)
for _,ingredient in pairs(ingredients) do for _,ingredient in pairs(ingredients) do
--if not ingredient.recipe and ingredient.count < 0 then
if ingredient.need > 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 end
end end
@@ -278,7 +290,6 @@ local function forceCraftItem(inRecipe, items, originalItem, craftList, inCount)
local c = sumItems(summedItem.recipe, need) -- 4 local c = sumItems(summedItem.recipe, need) -- 4
craftable = math.min(craftable, math.floor((used + c) / iqty)) craftable = math.min(craftable, math.floor((used + c) / iqty))
summedItem.craftable = summedItem.craftable + c summedItem.craftable = summedItem.craftable + c
end end
end end
end end
@@ -296,9 +307,14 @@ local function forceCraftItem(inRecipe, items, originalItem, craftList, inCount)
if count < inCount then if count < inCount then
for _,ingredient in pairs(summed) do for _,ingredient in pairs(summed) do
if ingredient.need > 0 then if ingredient.need > 0 then
addCraftingRequest(ingredient, craftList, ingredient.need) local item = addCraftingRequest(ingredient, craftList, ingredient.need)
originalItem.status = string.format('%s missing', itemDB:getName(ingredient)) if Craft.findRecipe(item) then
originalItem.statusCode = 'missing' 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 end
end end
@@ -306,43 +322,59 @@ local function forceCraftItem(inRecipe, items, originalItem, craftList, inCount)
end end
local function craftItems(craftList, allItems) local function craftItems(craftList, allItems)
for _,key in pairs(Util.keys(craftList)) do
local item = craftList[key] -- turtle crafting
local recipe = Craft.recipes[key] if canCraft then
if recipe then for _,key in pairs(Util.keys(craftList)) do
item.status = nil local item = craftList[key]
item.statusCode = nil local recipe = Craft.recipes[key]
if item.forceCrafting then if recipe then
item.crafted = forceCraftItem(recipe, allItems, item, craftList, item.count) item.status = nil
else item.statusCode = nil
item.crafted = craftItem(recipe, allItems, item, craftList, item.count) 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 end
allItems = listItems() -- refresh counts
if not allItems then
break
end
elseif item.rsControl then
item.status = 'Activated'
end end
end end
for key,item in pairs(craftList) do -- redstone control
if not Craft.recipes[key] and not item.rsControl then for _,item in pairs(craftList) do
if not controllerAdapter then if item.rsControl then
item.status = '(no recipe)' item.status = '(activated)'
else 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 if controllerAdapter:isCrafting(item) then
item.status = '(crafting)' item.status = '(crafting)'
item.statusCode = STATUS_INFO
else else
local count = item.count local count = item.count
while count >= 1 do -- try to request smaller quantities until successful while count >= 1 do -- try to request smaller quantities until successful
local s = pcall(function() local s = pcall(function()
item.status = '(no recipe)' item.status = '(no recipe)'
item.statusCode = STATUS_ERROR
if not controllerAdapter:craft(item, count) then if not controllerAdapter:craft(item, count) then
item.status = '(missing ingredients)' item.status = '(missing ingredients)'
item.statusCode = STATUS_WARNING
error('failed') error('failed')
end end
item.status = '(crafting)' item.status = '(crafting)'
item.statusCode = STATUS_INFO
end) end)
if s then if s then
break -- successfully requested crafting break -- successfully requested crafting
@@ -353,6 +385,15 @@ local function craftItems(craftList, allItems)
end end
end 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 end
local function jobMonitor() local function jobMonitor()
@@ -395,11 +436,11 @@ local function jobMonitor()
end end
function jobList.grid:getRowTextColor(row, selected) function jobList.grid:getRowTextColor(row, selected)
if row.status == '(no recipe)' then if row.statusCode == STATUS_ERROR then
return colors.red return colors.red
elseif row.statusCode == 'missing' then elseif row.statusCode == STATUS_WARNING then
return colors.yellow return colors.yellow
elseif row.statusCode == 'success' then elseif row.statusCode == STATUS_INFO then
return colors.lime return colors.lime
end end
return UI.Grid:getRowTextColor(row, selected) return UI.Grid:getRowTextColor(row, selected)
@@ -580,12 +621,14 @@ local itemPage = UI.Page {
}, },
help = 'Ignore NBT of item' help = 'Ignore NBT of item'
}, },
--[[
[6] = UI.Button { [6] = UI.Button {
x = 2, y = -2, width = 10, x = 2, y = -2, width = 10,
formLabel = 'Redstone', formLabel = 'Redstone',
event = 'show_rs', event = 'show_rs',
text = 'Configure', text = 'Configure',
}, },
]]
infoButton = UI.Button { infoButton = UI.Button {
x = 2, y = -2, x = 2, y = -2,
event = 'show_info', event = 'show_info',
@@ -779,10 +822,10 @@ local listingPage = UI.Page {
grid = UI.Grid { grid = UI.Grid {
y = 2, ey = -2, y = 2, ey = -2,
columns = { columns = {
{ heading = 'Name', key = 'displayName' , width = 22 }, { heading = 'Name', key = 'displayName' },
{ heading = 'Qty', key = 'count' , width = 5 }, { heading = 'Qty', key = 'count' , width = 4 },
{ heading = 'Min', key = 'low' , width = 4 }, { heading = 'Min', key = 'low' , width = 4 },
{ heading = 'Max', key = 'limit' , width = 4 }, { heading = 'Max', key = 'limit' , width = 4 },
}, },
sortColumn = 'displayName', sortColumn = 'displayName',
}, },
@@ -802,6 +845,7 @@ local listingPage = UI.Page {
text = 'A', text = 'A',
}, },
}, },
notification = UI.Notification(),
accelerators = { accelerators = {
r = 'refresh', r = 'refresh',
q = 'quit', q = 'quit',
@@ -864,10 +908,18 @@ function listingPage:eventHandler(event)
self.grid:draw() self.grid:draw()
elseif event.type == 'learn' then 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 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 elseif event.type == 'forget' then
local item = self.grid:getSelected() local item = self.grid:getSelected()
@@ -885,7 +937,7 @@ function listingPage:eventHandler(event)
saveResources() saveResources()
end end
self.statusBar:timedStatus('Forgot: ' .. item.name, 3) self.notification:info('Forgot: ' .. item.name)
self:refresh() self:refresh()
self.grid:draw() self.grid:draw()
end end
@@ -957,7 +1009,7 @@ local function learnRecipe(page)
local ingredients = getTurtleInventory() local ingredients = getTurtleInventory()
if ingredients then if ingredients then
turtle.select(1) turtle.select(1)
if canCraft and turtle.craft() then if canLearn and turtle.craft() then
local results = getTurtleInventory() local results = getTurtleInventory()
if results and results[1] then if results and results[1] then
clearGrid() clearGrid()
@@ -1029,7 +1081,7 @@ local function learnRecipe(page)
local displayName = itemDB:getName(recipe) local displayName = itemDB:getName(recipe)
listingPage.statusBar.filter:setValue(displayName) listingPage.statusBar.filter:setValue(displayName)
listingPage.statusBar:timedStatus('Learned: ' .. displayName, 3) listingPage.notification:success('Learned: ' .. displayName)
listingPage.filter = displayName listingPage.filter = displayName
listingPage:refresh() listingPage:refresh()
listingPage.grid:draw() listingPage.grid:draw()
@@ -1037,10 +1089,10 @@ local function learnRecipe(page)
return true return true
end end
else else
page.statusBar:timedStatus('Failed to craft', 3) listingPage.notification:error('Failed to craft', 3)
end end
else else
page.statusBar:timedStatus('No recipe defined', 3) listingPage.notification:error('No recipe defined', 3)
end end
end end
@@ -1208,7 +1260,9 @@ function craftPage:eventHandler(event)
end end
loadResources() loadResources()
clearGrid() if canCraft then
clearGrid()
end
UI:setPages({ UI:setPages({
listing = listingPage, listing = listingPage,

View File

@@ -19,7 +19,7 @@ multishell.setTitle(multishell.getCurrent(), 'Crafter')
local config = { local config = {
computerFacing = 'north', computerFacing = 'north',
monitor = 'monitor', monitor = 'type/monitor',
} }
Config.load('crafter', config) Config.load('crafter', config)

50
apps/namedb.lua Normal file
View File

@@ -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)

View File

@@ -14,15 +14,17 @@ local version = "Version 1.1.6"
-- Original code by Bomb Bloke -- Original code by Bomb Bloke
-- Modified to integrate with opus os -- Modified to integrate with opus os
requireInjector(getfenv(1)) _G.requireInjector()
local Util = require('util') 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 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 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 greys, buttons = {["0"] = true, ["7"] = true, ["8"] = true, ["f"] = true}, {"l", "r", "m"}
local charW, charH, chars, resp local charW, charH, chars, resp
local filename
local calls = { } local calls = { }
local curCalls = { delay = 0 } local curCalls = { delay = 0 }
@@ -39,7 +41,7 @@ end
for i = #arg, 1, -1 do for i = #arg, 1, -1 do
local curArg = arg[i]:lower() local curArg = arg[i]:lower()
if curArg == "-i" then if curArg == "-i" then
showInput, ySize = true, ySize + 1 showInput, ySize = true, ySize + 1
table.remove(arg, i) table.remove(arg, i)
@@ -108,23 +110,23 @@ end
local function safeString(text) local function safeString(text)
local newText = {} local newText = {}
for i = 1, #text do for i = 1, #text do
local val = text:byte(i) local val = text:byte(i)
newText[i] = (val > 31 and val < 127) and val or 63 newText[i] = (val > 31 and val < 127) and val or 63
end end
return string.char(unpack(newText)) return string.char(unpack(newText))
end end
local function safeCol(text, subst) local function safeCol(text, subst)
local newText = {} local newText = {}
for i = 1, #text do for i = 1, #text do
local val = text:sub(i, i) local val = text:sub(i, i)
newText[i] = greys[val] and val or subst newText[i] = greys[val] and val or subst
end end
return table.concat(newText) return table.concat(newText)
end end
@@ -147,7 +149,7 @@ end
local tabId = multishell.getCurrent() local tabId = multishell.getCurrent()
multishell.addHotkey('control-p', function() _G.device.keyboard.addHotkey('control-p', function()
os.queueEvent('recorder_stop') os.queueEvent('recorder_stop')
end) end)
@@ -185,7 +187,7 @@ while true do
end end
end end
multishell.removeHotkey('control-p') _G.device.keyboard.removeHotkey('control-p')
for k,fn in pairs(oldTerm) do for k,fn in pairs(oldTerm) do
multishell.term[k] = fn multishell.term[k] = fn
@@ -206,18 +208,18 @@ print(string.format("Encoding %d frames...", #calls))
do do
local callListCount, tempCalls, blink, oldBlink, curBlink, blinkDelay = 1, {}, false, false, true, 0 local callListCount, tempCalls, blink, oldBlink, curBlink, blinkDelay = 1, {}, false, false, true, 0
for i = 1, #calls - 1 do for i = 1, #calls - 1 do
curCalls = calls[i] curCalls = calls[i]
tempCalls[callListCount] = curCalls tempCalls[callListCount] = curCalls
for j = 1, #curCalls do if curCalls[j][1] == "setCursorBlink" then blink = curCalls[j][2] end end for j = 1, #curCalls do if curCalls[j][1] == "setCursorBlink" then blink = curCalls[j][2] end end
if blink then if blink then
if blinkDelay == 0 then if blinkDelay == 0 then
curCalls[#curCalls + 1] = {"toggleCur", curBlink} curCalls[#curCalls + 1] = {"toggleCur", curBlink}
blinkDelay, curBlink = 0.4, not curBlink blinkDelay, curBlink = 0.4, not curBlink
end end
while tempCalls[callListCount].delay > blinkDelay do while tempCalls[callListCount].delay > blinkDelay do
local remainder = tempCalls[callListCount].delay - blinkDelay local remainder = tempCalls[callListCount].delay - blinkDelay
tempCalls[callListCount].delay = blinkDelay tempCalls[callListCount].delay = blinkDelay
@@ -225,19 +227,19 @@ do
tempCalls[callListCount] = {{"toggleCur", curBlink}, ["delay"] = remainder} tempCalls[callListCount] = {{"toggleCur", curBlink}, ["delay"] = remainder}
blinkDelay, curBlink = 0.4, not curBlink blinkDelay, curBlink = 0.4, not curBlink
end end
blinkDelay = blinkDelay - tempCalls[callListCount].delay blinkDelay = blinkDelay - tempCalls[callListCount].delay
else else
if oldBlink then curCalls[#curCalls + 1] = {"toggleCur", false} end if oldBlink then curCalls[#curCalls + 1] = {"toggleCur", false} end
blinkDelay = (curCalls.delay - blinkDelay) % 0.4 blinkDelay = (curCalls.delay - blinkDelay) % 0.4
end end
callListCount, oldBlink = callListCount + 1, blink callListCount, oldBlink = callListCount + 1, blink
end end
tempCalls[callListCount] = calls[#calls] tempCalls[callListCount] = calls[#calls]
tempCalls[callListCount][#tempCalls[callListCount] + 1] = {"toggleCur", false} tempCalls[callListCount][#tempCalls[callListCount] + 1] = {"toggleCur", false}
calls, curCalls = tempCalls, nil calls, curCalls = tempCalls, nil
end 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) tTerm.blit = function(text, fgCol, bgCol)
if xPos > xSize or xPos + #text - 1 < 1 or yPos < 1 or yPos > ySize then return end 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 _HOST then text = safeString(text) end
if not term.isColour() then if not term.isColour() then
fgCol = safeCol(fgCol, "0") fgCol = safeCol(fgCol, "0")
bgCol = safeCol(bgCol, "f") bgCol = safeCol(bgCol, "f")
end end
if xPos < 1 then if xPos < 1 then
text = text:sub(2 - xPos) text = text:sub(2 - xPos)
fgCol = fgCol:sub(2 - xPos) fgCol = fgCol:sub(2 - xPos)
bgCol = bgCol:sub(2 - xPos) bgCol = bgCol:sub(2 - xPos)
xPos = 1 xPos = 1
end end
if xPos + #text - 1 > xSize then if xPos + #text - 1 > xSize then
text = text:sub(1, xSize - xPos + 1) text = text:sub(1, xSize - xPos + 1)
fgCol = fgCol:sub(1, xSize - xPos + 1) fgCol = fgCol:sub(1, xSize - xPos + 1)
bgCol = bgCol:sub(1, xSize - xPos + 1) bgCol = bgCol:sub(1, xSize - xPos + 1)
end end
for x = 1, #text do for x = 1, #text do
buffer[yPos][xPos + x - 1][1] = text:sub(x, x) 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][2] = fgCol:sub(x, x)
buffer[yPos][xPos + x - 1][3] = bgCol:sub(x, x) buffer[yPos][xPos + x - 1][3] = bgCol:sub(x, x)
end end
xPos = xPos + #text xPos = xPos + #text
end end
@@ -335,21 +337,21 @@ end
tTerm.clearLine = function() tTerm.clearLine = function()
local oldXPos = xPos local oldXPos = xPos
xPos = 1 xPos = 1
tTerm.write(string.rep(" ", xSize)) tTerm.write(string.rep(" ", xSize))
xPos = oldXPos xPos = oldXPos
end end
tTerm.clear = function() tTerm.clear = function()
local oldXPos, oldYPos = xPos, yPos local oldXPos, oldYPos = xPos, yPos
for y = 1, ySize do for y = 1, ySize do
xPos, yPos = 1, y xPos, yPos = 1, y
tTerm.write(string.rep(" ", xSize)) tTerm.write(string.rep(" ", xSize))
end end
xPos, yPos = oldXPos, oldYPos xPos, yPos = oldXPos, oldYPos
end end
@@ -376,7 +378,7 @@ end
tTerm.scroll = function(lines) tTerm.scroll = function(lines)
if math.abs(lines) < ySize then if math.abs(lines) < ySize then
local oldXPos, oldYPos = xPos, yPos local oldXPos, oldYPos = xPos, yPos
for y = 1, ySize do for y = 1, ySize do
if y + lines > 0 and y + lines <= ySize then if y + lines > 0 and y + lines <= ySize then
for x = 1, xSize do for x = 1, xSize do
@@ -388,7 +390,7 @@ tTerm.scroll = function(lines)
tTerm.clearLine() tTerm.clearLine()
end end
end end
xPos, yPos = oldXPos, oldYPos xPos, yPos = oldXPos, oldYPos
else tTerm.clear() end else tTerm.clear() end
end end
@@ -400,12 +402,12 @@ end
tTerm.newInput = function(input) tTerm.newInput = function(input)
local oldTC, oldBC, oldX, oldY = tCol, bCol, xPos, yPos 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 .. " " 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 while #curInput + #input + 1 > xSize do curInput = curInput:sub(curInput:find(" ") + 1) end
curInput = curInput .. input .. " " curInput = curInput .. input .. " "
tTerm.clearLine() tTerm.clearLine()
tTerm.write(curInput) tTerm.write(curInput)
tCol, bCol, xPos, yPos, ySize = oldTC, oldBC, oldX, oldY, ySize - 1 tCol, bCol, xPos, yPos, ySize = oldTC, oldBC, oldX, oldY, ySize - 1
end end
@@ -422,18 +424,18 @@ local image = {["width"] = xSize * charW, ["height"] = ySize * charH}
for i = 1, #calls do for i = 1, #calls do
local xMin, yMin, xMax, yMax, oldBuffer, curCalls, changed = xSize + 1, ySize + 1, 0, 0, {}, calls[i], false local xMin, yMin, xMax, yMax, oldBuffer, curCalls, changed = xSize + 1, ySize + 1, 0, 0, {}, calls[i], false
calls[i] = nil calls[i] = nil
for y = 1, ySize do for y = 1, ySize do
oldBuffer[y] = {} 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 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 end
snooze() snooze()
if showInput then ySize = ySize - 1 end 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 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 showInput then ySize = ySize + 1 end
if i > 1 then 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 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 changed = true
@@ -443,7 +445,7 @@ for i = 1, #calls do
if yy > yMax then yMax = yy end if yy > yMax then yMax = yy end
end end end end end end
else xMin, yMin, xMax, yMax, changed = 1, 1, xSize, ySize, true 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 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 changed = true
if oldXPos < xMin then xMin = oldXPos end if oldXPos < xMin then xMin = oldXPos end
@@ -452,7 +454,7 @@ for i = 1, #calls do
if oldYPos > yMax then yMax = oldYPos end if oldYPos > yMax then yMax = oldYPos end
buffer[oldYPos][oldXPos][4] = false buffer[oldYPos][oldXPos][4] = false
end 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 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 changed = true
if xPos < xMin then xMin = xPos end if xPos < xMin then xMin = xPos end
@@ -461,9 +463,9 @@ for i = 1, #calls do
if yPos > yMax then yMax = yPos end if yPos > yMax then yMax = yPos end
buffer[yPos][xPos][4] = true buffer[yPos][xPos][4] = true
end end
oldBlink, oldXPos, oldYPos = curBlink, xPos, yPos oldBlink, oldXPos, oldYPos = curBlink, xPos, yPos
local thisFrame = { local thisFrame = {
["xstart"] = (xMin - 1) * charW, ["xstart"] = (xMin - 1) * charW,
["ystart"] = (yMin - 1) * charH, ["ystart"] = (yMin - 1) * charH,
@@ -472,18 +474,18 @@ for i = 1, #calls do
["delay"] = curCalls.delay, ["delay"] = curCalls.delay,
["disposal"] = 1 ["disposal"] = 1
} }
for y = 1, (yMax - yMin + 1) * charH do for y = 1, (yMax - yMin + 1) * charH do
local row = {} local row = {}
for x = 1, (xMax - xMin + 1) * charW do row[x] = " " end for x = 1, (xMax - xMin + 1) * charW do row[x] = " " end
thisFrame[y] = row thisFrame[y] = row
end end
snooze() snooze()
for yy = yMin, yMax do for yy = yMin, yMax do
local yBump = (yy - yMin) * charH 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 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 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 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 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 end end end
for y = yBump + 1, yBump + charH do for y = yBump + 1, yBump + charH do
local skip, chars, row = 0, {}, {} local skip, chars, row = 0, {}, {}
for x = 1, #thisFrame[y] do for x = 1, #thisFrame[y] do
if thisFrame[y][x] == " " then if thisFrame[y][x] == " " then
if #chars > 0 then if #chars > 0 then
row[#row + 1] = table.concat(chars) row[#row + 1] = table.concat(chars)
chars = {} chars = {}
end end
skip = skip + 1 skip = skip + 1
else else
if skip > 0 then if skip > 0 then
row[#row + 1] = skip row[#row + 1] = skip
skip = 0 skip = 0
end end
chars[#chars + 1] = thisFrame[y][x] chars[#chars + 1] = thisFrame[y][x]
end end
end end
if #chars > 0 then row[#row + 1] = table.concat(chars) end if #chars > 0 then row[#row + 1] = table.concat(chars) end
thisFrame[y] = row thisFrame[y] = row
end end
snooze() snooze()
end end
if changed then if changed then
image[#image + 1] = thisFrame image[#image + 1] = thisFrame
else else

View File

@@ -20,7 +20,7 @@ local changedPage = UI.Page {
grid = UI.Grid { grid = UI.Grid {
ey = -6, ey = -6,
columns = { columns = {
{ heading = 'Qty', key = 'count', width = 5 }, { heading = 'Qty', key = 'count', width = 6 },
{ heading = 'Change', key = 'change', width = 6 }, { heading = 'Change', key = 'change', width = 6 },
{ heading = 'Rate', key = 'rate', width = 6 }, { heading = 'Rate', key = 'rate', width = 6 },
{ heading = 'Name', key = 'displayName' }, { heading = 'Name', key = 'displayName' },
@@ -64,6 +64,7 @@ function changedPage.grid:getDisplayValues(row)
row.change = ind .. Util.toBytes(row.change) row.change = ind .. Util.toBytes(row.change)
row.count = Util.toBytes(row.count) row.count = Util.toBytes(row.count)
row.rate = Util.toBytes(row.rate)
return row return row
end end

View File

@@ -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"
]
}
}

View File

@@ -0,0 +1,20 @@
{
"peripheral": {
"name": [
"Disk Drive",
"",
"",
"",
"Advanced Monitor"
]
},
"advanced_modem": {
"name": "Ender Modem"
},
"pocket_computer": {
"name": [
"",
"Advanced Pocket Computer"
]
}
}

226
etc/names/enderio.json Normal file
View File

@@ -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"
]
}
}

View File

@@ -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"
]
},
}

View File

@@ -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)"
]
}
}

22
etc/names/ironchest.json Normal file
View File

@@ -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"
}
}

37
etc/names/rftools.json Normal file
View File

@@ -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"
}
}

View File

@@ -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"
}
}

36
etc/names/tconstruct.json Normal file
View File

@@ -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"
}
}

View File

@@ -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" ] = { [ "exnihiloadscensio:hammerStone:0" ] = {
maxCount = 1, maxCount = 1,
ingredients = { ingredients = {
@@ -9,4 +33,11 @@
}, },
count = 1, count = 1,
}, },
[ "exnihiloadscensio:itemMaterial:1" ] = {
ingredients = {
"minecraft:dye:15",
"minecraft:clay_ball:0",
},
count = 1,
},
} }

View File

@@ -1,9 +1,24 @@
{ {
[ "extrautils2:user:0" ] = { [ "extrautils2:decorativesolid:2" ] = {
ingredients = { ingredients = {
"minecraft:dropper:0", "minecraft:stonebrick:0",
"extrautils2:ingredients:0", "minecraft:stonebrick:0",
[ 5 ] = "minecraft:lever: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, count = 1,
}, },
@@ -18,4 +33,136 @@
maxCount = 1, maxCount = 1,
count = 8, 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,
},
} }

114
etc/recipes/ironchest.db Normal file
View File

@@ -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,
},
}

View File

@@ -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" ] = { [ "minecraft:writable_book:0" ] = {
ingredients = { ingredients = {
"minecraft:book:0", "minecraft:book:0",

126
etc/recipes/rftools.db Normal file
View File

@@ -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,
},
}

View File

@@ -1,17 +1,19 @@
{ {
[ "storagedrawers:basicDrawers:0:b85f006d9f6aa0e06184f8931d4e85c1" ] = { [ "storagedrawers:upgradeStorage:4" ] = {
ingredients = { ingredients = {
"minecraft:planks:0", "minecraft:emerald:0",
"minecraft:planks:0", "minecraft:stick:0",
"minecraft:planks:0", "minecraft:emerald:0",
[ 9 ] = "minecraft:planks:0", [ 9 ] = "minecraft:emerald:0",
[ 10 ] = "minecraft:planks:0", [ 10 ] = "minecraft:stick:0",
[ 11 ] = "minecraft:planks:0", [ 11 ] = "minecraft:emerald:0",
[ 6 ] = "minecraft:chest:0", [ 5 ] = "minecraft:stick:0",
[ 6 ] = "storagedrawers:upgradeTemplate:0",
[ 7 ] = "minecraft:stick:0",
}, },
count = 1, count = 1,
}, },
[ "storagedrawers:upgradeTemplate:0" ] = { [ "storagedrawers:upgradeVoid:0" ] = {
ingredients = { ingredients = {
"minecraft:stick:0", "minecraft:stick:0",
"minecraft:stick:0", "minecraft:stick:0",
@@ -19,10 +21,10 @@
[ 9 ] = "minecraft:stick:0", [ 9 ] = "minecraft:stick:0",
[ 10 ] = "minecraft:stick:0", [ 10 ] = "minecraft:stick:0",
[ 11 ] = "minecraft:stick:0", [ 11 ] = "minecraft:stick:0",
[ 5 ] = "minecraft:stick:0", [ 5 ] = "minecraft:obsidian:0",
[ 6 ] = "storagedrawers:basicDrawers:0:b85f006d9f6aa0e06184f8931d4e85c1", [ 6 ] = "storagedrawers:upgradeTemplate:0",
[ 7 ] = "minecraft:stick:0", [ 7 ] = "minecraft:obsidian:0",
}, },
count = 2, count = 1,
}, },
} }

View File

@@ -19,4 +19,18 @@
}, },
count = 4, 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,
},
} }