master
Beha 2017-07-03 07:13:16 -04:00
parent c6061c999f
commit 1894adcae6
2 changed files with 54 additions and 33 deletions

View File

@ -1,5 +1,5 @@
--[[
Replacement tool for creative building (Mod for MineTest)
Copyright (C) 2013 Sokomine
@ -20,7 +20,7 @@
-- Version 3.0
-- Changelog:
-- Changelog:
-- 02.10.2014 * Some more improvements for inspect-tool. Added craft-guide.
-- 01.10.2014 * Added inspect-tool.
-- 12.01.2013 * If digging the node was unsuccessful, then the replacement will now fail
@ -29,10 +29,10 @@
-- in order to check if the replacement is allowed
-- 24.04.2013 * param1 and param2 are now stored
-- * hold sneak + right click to store new pattern
-- * right click: place one of the itmes
-- * right click: place one of the itmes
-- * receipe changed
-- * inventory image added
-- adds a function to check ownership of a node; taken from VanessaEs homedecor mod
dofile(minetest.get_modpath("replacer").."/check_owner.lua");
@ -50,18 +50,21 @@ end
local blacklist = Set {
"protector:protect",
"protector:protect2",
"protector:protect3",
"protector:teamprotect",
"protector:pvpprotect",
"air",
}
local replacer_charge = 50000
local replacer_charge_per_node = 500
local replacer_charge_per_node = 200
technic.register_power_tool("replacer:replacer", replacer_charge)
minetest.register_tool( "replacer:replacer",
{
description = "Node Replacement Tool",
groups = {},
groups = {},
inventory_image = "replacer_replacer.png",
wield_image = "",
wield_scale = {x=1,y=1,z=1},
@ -80,7 +83,7 @@ minetest.register_tool( "replacer:replacer",
},
node_placement_prediction = nil,
metadata = minetest.serialize({item = "default:dirt"}), -- default replacement: common dirt
wear_represents = "technic_RE_charge",
on_refill = technic.refill_RE_charge,
@ -93,13 +96,13 @@ minetest.register_tool( "replacer:replacer",
--minetest.chat_send_player( name, "You PLACED this on "..minetest.serialize( pointed_thing )..".");
local keys=placer:get_player_control();
-- just place the stored node if now new one is to be selected
if( not( keys["sneak"] )) then
return replacer.replace( itemstack, placer, pointed_thing, 0 ); end
if( pointed_thing.type ~= "node" ) then
minetest.chat_send_player( name, " Error: No node selected.");
return nil;
@ -107,13 +110,13 @@ minetest.register_tool( "replacer:replacer",
local pos = minetest.get_pointed_thing_position( pointed_thing, under );
local node = minetest.env:get_node_or_nil( pos );
if blacklist[node.name] then
minetest.chat_send_player(name, "You cannot use '"..node.name.."' in a replacer.")
return nil;
end
--minetest.chat_send_player( name, " Target node: "..minetest.serialize( node ).." at pos "..minetest.serialize( pos )..".");
--minetest.chat_send_player( name, " Target node: "..minetest.serialize( node ).." at pos "..minetest.serialize( pos )..".");
local meta = minetest.deserialize(itemstack:get_metadata())
if not meta or not meta.charge then
@ -125,14 +128,15 @@ minetest.register_tool( "replacer:replacer",
else
meta.item = "default:dirt 0 0";
end
itemstack:set_metadata(minetest.serialize(meta))
minetest.chat_send_player( name, "Node replacement tool set to: '"..meta.item.."'.");
itemstack:set_metadata(minetest.serialize(meta))
itemstack:get_meta():set_string("description", "Node Replacement Tool ("..meta.item..")")
minetest.chat_send_player( name, "Node replacement tool set to: '"..meta.item.."'.");
return itemstack -- nothing consumed but data changed
end,
-- on_drop = func(itemstack, dropper, pos),
@ -161,8 +165,8 @@ replacer.replace = function( itemstack, user, pointed_thing, mode )
local pos = minetest.get_pointed_thing_position( pointed_thing, mode );
local node = minetest.env:get_node_or_nil( pos );
--minetest.chat_send_player( name, " Target node: "..minetest.serialize( node ).." at pos "..minetest.serialize( pos )..".");
--minetest.chat_send_player( name, " Target node: "..minetest.serialize( node ).." at pos "..minetest.serialize( pos )..".");
if( node == nil ) then
@ -191,7 +195,7 @@ replacer.replace = function( itemstack, user, pointed_thing, mode )
return nil;
end
if blacklist[daten[1]] then
minetest.chat_send_player(name, "You cannot use '"..node.name.."' in a replacer.")
return nil;
@ -225,7 +229,7 @@ replacer.replace = function( itemstack, user, pointed_thing, mode )
minetest.chat_send_player( name, "You have no further '"..( daten[1] or "?" ).."'. Replacement failed.");
return nil;
end
if meta.charge >= replacer_charge_per_node then
if not technic.creative_mode then
meta.charge = meta.charge - replacer_charge_per_node
@ -240,9 +244,9 @@ replacer.replace = function( itemstack, user, pointed_thing, mode )
-- give the player the item by simulating digging if possible
if( node.name ~= "air"
if( node.name ~= "air"
and node.name ~= "ignore"
and node.name ~= "default:lava_source"
and node.name ~= "default:lava_source"
and node.name ~= "default:lava_flowing"
and node.name ~= "default:water_source"
and node.name ~= "default:water_flowing" ) then
@ -250,13 +254,13 @@ replacer.replace = function( itemstack, user, pointed_thing, mode )
minetest.node_dig( pos, node, user );
local digged_node = minetest.env:get_node_or_nil( pos );
if( not( digged_node )
if( not( digged_node )
or digged_node.name == node.name ) then
minetest.chat_send_player( name, "Replacing '"..( node.name or "air" ).."' with '"..( meta.item or "?" ).."' failed. Unable to remove old node.");
return nil;
end
end
-- consume the item

View File

@ -17,6 +17,16 @@ if( minetest.get_modpath("trees")
replacer.image_replacements[ "default:furnace_active" ] = "oven:oven_active";
end
function getblock(pos)
local function toblock(coord)
return math.floor(coord / 16)
end
if not pos then
return "(?)"
end
return minetest.pos_to_string({x=toblock(pos.x), y=toblock(pos.y), z=toblock(pos.z)})
end
minetest.register_tool( "replacer:inspect",
{
description = "Node inspection tool",
@ -119,6 +129,9 @@ replacer.inspect = function( itemstack, user, pointed_thing, mode, show_receipe
protected_info = 'INFO: You can dig this node, but others can\'t.';
end
text = text..' '..protected_info;
if pos then
text = text..' Block: '..getblock(pos)
end
-- no longer spam the chat; the craft guide is more informative
-- minetest.chat_send_player( name, text );
@ -139,7 +152,7 @@ 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:stick' ] = 'group: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';
@ -285,7 +298,7 @@ replacer.inspect_show_crafting = function( name, node_name, fields )
desc = ' - no description provided - ';
end
local formspec = "size[6,6]"..
local formspec = "size[8,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:]"..
@ -306,8 +319,12 @@ replacer.inspect_show_crafting = function( name, node_name, fields )
end
formspec = formspec..".]";
end
-- show information about protection
formspec = formspec.."label[0.0,4;Block coordinates "..
getblock(fields.pos)
formspec = formspec..".]";
-- 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
@ -365,19 +382,19 @@ replacer.inspect_show_crafting = function( name, node_name, fields )
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]"..
formspec = formspec.."item_image_button[1,1;2.4,2.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]"..
formspec = formspec.."item_image_button[1,1;2.4,2.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]"..
formspec = formspec.."item_image_button[1,1;2.4,2.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' ).."]"..
formspec = formspec.."item_image_button[1,1;2.4,2.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.]';
@ -407,6 +424,6 @@ minetest.register_craft({
output = 'replacer:inspect',
recipe = {
{ 'default:torch' },
{ 'default:stick' },
{ 'group:stick' },
}
})