Add butterflies mod
authorEzhh <owlecho@live.com>
Mon, 25 Jun 2018 20:28:39 +0000 (21:28 +0100)
committerGitHub <noreply@github.com>
Mon, 25 Jun 2018 20:28:39 +0000 (21:28 +0100)
mods/butterflies/README.txt [new file with mode: 0644]
mods/butterflies/depends.txt [new file with mode: 0644]
mods/butterflies/init.lua [new file with mode: 0644]
mods/butterflies/license.txt [new file with mode: 0644]
mods/butterflies/textures/butterflies_butterfly_red.png [new file with mode: 0644]
mods/butterflies/textures/butterflies_butterfly_red_animated.png [new file with mode: 0644]
mods/butterflies/textures/butterflies_butterfly_violet.png [new file with mode: 0644]
mods/butterflies/textures/butterflies_butterfly_violet_animated.png [new file with mode: 0644]
mods/butterflies/textures/butterflies_butterfly_white.png [new file with mode: 0644]
mods/butterflies/textures/butterflies_butterfly_white_animated.png [new file with mode: 0644]

diff --git a/mods/butterflies/README.txt b/mods/butterflies/README.txt
new file mode 100644 (file)
index 0000000..a7f52a0
--- /dev/null
@@ -0,0 +1,14 @@
+Minetest Game mod: Butterflies
+==============================
+Adds butterflies to the world on mapgen, which can be caught in a net if the
+fireflies mod is also enabled.
+
+Authors of source code
+----------------------
+Shara RedCat (MIT)
+
+Authors of media (textures)
+---------------------------
+Shara RedCat (CC BY-SA 3.0):
+  butterflies_butterfly_*.png
+  butterflies_butterfly_*_animated.png
\ No newline at end of file
diff --git a/mods/butterflies/depends.txt b/mods/butterflies/depends.txt
new file mode 100644 (file)
index 0000000..df07aca
--- /dev/null
@@ -0,0 +1,2 @@
+default
+flowers
\ No newline at end of file
diff --git a/mods/butterflies/init.lua b/mods/butterflies/init.lua
new file mode 100644 (file)
index 0000000..008211e
--- /dev/null
@@ -0,0 +1,133 @@
+-- register butterflies
+local butter_list = {
+       {"white", "White"},
+       {"red", "Red"},
+       {"violet", "Violet"}
+}
+
+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.." Butterfly",
+               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:get_player_name()
+                       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, {
+               description = "Hidden "..desc.." Butterfly",
+               drawtype = "airlike",
+               inventory_image = "insects_butterfly_"..name..".png",
+               wield_image =  "insects_butterfly_"..name..".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:get_player_name()
+                       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", "floatland_grassland"},
+       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)
diff --git a/mods/butterflies/license.txt b/mods/butterflies/license.txt
new file mode 100644 (file)
index 0000000..eebdad6
--- /dev/null
@@ -0,0 +1,58 @@
+License of source code
+----------------------
+
+The MIT License (MIT)
+Copyright (c) 2018 Shara RedCat
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this
+software and associated documentation files (the "Software"), to deal in the Software
+without restriction, including without limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of the Software, and to permit
+persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or
+substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
+FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+For more details:
+https://opensource.org/licenses/MIT
+
+Licenses of media (textures)
+----------------------------
+
+Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
+Copyright (C) 2018 Shara RedCat
+
+You are free to:
+Share — copy and redistribute the material in any medium or format.
+Adapt — remix, transform, and build upon the material for any purpose, even commercially.
+The licensor cannot revoke these freedoms as long as you follow the license terms.
+
+Under the following terms:
+
+Attribution — You must give appropriate credit, provide a link to the license, and
+indicate if changes were made. You may do so in any reasonable manner, but not in any way
+that suggests the licensor endorses you or your use.
+
+ShareAlike — If you remix, transform, or build upon the material, you must distribute
+your contributions under the same license as the original.
+
+No additional restrictions — You may not apply legal terms or technological measures that
+legally restrict others from doing anything the license permits.
+
+Notices:
+
+You do not have to comply with the license for elements of the material in the public
+domain or where your use is permitted by an applicable exception or limitation.
+No warranties are given. The license may not give you all of the permissions necessary
+for your intended use. For example, other rights such as publicity, privacy, or moral
+rights may limit how you use the material.
+
+For more details:
+http://creativecommons.org/licenses/by-sa/3.0/
\ No newline at end of file
diff --git a/mods/butterflies/textures/butterflies_butterfly_red.png b/mods/butterflies/textures/butterflies_butterfly_red.png
new file mode 100644 (file)
index 0000000..8edfc36
Binary files /dev/null and b/mods/butterflies/textures/butterflies_butterfly_red.png differ
diff --git a/mods/butterflies/textures/butterflies_butterfly_red_animated.png b/mods/butterflies/textures/butterflies_butterfly_red_animated.png
new file mode 100644 (file)
index 0000000..4a2097b
Binary files /dev/null and b/mods/butterflies/textures/butterflies_butterfly_red_animated.png differ
diff --git a/mods/butterflies/textures/butterflies_butterfly_violet.png b/mods/butterflies/textures/butterflies_butterfly_violet.png
new file mode 100644 (file)
index 0000000..8b8c29d
Binary files /dev/null and b/mods/butterflies/textures/butterflies_butterfly_violet.png differ
diff --git a/mods/butterflies/textures/butterflies_butterfly_violet_animated.png b/mods/butterflies/textures/butterflies_butterfly_violet_animated.png
new file mode 100644 (file)
index 0000000..3f9d72e
Binary files /dev/null and b/mods/butterflies/textures/butterflies_butterfly_violet_animated.png differ
diff --git a/mods/butterflies/textures/butterflies_butterfly_white.png b/mods/butterflies/textures/butterflies_butterfly_white.png
new file mode 100644 (file)
index 0000000..db4eaec
Binary files /dev/null and b/mods/butterflies/textures/butterflies_butterfly_white.png differ
diff --git a/mods/butterflies/textures/butterflies_butterfly_white_animated.png b/mods/butterflies/textures/butterflies_butterfly_white_animated.png
new file mode 100644 (file)
index 0000000..e7cada3
Binary files /dev/null and b/mods/butterflies/textures/butterflies_butterfly_white_animated.png differ