2 minetest.register_node("fireflies:firefly", {
3 description = "Firefly",
4 drawtype = "plantlike",
6 name = "fireflies_firefly_animated.png",
8 type = "vertical_frames",
14 inventory_image = "fireflies_firefly.png",
15 wield_image = "fireflies_firefly.png",
18 sunlight_propagates = true,
21 groups = {catchable = 1},
24 fixed = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1},
28 on_place = function(itemstack, placer, pointed_thing)
29 local player_name = placer:get_player_name()
30 local pos = pointed_thing.above
32 if not minetest.is_protected(pos, player_name) and
33 not minetest.is_protected(pointed_thing.under, player_name) and
34 minetest.get_node(pos).name == "air" then
35 minetest.set_node(pos, {name = "fireflies:firefly"})
36 minetest.get_node_timer(pos):start(1)
41 on_timer = function(pos, elapsed)
42 if minetest.get_node_light(pos) > 11 then
43 minetest.set_node(pos, {name = "fireflies:hidden_firefly"})
45 minetest.get_node_timer(pos):start(30)
49 minetest.register_node("fireflies:hidden_firefly", {
50 description = "Hidden Firefly",
52 inventory_image = "fireflies_firefly.png",
53 wield_image = "fireflies_firefly.png",
55 sunlight_propagates = true,
61 groups = {not_in_creative_inventory = 1},
63 on_place = function(itemstack, placer, pointed_thing)
64 local player_name = placer:get_player_name()
65 local pos = pointed_thing.above
67 if not minetest.is_protected(pos, player_name) and
68 not minetest.is_protected(pointed_thing.under, player_name) and
69 minetest.get_node(pos).name == "air" then
70 minetest.set_node(pos, {name = "fireflies:hidden_firefly"})
71 minetest.get_node_timer(pos):start(1)
76 on_timer = function(pos, elapsed)
77 if minetest.get_node_light(pos) <= 11 then
78 minetest.set_node(pos, {name = "fireflies:firefly"})
80 minetest.get_node_timer(pos):start(30)
86 minetest.register_tool("fireflies:bug_net", {
87 description = "Bug Net",
88 inventory_image = "fireflies_bugnet.png",
89 on_use = function(itemstack, player, pointed_thing)
90 if not pointed_thing or pointed_thing.type ~= "node" or
91 minetest.is_protected(pointed_thing.under, player:get_player_name()) then
94 local node_name = minetest.get_node(pointed_thing.under).name
95 local inv = player:get_inventory()
96 if minetest.get_item_group(node_name, "catchable") == 1 then
97 minetest.set_node(pointed_thing.under, {name = "air"})
98 local stack = ItemStack(node_name.." 1")
99 local leftover = inv:add_item("main", stack)
100 if leftover:get_count() > 0 then
101 minetest.add_item(pointed_thing.under, node_name.." 1")
104 if not (creative and creative.is_enabled_for(player:get_player_name())) then
105 itemstack:add_wear(256)
111 minetest.register_craft( {
112 output = "fireflies:bug_net",
114 {"farming:string", "farming:string"},
115 {"farming:string", "farming:string"},
121 -- firefly in a bottle
122 minetest.register_node("fireflies:firefly_bottle", {
123 description = "Firefly in a Bottle",
124 inventory_image = "fireflies_bottle.png",
125 wield_image = "fireflies_bottle.png",
127 name = "fireflies_bottle_animated.png",
129 type = "vertical_frames",
135 drawtype = "plantlike",
137 sunlight_propagates = true,
140 groups = {dig_immediate = 3, attached_node = 1},
143 fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25}
145 sounds = default.node_sound_glass_defaults(),
146 on_rightclick = function(pos, node, player, itemstack, pointed_thing)
147 local lower_pos = {x = pos.x, y = pos.y + 1, z = pos.z}
148 if minetest.is_protected(pos, player:get_player_name()) or
149 minetest.get_node(lower_pos).name ~= "air" then
153 local upper_pos = {x = pos.x, y = pos.y + 2, z = pos.z}
156 if not minetest.is_protected(upper_pos, player:get_player_name()) and
157 minetest.get_node(upper_pos).name == "air" then
158 firefly_pos = upper_pos
159 elseif not minetest.is_protected(lower_pos, player:get_player_name()) then
160 firefly_pos = lower_pos
164 minetest.set_node(pos, {name = "vessels:glass_bottle"})
165 minetest.set_node(firefly_pos, {name = "fireflies:firefly"})
166 minetest.get_node_timer(firefly_pos):start(1)
171 minetest.register_craft( {
172 output = "fireflies:firefly_bottle",
174 {"fireflies:firefly"},
175 {"vessels:glass_bottle"}
180 -- register fireflies as decorations
182 if minetest.get_mapgen_setting("mg_name") == "v6" then
184 minetest.register_decoration({
185 name = "fireflies:firefly_low",
186 deco_type = "simple",
187 place_on = "default:dirt_with_grass",
193 decoration = "fireflies:hidden_firefly",
196 minetest.register_decoration({
197 name = "fireflies:firefly_high",
198 deco_type = "simple",
199 place_on = "default:dirt_with_grass",
205 decoration = "fireflies:hidden_firefly",
210 minetest.register_decoration({
211 name = "fireflies:firefly_low",
212 deco_type = "simple",
214 "default:dirt_with_grass",
215 "default:dirt_with_coniferous_litter",
216 "default:dirt_with_rainforest_litter",
230 decoration = "fireflies:hidden_firefly",
233 minetest.register_decoration({
234 name = "fireflies:firefly_high",
235 deco_type = "simple",
237 "default:dirt_with_grass",
238 "default:dirt_with_coniferous_litter",
239 "default:dirt_with_rainforest_litter",
253 decoration = "fireflies:hidden_firefly",
259 -- get decoration IDs
260 local firefly_low = minetest.get_decoration_id("fireflies:firefly_low")
261 local firefly_high = minetest.get_decoration_id("fireflies:firefly_high")
263 minetest.set_gen_notify({decoration = true}, {firefly_low, firefly_high})
266 minetest.register_on_generated(function(minp, maxp, blockseed)
267 local gennotify = minetest.get_mapgen_object("gennotify")
270 for _, pos in ipairs(gennotify["decoration#"..firefly_low] or {}) do
271 local firefly_low_pos = {x = pos.x, y = pos.y + 3, z = pos.z}
272 table.insert(poslist, firefly_low_pos)
274 for _, pos in ipairs(gennotify["decoration#"..firefly_high] or {}) do
275 local firefly_high_pos = {x = pos.x, y = pos.y + 4, z = pos.z}
276 table.insert(poslist, firefly_high_pos)
279 if #poslist ~= 0 then
280 for i = 1, #poslist do
281 local pos = poslist[i]
282 minetest.get_node_timer(pos):start(1)