diff options
author | Carter Kolwey <cheapiephp@gmail.com> | 2017-02-28 22:15:18 -0600 |
---|---|---|
committer | Diego MartÃnez <kaeza@users.noreply.github.com> | 2017-03-01 01:40:06 -0300 |
commit | cdbe93cdd81542a9ea5a9e775e771f87b4cc4c11 (patch) | |
tree | 16465d96247702f6683239f05d6eebfc5da3125d | |
parent | f7fe95231df247cbe34ef1fd4f7b5efb54bd1b98 (diff) | |
download | pipeworks-cdbe93cdd81542a9ea5a9e775e771f87b4cc4c11.tar pipeworks-cdbe93cdd81542a9ea5a9e775e771f87b4cc4c11.tar.gz pipeworks-cdbe93cdd81542a9ea5a9e775e771f87b4cc4c11.tar.bz2 pipeworks-cdbe93cdd81542a9ea5a9e775e771f87b4cc4c11.tar.xz pipeworks-cdbe93cdd81542a9ea5a9e775e771f87b4cc4c11.zip |
Allow reversing direction if there's nowhere to go
-rw-r--r-- | default_settings.txt | 1 | ||||
-rw-r--r-- | item_transport.lua | 25 |
2 files changed, 18 insertions, 8 deletions
diff --git a/default_settings.txt b/default_settings.txt index 41a3f7a..b1aa331 100644 --- a/default_settings.txt +++ b/default_settings.txt @@ -19,5 +19,6 @@ pipeworks.enable_mese_sand_tube = true pipeworks.enable_one_way_tube = true pipeworks.enable_priority_tube = true pipeworks.enable_cyclic_mode = true +pipeworks.drop_on_routing_fail = false pipeworks.delete_item_on_clearobject = true diff --git a/item_transport.lua b/item_transport.lua index ee17611..ab1ce55 100644 --- a/item_transport.lua +++ b/item_transport.lua @@ -246,15 +246,24 @@ luaentity.register_entity("pipeworks:tubed_item", { if moved then local found_next, new_velocity = go_next(self.start_pos, velocity, stack) -- todo: color + local rev_vel = vector.multiply(velocity, -1) + local rev_dir = vector.direction(self.start_pos,vector.add(self.start_pos,rev_vel)) + local rev_node = minetest.get_node(vector.round(vector.add(self.start_pos,rev_dir))) + local tube_present = minetest.get_item_group(rev_node.name,"tubedevice") == 1 if not found_next then - drop_pos = minetest.find_node_near(vector.add(self.start_pos, velocity), 1, "air") - if drop_pos then - -- Using add_item instead of item_drop since this makes pipeworks backward - -- compatible with Minetest 0.4.13. - -- Using item_drop here makes Minetest 0.4.13 crash. - minetest.add_item(drop_pos, stack) - self:remove() - return + if pipeworks.drop_on_routing_fail or not tube_present then + drop_pos = minetest.find_node_near(vector.add(self.start_pos, velocity), 1, "air") + if drop_pos then + -- Using add_item instead of item_drop since this makes pipeworks backward + -- compatible with Minetest 0.4.13. + -- Using item_drop here makes Minetest 0.4.13 crash. + minetest.add_item(drop_pos, stack) + self:remove() + return + end + else + velocity = vector.multiply(velocity, -1) + self:setvelocity(velocity) end end |