From f0f8ba07295627635adf844f5478e574c904a257 Mon Sep 17 00:00:00 2001 From: kepler155c Date: Thu, 21 Sep 2017 01:42:56 -0400 Subject: [PATCH] cleanup + monitorManager --- apis/configurator.lua | 16 ++ apis/itemDB.lua | 7 +- apis/nameDB.lua | 32 ++++ apps/Turtles.lua | 45 ++++-- apps/chestManager.lua | 24 +-- apps/monitorManager.lua | 335 ++++++++++++++++++++++++++++++++++++++++ apps/music.lua | 11 +- apps/treefarm.lua | 2 +- etc/recipes.db | 326 ++++++++++++++++++++------------------ 9 files changed, 610 insertions(+), 188 deletions(-) create mode 100644 apis/configurator.lua create mode 100644 apis/nameDB.lua create mode 100644 apps/monitorManager.lua diff --git a/apis/configurator.lua b/apis/configurator.lua new file mode 100644 index 0000000..47acf45 --- /dev/null +++ b/apis/configurator.lua @@ -0,0 +1,16 @@ +requireInjector(getfenv(1)) + +local Util = require('util') + +local Configurator = { } + +function Configurator.get() + print('Select device') + for k,v in pairs(device) do + Util.print('%s [%s]', v.name, v.side) + end +end + +Configurator.get() + +return Configurator diff --git a/apis/itemDB.lua b/apis/itemDB.lua index 2322885..8a9e376 100644 --- a/apis/itemDB.lua +++ b/apis/itemDB.lua @@ -1,5 +1,6 @@ -local Util = require('util') +local nameDB = require('nameDB') local TableDB = require('tableDB') +local Util = require('util') local itemDB = TableDB({ fileName = 'usr/config/items.db' }) @@ -59,7 +60,9 @@ function itemDB:getName(item) if detail then return detail.displayName end - return item.name .. ':' .. item.damage + + -- fallback to nameDB + return nameDB:getName(item.name .. ':' .. item.damage) end function itemDB:load() diff --git a/apis/nameDB.lua b/apis/nameDB.lua new file mode 100644 index 0000000..a5115bb --- /dev/null +++ b/apis/nameDB.lua @@ -0,0 +1,32 @@ +local JSON = require('json') +local TableDB = require('tableDB') + +local nameDB = TableDB() + +function nameDB:load() + + local blocks = JSON.decodeFromFile('usr/etc/blocks.json') + + if not blocks then + error('Unable to read usr/etc/blocks.json') + end + + for strId, block in pairs(blocks) do + local 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 + end + end + end +end + +function nameDB:getName(strId) + return self.data[strId] or strId +end + +nameDB:load() + +return nameDB diff --git a/apps/Turtles.lua b/apps/Turtles.lua index 78f0fab..3ed9717 100644 --- a/apps/Turtles.lua +++ b/apps/Turtles.lua @@ -1,5 +1,6 @@ requireInjector(getfenv(1)) +local Config = require('config') local Event = require('event') local itemDB = require('itemDB') local Socket = require('socket') @@ -11,10 +12,13 @@ multishell.setTitle(multishell.getCurrent(), 'Turtles') UI.Button.defaults.focusIndicator = ' ' UI:configure('Turtles', ...) +local config = { } +Config.load('Turtles', config) + local options = { - turtle = { arg = 'i', type = 'number', value = -1, + turtle = { arg = 'i', type = 'number', value = config.id or -1, desc = 'Turtle ID' }, - tab = { arg = 's', type = 'string', value = 'turtles', + tab = { arg = 's', type = 'string', value = config.tab or 'Sel', desc = 'Selected tab to display' }, help = { arg = 'h', type = 'flag', value = false, desc = 'Displays the options' }, @@ -204,12 +208,13 @@ function page.tabs.inventory:draw() v.selected = true end if v.id then - local item = itemDB:get({ v.id, v.dmg }) - if item then - v.id = item.displayName - else - v.id = v.id:gsub('.*:(.*)', '%1') - end +-- local item = itemDB:get({ v.id, v.dmg }) +-- if item then +-- v.id = item.displayName +-- else +-- v.id = v.id:gsub('.*:(.*)', '%1') +-- end + v.id = itemDB:getName(v) end end end @@ -274,6 +279,8 @@ end function page.tabs.turtles:eventHandler(event) if event.type == 'grid_select' then page.turtle = event.selected + config.id = event.selected.id + Config.update('Turtles', config) multishell.setTitle(multishell.getCurrent(), page.turtle.label) if socket then socket:close() @@ -294,6 +301,14 @@ function page.statusBar:draw() UI.StatusBar.draw(self) end +function page.tabs.tabBar:selectTab(tabTitle) + if tabTitle then + config.tab = tabTitle + Config.update('Turtles', config) + return UI.TabBar.selectTab(self, tab) + end +end + function page:eventHandler(event) if event.type == 'quit' then UI:exitPullEvents() @@ -333,12 +348,24 @@ Event.onInterval(1, function() local t = _G.network[page.turtle.id] page.turtle = t page:draw() +debug('sync') page:sync() +debug('sync done') end end) UI:setPage(page) -page.tabs:activateTab(page.tabs[options.tab.value]) +local lookup = { + Run = page.tabs.scripts, + Sel = page.tabs.turtles, + Inv = page.tabs.inventory, + Mod = page.tabs.policy, + Act = page.tabs.action, +} + +if lookup[options.tab.value] then + page.tabs:activateTab(lookup[options.tab.value]) +end UI:pullEvents() diff --git a/apps/chestManager.lua b/apps/chestManager.lua index 385a4e4..b129f76 100644 --- a/apps/chestManager.lua +++ b/apps/chestManager.lua @@ -31,7 +31,8 @@ if not controller:isValid() then controller = nil end -local chestAdapter = ChestAdapter({ direction = 'north', wrapSide = 'colossalchests:colossalChest_0' }) +---------------------------------------------------------------------- FIX ME +local chestAdapter = ChestAdapter({ direction = 'north', wrapSide = 'colossalchests:colossalChest' }) local turtleChestAdapter = ChestAdapter({ direction = 'down', wrapSide = 'top' }) local RESOURCE_FILE = 'usr/config/resources.db' @@ -239,7 +240,7 @@ local function craftItems(craftList, allItems) for key,item in pairs(craftList) do - if not recipes[key] then + if not recipes[key] and not item.rsControl then if not controller then item.status = '(no recipe)' else @@ -715,23 +716,6 @@ function listingPage:applyFilter() self.grid:setValues(t) end --- without duck antenna -local function getTurtleInventoryOld() - local inventory = { } - for i = 1,16 do - if turtle.getItemCount(i) > 0 then - turtle.select(i) - local item = turtle.getItemDetail() - inventory[i] = { - name = item.name, - damage = item.damage, - count = item.count, - } - end - end - return inventory -end - local function getTurtleInventory() local inventory = { } for i = 1,16 do @@ -741,6 +725,8 @@ local function getTurtleInventory() local items = turtleChestAdapter:listItems() _, inventory[i] = next(items) turtleChestAdapter:extract(1, qty, i) +debug(inventory[i]) +read() end end return inventory diff --git a/apps/monitorManager.lua b/apps/monitorManager.lua new file mode 100644 index 0000000..ffcef2f --- /dev/null +++ b/apps/monitorManager.lua @@ -0,0 +1,335 @@ +requireInjector(getfenv(1)) + +local Util = require('util') + +local args = { ... } +local processes = { } +local parentTerm = term.current() + +local function syntax() + printError('Syntax:') + printError('Start a new session') + print('monitorManager start [configFile] [monitor]') + print() + printError('Run programs in session') + print('monitorManager run [program] [arguments]') + print() + error() +end + +local option = table.remove(args, 1) + +if option == 'run' then + local run = table.remove(args, 1) + if not run then + syntax() + end + os.queueEvent('monitor_client', { run = run, args = args }) + return +end + +if option ~= 'start' then + syntax() +end + +local configFile = args[1] or syntax() +local monitor = peripheral.find(args[2] or 'monitor') or syntax() +monitor.setTextScale(.5) +monitor.clear() + +local monDim = { } +monDim.width, monDim.height = monitor.getSize() + +if fs.exists(configFile) then + local config = Util.readTable(configFile) + if config then + for _,v in pairs(config) do + os.queueEvent('monitor_client', v) + end + end +end + +local function saveConfig() + local t = { } + for _,process in pairs(processes) do + process.args.x = process.x + process.args.y = process.y + process.args.width = process.width - 2 + process.args.height = process.height - 3 + table.insert(t, process.args) + end + Util.writeTable(configFile, t) +end + +local function write(win, x, y, text) + win.setCursorPos(x, y) + win.write(text) +end + +local function redraw() + monitor.clear() + for k,process in pairs(processes) do + process.container.redraw() + process:focus(k == #processes) + end +end + +local Process = { } + +function Process:focus(focused) + if focused then + self.titleBar.setBackgroundColor(colors.green) + else + self.titleBar.setBackgroundColor(colors.gray) + end + self.titleBar.clear() + self.titleBar.setTextColor(colors.black) + self.titleBar.setCursorPos(2, 1) + self.titleBar.write(self.title or 'Terminal') + + self.titleBar.setCursorPos(self.width - 3, 1) + self.titleBar.write('*') + + if focused then + self.window.restoreCursor() + end +end + +function Process:drawSizers() + self.container.setBackgroundColor(colors.black) + self.container.setTextColor(colors.white) + + if self.showSizers then + write(self.container, 1, 1, '\135') + write(self.container, self.width, 1, '\139') + write(self.container, 1, self.height, '\141') + write(self.container, self.width, self.height, '\142') + + self.container.setTextColor(colors.yellow) + write(self.container, 1, 3, '+') + write(self.container, 1, 5, '-') + write(self.container, 3, 1, '+') + write(self.container, 5, 1, '-') + + local str = string.format('%d x %d', self.width - 2, self.height - 3) + write(self.container, (self.width - #str) / 2, 1, str) + + else + write(self.container, 1, 1, string.rep(' ', self.width)) + write(self.container, self.width, 1, ' ') + write(self.container, 1, self.height, ' ') + write(self.container, self.width, self.height, ' ') + write(self.container, 1, 3, ' ') + write(self.container, 1, 5, ' ') + end +end + +function Process:new(args) + self.args = args + + args.width = args.width or 42 + args.height = args.height or 18 + + self.x = args.x or 1 + self.y = args.y or 1 + self.width = args.width + 2 + self.height = args.height + 3 + + self:adjustDimensions() + + self.container = window.create(monitor, self.x, self.y, self.width, self.height, true) + self.titleBar = window.create(self.container, 2, 2, self.width - 2, 1, true) + self.window = window.create(self.container, 2, 3, args.width, args.height, true) + + self.terminal = self.window + + self.co = coroutine.create(function() + + local result, err = shell.run('shell', args.run) + +Util.print({ result, err }) + if not result and err ~= 'Terminated' then + if err then +Util.print(tostring(err)) + printError(tostring(err)) + os.sleep(3) + end + end + for k,v in pairs(processes) do + if v == self then + table.remove(processes, k) + break + end + end +Util.print('dead') + read() + --saveConfig() + redraw() + end) + + self:focus(true) + self:resume() + self.title = multishell.getTab(multishell.getCurrent()).title + + return tab +end + +function Process:adjustDimensions() + + self.width = math.min(self.width, monDim.width) + self.height = math.min(self.height, monDim.height) + + self.x = math.max(1, self.x) + self.y = math.max(1, self.y) + self.x = math.min(self.x, monDim.width - self.width + 1) + self.y = math.min(self.y, monDim.height - self.height + 1) +end + +function Process:reposition() + + self:adjustDimensions() + self.container.reposition(self.x, self.y, self.width, self.height) + self.container.setBackgroundColor(colors.black) + self.container.clear() + + self.titleBar.reposition(2, 2, self.width - 2, 1) + self.window.reposition(2, 3, self.width - 2, self.height - 3) + + redraw() +end + +function Process:resizeClick(x, y) + if x == 1 and y == 3 then + self.height = self.height + 1 + elseif x == 1 and y == 5 then + self.height = self.height - 1 + elseif x == 3 and y == 1 then + self.width = self.width + 1 + elseif x == 5 and y == 1 then + self.width = self.width - 1 + else + return + end + self:reposition() + self:resume('term_resize') + self:drawSizers() + saveConfig() +end + +function Process:resume(event, ...) + if coroutine.status(self.co) == 'dead' then + return + end + + if not self.filter or self.filter == event or event == "terminate" then + term.redirect(self.terminal) + + local ok, result = coroutine.resume(self.co, event, ...) + self.terminal = term.current() + if ok then + self.filter = result + else + printError(result) + end + return ok, result + end +end + +function getProcessAt(x, y) + for k = #processes, 1, -1 do + local process = processes[k] + if x >= process.x and + y >= process.y and + x <= process.x + process.width - 1 and + y <= process.y + process.height - 1 then + return k, process + end + end +end + +while true do + + local event = { os.pullEventRaw() } + + if event[1] == 'terminate' then + term.redirect(parentTerm) + break + + elseif event[1] == 'monitor_client' then + local process = { } + setmetatable(process, { __index = Process }) + + local focused = processes[#processes] + if focused then + focused:focus(false) + end + + table.insert(processes, process) + process:new(event[2]) + saveConfig() + + elseif event[1] == "monitor_touch" then + local x, y = event[3], event[4] + + local key, process = getProcessAt(x, y) + if process then + if key ~= #processes then + local focused = processes[#processes] + focused:focus(false) + process:focus(true) + table.remove(processes, key) + table.insert(processes, process) + end + + x = x - process.x + 1 + y = y - process.y + 1 + + if y == 2 then -- title bar + if x == process.width - 2 then + process:resume('terminate') + else + process.showSizers = not process.showSizers + process:drawSizers() + end + + elseif x == 1 or y == 1 then -- sizers + process:resizeClick(x, y) + + elseif x > 1 and x < process.width then + if process.showSizers then + process.showSizers = false + process:drawSizers() + end + process:resume('mouse_click', 1, x - 1, y - 2) + process:resume('mouse_up', 1, x - 1, y - 2) + end + else + process = processes[#processes] + if process and process.showSizers then + process.x = math.floor(x - (process.width) / 2) + process.y = y + process:reposition() + process:drawSizers() + saveConfig() + end + end + + elseif event == "char" or + event == "key" or + event == "key_up" or + event == "paste" then + + local focused = processes[#processes] + if focused then + focused:resume(unpack(event)) + end + + else + for _,process in pairs(Util.shallowCopy(processes)) do + process:resume(unpack(event)) + end + if processes[#processes] then + processes[#processes].window.restoreCursor() + end + end +end diff --git a/apps/music.lua b/apps/music.lua index a01f1c6..5ba91f2 100644 --- a/apps/music.lua +++ b/apps/music.lua @@ -14,16 +14,9 @@ if not turtle then error('This program can only be run on a turtle') end -if not device.monitor then - error('Monitor must be attached (3 wide x 1 tall') -end +UI:configure('Music', ...) -local monitor = UI.Device({ - deviceType = 'monitor', - textScale = 0.5, -}) - -UI:setDefaultDevice(monitor) +local monitor = UI.term local page = UI.Page({ volume = 15, diff --git a/apps/treefarm.lua b/apps/treefarm.lua index cbd1bd5..1490bb6 100644 --- a/apps/treefarm.lua +++ b/apps/treefarm.lua @@ -610,7 +610,7 @@ local function findGround() error('lost') end - if b == TORCH or b == FURNACE then + if b == TORCH or DIG_BLACKLIST[block.name] then turtle.forward() else turtle.digDown() diff --git a/etc/recipes.db b/etc/recipes.db index 96b9307..f69c131 100644 --- a/etc/recipes.db +++ b/etc/recipes.db @@ -55,17 +55,6 @@ [ 6 ] = "minecraft:stonebrick:0", }, }, - [ "minecraft:dark_oak_fence:0" ] = { - count = 3, - ingredients = { - "minecraft:planks:5", - "minecraft:stick:0", - "minecraft:planks:5", - [ 5 ] = "minecraft:planks:5", - [ 6 ] = "minecraft:stick:0", - [ 7 ] = "minecraft:planks:5", - }, - }, [ "minecraft:fence:0" ] = { count = 3, ingredients = { @@ -77,6 +66,17 @@ [ 7 ] = "minecraft:planks:0", }, }, + [ "minecraft:dark_oak_fence:0" ] = { + count = 3, + ingredients = { + "minecraft:planks:5", + "minecraft:stick:0", + "minecraft:planks:5", + [ 5 ] = "minecraft:planks:5", + [ 6 ] = "minecraft:stick:0", + [ 7 ] = "minecraft:planks:5", + }, + }, [ "minecraft:stone_stairs:0" ] = { count = 8, ingredients = { @@ -130,6 +130,12 @@ [ 7 ] = "minecraft:snow:0", }, }, + [ "minecraft:netherrack:0" ] = { + count = 9, + ingredients = { + [ 6 ] = "extrautils2:compressednetherrack:0", + }, + }, [ "minecraft:red_sandstone:0" ] = { count = 1, ingredients = { @@ -162,12 +168,6 @@ [ 7 ] = "minecraft:stained_glass:11", }, }, - [ "minecraft:netherrack:0" ] = { - count = 9, - ingredients = { - [ 6 ] = "extrautils2:compressednetherrack:0", - }, - }, [ "minecraft:stained_glass:8" ] = { count = 8, ingredients = { @@ -193,21 +193,22 @@ [ 6 ] = "minecraft:planks:1", }, }, - [ "minecraft:carpet:14" ] = { - count = 3, - ingredients = { - "minecraft:wool:14", - "minecraft:wool:14", - }, - }, - [ "minecraft:redstone_lamp:0" ] = { + [ "minecraft:acacia_fence_gate:0" ] = { count = 1, ingredients = { - [ 10 ] = "minecraft:redstone:0", - [ 2 ] = "minecraft:redstone:0", - [ 5 ] = "minecraft:redstone:0", - [ 6 ] = "minecraft:glowstone:0", - [ 7 ] = "minecraft:redstone:0", + "minecraft:stick:0", + "minecraft:planks:4", + "minecraft:stick:0", + [ 5 ] = "minecraft:stick:0", + [ 6 ] = "minecraft:planks:4", + [ 7 ] = "minecraft:stick:0", + }, + }, + [ "minecraft:wool:14" ] = { + count = 1, + ingredients = { + [ 5 ] = "minecraft:wool:0", + [ 6 ] = "minecraft:dye:1", }, }, [ "minecraft:sandstone:0" ] = { @@ -219,18 +220,11 @@ [ 6 ] = "minecraft:sand:0", }, }, - [ "minecraft:diamond_block:0" ] = { - count = 1, + [ "minecraft:carpet:14" ] = { + count = 3, ingredients = { - "minecraft:diamond:0", - "minecraft:diamond:0", - "minecraft:diamond:0", - [ 9 ] = "minecraft:diamond:0", - [ 10 ] = "minecraft:diamond:0", - [ 11 ] = "minecraft:diamond:0", - [ 5 ] = "minecraft:diamond:0", - [ 6 ] = "minecraft:diamond:0", - [ 7 ] = "minecraft:diamond:0", + "minecraft:wool:14", + "minecraft:wool:14", }, }, [ "minecraft:sign:0" ] = { @@ -291,6 +285,15 @@ [ 7 ] = "minecraft:hardened_clay:0", }, }, + [ "minecraft:sandstone:2" ] = { + count = 4, + ingredients = { + "minecraft:sandstone:0", + "minecraft:sandstone:0", + [ 5 ] = "minecraft:sandstone:0", + [ 6 ] = "minecraft:sandstone:0", + }, + }, [ "minecraft:stained_glass:4" ] = { count = 8, ingredients = { @@ -305,31 +308,18 @@ [ 7 ] = "minecraft:glass:0", }, }, - [ "minecraft:wool:14" ] = { + [ "minecraft:diamond_block:0" ] = { count = 1, ingredients = { - [ 5 ] = "minecraft:wool:0", - [ 6 ] = "minecraft:dye:1", - }, - }, - [ "minecraft:acacia_fence_gate:0" ] = { - count = 1, - ingredients = { - "minecraft:stick:0", - "minecraft:planks:4", - "minecraft:stick:0", - [ 5 ] = "minecraft:stick:0", - [ 6 ] = "minecraft:planks:4", - [ 7 ] = "minecraft:stick:0", - }, - }, - [ "minecraft:sandstone:2" ] = { - count = 4, - ingredients = { - "minecraft:sandstone:0", - "minecraft:sandstone:0", - [ 5 ] = "minecraft:sandstone:0", - [ 6 ] = "minecraft:sandstone:0", + "minecraft:diamond:0", + "minecraft:diamond:0", + "minecraft:diamond:0", + [ 9 ] = "minecraft:diamond:0", + [ 10 ] = "minecraft:diamond:0", + [ 11 ] = "minecraft:diamond:0", + [ 5 ] = "minecraft:diamond:0", + [ 6 ] = "minecraft:diamond:0", + [ 7 ] = "minecraft:diamond:0", }, }, [ "minecraft:anvil:0" ] = { @@ -344,6 +334,14 @@ [ 6 ] = "minecraft:iron_ingot:0", }, }, + [ "minecraft:stone_slab:6" ] = { + count = 6, + ingredients = { + [ 5 ] = "minecraft:nether_brick:0", + [ 6 ] = "minecraft:nether_brick:0", + [ 7 ] = "minecraft:nether_brick:0", + }, + }, [ "minecraft:chest:0" ] = { count = 1, ingredients = { @@ -414,14 +412,6 @@ [ 6 ] = "minecraft:quartz_block:0", }, }, - [ "minecraft:stone_slab:6" ] = { - count = 6, - ingredients = { - [ 5 ] = "minecraft:nether_brick:0", - [ 6 ] = "minecraft:nether_brick:0", - [ 7 ] = "minecraft:nether_brick:0", - }, - }, [ "minecraft:stained_glass:9" ] = { count = 8, ingredients = { @@ -436,6 +426,16 @@ [ 7 ] = "minecraft:glass:0", }, }, + [ "minecraft:redstone_lamp:0" ] = { + count = 1, + ingredients = { + [ 10 ] = "minecraft:redstone:0", + [ 2 ] = "minecraft:redstone:0", + [ 5 ] = "minecraft:redstone:0", + [ 6 ] = "minecraft:glowstone:0", + [ 7 ] = "minecraft:redstone:0", + }, + }, [ "minecraft:sandstone:1" ] = { count = 1, ingredients = { @@ -1057,6 +1057,13 @@ [ 7 ] = "minecraft:planks:0", }, }, + [ "minecraft:lever:0" ] = { + count = 1, + ingredients = { + [ 2 ] = "minecraft:stick:0", + [ 6 ] = "minecraft:cobblestone:0", + }, + }, [ "minecraft:stained_hardened_clay:3" ] = { count = 8, ingredients = { @@ -1071,14 +1078,6 @@ [ 7 ] = "minecraft:hardened_clay:0", }, }, - [ "minecraft:wooden_slab:0" ] = { - count = 6, - ingredients = { - [ 5 ] = "minecraft:planks:0", - [ 6 ] = "minecraft:planks:0", - [ 7 ] = "minecraft:planks:0", - }, - }, [ "minecraft:prismarine:2" ] = { count = 1, ingredients = { @@ -1093,11 +1092,12 @@ [ 7 ] = "minecraft:prismarine_shard:0", }, }, - [ "minecraft:lever:0" ] = { - count = 1, + [ "minecraft:wooden_slab:0" ] = { + count = 6, ingredients = { - [ 2 ] = "minecraft:stick:0", - [ 6 ] = "minecraft:cobblestone:0", + [ 5 ] = "minecraft:planks:0", + [ 6 ] = "minecraft:planks:0", + [ 7 ] = "minecraft:planks:0", }, }, [ "minecraft:detector_rail:0" ] = { @@ -1120,13 +1120,24 @@ [ 6 ] = "minecraft:wool:13", }, }, + [ "minecraft:glass_pane:0" ] = { + count = 16, + ingredients = { + "minecraft:glass:0", + "minecraft:glass:0", + "minecraft:glass:0", + [ 5 ] = "minecraft:glass:0", + [ 6 ] = "minecraft:glass:0", + [ 7 ] = "minecraft:glass:0", + }, + }, [ "minecraft:book:0" ] = { count = 1, ingredients = { "minecraft:paper:0", "minecraft:paper:0", - "minecraft:paper:0", - [ 5 ] = "minecraft:leather:0", + [ 5 ] = "minecraft:paper:0", + [ 6 ] = "minecraft:leather:0", }, }, [ "minecraft:cauldron:0" ] = { @@ -1141,29 +1152,18 @@ [ 7 ] = "minecraft:iron_ingot:0", }, }, - [ "minecraft:glass_pane:0" ] = { - count = 16, - ingredients = { - "minecraft:glass:0", - "minecraft:glass:0", - "minecraft:glass:0", - [ 5 ] = "minecraft:glass:0", - [ 6 ] = "minecraft:glass:0", - [ 7 ] = "minecraft:glass:0", - }, - }, [ "minecraft:gold_block:0" ] = { - count = 1, + count = 63, 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:gold_ingot:0", - [ 7 ] = "minecraft:gold_ingot:0", + "minecraft:gold_block:0", + "minecraft:gold_block:0", + "minecraft:gold_block:0", + [ 9 ] = "minecraft:gold_block:0", + [ 10 ] = "minecraft:gold_block:0", + [ 11 ] = "minecraft:gold_block:0", + [ 5 ] = "minecraft:gold_block:0", + [ 6 ] = "minecraft:gold_block:0", + [ 7 ] = "minecraft:gold_block:0", }, }, [ "minecraft:wool:0" ] = { @@ -1239,6 +1239,17 @@ [ 7 ] = "minecraft:stained_glass:3", }, }, + [ "minecraft:repeater:0" ] = { + count = 1, + ingredients = { + "minecraft:redstone_torch:0", + "minecraft:redstone:0", + "minecraft:redstone_torch:0", + [ 5 ] = "minecraft:stone:0", + [ 6 ] = "minecraft:stone:0", + [ 7 ] = "minecraft:stone:0", + }, + }, [ "minecraft:carpet:5" ] = { count = 3, ingredients = { @@ -1784,6 +1795,14 @@ [ 7 ] = "minecraft:wheat:0", }, }, + [ "minecraft:wooden_slab:3" ] = { + count = 6, + ingredients = { + [ 5 ] = "minecraft:planks:3", + [ 6 ] = "minecraft:planks:3", + [ 7 ] = "minecraft:planks:3", + }, + }, [ "minecraft:stained_glass:2" ] = { count = 8, ingredients = { @@ -1859,6 +1878,19 @@ [ 7 ] = "minecraft:stained_glass:7", }, }, + [ "minecraft:dye:1" ] = { + count = 1, + ingredients = { + [ 6 ] = "minecraft:red_flower:0", + }, + }, + [ "minecraft:wool:1" ] = { + count = 1, + ingredients = { + [ 5 ] = "minecraft:dye:14", + [ 6 ] = "minecraft:wool:0", + }, + }, [ "minecraft:stained_glass_pane:14" ] = { count = 16, ingredients = { @@ -1870,19 +1902,6 @@ [ 7 ] = "minecraft:stained_glass:14", }, }, - [ "minecraft:wool:1" ] = { - count = 1, - ingredients = { - [ 5 ] = "minecraft:dye:14", - [ 6 ] = "minecraft:wool:0", - }, - }, - [ "minecraft:dye:1" ] = { - count = 1, - ingredients = { - [ 6 ] = "minecraft:red_flower:0", - }, - }, [ "minecraft:ender_eye:0" ] = { count = 1, ingredients = { @@ -1890,18 +1909,15 @@ [ 6 ] = "minecraft:ender_pearl:0", }, }, - [ "minecraft:bookshelf:0" ] = { - count = 1, + [ "minecraft:jungle_stairs:0" ] = { + count = 4, ingredients = { - "minecraft:planks:0", - "minecraft:planks:0", - "minecraft:planks:0", - [ 9 ] = "minecraft:planks:0", - [ 10 ] = "minecraft:planks:0", - [ 11 ] = "minecraft:planks:0", - [ 5 ] = "minecraft:book:0", - [ 6 ] = "minecraft:book:0", - [ 7 ] = "minecraft:book:0", + "minecraft:planks:3", + [ 9 ] = "minecraft:planks:3", + [ 10 ] = "minecraft:planks:3", + [ 11 ] = "minecraft:planks:3", + [ 5 ] = "minecraft:planks:3", + [ 6 ] = "minecraft:planks:3", }, }, [ "minecraft:carpet:11" ] = { @@ -1942,11 +1958,18 @@ [ 6 ] = "minecraft:stone:0", }, }, - [ "minecraft:wool:13" ] = { + [ "minecraft:bookshelf:0" ] = { count = 1, ingredients = { - [ 5 ] = "minecraft:wool:0", - [ 6 ] = "minecraft:dye:2", + "minecraft:planks:0", + "minecraft:planks:0", + "minecraft:planks:0", + [ 9 ] = "minecraft:planks:0", + [ 10 ] = "minecraft:planks:0", + [ 11 ] = "minecraft:planks:0", + [ 5 ] = "minecraft:book:0", + [ 6 ] = "minecraft:book:0", + [ 7 ] = "minecraft:book:0", }, }, [ "minecraft:jungle_fence:0" ] = { @@ -1960,6 +1983,13 @@ [ 7 ] = "minecraft:planks:3", }, }, + [ "minecraft:wool:13" ] = { + count = 1, + ingredients = { + [ 5 ] = "minecraft:wool:0", + [ 6 ] = "minecraft:dye:2", + }, + }, [ "minecraft:wool:7" ] = { count = 1, ingredients = { @@ -1975,20 +2005,6 @@ [ 7 ] = "minecraft:planks:4", }, }, - [ "minecraft:stained_glass:12" ] = { - count = 8, - 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 ] = "minecraft:dye:3", - [ 7 ] = "minecraft:glass:0", - }, - }, [ "minecraft:dispenser:0" ] = { count = 1, ingredients = { @@ -2003,6 +2019,20 @@ [ 7 ] = "minecraft:cobblestone:0", }, }, + [ "minecraft:stained_glass:12" ] = { + count = 8, + 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 ] = "minecraft:dye:3", + [ 7 ] = "minecraft:glass:0", + }, + }, [ "minecraft:planks:1" ] = { count = 4, ingredients = {