API: fix custom recipe registration

This commit is contained in:
Jean-Patrick Guerrero 2021-12-24 00:36:13 +01:00
parent 16a1865e11
commit c7f6e1db62
3 changed files with 33 additions and 31 deletions

View File

@ -257,4 +257,4 @@ end
--i3.files.tests.tabs() --i3.files.tests.tabs()
--i3.files.tests.operators() --i3.files.tests.operators()
--i3.files.tests.compression() --i3.files.tests.compression()
--i3.files.tests.custom_recipes(http) --i3.files.tests.custom_recipes()

View File

@ -1,5 +1,5 @@
local make_fs = i3.files.gui()
local http = ... local http = ...
local make_fs = i3.files.gui()
IMPORT("gmatch", "split") IMPORT("gmatch", "split")
IMPORT("S", "err", "fmt", "reg_items") IMPORT("S", "err", "fmt", "reg_items")
@ -22,7 +22,7 @@ end
function i3.register_craft(def) function i3.register_craft(def)
local width, c = 0, 0 local width, c = 0, 0
if true_str(def.url) then if http and true_str(def.url) then
http.fetch({url = def.url}, function(result) http.fetch({url = def.url}, function(result)
if result.succeeded then if result.succeeded then
local t = core.parse_json(result.data) local t = core.parse_json(result.data)
@ -51,7 +51,7 @@ function i3.register_craft(def)
def.result = nil def.result = nil
end end
if not true_str(def.output) then if not true_str(def.output) and not def.url then
return err "i3.register_craft: output missing" return err "i3.register_craft: output missing"
end end
@ -69,9 +69,7 @@ function i3.register_craft(def)
end end
local cp = copy(def.grid) local cp = copy(def.grid)
sort(cp, function(a, b) sort(cp, function(a, b) return #a > #b end)
return #a > #b
end)
width = #cp[1] width = #cp[1]
@ -86,7 +84,8 @@ function i3.register_craft(def)
def.items[c] = def.key[symbol] def.items[c] = def.key[symbol]
end end
else else
local items, len = def.items, #def.items local items = copy(def.items)
local len = #items
def.items = {} def.items = {}
for i = 1, len do for i = 1, len do
@ -98,14 +97,18 @@ function i3.register_craft(def)
end end
for i = 1, len do for i = 1, len do
while #split(items[i], ",") < width do while #split(items[i], ",", true) < width do
items[i] = fmt("%s,", items[i]) items[i] = fmt("%s,", items[i])
end end
end end
for name in gmatch(concat(items, ","), "[%s%w_:]+") do for _, line in ipairs(items) do
line = split(line, ",", true)
for _, v in ipairs(line) do
c++ c++
def.items[c] = clean_name(name) def.items[c] = clean_name(v)
end
end end
end end

View File

@ -38,6 +38,24 @@ i3.register_craft({
items = {"default:copper_ingot 7, default:tin_ingot, default:steel_ingot 2"}, items = {"default:copper_ingot 7, default:tin_ingot, default:steel_ingot 2"},
}) })
i3.register_craft {
result = "default:tree",
items = {
"default:wood",
"",
"default:wood"
},
}
i3.register_craft {
result = "default:cobble 16",
items = {
"default:stone, default:stone",
"default:stone, , default:stone",
", default:stone, default:stone",
}
}
i3.register_craft({ i3.register_craft({
grid = { grid = {
"X", "X",
@ -311,22 +329,3 @@ i3.register_craft({
}, },
result = "default:mese 3", result = "default:mese 3",
}) })
i3.register_craft({
grid = {
"X #",
" ## ",
"X#X#",
"#X#X#",
"X X##X#X",
" ## ",
"#X#X#",
"#X#X#",
"X #",
},
key = {
['#'] = "default:wood",
['X'] = "default:glass",
},
result = "default:mese 3",
})