123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- -- butterflies/init.lua
- -- Load support for MT game translation.
- local S = minetest.get_translator("butterflies")
- -- register butterflies
- local butter_list = {
- {"white", S("White Butterfly")},
- {"red", S("Red Butterfly")},
- {"violet", S("Violet Butterfly")}
- }
- for i in ipairs (butter_list) do
- local name = butter_list[i][1]
- local desc = butter_list[i][2]
- minetest.register_node("butterflies:butterfly_"..name, {
- description = desc,
- drawtype = "plantlike",
- tiles = {{
- name = "butterflies_butterfly_"..name.."_animated.png",
- animation = {
- type = "vertical_frames",
- aspect_w = 16,
- aspect_h = 16,
- length = 3
- },
- }},
- inventory_image = "butterflies_butterfly_"..name..".png",
- wield_image = "butterflies_butterfly_"..name..".png",
- waving = 1,
- paramtype = "light",
- sunlight_propagates = true,
- buildable_to = true,
- walkable = false,
- groups = {catchable = 1},
- selection_box = {
- type = "fixed",
- fixed = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1},
- },
- floodable = true,
- on_place = function(itemstack, placer, pointed_thing)
- local player_name = placer and placer:get_player_name() or ""
- local pos = pointed_thing.above
- if not minetest.is_protected(pos, player_name) and
- not minetest.is_protected(pointed_thing.under, player_name) and
- minetest.get_node(pos).name == "air" then
- minetest.set_node(pos, {name = "butterflies:butterfly_"..name})
- minetest.get_node_timer(pos):start(1)
- itemstack:take_item()
- end
- return itemstack
- end,
- on_timer = function(pos, elapsed)
- if minetest.get_node_light(pos) < 11 then
- minetest.set_node(pos, {name = "butterflies:hidden_butterfly_"..name})
- end
- minetest.get_node_timer(pos):start(30)
- end
- })
- minetest.register_node("butterflies:hidden_butterfly_"..name, {
- drawtype = "airlike",
- inventory_image = "butterflies_butterfly_"..name..".png^default_invisible_node_overlay.png",
- wield_image = "butterflies_butterfly_"..name..".png^default_invisible_node_overlay.png",
- paramtype = "light",
- sunlight_propagates = true,
- walkable = false,
- pointable = false,
- diggable = false,
- drop = "",
- groups = {not_in_creative_inventory = 1},
- floodable = true,
- on_place = function(itemstack, placer, pointed_thing)
- local player_name = placer and placer:get_player_name() or ""
- local pos = pointed_thing.above
- if not minetest.is_protected(pos, player_name) and
- not minetest.is_protected(pointed_thing.under, player_name) and
- minetest.get_node(pos).name == "air" then
- minetest.set_node(pos, {name = "butterflies:hidden_butterfly_"..name})
- minetest.get_node_timer(pos):start(1)
- itemstack:take_item()
- end
- return itemstack
- end,
- on_timer = function(pos, elapsed)
- if minetest.get_node_light(pos) >= 11 then
- minetest.set_node(pos, {name = "butterflies:butterfly_"..name})
- end
- minetest.get_node_timer(pos):start(30)
- end
- })
- end
- -- register decoration
- minetest.register_decoration({
- name = "butterflies:butterfly",
- deco_type = "simple",
- place_on = {"default:dirt_with_grass"},
- place_offset_y = 2,
- sidelen = 80,
- fill_ratio = 0.005,
- biomes = {"grassland", "deciduous_forest"},
- y_max = 31000,
- y_min = 1,
- decoration = {
- "butterflies:butterfly_white",
- "butterflies:butterfly_red",
- "butterflies:butterfly_violet"
- },
- spawn_by = "group:flower",
- num_spawn_by = 1
- })
- -- get decoration ID
- local butterflies = minetest.get_decoration_id("butterflies:butterfly")
- minetest.set_gen_notify({decoration = true}, {butterflies})
- -- start nodetimers
- minetest.register_on_generated(function(minp, maxp, blockseed)
- local gennotify = minetest.get_mapgen_object("gennotify")
- local poslist = {}
- for _, pos in ipairs(gennotify["decoration#"..butterflies] or {}) do
- local deco_pos = {x = pos.x, y = pos.y + 3, z = pos.z}
- table.insert(poslist, deco_pos)
- end
- if #poslist ~= 0 then
- for i = 1, #poslist do
- local pos = poslist[i]
- minetest.get_node_timer(pos):start(1)
- end
- end
- end)
|