local doc_identifier = {} doc_identifier.huds = {} doc_identifier.countdown_ids = {} doc_identifier.identify = function(itemstack, user, pointed_thing) local username = user:get_player_name() local show_error = function(username, itype) local message if itype == "item" then message = "The identification tool was unable to extract information from this item." elseif itype == "node" then message = "The identification tool was unable to extract information from this block." end minetest.show_formspec( username, "doc_identifier:error_missing_item_info", "size[12,2;]label[0,0.2;"..minetest.formspec_escape(message).."]button_exit[4.5,1.5;3,1;okay;OK]" ) end if pointed_thing.type == "node" then local pos = pointed_thing.under local node = minetest.get_node(pos) if minetest.registered_nodes[node.name] ~= nil then local nodedef = minetest.registered_nodes[node.name] if(node.name == "ignore") then show_error(username, "node") end if doc.entry_exists("nodes", node.name) then doc.show_entry(username, "nodes", node.name) else show_error(username, "node") end end elseif pointed_thing.type == "object" then local object = pointed_thing.ref local le = object:get_luaentity() if object:is_player() then -- TODO: Players elseif le ~= nil then -- Dropped items if le.name == "__builtin:item" then local itemstring = ItemStack(minetest.deserialize(le:get_staticdata()).itemstring):get_name() if doc.entry_exists("nodes", itemstring) then doc.show_entry(username, "nodes", itemstring) elseif doc.entry_exists("tools", itemstring) then doc.show_entry(username, "tools", itemstring) elseif doc.entry_exists("craftitems", itemstring) then doc.show_entry(username, "craftitems", itemstring) else show_error(username, "item") end end end end return itemstack end function doc_identifier.solid_mode(itemstack, user, pointed_thing) return ItemStack("doc_identifier:identifier_solid") end function doc_identifier.liquid_mode(itemstack, user, pointed_thing) return ItemStack("doc_identifier:identifier_liquid") end minetest.register_tool("doc_identifier:identifier_solid", { description = "Identification tool", tool_capabilities = {}, range = 10, wield_image = "doc_identifier_identifier.png", inventory_image = "doc_identifier_identifier.png", liquids_pointable = false, on_use = doc_identifier.identify, on_place = doc_identifier.liquid_mode, on_secondary_use = doc_identifier.liquid_mode, }) minetest.register_tool("doc_identifier:identifier_liquid", { description = "Identification tool", tool_capabilities = {}, range = 10, groups = { not_in_creative_inventory = 1 }, wield_image = "doc_identifier_identifier_liquid.png", inventory_image = "doc_identifier_identifier_liquid.png", liquids_pointable = true, on_use = doc_identifier.identify, on_place = doc_identifier.solid_mode, on_secondary_use = doc_identifier.solid_mode, }) minetest.register_craft({ output = "doc_identifier:identifier_solid", recipe = { {"group:stick", "group:stick" }, {"", "group:stick"}, {"group:stick", ""} } }) if minetest.get_modpath("default") ~= nil then minetest.register_craft({ output = "doc_identifier:identifier_solid", recipe = { { "default:glass" }, { "group:stick" } } }) end minetest.register_alias("doc_identifier:identifier", "doc_identifier:identifier_solid") -- Add documentation doc.sub.items.set_items_longdesc( { ["doc_identifier:identifier_solid"] = "This useful little helper can be used to quickly learn more about about one's closer environment. It identifies and analyzes blocks and dropped items and it shows extensive information about the item on which it is used." }) doc.sub.items.set_items_usagehelp( { ["doc_identifier:identifier_solid"] = "Punch any block or item about you wish to learn more about. This will open up the Documentation System entry of this particular item. The tool comes in two modes which are changed by a rightclick. In liquid mode (blue) this tool points to liquids as well while in solid mode (red) this is not the case. Liquid mode is required if you want to identify a liquid." })