mirror of
https://github.com/minetest-mods/moreblocks.git
synced 2025-07-07 18:40:51 +02:00
refactor code as suggested by @t4im
This commit is contained in:
73
sweeper.lua
73
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,
|
||||
})
|
||||
]]
|
||||
|
||||
-------------------------------------
|
||||
|
Reference in New Issue
Block a user