parent
1a3252e244
commit
9d8d84573d
56
init.lua
56
init.lua
|
@ -173,19 +173,71 @@ default.cool_lava_source = function()end
|
|||
default.cool_lava_flowing = function()end
|
||||
|
||||
lavacooling_abm("default:lava_source", WATER, "default:obsidian")
|
||||
|
||||
local function cool_wf_vm(pos)
|
||||
local t1 = os.clock()
|
||||
local minp = vector.subtract(pos, 10)
|
||||
local maxp = vector.add(pos, 10)
|
||||
local manip = minetest.get_voxel_manip()
|
||||
local emerged_pos1, emerged_pos2 = manip:read_from_map(minp, maxp)
|
||||
local area = VoxelArea:new({MinEdge=emerged_pos1, MaxEdge=emerged_pos2})
|
||||
local nodes = manip:get_data()
|
||||
|
||||
local basalt = minetest.get_content_id("default:basalt")
|
||||
local cobble = minetest.get_content_id("default:cobble")
|
||||
local lava = minetest.get_content_id("default:lava_flowing")
|
||||
|
||||
for x = minp.x, maxp.x do
|
||||
for y = minp.y, maxp.y do
|
||||
for z = minp.z, maxp.z do
|
||||
local p = {x=x, y=y, z=z}
|
||||
local p_p = area:indexp(p)
|
||||
if nodes[p_p] == lava then
|
||||
if find_coolingnodes(WATER, p) then
|
||||
if y < -10+math.random(5) then
|
||||
nodes[p_p] = basalt
|
||||
else
|
||||
nodes[p_p] = cobble
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
manip:set_data(nodes)
|
||||
manip:write_to_map()
|
||||
print(string.format("[lavacooling] cooled at ("..pos.x.."|"..pos.y.."|"..pos.z..") after ca. %.2fs", os.clock() - t1))
|
||||
local t1 = os.clock()
|
||||
manip:update_map()
|
||||
print(string.format("[lavacooling] map updated after ca. %.2fs", os.clock() - t1))
|
||||
end
|
||||
|
||||
local del1 = 0
|
||||
local count = 0
|
||||
|
||||
minetest.register_abm ({
|
||||
nodenames = {"default:lava_flowing"},
|
||||
interval = 0,
|
||||
chance = 1,
|
||||
action = function (pos)
|
||||
if find_coolingnodes(WATER, pos) then
|
||||
local del2 = tonumber(os.clock())
|
||||
if del2-del1 < 0.1
|
||||
and count > 10 then
|
||||
cool_wf_vm(pos)
|
||||
count = 0
|
||||
elseif find_coolingnodes(WATER, pos) then
|
||||
if pos.y < -10+math.random(5) then
|
||||
coolnode("default:basalt", pos)
|
||||
else
|
||||
coolnode("default:cobble", pos)
|
||||
end
|
||||
|
||||
if del2-del1 < 0.1 then
|
||||
count = count+1
|
||||
end
|
||||
end
|
||||
del1 = del2
|
||||
end,
|
||||
})
|
||||
|
||||
|
|
Loading…
Reference in New Issue