toastonrye

inscriber

Jul 30th, 2022
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --cc:Tweaked: AE2 Inscriber Automation
  2. --pastebin get 2M3g5Q16 inscriber.lua
  3. --inscriber
  4.  
  5. local sides = require("sides")
  6. local inventory = require("inventory")
  7.  
  8. local SILICON_PRESS =           "ae2:silicon_press"
  9. local ENGINEERING_PRESS =       "ae2:engineering_processor_press"
  10. local LOGIC_PRESS =             "ae2:logic_processor_press"
  11. local CALCULATION_PRESS =       "ae2:calculation_processor_press"
  12.  
  13. local LOGIC_CIRCUIT =           "ae2:printed_logic_processor"
  14. local ENGINEERING_CIRCUIT =     "ae2:printed_engineering_processor"
  15. local CALCULATION_CIRCUIT =     "ae2:printed_calculation_processor"
  16. local SILICON_CIRCUIT =         "ae2:printed_silicon"
  17.  
  18. local SILICON =                 "ftbic:silicon"
  19. local DIAMOND =                 "minecraft:diamond"
  20. local GOLD =                    "minecraft:gold_ingot"
  21. local CERTUS_QUARTZ =           "ae2:certus_quartz_crystal"
  22. local REDSTONE =                "minecraft:redstone"
  23.  
  24. local PRINTED_SILICON_RECIPE =              { SILICON_PRESS,        SILICON }
  25. local PRINTED_ENGINEERING_CIRCUIT_RECIPE =  { ENGINEERING_PRESS,    DIAMOND }
  26. local PRINTED_LOGIC_CIRCUIT_RECIPE =        { LOGIC_PRESS,          GOLD }
  27. local PRINTED_CALCULATION_CIRCUIT_RECIPE =  { CALCULATION_PRESS,    CERTUS_QUARTZ }
  28.  
  29. local LOGIC_PROCESSOR_RECIPE =              { LOGIC_CIRCUIT,        REDSTONE,   SILICON_CIRCUIT }
  30. local CALCULATION_PROCESSOR_RECIPE =        { CALCULATION_CIRCUIT,  REDSTONE,   SILICON_CIRCUIT }
  31. local ENGINEERING_PROCESSOR_RECIPE =        { ENGINEERING_CIRCUIT,  REDSTONE,   SILICON_CIRCUIT }
  32.  
  33. local RECIPES = {
  34.     PRINTED_SILICON_RECIPE,
  35.     PRINTED_ENGINEERING_CIRCUIT_RECIPE,
  36.     PRINTED_LOGIC_CIRCUIT_RECIPE,
  37.     PRINTED_CALCULATION_CIRCUIT_RECIPE,
  38.     LOGIC_PROCESSOR_RECIPE,
  39.     CALCULATION_PROCESSOR_RECIPE,
  40.     ENGINEERING_PROCESSOR_RECIPE
  41. }
  42.  
  43. local chest     = inventory.wrap(sides.left)
  44. local inscriber = inventory.wrap(sides.right)
  45. local slots     = { 1,3,2 }
  46.  
  47. local function canMake(recipe,loaded,avail)
  48.     for slot,ingredient in pairs(recipe) do
  49.         local isLoaded = stacksEqual(ingredient, loaded[slots[slot]])
  50.         if not isLoaded then
  51.             if avail[ingredient] == nil then return false end
  52.         end
  53.     end
  54.     return true
  55. end
  56.  
  57. local function canMakeSomething()
  58.     local loaded = inscriber.list()
  59.     local avail = chest.counts()
  60.    
  61.     for _,recipe in pairs(RECIPES) do
  62.         if canMake(recipe,loaded,avail) then return true, recipe end
  63.     end
  64.     return false
  65. end
  66.  
  67. local function make(recipe)
  68.     for n=1,3 do
  69.         local inscriberSlot = slots[n]
  70.         local ingredient    = recipe[n]
  71.         local itemInSlot    = inscriber.item(inscriberSlot)
  72.         local isLoaded      = stacksEqual(ingredient, itemInSlot)
  73.        
  74.         if not isLoaded then
  75.             if itemInSlot ~= ingredient and itemInSlot ~= nil then repeat chest.pull(inscriber, inscriberSlot) until inscriber.item(inscriberSlot) == nil end
  76.             if ingredient ~= nil then
  77.                 repeat
  78.                     local found, slot = chest.find(ingredient)
  79.                     if not found then return end
  80.                 until chest.push(inscriber, slot, 1, inscriberSlot)
  81.             end
  82.         end
  83.     end
  84. end
  85.  
  86. local function takeProduct()
  87.     chest.pull(inscriber, 4)
  88. end
  89.    
  90. while true do
  91.     local canMake, recipe = canMakeSomething()
  92.    
  93.     if canMake then
  94.         repeat takeProduct() until not make(recipe)
  95.     end
  96.     takeProduct()
  97. end
Add Comment
Please, Sign In to add comment