2020-06-01 21:19:45 -04:00

78 lines
2.1 KiB
Lua

-- LUALOCALS < ---------------------------------------------------------
local minetest, nodecore, pairs, vector
= minetest, nodecore, pairs, vector
-- LUALOCALS > ---------------------------------------------------------
local modname = minetest.get_current_modname()
local spongedirs = {
{x = 1, y = 0, z = 0},
{x = -1, y = 0, z = 0},
{x = 0, y = 0, z = 1},
{x = 0, y = 0, z = -1}
}
local watersrc = "nc_terrain:water_gray_source"
local waterflow = "nc_terrain:water_gray_flowing"
local spongewet = modname .. ":sponge_wet"
local spongecache = {}
local function mkwater(pos, srcpos, new)
if new then nodecore.set_loud(pos, {name = watersrc}) end
local meta = minetest.get_meta(pos)
local data = {
srcpos = srcpos,
expire = nodecore.gametime + 10
}
meta:set_string(modname, minetest.serialize(data))
spongecache[minetest.hash_node_position(pos)] = data
end
nodecore.register_craft({
label = "squeeze sponge",
action = "pummel",
toolgroups = {thumpy = 1},
nodes = {
{
match = spongewet
}
},
after = function(pos)
local found
for _, d in pairs(spongedirs) do
local p = vector.add(pos, d)
local nn = minetest.get_node(p).name
if nn == "air" or nn == watersrc
or nn == waterflow then
mkwater(p, pos, nn ~= watersrc)
found = true
end
end
if found then nodecore.node_sound(pos, "dig") end
end
})
local function rmwater(pos)
nodecore.node_sound(pos, "dig")
return minetest.set_node(pos, {name = waterflow, param2 = 7})
end
nodecore.register_limited_abm({
interval = 1,
chance = 1,
nodenames = {watersrc},
action = function(pos)
local data = spongecache[minetest.hash_node_position(pos)]
if not data then
data = minetest.get_meta(pos):get_string(modname)
data = data and data ~= "" and minetest.deserialize(data)
end
if not data then return rmwater(pos) end
local snode = minetest.get_node(data.srcpos)
if snode.name == "ignore" then return end
if snode.name ~= spongewet then return rmwater(pos) end
if nodecore.gametime > data.expire then return rmwater(pos) end
end
})