diff --git a/mods/tools/init.lua b/mods/tools/init.lua index 971b1f2..5dacc07 100644 --- a/mods/tools/init.lua +++ b/mods/tools/init.lua @@ -524,6 +524,63 @@ minetest.register_tool("tools:paint", { }) frame.register("tools:paint") +-- Register tables for all plant variants +local plants_rotate = {} +do + -- Growth stages + + local t = { 8 } + for i=0,3 do + table.insert(t, "carrots_stage_"..i) + end + table.insert(plants_rotate, t) + + local t = { 10 } + for i=0,3 do + table.insert(t, "potatoes_stage_"..i) + end + table.insert(plants_rotate, t) + + t = { 11 } + for i=0,7 do + table.insert(t, "wheat_stage_"..i) + end + table.insert(plants_rotate, t) + + t = { 56 } + for i=1,5 do + table.insert(t, "grass_"..i) + end + table.insert(plants_rotate, t) + + + -- Plant style variants + + t = { 8 } + for i=1,6 do + table.insert(t, "sapling_"..i) + end + table.insert(plants_rotate, t) + table.insert(plants_rotate, { 9, "rose", "dandelion", "white_tulip", "allium", "orchid", "daisy", "houstonia", "paeonia", }) + table.insert(plants_rotate, { 10, "mushroom_red", "mushroom_brown" }) +end + +local plant_mappings = {} +for p=1, #plants_rotate do + local rotate = plants_rotate[p] + local param2 = rotate[1] + for r=2, #rotate do + local nextr + if r < #rotate then + nextr = r+1 + else + nextr = 2 + end + plant_mappings["nodes:"..rotate[r]] = { "nodes:"..rotate[nextr], param2 } + plant_mappings["nodes:flowerpot_"..rotate[r]] = { "nodes:flowerpot_"..rotate[nextr] } + end +end + minetest.register_tool("tools:grow", { description = S("Growth tool"), inventory_image = "grow_tool.png", @@ -545,7 +602,28 @@ minetest.register_tool("tools:grow", { end local pos = pointed_thing.under local nname = minetest.get_node(pos).name - if nname == "nodes:dirt" then + if plant_mappings[nname] then + -- Cycle through plant growth stages and plant variants + minetest.set_node(pos, {name=plant_mappings[nname][1], param2=plant_mappings[nname][2]}) + elseif nname == "nodes:melon_seeds" then + -- Grow melon + minetest.set_node(pos, {name="nodes:melon", param2=math.random(0,3)}) + elseif nname == "nodes:pumpkin_seeds" then + -- Grow pumpkin + minetest.set_node(pos, {name="nodes:pumpkin", param2=math.random(0,3)}) + elseif nname == "nodes:wheat_seeds" then + -- Grow wheat + minetest.set_node(pos, {name="nodes:wheat_stage_0", param2=11}) + elseif nname == "nodes:flowerpot_empty" then + -- Grow random flower in empty flowerpot + local param2 = minetest.get_node(pos).param2 + local flowers = { + "rose", "dandelion", "white_tulip", "allium", "orchid", "daisy", "houstonia", "paeonia", + } + local flower = flowers[math.random(1, #flowers)] + minetest.set_node(pos, {name="nodes:flowerpot_"..flower, param2=param2}) + elseif nname == "nodes:dirt" then + -- Grow grass cover on dirt for x = math.max(box.minp.x + 1, pos.x - 2), math.min(box.maxp.x - 1, pos.x + 2) do for y = math.max(box.minp.y + 1, pos.y), math.min(box.maxp.y - 1, pos.y) do for z = math.max(box.minp.z + 1, pos.z - 2), math.min(box.maxp.z - 1, pos.z + 2) do @@ -563,8 +641,8 @@ minetest.register_tool("tools:grow", { end end end - elseif nname == "nodes:grass" or nname == "nodes:dirt_with_grass" then - -- Grow grass and other things + elseif nname == "nodes:grass" or nname == "nodes:dirt_with_grass" or nname == "nodes:mycelium" or nname == "nodes:dirt_with_snow" or nname == "nodes:sand" or nname == "nodes:gravel" or nname == "nodes:dirt_with_podzol" or nname == "nodes:soil" or nname == "nodes:soil_wet" then + -- Grow grass, flowers and other random plants for x = math.max(box.minp.x + 1, pos.x - 2), math.min(box.maxp.x - 1, pos.x + 2) do for y = math.max(box.minp.y + 1, pos.y), math.min(box.maxp.y - 1, pos.y) do for z = math.max(box.minp.z + 1, pos.z - 2), math.min(box.maxp.z - 1, pos.z + 2) do @@ -573,9 +651,10 @@ minetest.register_tool("tools:grow", { local node = minetest.get_node(ppos) local pos_above = {x = x, y = y + 1, z = z} local above_node = minetest.get_node(pos_above) - if (node.name == "nodes:grass" or node.name == "nodes:dirt_with_grass") and - above_node.name == "air" and math.random() < 0.2 then - local plants = { + if above_node.name == "air" and math.random() < 0.2 and node.name == nname then + local plants + if (node.name == "nodes:grass" or node.name == "nodes:dirt_with_grass") then + plants = { {"grass_1", 56}, {"grass_2", 56}, {"grass_3", 56}, @@ -604,10 +683,83 @@ minetest.register_tool("tools:grow", { {"daisy", 9}, {"houstonia", 9}, {"paeonia", 9}, - } - local p = plants[math.random(1, 28)] - local nnode = {name = "nodes:" .. p[1], param2 = p[2]} - minetest.set_node(pos_above, nnode) + } + elseif (node.name == "nodes:mycelium") then + plants = { + {"mushroom_red",10}, + {"mushroom_brown",10}, + } + elseif (node.name == "nodes:dirt_with_snow") then + plants = { + { "dead_bush", 56 }, + } + elseif (node.name == "nodes:sand") then + plants = { + { "dead_bush", 56 }, + { "dead_bush", 56 }, + { "dead_bush", 56 }, + { "dead_bush", 56 }, + { "dead_bush", 56 }, + { "grass_1", 56 }, + { "grass_2", 56 }, + } + elseif (node.name == "nodes:gravel") then + plants = { + { "grass_1", 56 }, + { "grass_1", 56 }, + { "grass_2", 56 }, + } + elseif (node.name == "nodes:dirt_with_podzol") then + plants = { + {"mushroom_red", 10}, + {"mushroom_brown", 10}, + {"fern", 9}, + {"fern", 9}, + {"fern", 9}, + {"fern", 9}, + {"fern", 9}, + {"dead_bush", 9}, + {"dead_bush", 9}, + {"dead_bush", 9}, + {"dead_bush", 9}, + {"grass_1", 56}, + {"grass_2", 56}, + {"rose", 9}, + {"dandelion", 9}, + } + elseif (node.name == "nodes:soil" or node.name == "nodes:soil_wet") then + plants = { + {"carrots_stage_0", 8}, + {"carrots_stage_0", 8}, + {"carrots_stage_1", 8}, + {"carrots_stage_1", 8}, + {"carrots_stage_2", 8}, + {"carrots_stage_2", 8}, + {"carrots_stage_3", 8}, + {"carrots_stage_3", 8}, + {"potatoes_stage_0", 10}, + {"potatoes_stage_0", 10}, + {"potatoes_stage_1", 10}, + {"potatoes_stage_1", 10}, + {"potatoes_stage_2", 10}, + {"potatoes_stage_2", 10}, + {"potatoes_stage_3", 10}, + {"potatoes_stage_3", 10}, + {"wheat_stage_0", 11}, + {"wheat_stage_1", 11}, + {"wheat_stage_2", 11}, + {"wheat_stage_3", 11}, + {"wheat_stage_4", 11}, + {"wheat_stage_5", 11}, + {"wheat_stage_6", 11}, + {"wheat_stage_7", 11}, + } + end + if plants then + local p = plants[math.random(1, #plants)] + local nnode = {name = "nodes:" .. p[1], param2 = p[2]} + minetest.set_node(pos_above, nnode) + end end end end