diff --git a/.luacheckrc b/.luacheckrc index 319eba3..c113881 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -27,9 +27,11 @@ read_globals = { "stairsplus", "string.split", table = { fields = { "copy", "getn" } }, + "toolranks", "vector", "VoxelArea", "VoxelManip", + "walls", xpanes = { fields = { "register_pane" } }, } diff --git a/init.lua b/init.lua index 641c425..e072356 100644 --- a/init.lua +++ b/init.lua @@ -345,4 +345,4 @@ minetest.register_on_dieplayer( ) end end -) \ No newline at end of file +) diff --git a/mod.conf b/mod.conf index 50426d2..5eb348a 100644 --- a/mod.conf +++ b/mod.conf @@ -1,4 +1,4 @@ name = nether description = Adds a deep underground realm with different mapgen that you can reach with obsidian portals. depends = stairs, default -optional_depends = moreblocks, mesecons, loot, dungeon_loot, doc_basics, fire, climate_api, ethereal, xpanes, walls +optional_depends = toolranks, moreblocks, mesecons, loot, dungeon_loot, doc_basics, fire, climate_api, ethereal, xpanes, walls diff --git a/portal_api.lua b/portal_api.lua index 337a996..47e7c4c 100644 --- a/portal_api.lua +++ b/portal_api.lua @@ -2166,27 +2166,20 @@ function nether.unregister_portal(name) end function nether.register_portal_ignition_item(item_name, ignition_failure_sound) - + local old_on_place = minetest.registered_items[item_name].on_place or minetest.item_place minetest.override_item(item_name, { - on_place = function(stack, placer, pt) - local node = minetest.get_node(pt.under) - local def = minetest.registered_nodes[node.name] - local done = false - - if pt.under and nether.is_frame_node[node.name] then - done = ignite_portal(pt.under, placer:get_player_name()) + on_place = function(stack, placer, pt, ...) + if pt.under and nether.is_frame_node[minetest.get_node(pt.under).name] then + local done = ignite_portal(pt.under, placer:get_player_name()) if done and not minetest.settings:get_bool("creative_mode") then stack:take_item() end - elseif def and def.on_rightclick then - def.on_rightclick(pt.under, node, placer, stack, pt) + if not done and ignition_failure_sound ~= nil then + minetest.sound_play(ignition_failure_sound, {pos = pt.under, max_hear_distance = 10}) + end + return stack end - - if not done and ignition_failure_sound ~= nil then - minetest.sound_play(ignition_failure_sound, {pos = pt.under, max_hear_distance = 10}) - end - - return stack + return old_on_place(stack, placer, pt, ...) end, }) diff --git a/tools.lua b/tools.lua index 1591e47..9616b8a 100644 --- a/tools.lua +++ b/tools.lua @@ -153,6 +153,38 @@ minetest.register_craft({ }) +if minetest.get_modpath("toolranks") then + + local function add_toolranks(name) + local nethertool_after_use = ItemStack(name):get_definition().after_use + toolranks.add_tool(name) + local toolranks_after_use = ItemStack(name):get_definition().after_use + + if nethertool_after_use == nil or nethertool_after_use == toolranks_after_use then + return + end + + minetest.override_item(name, { + after_use = function(itemstack, user, node, digparams) + -- combine nethertool_after_use and toolranks_after_use by allowing + -- nethertool_after_use() to calculate the wear... + local initial_wear = itemstack:get_wear() + itemstack = nethertool_after_use(itemstack, user, node, digparams) + local wear = itemstack:get_wear() - initial_wear + itemstack:set_wear(initial_wear) -- restore/undo the wear + + -- ...and have toolranks_after_use() apply the wear. + digparams.wear = wear + return toolranks_after_use(itemstack, user, node, digparams) + end + }) + end + + add_toolranks("nether:pick_nether") + add_toolranks("nether:shovel_nether") + add_toolranks("nether:axe_nether") + add_toolranks("nether:sword_nether") +end --===========================-- @@ -352,10 +384,11 @@ minetest.register_tool("nether:lightstaff_eternal", { sound = {breaks = "default_tool_breaks"}, stack_max = 1, on_use = function(itemstack, user, pointed_thing) - if lightstaff_on_use(user, "#23F", 0) then -- was "#8088FF" or "#13F" + if lightstaff_on_use(user, "#23F", 0) -- was "#8088FF" or "#13F" + and not minetest.is_creative_enabled(user) then -- The staff of Eternal Light wears out, to limit how much -- a player can alter the nether with it. - itemstack:add_wear(65535 / (nether.lightstaff_uses - 1)) + itemstack:add_wear_by_uses(nether.lightstaff_uses) end return itemstack end