improvements and cleanup

master
Juraj Vajda 2018-01-23 22:49:46 -05:00
parent d7208d4928
commit f5bc5961eb
4 changed files with 58 additions and 37 deletions

Binary file not shown.

56
api.lua
View File

@ -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

View File

@ -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'
})
type = "shapeless",
output = "default:mese_crystal_fragment",
recipe = {"telemosaic:key"}
})