Depend on fluid_lib.

This commit is contained in:
Evert Prants 2018-06-20 17:09:28 +03:00
parent 8cdd2ec47f
commit 4f184e2325
Signed by: evert
GPG Key ID: 1688DA83D222D0B5
8 changed files with 16 additions and 249 deletions

View File

@ -1,59 +0,0 @@
local b_enabled = minetest.get_modpath("bucket") ~= nil
local function find_fluid(itemname)
for _,data in ipairs(bucket.liquids) do
if data.itemname and data.itemname == itemname then
return data.source
end
end
return nil
end
function elefluid.add_bucket_handler(nodedef)
if not b_enabled then return nodedef end
local orig = nodedef.on_rightclick
nodedef.on_rightclick = function (pos, node, clicker, itemstack, pointed_thing)
local bucket_name = itemstack:get_name()
local action = false
if bucket_name == "bucket:bucket_empty" then
local buffers = elefluid.get_node_buffers(pos)
for buffer in pairs(buffers) do
if elefluid.can_take_from_buffer(pos, buffer, 1000) == 1000 then
local fluid = elefluid.take_from_buffer(pos, buffer, 1000)
if bucket.liquids[fluid] then
itemstack = ItemStack(bucket.liquids[fluid].itemname)
action = true
end
break
end
end
elseif find_fluid(bucket_name) then
local fluid = find_fluid(bucket)
local buffers = elefluid.get_node_buffers(pos)
for buffer in pairs(buffers) do
if elefluid.can_insert_into_buffer(pos, buffer, fluid, 1000) == 1000 then
elefluid.insert_into_buffer(pos, buffer, fluid, 1000)
itemstack = ItemStack("bucket:bucket_empty")
action = true
break
end
end
end
-- Really stupid workaround so that the formspec closes after a bucket action was committed
if action and not orig and clicker then
minetest.close_formspec(clicker:get_player_name(), "")
end
if orig then
return orig(pos, node, clicker, itemstack, pointed_thing)
end
return itemstack
end
return nodedef
end

View File

@ -1,163 +0,0 @@
-- This API is compatible with fluidity.
local fluidmod = minetest.get_modpath("fluidity") ~= nil
local function node_data(pos)
local node = minetest.get_node(pos)
local nodedef = minetest.registered_nodes[node.name]
return node, nodedef
end
function elefluid.get_node_buffers(pos)
local node, nodedef = node_data(pos)
if not nodedef['fluid_buffers'] and not ele.helpers.get_item_group(node.name, "fluidity_tank") then
return nil
end
if fluidmod and ele.helpers.get_item_group(node.name, "fluidity_tank") then
return {fluidity = {}}
end
return nodedef['fluid_buffers']
end
function elefluid.get_buffer_data(pos, buffer)
local node, nodedef = node_data(pos)
local buffers = elefluid.get_node_buffers(pos)
if not buffers[buffer] then
return nil
end
local meta = minetest.get_meta(pos)
local fluid = meta:get_string(buffer .. "_fluid")
local amount = meta:get_int(buffer .. "_fluid_storage")
local capacity = buffers[buffer].capacity
local accepts = buffers[buffer].accepts
local drainable = buffers[buffer].drainable or true
-- Fluidity tanks compatibility
if buffer == "fluidity" then
local ffluid, fluidcount, fcapacity, fbasetank, fmod = fluidity.tanks.get_tank_at(pos)
fluid = ffluid
amount = fluidcount
capacity = fcapacity
accepts = true
drainable = true
end
return {
fluid = fluid,
amount = amount,
accepts = accepts,
capacity = capacity,
drainable = drainable,
}
end
function elefluid.buffer_accepts_fluid(pos, buffer, fluid)
local bfdata = elefluid.get_buffer_data(pos, buffer)
if not bfdata then return false end
if bfdata.accepts == true or bfdata.accepts == fluid then
return true
end
if bfdata.fluid ~= "" and bfdata.fluid ~= fluid then
return false
end
if type(bfdata.accepts) ~= "table" then
bfdata.accepts = { bfdata.accepts }
end
for _,pf in pairs(bfdata.accepts) do
if pf == fluid then
return true
elseif pf:match("^group") and ele.helpers.get_item_group(fluid, pf:gsub("group:", "")) then
return true
end
end
return false
end
function elefluid.can_insert_into_buffer(pos, buffer, fluid, count)
local bfdata = elefluid.get_buffer_data(pos, buffer)
if not bfdata then return 0 end
if bfdata.fluid ~= fluid and bfdata.fluid ~= "" then return 0 end
local can_put = 0
if bfdata.amount + count > bfdata.capacity then
can_put = bfdata.capacity - bfdata.amount
else
can_put = count
end
return can_put
end
function elefluid.insert_into_buffer(pos, buffer, fluid, count)
local bfdata = elefluid.get_buffer_data(pos, buffer)
if not bfdata then return nil end
if bfdata.fluid ~= fluid and bfdata.fluid ~= "" then return nil end
local can_put = elefluid.can_insert_into_buffer(pos, buffer, fluid, count)
if can_put == 0 then return count end
if buffer == "fluidity" then
return fluidity.tanks.fill_tank_at(pos, fluid, count, true)
end
local meta = minetest.get_meta(pos)
meta:set_int(buffer .. "_fluid_storage", bfdata.amount + can_put)
meta:set_string(buffer .. "_fluid", fluid)
return 0
end
function elefluid.can_take_from_buffer(pos, buffer, count)
local bfdata = elefluid.get_buffer_data(pos, buffer)
if not bfdata or not bfdata.drainable then return 0 end
local amount = bfdata.amount
local take_count = 0
if amount < count then
take_count = amount
else
take_count = count
end
return take_count
end
function elefluid.take_from_buffer(pos, buffer, count)
local bfdata = elefluid.get_buffer_data(pos, buffer)
if not bfdata then return nil end
local fluid = bfdata.fluid
local amount = bfdata.amount
local take_count = elefluid.can_take_from_buffer(pos, buffer, count)
if buffer == "fluidity" then
local fname, cf = fluidity.tanks.take_from_tank_at(pos, count, true)
if cf then
count = count - cf
end
return fname, count
end
local new_storage = amount - take_count
if new_storage == 0 then
fluid = ""
end
local meta = minetest.get_meta(pos)
meta:set_int(buffer .. "_fluid_storage", new_storage)
meta:set_string(buffer .. "_fluid", fluid)
return bfdata.fluid, take_count
end

View File

@ -6,11 +6,6 @@ local modpath = minetest.get_modpath(minetest.get_current_modname())
elefluid = rawget(_G, "elefluid") or {} elefluid = rawget(_G, "elefluid") or {}
elefluid.modpath = modpath elefluid.modpath = modpath
elefluid.unit = "mB"
elefluid.unit_description = "milli-bucket"
dofile(modpath.."/transfer.lua") dofile(modpath.."/transfer.lua")
dofile(modpath.."/transfer_node.lua") dofile(modpath.."/transfer_node.lua")
dofile(modpath.."/formspec.lua") dofile(modpath.."/formspec.lua")
dofile(modpath.."/buffer.lua")
dofile(modpath.."/bucket.lua")

View File

@ -1,4 +1,3 @@
name = elepower_fapi name = elepower_fapi
description = Elepower Fluid Transfer API description = Elepower Fluid Transfer API
depends = elepower_papi depends = elepower_papi,fluid_lib
optional_depends = fluidity,bucket

View File

@ -152,7 +152,7 @@ minetest.register_abm({
local srcmeta = minetest.get_meta(srcpos) local srcmeta = minetest.get_meta(srcpos)
local srcdef = minetest.registered_nodes[srcnode.name] local srcdef = minetest.registered_nodes[srcnode.name]
local buffers = elefluid.get_node_buffers(srcpos) local buffers = fluid_lib.get_node_buffers(srcpos)
if not buffers then return nil end if not buffers then return nil end
-- Limit the amount of fluid pumped per cycle -- Limit the amount of fluid pumped per cycle
@ -163,7 +163,7 @@ minetest.register_abm({
for _,pos in pairs(targets) do for _,pos in pairs(targets) do
if not vector.equals(pos, srcpos) then if not vector.equals(pos, srcpos) then
if pumped >= pcapability then break end if pumped >= pcapability then break end
local pp = elefluid.get_node_buffers(pos) local pp = fluid_lib.get_node_buffers(pos)
local changed = false local changed = false
@ -171,18 +171,18 @@ minetest.register_abm({
for name in pairs(pp) do for name in pairs(pp) do
for bname in pairs(buffers) do for bname in pairs(buffers) do
if pumped >= pcapability then break end if pumped >= pcapability then break end
local buffer_data = elefluid.get_buffer_data(srcpos, bname) local buffer_data = fluid_lib.get_buffer_data(srcpos, bname)
local target_data = elefluid.get_buffer_data(pos, name) local target_data = fluid_lib.get_buffer_data(pos, name)
if (target_data.fluid == buffer_data.fluid or target_data.fluid == "") and if (target_data.fluid == buffer_data.fluid or target_data.fluid == "") and
buffer_data.fluid ~= "" and buffer_data.amount > 0 and buffer_data.fluid ~= "" and buffer_data.amount > 0 and
(buffer_data.drainable == nil or buffer_data.drainable == true) and (buffer_data.drainable == nil or buffer_data.drainable == true) and
elefluid.buffer_accepts_fluid(pos, name, buffer_data.fluid) then fluid_lib.buffer_accepts_fluid(pos, name, buffer_data.fluid) then
if elefluid.can_insert_into_buffer(pos, name, buffer_data.fluid, pcapability) > 0 then if fluid_lib.can_insert_into_buffer(pos, name, buffer_data.fluid, pcapability) > 0 then
local res_f, count = elefluid.take_from_buffer(srcpos, bname, pcapability) local res_f, count = fluid_lib.take_from_buffer(srcpos, bname, pcapability)
if count > 0 then if count > 0 then
elefluid.insert_into_buffer(pos, name, res_f, count) fluid_lib.insert_into_buffer(pos, name, res_f, count)
pumped = pumped + count pumped = pumped + count
changed = true changed = true
end end

View File

@ -237,24 +237,19 @@ minetest.register_node("elepower_farming:sludge_flowing", {
sounds = default.node_sound_water_defaults(), sounds = default.node_sound_water_defaults(),
}) })
-- Register buckets
local function bucket_construct(color)
return "bucket.png^(elefarming_bucket_mask.png^[multiply:"..color..")"
end
if minetest.get_modpath("bucket") ~= nil then if minetest.get_modpath("bucket") ~= nil then
bucket.register_liquid("elepower_farming:tree_sap_source", "elepower_farming:tree_sap_flowing", bucket.register_liquid("elepower_farming:tree_sap_source", "elepower_farming:tree_sap_flowing",
"elepower_farming:bucket_tree_sap", bucket_construct("#411400"), "Tree Sap Bucket") "elepower_farming:bucket_tree_sap", "#411400", "Tree Sap Bucket")
bucket.register_liquid("elepower_farming:resin_source", "elepower_farming:resin_flowing", bucket.register_liquid("elepower_farming:resin_source", "elepower_farming:resin_flowing",
"elepower_farming:bucket_resin", bucket_construct("#411401"), "Resin Bucket") "elepower_farming:bucket_resin", "#411401", "Resin Bucket")
bucket.register_liquid("elepower_farming:biomass_source", "elepower_farming:biomass_flowing", bucket.register_liquid("elepower_farming:biomass_source", "elepower_farming:biomass_flowing",
"elepower_farming:bucket_biomass", bucket_construct("#002c01"), "Biomass Bucket") "elepower_farming:bucket_biomass", "#002c01", "Biomass Bucket")
bucket.register_liquid("elepower_farming:biofuel_source", "elepower_farming:biofuel_flowing", bucket.register_liquid("elepower_farming:biofuel_source", "elepower_farming:biofuel_flowing",
"elepower_farming:bucket_biofuel", bucket_construct("#762700"), "Biofuel Bucket") "elepower_farming:bucket_biofuel", "#762700", "Biofuel Bucket")
bucket.register_liquid("elepower_farming:sludge_source", "elepower_farming:sludge_flowing", bucket.register_liquid("elepower_farming:sludge_source", "elepower_farming:sludge_flowing",
"elepower_farming:bucket_sludge", bucket_construct("#121212"), "Sludge Bucket") "elepower_farming:bucket_sludge", "#121212", "Sludge Bucket")
end end

View File

@ -9,7 +9,7 @@ local fluid_table = {
["default:aspen_tree"] = { fpc = 50, fluid = "elepower_farming:resin_source" }, ["default:aspen_tree"] = { fpc = 50, fluid = "elepower_farming:resin_source" },
} }
minetest.register_node("elepower_farming:tree_extractor", elefluid.add_bucket_handler({ minetest.register_node("elepower_farming:tree_extractor", {
description = "Tree Fluid Extractor", description = "Tree Fluid Extractor",
groups = {fluid_container = 1, oddly_breakable_by_hand = 1, cracky = 1}, groups = {fluid_container = 1, oddly_breakable_by_hand = 1, cracky = 1},
tiles = { tiles = {
@ -23,7 +23,7 @@ minetest.register_node("elepower_farming:tree_extractor", elefluid.add_bucket_ha
} }
}, },
paramtype2 = "facedir" paramtype2 = "facedir"
})) })
minetest.register_abm({ minetest.register_abm({
nodenames = {"elepower_farming:tree_extractor"}, nodenames = {"elepower_farming:tree_extractor"},

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB