Skip to content

Instantly share code, notes, and snippets.

@wsor4035
Created September 13, 2021 02:48
Show Gist options
  • Save wsor4035/8f749c977db5d7853cc945139d787fcb to your computer and use it in GitHub Desktop.
Save wsor4035/8f749c977db5d7853cc945139d787fcb to your computer and use it in GitHub Desktop.
mapgen
minetest.register_node("mk_mapgen:bedrock", {
description = "bedrock",
tiles = {"[combine:16x16"}
})
minetest.register_node("mk_mapgen:dirt", {
description = "bedrock",
tiles = {"[combine:16x16"}
})
minetest.register_node("mk_mapgen:dirt_with_grass", {
description = "bedrock",
tiles = {"[combine:16x16"}
})
local layers = {
[0] = minetest.get_content_id("mk_mapgen:bedrock"),
[1] = minetest.get_content_id("mk_mapgen:dirt"),
[2] = minetest.get_content_id("mk_mapgen:dirt"),
[3] = minetest.get_content_id("mk_mapgen:dirt_with_grass"),
}
local gminy, gmaxy = 0, 0
for key, _ in pairs(layers) do
if gminy > key then gminy = key end
if gmaxy < key then gmaxy = key end
end
minetest.register_on_generated(function(minp, maxp, blockseed)
if minp.y > gmaxy or maxp.y < gminy then return end
local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
local area = VoxelArea:new{MinEdge=emin, MaxEdge=emax}
local data = vm:get_data()
for z = minp.z, maxp.z do
for x = minp.x, maxp.x do
for y = minp.y, maxp.y do
local vi = area:index(x, y, z)
if layers[y] then data[vi] = layers[y] end
end
end
end
vm:set_data(data)
vm:set_lighting({day = 0, night = 0})
vm:update_liquids()
vm:calc_lighting()
vm:write_to_map(data)
end)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment