65 lines
1.8 KiB
Lua
65 lines
1.8 KiB
Lua
local default_on_rightclick = function(pos)
|
|
local node = minetest.get_node(pos)
|
|
local add_props = minetest.registered_nodes[node.name].add_properties
|
|
|
|
if not add_props or not add_props.swap_light then
|
|
return
|
|
end
|
|
|
|
minetest.set_node(pos, {name="multidecor:" .. add_props.swap_light.name, param2=node.param2})
|
|
minetest.sound_play({name=add_props.swap_light.sound, gain=0.2}, {
|
|
pos = pos,
|
|
max_hear_distance = 8
|
|
})
|
|
end
|
|
|
|
|
|
function register.register_light(name, base_def, add_def, craft_def)
|
|
local def = table.copy(base_def)
|
|
|
|
def.type = "light"
|
|
def.paramtype2 = "facedir"
|
|
|
|
if add_def then
|
|
if add_def.recipe then
|
|
craft_def = add_def
|
|
else
|
|
def.add_properties = add_def
|
|
end
|
|
end
|
|
|
|
if def.callbacks then
|
|
def.callbacks.on_rightclick = def.callbacks.on_rightclick or default_on_rightclick
|
|
else
|
|
def.callbacks = {on_rightclick = default_on_rightclick}
|
|
end
|
|
|
|
local sound_off
|
|
local are_props = def.add_properties and def.add_properties.swap_light
|
|
if are_props then
|
|
sound_off = def.add_properties.swap_light.sound_off or "multidecor_light_off"
|
|
def.add_properties.swap_light.sound = def.add_properties.swap_light.sound_on or "multidecor_light_on"
|
|
def.add_properties.swap_light.sound_on = nil
|
|
def.add_properties.swap_light.sound_off = nil
|
|
end
|
|
|
|
register.register_furniture_unit(name, def, craft_def)
|
|
|
|
if are_props then
|
|
local def2 = table.copy(def)
|
|
local swap_light_name = def2.add_properties.swap_light.name
|
|
def2.light_source = def2.add_properties.swap_light.light_level or 8
|
|
def2.drop = "multidecor:" .. name
|
|
|
|
if def2.groups then
|
|
def2.groups.not_in_creative_inventory = 1
|
|
else
|
|
def2.groups = {not_in_creative_inventory = 1}
|
|
end
|
|
def2.add_properties.swap_light = {name=name, sound=sound_off}
|
|
|
|
register.register_furniture_unit(swap_light_name, def2)
|
|
end
|
|
end
|
|
|