From 7dc8ca812e86c7c2021b3c90250f01060bf7c732 Mon Sep 17 00:00:00 2001 From: codexp Date: Sat, 14 Jul 2018 03:20:03 +0200 Subject: [PATCH] functional sweeper [WIP] --- init.lua | 14 ++++++++++++++ nodes.lua | 7 ------- sweeper.lua | 45 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 7 deletions(-) create mode 100644 sweeper.lua diff --git a/init.lua b/init.lua index c12f5e0..7ec2e92 100644 --- a/init.lua +++ b/init.lua @@ -24,6 +24,19 @@ moreblocks.intllib = S local modpath = minetest.get_modpath("moreblocks") +function moreblocks.check_protection(pos, name, tool, text) + if minetest.is_protected(pos, name) then + minetest.log("action", (name ~= "" and name or "A mod") + .. " tried to " .. text + .. " at protected position " + .. minetest.pos_to_string(pos) + .. " with a " .. (tool or "")) + minetest.record_protection_violation(pos, name) + return true + end + return false +end + dofile(modpath .. "/config.lua") dofile(modpath .. "/circular_saw.lua") dofile(modpath .. "/stairsplus/init.lua") @@ -31,6 +44,7 @@ dofile(modpath .. "/nodes.lua") dofile(modpath .. "/redefinitions.lua") dofile(modpath .. "/crafting.lua") dofile(modpath .. "/aliases.lua") +dofile(modpath .. "/sweeper.lua") if minetest.settings:get_bool("log_mods") then minetest.log("action", S("[moreblocks] loaded.")) diff --git a/nodes.lua b/nodes.lua index efa1f94..9947a69 100644 --- a/nodes.lua +++ b/nodes.lua @@ -472,10 +472,3 @@ for name, def in pairs(nodes) do }) end end - --- Items - -minetest.register_craftitem("moreblocks:sweeper", { - description = S("Sweeper"), - inventory_image = "moreblocks_sweeper.png", -}) diff --git a/sweeper.lua b/sweeper.lua new file mode 100644 index 0000000..ae43dcb --- /dev/null +++ b/sweeper.lua @@ -0,0 +1,45 @@ +local S = moreblocks.intllib +local check_protection = moreblocks.check_protection +local sweepables = {} + +-- example sweepable node +-- TODO API for sweepable node registration +sweepables["default:mossycobble"] = function(pos, node) + -- hit 3 times to clean + if node.param1 < 2 then + node.param1 = node.param1 + 1 + minetest.set_node(pos, node) + return false + end + + -- set clean node + minetest.set_node(pos, { name = "default:cobble" }) + + return true +end + + +-- functional sweeper +minetest.register_craftitem("moreblocks:sweeper", { + description = S("Sweeper"), + inventory_image = "moreblocks_sweeper.png", + on_use = function(itemstack, user, pointed_thing) + if pointed_thing.type ~= "node" then + -- do nothing if it's not a node + return + end + + local node = minetest.get_node(pointed_thing.under) + local sweepable = sweepables[node.name] + + if not sweepable then + return + end + + if check_protection(pointed_thing.under, user:get_player_name(), "sweeper", "sweep " .. node.name) then + return + end + + sweepable(pointed_thing.under, node) + end +})