nodecore-skyblock/mods/nc_api_craft/register_craft.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