From b52ede4915759217af4f76a5195cd9e8bc142802 Mon Sep 17 00:00:00 2001
From: Vanessa Ezekowitz <vanessaezekowitz@gmail.com>
Date: Sat, 18 Mar 2017 22:58:55 -0400
Subject: disabled the "inspector" component in the replacer mod, added sofar's
 inspector mod in its stead.

---
 inspector/description.txt        |   1 +
 inspector/init.lua               | 114 +++++++++++
 inspector/mod.conf               |   1 +
 inspector/textures/inspector.png | Bin 0 -> 284 bytes
 replacer/inspect.lua             | 412 ---------------------------------------
 5 files changed, 116 insertions(+), 412 deletions(-)
 create mode 100644 inspector/description.txt
 create mode 100644 inspector/init.lua
 create mode 100644 inspector/mod.conf
 create mode 100644 inspector/textures/inspector.png

diff --git a/inspector/description.txt b/inspector/description.txt
new file mode 100644
index 0000000..a4144f2
--- /dev/null
+++ b/inspector/description.txt
@@ -0,0 +1 @@
+An in-game tool to inspect node parameters and metadata.
diff --git a/inspector/init.lua b/inspector/init.lua
new file mode 100644
index 0000000..f307adc
--- /dev/null
+++ b/inspector/init.lua
@@ -0,0 +1,114 @@
+
+--[[
+
+Copyright (C) 2015 - Auke Kok <sofar@foo-projects.org>
+
+"inspector" is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as
+published by the Free Software Foundation; either version 2.1
+of the license, or (at your option) any later version.
+
+--]]
+
+local function inspect_pos(pos)
+	local node = minetest.get_node(pos)
+	local desc = "===== node data =====\n"
+	desc = desc .. "name = " .. node.name .. "\n"
+	desc = desc .. "param1 = " .. node.param1 .. "\n"
+	desc = desc .. "param2 = " .. node.param2 .. "\n"
+	local light = minetest.get_node_light({x = pos.x, y = pos.y + 1, z = pos.x}, nil)
+	if light then
+		desc = desc .. "light = " .. light .. "\n"
+	end
+
+	local timer = minetest.get_node_timer(pos)
+	if timer:get_timeout() ~= 0 then
+	desc = desc .. "==== node timer ====\n"
+	desc = desc .. "timeout = " .. timer:get_timeout() .. "\n"
+	desc = desc .. "elapsed = " .. timer:get_elapsed() .. "\n"
+	end
+
+	local nodedef = minetest.registered_items[node.name]
+	if nodedef then  -- Some built in nodes have no nodedef
+		desc = desc .. "==== nodedef ====\n"
+		desc = desc .. dump(nodedef) .. "\n"
+	end
+	local meta = minetest.get_meta(pos)
+	local table = meta:to_table()
+	local fields = minetest.serialize(table.fields)
+	desc = desc .. "==== meta ====\n"
+	desc = desc .. "meta.fields = " .. fields .. "\n"
+	desc = desc .. "\n"
+	local inventory = meta:get_inventory()
+	desc = desc .. "meta.inventory = \n"
+	for key, list in pairs(inventory:get_lists()) do
+		desc = desc .. key .. " : \n"
+		local size = #list
+		for i = 1, size do
+			local stack = list[i]
+			if not stack:is_empty() then
+				desc = desc .. "\"" .. stack:get_name() .. "\" - " .. stack:get_count() .. "\n"
+			end
+		end
+	end
+
+	return minetest.formspec_escape(desc)
+end
+
+minetest.register_tool("inspector:inspector", {
+	description = "Inspector Tool",
+	inventory_image = "inspector.png",
+	liquids_pointable = true, -- makes it hard to use underwater.
+
+	on_use = function(itemstack, user, pointed_thing)
+
+		local desc = ""
+		if pointed_thing.type == "nothing" then
+			return
+		elseif pointed_thing.type == "node" then
+
+			local pll = user:get_player_name()
+			local pos = pointed_thing.under
+
+			if pointed_thing.type ~= "node" then
+				desc = "..."
+			else
+				desc = inspect_pos(pos)
+			end
+
+		elseif pointed_thing.type == "object" then
+
+			local ref = pointed_thing.ref
+			local entity = ref:get_luaentity()
+			desc = dump(entity)
+
+		end
+
+		local formspec = "size[12,8]"..
+							 "label[0.5,0.5;Node Information]"..
+							 "textarea[0.5,1.5;11.5,7;text;Contents:;"..
+							 minetest.formspec_escape(desc).."]"..
+							 "button_exit[2.5,7.5;3,1;close;Close]"
+
+		minetest.show_formspec(user:get_player_name(), "inspector:inspector", formspec)
+	end,
+})
+
+minetest.register_chatcommand("inspect", {
+	params = "inspect",
+	description = "inspect a pos",
+	privs = {server = true},
+	func = function(name, param)
+		local paramlist = string.split(param, " ")
+		local pos = {x = paramlist[1], y = paramlist[2], z = paramlist[3]}
+		local desc = inspect_pos(pos)
+		local formspec = "size[12,8]"..
+							 "label[0.5,0.5;Node Information]"..
+							 "textarea[0.5,1.5;11.5,7;text;Contents:;"..
+							 minetest.formspec_escape(desc).."]"..
+							 "button_exit[2.5,7.5;3,1;close;Close]"
+
+		minetest.show_formspec(name, "inspector:inspector", formspec)
+		return true
+	end,
+})
diff --git a/inspector/mod.conf b/inspector/mod.conf
new file mode 100644
index 0000000..26227c6
--- /dev/null
+++ b/inspector/mod.conf
@@ -0,0 +1 @@
+name = inspector
diff --git a/inspector/textures/inspector.png b/inspector/textures/inspector.png
new file mode 100644
index 0000000..62da6ad
Binary files /dev/null and b/inspector/textures/inspector.png differ
diff --git a/replacer/inspect.lua b/replacer/inspect.lua
index 6db5c74..e69de29 100644
--- a/replacer/inspect.lua
+++ b/replacer/inspect.lua
@@ -1,412 +0,0 @@
-
-replacer.image_replacements = {};
-
--- support for RealTest
-if(    minetest.get_modpath("trees")
-   and minetest.get_modpath("core")
-   and minetest.get_modpath("instruments")
-   and minetest.get_modpath("anvil")
-   and minetest.get_modpath("scribing_table")) then
-	replacer.image_replacements[ "group:planks" ] = "trees:pine_planks";
-	replacer.image_replacements[ "group:plank"  ] = "trees:pine_plank";
-	replacer.image_replacements[ "group:wood"   ] = "trees:pine_planks";
-	replacer.image_replacements[ "group:tree"   ] = "trees:pine_log";
-	replacer.image_replacements[ "group:sapling"] = "trees:pine_sapling";
-	replacer.image_replacements[ "group:leaves" ] = "trees:pine_leaves";
-	replacer.image_replacements[ "default:furnace" ] = "oven:oven";
-	replacer.image_replacements[ "default:furnace_active" ] = "oven:oven_active";
-end
-
-minetest.register_tool( "replacer:inspect",
-{
-    description = "Node inspection tool",
-    groups = {}, 
-    inventory_image = "replacer_inspect.png",
-    wield_image = "",
-    wield_scale = {x=1,y=1,z=1},
-    liquids_pointable = true, -- it is ok to request information about liquids
-    -- the tool_capabilities are of no intrest here; it is not for digging
-    tool_capabilities = {
-        full_punch_interval = 1.0,
-        max_drop_level=0,
-        groupcaps={
-            fleshy={times={[2]=0.80, [3]=0.40}, maxwear=0.05, maxlevel=1},
-            snappy={times={[2]=0.80, [3]=0.40}, maxwear=0.05, maxlevel=1},
-            choppy={times={[3]=0.90}, maxwear=0.05, maxlevel=0}
-        }
-    },
-    node_placement_prediction = nil,
-
-    on_use = function(itemstack, user, pointed_thing)
-
-       return replacer.inspect( itemstack, user, pointed_thing, nil, true ); --false );
-    end,
-
-    on_place = function(itemstack, placer, pointed_thing)
-
-       return replacer.inspect( itemstack, placer, pointed_thing, nil, true );
-    end,
-})
-
-
-replacer.inspect = function( itemstack, user, pointed_thing, mode, show_receipe )
-
-	if( user == nil or pointed_thing == nil) then
-		return nil;
-	end
-	local name = user:get_player_name();
-	local keys = user:get_player_control();
-	if( keys["sneak"] ) then
-		show_receipe = true;
-	end
- 
-	if(     pointed_thing.type == 'object' ) then
-		local text = 'This is ';
-		local ref = pointed_thing.ref;
-		if( not( ref )) then
-			text = text..'a borken object. We have no further information about it. It is located';
-		elseif( ref:is_player()) then
-			text = text..'your fellow player \"'..tostring( ref:get_player_name() )..'\"';
-		else
-			local luaob = ref:get_luaentity();
-			if( luaob ) then
-				text = text..'entity \"'..tostring( luaob.name )..'\"';
-				local sdata = luaob:get_staticdata();
-				if( sdata ) then
-					sdata = minetest.deserialize( sdata );
-					if( sdata.itemstring ) then
-						text = text..' ['..tostring( sdata.itemstring )..']';
-						if( show_receipe ) then
-							-- the fields part is used here to provide additional information about the entity
-							replacer.inspect_show_crafting( name, sdata.itemstring, { pos=pos, luaob=luaob} );
-						end
-					end
-					if( sdata.age ) then
-						text = text..', dropped '..tostring( math.floor( sdata.age/60 ))..' minutes ago';
-					end
-				end
-			else
-				text = text..'object \"'..tostring( ref:get_entity_name() )..'\"';
-			end
-
-		end
-		text = text..' at '..minetest.pos_to_string( ref:getpos() );
-		minetest.chat_send_player( name, text );
-		return nil;
-	elseif( pointed_thing.type ~= 'node' ) then
-		minetest.chat_send_player( name, 'Sorry. This is an unkown something of type \"'..tostring( pointed_thing.type )..'\". No information available.');
-		return nil;
-	end
-	
-	local pos  = minetest.get_pointed_thing_position( pointed_thing, mode );
-	local node = minetest.get_node_or_nil( pos );
-       
-	if( node == nil ) then
-		minetest.chat_send_player( name, "Error: Target node not yet loaded. Please wait a moment for the server to catch up.");
-		return nil;
-	end
-
-	local text = ' ['..tostring( node.name )..'] with param2='..tostring( node.param2 )..' at '..minetest.pos_to_string( pos )..'.';	
-	if( not( minetest.registered_nodes[ node.name ] )) then
-		text = 'This node is an UNKOWN block'..text;
-	else
-		text = 'This is a \"'..tostring( minetest.registered_nodes[ node.name ].description or ' - no description provided -')..'\" block'..text;
-	end
-	local protected_info = "";
-	if( minetest.is_protected(     pos, name )) then
-		protected_info = 'WARNING: You can\'t dig this node. It is protected.';
-	elseif( minetest.is_protected( pos, '_THIS_NAME_DOES_NOT_EXIST_' )) then
-		protected_info = 'INFO: You can dig this node, but others can\'t.';
-	end
-	text = text..' '..protected_info;
--- no longer spam the chat; the craft guide is more informative
---	minetest.chat_send_player( name, text );
-	
-	if( show_receipe ) then
-		-- get light of the node at the current time
-		local light = minetest.get_node_light(pos, nil);
-		if( light==0 ) then
-			light = minetest.get_node_light( {x=pos.x,y=pos.y+1,z=pos.z});
-		end
-		-- the fields part is used here to provide additional information about the node
-		replacer.inspect_show_crafting( name, node.name, {pos=pos, param2=node.param2, light=light, protected_info=protected_info} );
-	end
-	return nil; -- no item shall be removed from inventory
-end
-
--- some common groups
-replacer.group_placeholder = {};
-replacer.group_placeholder[ 'group:wood'  ] = 'default:wood';
-replacer.group_placeholder[ 'group:tree'  ] = 'default:tree';
-replacer.group_placeholder[ 'group:sapling']= 'default:sapling';
-replacer.group_placeholder[ 'group:stick' ] = 'default:stick';
-replacer.group_placeholder[ 'group:stone' ] = 'default:cobble'; -- 'default:stone';  point people to the cheaper cobble
-replacer.group_placeholder[ 'group:sand'  ] = 'default:sand';
-replacer.group_placeholder[ 'group:leaves'] = 'default:leaves';
-replacer.group_placeholder[ 'group:wood_slab'] = 'stairs:slab_wood';
-replacer.group_placeholder[ 'group:wool'  ] = 'wool:white';
-
-
--- handle the standard dye color groups
-if( minetest.get_modpath("dye") and dye and dye.basecolors) then
-	for i,color in ipairs( dye.basecolors ) do
-		local def = minetest.registered_items[ "dye:"..color ];
-		if( def and def.groups ) then
-			for k,v in pairs( def.groups ) do
-				if( k ~= 'dye' ) then
-					replacer.group_placeholder[ 'group:dye,'..k ] = 'dye:'..color;
-				end
-			end
-			replacer.group_placeholder[ 'group:flower,color_'..color ] = 'dye:'..color;
-		end
-	end
-end 
-
-replacer.image_button_link = function( stack_string )
-	local group = '';
-	if( replacer.image_replacements[ stack_string ] ) then
-		stack_string = replacer.image_replacements[ stack_string ];
-	end
-	if( replacer.group_placeholder[ stack_string ] ) then
-		stack_string = replacer.group_placeholder[ stack_string ];
-		group = 'G';
-	end		
--- TODO: show information about other groups not handled above
-	local stack = ItemStack( stack_string );
-	local new_node_name = stack_string;
-	if( stack and stack:get_name()) then
-		new_node_name = stack:get_name();
-	end
-	return tostring( stack_string )..';'..tostring( new_node_name )..';'..group;
-end
-
-replacer.add_circular_saw_receipe = function( node_name, receipes )
-	if( not( node_name ) or not( minetest.get_modpath("moreblocks")) or not( circular_saw ) or not( circular_saw.names) or (node_name=='moreblocks:circular_saw')) then
-		return;
-	end
-	local help = node_name:split( ':' );
-	if( not( help ) or #help ~= 2 or help[1]=='stairs') then
-		return;
-	end
-	help2 = help[2]:split('_');
-	if( not( help2 ) or #help2 < 2 or (help2[1]~='micro' and help2[1]~='panel' and help2[1]~='stair' and help2[1]~='slab')) then
-		return;
-	end
---	for i,v in ipairs( circular_saw.names ) do
---		modname..":"..v[1].."_"..material..v[2]
-
--- TODO: write better and more correct method of getting the names of the materials
--- TODO: make sure only nodes produced by the saw are listed here
-help[1]='default';
-	local basic_node_name = help[1]..':'..help2[2];
-	-- node found that fits into the saw
-	receipes[ #receipes+1 ] = { method = 'saw',          type = 'saw',          items = { basic_node_name }, output = node_name};
-	return receipes;
-end
-
-replacer.add_colormachine_receipe = function( node_name, receipes )
-	if( not( minetest.get_modpath("colormachine")) or not( colormachine )) then
-		return;
-	end
-	local res = colormachine.get_node_name_painted( node_name, "" );
-
-	if( not( res) or not( res.possible  ) or #res.possible < 1 ) then
-		return;
-	end
-	-- paintable node found
-	receipes[ #receipes+1 ] = { method = 'colormachine', type = 'colormachine', items = { res.possible[1] }, output = node_name};
-	return receipes;
-end
-
-
-replacer.inspect_show_crafting = function( name, node_name, fields )
-	if( not( name )) then
-		return;
-	end
-
-	local receipe_nr = 1;
-	if( not( node_name )) then
-		node_name  = fields.node_name;
-		receipe_nr = tonumber(fields.receipe_nr);
-	end
-	-- turn it into an item stack so that we can handle dropped stacks etc
-	local stack = ItemStack( node_name );
-	node_name = stack:get_name();
-
-	-- the player may ask for receipes of indigrents to the current receipe
-	if( fields ) then
-		for k,v in pairs( fields ) do
-			if( v and v=="" and (minetest.registered_items[ k ]
-			                 or  minetest.registered_nodes[ k ]
-			                 or  minetest.registered_craftitems[ k ]
-			                 or  minetest.registered_tools[ k ] )) then
-				node_name = k;
-				receipe_nr = 1;
-			end
-		end
-	end
-
-	local res = minetest.get_all_craft_recipes( node_name );
-	if( not( res )) then
-		res = {};
-	end
-	-- add special receipes for nodes created by machines
-	replacer.add_circular_saw_receipe( node_name, res );
-	replacer.add_colormachine_receipe( node_name, res );
-
-	-- offer all alternate creafting receipes thrugh prev/next buttons
-	if(     fields and fields.prev_receipe and receipe_nr > 1 ) then
-		receipe_nr = receipe_nr - 1;
-	elseif( fields and fields.next_receipe and receipe_nr < #res ) then
-		receipe_nr = receipe_nr + 1;
-	end
-
-	local desc = nil;
-	if(     minetest.registered_nodes[ node_name ] ) then
-		if(     minetest.registered_nodes[ node_name ].description
-		    and minetest.registered_nodes[ node_name ].description~= "") then
-			desc = "\""..minetest.registered_nodes[ node_name ].description.."\" block";
-		elseif( minetest.registered_nodes[ node_name ].name ) then
-			desc = "\""..minetest.registered_nodes[ node_name ].name.."\" block";
-		else
-			desc = " - no description provided - block";
-		end
-	elseif( minetest.registered_items[ node_name ] ) then
-		if(     minetest.registered_items[ node_name ].description 
-		    and minetest.registered_items[ node_name ].description~= "") then
-			desc = "\""..minetest.registered_items[ node_name ].description.."\" item";
-		elseif( minetest.registered_items[ node_name ].name ) then
-			desc = "\""..minetest.registered_items[ node_name ].name.."\" item";
-		else
-			desc = " - no description provided - item";
-		end
-	end
-	if( not( desc ) or desc=="") then
-		desc = ' - no description provided - ';
-	end
-		
-	local formspec = "size[6,6]"..
-		"label[0,5.5;This is a "..minetest.formspec_escape( desc )..".]"..
-		"button_exit[5.0,4.3;1,0.5;quit;Exit]"..
-		"label[0,0;Name:]"..
-		"field[20,20;0.1,0.1;node_name;node_name;"..node_name.."]".. -- invisible field for passing on information
-		"field[21,21;0.1,0.1;receipe_nr;receipe_nr;"..tostring( receipe_nr ).."]".. -- another invisible field
-		"label[1,0;"..tostring( node_name ).."]"..
-		"item_image_button[5,2;1.0,1.0;"..tostring( node_name )..";normal;]";
-
-	-- provide additional information regarding the node in particular that has been inspected
-	if( fields.pos ) then
-		formspec = formspec.."label[0.0,0.3;Located at "..
-			minetest.formspec_escape( minetest.pos_to_string( fields.pos ));
-		if( fields.param2 ) then
-			formspec = formspec.." with param2="..tostring( fields.param2 );
-		end
-		if( fields.light ) then
-			formspec = formspec.." and receiving "..tostring( fields.light ).." light";
-		end
-		formspec = formspec..".]";	
-	end
-
-	-- show information about protection
-	if( fields.protected_info and fields.protected_info ~= "" ) then
-		formspec = formspec.."label[0.0,4.5;"..minetest.formspec_escape( fields.protected_info ).."]";
-	end
-
-	if( not( res ) or receipe_nr > #res or receipe_nr < 1 ) then
-		receipe_nr = 1;
-	end
-	if( res and receipe_nr > 1 ) then
-		formspec = formspec.."button[3.8,5;1,0.5;prev_receipe;prev]";
-	end
-	if( res and receipe_nr < #res ) then
-		formspec = formspec.."button[5.0,5.0;1,0.5;next_receipe;next]";
-	end
-	if( not( res ) or #res<1) then
-		formspec = formspec..'label[3,1;No receipes.]';
-		if(   minetest.registered_nodes[ node_name ]
-		  and minetest.registered_nodes[ node_name ].drop ) then
-			local drop = minetest.registered_nodes[ node_name ].drop;
-			if( drop ) then
-				if(     type( drop )=='string' and drop ~= node_name ) then
-					formspec = formspec.."label[2,1.6;Drops on dig:]"..
-						"item_image_button[2,2;1.0,1.0;"..replacer.image_button_link( drop ).."]";
-				elseif( type( drop )=='table' and drop.items ) then
-					local droplist = {};
-					for _,drops in ipairs( drop.items ) do
-						for _,item in ipairs( drops.items ) do
-							-- avoid duplicates; but include the item itshelf
-							droplist[ item ] = 1;
-						end
-					end
-					local i = 1;
-					formspec = formspec.."label[2,1.6;May drop on dig:]";
-					for k,v in pairs( droplist ) do
-						formspec = formspec..
-							"item_image_button["..(((i-1)%3)+1)..","..math.floor(((i-1)/3)+2)..";1.0,1.0;"..replacer.image_button_link( k ).."]";
-						i = i+1;
-					end
-				end
-			end
-		end
-	else
-		formspec = formspec.."label[1,5;Alternate "..tostring( receipe_nr ).."/"..tostring( #res ).."]";
-		-- reverse order; default receipes (and thus the most intresting ones) are usually the oldest
-		local receipe = res[ #res+1-receipe_nr ];
-		if(     receipe.type=='normal'  and receipe.items) then
-			local width = receipe.width;
-			if( not( width ) or width==0 ) then
-				width = 3;
-			end
-			for i=1,9 do
-				if( receipe.items[i] ) then
-					formspec = formspec.."item_image_button["..(((i-1)%width)+1)..','..(math.floor((i-1)/width)+1)..";1.0,1.0;"..
-							replacer.image_button_link( receipe.items[i] ).."]";
-				end
-			end
-		elseif( receipe.type=='cooking' and receipe.items and #receipe.items==1
-		    and receipe.output=="" ) then
-			formspec = formspec.."item_image_button[1,1;3.4,3.4;"..replacer.image_button_link( 'default:furnace_active' ).."]".. --default_furnace_front.png]"..
-					"item_image_button[2.9,2.7;1.0,1.0;"..replacer.image_button_link( receipe.items[1] ).."]"..
-					"label[1.0,0;"..tostring(receipe.items[1]).."]"..
-					"label[0,0.5;This can be used as a fuel.]";
-		elseif( receipe.type=='cooking' and receipe.items and #receipe.items==1 ) then
-			formspec = formspec.."item_image_button[1,1;3.4,3.4;"..replacer.image_button_link( 'default:furnace' ).."]".. --default_furnace_front.png]"..
-					"item_image_button[2.9,2.7;1.0,1.0;"..replacer.image_button_link( receipe.items[1] ).."]";
-		elseif( receipe.type=='colormachine' and receipe.items and #receipe.items==1 ) then
-			formspec = formspec.."item_image_button[1,1;3.4,3.4;"..replacer.image_button_link( 'colormachine:colormachine' ).."]".. --colormachine_front.png]"..
-					"item_image_button[2,2;1.0,1.0;"..replacer.image_button_link( receipe.items[1] ).."]";
-		elseif( receipe.type=='saw'          and receipe.items and #receipe.items==1 ) then
-			--formspec = formspec.."item_image[1,1;3.4,3.4;moreblocks:circular_saw]"..
-			formspec = formspec.."item_image_button[1,1;3.4,3.4;"..replacer.image_button_link( 'moreblocks:circular_saw' ).."]"..
-					"item_image_button[2,0.6;1.0,1.0;"..replacer.image_button_link( receipe.items[1] ).."]";
-		else
-			formspec = formspec..'label[3,1;Error: Unkown receipe.]';
-		end
-		-- show how many of the items the receipe will yield
-		local outstack = ItemStack( receipe.output );
-		if( outstack and outstack:get_count() and outstack:get_count()>1 ) then
-			formspec = formspec..'label[5.5,2.5;'..tostring( outstack:get_count() )..']';
-		end
-	end
-	minetest.show_formspec( name, "replacer:crafting", formspec );
-end
-
--- translate general formspec calls back to specific calls
-replacer.form_input_handler = function( player, formname, fields)
-        if( formname and formname == "replacer:crafting" and player and not( fields.quit )) then
-		replacer.inspect_show_crafting( player:get_player_name(), nil, fields );
-                return;
-        end
-end
-
--- establish a callback so that input from the player-specific formspec gets handled
-minetest.register_on_player_receive_fields( replacer.form_input_handler );
-
-
-minetest.register_craft({
-        output = 'replacer:inspect',
-        recipe = {
-                { 'default:torch' },
-                { 'default:stick' },
-        }
-})
-- 
cgit v1.2.3