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