From b96c064431f2dc3d895f2466cc53157bcd507fa3 Mon Sep 17 00:00:00 2001 From: kepler155c Date: Sun, 28 Oct 2018 03:24:32 -0400 Subject: [PATCH] brewing station auto learn --- milo/MiloRemote.lua | 1 + milo/apis/milo.lua | 14 ++++++++ milo/apis/storage.lua | 2 +- milo/plugins/machineLearn.lua | 15 +-------- milo/plugins/potionImportTask.lua | 54 +++++++++++++++++++++++++++---- 5 files changed, 64 insertions(+), 22 deletions(-) diff --git a/milo/MiloRemote.lua b/milo/MiloRemote.lua index b6f689c..8f63f19 100644 --- a/milo/MiloRemote.lua +++ b/milo/MiloRemote.lua @@ -248,6 +248,7 @@ function page:applyFilter() self.grid:setValues(t) end +debug(options.slot) if options.slot.value then debug('Transfer items initialized') Event.onInterval(2, function() diff --git a/milo/apis/milo.lua b/milo/apis/milo.lua index bcbbef8..8fee5e7 100644 --- a/milo/apis/milo.lua +++ b/milo/apis/milo.lua @@ -153,6 +153,20 @@ function Milo:eject(item, qty) end end +function Milo:saveMachineRecipe(recipe, result, machine) + local key = Milo:uniqueKey(result) + + -- save the recipe + self.context.userRecipes[key] = recipe + Util.writeTable(Milo.RECIPES_FILE, self.context.userRecipes) + + -- save the machine association + Craft.machineLookup[key] = machine + Util.writeTable(Craft.MACHINE_LOOKUP, Craft.machineLookup) + + Craft.loadRecipes() +end + function Milo:mergeResources(t) for _,v in pairs(self.context.resources) do local item = self:getItem(t, v) diff --git a/milo/apis/storage.lua b/milo/apis/storage.lua index 2d0852c..dc0ab7b 100644 --- a/milo/apis/storage.lua +++ b/milo/apis/storage.lua @@ -218,7 +218,7 @@ function NetworkedAdapter:insert(slot, qty, toSlot, item, source) if amount > 0 then debug('INS: %s(%d): %s[%d] -> %s', item.name, amount, - source, slot, adapter.name) + source or self.localName, slot, adapter.name) self.dirty = true adapter.dirty = true local entry = self.activity[key] or 0 diff --git a/milo/plugins/machineLearn.lua b/milo/plugins/machineLearn.lua index 1af4b46..d1197e2 100644 --- a/milo/plugins/machineLearn.lua +++ b/milo/plugins/machineLearn.lua @@ -1,4 +1,3 @@ -local Craft = require('turtle.craft') local itemDB = require('itemDB') local Milo = require('milo') local UI = require('ui') @@ -8,8 +7,6 @@ local colors = _G.colors local device = _G.device local turtle = _G.turtle -local MACHINE_LOOKUP = 'usr/config/machine_crafting.db' - local context = Milo:getContext() local machineLearnWizard = UI.Page { @@ -117,17 +114,7 @@ function pages.confirmation:validate() recipe.ingredients[k] = Milo:uniqueKey(v) end - local key = Milo:uniqueKey(result) - - -- save the recipe - context.userRecipes[key] = recipe - Util.writeTable(Milo.RECIPES_FILE, context.userRecipes) - - -- save the machine association - Craft.machineLookup[key] = machine.name - Util.writeTable(MACHINE_LOOKUP, Craft.machineLookup) - - Craft.loadRecipes() + Milo:saveMachineRecipe(recipe, result, machine.name) local listingPage = UI:getPage('listing') local displayName = itemDB:getName(result) diff --git a/milo/plugins/potionImportTask.lua b/milo/plugins/potionImportTask.lua index e3fd9f7..144d580 100644 --- a/milo/plugins/potionImportTask.lua +++ b/milo/plugins/potionImportTask.lua @@ -1,21 +1,61 @@ -local Milo = require('milo') +local Craft = require('turtle.craft') +local Milo = require('milo') local device = _G.device local PotionImportTask = { name = 'potions', priority = 30, + brewQueue = { }, } function PotionImportTask:cycle(context) for _, v in pairs(device) do - if v.type == 'minecraft:brewing_stand' and v.getBrewTime() == 0 then - local list = v.list() - if not list[4] then - for slot = 1, 3 do - if list[slot] then - context.storage:import(v.name, slot, 1, list[slot]) + if v.type == 'minecraft:brewing_stand' then + if v.getBrewTime() == 0 then + local list = v.list() + + if list[1] and not list[4] then + -- brewing has completd + + if self.brewQueue[v.name] and list[1] then + local key = Milo:uniqueKey(list[1]) + if not Craft.findRecipe(key) then + debug('saving new recipe') + Milo:saveMachineRecipe(self.brewQueue[v.name], list[1], v.name) + end end + for slot = 1, 3 do + if list[slot] then + context.storage:import(v.name, slot, 1, list[slot]) + end + end + end + self.brewQueue[v.name] = nil + + elseif not self.brewQueue[v.name] then + local recipe = { + count = 3, + ingredients = { }, + maxCount = 3, + } + local list = v.list() + + local function valid() + for i = 1, 4 do + if not list[i] then + return false + end + end + return true + end + + if valid() then + for i = 1, 4 do + recipe.ingredients[i] = Milo:uniqueKey(list[i]) + end + + self.brewQueue[v.name] = recipe end end end