Update for better kompatibility

master^2
daretmavi 2021-02-07 18:13:53 +01:00
parent 46132429b8
commit 41b90f9b26
3 changed files with 252 additions and 172 deletions

View File

@ -39,12 +39,9 @@ local lava_source_def = minetest.deserialize(minetest.serialize(minetest.registe
local lava_flowing_def = minetest.deserialize(minetest.serialize(minetest.registered_nodes[Liquid_name.lava.flowing]))
-- NEW liquid definitions "bucket" liquid
--minetest.log(dump(minetest.registered_nodes[Liquid_name.water.source]))
-- run to gegister ner bucket water type
function bucket.register_bucket_water(source, flowing, name, renewable)
local water_source_def = minetest.deserialize(minetest.serialize(minetest.registered_nodes[source]))
local water_flowing_def = minetest.deserialize(minetest.serialize(minetest.registered_nodes[flowing]))
minetest.log(dump(source:split":"[2]))
local water_mod = source:split":"[1]
local b_prefix = Liquid_name.bucket_prefix
@ -59,62 +56,102 @@ function bucket.register_bucket_water(source, flowing, name, renewable)
Liquid_name.water[source_name]=water_mod..":"..source_name
Liquid_name.water[flowing_name]=water_mod..":"..flowing_name
minetest.log("bucket source: "..dump(Liquid_name.water[source_name]))
minetest.register_node(Liquid_name.water[source_name], water_source_def)
minetest.override_item(Liquid_name.water[source_name], {
description = S("Bucket Water Source"),
liquid_alternative_flowing = Liquid_name.water[flowing_name],
liquid_alternative_source = Liquid_name.water[source_name],
liquid_renewable = renewable,
})
-- Source water definition has to be used an changed
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
-- minetest.override_item(Liquid_name.water[source_name], {
-- description = S("Bucket Water Source"),
-- liquid_alternative_flowing = Liquid_name.water[flowing_name],
-- liquid_alternative_source = Liquid_name.water[source_name],
-- liquid_renewable = renewable,
-- liquid_origin = source, -- NEW - information for ABM to get back to the original liquid after contact with it.
-- })
-- 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.
minetest.registered_nodes[Liquid_name.water[source_name]].groups.dynamic_lava_source_destroys = 1
water_source_def.groups.dynamic_lava_source_destroys = 1
-- node cools lava
minetest.registered_nodes[Liquid_name.water[source_name]].groups.dynamic_cools_lava_source = 1
minetest.registered_nodes[Liquid_name.water[source_name]].groups.dynamic_cools_lava_flowing = 1
water_source_def.groups.dynamic_cools_lava_source = 1
water_source_def.groups.dynamic_cools_lava_flowing = 1
end
minetest.register_node(Liquid_name.water[flowing_name], water_flowing_def)
minetest.override_item(Liquid_name.water[flowing_name], {
description = S("Flowing Bucket Water"),
liquid_alternative_flowing = Liquid_name.water[flowing_name],
liquid_alternative_source = Liquid_name.water[source_name],
liquid_range = bucket_water_range,
liquid_renewable = false,
})
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
-- minetest.override_item(Liquid_name.water[flowing_name], {
-- description = S("Flowing Bucket Water"),
-- liquid_alternative_flowing = Liquid_name.water[flowing_name],
-- liquid_alternative_source = Liquid_name.water[source_name],
-- liquid_range = bucket_water_range,
-- liquid_renewable = false,
-- liquid_origin = flowing, -- NEW - information for ABM to get back to the original liquid after contact with it.
-- })
-- minetest.registered_nodes[Liquid_name.water[flowing_name]].groups.bucket_liquid = 1
-- For dynamic_liquid support
if minetest.get_modpath("dynamic_liquid") then
-- in dynamic_liquid is flowing water not cooling lava
minetest.registered_nodes[Liquid_name.water[flowing_name]].groups.cools_lava = 0
water_flowing_def.groups.cools_lava = 0
-- node is detroyed by lava, Flowing lava will turn these blocks into steam
minetest.registered_nodes[Liquid_name.water[flowing_name]].groups.dynamic_lava_source_destroys = 1
minetest.registered_nodes[Liquid_name.water[flowing_name]].groups.dynamic_lava_flowing_destroys = 1
water_flowing_def.groups.dynamic_lava_source_destroys = 1
water_flowing_def.groups.dynamic_lava_flowing_destroys = 1
-- gedining bucket water as dynamic liquid
dynamic_liquid.liquid_abm(Liquid_name.water[source_name], Liquid_name.water[flowing_name], 1)
-- this new funktion is needed, because setting goups is not enough
-- not implemented in actrual version (12.12.2020) - musst be added, or use fork https://github.com/daretmavi/dynamic_liquid
-- check if add_to_water_nodes is in the mod dynamic_liquid available. _G is a global table on lua that stores every global function in it.
if _G["dynamic_liquid"]["add_to_water_nodes"] then
dynamic_liquid.add_to_water_nodes(Liquid_name.water[source_name], Liquid_name.water[flowing_name])
else
local Dyn_liq_error = S("Mod: dynamic_liquid is not changed. add_to_water_nodes function is missing! Lava colling will not work the same ways, as the default water-lava interaction works.")
minetest.log(Dyn_liq_error)
end
-- -- define bucket water as dynamic liquid
-- dynamic_liquid.liquid_abm(Liquid_name.water[source_name], Liquid_name.water[flowing_name], 1)
--
-- -- this new funktion is needed, because setting goups is not enough
-- -- not implemented in actrual version (12.12.2020) - musst be added, or use fork https://github.com/daretmavi/dynamic_liquid
-- -- check if add_to_water_nodes is in the mod dynamic_liquid available. _G is a global table on lua that stores every global function in it.
-- if _G["dynamic_liquid"]["add_to_water_nodes"] then
-- dynamic_liquid.add_to_water_nodes(Liquid_name.water[source_name], Liquid_name.water[flowing_name])
-- else
-- local Dyn_liq_error = S("Mod: dynamic_liquid is not changed. add_to_water_nodes function is missing! Lava colling will not work the same ways, as the default water-lava interaction works.")
-- minetest.log(Dyn_liq_error)
-- end
end
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]]))
minetest.register_abm({
label = "Water normalization",
nodenames = {Liquid_name.water[source_name], Liquid_name.water[flowing_name]},
neighbors = {source, flowing},
interval = 1.0, -- 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
})
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_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]))
local lava_mod = source:split":"[1]
local b_prefix = Liquid_name.bucket_prefix
@ -129,106 +166,148 @@ function bucket.register_bucket_lava(source, flowing, name, renewable)
Liquid_name.lava[source_name]=lava_mod..":"..source_name
Liquid_name.lava[flowing_name]=lava_mod..":"..flowing_name
minetest.log("bucket source: "..dump(Liquid_name.lava[source_name]))
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
-- minetest.override_item(Liquid_name.lava[source_name], {
-- description = S("Bucket Lava Source"),
-- liquid_alternative_flowing = Liquid_name.lava[flowing_name],
-- liquid_alternative_source = Liquid_name.lava[flowing_name],
-- liquid_renewable = renewable,
-- liquid_origin = source, -- NEW - information for ABM to get back to the original liquid after contact with it.
-- })
-- minetest.registered_nodes[Liquid_name.lava[source_name]].groups.bucket_liquid = 1
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
-- minetest.override_item(Liquid_name.lava[flowing_name], {
-- description = S("Bucket Lava Source"),
-- liquid_alternative_flowing = Liquid_name.lava[flowing_name],
-- liquid_alternative_source = Liquid_name.lava[source_name],
-- liquid_range = bucket_lava_range,
-- liquid_renewable = false,
-- liquid_origin = flowing, -- NEW - information for ABM to get back to the original liquid after contact with it.
-- })
-- minetest.registered_nodes[Liquid_name.lava[flowing_name]].groups.bucket_liquid = 1
minetest.register_node(Liquid_name.lava[source_name], lava_source_def)
minetest.override_item(Liquid_name.lava[source_name], {
description = S("Bucket Lava Source"),
liquid_alternative_flowing = Liquid_name.lava[flowing_name],
liquid_alternative_source = Liquid_name.lava[flowing_name],
liquid_renewable = renewable,
})
minetest.register_node(Liquid_name.lava[flowing_name], lava_flowing_def)
minetest.override_item(Liquid_name.lava[flowing_name], {
description = S("Bucket Lava Source"),
liquid_alternative_flowing = Liquid_name.lava[flowing_name],
liquid_alternative_source = Liquid_name.lava[source_name],
liquid_range = bucket_lava_range,
liquid_renewable = false,
})
-- minetest.log(dump(minetest.registered_nodes[Liquid_name.lava[source_name]]))
-- minetest.log(dump(minetest.registered_nodes[Liquid_name.lava[flowing_name]]))
return {Liquid_name.lava[source_name], Liquid_name.lava[flowing_name]}
end
--TODO Update ABM for new function
-- Change Bucket Water to normal "water_source" on contact with it
minetest.register_abm({
label = "Water Source normalization",
nodenames = {Liquid_name.water.bucket_source},
neighbors = {Liquid_name.water.source,
Liquid_name.water.flowing},
interval = 1.0, -- Run every 1 second
chance = 1, -- Select every 1 nod
action = function(pos, node, active_object_count, active_object_count_wider)
local pos = {x = pos.x, y = pos.y, z = pos.z}
minetest.set_node(pos, {name = Liquid_name.water.source})
end
})
-- minetest.register_abm({
-- label = "Water normalization",
-- nodenames = {"group:bucket_liquid"},
-- neighbors = {"group:liquid"},
-- interval = 1.0, -- 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(neighbors))
-- 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
-- })
--
minetest.register_abm({
label = "Water Flowing normalization",
nodenames = {Liquid_name.water.bucket_flowing},
neighbors = {Liquid_name.water.source,
Liquid_name.water.flowing},
interval = 1.0, -- Run every 1 second
chance = 1, -- Select every 1 nod
action = function(pos, node, active_object_count, active_object_count_wider)
local pos = {x = pos.x, y = pos.y, z = pos.z}
minetest.set_node(pos, {name = Liquid_name.water.flowing})
end
})
-- Change Bucket Water to normal "river_water_source" on contact with it
minetest.register_abm({
label = "River Water Source normalization",
nodenames = {Liquid_name.water.bucket_source},
neighbors = {Liquid_name.water.river_source,
Liquid_name.water.river_flowing},
interval = 1.0, -- Run every 1 second
chance = 1, -- Select every 1 nod
action = function(pos, node, active_object_count, active_object_count_wider)
local pos = {x = pos.x, y = pos.y, z = pos.z}
minetest.set_node(pos, {name = Liquid_name.water.river_source})
end
})
-- Change Bucket Lava to normal on contact with lava or water
minetest.register_abm({
label = "Lava Source normalization",
nodenames = {Liquid_name.lava.bucket_source},
neighbors = {Liquid_name.lava.source,
Liquid_name.lava.flowing,
Liquid_name.water.source,
Liquid_name.water.flowing,
Liquid_name.water.river_source,
Liquid_name.water.river_flowing,
Liquid_name.water.bucket_source,
Liquid_name.water.bucket_flowing},
interval = 1.0, -- Run every 1 second
chance = 1, -- Select every 1 nod
action = function(pos, node, active_object_count, active_object_count_wider)
local pos = {x = pos.x, y = pos.y, z = pos.z}
minetest.set_node(pos, {name = Liquid_name.lava.source})
end
})
-- Bucket flowing Lava to normal on contact with lava or water
minetest.register_abm({
label = "Lava Flowing normalization",
nodenames = {Liquid_name.lava.bucket_flowing},
neighbors = {Liquid_name.lava.source,
Liquid_name.lava.flowing,
Liquid_name.water.source,
Liquid_name.water.flowing,
Liquid_name.water.river_source,
Liquid_name.water.river_flowing,
Liquid_name.water.bucket_source},
interval = 1.0, -- Run every 1 second
chance = 1, -- Select every 1 nod
action = function(pos, node, active_object_count, active_object_count_wider)
local pos = {x = pos.x, y = pos.y, z = pos.z}
minetest.set_node(pos, {name = Liquid_name.lava.flowing})
end
})
-- -- Change Bucket Water to normal "water_source" on contact with it
-- minetest.register_abm({
-- label = "Water Source normalization",
-- nodenames = {Liquid_name.water.bucket_source},
-- neighbors = {Liquid_name.water.source,
-- Liquid_name.water.flowing},
-- interval = 1.0, -- Run every 1 second
-- chance = 1, -- Select every 1 nod
-- action = function(pos, node, active_object_count, active_object_count_wider)
-- local pos = {x = pos.x, y = pos.y, z = pos.z}
-- minetest.set_node(pos, {name = Liquid_name.water.source})
-- end
-- })
--
-- --
-- minetest.register_abm({
-- label = "Water Flowing normalization",
-- nodenames = {Liquid_name.water.bucket_flowing},
-- neighbors = {Liquid_name.water.source,
-- Liquid_name.water.flowing},
-- interval = 1.0, -- Run every 1 second
-- chance = 1, -- Select every 1 nod
-- action = function(pos, node, active_object_count, active_object_count_wider)
-- local pos = {x = pos.x, y = pos.y, z = pos.z}
-- minetest.set_node(pos, {name = Liquid_name.water.flowing})
-- end
-- })
--
-- -- Change Bucket Water to normal "river_water_source" on contact with it
-- minetest.register_abm({
-- label = "River Water Source normalization",
-- nodenames = {Liquid_name.water.bucket_source},
-- neighbors = {Liquid_name.water.river_source,
-- Liquid_name.water.river_flowing},
-- interval = 1.0, -- Run every 1 second
-- chance = 1, -- Select every 1 nod
-- action = function(pos, node, active_object_count, active_object_count_wider)
-- local pos = {x = pos.x, y = pos.y, z = pos.z}
-- minetest.set_node(pos, {name = Liquid_name.water.river_source})
-- end
-- })
--
-- -- Change Bucket Lava to normal on contact with lava or water
-- minetest.register_abm({
-- label = "Lava Source normalization",
-- nodenames = {Liquid_name.lava.bucket_source},
-- neighbors = {Liquid_name.lava.source,
-- Liquid_name.lava.flowing,
-- Liquid_name.water.source,
-- Liquid_name.water.flowing,
-- Liquid_name.water.river_source,
-- Liquid_name.water.river_flowing,
-- Liquid_name.water.bucket_source,
-- Liquid_name.water.bucket_flowing},
-- interval = 1.0, -- Run every 1 second
-- chance = 1, -- Select every 1 nod
-- action = function(pos, node, active_object_count, active_object_count_wider)
-- local pos = {x = pos.x, y = pos.y, z = pos.z}
-- minetest.set_node(pos, {name = Liquid_name.lava.source})
-- end
-- })
--
-- -- Bucket flowing Lava to normal on contact with lava or water
-- minetest.register_abm({
-- label = "Lava Flowing normalization",
-- nodenames = {Liquid_name.lava.bucket_flowing},
-- neighbors = {Liquid_name.lava.source,
-- Liquid_name.lava.flowing,
-- Liquid_name.water.source,
-- Liquid_name.water.flowing,
-- Liquid_name.water.river_source,
-- Liquid_name.water.river_flowing,
-- Liquid_name.water.bucket_source},
-- interval = 1.0, -- Run every 1 second
-- chance = 1, -- Select every 1 nod
-- action = function(pos, node, active_object_count, active_object_count_wider)
-- local pos = {x = pos.x, y = pos.y, z = pos.z}
-- minetest.set_node(pos, {name = Liquid_name.lava.flowing})
-- end
-- })

View File

@ -9,6 +9,7 @@ bucket = {}
bucket.empty = "bucket:bucket_empty" -- empty bucket name prefix
bucket.water = "bucket:bucket_water_uni" -- water bucket name prefix
bucket.water_river = "bucket:bucket_water_river" -- water bucket name prefix -- TODO
bucket.lava = "bucket:bucket_lava_uni" -- lava bucket name prefix
bucket.default = {} -- default bucket names
bucket.default_material = minetest.settings:get("bucket_default_type") or "steel" -- default material for bucket
@ -244,9 +245,7 @@ function bucket.register_liquid(source, flowing, itemname, inventory_image, name
groups, force_renew, giving_back)
if itemname ~= nil then
minetest.log("source: "..dump(source))
minetest.log("flowing: "..dump(flowing))
-- TODO - doplnit pre bucket water aj pre source obycany
local inv_images
@ -284,11 +283,9 @@ function bucket.register_liquid(source, flowing, itemname, inventory_image, name
if minetest.registered_nodes[source].groups.lava then
-- create new bucket lava with reduced flowing
bucket_liq = bucket.register_bucket_lava(source, flowing, name, force_renew)
minetest.log("registrovane: "..dump(bucket_liq))
else
-- create new bucket water with reduced flowing
bucket_liq = bucket.register_bucket_water(source, flowing, name, force_renew)
minetest.log("registrovane: "..dump(bucket_liq))
end
end
@ -457,17 +454,6 @@ for mat_name, mat in pairs(craft_ingreds) do
end
end
-- original bucket - to take the original liquit sources
-- uses new bucket uni
bucket.register_liquid(
Liquid_name.water.source,
Liquid_name.water.flowing,
bucket.water,
{empty = "bucket_uni.png", materials = craft_ingreds, fill = "bucket_uni_water.png"},
S("Water Bucket"),
{tool = 1, water_bucket = 1},
false
)
-- River water source is 'liquid_renewable = false' to avoid horizontal spread
-- of water sources in sloping rivers that can cause water to overflow
@ -478,6 +464,18 @@ bucket.register_liquid(
bucket.register_liquid(
Liquid_name.water.river_source ,
Liquid_name.water.river_flowing,
bucket.water_river,
{empty = "bucket_uni.png", materials = craft_ingreds, fill = "bucket_river_water.png"},
S("River Water Bucket"),
{tool = 1, water_bucket = 1},
false
)
-- original bucket - to take the original liquit sources
-- uses new bucket uni
bucket.register_liquid(
Liquid_name.water.source,
Liquid_name.water.flowing,
bucket.water,
{empty = "bucket_uni.png", materials = craft_ingreds, fill = "bucket_uni_water.png"},
S("Water Bucket"),
@ -498,25 +496,26 @@ bucket.register_liquid(
-- Unified bucket
-- every bucket will be change to this
bucket.register_liquid(
Liquid_name.water.bucket_source,
Liquid_name.water.bucket_flowing,
bucket.water,
{empty = "bucket_uni.png", materials = craft_ingreds, fill = "bucket_uni_water.png"},
S("Water Bucket"),
{tool = 1, water_bucket = 1},
false
)
bucket.register_liquid(
Liquid_name.lava.bucket_source,
Liquid_name.lava.bucket_flowing,
bucket.lava,
{empty = "bucket_uni.png", materials = craft_ingreds, fill = "bucket_uni_lava.png"},
S("Lava Bucket"),
{tool = 1},
false
)
-- TODO - treba ci netreba?
-- bucket.register_liquid(
-- Liquid_name.water.bucket_source,
-- Liquid_name.water.bucket_flowing,
-- bucket.water,
-- {empty = "bucket_uni.png", materials = craft_ingreds, fill = "bucket_uni_water.png"},
-- S("Water Bucket"),
-- {tool = 1, water_bucket = 1},
-- false
-- )
--
-- bucket.register_liquid(
-- Liquid_name.lava.bucket_source,
-- Liquid_name.lava.bucket_flowing,
-- bucket.lava,
-- {empty = "bucket_uni.png", materials = craft_ingreds, fill = "bucket_uni_lava.png"},
-- S("Lava Bucket"),
-- {tool = 1},
-- false
-- )
----
@ -562,3 +561,5 @@ if minetest.global_exists("dungeon_loot") then
end
end
end
minetest.log(dump(minetest.registered_abms))

View File

@ -1,9 +1,9 @@
# textdomain: bucket
Empty Bucket=prázdne vedro
Water Bucket=vedro s vodou
River Water Bucket=Vedro s vodou z rieky
River Water Bucket=vedro s vodou z rieky
Lava Bucket=vedro s lávou
Bucket Water Source= Zdroj vody z vedra
Bucket Water Source=Zdroj vody z vedra
Flowing Bucket Water=Tečúca voda z vedra
Bucket Lava Source=Zdroj lávy z vedra
Flowing Bucket Lava=Tečúca láva z vedra