80 lines
3 KiB
Lua
80 lines
3 KiB
Lua
-- Bushes classic mod originally by unknown
|
|
-- now maintained by VanessaE
|
|
|
|
bushes_classic = {}
|
|
|
|
-- support for i18n
|
|
local S = minetest.get_translator("bushes_classic")
|
|
|
|
bushes_classic.bushes = {
|
|
"strawberry",
|
|
"blackberry",
|
|
"blueberry",
|
|
"raspberry",
|
|
"gooseberry",
|
|
"mixed_berry"
|
|
}
|
|
|
|
bushes_classic.bushes_descriptions = {
|
|
{S("Strawberry"), S("Raw Strawberry pie"), S("Cooked Strawberry pie"), S("Slice of Strawberry pie"), S("Basket with Strawberry pies"), S("Strawberry Bush")},
|
|
{S("Blackberry"), S("Raw Blackberry pie"), S("Cooked Blackberry pie"), S("Slice of Blackberry pie"), S("Basket with Blackberry pies"), S("Blackberry Bush")},
|
|
{S("Blueberry"), S("Raw Blueberry pie"), S("Cooked Blueberry pie"), S("Slice of Blueberry pie"), S("Basket with Blueberry pies"), S("Blueberry Bush")},
|
|
{S("Raspberry"), S("Raw Raspberry pie"), S("Cooked Raspberry pie"), S("Slice of Raspberry pie"), S("Basket with Raspberry pies"), S("Raspberry Bush")},
|
|
{S("Gooseberry"), S("Raw Gooseberry pie"), S("Cooked Gooseberry pie"), S("Slice of Gooseberry pie"), S("Basket with Gooseberry pies"), S("Gooseberry Bush")},
|
|
{S("Mixed Berry"), S("Raw Mixed Berry pie"), S("Cooked Mixed Berry pie"), S("Slice of Mixed Berry pie"), S("Basket with Mixed Berry pies"), S("Currently fruitless Bush")}
|
|
}
|
|
|
|
bushes_classic.spawn_list = {}
|
|
|
|
local modpath = minetest.get_modpath('bushes_classic')
|
|
dofile(modpath..'/cooking.lua')
|
|
dofile(modpath..'/nodes.lua')
|
|
|
|
local spawn_plants = bushes_classic.spawn_list
|
|
|
|
local function get_biome_data(pos, perlin_fertile)
|
|
local fertility = perlin_fertile:get_2d({x=pos.x, y=pos.z})
|
|
|
|
local data = minetest.get_biome_data(pos)
|
|
-- Original values this method returned were +1 (lowest) to -1 (highest)
|
|
-- so we need to convert the 0-100 range from get_biome_data() to that.
|
|
return fertility, 1 - (data.heat / 100 * 2), 1 - (data.humidity / 100 * 2)
|
|
end
|
|
|
|
minetest.register_abm({
|
|
nodenames = {
|
|
"default:dirt_with_grass",
|
|
"woodsoils:dirt_with_leaves_1",
|
|
"woodsoils:grass_with_leaves_1",
|
|
"woodsoils:grass_with_leaves_2",
|
|
"farming:soil",
|
|
"farming:soil_wet"
|
|
},
|
|
interval = 3600,
|
|
chance = 100,
|
|
label = "[bushes_classic] spawn bushes",
|
|
min_y = -16,
|
|
max_y = 48,
|
|
action = function(pos, node)
|
|
local p_top = {x = pos.x, y = pos.y + 1, z = pos.z}
|
|
local n_top = minetest.get_node_or_nil(p_top)
|
|
if not n_top or n_top.name ~= "air" then return end
|
|
|
|
local perlin_fertile_area = minetest.get_perlin(545342534, 3, 0.6, 100)
|
|
|
|
local fertility, temperature, humidity = get_biome_data(pos, perlin_fertile_area)
|
|
|
|
local pos_biome_ok = fertility > -0.1 and temperature <= 0.15 and temperature >= -0.15 and humidity <= 0 and humidity >= -1
|
|
if not pos_biome_ok then return end
|
|
|
|
if minetest.find_node_near(p_top, 10 + math.random(-1.5,2), {"group:bush"}) then
|
|
return -- Nodes to avoid are nearby
|
|
end
|
|
|
|
local plant_to_spawn = spawn_plants[math.random(1, #spawn_plants)]
|
|
|
|
minetest.swap_node(p_top, {name = plant_to_spawn, param2 = 0})
|
|
end
|
|
})
|
|
|
|
minetest.register_alias("bushes:basket_pies", "bushes:basket_strawberry")
|