diff --git a/init.lua b/init.lua index ae73f32..2c6db38 100644 --- a/init.lua +++ b/init.lua @@ -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 diff --git a/inspect.lua b/inspect.lua index bdd54e4..c908d2c 100644 --- a/inspect.lua +++ b/inspect.lua @@ -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' }, } })