70 lines
1.8 KiB
Lua
70 lines
1.8 KiB
Lua
-- LUALOCALS < ---------------------------------------------------------
|
|
local error, math, nodecore, pairs, table, type
|
|
= error, math, nodecore, pairs, table, type
|
|
local math_floor, table_insert
|
|
= math.floor, table.insert
|
|
-- LUALOCALS > ---------------------------------------------------------
|
|
|
|
local craft_recipes = {}
|
|
nodecore.craft_recipes = craft_recipes
|
|
|
|
local id = 0
|
|
|
|
function nodecore.register_craft(recipe)
|
|
recipe.action = recipe.action or "place"
|
|
local canrot
|
|
recipe.nodes = recipe.nodes or {}
|
|
for _, v in pairs(recipe.nodes) do
|
|
v.x = v.x or 0
|
|
v.y = v.y or 0
|
|
v.z = v.z or 0
|
|
if type(v.match) == "table" and v.match.count then
|
|
v.match.excess = v.match.excess or true
|
|
end
|
|
canrot = canrot or v.x ~= 0 or v.z ~= 0
|
|
if v.x == 0 and v.y == 0 and v.z == 0 then
|
|
recipe.root = v
|
|
end
|
|
end
|
|
if not recipe.root or not recipe.root.match then
|
|
error "recipe.nodes must have a match for 0,0,0"
|
|
end
|
|
if not recipe.label then
|
|
id = id + 1
|
|
recipe.label = "unnamed " .. recipe.action .. " " .. id
|
|
end
|
|
if recipe.toolgroups and recipe.toolwear ~= false then
|
|
recipe.toolwear = 1
|
|
end
|
|
if not canrot then recipe.norotate = true end
|
|
if recipe.normal then
|
|
recipe.normal.x = recipe.normal.x or 0
|
|
recipe.normal.y = recipe.normal.y or 0
|
|
recipe.normal.z = recipe.normal.z or 0
|
|
end
|
|
if recipe.items then
|
|
for k, v in pairs(recipe.items) do
|
|
if type(v) == "string" then
|
|
recipe.items[k] = {name = v}
|
|
end
|
|
end
|
|
end
|
|
if recipe.wield and type(recipe.wield) == "table" then
|
|
recipe.wield.count = recipe.wield.count or false
|
|
end
|
|
local newp = recipe.priority or 0
|
|
|
|
local min = 1
|
|
local max = #craft_recipes + 1
|
|
while max > min do
|
|
local try = math_floor((min + max) / 2)
|
|
local oldp = craft_recipes[try].priority or 0
|
|
if newp < oldp then
|
|
min = try + 1
|
|
else
|
|
max = try
|
|
end
|
|
end
|
|
table_insert(craft_recipes, min, recipe)
|
|
end
|