From 9e85cc64c6126133176f6cd6b321984b1772b79f Mon Sep 17 00:00:00 2001 From: VanessaE <vanessaezekowitz@gmail.com> Date: Fri, 08 Mar 2013 01:15:20 +0100 Subject: [PATCH] Merge pull request #12 from VanessaE/master --- technic/deployer.lua | 108 ++++++++++++++++++++++++++++++++--------------------- 1 files changed, 65 insertions(+), 43 deletions(-) diff --git a/technic/deployer.lua b/technic/deployer.lua index ce3b735..c5dba2a 100644 --- a/technic/deployer.lua +++ b/technic/deployer.lua @@ -8,13 +8,64 @@ } }) +deployer_signal_on = function(pos, node) + local pos1={} + pos1.x=pos.x + pos1.y=pos.y + pos1.z=pos.z + if node.param2==3 then pos1.x=pos1.x+1 end + if node.param2==2 then pos1.z=pos1.z+1 end + if node.param2==1 then pos1.x=pos1.x-1 end + if node.param2==0 then pos1.z=pos1.z-1 end + + if node.name == "technic:deployer_off" then + local node1=minetest.env:get_node(pos1) + if node1.name == "air" then + hacky_swap_node(pos,"technic:deployer_on") + nodeupdate(pos) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + local i=0 + for _,stack in ipairs(inv:get_list("main")) do + i=i+1 + if stack:get_name() ~=nil and minetest.registered_nodes[stack:get_name()]~=nil then + node1={name=stack:get_name(), param1=0, param2=node.param2} + minetest.env:place_node(pos1,node1) + stack:take_item(1); + inv:set_stack("main", i, stack) + return + end + end + end + end +end + +deployer_signal_off = function(pos, node) + if node.name == "technic:deployer_on" then + hacky_swap_node(pos,"technic:deployer_off") + nodeupdate(pos) + end +end + minetest.register_node("technic:deployer_off", { description = "Deployer", tile_images = {"technic_deployer_top.png","technic_deployer_bottom.png","technic_deployer_side2.png","technic_deployer_side1.png", "technic_deployer_back.png","technic_deployer_front_off.png"}, is_ground_content = true, paramtype2 = "facedir", - groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon_receptor_off = 1, mesecon_effector_off = 1, mesecon = 2,tubedevice=1}, + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2,tubedevice=1, tubedevice_receiver=1}, + mesecons = {effector={action_on=deployer_signal_on}}, + 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"}, sounds = default.node_sound_stone_defaults(), on_construct = function(pos) local meta = minetest.env:get_meta(pos) @@ -45,47 +96,18 @@ "technic_deployer_back.png","technic_deployer_front_on.png"}, is_ground_content = true, paramtype2 = "facedir", - tubelike=1, - groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon_receptor_off = 1, mesecon_effector_off = 1, mesecon = 2,tubedevice=1,not_in_creative_inventory=1}, + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2,tubedevice=1, tubedevice_receiver=1,not_in_creative_inventory=1}, + mesecons = {effector={action_off=deployer_signal_off}}, + 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"}, sounds = default.node_sound_stone_defaults(), }) - -mesecon:register_on_signal_on(function(pos, node) - local pos1={} - pos1.x=pos.x - pos1.y=pos.y - pos1.z=pos.z - if node.param2==3 then pos1.x=pos1.x+1 end - if node.param2==2 then pos1.z=pos1.z+1 end - if node.param2==1 then pos1.x=pos1.x-1 end - if node.param2==0 then pos1.z=pos1.z-1 end - - if node.name == "technic:deployer_off" then - hacky_swap_node(pos,"technic:deployer_on") - nodeupdate(pos) - local meta = minetest.env:get_meta(pos); - - local inv = meta:get_inventory() - print (dump(inv)) - for _,stack in ipairs(inv:get_list("main")) do - print (dump(stack:get_name())) - - if stack:get_name() ~=nil then - node1={name=stack:get_name(), param1=0, param2=node.param2} - minetest.env:place_node(pos1,node1) - return - end - end - end -end) - -mesecon:register_on_signal_off(function(pos, node) - if node.name == "technic:deployer_on" then - hacky_swap_node(pos,"technic:deployer_off") - nodeupdate(pos) - end -end) - -mesecon:register_effector("technic:deployer_on", "technic:deployer_off") - - -- Gitblit v1.8.0