Decorations: Add kelp to cool and temperate shallow ocean
authorparamat <paramat@users.noreply.github.com>
Wed, 4 Oct 2017 22:46:32 +0000 (23:46 +0100)
committerparamat <mat.gregory@virginmedia.com>
Tue, 10 Oct 2017 21:57:10 +0000 (22:57 +0100)
Original texture by tobyplowy, colourised by paramat.

mods/default/README.txt
mods/default/license.txt
mods/default/mapgen.lua
mods/default/nodes.lua
mods/default/textures/default_kelp.png [new file with mode: 0644]

index dd6c44fddd056905ec5b3b0624e29ceebf48cefa..0a9f8ff7cb3270e7c59d924f5a71a5deedcd581c 100644 (file)
@@ -215,6 +215,9 @@ kilbith (CC BY-SA 3.0):
   default_tin_ingot.png
   default_tin_lump.png
 
+tobyplowy (CC BY-SA 3.0):
+  default_kelp.png
+
 Glass breaking sounds (CC BY 3.0):
   1: http://www.freesound.org/people/cmusounddesign/sounds/71947/
   2: http://www.freesound.org/people/Tomlija/sounds/97669/
index 0bfba618c01fe38fc4412060c4fdd0e4b2affbb1..034151f240c7aac194f4541b2d0a1cdc3cc94105 100644 (file)
@@ -44,6 +44,7 @@ Copyright (C) 2010-2016:
   GreenXenith
   kaeza
   kilbith
+  tobyplowy
 
 You are free to:
 Share — copy and redistribute the material in any medium or format.
index 4503d5301824343a0b4a31e8a69f56c983e3da0f..7cd6066607903dc1e221e0e191696f38df362812 100644 (file)
@@ -2019,6 +2019,37 @@ function default.register_decorations()
                flags = "place_center_x, place_center_z",
                rotation = "random",
        })
+
+       -- Kelp
+
+       minetest.register_decoration({
+               deco_type = "simple",
+               place_on = {"default:sand"},
+               place_offset_y = -1,
+               sidelen = 16,
+               noise_params = {
+                       offset = -0.04,
+                       scale = 0.1,
+                       spread = {x = 200, y = 200, z = 200},
+                       seed = 87112,
+                       octaves = 3,
+                       persist = 0.7
+               },
+               biomes = {
+                       "taiga_ocean",
+                       "snowy_grassland_ocean",
+                       "grassland_ocean",
+                       "coniferous_forest_ocean",
+                       "deciduous_forest_ocean",
+                       "sandstone_desert_ocean",
+                       "cold_desert_ocean"},
+               y_min = -10,
+               y_max = -5,
+               flags = "force_placement",
+               decoration = "default:sand_with_kelp",
+               param2 = 48,
+               param2_max = 96,
+       })
 end
 
 
index bab1a27ec0b101d28311736bd313d75764056f90..e0e75cdf1fe6b61f9b4b3f8ace2f07a083f6ceca 100644 (file)
@@ -149,6 +149,8 @@ default:acacia_bush_stem
 default:acacia_bush_leaves
 default:acacia_bush_sapling
 
+default:sand_with_kelp
+
 Corals
 ------
 
@@ -1449,6 +1451,55 @@ minetest.register_node("default:acacia_bush_sapling", {
        end,
 })
 
+minetest.register_node("default:sand_with_kelp", {
+       description = "Kelp On Sand",
+       drawtype = "plantlike_rooted",
+       tiles = {"default_sand.png"},
+       special_tiles = {{name = "default_kelp.png", tileable_vertical = true}},
+       inventory_image = "default_kelp.png",
+       paramtype2 = "leveled",
+       groups = {snappy = 3},
+       node_placement_prediction = "",
+
+       on_place = function(itemstack, placer, pointed_thing)
+               -- Call on_rightclick if the pointed node defines it
+               if pointed_thing.type == "node" and placer and
+                               not placer:get_player_control().sneak then
+                       local node_ptu = minetest.get_node(pointed_thing.under)
+                       local def_ptu = minetest.registered_nodes[node_ptu.name]
+                       if def_ptu and def_ptu.on_rightclick then
+                               return def_ptu.on_rightclick(pointed_thing.under, node_ptu, placer,
+                                       itemstack, pointed_thing)
+                       end
+               end
+
+               local pos = pointed_thing.above
+               local height = math.random(4, 6)
+               local pos_top = {x = pos.x, y = pos.y + height, z = pos.z}
+               local node_top = minetest.get_node(pos_top)
+               local def_top = minetest.registered_nodes[node_top.name]
+               local player_name = placer:get_player_name()
+
+               if def_top and def_top.liquidtype == "source" and
+                               minetest.get_item_group(node_top.name, "water") > 0 then
+                       if not minetest.is_protected(pos, player_name) and
+                                       not minetest.is_protected(pos_top, player_name) then
+                               minetest.set_node(pos, {name = "default:sand_with_kelp",
+                                       param2 = height * 16})
+                               if not (creative and creative.is_enabled_for
+                                               and creative.is_enabled_for(player_name)) then
+                                       itemstack:take_item()
+                               end
+                       else
+                               minetest.chat_send_player(player_name, "Node is protected")
+                               minetest.record_protection_violation(pos, player_name)
+                       end
+               end
+
+               return itemstack
+       end
+})
+
 
 --
 -- Corals
diff --git a/mods/default/textures/default_kelp.png b/mods/default/textures/default_kelp.png
new file mode 100644 (file)
index 0000000..70b743d
Binary files /dev/null and b/mods/default/textures/default_kelp.png differ