2017-01-31 12:35:59 +01:00
minetest.register_node ( " mcl_farming:soil " , {
2015-06-29 19:55:56 +02:00
tiles = { " farming_soil.png " , " default_dirt.png " , " default_dirt.png " , " default_dirt.png " , " default_dirt.png " , " default_dirt.png " } ,
2017-01-08 03:05:41 +01:00
description = " Farmland " ,
2017-03-11 18:32:39 +01:00
_doc_items_longdesc = " Farmland is used for farming, a necessary surface to plant crops. It is created when a hoe is used on dirt or a similar block. Plants are able to grow on farmland, but slowly. Farmland will become hydrated farmland (on which plants grow faster) when it rains or a water source is nearby. " ,
2017-01-31 23:32:56 +01:00
drop = " mcl_core:dirt " ,
2015-06-29 19:55:56 +02:00
drawtype = " nodebox " ,
paramtype = " light " ,
node_box = {
type = " fixed " ,
fixed = {
2017-01-08 03:12:36 +01:00
-- 15/16 of the normal height
{ - 0.5 , - 0.5 , - 0.5 , 0.5 , 0.4375 , 0.5 } ,
2015-06-29 19:55:56 +02:00
}
} ,
2017-05-14 21:08:02 +02:00
on_construct = function ( pos )
local meta = minetest.get_meta ( pos )
meta : set_int ( " wet " , 0 )
end ,
2017-02-27 01:26:07 +01:00
groups = { handy = 1 , shovely = 1 , not_in_creative_inventory = 1 , soil = 2 , soil_sapling = 1 } ,
2017-02-11 18:46:23 +01:00
sounds = mcl_sounds.node_sound_dirt_defaults ( ) ,
2017-02-22 16:03:59 +01:00
_mcl_blast_resistance = 3 ,
2017-03-20 19:53:14 +01:00
_mcl_hardness = 0.6 ,
2015-06-29 19:55:56 +02:00
} )
2017-01-31 12:35:59 +01:00
minetest.register_node ( " mcl_farming:soil_wet " , {
2015-06-29 19:55:56 +02:00
tiles = { " farming_soil_wet.png " , " default_dirt.png " , " default_dirt.png " , " default_dirt.png " , " default_dirt.png " , " default_dirt.png " } ,
2017-01-08 03:05:41 +01:00
description = " Hydrated Farmland " ,
2017-03-11 18:32:39 +01:00
_doc_items_longdesc = " Hydrated farmland is used in farming, this is where you can plant and grow some plants. It is created when farmlands is under rain or near water. " ,
2017-01-31 23:32:56 +01:00
drop = " mcl_core:dirt " ,
2015-06-29 19:55:56 +02:00
drawtype = " nodebox " ,
paramtype = " light " ,
node_box = {
type = " fixed " ,
fixed = {
2017-01-08 03:12:36 +01:00
{ - 0.5 , - 0.5 , - 0.5 , 0.5 , 0.4375 , 0.5 } ,
2015-06-29 19:55:56 +02:00
}
} ,
2017-05-14 21:08:02 +02:00
on_construct = function ( pos )
local meta = minetest.get_meta ( pos )
meta : set_int ( " wet " , 7 )
end ,
2017-02-27 01:26:07 +01:00
groups = { handy = 1 , shovely = 1 , not_in_creative_inventory = 1 , soil = 3 , soil_sapling = 1 } ,
2017-02-11 18:46:23 +01:00
sounds = mcl_sounds.node_sound_dirt_defaults ( ) ,
2017-02-22 16:03:59 +01:00
_mcl_blast_resistance = 3 ,
2017-03-20 19:53:14 +01:00
_mcl_hardness = 0.6 ,
2015-06-29 19:55:56 +02:00
} )
minetest.register_abm ( {
2017-05-14 21:08:02 +02:00
label = " Farmland hydration " ,
nodenames = { " mcl_farming:soil " , " mcl_farming:soil_wet " } ,
2015-06-29 19:55:56 +02:00
interval = 15 ,
2017-05-14 21:08:02 +02:00
chance = 4 ,
2015-06-29 19:55:56 +02:00
action = function ( pos , node )
2017-05-14 21:08:02 +02:00
-- Get wetness value
local meta = minetest.get_meta ( pos )
local wet = meta : get_int ( " wet " )
if not wet then
if node.name == " mcl_farming:soil " then
wet = 0
else
wet = 7
end
end
2017-05-14 21:47:45 +02:00
-- Turn back into dirt when covered by solid node
local above_node = minetest.get_node_or_nil ( { x = pos.x , y = pos.y + 1 , z = pos.z } )
if above_node then
2017-05-14 21:53:34 +02:00
if minetest.get_item_group ( above_node.name , " solid " ) ~= 0 then
2017-05-14 21:47:45 +02:00
node.name = " mcl_core:dirt "
minetest.set_node ( pos , node )
return
end
end
2017-05-14 21:08:02 +02:00
-- Check an area of 9× 2× 9 around the node for nodename
local check_surroundings = function ( pos , nodename )
local nodes = minetest.find_nodes_in_area ( { x = pos.x - 4 , y = pos.y - 1 , z = pos.z - 4 } , { x = pos.x + 4 , y = pos.y , z = pos.z + 4 } , { nodename } )
return # nodes > 0
end
if check_surroundings ( pos , " group:water " ) then
if node.name ~= " mcl_farming:soil_wet " then
-- Make it wet
node.name = " mcl_farming:soil_wet "
minetest.set_node ( pos , node )
end
else
-- Decay if no water is nearby.
-- But not near unloaded areas since thse might include water.
if not check_surroundings ( pos , " ignore " ) then
if wet <= 0 then
local n_def = minetest.registered_nodes [ node.name ] or nil
local nn = minetest.get_node_or_nil ( { x = pos.x , y = pos.y + 1 , z = pos.z } )
if not nn or not nn.name then
return
end
local nn_def = minetest.registered_nodes [ nn.name ] or nil
if nn_def and minetest.get_item_group ( nn.name , " plant " ) == 0 then
node.name = " mcl_core:dirt "
minetest.set_node ( pos , node )
return
end
else
if wet == 7 then
node.name = " mcl_farming:soil "
minetest.swap_node ( pos , node )
end
-- Slowly count down wetness
meta : set_int ( " wet " , wet - 1 )
end
end
2015-06-29 19:55:56 +02:00
end
end ,
} )