@@ -14,11 +14,11 @@ minetest.register_entity("__builtin:falling_node", {
1414 visual_size = {x = 0.667 , y = 0.667 },
1515 },
1616
17- nodename = " " ,
17+ node = {} ,
1818
19- set_node = function (self , nodename )
20- self .nodename = nodename
21- local stack = ItemStack (nodename )
19+ set_node = function (self , node )
20+ self .node = node
21+ local stack = ItemStack (node . name )
2222 local itemtable = stack :to_table ()
2323 local itemname = nil
2424 if itemtable then
@@ -32,20 +32,19 @@ minetest.register_entity("__builtin:falling_node", {
3232 end
3333 prop = {
3434 is_visible = true ,
35- textures = {nodename },
35+ textures = {node . name },
3636 }
3737 self .object :set_properties (prop )
3838 end ,
3939
4040 get_staticdata = function (self )
41- return self .nodename
41+ return self .node . name
4242 end ,
4343
4444 on_activate = function (self , staticdata )
45- self .nodename = staticdata
4645 self .object :set_armor_groups ({immortal = 1 })
4746 -- self.object:setacceleration({x=0, y=-10, z=0})
48- self :set_node (self . nodename )
47+ self :set_node ({ name = staticdata } )
4948 end ,
5049
5150 on_step = function (self , dtime )
@@ -57,8 +56,10 @@ minetest.register_entity("__builtin:falling_node", {
5756 local bcn = minetest .get_node (bcp )
5857 -- Note: walkable is in the node definition, not in item groups
5958 if minetest .registered_nodes [bcn .name ] and
60- minetest .registered_nodes [bcn .name ].walkable then
61- if minetest .registered_nodes [bcn .name ].buildable_to then
59+ minetest .registered_nodes [bcn .name ].walkable or
60+ (minetest .get_node_group (self .node .name , " float" ) ~= 0 and minetest .registered_nodes [bcn .name ].liquidtype ~= " none" )
61+ then
62+ if minetest .registered_nodes [bcn .name ].buildable_to and (minetest .get_node_group (self .node .name , " float" ) == 0 or minetest .registered_nodes [bcn .name ].liquidtype == " none" ) then
6263 minetest .remove_node (bcp )
6364 return
6465 end
@@ -83,7 +84,7 @@ minetest.register_entity("__builtin:falling_node", {
8384 end
8485 end
8586 -- Create node and remove entity
86- minetest .add_node (np , { name = self .nodename } )
87+ minetest .add_node (np , self .node )
8788 self .object :remove ()
8889 nodeupdate (np )
8990 else
@@ -92,9 +93,9 @@ minetest.register_entity("__builtin:falling_node", {
9293 end
9394})
9495
95- function spawn_falling_node (p , nodename )
96+ function spawn_falling_node (p , node )
9697 obj = minetest .add_entity (p , " __builtin:falling_node" )
97- obj :get_luaentity ():set_node (nodename )
98+ obj :get_luaentity ():set_node (node )
9899end
99100
100101function drop_attached_node (p )
@@ -150,13 +151,14 @@ function nodeupdate_single(p, delay)
150151 n_bottom = minetest .get_node (p_bottom )
151152 -- Note: walkable is in the node definition, not in item groups
152153 if minetest .registered_nodes [n_bottom .name ] and
154+ (minetest .get_node_group (n .name , " float" ) == 0 or minetest .registered_nodes [n_bottom .name ].liquidtype == " none" ) and
153155 (not minetest .registered_nodes [n_bottom .name ].walkable or
154156 minetest .registered_nodes [n_bottom .name ].buildable_to ) then
155157 if delay then
156158 minetest .after (0.1 , nodeupdate_single , {x = p .x , y = p .y , z = p .z }, false )
157159 else
158160 minetest .remove_node (p )
159- spawn_falling_node (p , n . name )
161+ spawn_falling_node (p , n )
160162 nodeupdate (p )
161163 end
162164 end
@@ -170,7 +172,7 @@ function nodeupdate_single(p, delay)
170172 end
171173end
172174
173- function nodeupdate (p )
175+ function nodeupdate (p , delay )
174176 -- Round p to prevent falling entities to get stuck
175177 p .x = math.floor (p .x + 0.5 )
176178 p .y = math.floor (p .y + 0.5 )
@@ -179,7 +181,7 @@ function nodeupdate(p)
179181 for x = - 1 ,1 do
180182 for y = - 1 ,1 do
181183 for z = - 1 ,1 do
182- nodeupdate_single ({x = p .x + x , y = p .y + y , z = p .z + z }, not (x == 0 and y == 0 and z == 0 ))
184+ nodeupdate_single ({x = p .x + x , y = p .y + y , z = p .z + z }, delay or not (x == 0 and y == 0 and z == 0 ))
183185 end
184186 end
185187 end
0 commit comments