Correct farming/stairs dependency (#1838)
[oweals/minetest_game.git] / mods / farming / nodes.lua
1 minetest.override_item("default:dirt", {
2         soil = {
3                 base = "default:dirt",
4                 dry = "farming:soil",
5                 wet = "farming:soil_wet"
6         }
7 })
8
9 minetest.override_item("default:dirt_with_grass", {
10         soil = {
11                 base = "default:dirt_with_grass",
12                 dry = "farming:soil",
13                 wet = "farming:soil_wet"
14         }
15 })
16
17 minetest.override_item("default:dirt_with_dry_grass", {
18         soil = {
19                 base = "default:dirt_with_dry_grass",
20                 dry = "farming:soil",
21                 wet = "farming:soil_wet"
22         }
23 })
24
25 minetest.override_item("default:dirt_with_rainforest_litter", {
26         soil = {
27                 base = "default:dirt_with_rainforest_litter",
28                 dry = "farming:soil",
29                 wet = "farming:soil_wet"
30         }
31 })
32
33 minetest.register_node("farming:soil", {
34         description = "Soil",
35         tiles = {"default_dirt.png^farming_soil.png", "default_dirt.png"},
36         drop = "default:dirt",
37         groups = {crumbly=3, not_in_creative_inventory=1, soil=2, grassland = 1, field = 1},
38         sounds = default.node_sound_dirt_defaults(),
39         soil = {
40                 base = "default:dirt",
41                 dry = "farming:soil",
42                 wet = "farming:soil_wet"
43         }
44 })
45
46 minetest.register_node("farming:soil_wet", {
47         description = "Wet Soil",
48         tiles = {"default_dirt.png^farming_soil_wet.png", "default_dirt.png^farming_soil_wet_side.png"},
49         drop = "default:dirt",
50         groups = {crumbly=3, not_in_creative_inventory=1, soil=3, wet = 1, grassland = 1, field = 1},
51         sounds = default.node_sound_dirt_defaults(),
52         soil = {
53                 base = "default:dirt",
54                 dry = "farming:soil",
55                 wet = "farming:soil_wet"
56         }
57 })
58
59 minetest.override_item("default:desert_sand", {
60         groups = {crumbly=3, falling_node=1, sand=1, soil = 1},
61         soil = {
62                 base = "default:desert_sand",
63                 dry = "farming:desert_sand_soil",
64                 wet = "farming:desert_sand_soil_wet"
65         }
66 })
67 minetest.register_node("farming:desert_sand_soil", {
68         description = "Desert Sand Soil",
69         drop = "default:desert_sand",
70         tiles = {"farming_desert_sand_soil.png", "default_desert_sand.png"},
71         groups = {crumbly=3, not_in_creative_inventory = 1, falling_node=1, sand=1, soil = 2, desert = 1, field = 1},
72         sounds = default.node_sound_sand_defaults(),
73         soil = {
74                 base = "default:desert_sand",
75                 dry = "farming:desert_sand_soil",
76                 wet = "farming:desert_sand_soil_wet"
77         }
78 })
79
80 minetest.register_node("farming:desert_sand_soil_wet", {
81         description = "Wet Desert Sand Soil",
82         drop = "default:desert_sand",
83         tiles = {"farming_desert_sand_soil_wet.png", "farming_desert_sand_soil_wet_side.png"},
84         groups = {crumbly=3, falling_node=1, sand=1, not_in_creative_inventory=1, soil=3, wet = 1, desert = 1, field = 1},
85         sounds = default.node_sound_sand_defaults(),
86         soil = {
87                 base = "default:desert_sand",
88                 dry = "farming:desert_sand_soil",
89                 wet = "farming:desert_sand_soil_wet"
90         }
91 })
92
93 minetest.register_node("farming:straw", {
94         description = "Straw",
95         tiles = {"farming_straw.png"},
96         is_ground_content = false,
97         groups = {snappy=3, flammable=4, fall_damage_add_percent=-30},
98         sounds = default.node_sound_leaves_defaults(),
99 })
100
101 stairs.register_stair_and_slab(
102         "straw",
103         "farming:straw",
104         {snappy = 3, flammable = 4},
105         {"farming_straw.png"},
106         "Straw Stair",
107         "Straw Slab",
108         default.node_sound_leaves_defaults()
109 )
110
111 minetest.register_abm({
112         label = "Farming soil",
113         nodenames = {"group:field"},
114         interval = 15,
115         chance = 4,
116         action = function(pos, node)
117                 local n_def = minetest.registered_nodes[node.name] or nil
118                 local wet = n_def.soil.wet or nil
119                 local base = n_def.soil.base or nil
120                 local dry = n_def.soil.dry or nil
121                 if not n_def or not n_def.soil or not wet or not base or not dry then
122                         return
123                 end
124
125                 pos.y = pos.y + 1
126                 local nn = minetest.get_node_or_nil(pos)
127                 if not nn or not nn.name then
128                         return
129                 end
130                 local nn_def = minetest.registered_nodes[nn.name] or nil
131                 pos.y = pos.y - 1
132
133                 if nn_def and nn_def.walkable and minetest.get_item_group(nn.name, "plant") == 0 then
134                         minetest.set_node(pos, {name = base})
135                         return
136                 end
137                 -- check if there is water nearby
138                 local wet_lvl = minetest.get_item_group(node.name, "wet")
139                 if minetest.find_node_near(pos, 3, {"group:water"}) then
140                         -- if it is dry soil and not base node, turn it into wet soil
141                         if wet_lvl == 0 then
142                                 minetest.set_node(pos, {name = wet})
143                         end
144                 else
145                         -- only turn back if there are no unloaded blocks (and therefore
146                         -- possible water sources) nearby
147                         if not minetest.find_node_near(pos, 3, {"ignore"}) then
148                                 -- turn it back into base if it is already dry
149                                 if wet_lvl == 0 then
150                                         -- only turn it back if there is no plant/seed on top of it
151                                         if minetest.get_item_group(nn.name, "plant") == 0 and minetest.get_item_group(nn.name, "seed") == 0 then
152                                                 minetest.set_node(pos, {name = base})
153                                         end
154
155                                 -- if its wet turn it back into dry soil
156                                 elseif wet_lvl == 1 then
157                                         minetest.set_node(pos, {name = dry})
158                                 end
159                         end
160                 end
161         end,
162 })
163
164
165 for i = 1, 5 do
166         minetest.override_item("default:grass_"..i, {drop = {
167                 max_items = 1,
168                 items = {
169                         {items = {'farming:seed_wheat'},rarity = 5},
170                         {items = {'default:grass_1'}},
171                 }
172         }})
173 end
174
175 minetest.override_item("default:junglegrass", {drop = {
176         max_items = 1,
177         items = {
178                 {items = {'farming:seed_cotton'},rarity = 8},
179                 {items = {'default:junglegrass'}},
180         }
181 }})