aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSingularis <singularis@volny.cz>2022-11-17 15:52:42 +0100
committerorwell <orwell@bleipb.de>2025-05-27 20:22:01 +0200
commitf21c908d344a4c3c624c39f568e14a015fe8c6e7 (patch)
tree89784d14ba870d34d12c0a27d846a31bc7d7e801
parent419fea5fec89b343a32fcd0de34e8daab7c658b9 (diff)
downloadadvtrains-f21c908d344a4c3c624c39f568e14a015fe8c6e7.tar.gz
advtrains-f21c908d344a4c3c624c39f568e14a015fe8c6e7.tar.bz2
advtrains-f21c908d344a4c3c624c39f568e14a015fe8c6e7.zip
[advtrains] usnadnění kladení kolejí na květiny apod.
-rw-r--r--advtrains/trackplacer.lua102
1 files changed, 74 insertions, 28 deletions
diff --git a/advtrains/trackplacer.lua b/advtrains/trackplacer.lua
index fe76290..13a0dac 100644
--- a/advtrains/trackplacer.lua
+++ b/advtrains/trackplacer.lua
@@ -266,6 +266,79 @@ function tp.placetrack(pos, nnpref, placer, itemstack, pointed_thing, yaw)
end
end
+local function on_place(itemstack, placer, pointed_thing, nnprefix, def)
+ local s, pos, name
+
+ name = placer:get_player_name()
+ if not name then
+ return itemstack, false
+ end
+
+ if pointed_thing.type ~= "node" then
+ return itemstack, true
+ end
+
+ if pointed_thing.above.y == pointed_thing.under.y then
+ pos = pointed_thing.under
+ else
+ pos = pointed_thing.above
+ end
+
+ local upos = vector.offset(pos, 0, -1, 0)
+ local ndef = minetest.registered_nodes[minetest.get_node(pos).name]
+ local undef = minetest.registered_nodes[minetest.get_node(upos).name] -- definition of the node under
+
+ if not advtrains.check_track_protection(pos, name) then
+ return itemstack, false
+ end
+ if not ndef or not ndef.buildable_to then
+ return itemstack, true -- not place for a track
+ end
+ if ndef.suitable_substrate then
+ s = ndef.suitable_substrate(upos)
+ else
+ s = undef and undef.walkable
+ end
+ if s then
+ -- minetest.chat_send_all(nnprefix)
+ local yaw = placer:get_look_horizontal()
+ tp.placetrack(pos, nnprefix, placer, itemstack, pointed_thing, yaw)
+ if not minetest.is_creative_enabled(name) then
+ itemstack:take_item()
+ end
+ return itemstack, true
+ end
+
+ -- try the position below
+ pos.y = pos.y - 1
+ upos.y = upos.y - 1
+ ndef = undef
+ undef = minetest.registered_nodes[minetest.get_node(upos).name]
+ pointed_thing = table.copy(pointed_thing)
+ pointed_thing.below = upos
+ pointed_thing.above = pos
+
+ if not advtrains.check_track_protection(pos, name) then
+ return itemstack, false
+ end
+ if not ndef or not ndef.buildable_to then
+ return itemstack, true -- not place for a track
+ end
+ if ndef.suitable_substrate then
+ s = ndef.suitable_substrate(upos)
+ else
+ s = undef and undef.walkable
+ end
+ if s then
+ -- minetest.chat_send_all(nnprefix)
+ local yaw = placer:get_look_horizontal()
+ tp.placetrack(pos, nnprefix, placer, itemstack, pointed_thing, yaw)
+ if not minetest.is_creative_enabled(name) then
+ itemstack:take_item()
+ end
+ end
+ return itemstack, true
+end
function tp.register_track_placer(nnprefix, imgprefix, dispname, def)
minetest.register_craftitem(":"..nnprefix.."_placer",{
@@ -275,34 +348,7 @@ function tp.register_track_placer(nnprefix, imgprefix, dispname, def)
groups={advtrains_trackplacer=1, digtron_on_place=1},
liquids_pointable = def.liquids_pointable,
on_place = function(itemstack, placer, pointed_thing)
- local name = placer:get_player_name()
- if not name then
- return itemstack, false
- end
- if pointed_thing.type=="node" then
- local pos=pointed_thing.above
- local upos=vector.subtract(pointed_thing.above, {x=0, y=1, z=0})
- if not advtrains.check_track_protection(pos, name) then
- return itemstack, false
- end
- if minetest.registered_nodes[minetest.get_node(pos).name] and minetest.registered_nodes[minetest.get_node(pos).name].buildable_to then
- local s
- if def.suitable_substrate then
- s = def.suitable_substrate(upos)
- else
- s = minetest.registered_nodes[minetest.get_node(upos).name] and minetest.registered_nodes[minetest.get_node(upos).name].walkable
- end
- if s then
--- minetest.chat_send_all(nnprefix)
- local yaw = placer:get_look_horizontal()
- tp.placetrack(pos, nnprefix, placer, itemstack, pointed_thing, yaw)
- if not advtrains.is_creative(name) then
- itemstack:take_item()
- end
- end
- end
- end
- return itemstack, true
+ return on_place(itemstack, placer, pointed_thing, nnprefix, def)
end,
})
end