diff --git a/sweeper.lua b/sweeper.lua index ae43dcb..cb0099a 100644 --- a/sweeper.lua +++ b/sweeper.lua @@ -2,24 +2,9 @@ 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", @@ -30,16 +15,66 @@ minetest.register_craftitem("moreblocks:sweeper", { end local node = minetest.get_node(pointed_thing.under) - local sweepable = sweepables[node.name] + local ndef = minetest.registered_nodes[node.name] + local sweepable = sweepables[node.name] or (ndef and ndef.on_sweep) if not sweepable then return end - if check_protection(pointed_thing.under, user:get_player_name(), "sweeper", "sweep " .. node.name) then + if check_protection(pointed_thing.under, user and user:get_player_name(), "sweeper", "sweep " .. node.name) then return end sweepable(pointed_thing.under, node) end }) + +-- +-- register sweepable node handler +-- +function moreblocks:register_sweepable(node_name, callback) + sweepables[node_name] = callback +end + + + +------------------------------------ +-- DEMO CODE -- +-- TODO: REMOVE AFTER TESTING -- +-- Sweepable mossycobble example: -- + +-- use register_sweepable function +moreblocks:register_sweepable("default:mossycobble", function (pos, node) + local meta = minetest.get_meta(pos) + local sweeps = meta:get_int('sweeps') + 1 + + -- hit 3 times to clean + if sweeps > 2 then + -- set clean node + meta:set_int('sweeps', 0) + minetest.swap_node(pos, { name = "default:cobble" }) + return true + end + + meta:set_int('sweeps', sweeps) + + return false +end) + +-- or when registering node +--[[ +minetest.register_node("default:mossycobble", { + description = S("Mossy Cobblestone"), + tiles = {"default_mossycobble.png"}, + is_ground_content = false, + groups = {cracky = 3, stone = 1}, + sounds = default.node_sound_stone_defaults(), + + on_sweep = function (pos, node) + -- do the magic here + end, +}) +]] + +-------------------------------------