SHOW:
|
|
- or go back to the newest paste.
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 |