Merge pull request 'Nether biomes' (#2328) from nether_biomes into master

Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/2328
Reviewed-by: MysticTempest <mystictempest@noreply.git.minetest.land>
This commit is contained in:
cora 2022-06-19 14:58:23 +00:00
commit 855b18ee30
66 changed files with 1420 additions and 212 deletions

View file

@ -189,6 +189,9 @@ local list_of_all_biomes = {
"MesaBryce", "MesaBryce",
"JungleEdge", "JungleEdge",
"SavannaM", "SavannaM",
"Nether",
"WarpedForest",
"SoulsandValley"
} }
-- count how many mobs are in an area -- count how many mobs are in an area

View file

@ -766,15 +766,32 @@ mcl_mobs:spawn_specific(
"nether", "nether",
"ground", "ground",
{ {
"Nether" "Nether",
"SoulsandValley",
}, },
0, 0,
7, minetest.LIGHT_MAX+1,
30, 30,
27500, 27500,
4, 4,
mcl_vars.mg_nether_min, mcl_vars.mg_nether_min,
mcl_vars.mg_nether_max) mcl_vars.mg_nether_max)
-- Warped Forest spawn (common)
mcl_mobs:spawn_specific(
"mobs_mc:enderman",
"nether",
"ground",
{
"WarpedForest"
},
0,
minetest.LIGHT_MAX+1,
30,
5000,
4,
mcl_vars.mg_nether_min,
mcl_vars.mg_nether_max)
-- spawn eggs -- spawn eggs
mcl_mobs:register_egg("mobs_mc:enderman", S("Enderman"), "mobs_mc_spawn_icon_enderman.png", 0) mcl_mobs:register_egg("mobs_mc:enderman", S("Enderman"), "mobs_mc_spawn_icon_enderman.png", 0)

View file

@ -81,12 +81,14 @@ mcl_mobs:spawn_specific(
"nether", "nether",
"ground", "ground",
{ {
"Nether" "Nether",
"SoulsandValley",
"BasaltDelta",
}, },
0, 0,
minetest.LIGHT_MAX+1, 7,
30, 30,
18000, 72000,
2, 2,
mcl_vars.mg_nether_min, mcl_vars.mg_nether_min,
mcl_vars.mg_nether_max) mcl_vars.mg_nether_max)

View file

@ -302,10 +302,10 @@ mcl_mobs:spawn_specific(
"nether", "nether",
"ground", "ground",
{ {
"Nether" "SoulsandValley",
}, },
0, 0,
7, minetest.LIGHT_MAX+1,
30, 30,
10000, 10000,
3, 3,

View file

@ -402,7 +402,8 @@ mcl_mobs:spawn_specific(
"nether", "nether",
"ground", "ground",
{ {
"Nether" "Nether",
"BasaltDelta",
}, },
0, 0,
minetest.LIGHT_MAX+1, minetest.LIGHT_MAX+1,
@ -418,7 +419,8 @@ mcl_mobs:spawn_specific(
"nether", "nether",
"ground", "ground",
{ {
"Nether" "Nether",
"BasaltDelta",
}, },
0, 0,
minetest.LIGHT_MAX+1, minetest.LIGHT_MAX+1,
@ -433,7 +435,8 @@ mcl_mobs:spawn_specific(
"nether", "nether",
"ground", "ground",
{ {
"Nether" "Nether",
"BasaltDelta",
}, },
0, 0,
minetest.LIGHT_MAX+1, minetest.LIGHT_MAX+1,

View file

@ -118,7 +118,8 @@ mcl_mobs:spawn_specific(
"nether", "nether",
"ground", "ground",
{ {
"Nether" "Nether",
"CrimsonForest",
}, },
0, 0,
minetest.LIGHT_MAX+1, minetest.LIGHT_MAX+1,

View file

@ -146,8 +146,25 @@ mcl_weather.skycolor = {
player:set_stars({visible = false}) player:set_stars({visible = false})
mcl_weather.skycolor.override_day_night_ratio(player, 0.5) mcl_weather.skycolor.override_day_night_ratio(player, 0.5)
elseif dim == "nether" then elseif dim == "nether" then
player:set_sky({ type = "plain", local nether_sky = {
base_color = "#300808", Nether = "#300808",
BasaltDelta = "#685F70",
SoulsandValley = "#1B4745",
CrimsonForest = "#330303",
WarpedForest = "#1A051A"
}
local biometint = nether_sky[minetest.get_biome_name(minetest.get_biome_data(player:get_pos()).biome)]
player:set_sky({
type = "regular",
sky_color = {
day_sky = "#300808",
day_horizon = biometint,
dawn_sky = "#300808",
dawn_horizon = biometint,
night_sky = "#300808",
night_horizon = biometint,
},
clouds = false, clouds = false,
}) })
player:set_sun({visible = false , sunrise_visible = false}) player:set_sun({visible = false , sunrise_visible = false})

View file

@ -323,36 +323,7 @@ for s=1, #specialstones do
end end
if minetest.settings:get_bool("mcl_generate_ores", true) then if minetest.settings:get_bool("mcl_generate_ores", true) then
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_blackstone:blackstone_gilded",
wherein = "mcl_blackstone:blackstone",
clust_scarcity = 4775,
clust_num_ores = 2,
clust_size = 2,
y_min = mcl_vars.mg_nether_min,
y_max = mcl_vars.mg_nether_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_blackstone:nether_gold",
wherein = "mcl_nether:netherrack",
clust_scarcity = 830,
clust_num_ores = 5,
clust_size = 3,
y_min = mcl_vars.mg_nether_min,
y_max = mcl_vars.mg_nether_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_blackstone:nether_gold",
wherein = "mcl_nether:netherrack",
clust_scarcity = 1660,
clust_num_ores = 4,
clust_size = 2,
y_min = mcl_vars.mg_nether_min,
y_max = mcl_vars.mg_nether_max,
})
end end
--]] --]]
--soul torch --soul torch

View file

@ -0,0 +1,485 @@
local modname = minetest.get_current_modname()
local S = minetest.get_translator(modname)
local modpath = minetest.get_modpath(modname)
-- Warped and Crimson fungus
-- by debiankaios
-- adapted for mcl2 by cora
local function generate_warped_tree(pos)
minetest.place_schematic(pos,modpath.."/schematics/warped_fungus_1.mts","random",nil,false,"place_center_x,place_center_z")
end
function generate_crimson_tree(pos)
minetest.place_schematic(pos,modpath.."/schematics/crimson_fungus_1.mts","random",nil,false,"place_center_x,place_center_z")
end
function grow_twisting_vines(pos, moreontop)
local y = pos.y + 1
while not (moreontop == 0) do
if minetest.get_node({x = pos.x, y = y, z = pos.z}).name == "air" then
minetest.set_node({x = pos.x, y = y, z = pos.z}, {name="mcl_crimson:twisting_vines"})
moreontop = moreontop - 1
y = y + 1
elseif minetest.get_node({x = pos.x, y = y, z = pos.z}).name == "mcl_crimson:twisting_vines" then
y = y + 1
else
moreontop = 0
end
end
end
minetest.register_node("mcl_crimson:warped_fungus", {
description = S("Warped Fungus Mushroom"),
drawtype = "plantlike",
tiles = { "farming_warped_fungus.png" },
inventory_image = "farming_warped_fungus.png",
wield_image = "farming_warped_fungus.png",
sunlight_propagates = true,
paramtype = "light",
walkable = false,
groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1},
light_source = 1,
selection_box = {
type = "fixed",
fixed = { -3/16, -0.5, -3/16, 3/16, -2/16, 3/16 },
},
node_placement_prediction = "",
on_rightclick = function(pos, node, pointed_thing, player, itemstack)
if pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then
local nodepos = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z})
if nodepos.name == "mcl_crimson:warped_nylium" or nodepos.name == "mcl_nether:netherrack" then
local random = math.random(1, 5)
if random == 1 then
generate_warped_tree(pos)
end
end
end
end,
_mcl_blast_resistance = 0,
})
minetest.register_node("mcl_crimson:twisting_vines", {
description = S("Twisting Vines"),
drawtype = "plantlike",
tiles = { "twisting_vines_plant.png" },
inventory_image = "twisting_vines.png",
sunlight_propagates = true,
paramtype = "light",
walkable = false,
climbable = true,
buildable_to = true,
groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1},
selection_box = {
type = "fixed",
fixed = { -3/16, -0.5, -3/16, 3/16, 0.5, 3/16 },
},
node_placement_prediction = "",
on_rightclick = function(pos, node, pointed_thing, itemstack)
if pointed_thing:get_wielded_item():get_name() == "mcl_crimson:twisting_vines" then
itemstack:take_item()
grow_twisting_vines(pos, 1)
elseif pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then
itemstack:take_item()
grow_twisting_vines(pos, math.random(1, 3))
end
end,
drop = {
max_items = 1,
items = {
{items = {"mcl_crimson:twisting_vines"}, rarity = 3},
},
},
_mcl_shears_drop = true,
_mcl_silk_touch_drop = true,
_mcl_fortune_drop = {
items = {
{items = {"mcl_crimson:twisting_vines"}, rarity = 3},
},
items = {
{items = {"mcl_crimson:twisting_vines"}, rarity = 1.8181818181818181},
},
"mcl_crimson:twisting_vines",
"mcl_crimson:twisting_vines",
},
_mcl_blast_resistance = 0,
})
minetest.register_node("mcl_crimson:nether_sprouts", {
description = S("Nether Sprouts"),
drawtype = "plantlike",
tiles = { "nether_sprouts.png" },
inventory_image = "nether_sprouts.png",
sunlight_propagates = true,
paramtype = "light",
walkable = false,
buildable_to = true,
groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1},
selection_box = {
type = "fixed",
fixed = { -4/16, -0.5, -4/16, 4/16, 0, 4/16 },
},
node_placement_prediction = "",
drop = "",
_mcl_shears_drop = true,
_mcl_silk_touch_drop = false,
_mcl_blast_resistance = 0,
})
minetest.register_node("mcl_crimson:warped_roots", {
description = S("Warped Roots"),
drawtype = "plantlike",
tiles = { "warped_roots.png" },
inventory_image = "warped_roots.png",
sunlight_propagates = true,
paramtype = "light",
walkable = false,
buildable_to = true,
groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1},
selection_box = {
type = "fixed",
fixed = { -6/16, -0.5, -6/16, 6/16, -4/16, 6/16 },
},
node_placement_prediction = "",
_mcl_silk_touch_drop = false,
_mcl_blast_resistance = 0,
})
minetest.register_node("mcl_crimson:warped_wart_block", {
description = S("Warped Wart Block"),
tiles = {"warped_wart_block.png"},
groups = {handy = 1, hoe = 7, swordy = 1, deco_block = 1},
_mcl_hardness = 2,
})
minetest.register_node("mcl_crimson:shroomlight", {
description = S("Shroomlight"),
tiles = {"shroomlight.png"},
groups = {handy = 1, hoe = 7, swordy = 1, leafdecay = 5, leaves = 1, deco_block = 1},
light_source = minetest.LIGHT_MAX,
_mcl_hardness = 2,
})
minetest.register_node("mcl_crimson:warped_hyphae", {
description = S("Warped Hyphae"),
_doc_items_longdesc = S("The stem of a warped hyphae"),
_doc_items_hidden = false,
tiles = {
"warped_hyphae.png",
"warped_hyphae.png",
"warped_hyphae_side.png",
"warped_hyphae_side.png",
"warped_hyphae_side.png",
"warped_hyphae_side.png",
},
paramtype2 = "facedir",
on_place = mcl_util.rotate_axis,
groups = {handy = 1, axey = 1, tree = 1, building_block = 1, material_wood = 1},
sounds = mcl_sounds.node_sound_wood_defaults(),
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
_mcl_stripped_variant = "mcl_crimson:stripped_warped_hyphae",
})
minetest.register_node("mcl_crimson:warped_nylium", {
description = S("Warped Nylium"),
tiles = {
"warped_nylium.png",
"mcl_nether_netherrack.png",
"mcl_nether_netherrack.png^warped_nylium_side.png",
"mcl_nether_netherrack.png^warped_nylium_side.png",
"mcl_nether_netherrack.png^warped_nylium_side.png",
"mcl_nether_netherrack.png^warped_nylium_side.png",
},
paramtype2 = "facedir",
is_ground_content = true,
drop = "mcl_nether:netherrack",
groups = {pickaxey=1, building_block=1, material_stone=1},
_mcl_hardness = 0.4,
_mcl_blast_resistance = 0.4,
_mcl_silk_touch_drop = true,
})
--Stem bark, stripped stem and bark
minetest.register_node("mcl_crimson:warped_hyphae_bark", {
description = S("Warped Hyphae Bark"),
_doc_items_longdesc = S("This is a decorative block surrounded by the bark of an hyphae."),
tiles = {"warped_hyphae_side.png"},
paramtype2 = "facedir",
on_place = mcl_util.rotate_axis,
groups = {handy = 1, axey = 1, bark = 1, building_block = 1, material_wood = 1},
sounds = mcl_sounds.node_sound_wood_defaults(),
is_ground_content = false,
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
_mcl_stripped_variant = "mcl_crimson:stripped_warped_hyphae_bark",
})
minetest.register_craft({
output = "mcl_crimson:warped_hyphae_bark 3",
recipe = {
{ "mcl_crimson:warped_hyphae", "mcl_crimson:warped_hyphae" },
{ "mcl_crimson:warped_hyphae", "mcl_crimson:warped_hyphae" },
},
})
minetest.register_node("mcl_crimson:stripped_warped_hyphae", {
description = S("Stripped warped hyphae"),
_doc_items_longdesc = S("The stripped hyphae of a warped fungus"),
_doc_items_hidden = false,
tiles = {"warped_stem_stripped_top.png", "warped_stem_stripped_top.png", "warped_stem_stripped_side.png"},
paramtype2 = "facedir",
on_place = mcl_util.rotate_axis,
groups = {handy = 1, axey = 1, tree = 1, building_block = 1, material_wood = 1},
sounds = mcl_sounds.node_sound_wood_defaults(),
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
})
minetest.register_node("mcl_crimson:stripped_warped_hyphae_bark", {
description = S("Stripped warped hyphae bark"),
_doc_items_longdesc = S("The stripped hyphae bark of a warped fungus"),
tiles = {"crimson_stem_stripped_side.png"},
paramtype2 = "facedir",
on_place = mcl_util.rotate_axis,
groups = {handy = 1, axey = 1, bark = 1, building_block = 1, material_wood = 1},
sounds = mcl_sounds.node_sound_wood_defaults(),
is_ground_content = false,
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
})
minetest.register_craft({
output = "mcl_crimson:stripped_warped_hyphae_bark 3",
recipe = {
{ "mcl_crimson:stripped_warped_hyphae", "mcl_crimson:stripped_warped_hyphae" },
{ "mcl_crimson:stripped_warped_hyphae", "mcl_crimson:stripped_warped_hyphae" },
},
})
minetest.register_node("mcl_crimson:warped_hyphae_wood", {
description = S("Warped Hyphae Wood"),
tiles = {"warped_hyphae_wood.png"},
groups = {handy = 5,axey = 1, flammable = 3, wood=1,building_block = 1, material_wood = 1, fire_encouragement = 5, fire_flammability = 20},
paramtype2 = "facedir",
_mcl_hardness = 2,
})
mcl_stairs.register_stair_and_slab_simple("warped_hyphae_wood", "mcl_crimson:warped_hyphae_wood", S("Warped Stair"), S("Warped Slab"), S("Double Warped Slab"))
minetest.register_craft({
output = "mcl_crimson:warped_hyphae_wood 4",
recipe = {
{"mcl_crimson:warped_hyphae"},
},
})
minetest.register_craft({
output = "mcl_crimson:warped_nylium 2",
recipe = {
{"mcl_crimson:warped_wart_block"},
{"mcl_nether:netherrack"},
},
})
minetest.register_abm({
label = "mcl_crimson:warped_fungus",
nodenames = {"mcl_crimson:warped_fungus"},
interval = 11,
chance = 128,
action = function(pos)
local nodepos = minetest.get_node(vector.offset(pos, 0, -1, 0))
if nodepos.name == "mcl_crimson:warped_nylium" or nodepos.name == "mcl_nether:netherrack" then
if pos.y < -28400 then
generate_warped_tree(pos)
end
end
end
})
minetest.register_node("mcl_crimson:crimson_fungus", {
description = S("Crimson Fungus Mushroom"),
drawtype = "plantlike",
tiles = { "farming_crimson_fungus.png" },
inventory_image = "farming_crimson_fungus.png",
wield_image = "farming_crimson_fungus.png",
sunlight_propagates = true,
paramtype = "light",
walkable = false,
groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1},
light_source = 1,
selection_box = {
type = "fixed",
fixed = { -3/16, -0.5, -3/16, 3/16, -2/16, 3/16 },
},
node_placement_prediction = "",
on_rightclick = function(pos, node, pointed_thing, player)
if pointed_thing:get_wielded_item():get_name() == "mcl_dye:white" then
local nodepos = minetest.get_node(vector.offset(pos, 0, -1, 0))
if nodepos.name == "mcl_crimson:crimson_nylium" or nodepos.name == "mcl_nether:netherrack" then
local random = math.random(1, 5)
if random == 1 then
generate_crimson_tree(pos)
end
end
end
end,
_mcl_blast_resistance = 0,
})
minetest.register_node("mcl_crimson:crimson_roots", {
description = S("Crimson Roots"),
drawtype = "plantlike",
tiles = { "crimson_roots.png" },
inventory_image = "crimson_roots.png",
sunlight_propagates = true,
paramtype = "light",
walkable = false,
buildable_to = true,
groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1},
selection_box = {
type = "fixed",
fixed = { -6/16, -0.5, -6/16, 6/16, -4/16, 6/16 },
},
node_placement_prediction = "",
_mcl_silk_touch_drop = false,
_mcl_blast_resistance = 0,
})
minetest.register_node("mcl_crimson:crimson_hyphae", {
description = S("Crimson Hyphae"),
_doc_items_longdesc = S("The stem of a crimson hyphae"),
_doc_items_hidden = false,
tiles = {
"crimson_hyphae.png",
"crimson_hyphae.png",
"crimson_hyphae_side.png",
"crimson_hyphae_side.png",
"crimson_hyphae_side.png",
"crimson_hyphae_side.png",
},
paramtype2 = "facedir",
on_place = mcl_util.rotate_axis,
groups = {handy = 1, axey = 1, tree = 1, building_block = 1, material_wood = 1},
sounds = mcl_sounds.node_sound_wood_defaults(),
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
_mcl_stripped_variant = "mcl_crimson:stripped_crimson_hyphae",
})
--Stem bark, stripped stem and bark
minetest.register_node("mcl_crimson:crimson_hyphae_bark", {
description = S("Crimson Hyphae Bark"),
_doc_items_longdesc = S("This is a decorative block surrounded by the bark of an hyphae."),
tiles = {"crimson_hyphae_side.png"},
paramtype2 = "facedir",
on_place = mcl_util.rotate_axis,
groups = {handy = 1, axey = 1, bark = 1, building_block = 1, material_wood = 1},
sounds = mcl_sounds.node_sound_wood_defaults(),
is_ground_content = false,
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
_mcl_stripped_variant = "mcl_crimson:stripped_crimson_hyphae_bark",
})
minetest.register_craft({
output = "mcl_crimson:crimson_hyphae_bark 3",
recipe = {
{ "mcl_crimson:crimson_hyphae", "mcl_crimson:crimson_hyphae" },
{ "mcl_crimson:crimson_hyphae", "mcl_crimson:crimson_hyphae" },
},
})
minetest.register_node("mcl_crimson:stripped_crimson_hyphae", {
description = S("Stripped Crimson Hyphae"),
_doc_items_longdesc = S("The stripped stem of a crimson hyphae"),
_doc_items_hidden = false,
tiles = {"crimson_stem_stripped_top.png", "crimson_stem_stripped_top.png", "crimson_stem_stripped_side.png"},
paramtype2 = "facedir",
on_place = mcl_util.rotate_axis,
groups = {handy = 1, axey = 1, tree = 1, building_block = 1, material_wood = 1},
sounds = mcl_sounds.node_sound_wood_defaults(),
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
})
minetest.register_node("mcl_crimson:stripped_crimson_hyphae_bark", {
description = S("Stripped Crimson Hyphae Bark"),
_doc_items_longdesc = S("The stripped wood of a crimson hyphae"),
tiles = {"crimson_stem_stripped_side.png"},
paramtype2 = "facedir",
on_place = mcl_util.rotate_axis,
groups = {handy = 1, axey = 1, bark = 1, building_block = 1, material_wood = 1},
sounds = mcl_sounds.node_sound_wood_defaults(),
is_ground_content = false,
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
})
minetest.register_craft({
output = "mcl_crimson:stripped_crimson_hyphae_bark 3",
recipe = {
{ "mcl_crimson:stripped_crimson_hyphae", "mcl_crimson:stripped_crimson_hyphae" },
{ "mcl_crimson:stripped_crimson_hyphae", "mcl_crimson:stripped_crimson_hyphae" },
},
})
minetest.register_node("mcl_crimson:crimson_hyphae_wood", {
description = S("Crimson Hyphae Wood"),
tiles = {"crimson_hyphae_wood.png"},
groups = {handy = 5, axey = 1, wood = 1, building_block = 1, material_wood = 1},
paramtype2 = "facedir",
_mcl_hardness = 2,
})
minetest.register_node("mcl_crimson:crimson_nylium", {
description = S("Crimson Nylium"),
tiles = {
"crimson_nylium.png",
"mcl_nether_netherrack.png",
"mcl_nether_netherrack.png^crimson_nylium_side.png",
"mcl_nether_netherrack.png^crimson_nylium_side.png",
"mcl_nether_netherrack.png^crimson_nylium_side.png",
"mcl_nether_netherrack.png^crimson_nylium_side.png",
},
groups = {pickaxey = 1, building_block = 1, material_stone = 1},
paramtype2 = "facedir",
is_ground_content = true,
drop = "mcl_nether:netherrack",
_mcl_hardness = 0.4,
_mcl_blast_resistance = 0.4,
_mcl_silk_touch_drop = true,
})
minetest.register_craft({
output = "mcl_crimson:crimson_hyphae_wood 4",
recipe = {
{"mcl_crimson:crimson_hyphae"},
},
})
minetest.register_craft({
output = "mcl_crimson:crimson_nylium 2",
recipe = {
{"mcl_nether:nether_wart"},
{"mcl_nether:netherrack"},
},
})
mcl_stairs.register_stair_and_slab_simple("crimson_hyphae_wood", "mcl_crimson:crimson_hyphae_wood", "Crimson Stair", "Crimson Slab", "Double Crimson Slab")
minetest.register_abm({
label = "mcl_crimson:crimson_fungus",
nodenames = {"mcl_crimson:crimson_fungus"},
interval = 11,
chance = 128,
action = function(pos)
local nodepos = minetest.get_node(vector.offset(pos, 0, -1, 0))
if nodepos.name == "mcl_crimson:crimson_nylium" or nodepos.name == "mcl_nether:netherrack" then
if pos.y < -28400 then
generate_crimson_tree(pos)
end
end
end
})

View file

@ -0,0 +1,24 @@
# textdomain: mcl_crimson
Warped Fungus Mushroom=Wirrpilz
Twisting Vines=Zwirbelranken
Nether Sprouts=Nethersprossen
Warped Roots=Wirrwurzeln
Warped Wart Block=Wirrwarzenblock
Shroomlight=Pilzlicht
Warped Hyphae=Wirrhyphe
Warped Nylium=Wirr-Nezel
Warped Checknode - only to check!=Wirr Checkblock - Nur zum checken!
Warped Hyphae Wood=Wirrhyphen Holz
Warped Stair=Wirrtreppe
Warped Slab=Wirrstufe
Double Warped Slab=Doppelte Wirrstufe
Crimson Fungus Mushroom=Karmesinpilz
Crimson Roots=Karmesinwurzeln
Crimson Hyphae=Karmesinhyphe
Crimson Hyphae Wood=Karmesinhyphenholz
Crimson Stair=Karmesintreppe
Crimson Slab=Karmesinstufe
Double Crimson Slab=Doppelte Karmesinstufe
Crimson Nylium=Karmesin-Nezel
Crimson Checknode - only to check!=Karmesin Checkblock - Nur zum checken!

View file

@ -0,0 +1,23 @@
# textdomain: mcl_crimson
Warped Fungus Mushroom=Champignon tordu
Twisting Vines=Liane tordue
Nether Sprouts=Racines du nether
Warped Roots=Racines tordues
Warped Wart Block=Bloc de verrues tordu
Shroomlight=Champilampe
Warped Hyphae=Tige tordue
Warped Nylium=Nylium tordu
Warped Checknode - only to check!=Bloc de vérification tordu - seulement pour vérifier !
Warped Hyphae Wood=Planches tordues
Warped Stair=Escalier tordu
Warped Slab=Dalle tordue
Crimson Fungus Mushroom=Champignon écarlate
Crimson Roots=Racines écarlates
Crimson Hyphae=Tige écarlate
Crimson Hyphae Wood=Planches écarlates
Crimson Stair=Escalier écarlate
Crimson Slab=Dalle écarlate
Double Crimson Slab=Dalle double écarlate
Crimson Nylium=Nylium écarlate
Crimson Checknode - only to check!=Bloc de vérification écarlate - seulement pour vérifier !

View file

@ -0,0 +1,23 @@
# textdomain: mcl_crimson
Warped Fungus Mushroom=
Twisting Vines=
Nether Sprouts=
Warped Roots=
Warped Wart Block=
Shroomlight=
Warped Hyphae=
Warped Nylium=
Warped Checknode - only to check!=
Warped Hyphae Wood=
Warped Stair=
Warped Slab=
Crimson Fungus Mushroom=
Crimson Roots=
Crimson Hyphae=
Crimson Hyphae Wood=
Crimson Stair=
Crimson Slab=
Double Crimson Slab=
Crimson Nylium=
Crimson Checknode - only to check!=

View file

@ -0,0 +1,4 @@
name = mcl_crimson
author = debiankaios
depends = mcl_stairs, mobs_mc, mcl_util

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 525 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 446 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 565 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 475 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 581 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 479 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 461 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 426 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 402 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View file

@ -9,6 +9,8 @@ local generate_fallen_logs = minetest.settings:get_bool("mcl_generate_fallen_log
local mod_mcl_structures = minetest.get_modpath("mcl_structures") local mod_mcl_structures = minetest.get_modpath("mcl_structures")
local mod_mcl_core = minetest.get_modpath("mcl_core") local mod_mcl_core = minetest.get_modpath("mcl_core")
local mod_mcl_mushrooms = minetest.get_modpath("mcl_mushrooms") local mod_mcl_mushrooms = minetest.get_modpath("mcl_mushrooms")
local mod_mcl_crimson = minetest.get_modpath("mcl_crimson")
local mod_mcl_blackstone = minetest.get_modpath("mcl_blackstone")
-- Jungle bush schematic. In PC/Java Edition it's Jungle Wood + Oak Leaves -- Jungle bush schematic. In PC/Java Edition it's Jungle Wood + Oak Leaves
local jungle_bush_schematic = mod_mcl_core.."/schematics/mcl_core_jungle_bush_oak_leaves.mts" local jungle_bush_schematic = mod_mcl_core.."/schematics/mcl_core_jungle_bush_oak_leaves.mts"
@ -1490,8 +1492,7 @@ local function register_dimension_biomes()
node_river_water = "air", node_river_water = "air",
node_cave_liquid = "air", node_cave_liquid = "air",
y_min = mcl_vars.mg_nether_min, y_min = mcl_vars.mg_nether_min,
-- FIXME: For some reason the Nether stops generating early if this constant is not added.
-- Figure out why.
y_max = mcl_vars.mg_nether_max + 80, y_max = mcl_vars.mg_nether_max + 80,
heat_point = 100, heat_point = 100,
humidity_point = 0, humidity_point = 0,
@ -1499,6 +1500,175 @@ local function register_dimension_biomes()
_mcl_palette_index = 17, _mcl_palette_index = 17,
}) })
minetest.register_decoration({
deco_type = "simple",
place_on = {"mcl_nether:netherrack","mcl_nether:glowstone","mcl_blackstone:nether_gold","mcl_nether:quartz_ore","mcl_core:gravel","mcl_nether:soul_sand"},
sidelen = 16,
fill_ratio = 10,
biomes = { "Nether" },
y_min = -31000,
y_max = mcl_vars.mg_nether_max,
decoration = "mcl_nether:netherrack",
flags = "all_floors",
param2 = 0,
})
minetest.register_biome({
name = "SoulsandValley",
node_filler = "mcl_nether:netherrack",
node_stone = "mcl_nether:netherrack",
node_top = "mcl_blackstone:soul_soil",
node_water = "air",
node_river_water = "air",
node_cave_liquid = "air",
y_min = mcl_vars.mg_nether_min,
y_max = mcl_vars.mg_nether_max + 80,
heat_point = 77,
humidity_point = 33,
_mcl_biome_type = "hot",
_mcl_palette_index = 17,
})
minetest.register_decoration({
deco_type = "simple",
place_on = {"mcl_nether:netherrack","mcl_nether:glowstone"},
sidelen = 16,
fill_ratio = 10,
biomes = { "SoulsandValley" },
y_min = -31000,
y_max = mcl_vars.mg_nether_max,
decoration = "mcl_blackstone:soul_soil",
flags = "all_floors, all_ceilings",
param2 = 0,
})
minetest.register_ore({
ore_type = "blob",
ore = "mcl_nether:soul_sand",
wherein = { "mcl_nether:netherrack", "mcl_blackstone:soul_soil" },
clust_scarcity = 100,
clust_num_ores = 225,
clust_size = 15,
biomes = { "SoulsandValley" },
y_min = mcl_vars.mg_nether_min,
y_max = mcl_vars.mg_nether_max + 80,
noise_params = {
offset = 0,
scale = 1,
spread = { x = 250, y = 250, z = 250 },
seed = 12345,
octaves = 3,
persist = 0.6,
lacunarity = 2,
flags = "defaults",
}
})
minetest.register_biome({
name = "CrimsonForest",
node_filler = "mcl_nether:netherrack",
node_stone = "mcl_nether:netherrack",
node_top = "mcl_crimson:crimson_nylium",
node_water = "air",
node_river_water = "air",
node_cave_liquid = "air",
y_min = mcl_vars.mg_nether_min,
y_max = mcl_vars.mg_nether_max + 80,
heat_point = 60,
humidity_point = 47,
_mcl_biome_type = "hot",
_mcl_palette_index = 17,
})
minetest.register_decoration({
deco_type = "simple",
place_on = {"mcl_nether:netherrack","mcl_nether:glowstone","mcl_blackstone:nether_gold","mcl_nether:quartz_ore","mcl_core:gravel","mcl_nether:soul_sand"},
sidelen = 16,
fill_ratio = 10,
biomes = { "CrimsonForest" },
y_min = -31000,
y_max = mcl_vars.mg_nether_max,
decoration = "mcl_crimson:crimson_nylium",
flags = "all_floors",
param2 = 0,
})
minetest.register_biome({
name = "WarpedForest",
node_filler = "mcl_nether:netherrack",
node_stone = "mcl_nether:netherrack",
node_top = "mcl_crimson:warped_nylium",
node_water = "air",
node_river_water = "air",
node_cave_liquid = "air",
y_min = mcl_vars.mg_nether_min,
y_max = mcl_vars.mg_nether_max + 80,
heat_point = 37,
humidity_point = 70,
_mcl_biome_type = "hot",
_mcl_palette_index = 17,
})
minetest.register_decoration({
deco_type = "simple",
place_on = {"mcl_nether:netherrack","mcl_nether:glowstone","mcl_blackstone:nether_gold","mcl_nether:quartz_ore","mcl_core:gravel","mcl_nether:soul_sand"},
sidelen = 16,
fill_ratio = 10,
biomes = { "WarpedForest" },
y_min = -31000,
y_max = mcl_vars.mg_nether_max,
decoration = "mcl_crimson:warped_nylium",
flags = "all_floors",
param2 = 0,
})
minetest.register_biome({
name = "BasaltDelta",
node_filler = "mcl_nether:netherrack",
node_stone = "mcl_nether:netherrack",
node_top = "mcl_blackstone:basalt",
node_water = "air",
node_river_water = "air",
node_cave_liquid = "air",
y_min = mcl_vars.mg_nether_min,
y_max = mcl_vars.mg_nether_max + 80,
heat_point = 27,
humidity_point = 80,
_mcl_biome_type = "hot",
_mcl_palette_index = 17,
})
minetest.register_ore({
ore_type = "blob",
ore = "mcl_blackstone:blackstone",
wherein = {"mcl_nether:netherrack","mcl_nether:glowstone","mcl_core:gravel","mcl_nether:soul_sand"},
clust_scarcity = 100,
clust_num_ores = 400,
clust_size = 20,
biomes = { "BasaltDelta" },
y_min = mcl_vars.mg_nether_min,
y_max = mcl_vars.mg_nether_max + 80,
noise_params = {
offset = 0,
scale = 1,
spread = { x = 250, y = 250, z = 250 },
seed = 12345,
octaves = 3,
persist = 0.6,
lacunarity = 2,
flags = "defaults",
}
})
minetest.register_decoration({
deco_type = "simple",
place_on = {"mcl_nether:netherrack","mcl_nether:glowstone","mcl_blackstone:nether_gold","mcl_nether:quartz_ore","mcl_core:gravel","mcl_nether:soul_sand","mcl_blackstone:blackstone"},
sidelen = 16,
fill_ratio = 10,
biomes = { "BasaltDelta" },
y_min = -31000,
y_max = mcl_vars.mg_nether_max,
decoration = "mcl_blackstone:basalt",
flags = "all_floors",
param2 = 0,
})
--[[ THE END ]] --[[ THE END ]]
minetest.register_biome({ minetest.register_biome({
name = "End", name = "End",
@ -1581,6 +1751,39 @@ local function register_biome_ores()
"MesaPlateauFM", "MesaPlateauFM_sandlevel", "MesaPlateauFM_ocean", }, "MesaPlateauFM", "MesaPlateauFM_sandlevel", "MesaPlateauFM_ocean", },
}) })
end end
--nether gold
if mg_name ~= "v6" then
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_blackstone:blackstone_gilded",
wherein = "mcl_blackstone:blackstone",
clust_scarcity = 4775,
clust_num_ores = 2,
clust_size = 2,
y_min = mcl_vars.mg_nether_min,
y_max = mcl_vars.mg_nether_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_blackstone:nether_gold",
wherein = "mcl_nether:netherrack",
clust_scarcity = 830,
clust_num_ores = 5,
clust_size = 3,
y_min = mcl_vars.mg_nether_min,
y_max = mcl_vars.mg_nether_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_blackstone:nether_gold",
wherein = "mcl_nether:netherrack",
clust_scarcity = 1660,
clust_num_ores = 4,
clust_size = 2,
y_min = mcl_vars.mg_nether_min,
y_max = mcl_vars.mg_nether_max,
})
end
end end
-- Register “fake” ores directly related to the biomes. These are mostly low-level landscape alternations -- Register “fake” ores directly related to the biomes. These are mostly low-level landscape alternations
@ -3911,7 +4114,265 @@ end
-- Decorations in non-Overworld dimensions -- Decorations in non-Overworld dimensions
local function register_dimension_decorations() local function register_dimension_decorations()
--[[ NETHER ]] --[[ NETHER ]]
-- TODO: Nether --NETHER WASTES (Nether)
minetest.register_decoration({
deco_type = "simple",
place_on = {"mcl_nether:netherrack","mcl_nether:magma"},
sidelen = 16,
fill_ratio = 0.04,
biomes = {"Nether"},
y_min = mcl_vars.mg_lava_nether_max + 1,
y_max = mcl_vars.mg_nether_max - 1,
flags = "all_floors",
decoration = "mcl_fire:eternal_fire",
})
minetest.register_decoration({
deco_type = "simple",
place_on = {"mcl_nether:netherrack"},
sidelen = 16,
fill_ratio = 0.013,
biomes = {"Nether"},
y_min = mcl_vars.mg_lava_nether_max + 1,
y_max = mcl_vars.mg_nether_max - 1,
flags = "all_floors",
decoration = "mcl_mushrooms:mushroom_brown",
})
minetest.register_decoration({
deco_type = "simple",
place_on = {"mcl_nether:netherrack"},
sidelen = 16,
fill_ratio = 0.012,
biomes = {"Nether"},
y_min = mcl_vars.mg_lava_nether_max + 1,
y_max = mcl_vars.mg_nether_max - 1,
flags = "all_floors",
decoration = "mcl_mushrooms:mushroom_red",
})
minetest.register_decoration({
deco_type = "simple",
place_on = {"mcl_nether:soul_sand"},
sidelen = 16,
fill_ratio = 0.0032,
biomes = {"Nether","SoulsandValley"},
y_min = mcl_vars.mg_lava_nether_max + 1,
y_max = mcl_vars.mg_nether_max - 1,
flags = "all_floors",
decoration = "mcl_nether:nether_wart",
})
-- WARPED FOREST
minetest.register_decoration({
deco_type = "simple",
place_on = {"mcl_crimson:warped_nylium"},
sidelen = 16,
fill_ratio = 0.02,
biomes = {"WarpedForest"},
y_min = mcl_vars.mg_lava_nether_max + 1,
y_max = mcl_vars.mg_nether_max - 10,
flags = "all_floors",
decoration = "mcl_crimson:warped_fungus",
})
minetest.register_decoration({
deco_type = "schematic",
name = "mcl_biomes:warped_tree1",
place_on = {"mcl_crimson:warped_nylium"},
sidelen = 16,
fill_ratio = 0.007,
biomes = {"WarpedForest"},
y_min = mcl_vars.mg_lava_nether_max + 1,
y_max = mcl_vars.mg_nether_max - 15,
flags = "all_floors, place_center_x, place_center_z",
schematic = mod_mcl_crimson.."/schematics/warped_fungus_1.mts",
size = {x = 5, y = 11, z = 5},
rotation = "random",
})
minetest.register_decoration({
deco_type = "schematic",
name = "mcl_biomes:warped_tree2",
place_on = {"mcl_crimson:warped_nylium"},
sidelen = 16,
fill_ratio = 0.005,
biomes = {"WarpedForest"},
y_min = mcl_vars.mg_lava_nether_max + 1,
y_max = mcl_vars.mg_nether_max - 10,
flags = "all_floors, place_center_x, place_center_z",
schematic = mod_mcl_crimson.."/schematics/warped_fungus_2.mts",
size = {x = 5, y = 6, z = 5},
rotation = "random",
})
minetest.register_decoration({
deco_type = "schematic",
name = "mcl_biomes:warped_tree3",
place_on = {"mcl_crimson:warped_nylium"},
sidelen = 16,
fill_ratio = 0.003,
biomes = {"WarpedForest"},
y_min = mcl_vars.mg_lava_nether_max + 1,
y_max = mcl_vars.mg_nether_max - 14,
flags = "all_floors, place_center_x, place_center_z",
schematic = mod_mcl_crimson.."/schematics/warped_fungus_3.mts",
size = {x = 5, y = 12, z = 5},
rotation = "random",
})
minetest.register_decoration({
deco_type = "simple",
place_on = {"mcl_crimson:warped_nylium","mcl_crimson:twisting_vines"},
sidelen = 16,
fill_ratio = 0.012,
biomes = {"WarpedForest"},
y_min = mcl_vars.mg_lava_nether_max + 1,
flags = "all_floors",
height = 2,
height_max = 8,
decoration = "mcl_crimson:twisting_vines",
})
minetest.register_decoration({
deco_type = "simple",
place_on = {"mcl_crimson:warped_nylium"},
sidelen = 16,
fill_ratio = 0.0812,
biomes = {"WarpedForest"},
y_min = mcl_vars.mg_lava_nether_max + 1,
flags = "all_floors",
max_height = 5,
decoration = "mcl_crimson:warped_roots",
})
minetest.register_decoration({
deco_type = "simple",
place_on = {"mcl_crimson:crimson_nylium"},
sidelen = 16,
fill_ratio = 0.052,
biomes = {"WarpedForest"},
y_min = mcl_vars.mg_lava_nether_max + 1,
flags = "all_floors",
decoration = "mcl_crimson:nether_sprouts",
})
-- CRIMSON FOREST
minetest.register_decoration({
deco_type = "simple",
place_on = {"mcl_crimson:crimson_nylium"},
sidelen = 16,
fill_ratio = 0.02,
biomes = {"CrimsonForest"},
y_min = mcl_vars.mg_lava_nether_max + 1,
y_max = mcl_vars.mg_lava_nether_max - 10,
flags = "all_floors",
decoration = "mcl_crimson:crimson_fungus",
})
minetest.register_decoration({
deco_type = "schematic",
name = "mcl_biomes:crimson_tree",
place_on = {"mcl_crimson:crimson_nylium"},
sidelen = 16,
fill_ratio = 0.008,
biomes = {"CrimsonForest"},
y_min = mcl_vars.mg_lava_nether_max + 1,
y_max = mcl_vars.mg_nether_max - 10,
flags = "all_floors, place_center_x, place_center_z",
schematic = mod_mcl_crimson.."/schematics/crimson_fungus_1.mts",
size = {x = 5, y = 8, z = 5},
rotation = "random",
})
minetest.register_decoration({
deco_type = "schematic",
name = "mcl_biomes:crimson_tree2",
place_on = {"mcl_crimson:crimson_nylium"},
sidelen = 16,
fill_ratio = 0.006,
biomes = {"CrimsonForest"},
y_min = mcl_vars.mg_lava_nether_max + 1,
y_max = mcl_vars.mg_nether_max - 15,
flags = "all_floors, place_center_x, place_center_z",
schematic = mod_mcl_crimson.."/schematics/crimson_fungus_2.mts",
size = {x = 5, y = 12, z = 5},
rotation = "random",
})
minetest.register_decoration({
deco_type = "schematic",
name = "mcl_biomes:crimson_tree3",
place_on = {"mcl_crimson:crimson_nylium"},
sidelen = 16,
fill_ratio = 0.004,
biomes = {"CrimsonForest"},
y_min = mcl_vars.mg_lava_nether_max + 1,
y_max = mcl_vars.mg_nether_max - 20,
flags = "all_floors, place_center_x, place_center_z",
schematic = mod_mcl_crimson.."/schematics/crimson_fungus_3.mts",
size = {x = 7, y = 13, z = 7},
rotation = "random",
})
minetest.register_decoration({
deco_type = "simple",
place_on = {"mcl_crimson:crimson_nylium"},
sidelen = 16,
fill_ratio = 0.082,
biomes = {"CrimsonForest"},
y_min = mcl_vars.mg_lava_nether_max + 1,
flags = "all_floors",
max_height = 5,
decoration = "mcl_crimson:crimson_roots",
})
--SOULSAND VALLEY
minetest.register_decoration({
deco_type = "simple",
place_on = {"mcl_blackstone:soul_soil","mcl_nether:soul_sand"},
sidelen = 16,
fill_ratio = 0.062,
biomes = {"SoulsandValley"},
y_min = mcl_vars.mg_lava_nether_max + 1,
flags = "all_floors",
max_height = 5,
decoration = "mcl_blackstone:soul_fire",
})
minetest.register_decoration({
deco_type = "schematic",
place_on = {"mcl_blackstone:soul_soil","mcl_nether:soulsand"},
sidelen = 16,
fill_ratio = 0.000212,
biomes = {"SoulsandValley"},
y_min = mcl_vars.mg_lava_nether_max + 1,
flags = "all_floors, place_center_x, place_center_z",
schematic = mod_mcl_blackstone.."/schematics/mcl_blackstone_nether_fossil_1.mts",
size = {x = 5, y = 8, z = 5},
rotation = "random",
})
minetest.register_decoration({
deco_type = "schematic",
place_on = {"mcl_blackstone:soul_soil","mcl_nether:soulsand"},
sidelen = 16,
fill_ratio = 0.0002233,
biomes = {"SoulsandValley"},
y_min = mcl_vars.mg_lava_nether_max + 1,
flags = "all_floors, place_center_x, place_center_z",
schematic = mod_mcl_blackstone.."/schematics/mcl_blackstone_nether_fossil_2.mts",
size = {x = 5, y = 8, z = 5},
rotation = "random",
})
minetest.register_decoration({
deco_type = "schematic",
place_on = {"mcl_blackstone:soul_soil","mcl_nether:soulsand"},
sidelen = 16,
fill_ratio = 0.000225,
biomes = {"SoulsandValley"},
y_min = mcl_vars.mg_lava_nether_max + 1,
flags = "all_floors, place_center_x, place_center_z",
schematic = mod_mcl_blackstone.."/schematics/mcl_blackstone_nether_fossil_3.mts",
size = {x = 5, y = 8, z = 5},
rotation = "random",
})
minetest.register_decoration({
deco_type = "schematic",
place_on = {"mcl_blackstone:soul_soil","mcl_nether:soulsand"},
sidelen = 16,
fill_ratio = 0.00022323,
biomes = {"SoulsandValley"},
y_min = mcl_vars.mg_lava_nether_max + 1,
flags = "all_floors, place_center_x, place_center_z",
schematic = mod_mcl_blackstone.."/schematics/mcl_blackstone_nether_fossil_4.mts",
size = {x = 5, y = 8, z = 5},
rotation = "random",
})
--[[ THE END ]] --[[ THE END ]]
@ -3975,10 +4436,21 @@ if mg_name ~= "singlenode" then
-- Overworld decorations for v6 are handled in mcl_mapgen_core -- Overworld decorations for v6 are handled in mcl_mapgen_core
if deco_id_chorus_plant then local deco_ids_fungus ={
minetest.get_decoration_id("mcl_biomes:crimson_tree1"),
minetest.get_decoration_id("mcl_biomes:crimson_tree2"),
minetest.get_decoration_id("mcl_biomes:crimson_tree3"),
minetest.get_decoration_id("mcl_biomes:warped_tree1"),
minetest.get_decoration_id("mcl_biomes:warped_tree2"),
minetest.get_decoration_id("mcl_biomes:warped_tree3")
}
for _,f in pairs(deco_ids_fungus) do
minetest.set_gen_notify({decoration=true}, { f })
end
if deco_id_chorus_plant or deco_id_crimson_tree or deco_id_warped_tree then
mcl_mapgen_core.register_generator("chorus_grow", nil, function(minp, maxp, blockseed) mcl_mapgen_core.register_generator("chorus_grow", nil, function(minp, maxp, blockseed)
if minp.y > -26900 then return end
local gennotify = minetest.get_mapgen_object("gennotify") local gennotify = minetest.get_mapgen_object("gennotify")
--local poslist = {}
local pr = PseudoRandom(blockseed + 14) local pr = PseudoRandom(blockseed + 14)
for _, pos in ipairs(gennotify["decoration#"..deco_id_chorus_plant] or {}) do for _, pos in ipairs(gennotify["decoration#"..deco_id_chorus_plant] or {}) do
local x, y, z = pos.x, pos.y, pos.z local x, y, z = pos.x, pos.y, pos.z
@ -3990,8 +4462,13 @@ if mg_name ~= "singlenode" then
end end
end end
end end
if minp.y > mcl_vars.mg_nether_max then return end
for _,f in pairs(deco_ids_fungus) do
for _, pos in ipairs(gennotify["decoration#"..f] or {}) do
minetest.fix_light(vector.offset(pos,-8,-8,-8),vector.offset(pos,8,8,8))
end
end
end) end)
end end
end end

View file

@ -1,4 +1,4 @@
name = mcl_biomes name = mcl_biomes
author = maikerumine author = maikerumine
description = Adds the various biomes and biome-related things for non-v6 map generators. description = Adds the various biomes and biome-related things for non-v6 map generators.
depends = mcl_init, mcl_mapgen_core, mcl_core, mcl_worlds, mcl_farming, mcl_flowers, mcl_end, mcl_ocean depends = mcl_init, mcl_mapgen_core, mcl_core, mcl_worlds, mcl_farming, mcl_flowers, mcl_end, mcl_ocean, mcl_crimson, mcl_blackstone

View file

@ -76,10 +76,8 @@ mcl_structures.register_structure("geode",{
flags = "absvalue", flags = "absvalue",
}, },
flags = "place_center_x, place_center_z, force_placement", flags = "place_center_x, place_center_z, force_placement",
biomes = ocean_biomes,
y_max = -24, y_max = -24,
y_min = mcl_vars.mg_overworld_min, y_min = mcl_vars.mg_overworld_min,
filenames = schems,
y_offset = function(pr) return pr:next(-4,-2) end, y_offset = function(pr) return pr:next(-4,-2) end,
place_func = function(pos,def,pr) place_func = function(pos,def,pr)
local p = vector.new(pos.x + pr:next(-30,30),pos.y,pos.z + pr:next(-30,30)) local p = vector.new(pos.x + pr:next(-30,30),pos.y,pos.z + pr:next(-30,30))

View file

@ -1754,70 +1754,69 @@ else
nether_wart_chance = 170 nether_wart_chance = 170
end end
-- Generate Nether decorations manually: Eternal fire, mushrooms, nether wart -- Generate Nether decorations manually: Eternal fire, mushrooms, nether wart
-- Minetest's API does not support decorations in caves yet. :-( -- (only v6)
local function generate_nether_decorations(minp, maxp, seed) local function generate_nether_decorations(minp, maxp, seed)
local pr_nether = PseudoRandom(seed+667) if mg_name == "v6" then
local pr_nether = PseudoRandom(seed+667)
if minp.y > mcl_vars.mg_nether_max or maxp.y < mcl_vars.mg_nether_min then if minp.y > mcl_vars.mg_nether_max or maxp.y < mcl_vars.mg_nether_min then
return return
end
minetest.log("action", "[mcl_mapgen_core] Nether decorations " .. minetest.pos_to_string(minp) .. " ... " .. minetest.pos_to_string(maxp))
-- TODO: Generate everything based on Perlin noise instead of PseudoRandom
local bpos
local rack = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:netherrack"})
local magma = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:magma"})
local ssand = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:soul_sand"})
-- Helper function to spawn “fake” decoration
local function special_deco(nodes, spawn_func)
for n = 1, #nodes do
bpos = {x = nodes[n].x, y = nodes[n].y + 1, z = nodes[n].z }
spawn_func(bpos)
end end
end minetest.log("action", "[mcl_mapgen_core] Nether decorations " .. minetest.pos_to_string(minp) .. " ... " .. minetest.pos_to_string(maxp))
-- Eternal fire on netherrack -- TODO: Generate everything based on Perlin noise instead of PseudoRandom
special_deco(rack, function(bpos)
-- Eternal fire on netherrack
if pr_nether:next(1,100) <= 3 then
minetest.set_node(bpos, {name = "mcl_fire:eternal_fire"})
end
end)
-- Eternal fire on magma cubes local bpos
special_deco(magma, function(bpos) local rack = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:netherrack"})
if pr_nether:next(1,150) == 1 then local magma = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:magma"})
minetest.set_node(bpos, {name = "mcl_fire:eternal_fire"}) local ssand = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:soul_sand"})
end
end)
-- Mushrooms on netherrack -- Helper function to spawn “fake” decoration
-- Note: Spawned *after* the fire because of light level checks local function special_deco(nodes, spawn_func)
special_deco(rack, function(bpos) for n = 1, #nodes do
local l = minetest.get_node_light(bpos, 0.5) bpos = {x = nodes[n].x, y = nodes[n].y + 1, z = nodes[n].z }
if bpos.y > mcl_vars.mg_lava_nether_max + 6 and l and l <= 12 and pr_nether:next(1,1000) <= 4 then
-- TODO: Make mushrooms appear in groups, use Perlin noise spawn_func(bpos)
if pr_nether:next(1,2) == 1 then
minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_brown"})
else
minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_red"})
end end
end end
end) -- Eternal fire on netherrack
special_deco(rack, function(bpos)
-- Eternal fire on netherrack
if pr_nether:next(1,100) <= 3 then
minetest.set_node(bpos, {name = "mcl_fire:eternal_fire"})
end
end)
-- Nether wart on soul sand -- Eternal fire on magma cubes
-- TODO: Spawn in Nether fortresses special_deco(magma, function(bpos)
special_deco(ssand, function(bpos) if pr_nether:next(1,150) == 1 then
if pr_nether:next(1, nether_wart_chance) == 1 then minetest.set_node(bpos, {name = "mcl_fire:eternal_fire"})
minetest.set_node(bpos, {name = "mcl_nether:nether_wart"}) end
end end)
end)
-- Mushrooms on netherrack
-- Note: Spawned *after* the fire because of light level checks
special_deco(rack, function(bpos)
local l = minetest.get_node_light(bpos, 0.5)
if bpos.y > mcl_vars.mg_lava_nether_max + 6 and l and l <= 12 and pr_nether:next(1,1000) <= 4 then
-- TODO: Make mushrooms appear in groups, use Perlin noise
if pr_nether:next(1,2) == 1 then
minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_brown"})
else
minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_red"})
end
end
end)
-- Nether wart on soul sand
-- TODO: Spawn in Nether fortresses
special_deco(ssand, function(bpos)
if pr_nether:next(1, nether_wart_chance) == 1 then
minetest.set_node(bpos, {name = "mcl_nether:nether_wart"})
end
end)
end
end end
minetest.register_on_generated(function(minp, maxp, blockseed) minetest.register_on_generated(function(minp, maxp, blockseed)

View file

@ -0,0 +1,36 @@
local modname = minetest.get_current_modname()
local modpath = minetest.get_modpath(modname)
mcl_structures.register_structure("nether_outpost",{
place_on = {"mcl_nether:netherrack","mcl_crimson:crimson_nylium","mcl_crimson:warped_nylium","mcl_blackstone:basalt","mcl_blackstone:soul_soil"},
noise_params = {
offset = 0,
scale = 0.00022,
spread = {x = 250, y = 250, z = 250},
seed = 333,
octaves = 1,
persist = 0.0001,
flags = "absvalue",
},
flags = "all_floors",
biomes = {"Nether","SoulsandValley","WarpedForest","CrimsonForest","BasaltDelta"},
on_place = function(pos,def,pr)
local sidelen = 15
local node = minetest.get_node(vector.offset(pos,1,1,0))
local solid = minetest.find_nodes_in_area(vector.offset(pos,-sidelen/2,-1,-sidelen/2),vector.offset(pos,sidelen/2,-1,sidelen/2),{"group:solid"})
local air = minetest.find_nodes_in_area(vector.offset(pos,-sidelen/2,1,-sidelen/2),vector.offset(pos,sidelen/2,4,sidelen/2),{"air"})
if #solid < ( sidelen * sidelen ) or
#air < (sidelen * sidelen ) then return false end
minetest.bulk_set_node(solid,node)
return true
end,
y_min = mcl_vars.mg_lava_nether_max,
y_max = mcl_vars.mg_nether_max - 30,
filenames = { modpath.."/schematics/nether_outpost.mts" },
y_offset = 0,
after_place = function(pos)
local sp = minetest.find_nodes_in_area(pos,vector.offset(pos,0,20,0),{"mcl_mobspawners:spawner"})
if not sp[1] then return end
mcl_mobspawners.setup_spawner(sp[1], "mobs_mc:blaze", 0, minetest.LIGHT_MAX+1, 10, 3, -1)
end
})

View file

@ -0,0 +1,3 @@
name = mcl_nether_fortresses
author = cora
depends = mcl_init, mcl_structures, mcl_mobspawners

View file

@ -8,6 +8,10 @@ function mcl_structures.place_structure(pos, def, pr)
elseif def.y_offset then elseif def.y_offset then
y_offset = def.y_offset y_offset = def.y_offset
end end
if def.on_place and not def.on_place(pos,def,pr) then
minetest.log("warning","[mcl_structures] "..def.name.." at "..minetest.pos_to_string(pos).." not placed. Conditions not satisfied.")
return false
end
if def.filenames then if def.filenames then
local file = def.filenames[pr:next(1,#def.filenames)] local file = def.filenames[pr:next(1,#def.filenames)]
local pp = vector.offset(pos,0,y_offset,0) local pp = vector.offset(pos,0,y_offset,0)

View file

@ -1,106 +0,0 @@
local adjacents = {
vector.new(1,0,0),
vector.new(1,0,1),
vector.new(1,0,-1),
vector.new(-1,0,0),
vector.new(-1,0,1),
vector.new(-1,0,-1),
vector.new(0,0,1),
vector.new(0,0,-1),
vector.new(0,-1,0)
}
local function set_node_no_bedrock(pos,node)
local n = minetest.get_node(pos)
if n.name == "mcl_core:bedrock" then return end
return minetest.set_node(pos,node)
end
local function airtower(pos)
for i=0,55 do
set_node_no_bedrock(vector.offset(pos,0,i,0),{name="air"})
end
end
local function makelake(pos,size,liquid,border,pr)
local node_under = minetest.get_node(vector.offset(pos,0,1,0))
local p1 = vector.offset(pos,-size,-size,-size)
local p2 = vector.offset(pos,size,size,size)
local nn = minetest.find_nodes_in_area(p1,p2,{"group:material_stone", "group:sand", "group:dirt"})
table.sort(nn,function(a, b)
return vector.distance(pos, a) < vector.distance(pos, b)
end)
if not nn[1] then return end
local y = pos.y + 1
local lq = {}
for i=1,pr:next(1,#nn) do
if nn[i].y == y then
set_node_no_bedrock(nn[i],{name=liquid})
airtower(vector.offset(nn[i],0,1,0))
table.insert(lq,nn[i])
end
end
for k,v in pairs(lq) do
for kk,vv in pairs(adjacents) do
local pp = vector.add(v,vv)
local an = minetest.get_node(pp)
local un = minetest.get_node(vector.offset(pp,0,1,0))
if not border then
if minetest.get_item_group(an.name,"solid") > 0 then
border = an.name
elseif minetest.get_item_group(minetest.get_node(nn[1]).name,"solid") > 0 then
border = minetest.get_node(nn[1]).name
else
border = "mcl_core:stone"
end
if border == "mcl_core:dirt" then border = "mcl_core:dirt_with_grass" end
end
if an.name ~= liquid then
set_node_no_bedrock(pp,{name=border})
if un.name ~= liquid then
airtower(vector.offset(pp,0,1,0))
end
end
end
end
return true
end
mcl_structures.register_structure("lavapool",{
place_on = {"group:sand", "group:dirt", "group:stone"},
noise_params = {
offset = 0,
scale = 0.0000022,
spread = {x = 250, y = 250, z = 250},
seed = 78375213,
octaves = 3,
persist = 0.001,
flags = "absvalue",
},
flags = "place_center_x, place_center_z, force_placement",
y_max = mcl_vars.mg_overworld_max,
y_min = minetest.get_mapgen_setting("water_level"),
place_func = function(pos,def,pr)
return makelake(pos,5,"mcl_core:lava_source","mcl_core:stone",pr)
end
})
mcl_structures.register_structure("water_lake",{
place_on = {"group:dirt","group:stone"},
noise_params = {
offset = 0,
scale = 0.000032,
spread = {x = 250, y = 250, z = 250},
seed = 734341353,
octaves = 3,
persist = 0.001,
flags = "absvalue",
},
flags = "place_center_x, place_center_z, force_placement",
y_max = mcl_vars.mg_overworld_max,
y_min = minetest.get_mapgen_setting("water_level"),
place_func = function(pos,def,pr)
return makelake(pos,5,"mcl_core:water_source",nil,pr)
end
})

View file

@ -0,0 +1,224 @@
local adjacents = {
vector.new(1,0,0),
vector.new(1,0,1),
vector.new(1,0,-1),
vector.new(-1,0,0),
vector.new(-1,0,1),
vector.new(-1,0,-1),
vector.new(0,0,1),
vector.new(0,0,-1),
vector.new(0,-1,0)
}
local plane_adjacents = {
vector.new(1,0,0),
vector.new(-1,0,0),
vector.new(0,0,1),
vector.new(0,0,-1),
}
local function set_node_no_bedrock(pos,node)
local n = minetest.get_node(pos)
if n.name == "mcl_core:bedrock" then return end
return minetest.set_node(pos,node)
end
local function airtower(pos)
for i=0,55 do
set_node_no_bedrock(vector.offset(pos,0,i,0),{name="air"})
end
end
local function makelake(pos,size,liquid,placein,border,pr)
local node_under = minetest.get_node(vector.offset(pos,0,1,0))
local p1 = vector.offset(pos,-size,-size,-size)
local p2 = vector.offset(pos,size,size,size)
local nn = minetest.find_nodes_in_area(p1,p2,placein)
table.sort(nn,function(a, b)
return vector.distance(vector.new(pos.x,0,pos.z), a) < vector.distance(vector.new(pos.x,0,pos.z), b)
end)
if not nn[1] then return end
local y = pos.y + 1
local lq = {}
for i=1,pr:next(1,#nn) do
if nn[i].y == y then
set_node_no_bedrock(nn[i],{name=liquid})
airtower(vector.offset(nn[i],0,1,0))
table.insert(lq,nn[i])
end
end
for k,v in pairs(lq) do
for kk,vv in pairs(adjacents) do
local pp = vector.add(v,vv)
local an = minetest.get_node(pp)
local un = minetest.get_node(vector.offset(pp,0,1,0))
if not border then
if minetest.get_item_group(an.name,"solid") > 0 then
border = an.name
elseif minetest.get_item_group(minetest.get_node(nn[1]).name,"solid") > 0 then
border = minetest.get_node(nn[1]).name
else
border = "mcl_core:stone"
end
if border == "mcl_core:dirt" then border = "mcl_core:dirt_with_grass" end
end
if an.name ~= liquid then
set_node_no_bedrock(pp,{name=border})
if un.name ~= liquid then
airtower(vector.offset(pp,0,1,0))
end
end
end
end
return true
end
mcl_structures.register_structure("lavapool",{
place_on = {"group:sand", "group:dirt", "group:stone"},
noise_params = {
offset = 0,
scale = 0.0000022,
spread = {x = 250, y = 250, z = 250},
seed = 78375213,
octaves = 3,
persist = 0.001,
flags = "absvalue",
},
flags = "place_center_x, place_center_z, force_placement",
y_max = mcl_vars.mg_overworld_max,
y_min = minetest.get_mapgen_setting("water_level"),
place_func = function(pos,def,pr)
return makelake(pos,5,"mcl_core:lava_source","mcl_core:stone",{"group:material_stone", "group:sand", "group:dirt"},pr)
end
})
mcl_structures.register_structure("water_lake",{
place_on = {"group:dirt","group:stone"},
noise_params = {
offset = 0,
scale = 0.000032,
spread = {x = 250, y = 250, z = 250},
seed = 756641353,
octaves = 3,
persist = 0.001,
flags = "absvalue",
},
flags = "place_center_x, place_center_z, force_placement",
y_max = mcl_vars.mg_overworld_max,
y_min = minetest.get_mapgen_setting("water_level"),
place_func = function(pos,def,pr)
return makelake(pos,5,"mcl_core:water_source",{"group:material_stone", "group:sand", "group:dirt"},nil,pr)
end
})
mcl_structures.register_structure("basalt_column",{
place_on = {"mcl_blackstone:blackstone","mcl_blackstone:basalt"},
spawn_by = {"air"},
num_spawn_by = 2,
noise_params = {
offset = 0,
scale = 0.02,
spread = {x = 250, y = 250, z = 250},
seed = 7225213,
octaves = 5,
persist = 0.1,
flags = "absvalue",
},
flags = "all_floors",
y_max = mcl_vars.mg_nether_max,
y_min = mcl_vars.mg_lava_nether_max + 1,
biomes = { "BasaltDelta" },
place_func = function(pos,def,pr)
local nn = minetest.find_nodes_in_area(vector.offset(pos,-5,-1,-5),vector.offset(pos,5,-1,5),{"air","mcl_blackstone:basalt","mcl_blackstone:blackstone"})
table.sort(nn,function(a, b)
return vector.distance(vector.new(pos.x,0,pos.z), a) < vector.distance(vector.new(pos.x,0,pos.z), b)
end)
if #nn < 1 then return false end
for i=1,pr:next(1,#nn) do
if minetest.get_node(vector.offset(nn[i],0,-1,0)).name ~= "air" then
local dst=vector.distance(pos,nn[i])
for ii=0,pr:next(2,14)-dst do
set_node_no_bedrock(vector.new(nn[i].x,nn[i].y + ii,nn[i].z),{name="mcl_blackstone:basalt"})
end
end
end
return true
end
})
mcl_structures.register_structure("basalt_pillar",{
place_on = {"mcl_blackstone:blackstone","mcl_blackstone:basalt"},
noise_params = {
offset = 0,
scale = 0.001,
spread = {x = 250, y = 250, z = 250},
seed = 783213,
octaves = 5,
persist = 0.1,
flags = "absvalue",
},
flags = "all_floors",
y_max = mcl_vars.mg_nether_max,
y_min = mcl_vars.mg_lava_nether_max + 1,
biomes = { "BasaltDelta" },
place_func = function(pos,def,pr)
local nn = minetest.find_nodes_in_area(vector.offset(pos,-2,-1,-2),vector.offset(pos,2,-1,2),{"air","mcl_blackstone:basalt","mcl_blackstone:blackstone"})
table.sort(nn,function(a, b)
return vector.distance(vector.new(pos.x,0,pos.z), a) < vector.distance(vector.new(pos.x,0,pos.z), b)
end)
if #nn < 1 then return false end
for i=1,pr:next(1,#nn) do
if minetest.get_node(vector.offset(nn[i],0,-1,0)).name ~= "air" then
local dst=vector.distance(pos,nn[i])
for ii=0,pr:next(19,34)-dst do
set_node_no_bedrock(vector.new(nn[i].x,nn[i].y + ii,nn[i].z),{name="mcl_blackstone:basalt"})
end
end
end
return true
end
})
mcl_structures.register_structure("lavadelta",{
place_on = {"mcl_blackstone:blackstone","mcl_blackstone:basalt"},
spawn_by = {"mcl_blackstone:basalt","mcl_blackstone:blackstone"},
num_spawn_by = 2,
noise_params = {
offset = 0,
scale = 0.01,
spread = {x = 250, y = 250, z = 250},
seed = 78375213,
octaves = 5,
persist = 0.1,
flags = "absvalue",
},
flags = "all_floors",
y_max = mcl_vars.mg_nether_max,
y_min = mcl_vars.mg_lava_nether_max + 1,
biomes = { "BasaltDelta" },
place_func = function(pos,def,pr)
local nn = minetest.find_nodes_in_area_under_air(vector.offset(pos,-10,-1,-10),vector.offset(pos,10,-1,10),{"mcl_blackstone:basalt","mcl_blackstone:blackstone"})
table.sort(nn,function(a, b)
return vector.distance(vector.new(pos.x,0,pos.z), a) < vector.distance(vector.new(pos.x,0,pos.z), b)
end)
if #nn < 1 then return false end
local lava = {}
for i=1,pr:next(1,#nn) do
set_node_no_bedrock(nn[i],{name="mcl_nether:nether_lava_source"})
table.insert(lava,nn[i])
end
for _,v in pairs(lava) do
for _,vv in pairs(adjacents) do
local p = vector.add(v,vv)
if minetest.get_node(p).name ~= "mcl_nether:nether_lava_source" then
set_node_no_bedrock(p,{name="mcl_blackstone:basalt"})
end
end
if math.random(3) == 1 then
set_node_no_bedrock(v,{name="mcl_nether:magma"})
end
end
return true
end
})

View file

@ -1,3 +1,3 @@
name = mcl_surface_pools name = mcl_terrain_features
author = cora author = cora
depends = mcl_init, mcl_structures depends = mcl_init, mcl_structures

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 94 KiB