forked from luanti-org/minetest_game
		
	Deduplicate player action logging, silence fake player actions (#2941)
This commit is contained in:
		| @@ -222,21 +222,7 @@ function default.chest.register_chest(prefixed_name, d) | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	def.on_metadata_inventory_move = function(pos, from_list, from_index, | ||||
| 			to_list, to_index, count, player) | ||||
| 		minetest.log("action", player:get_player_name() .. | ||||
| 			" moves stuff in chest at " .. minetest.pos_to_string(pos)) | ||||
| 	end | ||||
| 	def.on_metadata_inventory_put = function(pos, listname, index, stack, player) | ||||
| 		minetest.log("action", player:get_player_name() .. | ||||
| 			" moves " .. stack:get_name() .. | ||||
| 			" to chest at " .. minetest.pos_to_string(pos)) | ||||
| 	end | ||||
| 	def.on_metadata_inventory_take = function(pos, listname, index, stack, player) | ||||
| 		minetest.log("action", player:get_player_name() .. | ||||
| 			" takes " .. stack:get_name() .. | ||||
| 			" from chest at " .. minetest.pos_to_string(pos)) | ||||
| 	end | ||||
| 	default.set_inventory_action_loggers(def, "chest") | ||||
|  | ||||
| 	local def_opened = table.copy(def) | ||||
| 	local def_closed = table.copy(def) | ||||
|   | ||||
| @@ -715,6 +715,47 @@ function default.register_craft_metadata_copy(ingredient, result) | ||||
| 	end) | ||||
| end | ||||
|  | ||||
| -- | ||||
| -- Log API / helpers | ||||
| -- | ||||
|  | ||||
| local log_non_player_actions = minetest.settings:get_bool("log_non_player_actions", false) | ||||
|  | ||||
| local is_pos = function(v) | ||||
| 	return type(v) == "table" and | ||||
| 		type(v.x) == "number" and type(v.y) == "number" and type(v.z) == "number" | ||||
| end | ||||
|  | ||||
| function default.log_player_action(player, ...) | ||||
| 	local msg = player:get_player_name() | ||||
| 	if player.is_fake_player or not player:is_player() then | ||||
| 		if not log_non_player_actions then | ||||
| 			return | ||||
| 		end | ||||
| 		msg = msg .. "(" .. (type(player.is_fake_player) == "string" | ||||
| 			and player.is_fake_player or "*") .. ")" | ||||
| 	end | ||||
| 	for _, v in ipairs({...}) do | ||||
| 		-- translate pos | ||||
| 		local part = is_pos(v) and minetest.pos_to_string(v) or v | ||||
| 		-- no leading spaces before punctuation marks | ||||
| 		msg = msg .. (string.match(part, "^[;,.]") and "" or " ") .. part | ||||
| 	end | ||||
| 	minetest.log("action",  msg) | ||||
| end | ||||
|  | ||||
| function default.set_inventory_action_loggers(def, name) | ||||
| 	def.on_metadata_inventory_move = function(pos, from_list, from_index, | ||||
| 			to_list, to_index, count, player) | ||||
| 		default.log_player_action(player, "moves stuff in", name, "at", pos) | ||||
| 	end | ||||
| 	def.on_metadata_inventory_put = function(pos, listname, index, stack, player) | ||||
| 		default.log_player_action(player, "moves", stack:get_name(), "to", name, "at", pos) | ||||
| 	end | ||||
| 	def.on_metadata_inventory_take = function(pos, listname, index, stack, player) | ||||
| 		default.log_player_action(player, "takes", stack:get_name(), "from", name, "at", pos) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| -- | ||||
| -- NOTICE: This method is not an official part of the API yet. | ||||
|   | ||||
| @@ -2057,10 +2057,9 @@ local function coral_on_place(itemstack, placer, pointed_thing) | ||||
|  | ||||
| 	if minetest.is_protected(pos_under, player_name) or | ||||
| 			minetest.is_protected(pos_above, player_name) then | ||||
| 		minetest.log("action", player_name | ||||
| 			.. " tried to place " .. itemstack:get_name() | ||||
| 			.. " at protected position " | ||||
| 			.. minetest.pos_to_string(pos_under)) | ||||
| 		default.log_player_action(placer, | ||||
| 			"tried to place", itemstack:get_name(), | ||||
| 			"at protected position", pos_under) | ||||
| 		minetest.record_protection_violation(pos_under, player_name) | ||||
| 		return itemstack | ||||
| 	end | ||||
| @@ -2525,7 +2524,7 @@ local function update_bookshelf(pos) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| minetest.register_node("default:bookshelf", { | ||||
| local default_bookshelf_def = { | ||||
| 	description = S("Bookshelf"), | ||||
| 	tiles = {"default_wood.png", "default_wood.png", "default_wood.png", | ||||
| 		"default_wood.png", "default_bookshelf.png", "default_bookshelf.png"}, | ||||
| @@ -2550,21 +2549,6 @@ minetest.register_node("default:bookshelf", { | ||||
| 		end | ||||
| 		return 0 | ||||
| 	end, | ||||
| 	on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) | ||||
| 		minetest.log("action", player:get_player_name() .. | ||||
| 			" moves stuff in bookshelf at " .. minetest.pos_to_string(pos)) | ||||
| 		update_bookshelf(pos) | ||||
| 	end, | ||||
| 	on_metadata_inventory_put = function(pos, listname, index, stack, player) | ||||
| 		minetest.log("action", player:get_player_name() .. | ||||
| 			" puts stuff to bookshelf at " .. minetest.pos_to_string(pos)) | ||||
| 		update_bookshelf(pos) | ||||
| 	end, | ||||
| 	on_metadata_inventory_take = function(pos, listname, index, stack, player) | ||||
| 		minetest.log("action", player:get_player_name() .. | ||||
| 			" takes stuff from bookshelf at " .. minetest.pos_to_string(pos)) | ||||
| 		update_bookshelf(pos) | ||||
| 	end, | ||||
| 	on_blast = function(pos) | ||||
| 		local drops = {} | ||||
| 		default.get_inventory_drops(pos, "books", drops) | ||||
| @@ -2572,7 +2556,9 @@ minetest.register_node("default:bookshelf", { | ||||
| 		minetest.remove_node(pos) | ||||
| 		return drops | ||||
| 	end, | ||||
| }) | ||||
| } | ||||
| default.set_inventory_action_loggers(default_bookshelf_def, "bookshelf") | ||||
| minetest.register_node("default:bookshelf", default_bookshelf_def) | ||||
|  | ||||
| local function register_sign(material, desc, def) | ||||
| 	minetest.register_node("default:sign_wall_" .. material, { | ||||
| @@ -2615,8 +2601,8 @@ local function register_sign(material, desc, def) | ||||
| 				minetest.chat_send_player(player_name, S("Text too long")) | ||||
| 				return | ||||
| 			end | ||||
| 			minetest.log("action", player_name .. " wrote \"" .. text .. | ||||
| 				"\" to the sign at " .. minetest.pos_to_string(pos)) | ||||
| 			default.log_player_action(sender, "wrote \"" .. text .. | ||||
| 				"\" to the sign at", pos) | ||||
| 			local meta = minetest.get_meta(pos) | ||||
| 			meta:set_string("text", text) | ||||
|  | ||||
|   | ||||
| @@ -572,8 +572,7 @@ function default.sapling_on_place(itemstack, placer, pointed_thing, | ||||
| 		return itemstack | ||||
| 	end | ||||
|  | ||||
| 	minetest.log("action", player_name .. " places node " | ||||
| 			.. sapling_name .. " at " .. minetest.pos_to_string(pos)) | ||||
| 	default.log_player_action(placer, "places node", sapling_name, "at", pos) | ||||
|  | ||||
| 	local take_item = not minetest.is_creative_enabled(player_name) | ||||
| 	local newnode = {name = sapling_name} | ||||
|   | ||||
| @@ -178,8 +178,7 @@ farming.place_seed = function(itemstack, placer, pointed_thing, plantname) | ||||
| 	end | ||||
|  | ||||
| 	-- add the node and remove 1 item from the itemstack | ||||
| 	minetest.log("action", player_name .. " places node " .. plantname .. " at " .. | ||||
| 		minetest.pos_to_string(pt.above)) | ||||
| 	default.log_player_action(placer, "places node", plantname, "at", pt.above) | ||||
| 	minetest.add_node(pt.above, {name = plantname, param2 = 1}) | ||||
| 	tick(pt.above) | ||||
| 	if not minetest.is_creative_enabled(player_name) then | ||||
|   | ||||
| @@ -465,9 +465,7 @@ minetest.register_node("tnt:gunpowder", { | ||||
| 	on_punch = function(pos, node, puncher) | ||||
| 		if puncher:get_wielded_item():get_name() == "default:torch" then | ||||
| 			minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) | ||||
| 			minetest.log("action", puncher:get_player_name() .. | ||||
| 				" ignites tnt:gunpowder at " .. | ||||
| 				minetest.pos_to_string(pos)) | ||||
| 			default.log_player_action(puncher, "ignites tnt:gunpowder at", pos) | ||||
| 		end | ||||
| 	end, | ||||
| 	on_blast = function(pos, intensity) | ||||
| @@ -635,9 +633,7 @@ function tnt.register_tnt(def) | ||||
| 				if puncher:get_wielded_item():get_name() == "default:torch" then | ||||
| 					minetest.swap_node(pos, {name = name .. "_burning"}) | ||||
| 					minetest.registered_nodes[name .. "_burning"].on_construct(pos) | ||||
| 					minetest.log("action", puncher:get_player_name() .. | ||||
| 						" ignites " .. node.name .. " at " .. | ||||
| 						minetest.pos_to_string(pos)) | ||||
| 					default.log_player_action(puncher, "ignites", node.name, "at", pos) | ||||
| 				end | ||||
| 			end, | ||||
| 			on_blast = function(pos, intensity) | ||||
|   | ||||
| @@ -49,7 +49,7 @@ local function update_vessels_shelf(pos) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| minetest.register_node("vessels:shelf", { | ||||
| local vessels_shelf_def = { | ||||
| 	description = S("Vessels Shelf"), | ||||
| 	tiles = {"default_wood.png", "default_wood.png", "default_wood.png", | ||||
| 		"default_wood.png", "vessels_shelf.png", "vessels_shelf.png"}, | ||||
| @@ -74,21 +74,6 @@ minetest.register_node("vessels:shelf", { | ||||
| 		end | ||||
| 		return 0 | ||||
| 	end, | ||||
| 	on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) | ||||
| 		minetest.log("action", player:get_player_name() .. | ||||
| 			   " moves stuff in vessels shelf at ".. minetest.pos_to_string(pos)) | ||||
| 		update_vessels_shelf(pos) | ||||
| 	end, | ||||
| 	on_metadata_inventory_put = function(pos, listname, index, stack, player) | ||||
| 		minetest.log("action", player:get_player_name() .. | ||||
| 			   " moves stuff to vessels shelf at ".. minetest.pos_to_string(pos)) | ||||
| 		update_vessels_shelf(pos) | ||||
| 	end, | ||||
| 	on_metadata_inventory_take = function(pos, listname, index, stack, player) | ||||
| 		minetest.log("action", player:get_player_name() .. | ||||
| 			   " takes stuff from vessels shelf at ".. minetest.pos_to_string(pos)) | ||||
| 		update_vessels_shelf(pos) | ||||
| 	end, | ||||
| 	on_blast = function(pos) | ||||
| 		local drops = {} | ||||
| 		default.get_inventory_drops(pos, "vessels", drops) | ||||
| @@ -96,7 +81,9 @@ minetest.register_node("vessels:shelf", { | ||||
| 		minetest.remove_node(pos) | ||||
| 		return drops | ||||
| 	end, | ||||
| }) | ||||
| } | ||||
| default.set_inventory_action_loggers(vessels_shelf_def, "vessels shelf") | ||||
| minetest.register_node("vessels:shelf", vessels_shelf_def) | ||||
|  | ||||
| minetest.register_craft({ | ||||
| 	output = "vessels:shelf", | ||||
|   | ||||
		Reference in New Issue
	
	Block a user