@@ -14,11 +14,11 @@ minetest.register_entity("__builtin:falling_node", {
14
14
visual_size = {x = 0.667 , y = 0.667 },
15
15
},
16
16
17
- nodename = " " ,
17
+ node = {} ,
18
18
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 )
22
22
local itemtable = stack :to_table ()
23
23
local itemname = nil
24
24
if itemtable then
@@ -32,20 +32,19 @@ minetest.register_entity("__builtin:falling_node", {
32
32
end
33
33
prop = {
34
34
is_visible = true ,
35
- textures = {nodename },
35
+ textures = {node . name },
36
36
}
37
37
self .object :set_properties (prop )
38
38
end ,
39
39
40
40
get_staticdata = function (self )
41
- return self .nodename
41
+ return self .node . name
42
42
end ,
43
43
44
44
on_activate = function (self , staticdata )
45
- self .nodename = staticdata
46
45
self .object :set_armor_groups ({immortal = 1 })
47
46
-- self.object:setacceleration({x=0, y=-10, z=0})
48
- self :set_node (self . nodename )
47
+ self :set_node ({ name = staticdata } )
49
48
end ,
50
49
51
50
on_step = function (self , dtime )
@@ -57,8 +56,10 @@ minetest.register_entity("__builtin:falling_node", {
57
56
local bcn = minetest .get_node (bcp )
58
57
-- Note: walkable is in the node definition, not in item groups
59
58
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
62
63
minetest .remove_node (bcp )
63
64
return
64
65
end
@@ -83,7 +84,7 @@ minetest.register_entity("__builtin:falling_node", {
83
84
end
84
85
end
85
86
-- Create node and remove entity
86
- minetest .add_node (np , { name = self .nodename } )
87
+ minetest .add_node (np , self .node )
87
88
self .object :remove ()
88
89
nodeupdate (np )
89
90
else
@@ -92,9 +93,9 @@ minetest.register_entity("__builtin:falling_node", {
92
93
end
93
94
})
94
95
95
- function spawn_falling_node (p , nodename )
96
+ function spawn_falling_node (p , node )
96
97
obj = minetest .add_entity (p , " __builtin:falling_node" )
97
- obj :get_luaentity ():set_node (nodename )
98
+ obj :get_luaentity ():set_node (node )
98
99
end
99
100
100
101
function drop_attached_node (p )
@@ -150,13 +151,14 @@ function nodeupdate_single(p, delay)
150
151
n_bottom = minetest .get_node (p_bottom )
151
152
-- Note: walkable is in the node definition, not in item groups
152
153
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
153
155
(not minetest .registered_nodes [n_bottom .name ].walkable or
154
156
minetest .registered_nodes [n_bottom .name ].buildable_to ) then
155
157
if delay then
156
158
minetest .after (0.1 , nodeupdate_single , {x = p .x , y = p .y , z = p .z }, false )
157
159
else
158
160
minetest .remove_node (p )
159
- spawn_falling_node (p , n . name )
161
+ spawn_falling_node (p , n )
160
162
nodeupdate (p )
161
163
end
162
164
end
@@ -170,7 +172,7 @@ function nodeupdate_single(p, delay)
170
172
end
171
173
end
172
174
173
- function nodeupdate (p )
175
+ function nodeupdate (p , delay )
174
176
-- Round p to prevent falling entities to get stuck
175
177
p .x = math.floor (p .x + 0.5 )
176
178
p .y = math.floor (p .y + 0.5 )
@@ -179,7 +181,7 @@ function nodeupdate(p)
179
181
for x = - 1 ,1 do
180
182
for y = - 1 ,1 do
181
183
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 ))
183
185
end
184
186
end
185
187
end
0 commit comments