forked from MineClone5/MineClone5
52 lines
2.3 KiB
Lua
52 lines
2.3 KiB
Lua
local c_dirt_with_grass = minetest.get_content_id("mcl_core:dirt_with_grass")
|
|
local c_dirt_with_grass_snow = minetest.get_content_id("mcl_core:dirt_with_grass_snow")
|
|
local c_top_snow = minetest.get_content_id("mcl_core:snow")
|
|
local c_snow_block = minetest.get_content_id("mcl_core:snowblock")
|
|
|
|
mcl_mapgen.register_on_generated(function(vm_context)
|
|
local minp, maxp = vm_context.minp, vm_context.maxp
|
|
local min_y, max_y = minp.y, maxp.y
|
|
if min_y > mcl_mapgen.overworld.max or max_y < mcl_mapgen.overworld.min then return end
|
|
|
|
vm_context.param2_data = vm_context.param2_data or vm:get_param2_data(vm_context.lvm_param2_buffer)
|
|
vm_context.biomemap = vm_context.biomemap or minetest.get_mapgen_object("biomemap")
|
|
local param2_data = vm_context.param2_data
|
|
local biomemap = vm_context.biomemap
|
|
local vm, data, area = vm_context.vm, vm_context.data, vm_context.area
|
|
|
|
local min_x, min_z = minp.x, minp.z
|
|
local chunksize = max_y - min_y + 1
|
|
|
|
----- Interactive block fixing section -----
|
|
----- The section to perform basic block overrides of the core mapgen generated world. -----
|
|
|
|
-- Snow and sand fixes. This code implements snow consistency
|
|
-- and fixes floating sand and cut plants.
|
|
-- A snowy grass block must be below a top snow or snow block at all times.
|
|
|
|
-- Set param2 (=color) of grass blocks.
|
|
-- Clear snowy grass blocks without snow above to ensure consistency.
|
|
local nodes = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:dirt_with_grass", "mcl_core:dirt_with_grass_snow"})
|
|
|
|
for n=1, #nodes do
|
|
local pos = nodes[n]
|
|
local x, y, z = pos.x, pos.y, pos.z
|
|
local p_pos = area:index(x, y, z)
|
|
local p_pos_above = area:index(x, y + 1, z)
|
|
local biomemap_offset = (z - min_z) * chunksize + x - min_x + 1
|
|
local biome_id = biomemap[biomemap_offset]
|
|
local biome_name = minetest.get_biome_name(biome_id)
|
|
if biome_name then
|
|
local biome = minetest.registered_biomes[biome_name]
|
|
if biome and biome._mcl_biome_type then
|
|
param2_data[p_pos] = biome._mcl_palette_index
|
|
vm_context.write_param2 = true
|
|
end
|
|
end
|
|
if data[p_pos] == c_dirt_with_grass_snow and p_pos_above and data[p_pos_above] ~= c_top_snow and data[p_pos_above] ~= c_snow_block then
|
|
data[p_pos] = c_dirt_with_grass
|
|
vm_context.write = true
|
|
end
|
|
end
|
|
end, 999999999)
|