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