diff --git a/mods/pipe/init.lua b/mods/pipe/init.lua index b725389..bd4b974 100644 --- a/mods/pipe/init.lua +++ b/mods/pipe/init.lua @@ -1,8 +1,8 @@ local pipe_form = "size[8,6]" local pipe_form = pipe_form..default.gui_colors local pipe_form = pipe_form..default.gui_bg -local pipe_form = pipe_form.."list[current_name;main;2,0.3;4,1;]" -local pipe_form = pipe_form..default.itemslot_bg(2,0.3,4,1) +local pipe_form = pipe_form.."list[current_name;main;3,0.3;2,1;]" +local pipe_form = pipe_form..default.itemslot_bg(3,0.3,2,1) local pipe_form = pipe_form.."list[current_player;main;0,1.85;8,1;]" local pipe_form = pipe_form..default.itemslot_bg(0,1.85,8,1) local pipe_form = pipe_form.."list[current_player;main;0,3.08;8,3;8]" @@ -26,13 +26,12 @@ minetest.register_node("pipe:pipe", { meta:set_string("formspec", pipe_form) meta:set_string("infotext", "Pipe") local inv = meta:get_inventory() - inv:set_size("main", 4) + inv:set_size("main", 2) end, }) minetest.register_abm({ nodenames = {"pipe:pipe"}, - neighbors = {"pipe:pipe"}, interval = 1.0, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) @@ -44,8 +43,66 @@ minetest.register_abm({ local next_inv = next_meta:get_inventory() if next_inv:room_for_item("main", inv:get_list("main")[1]) and not inv:get_list("main")[1]:is_empty() then - next_inv:add_item(inv:get_list("main")[1]) - inv:remove_item("main", 1) + next_inv:add_item("main", inv:get_list("main")[1]) + inv:remove_item("main", inv:get_list("main")[1]) + end + if next_inv:room_for_item("main", inv:get_list("main")[2]) and not inv:get_list("main")[2]:is_empty() then + next_inv:add_item("main", inv:get_list("main")[2]) + inv:remove_item("main", inv:get_list("main")[2]) + end + end, +}) + +minetest.register_node("pipe:pump", { + description = "Pump", + tiles = {"pipe_pump_top.png", "pipe_pump_top.png", "pipe_pump_side_alt.png", "pipe_pump_side.png", "pipe_pump_front.png", "pipe_pump_front.png"}, + groups = {choppy = 3}, + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + }, + }, +}) + +minetest.register_abm({ + nodenames = {"pipe:pump"}, + interval = 1.0, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local meta = minetest.get_meta(pos) + + local next_dir = vector.multiply(minetest.facedir_to_dir(minetest.get_node({x = pos.x, y= pos.y, z=pos.z}).param2), -1) + local dir = minetest.facedir_to_dir(minetest.get_node({x = pos.x, y= pos.y, z=pos.z}).param2) + + local last_pos = vector.add(pos, dir) + local next_pos = vector.add(pos, next_dir) + + local next_meta = minetest.get_meta(next_pos) + local last_meta = minetest.get_meta(last_pos) + + local last_inv = last_meta:get_inventory() + local next_inv = next_meta:get_inventory() + + local item_pos = 1 + + if not last_inv:get_list("main") then + return + end + + for k,v in pairs(last_inv:get_list("main")) do + if not v:is_empty() then + item_pos = k + end + end + + + if next_inv:room_for_item("main", last_inv:get_list("main")[item_pos]) and not last_inv:get_list("main")[item_pos]:is_empty() then + next_inv:add_item("main", last_inv:get_list("main")[item_pos]) + last_inv:remove_item("main", last_inv:get_list("main")[item_pos]) end end, }) diff --git a/mods/pipe/textures/pipe_pump_front.png b/mods/pipe/textures/pipe_pump_front.png new file mode 100644 index 0000000..e6f1d9e Binary files /dev/null and b/mods/pipe/textures/pipe_pump_front.png differ diff --git a/mods/pipe/textures/pipe_pump_side.png b/mods/pipe/textures/pipe_pump_side.png new file mode 100644 index 0000000..e06b168 Binary files /dev/null and b/mods/pipe/textures/pipe_pump_side.png differ diff --git a/mods/pipe/textures/pipe_pump_side_alt.png b/mods/pipe/textures/pipe_pump_side_alt.png new file mode 100644 index 0000000..3eb006a Binary files /dev/null and b/mods/pipe/textures/pipe_pump_side_alt.png differ diff --git a/mods/pipe/textures/pipe_pump_top.png b/mods/pipe/textures/pipe_pump_top.png new file mode 100644 index 0000000..87e8f37 Binary files /dev/null and b/mods/pipe/textures/pipe_pump_top.png differ