summaryrefslogtreecommitdiff
path: root/compat.lua
diff options
context:
space:
mode:
authorVanessa Ezekowitz <vanessaezekowitz@gmail.com>2013-01-13 21:45:03 -0500
committerVanessa Ezekowitz <vanessaezekowitz@gmail.com>2013-01-13 21:45:03 -0500
commit109729cfb27efd816238f094a738a8ac23e83dda (patch)
tree2a1f2f7419e14c7974e3d05c7b1148054581c27f /compat.lua
parent14102d7c3ad8f7e4aef271294a74c28e7e851bc2 (diff)
downloadpipeworks-109729cfb27efd816238f094a738a8ac23e83dda.tar
pipeworks-109729cfb27efd816238f094a738a8ac23e83dda.tar.gz
pipeworks-109729cfb27efd816238f094a738a8ac23e83dda.tar.bz2
pipeworks-109729cfb27efd816238f094a738a8ac23e83dda.tar.xz
pipeworks-109729cfb27efd816238f094a738a8ac23e83dda.zip
Added Nore's item transport mod and integrated it into pipeworks
Items can now flow from one chest (or Nore's filter object) to another via the pneumatic tubes! Thanks to Nore and RealBadAngel for the code. Note that this mod has to redefine the default chests and furnaces (see compat.lua) in order to add some new group definitions so that tubes can appear to connect to these objects.
Diffstat (limited to 'compat.lua')
-rw-r--r--compat.lua166
1 files changed, 166 insertions, 0 deletions
diff --git a/compat.lua b/compat.lua
new file mode 100644
index 0000000..31e59a2
--- /dev/null
+++ b/compat.lua
@@ -0,0 +1,166 @@
+
+default.furnace_inactive_formspec =
+ "size[8,9]"..
+ "image[2,2;1,1;default_furnace_fire_bg.png]"..
+ "list[current_name;fuel;2,3;1,1;]"..
+ "list[current_name;src;2,1;1,1;]"..
+ "list[current_name;dst;5,1;2,2;]"..
+ "list[current_player;main;0,5;8,4;]"
+
+minetest.register_node(":default:furnace", {
+ description = "Furnace",
+ tiles = {"default_furnace_top.png", "default_furnace_bottom.png", "default_furnace_side.png",
+ "default_furnace_side.png", "default_furnace_side.png", "default_furnace_front.png"},
+ paramtype2 = "facedir",
+ groups = {cracky=2,tubedevice=1,tubedevice_receiver=1},
+ tube={insert_object=function(pos,node,stack,direction)
+ local meta=minetest.env:get_meta(pos)
+ local inv=meta:get_inventory()
+ if direction.y==1 then
+ return inv:add_item("fuel",stack)
+ elseif direction.y==-1 then
+ return inv:add_item("src",stack)
+ else
+ return stack
+ end
+ end,
+ can_insert=function(pos,node,stack,direction)
+ local meta=minetest.env:get_meta(pos)
+ local inv=meta:get_inventory()
+ if direction.y==1 then
+ return inv:room_for_item("fuel",stack)
+ elseif direction.y==-1 then
+ return inv:room_for_item("src",stack)
+ else
+ return 0
+ end
+ end,
+ input_inventory="dst"},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_stone_defaults(),
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec", default.furnace_inactive_formspec)
+ meta:set_string("infotext", "Furnace")
+ local inv = meta:get_inventory()
+ inv:set_size("fuel", 1)
+ inv:set_size("src", 1)
+ inv:set_size("dst", 4)
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("fuel") then
+ return false
+ elseif not inv:is_empty("dst") then
+ return false
+ elseif not inv:is_empty("src") then
+ return false
+ end
+ return true
+ end,
+})
+
+minetest.register_node(":default:furnace_active", {
+ description = "Furnace",
+ tiles = {"default_furnace_top.png", "default_furnace_bottom.png", "default_furnace_side.png",
+ "default_furnace_side.png", "default_furnace_side.png", "default_furnace_front_active.png"},
+ paramtype2 = "facedir",
+ light_source = 8,
+ drop = "default:furnace",
+ groups = {cracky=2, not_in_creative_inventory=1,tubedevice=1,tubedevice_receiver=1},
+ tube={insert_object=function(pos,node,stack,direction)
+ local meta=minetest.env:get_meta(pos)
+ local inv=meta:get_inventory()
+ if direction.y==1 then
+ return inv:add_item("fuel",stack)
+ elseif direction.y==-1 then
+ return inv:add_item("src",stack)
+ else
+ return stack
+ end
+ end,
+ can_insert=function(pos,node,stack,direction)
+ local meta=minetest.env:get_meta(pos)
+ local inv=meta:get_inventory()
+ if direction.y==1 then
+ return inv:room_for_item("fuel",stack)
+ elseif direction.y==-1 then
+ return inv:room_for_item("src",stack)
+ else
+ return 0
+ end
+ end,
+ input_inventory="dst"},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_stone_defaults(),
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec", default.furnace_inactive_formspec)
+ meta:set_string("infotext", "Furnace");
+ local inv = meta:get_inventory()
+ inv:set_size("fuel", 1)
+ inv:set_size("src", 1)
+ inv:set_size("dst", 4)
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("fuel") then
+ return false
+ elseif not inv:is_empty("dst") then
+ return false
+ elseif not inv:is_empty("src") then
+ return false
+ end
+ return true
+ end,
+})
+
+minetest.register_node(":default:chest", {
+ description = "Chest",
+ tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
+ "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1},
+ tube={insert_object=function(pos,node,stack,direction)
+ local meta=minetest.env:get_meta(pos)
+ local inv=meta:get_inventory()
+ return inv:add_item("main",stack)
+ end,
+ can_insert=function(pos,node,stack,direction)
+ local meta=minetest.env:get_meta(pos)
+ local inv=meta:get_inventory()
+ return inv:room_for_item("main",stack)
+ end,
+ input_inventory="main"},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "size[8,9]"..
+ "list[current_name;main;0,0;8,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Chest")
+ local inv = meta:get_inventory()
+ inv:set_size("main", 8*4)
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ return inv:is_empty("main")
+ end,
+ on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff in chest at "..minetest.pos_to_string(pos))
+ end,
+ on_metadata_inventory_put = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff to chest at "..minetest.pos_to_string(pos))
+ end,
+ on_metadata_inventory_take = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " takes stuff from chest at "..minetest.pos_to_string(pos))
+ end,
+})