Make farming more flexible
[oweals/minetest_game.git] / mods / farming / nodes.lua
1 minetest.override_item("default:dirt", {
2         groups = {crumbly=3,soil=1},
3         soil = {
4                 base = "default:dirt",
5                 dry = "farming:soil",
6                 wet = "farming:soil_wet"
7         }
8 })
9
10 minetest.override_item("default:dirt_with_grass", {
11         groups = {crumbly=3,soil=1},
12         soil = {
13                 base = "default:dirt_with_grass",
14                 dry = "farming:soil",
15                 wet = "farming:soil_wet"
16         }
17 })
18
19 minetest.register_node("farming:soil", {
20         description = "Soil",
21         tiles = {"farming_soil.png", "default_dirt.png"},
22         drop = "default:dirt",
23         is_ground_content = true,
24         groups = {crumbly=3, not_in_creative_inventory=1, soil=2, grassland = 1},
25         sounds = default.node_sound_dirt_defaults(),
26         soil = {
27                 base = "default:dirt",
28                 dry = "farming:soil",
29                 wet = "farming:soil_wet"
30         }
31 })
32
33 minetest.register_node("farming:soil_wet", {
34         description = "Wet Soil",
35         tiles = {"farming_soil_wet.png", "farming_soil_wet_side.png"},
36         drop = "default:dirt",
37         is_ground_content = true,
38         groups = {crumbly=3, not_in_creative_inventory=1, soil=3, wet = 1, grassland = 1},
39         sounds = default.node_sound_dirt_defaults(),
40         soil = {
41                 base = "default:dirt",
42                 dry = "farming:soil",
43                 wet = "farming:soil_wet"
44         }
45 })
46
47 minetest.override_item("default:desert_sand", {
48         groups = {crumbly=3, falling_node=1, sand=1, soil = 1},
49         soil = {
50                 base = "default:desert_sand",
51                 dry = "farming:desert_sand_soil",
52                 wet = "farming:desert_sand_soil_wet"
53         }
54 })
55 minetest.register_node("farming:desert_sand_soil", {
56         description = "Desert Sand",
57         tiles = {"farming_desert_sand_soil.png", "default_desert_sand.png"},
58         is_ground_content = true,
59         groups = {crumbly=3, not_in_creative_inventory = 1, falling_node=1, sand=1, soil = 2, desert = 1},
60         sounds = default.node_sound_sand_defaults(),
61         soil = {
62                 base = "default:desert_sand",
63                 dry = "farming:desert_sand_soil",
64                 wet = "farming:desert_sand_soil_wet"
65         }
66 })
67
68 minetest.register_node("farming:desert_sand_soil_wet", {
69         description = "Desert Sand",
70         drop = "default:desert_sand",
71         tiles = {"farming_desert_sand_soil_wet.png", "farming_desert_sand_soil_wet_side.png"},
72         is_ground_content = true,
73         groups = {crumbly=3, falling_node=1, sand=1, not_in_creative_inventory=1, soil=3, wet = 1, desert = 1},
74         sounds = default.node_sound_sand_defaults(),
75         soil = {
76                 base = "default:desert_sand",
77                 dry = "farming:desert_sand_soil",
78                 wet = "farming:desert_sand_soil_wet"
79         }
80 })
81
82 minetest.register_abm({
83         nodenames = {"group:soil", "group:wet"},
84         interval = 5,
85         chance = 10,
86         action = function(pos, node)
87                 pos.y = pos.y+1
88                 local nn = minetest.get_node(pos).name
89                 node = minetest.registered_nodes[node.name]
90                 pos.y = pos.y-1
91                 
92                 if node.soil == nil or node.soil.wet == nil or node.soil.base == nil or node.soil.dry == nil then
93                         minetest.log("error", "Could not process soil information of node " .. nn)
94                         return
95                 end
96                 
97                 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
98                         minetest.set_node(pos, {name = node.soil.base})
99                 end
100                 -- check if there is water nearby
101                 if minetest.find_node_near(pos, 3, {"group:water"}) then
102                         -- if it is dry soil and not base node, turn it into wet soil
103                         if node.name ~= node.soil.base and minetest.get_item_group(node.name, "wet") == 0 then
104                                 minetest.set_node(pos, {name = node.soil.wet})
105                         end
106                 else
107                         -- turn it back into base if it is already dry
108                         if minetest.get_item_group(node.name, "wet") == 0 then
109                                 -- only turn it back if there is no plant/seed on top of it
110                                 if minetest.get_item_group(nn, "plant") == 0 and minetest.get_item_group(nn, "seed") == 0 then
111                                         minetest.set_node(pos, {name = node.soil.base})
112                                 end
113                                 
114                         -- if its wet turn it back into dry soil
115                         elseif minetest.get_item_group(node.name, "wet") == 1 then
116                                 minetest.set_node(pos, {name = node.soil.dry})
117                         end
118                 end
119         end,
120 })
121
122
123 for i = 1, 5 do         
124         minetest.override_item("default:grass_"..i, {drop = {
125                 max_items = 1,
126                 items = {
127                         {items = {'farming:seed_wheat'},rarity = 5},
128                         {items = {'default:grass_1'}},
129                 }
130         }})
131 end
132         
133 minetest.override_item("default:junglegrass", {drop = {
134         max_items = 1,
135         items = {
136                 {items = {'farming:seed_cotton'},rarity = 8},
137                 {items = {'default:junglegrass'}},
138         }
139 }})