From 5b338f0d5c3e16f16cec7bb2679f067eca414c0f Mon Sep 17 00:00:00 2001 From: Sokomine Date: Tue, 26 Feb 2019 22:44:33 +0100 Subject: [PATCH] added buttons for removing/digging stations --- elevator.lua | 6 +----- init.lua | 51 +++++++++++++++++++++++++++++++++++++++++++++ locale/de.txt | 2 ++ locale/template.txt | 2 ++ travelnet.lua | 7 +------ 5 files changed, 57 insertions(+), 11 deletions(-) diff --git a/elevator.lua b/elevator.lua index ccbfb0e..a428845 100644 --- a/elevator.lua +++ b/elevator.lua @@ -117,9 +117,7 @@ minetest.register_node("travelnet:elevator", { tiles = travelnet.tiles_elevator, inventory_image = travelnet.elevator_inventory_image, - groups = {cracky=1,choppy=1,snappy=1, - -- for MineClone2 - handy=1, axey=1, pickaxey=1, building_block=1, material_wood=1}, + groups = {}, --cracky=1,choppy=1,snappy=1, light_source = 10, @@ -145,9 +143,7 @@ minetest.register_node("travelnet:elevator", { on_receive_fields = travelnet.on_receive_fields, on_punch = function(pos, node, puncher) - if( not( travelnet.check_if_trying_to_dig( puncher, node ))) then travelnet.update_formspec(pos, puncher:get_player_name()) - end end, can_dig = function( pos, player ) diff --git a/init.lua b/init.lua index a7aab85..7827a70 100644 --- a/init.lua +++ b/init.lua @@ -224,6 +224,7 @@ travelnet.reset_formspec = function( meta ) meta:set_string("formspec", "size[10,6.0]".. "label[2.0,0.0;--> "..S("Configure this travelnet station").." <--]".. + "button_exit[8.0,0.0;2.2,0.7;station_dig;"..S("Remove station").."]".. "field[0.3,1.2;9,0.9;station_name;"..S("Name of this station")..":;".. minetest.formspec_escape(station_name or "").."]".. "label[0.3,1.5;"..S("How do you call this place here? Example: \"my first house\", \"mine\", \"shop\"...").."]".. @@ -461,6 +462,7 @@ travelnet.update_formspec = function( pos, puncher_name, fields ) formspec = formspec.. "label[8.0,1.6;"..S("Position in list:").."]".. "button_exit[11.3,0.0;1.0,0.5;station_exit;"..S("Exit").."]".. + "button_exit[10.0,0.5;2.2,0.7;station_dig;"..S("Remove station").."]".. "button[9.6,1.6;1.4,0.5;move_up;"..S("move up").."]".. "button[10.9,1.6;1.4,0.5;move_down;"..S("move down").."]"; @@ -655,6 +657,50 @@ travelnet.on_receive_fields = function(pos, formname, fields, player) return; end + -- the player wants to remove the station + if( fields.station_dig ) then + local owner = meta:get_string( "owner" ); + + local node = minetest.get_node(pos) + local description = "station" + if( node and node.name and node.name == "travelnet:travelnet") then + description = "travelnet box" + elseif( node and node.name and node.name == "travelnet:elevator") then + description = "elevator" + else + minetest.chat_send_player(name, "Error: Unkown node."); + return + end + -- players with travelnet_remove priv can dig the station + if( not(minetest.check_player_privs(name, {travelnet_remove=true})) + -- the function travelnet.allow_dig(..) may allow additional digging + and not(travelnet.allow_dig( name, owner, network_name )) + -- the owner can remove the station + and owner ~= name + -- stations without owner can be removed by anybody + and owner ~= "") then + minetest.chat_send_player(name, S("This %s belongs to %s. You can't remove it."):format(description, tostring( meta:get_string('owner')))); + return + end + + local pinv = player:get_inventory() + if(not(pinv:room_for_item("main", node.name))) then + minetest.chat_send_player(name, S("You do not have enough room in your inventory.")); + return + end + + -- give the player the box + pinv:add_item("main", node.name) + -- remove the box from the data structure + travelnet.remove_box( pos, nil, meta:to_table(), player ); + -- remove the node as such + minetest.remove_node(pos) + return; + end + + + + -- if the box has not been configured yet if( meta:get_string("station_network")=="" ) then @@ -847,7 +893,12 @@ end travelnet.can_dig = function( pos, player, description ) + -- forbid digging of the travelnet + return false; +end +-- obsolete function +travelnet.can_dig_old = function( pos, player, description ) if( not( player )) then return false; end diff --git a/locale/de.txt b/locale/de.txt index 2675c13..e5f7642 100644 --- a/locale/de.txt +++ b/locale/de.txt @@ -24,6 +24,8 @@ Owned by: = Besitzer: Unless you know what you are doing, leave this empty. = Wenn du nicht weißt, wozu dieses Feld dient, laß es leer. Help = Hilfe Save = Speichern +Remove station = Station entfernen +You do not have enough room in your inventory. = Du hast nicht genug Platz in deinem Inventar. Update failed! Resetting this box on the travelnet. = Aktualisierung gescheitert. Konfiguration der Reisenetz-Box wird zurückgesetzt. Station '%s' = Station '%s' has been reattached to the network '%s'. = wurde dem Netzwerk '%s' wieder hinzugefügt. diff --git a/locale/template.txt b/locale/template.txt index 661dbdd..f247861 100644 --- a/locale/template.txt +++ b/locale/template.txt @@ -24,6 +24,8 @@ Owned by: = Unless you know what you are doing, leave this empty. = Help = Save = +Remove station = +You do not have enough room in your inventory. = Update failed! Resetting this box on the travelnet. = Station '%s' = has been reattached to the network '%s'. = diff --git a/travelnet.lua b/travelnet.lua index 6739f81..56cbf35 100644 --- a/travelnet.lua +++ b/travelnet.lua @@ -43,10 +43,7 @@ minetest.register_node("travelnet:travelnet", { inventory_image = travelnet.travelnet_inventory_image, - groups = {cracky=1,choppy=1,snappy=1, - -- for MineClone2 - handy=1, axey=1, pickaxey=1, building_block=1, material_wood=1}, - + groups = {}, --cracky=1,choppy=1,snappy=1}, light_source = 10, @@ -58,9 +55,7 @@ minetest.register_node("travelnet:travelnet", { on_receive_fields = travelnet.on_receive_fields, on_punch = function(pos, node, puncher) - if( not( travelnet.check_if_trying_to_dig( puncher, node ))) then travelnet.update_formspec(pos, puncher:get_player_name(), nil) - end end, can_dig = function( pos, player )