mod-sounds/override.lua

83 lines
2.0 KiB
Lua
Raw Normal View History

-- 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