diff --git a/_material/nodes.xcf b/_material/nodes.xcf index f8e80b3..a7e0fce 100644 Binary files a/_material/nodes.xcf and b/_material/nodes.xcf differ diff --git a/api.lua b/api.lua index d0e834a..774a0bf 100644 --- a/api.lua +++ b/api.lua @@ -173,12 +173,12 @@ function telemosaic.get_formspec(pos, table) local range = table.range or 0 local bname = meta:get_string("bname") if not bname or bname == "" then - bname = "beacon at: "..minetest.formspec_escape(minetest.pos_to_string(pos)) + bname = "beacon at: "..minetest.pos_to_string(pos) end local textlist = "" for ipos, ival in pairs(arrivals_tbl) do - textlist = textlist..minetest.formspec_escape(ipos)..": "..ival.."," + textlist = textlist..minetest.formspec_escape(ipos)..": "..minetest.formspec_escape(ival).."," end local button_teleport = "" @@ -213,25 +213,38 @@ end minetest.register_on_player_receive_fields(function(player, formname, fields) local mod_pos_pos2 = formname:split(":") - if fields.bname and mod_pos_pos2[1] == "telemosaic" then - local bname = fields.bname - local pos = minetest.string_to_pos(mod_pos_pos2[2]) - local meta = minetest.get_meta(pos) - local pos2 = minetest.string_to_pos(mod_pos_pos2[3]) - - meta:set_string("bname", bname) - if pos2 then - local meta2 = minetest.get_meta(pos2) - local arrivals_tbl2 = meta2:get_string("arrivals_tbl") - arrivals_tbl2 = minetest.deserialize(arrivals_tbl2) - if not arrivals_tbl2 then arrivals_tbl2 = {} end + if mod_pos_pos2[1] == "telemosaic" then + -- beacon name change + if fields.bname then + local bname = fields.bname + local pos = minetest.string_to_pos(mod_pos_pos2[2]) + local meta = minetest.get_meta(pos) + local pos2 = minetest.string_to_pos(mod_pos_pos2[3]) + + meta:set_string("bname", bname) - arrivals_tbl2[minetest.pos_to_string(pos)] = minetest.formspec_escape(bname) - meta2:set_string("arrivals_tbl", minetest.serialize(arrivals_tbl2)) + if pos2 then + local meta2 = minetest.get_meta(pos2) + local arrivals_tbl2 = meta2:get_string("arrivals_tbl") + arrivals_tbl2 = minetest.deserialize(arrivals_tbl2) + if not arrivals_tbl2 then arrivals_tbl2 = {} end + + arrivals_tbl2[minetest.pos_to_string(pos)] = bname + meta2:set_string("arrivals_tbl", minetest.serialize(arrivals_tbl2)) + end end + -- teleport if fields.teleport then + local pos = minetest.string_to_pos(mod_pos_pos2[2]) + local meta = minetest.get_meta(pos) local range = meta:get_int("range") + local pos2 = minetest.string_to_pos(mod_pos_pos2[3]) + + if minetest.is_protected(pos, player:get_player_name()) then + minetest.chat_send_player(player:get_player_name(), "You cannot teleport from protected beacon!") + return + end if pos2 then if math.floor(vector.distance(pos, pos2)) <= range then @@ -248,7 +261,6 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end end - end end) @@ -394,7 +406,7 @@ function telemosaic.beacon_after_place(pos, placer, itemstack, pointed_thing) local range = telemosaic.get_range_from_extenders(pos) if not minetest.registered_nodes[nodename] then return end - local bname = "beacon at: "..minetest.formspec_escape(minetest.pos_to_string(pos)) + local bname = "beacon at: "..minetest.pos_to_string(pos) local description = minetest.registered_nodes[nodename]["description"] meta:set_int("range", range) @@ -438,11 +450,17 @@ function telemosaic.beacon_rightclick(pos, node, clicker, itemstack, pointed_thi -- get deprature position from item meta local pos_stack = meta_stack:get_string("dep_pos") pos_stack = minetest.string_to_pos(pos_stack) + local meta2 = minetest.get_meta(pos_stack) + local range2 = meta2:get_int("range") -- do nothing if departure position is marked as arrival position if math.floor(vector.distance(pos_stack, pos)) == 0 then minetest.chat_send_player(clickername, "This is marked as your departure position, you have to mark your destination position now!") return + -- too far, not enough range - keep the key + elseif math.floor(vector.distance(pos_stack, pos)) > range2 then + minetest.chat_send_player(clickername, "The destination is too far, place the beacon closer about "..math.floor(vector.distance(pos_stack, pos)) - range2.." blocks.") + return -- do nothing when arrival position is protected elseif minetest.is_protected(pos, clickername) then minetest.chat_send_player(clickername, "You cannot configure protected beacons!") @@ -452,7 +470,6 @@ function telemosaic.beacon_rightclick(pos, node, clicker, itemstack, pointed_thi itemstack:replace("default:mese_crystal_fragment") -- remove this node position from arrival node "arrivals_tbl" - local meta2 = minetest.get_meta(pos_stack) local bname2 = meta2:get_string("bname") local pos3 = meta2:get_string("dest_pos") pos3 = minetest.string_to_pos(pos3) @@ -540,4 +557,5 @@ function telemosaic.beacon_on_destruct(pos) imeta:set_string("dest_pos", "not configured") telemosaic.set_status(ipos) end + end diff --git a/crafting.lua b/crafting.lua index 8d61983..571698d 100644 --- a/crafting.lua +++ b/crafting.lua @@ -1,37 +1,40 @@ minetest.register_craft({ - output = 'telemosaic:beacon_off', + output = "telemosaic:beacon_off", recipe = { - {'default:diamond', 'doors:door_wood', 'default:diamond'}, - {'default:obsidian','default:obsidian','default:obsidian'} + {"default:diamond", "doors:door_wood", "default:diamond"}, + {"default:obsidian", "default:obsidian", "default:obsidian"} } }) + minetest.register_craft({ - output = 'telemosaic:extender_one', + output = "telemosaic:extender_one", recipe = { - {"default:diamond","","default:diamond"}, - {'default:obsidian','doors:door_wood','default:obsidian'} + {"", "default:diamond", ""}, + {"default:obsidian", "doors:door_wood", "default:obsidian"} } }) + minetest.register_craft({ - output = 'telemosaic:extender_two', + output = "telemosaic:extender_two", recipe = { - {'', 'group:telemosaic_extender_one',''}, - {'group:telemosaic_extender_one','default:obsidian','group:telemosaic_extender_one'}, - {'', 'group:telemosaic_extender_one',''} + {"", "group:telemosaic_extender_one", ""}, + {"group:telemosaic_extender_one", "default:obsidian", "group:telemosaic_extender_one"}, + {"", "group:telemosaic_extender_one", ""} } }) + minetest.register_craft({ - output = 'telemosaic:extender_three', + output = "telemosaic:extender_three", recipe = { - {'', 'group:telemosaic_extender_two',''}, - {'group:telemosaic_extender_two','default:obsidian','group:telemosaic_extender_two'}, - {'', 'group:telemosaic_extender_two',''} + {"", "group:telemosaic_extender_two", ""}, + {"group:telemosaic_extender_two", "default:obsidian", "group:telemosaic_extender_two"}, + {"", "group:telemosaic_extender_two", ""} } }) -- how to recycle a key minetest.register_craft({ - type = 'shapeless', - recipe = {'telemosaic:key'}, - output = 'default:mese_crystal_fragment' -}) \ No newline at end of file + type = "shapeless", + output = "default:mese_crystal_fragment", + recipe = {"telemosaic:key"} +}) diff --git a/textures/src/telemosaic_extenders.xcf b/textures/src/telemosaic_extenders.xcf deleted file mode 100644 index b5d0392..0000000 Binary files a/textures/src/telemosaic_extenders.xcf and /dev/null differ