merge upstream

This commit is contained in:
Milan 2019-02-07 13:17:18 +01:00
commit 2e451bd11e
236 changed files with 7780 additions and 2577 deletions

View file

@ -26,3 +26,5 @@ yyt16384 (CC BY-SA 3.0):
paramat (CC BY-SA 3.0):
flowers_dandelion_yellow.png -- Derived from RHRhino's texture
flowers_tulip_black.png -- Derived from RHRhino's texture
flowers_chrysanthemum_green.png

View file

@ -75,6 +75,12 @@ flowers.datas = {
{-4 / 16, -0.5, -4 / 16, 4 / 16, -2 / 16, 4 / 16},
{color_yellow = 1, flammable = 1}
},
{
"chrysanthemum_green",
"Green Chrysanthemum",
{-4 / 16, -0.5, -4 / 16, 4 / 16, -1 / 16, 4 / 16},
{color_green = 1, flammable = 1}
},
{
"geranium",
"Blue Geranium",
@ -93,6 +99,12 @@ flowers.datas = {
{-5 / 16, -0.5, -5 / 16, 5 / 16, -2 / 16, 5 / 16},
{color_white = 1, flammable = 1}
},
{
"tulip_black",
"Black Tulip",
{-2 / 16, -0.5, -2 / 16, 2 / 16, 3 / 16, 2 / 16},
{color_black = 1, flammable = 1}
},
}
for _,item in pairs(flowers.datas) do
@ -127,24 +139,29 @@ function flowers.flower_spread(pos, node)
local pos0 = vector.subtract(pos, 4)
local pos1 = vector.add(pos, 4)
-- Testing shows that a threshold of 3 results in an appropriate maximum
-- density of approximately 7 flora per 9x9 area.
if #minetest.find_nodes_in_area(pos0, pos1, "group:flora") > 3 then
return
end
local soils = minetest.find_nodes_in_area_under_air(
pos0, pos1, "group:soil")
if #soils > 0 then
local seedling = soils[math.random(#soils)]
local seedling_above =
{x = seedling.x, y = seedling.y + 1, z = seedling.z}
light = minetest.get_node_light(seedling_above)
if not light or light < 13 or
-- Desert sand is in the soil group
minetest.get_node(seedling).name == "default:desert_sand" then
return
local num_soils = #soils
if num_soils >= 1 then
for si = 1, math.min(3, num_soils) do
local soil = soils[math.random(num_soils)]
local soil_name = minetest.get_node(soil).name
local soil_above = {x = soil.x, y = soil.y + 1, z = soil.z}
light = minetest.get_node_light(soil_above)
if light and light >= 13 and
-- Only spread to same surface node
soil_name == under.name and
-- Desert sand is in the soil group
soil_name ~= "default:desert_sand" then
minetest.set_node(soil_above, {name = node.name})
end
end
minetest.set_node(seedling_above, {name = node.name})
end
end
@ -152,7 +169,7 @@ minetest.register_abm({
label = "Flower spread",
nodenames = {"group:flora"},
interval = 13,
chance = 96,
chance = 300,
action = function(...)
flowers.flower_spread(...)
end,
@ -173,7 +190,7 @@ minetest.register_node("flowers:mushroom_red", {
sunlight_propagates = true,
walkable = false,
buildable_to = true,
groups = {snappy = 3, attached_node = 1, flammable = 1},
groups = {snappy = 3, attached_node = 1, flammable = 1, mushroom = 1},
sounds = default.node_sound_leaves_defaults(),
on_use = minetest.item_eat(-5),
selection_box = {
@ -192,7 +209,7 @@ minetest.register_node("flowers:mushroom_brown", {
sunlight_propagates = true,
walkable = false,
buildable_to = true,
groups = {snappy = 3, attached_node = 1, flammable = 1},
groups = {food_mushroom = 1, snappy = 3, attached_node = 1, flammable = 1, mushroom = 1},
sounds = default.node_sound_leaves_defaults(),
on_use = minetest.item_eat(1),
selection_box = {
@ -204,38 +221,34 @@ minetest.register_node("flowers:mushroom_brown", {
-- Mushroom spread and death
function flowers.mushroom_spread(pos, node)
if minetest.get_node_light(pos, nil) == 15 then
minetest.remove_node(pos)
return
end
local positions = minetest.find_nodes_in_area_under_air(
{x = pos.x - 1, y = pos.y - 2, z = pos.z - 1},
{x = pos.x + 1, y = pos.y + 1, z = pos.z + 1},
{"group:soil", "group:tree"})
if #positions == 0 then
return
end
local pos2 = positions[math.random(#positions)]
pos2.y = pos2.y + 1
if minetest.get_node_light(pos, 0.5) <= 3 and
minetest.get_node_light(pos2, 0.5) <= 3 then
minetest.set_node(pos2, {name = node.name})
end
end
minetest.register_abm({
label = "Mushroom spread",
nodenames = {"flowers:mushroom_brown", "flowers:mushroom_red"},
interval = 11,
chance = 50,
action = function(pos, node)
if minetest.get_node_light(pos, nil) == 15 then
minetest.remove_node(pos)
return
end
local random = {
x = pos.x + math.random(-2, 2),
y = pos.y + math.random(-1, 1),
z = pos.z + math.random(-2, 2)
}
local random_node = minetest.get_node_or_nil(random)
if not random_node or random_node.name ~= "air" then
return
end
local node_under = minetest.get_node_or_nil({x = random.x,
y = random.y - 1, z = random.z})
if not node_under then
return
end
if (minetest.get_item_group(node_under.name, "soil") ~= 0 or
minetest.get_item_group(node_under.name, "tree") ~= 0) and
minetest.get_node_light(pos, 0.5) <= 3 and
minetest.get_node_light(random, 0.5) <= 3 then
minetest.set_node(random, {name = node.name})
end
end
chance = 150,
action = function(...)
flowers.mushroom_spread(...)
end,
})
@ -264,7 +277,6 @@ minetest.register_node("flowers:waterlily", {
liquids_pointable = true,
walkable = false,
buildable_to = true,
sunlight_propagates = true,
floodable = true,
groups = {snappy = 3, flower = 1, flammable = 1},
sounds = default.node_sound_leaves_defaults(),
@ -280,12 +292,17 @@ minetest.register_node("flowers:waterlily", {
on_place = function(itemstack, placer, pointed_thing)
local pos = pointed_thing.above
local node = minetest.get_node(pointed_thing.under).name
local def = minetest.registered_nodes[node]
local player_name = placer:get_player_name()
local node = minetest.get_node(pointed_thing.under)
local def = minetest.registered_nodes[node.name]
local player_name = placer and placer:get_player_name() or ""
if def and def.on_rightclick then
return def.on_rightclick(pointed_thing.under, node, placer, itemstack,
pointed_thing)
end
if def and def.liquidtype == "source" and
minetest.get_item_group(node, "water") > 0 then
minetest.get_item_group(node.name, "water") > 0 then
if not minetest.is_protected(pos, player_name) then
minetest.set_node(pos, {name = "flowers:waterlily",
param2 = math.random(0, 3)})

View file

@ -2,8 +2,9 @@
-- Mgv6
--
local function register_mgv6_flower(name)
local function register_mgv6_flower(flower_name)
minetest.register_decoration({
name = "flowers:"..flower_name,
deco_type = "simple",
place_on = {"default:dirt_with_grass"},
sidelen = 16,
@ -15,14 +16,15 @@ local function register_mgv6_flower(name)
octaves = 3,
persist = 0.6
},
y_min = 1,
y_max = 30,
decoration = "flowers:"..name,
y_min = 1,
decoration = "flowers:"..flower_name,
})
end
local function register_mgv6_mushroom(name)
local function register_mgv6_mushroom(mushroom_name)
minetest.register_decoration({
name = "flowers:"..mushroom_name,
deco_type = "simple",
place_on = {"default:dirt_with_grass"},
sidelen = 16,
@ -34,9 +36,9 @@ local function register_mgv6_mushroom(name)
octaves = 3,
persist = 0.6
},
y_min = 1,
y_max = 30,
decoration = "flowers:"..name,
y_min = 1,
decoration = "flowers:"..mushroom_name,
spawn_by = "default:tree",
num_spawn_by = 1,
})
@ -44,7 +46,8 @@ end
local function register_mgv6_waterlily()
minetest.register_decoration({
deco_type = "schematic",
name = "flowers:waterlily",
deco_type = "simple",
place_on = {"default:dirt"},
sidelen = 16,
noise_params = {
@ -55,10 +58,12 @@ local function register_mgv6_waterlily()
octaves = 3,
persist = 0.7
},
y_min = 0,
y_max = 0,
schematic = minetest.get_modpath("flowers").."/schematics/waterlily.mts",
rotation = "random",
y_min = 0,
decoration = "flowers:waterlily",
param2 = 0,
param2_max = 3,
place_offset_y = 1,
})
end
@ -76,13 +81,14 @@ function flowers.register_mgv6_decorations()
register_mgv6_waterlily()
end
-- TODO: figure out why we did commented these in the past
--
-- All other biome API mapgens
--
--[[
local function register_flower(seed, name)
local function register_flower(seed, flower_name)
minetest.register_decoration({
name = "flowers:"..flower_name,
deco_type = "simple",
place_on = {"default:dirt_with_grass"},
sidelen = 16,
@ -94,18 +100,18 @@ local function register_flower(seed, name)
octaves = 3,
persist = 0.6
},
biomes = {"grassland", "deciduous_forest", "coniferous_forest",
"floatland_coniferous_forest"},
y_min = 1,
biomes = {"grassland", "deciduous_forest", "floatland_grassland"},
y_max = 31000,
decoration = "flowers:"..name,
y_min = 1,
decoration = "flowers:"..flower_name,
})
end
local function register_mushroom(name)
local function register_mushroom(mushroom_name)
minetest.register_decoration({
name = "flowers:"..mushroom_name,
deco_type = "simple",
place_on = {"default:dirt_with_grass"},
place_on = {"default:dirt_with_grass", "default:dirt_with_coniferous_litter"},
sidelen = 16,
noise_params = {
offset = 0,
@ -117,15 +123,16 @@ local function register_mushroom(name)
},
biomes = {"deciduous_forest", "coniferous_forest",
"floatland_coniferous_forest"},
y_min = 1,
y_max = 31000,
decoration = "flowers:"..name,
y_min = 1,
decoration = "flowers:"..mushroom_name,
})
end
local function register_waterlily()
minetest.register_decoration({
deco_type = "schematic",
name = "default:waterlily",
deco_type = "simple",
place_on = {"default:dirt"},
sidelen = 16,
noise_params = {
@ -137,10 +144,12 @@ local function register_waterlily()
persist = 0.7
},
biomes = {"rainforest_swamp", "savanna_shore", "deciduous_forest_shore"},
y_min = 0,
y_max = 0,
schematic = minetest.get_modpath("flowers") .. "/schematics/waterlily.mts",
rotation = "random",
y_min = 0,
decoration = "flowers:waterlily",
param2 = 0,
param2_max = 3,
place_offset_y = 1,
})
end
@ -148,24 +157,26 @@ function flowers.register_decorations()
register_flower(436, "rose")
register_flower(19822, "tulip")
register_flower(1220999, "dandelion_yellow")
register_flower(800081, "chrysanthemum_green")
register_flower(36662, "geranium")
register_flower(1133, "viola")
register_flower(73133, "dandelion_white")
register_flower(42, "tulip_black")
register_mushroom("mushroom_brown")
register_mushroom("mushroom_red")
register_waterlily()
end
]]
--
--]]
-- Detect mapgen to select functions
--
local mg_name = minetest.get_mapgen_setting("mg_name")
if mg_name == "v6" then
flowers.register_mgv6_decorations()
else
--else
-- flowers.register_decorations()
end

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 B