Merge pull request 'mcl_attached fixes' (#2831) from mcl-attached-fixes into master

Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/2831
Reviewed-by: cora <cora@noreply.git.minetest.land>
This commit is contained in:
cora 2022-10-23 16:45:03 +00:00
commit 7e60207603

View File

@ -5,6 +5,8 @@
-- Nodes in group "supported_node" can be placed on any node that does not -- Nodes in group "supported_node" can be placed on any node that does not
-- have the "airlike" drawtype. Carpets are an example of this type. -- have the "airlike" drawtype. Carpets are an example of this type.
local pairs = pairs
local math = math
local vector = vector local vector = vector
local facedir_to_dir = minetest.facedir_to_dir local facedir_to_dir = minetest.facedir_to_dir
@ -22,14 +24,16 @@ local add_item = minetest.add_item
-- We need this to do the exact same dropping node handling in our override -- We need this to do the exact same dropping node handling in our override
-- minetest.check_single_for_falling() function as in the builtin function. -- minetest.check_single_for_falling() function as in the builtin function.
-- --
---@param p Vector
local function drop_attached_node(p) local function drop_attached_node(p)
local n = get_node(p) local n = get_node(p)
local drops = get_node_drops(n, "") local drops = get_node_drops(n, "")
local def = registered_nodes[n.name] local def = registered_nodes[n.name]
if def and def.preserve_metadata then if def and def.preserve_metadata then
local oldmeta = get_meta(p):to_table().fields local oldmeta = get_meta(p):to_table().fields
-- Copy pos and node because the callback can modify them. -- Copy pos and node because the callback can modify them.
local pos_copy = vector.new(p) local pos_copy = vector.copy(p)
local node_copy = { name = n.name, param1 = n.param1, param2 = n.param2 } local node_copy = { name = n.name, param1 = n.param1, param2 = n.param2 }
local drop_stacks = {} local drop_stacks = {}
for k, v in pairs(drops) do for k, v in pairs(drops) do
@ -38,16 +42,18 @@ local function drop_attached_node(p)
drops = drop_stacks drops = drop_stacks
def.preserve_metadata(pos_copy, node_copy, oldmeta, drops) def.preserve_metadata(pos_copy, node_copy, oldmeta, drops)
end end
if def and def.sounds and def.sounds.fall then if def and def.sounds and def.sounds.fall then
core.sound_play(def.sounds.fall, {pos = p}, true) minetest.sound_play(def.sounds.fall, { pos = p }, true)
end end
remove_node(p) remove_node(p)
for _, item in pairs(drops) do for _, item in pairs(drops) do
local pos = { local pos = vector.offset(p,
x = p.x + math.random()/2 - 0.25, math.random() / 2 - 0.25,
y = p.y + math.random()/2 - 0.25, math.random() / 2 - 0.25,
z = p.z + math.random()/2 - 0.25, math.random() / 2 - 0.25
} )
add_item(pos, item) add_item(pos, item)
end end
end end
@ -90,4 +96,3 @@ function minetest.check_single_for_falling(pos)
return false return false
end end