diff --git a/init.lua b/init.lua index 0d7e955..c75b6af 100755 --- a/init.lua +++ b/init.lua @@ -194,7 +194,7 @@ minetest.register_node("teleport_potion:potion", { end, }) --- teleport potion recipe +--[[ teleport potion recipe minetest.register_craft({ output = "teleport_potion:potion", recipe = { @@ -202,7 +202,7 @@ minetest.register_craft({ {"default:diamond", "vessels:glass_bottle", "default:diamond"}, {"", "default:diamond", ""}, }, -}) +})]] -- teleport pad minetest.register_node("teleport_potion:pad", { @@ -227,19 +227,25 @@ minetest.register_node("teleport_potion:pad", { fixed = {-0.5, -0.5, -0.5, 0.5, -6/16, 0.5} }, - on_construct = function(pos) + after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name() or "") + end, + + on_construct = function(pos, player) local meta = minetest.get_meta(pos) + meta:set_string("owner", "") - -- text entry formspec - meta:set_string("formspec", "field[text;" .. S("Enter teleport coords (e.g. 200,20,-200,Home)") .. ";${text}]") - meta:set_string("infotext", S("Right-click to enchant teleport location")) - meta:set_string("text", pos.x .. "," .. pos.y .. "," .. pos.z) - - -- set default coords - meta:set_int("x", pos.x) - meta:set_int("y", pos.y) - meta:set_int("z", pos.z) + -- text entry formspec + meta:set_string("formspec", "field[text;" .. S("Enter teleport coords (e.g. 200,20,-200,Home)") .. ";${text}]") + meta:set_string("infotext", S("Right-click to enchant teleport location")) + meta:set_string("text", pos.x .. "," .. pos.y .. "," .. pos.z) + + -- set default coords + meta:set_int("x", pos.x) + meta:set_int("y", pos.y) + meta:set_int("z", pos.z) end, -- once entered, check coords, if ok then return potion @@ -258,18 +264,19 @@ minetest.register_node("teleport_potion:pad", { local meta = minetest.get_meta(pos) - meta:set_int("x", coords.x) - meta:set_int("y", coords.y) - meta:set_int("z", coords.z) - meta:set_string("text", fields.text) + if teleport_potion.can_access(pos,sender) then - if coords.desc and coords.desc ~= "" then + meta:set_int("x", coords.x) + meta:set_int("y", coords.y) + meta:set_int("z", coords.z) + meta:set_string("text", fields.text) - meta:set_string("infotext", S("Teleport to @1", coords.desc)) - else - meta:set_string("infotext", S("Pad Active (@1,@2,@3)", - coords.x, coords.y, coords.z)) - end + if coords.desc and coords.desc ~= "" then + meta:set_string("infotext", S("Teleport to @1", coords.desc.. " - graceful owner: "..meta:get_string("owner") or "")) + else + meta:set_string("infotext", S("Pad Active (@1,@2,@3)", + coords.x, coords.y, coords.z.. " - graceful owner: ".. meta:get_string("owner"))) + end minetest.sound_play("portal_open", { pos = pos, @@ -278,11 +285,32 @@ minetest.register_node("teleport_potion:pad", { }) else - minetest.chat_send_player(name, S("Teleport Pad coordinates failed!")) + minetest.chat_send_player(name, S("Teleport Pad coordinates failed, make sure you own this pad / add valid coordinates.")) end + end end, + + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local owner = meta:get_string('owner'); + if ( owner and owner ~= '' and player:get_player_name() ~= owner ) then + return false + end + return true + end, }) +teleport_potion = {} +teleport_potion.can_access = function(pos,player) + local meta = minetest.env:get_meta(pos) + local name = player:get_player_name() + local privs = minetest.get_player_privs(name) + if name == meta:get_string("owner") or privs["server"] then + return true + end + return false +end + -- teleport pad recipe minetest.register_craft({ output = 'teleport_potion:pad',