Growth tool: Add support for many new nodes

This commit is contained in:
Wuzzy 2019-12-10 20:27:29 +01:00
parent a819b41782
commit abb28f6f83

View File

@ -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