Growth tool: Add support for many new nodes
This commit is contained in:
parent
a819b41782
commit
abb28f6f83
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user