mirror of
https://github.com/Sokomine/replacer.git
synced 2025-07-03 16:40:46 +02:00
Add hud support for replacer and inspector instead of spamming chat and switch replace to shift+RMB to allow repeated replacement by holding keys
This commit is contained in:
37
hud.lua
Normal file
37
hud.lua
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
-- HUD support added by lumberJack
|
||||||
|
|
||||||
|
-- store Hud ids by playername
|
||||||
|
replacer.hud_ids = {};
|
||||||
|
|
||||||
|
function replacer.set_hud(playername, message)
|
||||||
|
local player = minetest.get_player_by_name(playername)
|
||||||
|
if replacer.hud_ids[playername] ~= nil then
|
||||||
|
local id = replacer.hud_ids[playername]
|
||||||
|
player:hud_remove(id)
|
||||||
|
end
|
||||||
|
|
||||||
|
local id = player:hud_add({
|
||||||
|
hud_elem_type = "text",
|
||||||
|
name = "Replacer",
|
||||||
|
number = 0xFFFFFF,
|
||||||
|
position = {x=0.7, y=1},
|
||||||
|
offset = {x=0, y=-8},
|
||||||
|
text = message,
|
||||||
|
scale = {x=200, y=60},
|
||||||
|
alignment = {x=1, y=-1},
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
replacer.hud_ids[playername] = id;
|
||||||
|
|
||||||
|
minetest.after(12, function()
|
||||||
|
if replacer.hud_ids[playername] == id then
|
||||||
|
player:hud_remove(id)
|
||||||
|
end
|
||||||
|
end);
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_on_leaveplayer(function(player, timed_out)
|
||||||
|
local name = player:get_player_name()
|
||||||
|
replacer.hud_ids[name] = nil
|
||||||
|
end)
|
57
init.lua
57
init.lua
@ -57,6 +57,9 @@ replacer.blacklist[ "protector:protect2"] = true;
|
|||||||
|
|
||||||
-- adds a tool for inspecting nodes and entities
|
-- adds a tool for inspecting nodes and entities
|
||||||
dofile(minetest.get_modpath("replacer").."/inspect.lua");
|
dofile(minetest.get_modpath("replacer").."/inspect.lua");
|
||||||
|
-- add support for HUD messenges
|
||||||
|
dofile(minetest.get_modpath("replacer").."/hud.lua");
|
||||||
|
|
||||||
|
|
||||||
minetest.register_tool( "replacer:replacer",
|
minetest.register_tool( "replacer:replacer",
|
||||||
{
|
{
|
||||||
@ -96,35 +99,35 @@ minetest.register_tool( "replacer:replacer",
|
|||||||
-- just place the stored node if now new one is to be selected
|
-- just place the stored node if now new one is to be selected
|
||||||
if( not( keys["sneak"] )) then
|
if( not( keys["sneak"] )) then
|
||||||
|
|
||||||
return replacer.replace( itemstack, placer, pointed_thing, 0 ); end
|
return replacer.replace( itemstack, placer, pointed_thing, 0 );
|
||||||
|
else
|
||||||
|
return replacer.replace( itemstack, placer, pointed_thing, above );
|
||||||
if( pointed_thing.type ~= "node" ) then
|
|
||||||
minetest.chat_send_player( name, " Error: No node selected.");
|
|
||||||
return nil;
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local pos = minetest.get_pointed_thing_position( pointed_thing, under );
|
|
||||||
local node = minetest.get_node_or_nil( pos );
|
|
||||||
|
|
||||||
--minetest.chat_send_player( name, " Target node: "..minetest.serialize( node ).." at pos "..minetest.serialize( pos )..".");
|
|
||||||
local metadata = "default:dirt 0 0";
|
|
||||||
if( node ~= nil and node.name ) then
|
|
||||||
metadata = node.name..' '..node.param1..' '..node.param2;
|
|
||||||
end
|
|
||||||
itemstack:set_metadata( metadata );
|
|
||||||
|
|
||||||
minetest.chat_send_player( name, "Node replacement tool set to: '"..metadata.."'.");
|
|
||||||
|
|
||||||
return itemstack; -- nothing consumed but data changed
|
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
|
||||||
-- on_drop = func(itemstack, dropper, pos),
|
-- on_drop = func(itemstack, dropper, pos),
|
||||||
|
|
||||||
on_use = function(itemstack, user, pointed_thing)
|
on_use = function(itemstack, user, pointed_thing)
|
||||||
|
name = user:get_player_name();
|
||||||
|
if( pointed_thing.type ~= "node" ) then
|
||||||
|
replacer.set_hud( name, " Error: No node selected.");
|
||||||
|
return nil;
|
||||||
|
end
|
||||||
|
|
||||||
return replacer.replace( itemstack, user, pointed_thing, above );
|
local pos = minetest.get_pointed_thing_position( pointed_thing, under );
|
||||||
|
local node = minetest.get_node_or_nil( pos );
|
||||||
|
|
||||||
|
--minetest.chat_send_player( name, " Target node: "..minetest.serialize( node ).." at pos "..minetest.serialize( pos )..".");
|
||||||
|
local metadata = "default:dirt 0 0";
|
||||||
|
if( node ~= nil and node.name ) then
|
||||||
|
metadata = node.name..' '..node.param1..' '..node.param2;
|
||||||
|
end
|
||||||
|
itemstack:set_metadata( metadata );
|
||||||
|
|
||||||
|
replacer.set_hud( name, "Node replacement tool set to: '"..metadata.."'.");
|
||||||
|
|
||||||
|
return itemstack; -- nothing consumed but data changed
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -138,7 +141,7 @@ replacer.replace = function( itemstack, user, pointed_thing, mode )
|
|||||||
--minetest.chat_send_player( name, "You USED this on "..minetest.serialize( pointed_thing )..".");
|
--minetest.chat_send_player( name, "You USED this on "..minetest.serialize( pointed_thing )..".");
|
||||||
|
|
||||||
if( pointed_thing.type ~= "node" ) then
|
if( pointed_thing.type ~= "node" ) then
|
||||||
minetest.chat_send_player( name, " Error: No node.");
|
replacer.set_hud( name, " Error: No node.");
|
||||||
return nil;
|
return nil;
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -149,7 +152,7 @@ replacer.replace = function( itemstack, user, pointed_thing, mode )
|
|||||||
|
|
||||||
if( node == nil ) then
|
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.");
|
replacer.set_hud( name, "Error: Target node not yet loaded. Please wait a moment for the server to catch up.");
|
||||||
return nil;
|
return nil;
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -176,13 +179,13 @@ replacer.replace = function( itemstack, user, pointed_thing, mode )
|
|||||||
end
|
end
|
||||||
|
|
||||||
if( node.name and node.name ~= "" and replacer.blacklist[ node.name ]) then
|
if( node.name and node.name ~= "" and replacer.blacklist[ node.name ]) then
|
||||||
minetest.chat_send_player( name, "Replacing blocks of the type '"..( node.name or "?" )..
|
replacer.set_hud( name, "Replacing blocks of the type '"..( node.name or "?" )..
|
||||||
"' is not allowed on this server. Replacement failed.");
|
"' is not allowed on this server. Replacement failed.");
|
||||||
return nil;
|
return nil;
|
||||||
end
|
end
|
||||||
|
|
||||||
if( replacer.blacklist[ daten[1] ]) then
|
if( replacer.blacklist[ daten[1] ]) then
|
||||||
minetest.chat_send_player( name, "Placing blocks of the type '"..( daten[1] or "?" )..
|
replacer.set_hud( name, "Placing blocks of the type '"..( daten[1] or "?" )..
|
||||||
"' with the replacer is not allowed on this server. Replacement failed.");
|
"' with the replacer is not allowed on this server. Replacement failed.");
|
||||||
return nil;
|
return nil;
|
||||||
end
|
end
|
||||||
@ -214,7 +217,7 @@ replacer.replace = function( itemstack, user, pointed_thing, mode )
|
|||||||
if( not( user:get_inventory():contains_item("main", daten[1]))) then
|
if( not( user:get_inventory():contains_item("main", daten[1]))) then
|
||||||
|
|
||||||
|
|
||||||
minetest.chat_send_player( name, "You have no further '"..( daten[1] or "?" ).."'. Replacement failed.");
|
replacer.set_hud( name, "You have no further '"..( daten[1] or "?" ).."'. Replacement failed.");
|
||||||
return nil;
|
return nil;
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -236,7 +239,7 @@ replacer.replace = function( itemstack, user, pointed_thing, mode )
|
|||||||
if( not( digged_node )
|
if( not( digged_node )
|
||||||
or digged_node.name == node.name ) then
|
or digged_node.name == node.name ) then
|
||||||
|
|
||||||
minetest.chat_send_player( name, "Replacing '"..( node.name or "air" ).."' with '"..( item[ "metadata"] or "?" ).."' failed. Unable to remove old node.");
|
replacer.set_hud( name, "Replacing '"..( node.name or "air" ).."' with '"..( item[ "metadata"] or "?" ).."' failed. Unable to remove old node.");
|
||||||
return nil;
|
return nil;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -93,10 +93,10 @@ replacer.inspect = function( itemstack, user, pointed_thing, mode, show_receipe
|
|||||||
|
|
||||||
end
|
end
|
||||||
text = text..' at '..minetest.pos_to_string( ref:get_pos() );
|
text = text..' at '..minetest.pos_to_string( ref:get_pos() );
|
||||||
minetest.chat_send_player( name, text );
|
replacer.set_hud( name, text );
|
||||||
return nil;
|
return nil;
|
||||||
elseif( pointed_thing.type ~= 'node' ) then
|
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.');
|
replacer.set_hud( name, 'Sorry. This is an unkown something of type \"'..tostring( pointed_thing.type )..'\". No information available.');
|
||||||
return nil;
|
return nil;
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -104,7 +104,7 @@ replacer.inspect = function( itemstack, user, pointed_thing, mode, show_receipe
|
|||||||
local node = minetest.get_node_or_nil( pos );
|
local node = minetest.get_node_or_nil( pos );
|
||||||
|
|
||||||
if( node == nil ) then
|
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.");
|
replacer.set_hud( name, "Error: Target node not yet loaded. Please wait a moment for the server to catch up.");
|
||||||
return nil;
|
return nil;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user