forked from MineClone5/MineClone5
Compare commits
4 Commits
master
...
production
Author | SHA1 | Date |
---|---|---|
kay27 | 980e592e4a | |
kay27 | 806edcda19 | |
kay27 | b703dbc288 | |
kay27 | 05f1614893 |
|
@ -214,6 +214,7 @@ end
|
||||||
--a function used for despawning mobs
|
--a function used for despawning mobs
|
||||||
mobs.check_for_player_within_area = function(self, radius)
|
mobs.check_for_player_within_area = function(self, radius)
|
||||||
local pos1 = self.object:get_pos()
|
local pos1 = self.object:get_pos()
|
||||||
|
if not pos1 then return end
|
||||||
--get players in radius
|
--get players in radius
|
||||||
for _,player in pairs(minetest_get_connected_players()) do
|
for _,player in pairs(minetest_get_connected_players()) do
|
||||||
if player and player:get_hp() > 0 then
|
if player and player:get_hp() > 0 then
|
||||||
|
|
Before Width: | Height: | Size: 212 B After Width: | Height: | Size: 212 B |
|
@ -28,9 +28,7 @@ minetest.register_alias("mapgen_clay", "mcl_core:clay")
|
||||||
minetest.register_alias("mapgen_lava_source", "air") -- Built-in lava generator is too unpredictable, we generate lava on our own
|
minetest.register_alias("mapgen_lava_source", "air") -- Built-in lava generator is too unpredictable, we generate lava on our own
|
||||||
minetest.register_alias("mapgen_cobble", "mcl_core:cobble")
|
minetest.register_alias("mapgen_cobble", "mcl_core:cobble")
|
||||||
minetest.register_alias("mapgen_mossycobble", "mcl_core:mossycobble")
|
minetest.register_alias("mapgen_mossycobble", "mcl_core:mossycobble")
|
||||||
if minetest.get_modpath("mcl_flowers") then
|
minetest.register_alias("mapgen_junglegrass", "mcl_flowers:fern")
|
||||||
minetest.register_alias("mapgen_junglegrass", "mcl_flowers:fern")
|
|
||||||
end
|
|
||||||
minetest.register_alias("mapgen_stone_with_coal", "mcl_core:stone_with_coal")
|
minetest.register_alias("mapgen_stone_with_coal", "mcl_core:stone_with_coal")
|
||||||
minetest.register_alias("mapgen_stone_with_iron", "mcl_core:stone_with_iron")
|
minetest.register_alias("mapgen_stone_with_iron", "mcl_core:stone_with_iron")
|
||||||
minetest.register_alias("mapgen_desert_sand", "mcl_core:sand")
|
minetest.register_alias("mapgen_desert_sand", "mcl_core:sand")
|
||||||
|
@ -45,14 +43,11 @@ minetest.register_alias("mapgen_snow", "mcl_core:snow")
|
||||||
minetest.register_alias("mapgen_snowblock", "mcl_core:snowblock")
|
minetest.register_alias("mapgen_snowblock", "mcl_core:snowblock")
|
||||||
minetest.register_alias("mapgen_ice", "mcl_core:ice")
|
minetest.register_alias("mapgen_ice", "mcl_core:ice")
|
||||||
|
|
||||||
|
minetest.register_alias("mapgen_stair_cobble", "mcl_stairs:stair_cobble")
|
||||||
minetest.register_alias("mapgen_sandstonebrick", "mcl_core:sandstonesmooth")
|
minetest.register_alias("mapgen_sandstonebrick", "mcl_core:sandstonesmooth")
|
||||||
|
minetest.register_alias("mapgen_stair_sandstonebrick", "mcl_stairs:stair_sandstone")
|
||||||
if minetest.get_modpath("mcl_stairs") then
|
minetest.register_alias("mapgen_stair_sandstone_block", "mcl_stairs:stair_sandstone")
|
||||||
minetest.register_alias("mapgen_stair_cobble", "mcl_stairs:stair_cobble")
|
minetest.register_alias("mapgen_stair_desert_stone", "mcl_stairs:stair_sandstone")
|
||||||
minetest.register_alias("mapgen_stair_sandstonebrick", "mcl_stairs:stair_sandstone")
|
|
||||||
minetest.register_alias("mapgen_stair_sandstone_block", "mcl_stairs:stair_sandstone")
|
|
||||||
minetest.register_alias("mapgen_stair_desert_stone", "mcl_stairs:stair_sandstone")
|
|
||||||
end
|
|
||||||
|
|
||||||
local mg_name = minetest.get_mapgen_setting("mg_name")
|
local mg_name = minetest.get_mapgen_setting("mg_name")
|
||||||
local superflat = mg_name == "flat" and minetest.get_mapgen_setting("mcl_superflat_classic") == "true"
|
local superflat = mg_name == "flat" and minetest.get_mapgen_setting("mcl_superflat_classic") == "true"
|
||||||
|
@ -74,16 +69,9 @@ local c_sand = minetest.get_content_id("mcl_core:sand")
|
||||||
local c_void = minetest.get_content_id("mcl_core:void")
|
local c_void = minetest.get_content_id("mcl_core:void")
|
||||||
local c_lava = minetest.get_content_id("mcl_core:lava_source")
|
local c_lava = minetest.get_content_id("mcl_core:lava_source")
|
||||||
local c_water = minetest.get_content_id("mcl_core:water_source")
|
local c_water = minetest.get_content_id("mcl_core:water_source")
|
||||||
|
local c_soul_sand = minetest.get_content_id("mcl_nether:soul_sand")
|
||||||
local c_nether = nil
|
local c_netherrack = minetest.get_content_id("mcl_nether:netherrack")
|
||||||
if minetest.get_modpath("mcl_nether") then
|
local c_nether_lava = minetest.get_content_id("mcl_nether:nether_lava_source")
|
||||||
c_nether = {
|
|
||||||
soul_sand = minetest.get_content_id("mcl_nether:soul_sand"),
|
|
||||||
netherrack = minetest.get_content_id("mcl_nether:netherrack"),
|
|
||||||
lava = minetest.get_content_id("mcl_nether:nether_lava_source")
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
--local c_end_stone = minetest.get_content_id("mcl_end:end_stone")
|
--local c_end_stone = minetest.get_content_id("mcl_end:end_stone")
|
||||||
local c_realm_barrier = minetest.get_content_id("mcl_core:realm_barrier")
|
local c_realm_barrier = minetest.get_content_id("mcl_core:realm_barrier")
|
||||||
local c_top_snow = minetest.get_content_id("mcl_core:snow")
|
local c_top_snow = minetest.get_content_id("mcl_core:snow")
|
||||||
|
@ -92,18 +80,12 @@ local c_clay = minetest.get_content_id("mcl_core:clay")
|
||||||
local c_leaves = minetest.get_content_id("mcl_core:leaves")
|
local c_leaves = minetest.get_content_id("mcl_core:leaves")
|
||||||
local c_jungleleaves = minetest.get_content_id("mcl_core:jungleleaves")
|
local c_jungleleaves = minetest.get_content_id("mcl_core:jungleleaves")
|
||||||
--local c_jungletree = minetest.get_content_id("mcl_core:jungletree")
|
--local c_jungletree = minetest.get_content_id("mcl_core:jungletree")
|
||||||
|
local c_cocoa_1 = minetest.get_content_id("mcl_cocoas:cocoa_1")
|
||||||
|
local c_cocoa_2 = minetest.get_content_id("mcl_cocoas:cocoa_2")
|
||||||
|
local c_cocoa_3 = minetest.get_content_id("mcl_cocoas:cocoa_3")
|
||||||
local c_vine = minetest.get_content_id("mcl_core:vine")
|
local c_vine = minetest.get_content_id("mcl_core:vine")
|
||||||
local c_air = minetest.CONTENT_AIR
|
local c_air = minetest.CONTENT_AIR
|
||||||
|
|
||||||
local c_cocoas = nil
|
|
||||||
if minetest.get_modpath("mcl_cocoas") then
|
|
||||||
c_cocoas = {
|
|
||||||
minetest.get_content_id("mcl_cocoas:cocoa_1"),
|
|
||||||
minetest.get_content_id("mcl_cocoas:cocoa_2"),
|
|
||||||
minetest.get_content_id("mcl_cocoas:cocoa_3")
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Ore generation
|
-- Ore generation
|
||||||
--
|
--
|
||||||
|
@ -728,13 +710,6 @@ local function register_mgv6_decorations()
|
||||||
num_spawn_by = 1,
|
num_spawn_by = 1,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Hack to make sure certain items only spawn in jungles
|
|
||||||
local spawn_by_in_jungle = { "mcl_core:jungletree" }
|
|
||||||
if minetest.get_modpath("mcl_flowers") then
|
|
||||||
table.insert(spawn_by_in_jungle, "mcl_flowers:fern")
|
|
||||||
end
|
|
||||||
|
|
||||||
if minetest.get_modpath("mcl_flowers") then
|
|
||||||
-- Doubletall grass
|
-- Doubletall grass
|
||||||
minetest.register_decoration({
|
minetest.register_decoration({
|
||||||
deco_type = "schematic",
|
deco_type = "schematic",
|
||||||
|
@ -772,7 +747,7 @@ local function register_mgv6_decorations()
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
-- v6 hack: This makes sure large ferns only appear in jungles
|
-- v6 hack: This makes sure large ferns only appear in jungles
|
||||||
spawn_by = spawn_by_in_jungle,
|
spawn_by = { "mcl_core:jungletree", "mcl_flowers:fern" },
|
||||||
num_spawn_by = 1,
|
num_spawn_by = 1,
|
||||||
place_on = {"group:grass_block_no_snow"},
|
place_on = {"group:grass_block_no_snow"},
|
||||||
|
|
||||||
|
@ -848,9 +823,7 @@ local function register_mgv6_decorations()
|
||||||
y_max = 0,
|
y_max = 0,
|
||||||
rotation = "random",
|
rotation = "random",
|
||||||
})
|
})
|
||||||
end
|
|
||||||
|
|
||||||
if minetest.get_modpath("mcl_farming") then
|
|
||||||
-- Pumpkin
|
-- Pumpkin
|
||||||
minetest.register_decoration({
|
minetest.register_decoration({
|
||||||
deco_type = "simple",
|
deco_type = "simple",
|
||||||
|
@ -885,16 +858,14 @@ local function register_mgv6_decorations()
|
||||||
persist = 0.6
|
persist = 0.6
|
||||||
},
|
},
|
||||||
-- Small trick to make sure melon spawn in jungles
|
-- Small trick to make sure melon spawn in jungles
|
||||||
spawn_by = spawn_by_in_jungle,
|
spawn_by = { "mcl_core:jungletree", "mcl_flowers:fern" },
|
||||||
num_spawn_by = 1,
|
num_spawn_by = 1,
|
||||||
y_min = 1,
|
y_min = 1,
|
||||||
y_max = 40,
|
y_max = 40,
|
||||||
decoration = "mcl_farming:melon",
|
decoration = "mcl_farming:melon",
|
||||||
})
|
})
|
||||||
end
|
|
||||||
|
|
||||||
-- Tall grass
|
-- Tall grass
|
||||||
if minetest.get_modpath("mcl_flowers") then
|
|
||||||
minetest.register_decoration({
|
minetest.register_decoration({
|
||||||
deco_type = "simple",
|
deco_type = "simple",
|
||||||
place_on = {"group:grass_block_no_snow"},
|
place_on = {"group:grass_block_no_snow"},
|
||||||
|
@ -927,10 +898,8 @@ local function register_mgv6_decorations()
|
||||||
y_max = mcl_vars.overworld_max,
|
y_max = mcl_vars.overworld_max,
|
||||||
decoration = "mcl_flowers:tallgrass",
|
decoration = "mcl_flowers:tallgrass",
|
||||||
})
|
})
|
||||||
end
|
|
||||||
|
|
||||||
-- Seagrass and kelp
|
-- Seagrass and kelp
|
||||||
if minetest.get_modpath("mcl_ocean") then
|
|
||||||
local materials = {"dirt","sand"}
|
local materials = {"dirt","sand"}
|
||||||
for i=1, #materials do
|
for i=1, #materials do
|
||||||
local mat = materials[i]
|
local mat = materials[i]
|
||||||
|
@ -1020,12 +989,11 @@ local function register_mgv6_decorations()
|
||||||
param2 = 32,
|
param2 = 32,
|
||||||
param2_max = 160,
|
param2_max = 160,
|
||||||
})
|
})
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Wet Sponge
|
-- Wet Sponge
|
||||||
-- TODO: Remove this when we got ocean monuments
|
-- TODO: Remove this when we got ocean monuments
|
||||||
if minetest.get_modpath("mcl_sponges") then
|
|
||||||
minetest.register_decoration({
|
minetest.register_decoration({
|
||||||
deco_type = "simple",
|
deco_type = "simple",
|
||||||
decoration = "mcl_sponges:sponge_wet",
|
decoration = "mcl_sponges:sponge_wet",
|
||||||
|
@ -1045,10 +1013,8 @@ local function register_mgv6_decorations()
|
||||||
y_min = mcl_vars.mg_lava_overworld_max + 5,
|
y_min = mcl_vars.mg_lava_overworld_max + 5,
|
||||||
y_max = -20,
|
y_max = -20,
|
||||||
})
|
})
|
||||||
end
|
|
||||||
|
|
||||||
-- Add a small amount of tall grass everywhere to avoid areas completely empty devoid of tall grass
|
-- Add a small amount of tall grass everywhere to avoid areas completely empty devoid of tall grass
|
||||||
if minetest.get_modpath("mcl_flowers") then
|
|
||||||
minetest.register_decoration({
|
minetest.register_decoration({
|
||||||
deco_type = "simple",
|
deco_type = "simple",
|
||||||
place_on = {"group:grass_block_no_snow"},
|
place_on = {"group:grass_block_no_snow"},
|
||||||
|
@ -1058,9 +1024,7 @@ local function register_mgv6_decorations()
|
||||||
y_max = mcl_vars.overworld_max,
|
y_max = mcl_vars.overworld_max,
|
||||||
decoration = "mcl_flowers:tallgrass",
|
decoration = "mcl_flowers:tallgrass",
|
||||||
})
|
})
|
||||||
end
|
|
||||||
|
|
||||||
if minetest.get_modpath("mcl_mushrooms") then
|
|
||||||
local mushrooms = {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown"}
|
local mushrooms = {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown"}
|
||||||
local mseeds = { 7133, 8244 }
|
local mseeds = { 7133, 8244 }
|
||||||
for m=1, #mushrooms do
|
for m=1, #mushrooms do
|
||||||
|
@ -1084,7 +1048,6 @@ local function register_mgv6_decorations()
|
||||||
num_spawn_by = 1,
|
num_spawn_by = 1,
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
-- Dead bushes
|
-- Dead bushes
|
||||||
minetest.register_decoration({
|
minetest.register_decoration({
|
||||||
|
@ -1104,7 +1067,6 @@ local function register_mgv6_decorations()
|
||||||
decoration = "mcl_core:deadbush",
|
decoration = "mcl_core:deadbush",
|
||||||
})
|
})
|
||||||
|
|
||||||
if minetest.get_modpath("mcl_flowers") then
|
|
||||||
local function register_mgv6_flower(name, seed, offset, y_max)
|
local function register_mgv6_flower(name, seed, offset, y_max)
|
||||||
if offset == nil then
|
if offset == nil then
|
||||||
offset = 0
|
offset = 0
|
||||||
|
@ -1145,7 +1107,6 @@ local function register_mgv6_decorations()
|
||||||
register_mgv6_flower("blue_orchid", 64500, nil, mcl_worlds.layer_to_y(67))
|
register_mgv6_flower("blue_orchid", 64500, nil, mcl_worlds.layer_to_y(67))
|
||||||
register_mgv6_flower("oxeye_daisy", 3490)
|
register_mgv6_flower("oxeye_daisy", 3490)
|
||||||
register_mgv6_flower("poppy", 9439)
|
register_mgv6_flower("poppy", 9439)
|
||||||
end
|
|
||||||
|
|
||||||
-- Put top snow on snowy grass blocks. The v6 mapgen does not generate the top snow on its own.
|
-- Put top snow on snowy grass blocks. The v6 mapgen does not generate the top snow on its own.
|
||||||
minetest.register_decoration({
|
minetest.register_decoration({
|
||||||
|
@ -1286,26 +1247,47 @@ local function generate_clay(minp, maxp, blockseed, voxelmanip_data, voxelmanip_
|
||||||
return lvm_used
|
return lvm_used
|
||||||
end
|
end
|
||||||
|
|
||||||
local function generate_end_exit_portal(pos)
|
local dragon_spawn_pos = false
|
||||||
local obj = minetest.add_entity(vector.add(pos, vector.new(3, 11, 3)), "mobs_mc:enderdragon")
|
local dragon_spawned, portal_generated = false, false
|
||||||
if obj then
|
|
||||||
|
local function spawn_ender_dragon()
|
||||||
|
local obj = minetest.add_entity(dragon_spawn_pos, "mobs_mc:enderdragon")
|
||||||
|
if not obj then return false end
|
||||||
local dragon_entity = obj:get_luaentity()
|
local dragon_entity = obj:get_luaentity()
|
||||||
dragon_entity._initial = true
|
dragon_entity._initial = true
|
||||||
dragon_entity._portal_pos = pos
|
dragon_entity._portal_pos = pos
|
||||||
else
|
return obj
|
||||||
minetest.log("error", "[mcl_mapgen_core] ERROR! Ender dragon doesn't want to spawn")
|
end
|
||||||
end
|
|
||||||
if mcl_structures ~= nil then
|
local function try_to_spawn_ender_dragon()
|
||||||
mcl_structures.call_struct(pos, "end_exit_portal")
|
if spawn_ender_dragon() then
|
||||||
|
dragon_spawned = true
|
||||||
|
return
|
||||||
end
|
end
|
||||||
|
minetest.after(2, try_to_spawn_ender_dragon)
|
||||||
|
minetest.log("warning", "[mcl_mapgen_core] WARNING! Ender dragon doesn't want to spawn at "..minetest.pos_to_string(dragon_spawn_pos))
|
||||||
|
end
|
||||||
|
|
||||||
|
if portal_generated and not dragon_spawned then
|
||||||
|
minetest.after(10, try_to_spawn_ender_dragon)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function generate_end_exit_portal(pos)
|
||||||
|
if dragon_spawn_pos then return false end
|
||||||
|
dragon_spawn_pos = vector.add(pos, vector.new(3, 11, 3))
|
||||||
|
mcl_structures.call_struct(pos, "end_exit_portal", nil, nil, function()
|
||||||
|
minetest.after(2, function()
|
||||||
|
minetest.emerge_area(vector.subtract(dragon_spawn_pos, {x = 64, y = 12, z = 5}), vector.add(dragon_spawn_pos, {x = 3, y = 3, z = 5}), function(blockpos, action, calls_remaining, param)
|
||||||
|
if calls_remaining > 0 then return end
|
||||||
|
minetest.after(2, try_to_spawn_ender_dragon)
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
portal_generated = true
|
||||||
end
|
end
|
||||||
|
|
||||||
-- TODO: Try to use more efficient structure generating code
|
-- TODO: Try to use more efficient structure generating code
|
||||||
local function generate_structures(minp, maxp, blockseed, biomemap)
|
local function generate_structures(minp, maxp, blockseed, biomemap)
|
||||||
if mcl_structures == nil then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local chunk_has_desert_well = false
|
local chunk_has_desert_well = false
|
||||||
local chunk_has_desert_temple = false
|
local chunk_has_desert_temple = false
|
||||||
local chunk_has_igloo = false
|
local chunk_has_igloo = false
|
||||||
|
@ -1614,7 +1596,6 @@ local function generate_tree_decorations(minp, maxp, seed, data, param2_data, ar
|
||||||
|
|
||||||
local pos, treepos, dir
|
local pos, treepos, dir
|
||||||
|
|
||||||
if c_cocoas ~= nil then
|
|
||||||
local cocoachance = 40
|
local cocoachance = 40
|
||||||
if dense_vegetation then
|
if dense_vegetation then
|
||||||
cocoachance = 32
|
cocoachance = 32
|
||||||
|
@ -1647,11 +1628,17 @@ local function generate_tree_decorations(minp, maxp, seed, data, param2_data, ar
|
||||||
and data[p_pos] == c_air
|
and data[p_pos] == c_air
|
||||||
and l and l > 12 then
|
and l and l > 12 then
|
||||||
local c = pr:next(1, 3)
|
local c = pr:next(1, 3)
|
||||||
data[p_pos] = c_cocoas[c]
|
if c == 1 then
|
||||||
|
data[p_pos] = c_cocoa_1
|
||||||
|
elseif c == 2 then
|
||||||
|
data[p_pos] = c_cocoa_2
|
||||||
|
else
|
||||||
|
data[p_pos] = c_cocoa_3
|
||||||
|
end
|
||||||
param2_data[p_pos] = minetest.dir_to_facedir(vector.subtract(treepos, pos))
|
param2_data[p_pos] = minetest.dir_to_facedir(vector.subtract(treepos, pos))
|
||||||
lvm_used = true
|
lvm_used = true
|
||||||
end
|
end
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1761,10 +1748,6 @@ end
|
||||||
-- Generate mushrooms in caves manually.
|
-- Generate mushrooms in caves manually.
|
||||||
-- Minetest's API does not support decorations in caves yet. :-(
|
-- Minetest's API does not support decorations in caves yet. :-(
|
||||||
local function generate_underground_mushrooms(minp, maxp, seed)
|
local function generate_underground_mushrooms(minp, maxp, seed)
|
||||||
if not minetest.get_modpath("mcl_mushrooms") then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local pr_shroom = PseudoRandom(seed-24359)
|
local pr_shroom = PseudoRandom(seed-24359)
|
||||||
-- Generate rare underground mushrooms
|
-- Generate rare underground mushrooms
|
||||||
-- TODO: Make them appear in groups, use Perlin noise
|
-- TODO: Make them appear in groups, use Perlin noise
|
||||||
|
@ -1799,10 +1782,6 @@ 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. :-(
|
-- Minetest's API does not support decorations in caves yet. :-(
|
||||||
local function generate_nether_decorations(minp, maxp, seed)
|
local function generate_nether_decorations(minp, maxp, seed)
|
||||||
if c_nether == nil then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local pr_nether = PseudoRandom(seed+667)
|
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
|
||||||
|
@ -1845,7 +1824,6 @@ local function generate_nether_decorations(minp, maxp, seed)
|
||||||
|
|
||||||
-- Mushrooms on netherrack
|
-- Mushrooms on netherrack
|
||||||
-- Note: Spawned *after* the fire because of light level checks
|
-- Note: Spawned *after* the fire because of light level checks
|
||||||
if minetest.get_modpath("mcl_mushrooms") then
|
|
||||||
special_deco(rack, function(bpos)
|
special_deco(rack, function(bpos)
|
||||||
local l = minetest.get_node_light(bpos, 0.5)
|
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
|
if bpos.y > mcl_vars.mg_lava_nether_max + 6 and l and l <= 12 and pr_nether:next(1,1000) <= 4 then
|
||||||
|
@ -1857,7 +1835,6 @@ local function generate_nether_decorations(minp, maxp, seed)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
|
||||||
|
|
||||||
-- Nether wart on soul sand
|
-- Nether wart on soul sand
|
||||||
-- TODO: Spawn in Nether fortresses
|
-- TODO: Spawn in Nether fortresses
|
||||||
|
@ -2070,9 +2047,7 @@ local function basic(vm, data, data2, emin, emax, area, minp, maxp, blockseed)
|
||||||
-- Big lava seas by replacing air below a certain height
|
-- Big lava seas by replacing air below a certain height
|
||||||
if mcl_vars.mg_lava then
|
if mcl_vars.mg_lava then
|
||||||
lvm_used = set_layers(data, area, c_lava, c_air, mcl_vars.mg_overworld_min, mcl_vars.mg_lava_overworld_max, emin, emax, lvm_used, pr)
|
lvm_used = set_layers(data, area, c_lava, c_air, mcl_vars.mg_overworld_min, mcl_vars.mg_lava_overworld_max, emin, emax, lvm_used, pr)
|
||||||
if c_nether then
|
lvm_used = set_layers(data, area, c_nether_lava, c_air, mcl_vars.mg_nether_min, mcl_vars.mg_lava_nether_max, emin, emax, lvm_used, pr)
|
||||||
lvm_used = set_layers(data, area, c_nether.lava, c_air, mcl_vars.mg_nether_min, mcl_vars.mg_lava_nether_max, emin, emax, lvm_used, pr)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Clay, vines, cocoas
|
-- Clay, vines, cocoas
|
||||||
|
@ -2154,27 +2129,25 @@ local function basic(vm, data, data2, emin, emax, area, minp, maxp, blockseed)
|
||||||
-- * Replace water with Nether lava.
|
-- * Replace water with Nether lava.
|
||||||
-- * Replace stone, sand dirt in v6 so the Nether works in v6.
|
-- * Replace stone, sand dirt in v6 so the Nether works in v6.
|
||||||
elseif emin.y <= mcl_vars.mg_nether_max and emax.y >= mcl_vars.mg_nether_min then
|
elseif emin.y <= mcl_vars.mg_nether_max and emax.y >= mcl_vars.mg_nether_min then
|
||||||
if c_nether then
|
|
||||||
if mg_name == "v6" then
|
if mg_name == "v6" then
|
||||||
local nodes = minetest.find_nodes_in_area(emin, emax, {"mcl_core:water_source", "mcl_core:stone", "mcl_core:sand", "mcl_core:dirt"})
|
local nodes = minetest.find_nodes_in_area(emin, emax, {"mcl_core:water_source", "mcl_core:stone", "mcl_core:sand", "mcl_core:dirt"})
|
||||||
for n=1, #nodes do
|
for n=1, #nodes do
|
||||||
local p_pos = area:index(nodes[n].x, nodes[n].y, nodes[n].z)
|
local p_pos = area:index(nodes[n].x, nodes[n].y, nodes[n].z)
|
||||||
if data[p_pos] == c_water then
|
if data[p_pos] == c_water then
|
||||||
data[p_pos] = c_nether.lava
|
data[p_pos] = c_nether_lava
|
||||||
lvm_used = true
|
lvm_used = true
|
||||||
elseif data[p_pos] == c_stone then
|
elseif data[p_pos] == c_stone then
|
||||||
data[p_pos] = c_nether.netherrack
|
data[p_pos] = c_netherrack
|
||||||
lvm_used = true
|
lvm_used = true
|
||||||
elseif data[p_pos] == c_sand or data[p_pos] == c_dirt then
|
elseif data[p_pos] == c_sand or data[p_pos] == c_dirt then
|
||||||
data[p_pos] = c_nether.soul_sand
|
data[p_pos] = c_soul_sand
|
||||||
lvm_used = true
|
lvm_used = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
local nodes = minetest.find_nodes_in_area(emin, emax, {"group:water"})
|
local nodes = minetest.find_nodes_in_area(emin, emax, {"group:water"})
|
||||||
for _, n in pairs(nodes) do
|
for _, n in pairs(nodes) do
|
||||||
data[area:index(n.x, n.y, n.z)] = c_nether.lava
|
data[area:index(n.x, n.y, n.z)] = c_nether_lava
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
name = mcl_mapgen_core
|
name = mcl_mapgen_core
|
||||||
author = Wuzzy
|
author = Wuzzy
|
||||||
description = The core of the MCL2 mapgen
|
description = The core of the MCL2 mapgen
|
||||||
depends = mcl_init, mcl_core, biomeinfo, mcl_worlds
|
depends = mcl_init, mcl_core, biomeinfo, mcl_worlds, mcl_cocoas, mcl_sponges, mcl_ocean, mcl_stairs, mcl_monster_eggs, mcl_structures
|
||||||
optional_depends = mclx_core, mcl_cocoas, mcl_sponges, mcl_ocean, mcl_stairs, mcl_monster_eggs, mcl_structures, mcl_flowers, mcl_farming, mcl_mushrooms, mcl_nether
|
optional_depends = mclx_core
|
||||||
|
|
|
@ -69,7 +69,7 @@ local function init_node_construct(pos)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- The call of Struct
|
-- The call of Struct
|
||||||
function mcl_structures.call_struct(pos, struct_style, rotation, pr)
|
function mcl_structures.call_struct(pos, struct_style, rotation, pr, callback)
|
||||||
minetest.log("action","[mcl_structures] call_struct " .. struct_style.." at "..minetest.pos_to_string(pos))
|
minetest.log("action","[mcl_structures] call_struct " .. struct_style.." at "..minetest.pos_to_string(pos))
|
||||||
if not rotation then
|
if not rotation then
|
||||||
rotation = "random"
|
rotation = "random"
|
||||||
|
@ -91,13 +91,31 @@ function mcl_structures.call_struct(pos, struct_style, rotation, pr)
|
||||||
elseif struct_style == "fossil" then
|
elseif struct_style == "fossil" then
|
||||||
return mcl_structures.generate_fossil(pos, rotation, pr)
|
return mcl_structures.generate_fossil(pos, rotation, pr)
|
||||||
elseif struct_style == "end_exit_portal" then
|
elseif struct_style == "end_exit_portal" then
|
||||||
return mcl_structures.generate_end_exit_portal(pos, rotation)
|
return mcl_structures.generate_end_exit_portal(pos, rotation, pr, callback)
|
||||||
elseif struct_style == "end_exit_portal_open" then
|
elseif struct_style == "end_exit_portal_open" then
|
||||||
return mcl_structures.generate_end_exit_portal_open(pos, rotation)
|
return mcl_structures.generate_end_exit_portal_open(pos, rotation)
|
||||||
elseif struct_style == "end_gateway_portal" then
|
elseif struct_style == "end_gateway_portal" then
|
||||||
return mcl_structures.generate_end_gateway_portal(pos, rotation)
|
return mcl_structures.generate_end_gateway_portal(pos, rotation)
|
||||||
elseif struct_style == "end_portal_shrine" then
|
elseif struct_style == "end_portal_shrine" then
|
||||||
return mcl_structures.generate_end_portal_shrine(pos, rotation, pr)
|
return mcl_structures.generate_end_portal_shrine(pos, rotation, pr)
|
||||||
|
elseif struct_style == "end_portal" then
|
||||||
|
return mcl_structures.generate_end_portal(pos, rotation, pr)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function mcl_structures.generate_end_portal(pos, rotation, pr)
|
||||||
|
-- todo: proper facedir
|
||||||
|
local x0, y0, z0 = pos.x - 2, pos.y, pos.z - 2
|
||||||
|
for x = 0, 4 do
|
||||||
|
for z = 0, 4 do
|
||||||
|
if x % 4 == 0 or z % 4 == 0 then
|
||||||
|
if x % 4 ~= 0 or z % 4 ~= 0 then
|
||||||
|
minetest.swap_node({x = x0 + x, y = y0, z = z0 + z}, {name = "mcl_portals:end_portal_frame_eye"})
|
||||||
|
end
|
||||||
|
else
|
||||||
|
minetest.swap_node({x = x0 + x, y = y0, z = z0 + z}, {name = "mcl_portals:portal_end"})
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -324,9 +342,9 @@ function mcl_structures.generate_fossil(pos, rotation, pr)
|
||||||
return mcl_structures.place_schematic(newpos, path, rotation or "random", nil, true)
|
return mcl_structures.place_schematic(newpos, path, rotation or "random", nil, true)
|
||||||
end
|
end
|
||||||
|
|
||||||
function mcl_structures.generate_end_exit_portal(pos, rot)
|
function mcl_structures.generate_end_exit_portal(pos, rot, pr, callback)
|
||||||
local path = modpath.."/schematics/mcl_structures_end_exit_portal.mts"
|
local path = modpath.."/schematics/mcl_structures_end_exit_portal.mts"
|
||||||
return mcl_structures.place_schematic(pos, path, rot or "0", {["mcl_portals:portal_end"] = "air"}, true)
|
return mcl_structures.place_schematic(pos, path, rot or "0", {["mcl_portals:portal_end"] = "air"}, true, nil, callback)
|
||||||
end
|
end
|
||||||
|
|
||||||
function mcl_structures.generate_end_exit_portal_open(pos, rot)
|
function mcl_structures.generate_end_exit_portal_open(pos, rot)
|
||||||
|
@ -556,7 +574,7 @@ end
|
||||||
|
|
||||||
-- Debug command
|
-- Debug command
|
||||||
minetest.register_chatcommand("spawnstruct", {
|
minetest.register_chatcommand("spawnstruct", {
|
||||||
params = "desert_temple | desert_well | igloo | witch_hut | boulder | ice_spike_small | ice_spike_large | fossil | end_exit_portal | end_exit_portal_open | end_gateway_portal | end_portal_shrine | nether_portal | dungeon",
|
params = "desert_temple | desert_well | igloo | witch_hut | boulder | ice_spike_small | ice_spike_large | fossil | end_exit_portal | end_exit_portal_open | end_gateway_portal | end_portal_shrine | end_portal | nether_portal | dungeon",
|
||||||
description = S("Generate a pre-defined structure near your position."),
|
description = S("Generate a pre-defined structure near your position."),
|
||||||
privs = {debug = true},
|
privs = {debug = true},
|
||||||
func = function(name, param)
|
func = function(name, param)
|
||||||
|
@ -596,6 +614,8 @@ minetest.register_chatcommand("spawnstruct", {
|
||||||
mcl_structures.generate_end_portal_shrine(pos, rot, pr)
|
mcl_structures.generate_end_portal_shrine(pos, rot, pr)
|
||||||
elseif param == "dungeon" and mcl_dungeons and mcl_dungeons.spawn_dungeon then
|
elseif param == "dungeon" and mcl_dungeons and mcl_dungeons.spawn_dungeon then
|
||||||
mcl_dungeons.spawn_dungeon(pos, rot, pr)
|
mcl_dungeons.spawn_dungeon(pos, rot, pr)
|
||||||
|
elseif param == "end_portal" then
|
||||||
|
mcl_structures.generate_end_portal(pos, rot, pr)
|
||||||
elseif param == "nether_portal" and mcl_portals and mcl_portals.spawn_nether_portal then
|
elseif param == "nether_portal" and mcl_portals and mcl_portals.spawn_nether_portal then
|
||||||
mcl_portals.spawn_nether_portal(pos, rot, pr, name)
|
mcl_portals.spawn_nether_portal(pos, rot, pr, name)
|
||||||
elseif param == "" then
|
elseif param == "" then
|
||||||
|
|
Loading…
Reference in New Issue