83 lines
2.0 KiB
Lua
83 lines
2.0 KiB
Lua
|
|
-- override built-in type function
|
|
local otype = type
|
|
type = function(obj)
|
|
local base_type = otype(obj)
|
|
if base_type == "table" then
|
|
local meta_type = otype(obj.__type)
|
|
if meta_type == "string" then
|
|
return obj.__type
|
|
elseif meta_type == "function" then
|
|
return obj:__type()
|
|
end
|
|
end
|
|
|
|
return base_type
|
|
end
|
|
|
|
-- override node registration
|
|
local register_node_orig = core.register_node
|
|
core.register_node = function(name, def)
|
|
if type(def.sounds) == "table" then
|
|
if type(def.sounds.dig) == "SoundGroup" then
|
|
local on_punch_orig = def.on_punch
|
|
local s_group = SoundGroup(def.sounds.dig)
|
|
def.sounds.dig = "" -- override default sound
|
|
def.on_punch = function(...)
|
|
s_group() -- FIXME: should retrieve built-in sound spec
|
|
|
|
if type(on_punch_orig) == "function" then
|
|
return on_punch_orig(...)
|
|
end
|
|
end
|
|
end
|
|
|
|
if type(def.sounds.dug) == "SoundGroup" then
|
|
local on_dig_orig = def.on_dig
|
|
local s_group = SoundGroup(def.sounds.dug)
|
|
def.sounds.dug = nil
|
|
def.on_dig = function(...)
|
|
s_group()
|
|
|
|
if type(on_dig_orig) == "function" then
|
|
return on_dig_orig(...)
|
|
end
|
|
|
|
core.node_dig(...)
|
|
end
|
|
end
|
|
|
|
if type(def.sounds.footstep) == "SoundGroup" then
|
|
|
|
end
|
|
|
|
-- FIXME: should be overridden in register_craftitem
|
|
if type(def.sounds.place) == "SoundGroup" then
|
|
local on_place_orig = def.on_place
|
|
local s_group = SoundGroup(def.sounds.place)
|
|
def.sounds.place = nil
|
|
def.on_place = function(stack, ...)
|
|
s_group()
|
|
|
|
if type(on_place_orig) == "function" then
|
|
return on_place_orig(stack, ...)
|
|
end
|
|
|
|
return core.item_place(stack, ...)
|
|
end
|
|
end
|
|
|
|
if type(def.sounds.place_failed) == "SoundGroup" then
|
|
-- FIXME: which callback to override
|
|
def.sounds.place_failed = def.sounds.place_failed:get_random()
|
|
end
|
|
|
|
if type(def.sounds.fall) == "SoundGroup" then
|
|
-- FIXME: which callback to override
|
|
def.sounds.fall = def.sounds.fall:get_random()
|
|
end
|
|
end
|
|
|
|
return register_node_orig(name, def)
|
|
end
|