bucket-lite/bucket_liquids.lua

202 lines
9.1 KiB
Lua

--
-- Load support for MT game translation.
local S = minetest.get_translator("bucket")
-- Default Liquid Namespace
Liquid_name = {}
Liquid_name.water = {}
Liquid_name.lava = {}
-- Default water and lava
Liquid_name.water.source = "default:water_source"
Liquid_name.water.flowing = "default:water_flowing"
Liquid_name.water.river_source = "default:river_water_source"
Liquid_name.water.river_flowing = "default:river_water_flowing"
Liquid_name.lava.source = "default:lava_source"
Liquid_name.lava.flowing = "default:lava_flowing"
--bucket waret and lava
Liquid_name.bucket_prefix = "bucket_" --Prefix for bucket waters definition
-- default bucket water names - not used
Liquid_name.water.bucket_source = "bucket:bucket_water_source"
Liquid_name.water.bucket_flowing = "bucket:bucket_water_flowing"
Liquid_name.lava.bucket_source = "bucket:bucket_lava_source"
Liquid_name.lava.bucket_flowing = "bucket:bucket_lava_flowing"
Liquid_name.water.bucket_river_source = "bucket:bucket_river_water_source"
Liquid_name.water.bucket_river_flowing = "bucket:bucket_river_water_flowing"
-- Liquid flowing range definitions (Default)
local bucket_water_range = 1
local bucket_lava_range = 1
-- load settingtypes
bucket_water_range = minetest.settings:get("bucket_water_flowing_range") or bucket_water_range
bucket_lava_range = minetest.settings:get("bucket_lava_flowing_range") or bucket_lava_range
-- ABM interval for revert bucket water/lava type to original
local bucket_liquid_abm = tonumber(minetest.settings:get("bucket_liquid_abm") or 1)
-- Registred nodes according to aliases
local water_source_def = minetest.deserialize(minetest.serialize(minetest.registered_nodes[Liquid_name.water.source]))
local water_flowing_def = minetest.deserialize(minetest.serialize(minetest.registered_nodes[Liquid_name.water.flowing]))
local lava_source_def = minetest.deserialize(minetest.serialize(minetest.registered_nodes[Liquid_name.lava.source]))
local lava_flowing_def = minetest.deserialize(minetest.serialize(minetest.registered_nodes[Liquid_name.lava.flowing]))
-- NEW liquid definitions "bucket" liquid
-- run to gegister ner bucket water type
function bucket.register_bucket_water(source, flowing, name, renewable)
local water_mod = source:split":"[1] --get source mod name
local b_prefix = Liquid_name.bucket_prefix
-- check source mod of bucket definition
if water_mod == "default" or water_mod == "bucket" then
water_mod = "bucket" -- if defined in this mod
else
b_prefix = b_prefix..water_mod.."_" --defined from ther mod
end
-- Define new bucket water names
local source_name = b_prefix..source:split":"[2]
local flowing_name = b_prefix..flowing:split":"[2]
-- names wit mod prefix
Liquid_name.water[source_name]=water_mod..":"..source_name
Liquid_name.water[flowing_name]=water_mod..":"..flowing_name
-- Source water definition has to be used and changed fot bucket water definition
local water_source_def = minetest.deserialize(minetest.serialize(minetest.registered_nodes[source]))
water_source_def.description = S("Bucket Water Source")
water_source_def.liquid_alternative_flowing = Liquid_name.water[flowing_name]
water_source_def.liquid_alternative_source = Liquid_name.water[source_name]
water_source_def.liquid_renewable = renewable
water_source_def.liquid_origin = source -- NEW - information for ABM to get back to the original liquid after contact with it.
water_source_def.groups.bucket_liquid = 1
-- For dynamic_liquid support
if minetest.get_modpath("dynamic_liquid") then
-- node is detroyed by lava, Lava source blocks will turn these blocks into steam.
water_source_def.groups.dynamic_lava_source_destroys = 1
-- node cools lava
water_source_def.groups.dynamic_cools_lava_source = 1
water_source_def.groups.dynamic_cools_lava_flowing = 1
end
-- Flowing water definition has to be used and changed fot bucket water definition
local water_flowing_def = minetest.deserialize(minetest.serialize(minetest.registered_nodes[flowing]))
water_flowing_def.description = S("Flowing Bucket Water")
water_flowing_def.liquid_alternative_flowing = Liquid_name.water[flowing_name]
water_flowing_def.liquid_alternative_source = Liquid_name.water[source_name]
water_flowing_def.liquid_range = bucket_water_range
water_flowing_def.liquid_renewable = false
water_flowing_def.liquid_origin = flowing -- NEW - information for ABM to get back to the original liquid after contact with it.
water_flowing_def.groups.bucket_liquid = 1
-- For dynamic_liquid support
if minetest.get_modpath("dynamic_liquid") then
-- in dynamic_liquid is flowing water not cooling lava
water_flowing_def.groups.cools_lava = 0
-- node is detroyed by lava, Flowing lava will turn these blocks into steam
water_flowing_def.groups.dynamic_lava_source_destroys = 1
water_flowing_def.groups.dynamic_lava_flowing_destroys = 1
end
-- new water liquids are registered
minetest.register_node(Liquid_name.water[source_name], water_source_def)
minetest.register_node(Liquid_name.water[flowing_name], water_flowing_def)
-- minetest.log(dump(minetest.registered_nodes[Liquid_name.water[source_name]]))
-- minetest.log(dump(minetest.registered_nodes[Liquid_name.water[flowing_name]]))
-- ABM to revert bucket water to original liquid
if bucket_liquid_abm > 0 then
minetest.register_abm({
label = "Water "..source_name.."-"..flowing_name.." normalization",
nodenames = {Liquid_name.water[source_name], Liquid_name.water[flowing_name]},
neighbors = {source, flowing, "group:lava"},
interval = bucket_liquid_abm, -- Run every 1 second
chance = 1, -- Select every 1 nod
action = function(pos, node, active_object_count, active_object_count_wider)
--minetest.log("ZASAH: "..dump(node))
if minetest.registered_nodes[node.name].liquid_origin ~= nil then
local pos = {x = pos.x, y = pos.y, z = pos.z}
minetest.set_node(pos, {name = minetest.registered_nodes[node.name].liquid_origin})
end
end
})
end
-- return new bucket liquid names
return {Liquid_name.water[source_name], Liquid_name.water[flowing_name]}
end
-- run to gegister ner bucket lava type
function bucket.register_bucket_lava(source, flowing, name, renewable)
local lava_mod = source:split":"[1] --get source mod name
local b_prefix = Liquid_name.bucket_prefix
-- check source mod of bucket definition
if lava_mod == "default" or lava_mod == "bucket" then
lava_mod = "bucket" -- if defined in this mod
else
b_prefix = b_prefix..lava_mod.."_" --defined from ther mod
end
-- Define new bucket lava names
local source_name = b_prefix..source:split":"[2]
local flowing_name = b_prefix..flowing:split":"[2]
-- names wit mod prefix
Liquid_name.lava[source_name]=lava_mod..":"..source_name
Liquid_name.lava[flowing_name]=lava_mod..":"..flowing_name
-- Source lava definition has to be used and changed fot bucket lava definition
local lava_source_def = minetest.deserialize(minetest.serialize(minetest.registered_nodes[Liquid_name.lava.source]))
lava_source_def.description = S("Bucket Lava Source")
lava_source_def.liquid_alternative_flowing = Liquid_name.lava[flowing_name]
lava_source_def.liquid_alternative_source = Liquid_name.lava[flowing_name]
lava_source_def.liquid_renewable = renewable
lava_source_def.liquid_origin = source -- NEW - information for ABM to get back to the original liquid after contact with it.
lava_source_def.groups.bucket_liquid = 1
-- Flowing lava definition has to be used and changed fot bucket lava definition
local lava_flowing_def = minetest.deserialize(minetest.serialize(minetest.registered_nodes[Liquid_name.lava.flowing]))
lava_flowing_def.description = S("Bucket Lava Source")
lava_flowing_def.liquid_alternative_flowing = Liquid_name.lava[flowing_name]
lava_flowing_def.liquid_alternative_source = Liquid_name.lava[source_name]
lava_flowing_def.liquid_range = bucket_lava_range
lava_flowing_def.liquid_renewable = false
lava_flowing_def.liquid_origin = flowing -- NEW - information for ABM to get back to the original liquid after contact with it.
lava_flowing_def.groups.bucket_liquid = 1
-- new lava liquids are registered
minetest.register_node(Liquid_name.lava[source_name], lava_source_def)
minetest.register_node(Liquid_name.lava[flowing_name], lava_flowing_def)
-- minetest.log(dump(minetest.registered_nodes[Liquid_name.lava[source_name]]))
-- minetest.log(dump(minetest.registered_nodes[Liquid_name.lava[flowing_name]]))
-- ABM to revert bucket lava to original liquid
if bucket_liquid_abm > 0 then
minetest.register_abm({
label = "Lava "..source_name.."-"..flowing_name.." normalization",
nodenames = {Liquid_name.lava[source_name], Liquid_name.lava[flowing_name]},
neighbors = {source, flowing, "group:water"},
interval = bucket_liquid_abm, -- Run every 1 second
chance = 1, -- Select every 1 nod
action = function(pos, node, active_object_count, active_object_count_wider)
--minetest.log("ZASAH lava: "..dump(node))
if minetest.registered_nodes[node.name].liquid_origin ~= nil then
local pos = {x = pos.x, y = pos.y, z = pos.z}
minetest.set_node(pos, {name = minetest.registered_nodes[node.name].liquid_origin})
end
end
})
end
-- return new bucket liquid names
return {Liquid_name.lava[source_name], Liquid_name.lava[flowing_name]}
end