94 lines
2.2 KiB
Lua
94 lines
2.2 KiB
Lua
core.register_abm({
|
|
label = "Water freezing",
|
|
nodenames = { "group:water" },
|
|
interval = 1.2,
|
|
chance = 1.8,
|
|
catch_up = true,
|
|
action = function(pos)
|
|
if pos.y < PyuTest.OVERWORLD_SURFACE_BOTTOM and pos.y >= PyuTest.OVERWORLD_DEEP_OCEAN_MIN then
|
|
return
|
|
end
|
|
|
|
local def = PyuTest.get_biome_def(pos)
|
|
if not def then return end
|
|
|
|
local heat = def.heat_point or 50
|
|
local found = core.find_node_near(pos, 2, { "group:emits_heat" }) ~= nil
|
|
|
|
if heat <= PyuTest.WATER_FREEZING_TEMPERATURE and not found then
|
|
core.set_node(pos, { name = "pyutest_blocks:ice_block" })
|
|
end
|
|
end
|
|
})
|
|
|
|
core.register_abm({
|
|
label = "Water evaporating",
|
|
nodenames = { "group:water" },
|
|
interval = 0.1,
|
|
chance = 1,
|
|
action = function(pos)
|
|
local def = PyuTest.get_biome_def(pos)
|
|
if not def then return end
|
|
|
|
local heat = def.heat_point or 50
|
|
|
|
if heat >= PyuTest.WATER_EVAPORATING_TEMPERATURE then
|
|
core.remove_node(pos)
|
|
end
|
|
end
|
|
})
|
|
|
|
core.register_abm({
|
|
label = "Ice thawing",
|
|
nodenames = { "group:thawable" },
|
|
neighbors = { "group:emits_heat" },
|
|
interval = 3,
|
|
chance = 2.5,
|
|
catch_up = true,
|
|
action = function(pos, node)
|
|
local def = core.registered_nodes[node.name]
|
|
local thaw_into = def.__thaw_into or "pyutest_blocks:water_source"
|
|
core.set_node(pos, { name = thaw_into })
|
|
end
|
|
})
|
|
|
|
core.register_abm({
|
|
nodenames = { "group:lava" },
|
|
interval = 1,
|
|
chance = 1,
|
|
action = function(pos)
|
|
local function is_water(p)
|
|
local name = core.get_node(p).name
|
|
|
|
return core.get_item_group(name, "water") ~= 0
|
|
end
|
|
|
|
local function replace(name, p)
|
|
core.set_node(p or pos, { name = name })
|
|
end
|
|
|
|
local p1 = vector.new(pos.x, pos.y + 1, pos.z)
|
|
local p2 = vector.new(pos.x, pos.y - 1, pos.z)
|
|
|
|
if is_water(p1) then
|
|
replace("pyutest_blocks:obsidian_block")
|
|
return
|
|
end
|
|
|
|
if is_water(p2) then
|
|
replace("pyutest_blocks:stone_block", p2)
|
|
return
|
|
end
|
|
|
|
for dx = -1, 1 do
|
|
for dz = -1, 1 do
|
|
local p3 = vector.new(pos.x + dx, pos.y, pos.z + dz)
|
|
if is_water(p3) then
|
|
replace("pyutest_blocks:cobblestone_block")
|
|
return
|
|
end
|
|
end
|
|
end
|
|
end
|
|
})
|