From 01d543f37712f75275ce0f89ff982cd786c143e5 Mon Sep 17 00:00:00 2001 From: tchncs Date: Tue, 8 Nov 2016 23:19:56 +0100 Subject: [PATCH] add bone and bonemeal --- mods/bonemeal/depends.txt | 2 + mods/bonemeal/init.lua | 195 ++++++++++++++++++++++++++++ mods/bonemeal/textures/bonemeal.png | Bin 0 -> 186 bytes mods/default/craftitems.lua | 5 + mods/default/nodes.lua | 8 ++ 5 files changed, 210 insertions(+) create mode 100644 mods/bonemeal/depends.txt create mode 100644 mods/bonemeal/init.lua create mode 100644 mods/bonemeal/textures/bonemeal.png diff --git a/mods/bonemeal/depends.txt b/mods/bonemeal/depends.txt new file mode 100644 index 00000000..2717befb --- /dev/null +++ b/mods/bonemeal/depends.txt @@ -0,0 +1,2 @@ +default +dye diff --git a/mods/bonemeal/init.lua b/mods/bonemeal/init.lua new file mode 100644 index 00000000..272e35bb --- /dev/null +++ b/mods/bonemeal/init.lua @@ -0,0 +1,195 @@ +-- This mod cutted out from ethereal: https://github.com/tenplus1/ethereal +-- + +minetest.register_craft({ + type = "shapeless", + output = 'default:bonemeal 4', + recipe = { + {'default:bone'}, + {'default:mese_crystal_fragment'}, + } +}) + +minetest.register_craft( { + type = "shapeless", + output = "dye:white 2", + recipe = {"default:bonemeal"}, +}) + +local plants = { + "flowers:dandelion_white", + "flowers:dandelion_yellow", + "flowers:geranium", + "flowers:rose", + "flowers:tulip", + "flowers:viola", +} + + +local crops = { + {"farming:cotton_", 8}, + {"farming:wheat_", 8}, + {"farming:tomato_", 8}, + {"farming:corn_", 8}, + {"farming:melon_", 8}, + {"farming:pumpkin_", 8}, + {"farming:beanpole_", 5}, + {"farming:blueberry_", 4}, + {"farming:raspberry_", 4}, + {"farming:carrot_", 8}, + {"farming:cocoa_", 3}, + {"farming:coffee_", 5}, + {"farming:cucumber_", 4}, + {"farming:potato_", 4}, + {"farming:grapes_", 8}, + {"farming:rhubarb_", 3}, + {"farming:barley_", 7}, +} + +-- check if sapling has enough height room to grow +local function enough_height(pos, height) + + local nod = minetest.line_of_sight( + {x = pos.x, y = pos.y + 1, z = pos.z}, + {x = pos.x, y = pos.y + height, z = pos.z}) + + if not nod then + return false -- obstructed + else + return true -- can grow + end +end + +-- growing routine +local function growth(pointed_thing) + + local pos = pointed_thing.under + local node = minetest.get_node(pos) + + if node.name == "ignore" then + return + end + + minetest.add_particlespawner({ + amount = 4, + time = 0.15, + minpos = pos, + maxpos = pos, + minvel = {x = -1, y = 2, z = -1}, + maxvel = {x = 1, y = 4, z = 1}, + minacc = {x = -1, y = -1, z = -1}, + maxacc = {x = 1, y = 1, z = 1}, + minexptime = 1, + maxexptime = 1, + minsize = 1, + maxsize = 3, + texture = "bonemeal_particle.png", + }) + + -- 50/50 chance of growing a sapling + if minetest.get_item_group(node.name, "sapling") > 0 then + + if math.random(1, 2) == 1 then + return + end + + local under = minetest.get_node({ + x = pos.x, + y = pos.y - 1, + z = pos.z + }) + + local height = minetest.registered_nodes[node.name].grown_height + + -- do we have enough height to grow sapling into tree? + if height and not enough_height(pos, height) then + return + end + + -- check for soil under sapling + if minetest.get_item_group(under.name, "soil") == 0 then + return + end + + -- grow default tree + elseif node.name == "default:sapling" + and enough_height(pos, 7) then + default.grow_new_apple_tree(pos) + + elseif node.name == "default:junglesapling" + and enough_height(pos, 15) then + default.grow_new_jungle_tree(pos) + + elseif node.name == "default:pine_sapling" + and enough_height(pos, 11) then + + if minetest.find_node_near(pos, 1, + {"default:snow", "default:snowblock", "default:dirt_with_snow"}) then + + default.grow_new_snowy_pine_tree(pos) + else + default.grow_new_pine_tree(pos) + end + + elseif node.name == "default:acacia_sapling" + and under.name == "default:sand" then + default.grow_new_acacia_tree(pos) + + elseif node.name == "default:aspen_sapling" + and enough_height(pos, 11) then + default.grow_new_aspen_tree(pos) + end + + return + end + + local stage = "" + + -- grow registered crops + for n = 1, #crops do + + if string.find(node.name, crops[n][1]) then + + stage = tonumber( node.name:split("_")[2] ) + stage = math.min(stage + math.random(1, 4), crops[n][2]) + + minetest.set_node(pos, {name = crops[n][1] .. stage}) + + return + + end + + end + + -- grow grass and flowers + if minetest.get_item_group(node.name, "soil") > 0 then + + local dirt = minetest.find_nodes_in_area_under_air( + {x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, + {x = pos.x + 2, y = pos.y + 1, z = pos.z + 2}, + {"group:soil"}) + + for _,n in pairs(dirt) do + + local pos2 = n + + pos2.y = pos2.y + 1 + + if math.random(0, 5) > 3 then + + minetest.swap_node(pos2, + {name = plants[math.random(1, #plants)]}) + else + + if node.name == "default:dirt_with_dry_grass" then + minetest.swap_node(pos2, + {name = "default:dry_grass_" .. math.random(1, 5)}) + else + minetest.swap_node(pos2, + {name = "default:grass_" .. math.random(1, 5)}) + end + + end + end + end +end diff --git a/mods/bonemeal/textures/bonemeal.png b/mods/bonemeal/textures/bonemeal.png new file mode 100644 index 0000000000000000000000000000000000000000..f141263050deb0b33da6e60aa72dc8be63378ebb GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bO)b$43CSocZaRDR=BKY8 z9cn*#0;L#Bg8YIR9G=}s19BogT^vI=uKS+5&D&tW!Fu5~ufkiVB=H418m9eCpET)* zLd~25s*FFnHa9+s=@FV-yYS~q{