@@ -21,7 +21,7 @@ minetest.register_node("farming:soil", {
tiles = {" farming_soil.png" , " default_dirt.png" },
drop = " default:dirt" ,
is_ground_content = true ,
groups = {crumbly= 3 , not_in_creative_inventory= 1 , soil= 2 , grassland = 1 },
groups = {crumbly= 3 , not_in_creative_inventory= 1 , soil= 2 , grassland = 1 , field = 1 },
sounds = default.node_sound_dirt_defaults (),
soil = {
base = " default:dirt" ,
@@ -35,7 +35,7 @@ minetest.register_node("farming:soil_wet", {
tiles = {" farming_soil_wet.png" , " farming_soil_wet_side.png" },
drop = " default:dirt" ,
is_ground_content = true ,
groups = {crumbly= 3 , not_in_creative_inventory= 1 , soil= 3 , wet = 1 , grassland = 1 },
groups = {crumbly= 3 , not_in_creative_inventory= 1 , soil= 3 , wet = 1 , grassland = 1 , field = 1 },
sounds = default.node_sound_dirt_defaults (),
soil = {
base = " default:dirt" ,
@@ -57,7 +57,7 @@ minetest.register_node("farming:desert_sand_soil", {
drop = " default:desert_sand" ,
tiles = {" farming_desert_sand_soil.png" , " default_desert_sand.png" },
is_ground_content = true ,
groups = {crumbly= 3 , not_in_creative_inventory = 1 , falling_node= 1 , sand= 1 , soil = 2 , desert = 1 },
groups = {crumbly= 3 , not_in_creative_inventory = 1 , falling_node= 1 , sand= 1 , soil = 2 , desert = 1 , field = 1 },
sounds = default.node_sound_sand_defaults (),
soil = {
base = " default:desert_sand" ,
@@ -71,7 +71,7 @@ minetest.register_node("farming:desert_sand_soil_wet", {
drop = " default:desert_sand" ,
tiles = {" farming_desert_sand_soil_wet.png" , " farming_desert_sand_soil_wet_side.png" },
is_ground_content = true ,
groups = {crumbly= 3 , falling_node= 1 , sand= 1 , not_in_creative_inventory= 1 , soil= 3 , wet = 1 , desert = 1 },
groups = {crumbly= 3 , falling_node= 1 , sand= 1 , not_in_creative_inventory= 1 , soil= 3 , wet = 1 , desert = 1 , field = 1 },
sounds = default.node_sound_sand_defaults (),
soil = {
base = " default:desert_sand" ,
@@ -81,39 +81,48 @@ minetest.register_node("farming:desert_sand_soil_wet", {
})
minetest.register_abm ({
nodenames = {" group:soil " , " group:wet " },
interval = 5 ,
chance = 10 ,
nodenames = {" group:field " },
interval = 15 ,
chance = 4 ,
action = function (pos , node )
pos.y = pos.y + 1
local nn = minetest.get_node (pos).name
node = minetest.registered_nodes [node.name ]
pos.y = pos.y - 1
if node.soil == nil or node.soil .wet == nil or node.soil .base == nil or node.soil .dry == nil then
local n_def = minetest.registered_nodes [node.name ] or nil
local wet = n_def.soil .wet or nil
local base = n_def.soil .base or nil
local dry = n_def.soil .dry or nil
if not n_def or not n_def.soil or not wet or not base or not dry then
return
end
pos.y = pos.y + 1
local nn = minetest.get_node_or_nil (pos)
if not nn or not nn.name then
return
end
local nn_def = minetest.registered_nodes [nn.name ] or nil
pos.y = pos.y - 1
if minetest.registered_nodes [nn] and minetest.registered_nodes [nn].walkable and minetest.get_item_group (nn, " plant" ) == 0 and node.name ~= node.soil .base then
minetest.set_node (pos, {name = node.soil .base })
if nn_def and nn_def.walkable and minetest.get_item_group (nn.name , " plant" ) == 0 then
minetest.set_node (pos, {name = base})
return
end
-- check if there is water nearby
if minetest.find_node_near (pos, 3 , {" group:water" }) then
local wet_lvl = minetest.get_item_group (node.name , " wet" )
-- if it is dry soil and not base node, turn it into wet soil
if node. name ~= node. soil . base and minetest. get_item_group (node. name , " wet " ) == 0 then
minetest.set_node (pos, {name = node. soil . wet })
if wet_lvl == 0 then
minetest.set_node (pos, {name = wet})
end
else
-- turn it back into base if it is already dry
if minetest. get_item_group (node. name , " wet " ) == 0 then
if wet_lvl == 0 then
-- only turn it back if there is no plant/seed on top of it
if minetest.get_item_group (nn, " plant" ) == 0 and minetest.get_item_group (nn, " seed" ) == 0 then
minetest.set_node (pos, {name = node. soil . base })
if minetest.get_item_group (nn. name , " plant" ) == 0 and minetest.get_item_group (nn. name , " seed" ) == 0 then
minetest.set_node (pos, {name = base})
end
-- if its wet turn it back into dry soil
elseif minetest. get_item_group (node. name , " wet " ) == 1 then
minetest.set_node (pos, {name = node. soil . dry })
elseif wet_lvl == 1 then
minetest.set_node (pos, {name = dry})
end
end
end ,