From 9db0dc184c917293d3cbb44f6af82917af08bf55 Mon Sep 17 00:00:00 2001 From: Evert Prants Date: Fri, 24 Aug 2018 21:49:43 +0300 Subject: [PATCH] Bucket now fully supports Node IO --- bucket/depends.txt | 1 + bucket/init.lua | 39 ++++++++++++++++++++++++++++++++------- bucket/mod.conf | 1 + fluid_lib/buffer.lua | 4 ++-- 4 files changed, 36 insertions(+), 9 deletions(-) diff --git a/bucket/depends.txt b/bucket/depends.txt index d15f7fc..005d040 100644 --- a/bucket/depends.txt +++ b/bucket/depends.txt @@ -1,2 +1,3 @@ default fluid_lib +node_io? diff --git a/bucket/init.lua b/bucket/init.lua index c948aa7..99d464a 100644 --- a/bucket/init.lua +++ b/bucket/init.lua @@ -1,6 +1,8 @@ -- Minetest 0.4 mod: bucket -- See README.md for licensing and other information. +local napi = minetest.get_modpath("node_io") + minetest.register_alias("bucket", "bucket:bucket_empty") minetest.register_alias("bucket_water", "bucket:bucket_water") minetest.register_alias("bucket_lava", "bucket:bucket_lava") @@ -112,9 +114,21 @@ function bucket.register_liquid(source, flowing, itemname, inventory_image, name local place = true local ppos = pointed_thing.under local node = minetest.get_node(ppos) - if ndef.node_io_can_put_liquid and ndef.node_io_can_put_liquid(ppos, node, "N") then - if ndef.node_io_room_for_liquid(ppos, node, "N", source, 1000) >= 1000 then - ndef.node_io_put_liquid(ppos, node, "N", user, source, 1000) + + -- Node IO Support + local usedef = ndef + local defpref = "node_io_" + local lookat = "N" + + if napi then + usedef = node_io + lookat = node_io.get_pointed_side(user, pointed_thing) + defpref = "" + end + + if usedef[defpref..'can_put_liquid'] and usedef[defpref..'can_put_liquid'](ppos, node, lookat) then + if usedef[defpref..'room_for_liquid'](ppos, node, lookat, source, 1000) >= 1000 then + usedef[defpref..'put_liquid'](ppos, node, lookat, user, source, 1000) if ndef.on_timer then minetest.get_node_timer(ppos):start(ndef.node_timer_seconds or 1.0) end @@ -242,18 +256,29 @@ minetest.register_craftitem("bucket:bucket_empty", { itemstack = ItemStack("bucket:bucket_empty") + -- Node IO Support + local usedef = ndef + local defpref = "node_io_" + local lookat = "N" + + if napi then + usedef = node_io + lookat = node_io.get_pointed_side(user, pointed_thing) + defpref = "" + end + -- Remove fluid from buffers if present - if ndef.node_io_can_take_liquid and ndef.node_io_can_take_liquid(lpos, node, "N") then - local bfc = ndef.node_io_get_liquid_size(lpos, node, "N") + if usedef[defpref..'can_take_liquid'] and usedef[defpref..'can_take_liquid'](lpos, node, lookat) then + local bfc = usedef[defpref..'get_liquid_size'](lpos, node, lookat) local buffers = {} for i = 1, bfc do - buffers[i] = ndef.node_io_get_liquid_name(lpos, node, "N", i) + buffers[i] = usedef[defpref..'get_liquid_name'](lpos, node, lookat, i) end if #buffers > 0 then for id,fluid in pairs(buffers) do if fluid ~= "" then - local took = ndef.node_io_take_liquid(lpos, node, "", user, fluid, 1000) + local took = usedef[defpref..'take_liquid'](lpos, node, lookat, user, fluid, 1000) if took.millibuckets == 1000 and took.name == fluid then if bucket.liquids[fluid] then itemstack = ItemStack(bucket.liquids[fluid].itemname) diff --git a/bucket/mod.conf b/bucket/mod.conf index 1a24e1f..f2eeab5 100644 --- a/bucket/mod.conf +++ b/bucket/mod.conf @@ -1,2 +1,3 @@ name = bucket depends = default,fluid_lib +optional_depends = node_io diff --git a/fluid_lib/buffer.lua b/fluid_lib/buffer.lua index 568e019..e541e7d 100644 --- a/fluid_lib/buffer.lua +++ b/fluid_lib/buffer.lua @@ -87,8 +87,8 @@ end function fluid_lib.insert_into_buffer(pos, buffer, fluid, count) local bfdata = fluid_lib.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 = fluid_lib.can_insert_into_buffer(pos, buffer, fluid, count)