diff --git a/elepower_fapi/bucket.lua b/elepower_fapi/bucket.lua new file mode 100644 index 0000000..0d93328 --- /dev/null +++ b/elepower_fapi/bucket.lua @@ -0,0 +1,59 @@ + +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 diff --git a/elepower_fapi/buffer.lua b/elepower_fapi/buffer.lua index d871391..60a28ed 100644 --- a/elepower_fapi/buffer.lua +++ b/elepower_fapi/buffer.lua @@ -28,27 +28,30 @@ function elefluid.get_buffer_data(pos, buffer) 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 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 - accepts = true - capacity = fcapacity + fluid = ffluid + amount = fluidcount + capacity = fcapacity + accepts = true + drainable = true end return { - fluid = fluid, - amount = amount, - accepts = accepts, - capacity = capacity, + fluid = fluid, + amount = amount, + accepts = accepts, + capacity = capacity, + drainable = drainable, } end @@ -81,8 +84,8 @@ end function elefluid.can_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 + 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 @@ -116,7 +119,7 @@ end function elefluid.can_take_from_buffer(pos, buffer, count) local bfdata = elefluid.get_buffer_data(pos, buffer) - if not bfdata then return nil end + if not bfdata or not bfdata.drainable then return 0 end local amount = bfdata.amount local take_count = 0 diff --git a/elepower_fapi/init.lua b/elepower_fapi/init.lua index bc5c42c..d5213d3 100644 --- a/elepower_fapi/init.lua +++ b/elepower_fapi/init.lua @@ -13,3 +13,4 @@ dofile(modpath.."/transfer.lua") dofile(modpath.."/transfer_node.lua") dofile(modpath.."/formspec.lua") dofile(modpath.."/buffer.lua") +dofile(modpath.."/bucket.lua") diff --git a/elepower_fapi/mod.conf b/elepower_fapi/mod.conf index 983d9d2..ab91a86 100644 --- a/elepower_fapi/mod.conf +++ b/elepower_fapi/mod.conf @@ -1,4 +1,4 @@ name = elepower_fapi description = Elepower Fluid Transfer API depends = elepower_papi -optional_depends = fluidity +optional_depends = fluidity,bucket diff --git a/elepower_farming/nodes/tree_extractor.lua b/elepower_farming/nodes/tree_extractor.lua index 5fc628f..6982272 100644 --- a/elepower_farming/nodes/tree_extractor.lua +++ b/elepower_farming/nodes/tree_extractor.lua @@ -9,7 +9,7 @@ local fluid_table = { ["default:aspen_tree"] = { fpc = 50, fluid = "elepower_farming:resin_source" }, } -minetest.register_node("elepower_farming:tree_extractor", { +minetest.register_node("elepower_farming:tree_extractor", elefluid.add_bucket_handler({ description = "Tree Fluid Extractor", groups = {fluid_container = 1, oddly_breakable_by_hand = 1, cracky = 1}, tiles = { @@ -23,7 +23,7 @@ minetest.register_node("elepower_farming:tree_extractor", { } }, paramtype2 = "facedir" -}) +})) minetest.register_abm({ nodenames = {"elepower_farming:tree_extractor"}, diff --git a/elepower_farming/nodes/tree_processor.lua b/elepower_farming/nodes/tree_processor.lua index c4eee09..6f22abe 100644 --- a/elepower_farming/nodes/tree_processor.lua +++ b/elepower_farming/nodes/tree_processor.lua @@ -130,12 +130,14 @@ ele.register_machine("elepower_farming:tree_processor", { groups = {ele_user = 1, oddly_breakable_by_hand = 1, cracky = 1, fluid_container = 1}, fluid_buffers = { tree = { - capacity = 8000, - accepts = {"group:tree_fluid"} + capacity = 8000, + accepts = {"group:tree_fluid"}, + drainable = false, }, water = { - capacity = 8000, - accepts = {"default:water_source"} + capacity = 8000, + accepts = {"default:water_source"}, + drainable = false, }, output = { capacity = 8000