mirror of
https://github.com/luanti-org/minetest_game.git
synced 2025-07-14 18:31:57 -04:00
Cleanup farming code and small additional changes
Some additional changes: Hoes only work if the node is pointed to from above. Hoe description, inventory_image and max_uses must be specified (when registering). Nodes with the field group must have all soil values in the node definition. Field nodes do not loose their param2 value (e.g. rotation) when they dry, get wet or get hoed. The node above the hoed one is not checked for protection because that node is not changed; similarly, the node under a seed is not tested for protection. Document the fertility test for nil player in the hoe on_use function properly test for the creative mod ensure that the on_place function returns an itemstack change missing soil fields message
This commit is contained in:
parent
dd91a1bfe5
commit
4e8db84635
4 changed files with 204 additions and 213 deletions
|
@ -63,7 +63,8 @@ minetest.register_node("farming:soil", {
|
|||
description = S("Soil"),
|
||||
tiles = {"default_dirt.png^farming_soil.png", "default_dirt.png"},
|
||||
drop = "default:dirt",
|
||||
groups = {crumbly=3, not_in_creative_inventory=1, soil=2, grassland = 1, field = 1},
|
||||
groups = {crumbly = 3, not_in_creative_inventory = 1, soil = 2,
|
||||
grassland = 1, field = 1},
|
||||
sounds = default.node_sound_dirt_defaults(),
|
||||
soil = {
|
||||
base = "default:dirt",
|
||||
|
@ -74,9 +75,11 @@ minetest.register_node("farming:soil", {
|
|||
|
||||
minetest.register_node("farming:soil_wet", {
|
||||
description = S("Wet Soil"),
|
||||
tiles = {"default_dirt.png^farming_soil_wet.png", "default_dirt.png^farming_soil_wet_side.png"},
|
||||
tiles = {"default_dirt.png^farming_soil_wet.png",
|
||||
"default_dirt.png^farming_soil_wet_side.png"},
|
||||
drop = "default:dirt",
|
||||
groups = {crumbly=3, not_in_creative_inventory=1, soil=3, wet = 1, grassland = 1, field = 1},
|
||||
groups = {crumbly = 3, not_in_creative_inventory = 1, soil = 3, wet = 1,
|
||||
grassland = 1, field = 1},
|
||||
sounds = default.node_sound_dirt_defaults(),
|
||||
soil = {
|
||||
base = "default:dirt",
|
||||
|
@ -89,7 +92,8 @@ minetest.register_node("farming:dry_soil", {
|
|||
description = S("Savanna Soil"),
|
||||
tiles = {"default_dry_dirt.png^farming_soil.png", "default_dry_dirt.png"},
|
||||
drop = "default:dry_dirt",
|
||||
groups = {crumbly=3, not_in_creative_inventory=1, soil=2, grassland = 1, field = 1},
|
||||
groups = {crumbly=3, not_in_creative_inventory=1, soil=2, grassland = 1,
|
||||
field = 1},
|
||||
sounds = default.node_sound_dirt_defaults(),
|
||||
soil = {
|
||||
base = "default:dry_dirt",
|
||||
|
@ -100,9 +104,11 @@ minetest.register_node("farming:dry_soil", {
|
|||
|
||||
minetest.register_node("farming:dry_soil_wet", {
|
||||
description = S("Wet Savanna Soil"),
|
||||
tiles = {"default_dry_dirt.png^farming_soil_wet.png", "default_dry_dirt.png^farming_soil_wet_side.png"},
|
||||
tiles = {"default_dry_dirt.png^farming_soil_wet.png",
|
||||
"default_dry_dirt.png^farming_soil_wet_side.png"},
|
||||
drop = "default:dry_dirt",
|
||||
groups = {crumbly=3, not_in_creative_inventory=1, soil=3, wet = 1, grassland = 1, field = 1},
|
||||
groups = {crumbly=3, not_in_creative_inventory=1, soil=3, wet = 1,
|
||||
grassland = 1, field = 1},
|
||||
sounds = default.node_sound_dirt_defaults(),
|
||||
soil = {
|
||||
base = "default:dry_dirt",
|
||||
|
@ -123,7 +129,8 @@ minetest.register_node("farming:desert_sand_soil", {
|
|||
description = S("Desert Sand Soil"),
|
||||
drop = "default:desert_sand",
|
||||
tiles = {"farming_desert_sand_soil.png", "default_desert_sand.png"},
|
||||
groups = {crumbly=3, not_in_creative_inventory = 1, falling_node=1, sand=1, soil = 2, desert = 1, field = 1},
|
||||
groups = {crumbly = 3, not_in_creative_inventory = 1, falling_node = 1,
|
||||
sand = 1, soil = 2, desert = 1, field = 1},
|
||||
sounds = default.node_sound_sand_defaults(),
|
||||
soil = {
|
||||
base = "default:desert_sand",
|
||||
|
@ -135,8 +142,10 @@ minetest.register_node("farming:desert_sand_soil", {
|
|||
minetest.register_node("farming:desert_sand_soil_wet", {
|
||||
description = S("Wet Desert Sand Soil"),
|
||||
drop = "default:desert_sand",
|
||||
tiles = {"farming_desert_sand_soil_wet.png", "farming_desert_sand_soil_wet_side.png"},
|
||||
groups = {crumbly=3, falling_node=1, sand=1, not_in_creative_inventory=1, soil=3, wet = 1, desert = 1, field = 1},
|
||||
tiles = {"farming_desert_sand_soil_wet.png",
|
||||
"farming_desert_sand_soil_wet_side.png"},
|
||||
groups = {crumbly = 3, falling_node = 1, sand = 1, desert = 1,
|
||||
not_in_creative_inventory = 1, soil = 3, wet = 1, field = 1},
|
||||
sounds = default.node_sound_sand_defaults(),
|
||||
soil = {
|
||||
base = "default:desert_sand",
|
||||
|
@ -182,49 +191,56 @@ minetest.register_abm({
|
|||
interval = 15,
|
||||
chance = 4,
|
||||
action = function(pos, node)
|
||||
local n_def = minetest.registered_nodes[node.name] or nil
|
||||
local wet = n_def.soil.wet or nil
|
||||
local base = n_def.soil.base or nil
|
||||
local dry = n_def.soil.dry or nil
|
||||
if not n_def or not n_def.soil or not wet or not base or not dry then
|
||||
return
|
||||
end
|
||||
|
||||
pos.y = pos.y + 1
|
||||
local nn = minetest.get_node_or_nil(pos)
|
||||
if not nn or not nn.name then
|
||||
if not nn then
|
||||
return
|
||||
end
|
||||
local nn_def = minetest.registered_nodes[nn.name] or nil
|
||||
local nn_def = minetest.registered_nodes[nn.name]
|
||||
pos.y = pos.y - 1
|
||||
|
||||
if nn_def and nn_def.walkable and minetest.get_item_group(nn.name, "plant") == 0 then
|
||||
minetest.set_node(pos, {name = base})
|
||||
local soil = minetest.registered_nodes[node.name].soil
|
||||
assert(soil and soil.wet and soil.base and soil.dry,
|
||||
"Field node " .. node.name .. " lacks of either 'wet', 'base' " ..
|
||||
"or 'dry' properties.")
|
||||
|
||||
if nn_def and nn_def.walkable and
|
||||
minetest.get_item_group(nn.name, "plant") == 0 then
|
||||
node.name = soil.base
|
||||
minetest.set_node(pos, node)
|
||||
return
|
||||
end
|
||||
-- check if there is water nearby
|
||||
local wet_lvl = minetest.get_item_group(node.name, "wet")
|
||||
if minetest.find_node_near(pos, 3, {"group:water"}) then
|
||||
-- if it is dry soil and not base node, turn it into wet soil
|
||||
if wet_lvl == 0 then
|
||||
minetest.set_node(pos, {name = wet})
|
||||
end
|
||||
else
|
||||
-- only turn back if there are no unloaded blocks (and therefore
|
||||
-- possible water sources) nearby
|
||||
if not minetest.find_node_near(pos, 3, {"ignore"}) then
|
||||
-- turn it back into base if it is already dry
|
||||
if wet_lvl == 0 then
|
||||
-- only turn it back if there is no plant/seed on top of it
|
||||
if minetest.get_item_group(nn.name, "plant") == 0 and minetest.get_item_group(nn.name, "seed") == 0 then
|
||||
minetest.set_node(pos, {name = base})
|
||||
end
|
||||
|
||||
-- if its wet turn it back into dry soil
|
||||
elseif wet_lvl == 1 then
|
||||
minetest.set_node(pos, {name = dry})
|
||||
end
|
||||
local wet_lvl = minetest.get_item_group(node.name, "wet")
|
||||
-- Make the node wet if water is near it
|
||||
if minetest.find_node_near(pos, 3, {"group:water"}) then
|
||||
-- If it is dry soil and not base node, turn it into wet soil
|
||||
if wet_lvl == 0 then
|
||||
node.name = soil.wet
|
||||
minetest.set_node(pos, node)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
-- Only dry out if there are no unloaded blocks (and therefore
|
||||
-- possible water sources) nearby
|
||||
if minetest.find_node_near(pos, 3, {"ignore"}) then
|
||||
return
|
||||
end
|
||||
|
||||
-- Turn it back into base if it is already dry and no plant/seed
|
||||
-- is on top of it
|
||||
if wet_lvl == 0 then
|
||||
if minetest.get_item_group(nn.name, "plant") == 0 and
|
||||
minetest.get_item_group(nn.name, "seed") == 0 then
|
||||
node.name = soil.base
|
||||
minetest.set_node(pos, node)
|
||||
end
|
||||
|
||||
-- If it is wet turn it back into dry soil
|
||||
elseif wet_lvl == 1 then
|
||||
node.name = soil.dry
|
||||
minetest.set_node(pos, node)
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
@ -233,13 +249,15 @@ minetest.register_abm({
|
|||
-- Make default:grass_* occasionally drop wheat seed
|
||||
|
||||
for i = 1, 5 do
|
||||
minetest.override_item("default:grass_"..i, {drop = {
|
||||
max_items = 1,
|
||||
items = {
|
||||
{items = {"farming:seed_wheat"}, rarity = 5},
|
||||
{items = {"default:grass_1"}},
|
||||
minetest.override_item("default:grass_" .. i, {
|
||||
drop = {
|
||||
max_items = 1,
|
||||
items = {
|
||||
{items = {"farming:seed_wheat"}, rarity = 5},
|
||||
{items = {"default:grass_1"}},
|
||||
}
|
||||
}
|
||||
}})
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
|
@ -250,13 +268,15 @@ end
|
|||
-- This source is kept for now to avoid disruption but should probably be
|
||||
-- removed in future as players get used to the new source.
|
||||
|
||||
minetest.override_item("default:junglegrass", {drop = {
|
||||
max_items = 1,
|
||||
items = {
|
||||
{items = {"farming:seed_cotton"}, rarity = 8},
|
||||
{items = {"default:junglegrass"}},
|
||||
minetest.override_item("default:junglegrass", {
|
||||
drop = {
|
||||
max_items = 1,
|
||||
items = {
|
||||
{items = {"farming:seed_cotton"}, rarity = 8},
|
||||
{items = {"default:junglegrass"}},
|
||||
}
|
||||
}
|
||||
}})
|
||||
})
|
||||
|
||||
|
||||
-- Wild cotton as a source of cotton seed
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue