Advertisement
DuckStrom

Computercraft Crystal Furnace Controller

Nov 11th, 2016
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.08 KB | None | 0 0
  1. -- Location of furnace relative to interface
  2. ex_dir = "up"
  3. -- limit of ores per type to do in a row (to keep your bulk ores from making your rare ores never get extracted)
  4. limit_per_type = 256
  5.  
  6. bl_enabled = true
  7. wl_enabled = false
  8.  
  9. me = peripheral.find("tileinterface")
  10. curr = nil
  11.  
  12. inv_dir = {["up"] = {"down"}, ["down"] = {"up"}, ["north"] = {"south"}, ["south"] = {"north"}, ["east"] = {"west"}, ["west"] = {"east"}}
  13.  
  14. -- List of smeltable items with item name stored as key, and smeltable metadatas stored as values
  15. -- Evaluated before the blacklist
  16. whitelist = {
  17.   ["GeoStrata:geostrata_rock_granite_cobble"]={0},
  18.   ["GeoStrata:geostrata_rock_basalt_cobble"]={0},
  19.   ["GeoStrata:geostrata_rock_marble_cobble"]={0},
  20.   ["GeoStrata:geostrata_rock_limestone_cobble"]={0},
  21.   ["GeoStrata:geostrata_rock_shale_cobble"]={0},
  22.   ["GeoStrata:geostrata_rock_sandstone_cobble"]={0},
  23.   ["GeoStrata:geostrata_rock_pumice_cobble"]={0},
  24.   ["GeoStrata:geostrata_rock_slate_cobble"]={0},
  25.   ["GeoStrata:geostrata_rock_gneiss_cobble"]={0},
  26.   ["GeoStrata:geostrata_rock_peridotite_cobble"]={0},
  27.   ["GeoStrata:geostrata_rock_quartz_cobble"]={0},
  28.   ["GeoStrata:geostrata_rock_hornfel_cobble"]={0},
  29.   ["GeoStrata:geostrata_rock_migmatite_cobble"]={0},
  30.   ["GeoStrata:geostrata_rock_schist_cobble"]={0},
  31.   ["GeoStrata:geostrata_rock_onyx_cobble"]={0},
  32.   ["GeoStrata:geostrata_rock_opal_cobble"]={0}  
  33. }
  34.  
  35. -- List of smeltable items with item name stored as key, and NON-smeltable metadatas stored as values
  36. blacklist = {
  37.   ["RotaryCraft:rotarycraft_item_modextracts"]={},
  38.   ["RotaryCraft:rotarycraft_item_extracts"]={33},
  39. }
  40.  
  41. function isOre(name,ID)
  42.   if wl_enabled and whitelist[name] ~= nil then
  43.     for k,v in ipairs(whitelist[name]) do
  44.       if v == ID then
  45.         return true
  46.       end
  47.     end
  48.   end
  49.  
  50.   if bl_enabled and blacklist[name] ~= nil then
  51.     for k,v in ipairs(blacklist[name]) do
  52.       if v == ID then
  53.         return false
  54.       end
  55.     end
  56.    
  57.     return true
  58.   end
  59.   return false
  60. end
  61.  
  62. function extractFlakes()
  63.   return me.pullItem(ex_dir,2,64)
  64. end
  65.  
  66. function mainLoop()
  67.   no_ore = 0
  68.   while true do
  69.     no_ore = math.min(no_ore + 1, 10)
  70.     inv = me.getAvailableItems()
  71.     if inv[1] ~= nil then
  72.       for k,v in ipairs(inv) do
  73.         if isOre(v.fingerprint.id, v.fingerprint.dmg) then
  74.           no_ore = 0
  75.           print("Smelting " .. v.fingerprint.id .. ":" .. v.fingerprint.dmg)
  76.           curr = v
  77.           remaining = v.size < limit_per_type and v.size or limit_per_type
  78.           while remaining > 0 do
  79.             extractFlakes()
  80.             pc, results = pcall(me.exportItem, v.fingerprint, ex_dir, remaining > 64 and 64 or remaining)
  81.             if pc == true then
  82.               remaining = remaining - results.size
  83.               sleep(1)
  84.             else
  85.               remaining = 0
  86.             end
  87.           end
  88.           v = nil
  89.         end -- if isOre()
  90.       end --  for k,v in ipairs(inv) do
  91.     end --  if inv[1] ~= nil then
  92.     if (no_ore > 0) then -- hack to make sure flakes get extracted fully
  93.       ex_rem = 2
  94.       while (ex_rem > 1) do
  95.         ex_rem = ex_rem + extractFlakes()
  96.         ex_rem = ex_rem / 2
  97.         -- print("ex_rem: " .. ex_rem)
  98.         sleep(2)
  99.       end
  100.     end
  101.     sleep(no_ore > 0 and math.min(math.pow(2,no_ore),64) or 0)
  102.   end -- while true do
  103. end
  104.  
  105. function skipLoop()
  106.   while true do
  107.     event, key = os.pullEvent("key")
  108.       if key == keys.enter then
  109.         if curr ~= nil then
  110.           print("Skipping " .. curr.fingerprint.id .. ":" .. curr.fingerprint.dmg)
  111.           remaining = 0
  112.         else
  113.           print("Nothing to skip")
  114.         end
  115.       elseif key == keys.b then
  116.         bl_enabled = not bl_enabled
  117.         print("Blackist processing " .. tostring(bl_enabled))
  118.       elseif key == keys.w then
  119.         wl_enabled = not wl_enabled
  120.         print("Whitelist processing " .. tostring(wl_enabled))
  121.       end
  122.    end
  123. end
  124.  
  125. extractFlakes()
  126. print("Blacklist enabled: " .. tostring(bl_enabled) .. "\nWhitelist enabled: " .. tostring(wl_enabled) .. "\nWorking...")
  127. parallel.waitForAll(mainLoop,skipLoop)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement