forked from VoxeLibre/VoxeLibre
support tables for `_repair_material`
This commit is contained in:
parent
6c6d40eb9d
commit
ca086109bf
|
@ -53,6 +53,15 @@ local function get_consumed_materials(tool, material)
|
||||||
return materials_used
|
return materials_used
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function contains(table, value)
|
||||||
|
for _, i in pairs(table) do
|
||||||
|
if i == value then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
-- Given 2 input stacks, tells you which is the tool and which is the material.
|
-- Given 2 input stacks, tells you which is the tool and which is the material.
|
||||||
-- Returns ("tool", input1, input2) if input1 is tool and input2 is material.
|
-- Returns ("tool", input1, input2) if input1 is tool and input2 is material.
|
||||||
-- Returns ("material", input2, input1) if input1 is material and input2 is tool.
|
-- Returns ("material", input2, input1) if input1 is material and input2 is tool.
|
||||||
|
@ -60,9 +69,15 @@ end
|
||||||
local function distinguish_tool_and_material(input1, input2)
|
local function distinguish_tool_and_material(input1, input2)
|
||||||
local def1 = input1:get_definition()
|
local def1 = input1:get_definition()
|
||||||
local def2 = input2:get_definition()
|
local def2 = input2:get_definition()
|
||||||
if def1.type == "tool" and def1._repair_material then
|
local r1 = def1._repair_material
|
||||||
|
local r2 = def2._repair_material
|
||||||
|
if def1.type == "tool" and r1 and type(r1) == "table" and contains(r1, input2) then
|
||||||
return "tool", input1, input2
|
return "tool", input1, input2
|
||||||
elseif def2.type == "tool" and def2._repair_material then
|
elseif def2.type == "tool" and r2 and type(r2) == "table" and contains(r2, input1) then
|
||||||
|
return "material", input2, input1
|
||||||
|
elseif def1.type == "tool" and r1 then
|
||||||
|
return "tool", input1, input2
|
||||||
|
elseif def2.type == "tool" and r2 then
|
||||||
return "material", input2, input1
|
return "material", input2, input1
|
||||||
else
|
else
|
||||||
return nil
|
return nil
|
||||||
|
@ -121,12 +136,29 @@ local function update_anvil_slots(meta)
|
||||||
local distinguished, tool, material = distinguish_tool_and_material(input1, input2)
|
local distinguished, tool, material = distinguish_tool_and_material(input1, input2)
|
||||||
if distinguished then
|
if distinguished then
|
||||||
local tooldef = tool:get_definition()
|
local tooldef = tool:get_definition()
|
||||||
|
local repair = tooldef._repair_material
|
||||||
local has_correct_material = false
|
local has_correct_material = false
|
||||||
if string.sub(tooldef._repair_material, 1, 6) == "group:" then
|
local material_name = material:get_name()
|
||||||
has_correct_material = minetest.get_item_group(material:get_name(), string.sub(tooldef._repair_material, 7)) ~= 0
|
if type(repair) == "string" then
|
||||||
elseif material:get_name() == tooldef._repair_material then
|
if string.sub(repair, 1, 6) == "group:" then
|
||||||
|
has_correct_material = minetest.get_item_group(material_name, string.sub(repair, 7)) ~= 0
|
||||||
|
elseif material_name == repair then
|
||||||
has_correct_material = true
|
has_correct_material = true
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
if contains(repair, material_name) then
|
||||||
|
has_correct_material = true
|
||||||
|
else
|
||||||
|
for _, r in pairs(repair) do
|
||||||
|
if string.sub(r, 1, 6) == "group:" then
|
||||||
|
if minetest.get_item_group(material_name, string.sub(r, 7)) ~= 0 then
|
||||||
|
has_correct_material = true
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
if has_correct_material and tool:get_wear() > 0 then
|
if has_correct_material and tool:get_wear() > 0 then
|
||||||
local materials_used = get_consumed_materials(tool, material)
|
local materials_used = get_consumed_materials(tool, material)
|
||||||
local new_wear = calculate_repair(tool:get_wear(), MAX_WEAR, MATERIAL_TOOL_REPAIR_BOOST[materials_used])
|
local new_wear = calculate_repair(tool:get_wear(), MAX_WEAR, MATERIAL_TOOL_REPAIR_BOOST[materials_used])
|
||||||
|
|
Loading…
Reference in New Issue