Now honors protections
parent
8b400329a0
commit
cacd0da431
|
@ -1,7 +1,7 @@
|
|||
--trackplacer.lua
|
||||
--holds code for the track-placing system. the default 'track' item will be a craftitem that places rails as needed. this will neither place or change switches nor place vertical rails.
|
||||
|
||||
local print=function(t, ...) minetest.log("action", table.concat({t, ...}, " ")) minetest.chat_send_all(table.concat({t, ...}, " ")) end
|
||||
local print=function(t, ...) minetest.log("action", table.concat({t, ...}, " ")) minetest.chat_send_player(table.concat({t, ...}, " ")) end
|
||||
|
||||
--all new trackplacer code
|
||||
local tp={
|
||||
|
@ -176,6 +176,9 @@ function tp.register_track_placer(nnprefix, imgprefix, dispname)
|
|||
if pointed_thing.type=="node" then
|
||||
local pos=pointed_thing.above
|
||||
local upos=pointed_thing.under
|
||||
if minetest.is_protected(pos,placer) and minetest.is_protected(upos,placer) then
|
||||
return itemstack
|
||||
end
|
||||
if minetest.registered_nodes[minetest.get_node(pos).name] and minetest.registered_nodes[minetest.get_node(pos).name].buildable_to
|
||||
and minetest.registered_nodes[minetest.get_node(upos).name] and minetest.registered_nodes[minetest.get_node(upos).name].walkable then
|
||||
tp.placetrack(pos, nnprefix)
|
||||
|
@ -198,40 +201,46 @@ minetest.register_craftitem("advtrains:trackworker",{
|
|||
wield_image = "advtrains_trackworker.png",
|
||||
stack_max = 1,
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
if pointed_thing.type=="node" then
|
||||
local pos=pointed_thing.under
|
||||
local node=minetest.get_node(pos)
|
||||
|
||||
--if not advtrains.is_track_and_drives_on(minetest.get_node(pos).name, advtrains.all_tracktypes) then return end
|
||||
if advtrains.is_train_at_pos(pos) then return end
|
||||
|
||||
local nnprefix, suffix, rotation=string.match(node.name, "^([^_]+)_([^_]+)(_?.*)$")
|
||||
--print(node.name.."\npattern recognizes:"..nodeprefix.." / "..railtype.." / "..rotation)
|
||||
if not tp.tracks[nnprefix] or not tp.tracks[nnprefix].twrotate[suffix] then
|
||||
print("[advtrains]railtype not workable by trackworker")
|
||||
return
|
||||
end
|
||||
local modext=tp.tracks[nnprefix].twrotate[suffix]
|
||||
if pointed_thing.type=="node" then
|
||||
local pos=pointed_thing.under
|
||||
if minetest.is_protected(pos, placer) then
|
||||
return
|
||||
end
|
||||
local node=minetest.get_node(pos)
|
||||
|
||||
--if not advtrains.is_track_and_drives_on(minetest.get_node(pos).name, advtrains.all_tracktypes) then return end
|
||||
if advtrains.is_train_at_pos(pos) then return end
|
||||
|
||||
local nnprefix, suffix, rotation=string.match(node.name, "^([^_]+)_([^_]+)(_?.*)$")
|
||||
--print(node.name.."\npattern recognizes:"..nodeprefix.." / "..railtype.." / "..rotation)
|
||||
if not tp.tracks[nnprefix] or not tp.tracks[nnprefix].twrotate[suffix] then
|
||||
print("[advtrains]railtype not workable by trackworker")
|
||||
return
|
||||
end
|
||||
local modext=tp.tracks[nnprefix].twrotate[suffix]
|
||||
|
||||
if rotation==modext[#modext] then --increase param2
|
||||
minetest.set_node(pos, {name=nnprefix.."_"..suffix..modext[1], param2=(node.param2+1)%4})
|
||||
return
|
||||
else
|
||||
local modpos
|
||||
for k,v in pairs(modext) do if v==rotation then modpos=k end end
|
||||
if not modpos then
|
||||
print("[advtrains]rail not workable by trackworker")
|
||||
return
|
||||
end
|
||||
minetest.set_node(pos, {name=nnprefix.."_"..suffix..modext[modpos+1], param2=node.param2})
|
||||
end
|
||||
advtrains.invalidate_all_paths()
|
||||
end
|
||||
if rotation==modext[#modext] then --increase param2
|
||||
minetest.set_node(pos, {name=nnprefix.."_"..suffix..modext[1], param2=(node.param2+1)%4})
|
||||
return
|
||||
else
|
||||
local modpos
|
||||
for k,v in pairs(modext) do if v==rotation then modpos=k end end
|
||||
if not modpos then
|
||||
print("[advtrains]rail not workable by trackworker")
|
||||
return
|
||||
end
|
||||
minetest.set_node(pos, {name=nnprefix.."_"..suffix..modext[modpos+1], param2=node.param2})
|
||||
end
|
||||
advtrains.invalidate_all_paths()
|
||||
end
|
||||
end,
|
||||
on_use=function(itemstack, user, pointed_thing)
|
||||
if pointed_thing.type=="node" then
|
||||
local pos=pointed_thing.under
|
||||
local node=minetest.get_node(pos)
|
||||
if minetest.is_protected(pos, user) then
|
||||
return
|
||||
end
|
||||
|
||||
--if not advtrains.is_track_and_drives_on(minetest.get_node(pos).name, advtrains.all_tracktypes) then return end
|
||||
if advtrains.is_train_at_pos(pos) then return end
|
||||
|
|
Loading…
Reference in New Issue