forked from VoxeLibre/VoxeLibre
Fix tools not taking wear when rightclicking
Added the API function mcl_autogroup.get_wear which is used to get the tool wear for digging a node of a group. This is used by mcl_tools to compute the wear of shovels and shears when rightclicking to create grass paths and carve pumpkins.
This commit is contained in:
parent
f0528b11d7
commit
b47733507d
|
@ -49,6 +49,9 @@ mcl_autogroup contains the API functions used to register custom digging groups.
|
||||||
_mcl_autogroup contains most of the code. The leading underscore in the name
|
_mcl_autogroup contains most of the code. The leading underscore in the name
|
||||||
"_mcl_autogroup" is used to force Minetest to load that part of the mod as late
|
"_mcl_autogroup" is used to force Minetest to load that part of the mod as late
|
||||||
as possible. Minetest loads mods in reverse alphabetical order.
|
as possible. Minetest loads mods in reverse alphabetical order.
|
||||||
|
|
||||||
|
This also means that it is very important that no mod adds _mcl_autogroups as a
|
||||||
|
dependency.
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
-- Returns a table containing the unique "_mcl_hardness" for nodes belonging to
|
-- Returns a table containing the unique "_mcl_hardness" for nodes belonging to
|
||||||
|
@ -233,21 +236,36 @@ end
|
||||||
-- or in the metadata of an enchanted tool.
|
-- or in the metadata of an enchanted tool.
|
||||||
--
|
--
|
||||||
-- Parameters:
|
-- Parameters:
|
||||||
-- tool_name - Name of the tool being enchanted (like "mcl_tools:diamond_pickaxe")
|
-- toolname - Name of the tool being enchanted (like "mcl_tools:diamond_pickaxe")
|
||||||
-- efficiency - The efficiency level the tool is enchanted with (default 0)
|
-- efficiency - The efficiency level the tool is enchanted with (default 0)
|
||||||
--
|
--
|
||||||
-- NOTE:
|
-- NOTE:
|
||||||
-- Mods calling this function (like mcl_enchanting) should _not_ have
|
-- This function can only be called after mod initialization. Otherwise a mod
|
||||||
-- _mcl_autogroups as a dependency. It is very important that this mod is
|
-- would have to add _mcl_autogroup as a dependency which would break the mod
|
||||||
-- loaded last. This also means this function can only be called by other mods
|
-- loading order.
|
||||||
-- after all mods have been initialized.
|
function mcl_autogroup.get_groupcaps(toolname, efficiency)
|
||||||
function mcl_autogroup.get_groupcaps(tool_name, efficiency)
|
local tdef = minetest.registered_tools[toolname]
|
||||||
local tdef = minetest.registered_tools[tool_name]
|
|
||||||
local groupcaps = table.copy(tdef.tool_capabilities.groupcaps or {})
|
local groupcaps = table.copy(tdef.tool_capabilities.groupcaps or {})
|
||||||
add_groupcaps(groupcaps, tdef._mcl_autogroup_groupcaps, efficiency)
|
add_groupcaps(groupcaps, tdef._mcl_autogroup_groupcaps, efficiency)
|
||||||
return groupcaps
|
return groupcaps
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Get the wear from using a tool on a digging group.
|
||||||
|
--
|
||||||
|
-- Parameters
|
||||||
|
-- toolname - Name of the tool used
|
||||||
|
-- diggroup - The name of the diggroup the tool is used on
|
||||||
|
--
|
||||||
|
-- NOTE:
|
||||||
|
-- This function can only be called after mod initialization. Otherwise a mod
|
||||||
|
-- would have to add _mcl_autogroup as a dependency which would break the mod
|
||||||
|
-- loading order.
|
||||||
|
function mcl_autogroup.get_wear(toolname, diggroup)
|
||||||
|
local tdef = minetest.registered_tools[toolname]
|
||||||
|
local uses = tdef._mcl_autogroup_groupcaps[diggroup].uses
|
||||||
|
return math.ceil(65535 / uses)
|
||||||
|
end
|
||||||
|
|
||||||
local overwrite = function()
|
local overwrite = function()
|
||||||
for nname, ndef in pairs(minetest.registered_nodes) do
|
for nname, ndef in pairs(minetest.registered_nodes) do
|
||||||
local newgroups = table.copy(ndef.groups)
|
local newgroups = table.copy(ndef.groups)
|
||||||
|
|
|
@ -179,26 +179,6 @@ minetest.register_tool("mcl_tools:pick_diamond", {
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
local get_shovel_dig_group = function(itemstack)
|
|
||||||
local itemstring = itemstack:get_name()
|
|
||||||
local efficiency_level = mcl_enchanting.get_enchantment(itemstack, "efficiency")
|
|
||||||
local postfix = efficiency_level > 0 and "_efficiency_" .. efficiency_level or ""
|
|
||||||
if itemstring:find("mcl_tools:shovel_wood") == 1 then
|
|
||||||
return "shovely_dig_wood" .. postfix
|
|
||||||
elseif itemstring:find("mcl_tools:shovel_stone") == 1 then
|
|
||||||
return "shovely_dig_stone" .. postfix
|
|
||||||
elseif itemstring:find("mcl_tools:shovel_iron") == 1 then
|
|
||||||
return "shovely_dig_iron" .. postfix
|
|
||||||
elseif itemstring:find("mcl_tools:shovel_gold") == 1 then
|
|
||||||
return "shovely_dig_gold" .. postfix
|
|
||||||
elseif itemstring:find("mcl_tools:shovel_diamond") == 1 then
|
|
||||||
return "shovely_dig_diamond" .. postfix
|
|
||||||
else
|
|
||||||
-- Fallback
|
|
||||||
return "shovely_dig_wood"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local make_grass_path = function(itemstack, placer, pointed_thing)
|
local make_grass_path = function(itemstack, placer, pointed_thing)
|
||||||
-- Use pointed node's on_rightclick function first, if present
|
-- Use pointed node's on_rightclick function first, if present
|
||||||
local node = minetest.get_node(pointed_thing.under)
|
local node = minetest.get_node(pointed_thing.under)
|
||||||
|
@ -223,15 +203,9 @@ local make_grass_path = function(itemstack, placer, pointed_thing)
|
||||||
end
|
end
|
||||||
|
|
||||||
if not minetest.is_creative_enabled(placer:get_player_name()) then
|
if not minetest.is_creative_enabled(placer:get_player_name()) then
|
||||||
-- Add wear, as if digging a level 0 shovely node
|
-- Add wear (as if digging a shovely node)
|
||||||
local toolname = itemstack:get_name()
|
local toolname = itemstack:get_name()
|
||||||
local def = minetest.registered_items[toolname]
|
local wear = mcl_autogroup.get_wear(toolname, "shovely")
|
||||||
local group = get_shovel_dig_group(itemstack)
|
|
||||||
local toolcaps = itemstack:get_tool_capabilities()
|
|
||||||
local base_uses = toolcaps.groupcaps[group].uses
|
|
||||||
local maxlevel = toolcaps.groupcaps[group].maxlevel
|
|
||||||
local uses = base_uses * math.pow(3, maxlevel)
|
|
||||||
local wear = math.ceil(65535 / uses)
|
|
||||||
itemstack:add_wear(wear)
|
itemstack:add_wear(wear)
|
||||||
end
|
end
|
||||||
minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = above}, true)
|
minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = above}, true)
|
||||||
|
@ -260,12 +234,7 @@ if minetest.get_modpath("mcl_farming") then
|
||||||
if not minetest.is_creative_enabled(placer:get_player_name()) then
|
if not minetest.is_creative_enabled(placer:get_player_name()) then
|
||||||
-- Add wear (as if digging a shearsy node)
|
-- Add wear (as if digging a shearsy node)
|
||||||
local toolname = itemstack:get_name()
|
local toolname = itemstack:get_name()
|
||||||
local def = minetest.registered_items[toolname]
|
local wear = mcl_autogroup.get_wear(toolname, "shearsy")
|
||||||
local group = get_shovel_dig_group(toolname)
|
|
||||||
local base_uses = def.tool_capabilities.groupcaps["shearsy_dig"].uses
|
|
||||||
local maxlevel = def.tool_capabilities.groupcaps["shearsy_dig"].maxlevel
|
|
||||||
local uses = base_uses * math.pow(3, maxlevel)
|
|
||||||
local wear = math.ceil(65535 / uses)
|
|
||||||
itemstack:add_wear(wear)
|
itemstack:add_wear(wear)
|
||||||
end
|
end
|
||||||
minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = above}, true)
|
minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = above}, true)
|
||||||
|
|
Loading…
Reference in New Issue