Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Log bucket liquid placement #3108

Merged
merged 4 commits into from
Apr 13, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 22 additions & 14 deletions mods/bucket/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ local function check_protection(pos, name, text)
return false
end

local function log_action(pos, name, action)
minetest.log("action", (name ~= "" and name or "A mod")
.. " " .. action .. " at " .. minetest.pos_to_string(pos) .. " with a bucket")
end

-- Register a new liquid
-- source = name of the source node
-- flowing = name of the flowing node
Expand Down Expand Up @@ -101,13 +106,13 @@ function bucket.register_liquid(source, flowing, itemname, inventory_image, name
end
end

if check_protection(lpos, user
and user:get_player_name()
or "", "place "..source) then
local pname = user and user:get_player_name() or ""
if check_protection(lpos, pname, "place "..source) then
return
end

minetest.set_node(lpos, {name = source})
log_action(lpos, pname, "placed " .. source)
return ItemStack("bucket:bucket_empty")
end
})
Expand All @@ -128,16 +133,16 @@ minetest.register_craftitem("bucket:bucket_empty", {
return
end
-- Check if pointing to a liquid source
local node = minetest.get_node(pointed_thing.under)
local pos = pointed_thing.under
local node = minetest.get_node(pos)
local liquiddef = bucket.liquids[node.name]
local item_count = user:get_wielded_item():get_count()

if liquiddef ~= nil
and liquiddef.itemname ~= nil
and node.name == liquiddef.source then
if check_protection(pointed_thing.under,
user:get_player_name(),
"take ".. node.name) then
local pname = user:get_player_name()
if check_protection(pos, pname, "take ".. node.name) then
return
end

Expand All @@ -152,9 +157,9 @@ minetest.register_craftitem("bucket:bucket_empty", {
if inv:room_for_item("main", {name=liquiddef.itemname}) then
inv:add_item("main", liquiddef.itemname)
else
local pos = user:get_pos()
pos.y = math.floor(pos.y + 0.5)
minetest.add_item(pos, liquiddef.itemname)
local upos = user:get_pos()
upos.y = math.floor(upos.y + 0.5)
minetest.add_item(upos, liquiddef.itemname)
end

-- set to return empty buckets minus 1
Expand All @@ -166,18 +171,21 @@ minetest.register_craftitem("bucket:bucket_empty", {
local source_neighbor = false
if liquiddef.force_renew then
source_neighbor =
minetest.find_node_near(pointed_thing.under, 1, liquiddef.source)
minetest.find_node_near(pos, 1, liquiddef.source)
end
if not (source_neighbor and liquiddef.force_renew) then
minetest.add_node(pointed_thing.under, {name = "air"})
if source_neighbor and liquiddef.force_renew then
log_action(pos, pname, "picked up " .. liquiddef.source .. " (force renewed)")
sfan5 marked this conversation as resolved.
Show resolved Hide resolved
else
minetest.add_node(pos, {name = "air"})
sfan5 marked this conversation as resolved.
Show resolved Hide resolved
log_action(pos, pname, "picked up " .. liquiddef.source)
end

return ItemStack(giving_back)
else
-- non-liquid nodes will have their on_punch triggered
local node_def = minetest.registered_nodes[node.name]
if node_def then
node_def.on_punch(pointed_thing.under, node, user, pointed_thing)
node_def.on_punch(pos, node, user, pointed_thing)
end
return user:get_wielded_item()
end
Expand Down