improvements and cleanup
parent
d7208d4928
commit
f5bc5961eb
Binary file not shown.
56
api.lua
56
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
|
||||
|
|
39
crafting.lua
39
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'
|
||||
})
|
||||
type = "shapeless",
|
||||
output = "default:mese_crystal_fragment",
|
||||
recipe = {"telemosaic:key"}
|
||||
})
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue