Add fake player detection. Tested against pipeworks with eating. Fixes #3976

This commit is contained in:
teknomunk 2024-04-01 17:43:13 +00:00
parent d264ba70d8
commit b5025330b9

View file

@ -1,10 +1,23 @@
--local S = minetest.get_translator(minetest.get_current_modname()) --local S = minetest.get_translator(minetest.get_current_modname())
local function is_fake_player(player)
-- Simple checks
if not player then return true end
if player:is_player() == false then return true end
if not player.get_player_name then return true end
-- Check if the player is logged in
local objref = minetest.get_player_by_name( player:get_player_name() )
if not objref then return true end
if objref ~= player then return true end
return false
end
-- wrapper for minetest.item_eat (this way we make sure other mods can't break this one) -- wrapper for minetest.item_eat (this way we make sure other mods can't break this one)
function minetest.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing) function minetest.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing)
if not user or user:is_player() == false then -- Fake players can't eat food
return itemstack if is_fake_player(user) then return itemstack end
end
-- Call on_rightclick if the pointed node defines it -- Call on_rightclick if the pointed node defines it
if pointed_thing.type == "node" then if pointed_thing.type == "node" then