2 local GRAVITY
= -(tonumber(minetest
.settings
:get("movement_gravity")) or 10)
4 minetest
.register_entity("hades_drippingwater:drop_water", {
7 collide_with_objects
= false,
8 collisionbox
= { -0.025, -0.05, -0.025, 0.025, -0.01, 0.025 },
11 visual_size
= {x
=0.05, y
=0.1},
12 textures
= {"default_water.png","default_water.png","default_water.png","default_water.png", "default_water.png","default_water.png"},
13 spritediv
= {x
=1, y
=1},
14 initial_sprite_basepos
= {x
=0, y
=0},
17 on_activate
= function(self
, staticdata
)
18 self
.object
:set_sprite({x
=0,y
=0}, 1, 1, true)
19 self
.object
:set_armor_groups({immortal
=1})
22 on_step
= function(self
, dtime
)
23 local ownpos
= self
.object
:get_pos()
26 local acc
= self
.object
:get_acceleration()
32 local k
= math
.random(1,222)
34 self
.object
:set_acceleration({x
=0, y
=GRAVITY
, z
=0})
36 local n_above
= minetest
.get_node({x
=ownpos
.x
, y
=ownpos
.y
+0.5, z
=ownpos
.z
})
37 local d_above
= minetest
.registered_nodes
[n_above
.name
]
42 if not d_above
.walkable
then
43 self
.object
:set_acceleration({x
=0, y
=GRAVITY
, z
=0})
48 local n_below
= minetest
.get_node({x
=ownpos
.x
, y
=ownpos
.y
-0.5, z
=ownpos
.z
})
49 local d_below
= minetest
.registered_nodes
[n_below
.name
]
54 if d_below
.walkable
or d_below
.liquidtype
~= "none" then
56 local snd
, gain
= "drippingwater_drip", 0.5
57 local n_here
= minetest
.get_node(ownpos
)
58 if minetest
.get_item_group(n_below
.name
, "water") ~= 0 or
59 minetest
.get_item_group(n_here
.name
, "water") ~= 0 then
60 snd
, gain
= "drippingwater_drip_on_water", 0.5
61 elseif minetest
.get_item_group(n_below
.name
, "lava") ~= 0 or
62 minetest
.get_item_group(n_here
.name
, "lava") ~= 0 then
63 snd
, gain
= "drippingwater_drip_on_lava", 0.2
65 minetest
.sound_play({name
=snd
}, {pos
= ownpos
, gain
= gain
, max_hear_distance
= 8}, true)
72 minetest
.register_abm({
73 label
= "Spawn water droplets",
74 nodenames
= {"group:porous"},
75 neighbors
= {"group:water"},
78 action
= function(pos
)
79 local above
= minetest
.get_node({x
=pos
.x
, y
=pos
.y
+1, z
=pos
.z
}).name
80 local below1
= minetest
.get_node({x
=pos
.x
, y
=pos
.y
-1, z
=pos
.z
}).name
81 local below2
= minetest
.get_node({x
=pos
.x
, y
=pos
.y
-2, z
=pos
.z
}).name
82 if minetest
.get_item_group(above
, "water") > 0 and
83 below1
== "air" and below2
== "air" then
84 local i
= math
.random(-45,45) / 100
85 minetest
.add_entity({x
=pos
.x
+ i
, y
=pos
.y
-0.501, z
=pos
.z
+ i
}, "hades_drippingwater:drop_water")