Super duper pipeworks deployer and node breaker updates.
authorAnthony Zhang <azhang9@gmail.com>
Sun, 23 Jun 2013 23:15:31 +0000 (19:15 -0400)
committerAnthony Zhang <azhang9@gmail.com>
Sun, 23 Jun 2013 23:15:31 +0000 (19:15 -0400)
attic/deployer.lua [deleted file]
attic/node_breaker.lua [deleted file]
deployer.lua [new file with mode: 0644]
init.lua
node_breaker.lua [new file with mode: 0644]

diff --git a/attic/deployer.lua b/attic/deployer.lua
deleted file mode 100644 (file)
index fdb4b15..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-minetest.register_craft({
-       output = 'pipeworks:deployer_off 1',
-       recipe = {
-               {'default:wood', 'default:chest','default:wood'},
-               {'default:stone', 'mesecons:piston','default:stone'},
-               {'default:stone', 'mesecons:mesecon','default:stone'},
-
-       }
-})
-
-deployer_on = function(pos, node)
-       local pos1={}
-       pos1.x=pos.x
-       pos1.y=pos.y
-       pos1.z=pos.z
-       local pos2={}
-       pos2.x=pos.x
-       pos2.y=pos.y
-       pos2.z=pos.z
-       if node.param2==3 then
-               pos1.x=pos1.x+1
-               pos2.x=pos2.x+2
-       end
-       if node.param2==2 then
-               pos1.z=pos1.z+1
-               pos2.z=pos2.z+2
-       end
-       if node.param2==1 then
-               pos1.x=pos1.x-1
-               pos2.x=pos2.x-2
-       end
-       if node.param2==0 then
-               pos1.z=pos1.z-1
-               pos2.z=pos2.z-2
-       end
-
-       if node.name == "pipeworks:deployer_off" then
-               hacky_swap_node(pos,"pipeworks:deployer_on")
-               nodeupdate(pos)
-                       local meta = minetest.env:get_meta(pos);
-               
-               local inv = meta:get_inventory()
-               local invlist=inv:get_list("main")
-               for i,stack in ipairs(invlist) do
-
-               if stack:get_name() ~=nil and stack:get_name() ~="" and minetest.env:get_node(pos1).name == "air" then
-                       local placer={}
-                       function placer:get_player_name() return "deployer" end
-                       function placer:getpos() return pos end
-                       function placer:get_player_control() return {jump=false,right=false,left=false,LMB=false,RMB=false,sneak=false,aux1=false,down=false,up=false} end
-                       local stack2=minetest.item_place(stack,placer,{type="node", under=pos1, above=pos2})
-                       invlist[i]=stack2
-                       inv:set_list("main",invlist)
-                       return
-               end
-               end
-       end
-end
-
-deployer_off = function(pos, node)
-       if node.name == "pipeworks:deployer_on" then
-               hacky_swap_node(pos,"pipeworks:deployer_off")
-               nodeupdate(pos)
-       end
-end
-
-minetest.register_node("pipeworks:deployer_off", {
-       description = "Deployer",
-       tile_images = {"pipeworks_deployer_top.png","pipeworks_deployer_bottom.png","pipeworks_deployer_side2.png","pipeworks_deployer_side1.png",
-                       "pipeworks_deployer_back.png","pipeworks_deployer_front_off.png"},
-       mesecons = {effector={action_on=deployer_on,action_off=deployer_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"},
-       is_ground_content = true,
-       paramtype2 = "facedir",
-       groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2,tubedevice=1, tubedevice_receiver=1},
-       sounds = default.node_sound_stone_defaults(),
-       on_construct = function(pos)
-               local meta = minetest.env:get_meta(pos)
-               meta:set_string("formspec",
-                               "invsize[8,9;]"..
-                               "label[0,0;Deployer]"..
-                               "list[current_name;main;4,1;3,3;]"..
-                               "list[current_player;main;0,5;8,4;]")
-               meta:set_string("infotext", "Deployer")
-               local inv = meta:get_inventory()
-               inv:set_size("main", 3*3)
-       end,
-
-       can_dig = function(pos,player)
-               local meta = minetest.env:get_meta(pos);
-               local inv = meta:get_inventory()
-               return inv:is_empty("main")
-       end,
-       
-})
-
-minetest.register_node("pipeworks:deployer_on", {
-       description = "Deployer",
-       tile_images = {"pipeworks_deployer_top.png","pipeworks_deployer_bottom.png","pipeworks_deployer_side2.png","pipeworks_deployer_side1.png",
-                       "pipeworks_deployer_back.png","pipeworks_deployer_front_on.png"},
-       mesecons = {effector={action_on=deployer_on,action_off=deployer_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"},
-       is_ground_content = true,
-       paramtype2 = "facedir",
-       tubelike=1,
-       groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2,tubedevice=1, tubedevice_receiver=1,not_in_creative_inventory=1},
-       sounds = default.node_sound_stone_defaults(),
-       on_construct = function(pos)
-               local meta = minetest.env:get_meta(pos)
-               meta:set_string("formspec",
-                               "invsize[8,9;]"..
-                               "label[0,0;Deployer]"..
-                               "list[current_name;main;4,1;3,3;]"..
-                               "list[current_player;main;0,5;8,4;]")
-               meta:set_string("infotext", "Deployer")
-               local inv = meta:get_inventory()
-               inv:set_size("main", 3*3)
-       end,
-       can_dig = function(pos,player)
-               local meta = minetest.env:get_meta(pos);
-               local inv = meta:get_inventory()
-               return inv:is_empty("main")
-       end,
-})
-
-function hacky_swap_node(pos,name)
-       local node=minetest.env:get_node(pos)
-       local meta=minetest.env:get_meta(pos)
-       local meta0=meta:to_table()
-       node.name=name
-       minetest.env:add_node(pos, node)
-       local meta=minetest.env:get_meta(pos)
-       meta:from_table(meta0)
-end
-
-
-
-
-
diff --git a/attic/node_breaker.lua b/attic/node_breaker.lua
deleted file mode 100644 (file)
index 3af1902..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-minetest.register_craft({
-       output = 'pipeworks:nodebreaker_off 1',
-       recipe = {
-               {'default:wood', 'default:pick_mese','default:wood'},
-               {'default:stone', 'mesecons:piston','default:stone'},
-               {'default:stone', 'mesecons:mesecon','default:stone'},
-
-       }
-})
-
-
-function hacky_swap_node(pos,name)
-       local node=minetest.env:get_node(pos)
-       local meta=minetest.env:get_meta(pos)
-       local meta0=meta:to_table()
-       node.name=name
-       minetest.env:add_node(pos, node)
-       local meta=minetest.env:get_meta(pos)
-       meta:from_table(meta0)
-end
-
-
-node_breaker_on = function(pos, node)
-       if node.name == "pipeworks:nodebreaker_off" then
-               hacky_swap_node(pos,"pipeworks:nodebreaker_on")
-               break_node (pos,node.param2)
-               nodeupdate(pos)
-       end
-end
-
-node_breaker_off = function(pos, node)
-       if node.name == "pipeworks:nodebreaker_on" then
-               hacky_swap_node(pos,"pipeworks:nodebreaker_off")
-               nodeupdate(pos)
-       end
-end
-
-minetest.register_node("pipeworks:nodebreaker_off", {
-       description = "Node Breaker",
-       tile_images = {"pipeworks_nodebreaker_top_off.png","pipeworks_nodebreaker_bottom_off.png","pipeworks_nodebreaker_side2_off.png","pipeworks_nodebreaker_side1_off.png",
-                       "pipeworks_nodebreaker_back.png","pipeworks_nodebreaker_front_off.png"},
-       is_ground_content = true,
-       paramtype2 = "facedir",
-       groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2,tubedevice=1},
-       mesecons= {effector={action_on=node_breaker_on, action_off=node_breaker_off}},
-       sounds = default.node_sound_stone_defaults(),
-       on_construct = function(pos)
-       local meta = minetest.env:get_meta(pos)
-       end,
-       
-})
-
-minetest.register_node("pipeworks:nodebreaker_on", {
-       description = "Node Breaker",
-       tile_images = {"pipeworks_nodebreaker_top_on.png","pipeworks_nodebreaker_bottom_on.png","pipeworks_nodebreaker_side2_on.png","pipeworks_nodebreaker_side1_on.png",
-                       "pipeworks_nodebreaker_back.png","pipeworks_nodebreaker_front_on.png"},
-       mesecons= {effector={action_on=node_breaker_on, action_off=node_breaker_off}},
-       is_ground_content = true,
-       paramtype2 = "facedir",
-       groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2,tubedevice=1,not_in_creative_inventory=1},
-       sounds = default.node_sound_stone_defaults(),
-})
-
-function break_node (pos,n_param)              
-       local pos1={}
-       local pos2={}
-       pos1.x=pos.x
-       pos1.y=pos.y
-       pos1.z=pos.z
-       pos2.x=pos.x
-       pos2.y=pos.y
-       pos2.z=pos.z
-
-       --param2 3=x+ 1=x- 2=z+ 0=z-
-       local x_velocity=0
-       local z_velocity=0
-
-       if n_param==3 then pos2.x=pos2.x+1 pos1.x=pos1.x-1 x_velocity=-1 end
-       if n_param==2 then pos2.z=pos2.z+1 pos1.z=pos1.z-1 z_velocity=-1 end
-       if n_param==1 then pos2.x=pos2.x-1 pos1.x=pos1.x+1 x_velocity=1 end
-       if n_param==0 then pos2.z=pos2.z-1 pos1.x=pos1.z+1 z_velocity=1 end
-
-       local node=minetest.env:get_node(pos2)
-       if node.name == "air" then return nil end
-       if node.name == "default:lava_source" then return nil end
-       if node.name == "default:lava_flowing" then return nil end
-       if node.name == "default:water_source" then minetest.env:remove_node(pos2) return nil end
-       if node.name == "default:water_flowing" then minetest.env:remove_node(pos2) return nil end
-       if node.name == "ignore" then minetest.env:remove_node(pos2) return nil end
-       local drops = minetest.get_node_drops(node.name, "default:pick_mese")
-               local _, dropped_item
-               for _, dropped_item in ipairs(drops) do
-                       local item1=tube_item({x=pos.x,y=pos.y,z=pos.z},dropped_item)
-                       item1:get_luaentity().start_pos = {x=pos.x,y=pos.y,z=pos.z}
-                       item1:setvelocity({x=x_velocity, y=0, z=z_velocity})
-                       item1:setacceleration({x=0, y=0, z=0})
-               end
-       minetest.env:remove_node(pos2)
-end
-
diff --git a/deployer.lua b/deployer.lua
new file mode 100644 (file)
index 0000000..5b500b7
--- /dev/null
@@ -0,0 +1,152 @@
+if minetest.get_modpath("technic") then --technic installed
+       --register aliases in order to use technic's deployers
+       minetest.register_alias("pipeworks:deployer_off", "technic:deployer_off")
+       minetest.register_alias("pipeworks:deployer_on", "technic:deployer_on")
+       return
+end
+
+--register aliases for when someone had technic installed, but then uninstalled it but not pipeworks
+minetest.register_alias("technic:deployer_off", "pipeworks:deployer_off")
+minetest.register_alias("technic:deployer_on", "pipeworks:deployer_on")
+
+minetest.register_craft({
+       output = 'pipeworks:deployer_off 1',
+       recipe = {
+               {'default:wood', 'default:chest','default:wood'},
+               {'default:stone', 'mesecons:piston','default:stone'},
+               {'default:stone', 'mesecons:mesecon','default:stone'},
+       }
+})
+
+function hacky_swap_node(pos,name)
+       local node=minetest.env:get_node(pos)
+       local meta=minetest.env:get_meta(pos)
+       local meta0=meta:to_table()
+       node.name=name
+       minetest.env:add_node(pos, node)
+       local meta=minetest.env:get_meta(pos)
+       meta:from_table(meta0)
+end
+
+deployer_on = function(pos, node)
+       if node.name ~= "pipeworks:deployer_off" then
+               return
+       end
+
+       local pos1 = {x=pos.x, y=pos.y, z=pos.z}
+       local pos2 = {x=pos.x, y=pos.y, z=pos.z}
+       if node.param2 == 3 then
+               pos1.x, pos2.x = pos1.x + 1, pos2.x + 2
+       elseif node.param2 == 2 then
+               pos1.z, pos2.z = pos1.z + 1, pos2.z + 2
+       elseif node.param2 == 1 then
+               pos1.x, pos2.x = pos1.x - 1, pos2.x - 2
+       elseif node.param2 == 0 then
+               pos1.z, pos2.z = pos1.z - 1, pos2.z - 2
+       end
+
+       hacky_swap_node(pos,"pipeworks:deployer_on")
+       nodeupdate(pos)
+       
+       local inv = minetest.env:get_meta(pos):get_inventory()
+       local invlist = inv:get_list("main")
+       for i, stack in ipairs(invlist) do
+               if stack:get_name() ~= nil and stack:get_name() ~= "" and minetest.env:get_node(pos1).name == "air" then --obtain the first non-empty item slow
+                       local placer = {
+                               get_player_name = function() return "deployer" end,
+                               getpos = function() return pos end,
+                               get_player_control = function() return {jump=false,right=false,left=false,LMB=false,RMB=false,sneak=false,aux1=false,down=false,up=false} end,
+                       }
+                       local stack2 = minetest.item_place(stack, placer, {type="node", under=pos1, above=pos2})
+                       invlist[i] = stack2
+                       inv:set_list("main", invlist)
+                       return
+               end
+       end
+end
+
+deployer_off = function(pos, node)
+       if node.name == "pipeworks:deployer_on" then
+               hacky_swap_node(pos,"pipeworks:deployer_off")
+               nodeupdate(pos)
+       end
+end
+
+minetest.register_node("pipeworks:deployer_off", {
+       description = "Deployer",
+       tile_images = {"pipeworks_deployer_top.png","pipeworks_deployer_bottom.png","pipeworks_deployer_side2.png","pipeworks_deployer_side1.png",
+                       "pipeworks_deployer_back.png","pipeworks_deployer_front_off.png"},
+       mesecons = {effector={action_on=deployer_on,action_off=deployer_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"},
+       is_ground_content = true,
+       paramtype2 = "facedir",
+       groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2,tubedevice=1, tubedevice_receiver=1},
+       sounds = default.node_sound_stone_defaults(),
+       on_construct = function(pos)
+               local meta = minetest.env:get_meta(pos)
+               meta:set_string("formspec",
+                               "invsize[8,9;]"..
+                               "label[0,0;Deployer]"..
+                               "list[current_name;main;4,1;3,3;]"..
+                               "list[current_player;main;0,5;8,4;]")
+               meta:set_string("infotext", "Deployer")
+               local inv = meta:get_inventory()
+               inv:set_size("main", 3*3)
+       end,
+
+       can_dig = function(pos,player)
+               local meta = minetest.env:get_meta(pos);
+               local inv = meta:get_inventory()
+               return inv:is_empty("main")
+       end,
+       
+})
+
+minetest.register_node("pipeworks:deployer_on", {
+       description = "Deployer",
+       tile_images = {"pipeworks_deployer_top.png","pipeworks_deployer_bottom.png","pipeworks_deployer_side2.png","pipeworks_deployer_side1.png",
+                       "pipeworks_deployer_back.png","pipeworks_deployer_front_on.png"},
+       mesecons = {effector={action_on=deployer_on,action_off=deployer_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"},
+       is_ground_content = true,
+       paramtype2 = "facedir",
+       tubelike=1,
+       groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2,tubedevice=1, tubedevice_receiver=1,not_in_creative_inventory=1},
+       sounds = default.node_sound_stone_defaults(),
+       on_construct = function(pos)
+               local meta = minetest.env:get_meta(pos)
+               meta:set_string("formspec",
+                               "invsize[8,9;]"..
+                               "label[0,0;Deployer]"..
+                               "list[current_name;main;4,1;3,3;]"..
+                               "list[current_player;main;0,5;8,4;]")
+               meta:set_string("infotext", "Deployer")
+               local inv = meta:get_inventory()
+               inv:set_size("main", 3*3)
+       end,
+       can_dig = function(pos,player)
+               local meta = minetest.env:get_meta(pos);
+               local inv = meta:get_inventory()
+               return inv:is_empty("main")
+       end,
+})
index e662bc4f37a86a2a13033f126536bdeb201bc333..d9434242efd18efd2df496929d54a72df9f9c4dd 100644 (file)
--- a/init.lua
+++ b/init.lua
@@ -377,10 +377,7 @@ dofile(modpath.."/flowing_logic.lua")
 dofile(modpath.."/compat.lua")
 dofile(modpath.."/item_transport.lua")
 dofile(modpath.."/autocrafter.lua")
-
-minetest.register_alias("pipeworks:deployer_off", "technic:deployer_off")
-minetest.register_alias("pipeworks:deployer_on", "technic:deployer_on")
-minetest.register_alias("pipeworks:nodebreaker_off", "technic:node_breaker_off")
-minetest.register_alias("pipeworks:nodebreaker_on", "technic:node_breaker_on")
+dofile(modpath.."/deployer.lua")
+dofile(modpath.."/node_breaker.lua")
 
 print("Pipeworks loaded!")
diff --git a/node_breaker.lua b/node_breaker.lua
new file mode 100644 (file)
index 0000000..105f431
--- /dev/null
@@ -0,0 +1,111 @@
+if minetest.get_modpath("technic") then --technic installed
+       --register aliases in order to use technic's node breakers
+       minetest.register_alias("pipeworks:nodebreaker_off", "technic:nodebreaker_off")
+       minetest.register_alias("pipeworks:nodebreaker_on", "technic:nodebreaker_on")
+       return
+end
+
+--register aliases for when someone had technic installed, but then uninstalled it but not pipeworks
+minetest.register_alias("technic:nodebreaker_off", "pipeworks:nodebreaker_off")
+minetest.register_alias("technic:nodebreaker_on", "pipeworks:nodebreaker_on")
+
+minetest.register_craft({
+       output = 'pipeworks:nodebreaker_off 1',
+       recipe = {
+               {'default:wood', 'default:pick_mese','default:wood'},
+               {'default:stone', 'mesecons:piston','default:stone'},
+               {'default:stone', 'mesecons:mesecon','default:stone'},
+
+       }
+})
+
+function hacky_swap_node(pos,name)
+       local node=minetest.env:get_node(pos)
+       local meta=minetest.env:get_meta(pos)
+       local meta0=meta:to_table()
+       node.name=name
+       minetest.env:add_node(pos, node)
+       local meta=minetest.env:get_meta(pos)
+       meta:from_table(meta0)
+end
+
+node_breaker_on = function(pos, node)
+       if node.name == "pipeworks:nodebreaker_off" then
+               hacky_swap_node(pos,"pipeworks:nodebreaker_on")
+               break_node (pos,node.param2)
+               nodeupdate(pos)
+       end
+end
+
+node_breaker_off = function(pos, node)
+       if node.name == "pipeworks:nodebreaker_on" then
+               hacky_swap_node(pos,"pipeworks:nodebreaker_off")
+               nodeupdate(pos)
+       end
+end
+
+function break_node (pos, n_param)
+       local pos1 = {x=pos.x, y=pos.y, z=pos.z}
+       local pos2 = {x=pos.x, y=pos.y, z=pos.z}
+
+       --param2 3=x+ 1=x- 2=z+ 0=z-
+       local x_velocity, z_velocity = 0, 0
+       if n_param == 3 then
+               pos2.x = pos2.x + 1
+               pos1.x = pos1.x - 1
+               x_velocity = -1
+       elseif n_param == 2 then
+               pos2.z = pos2.z + 1
+               pos1.z = pos1.z - 1
+               z_velocity = -1
+       elseif n_param == 1 then
+               pos2.x = pos2.x - 1
+               pos1.x = pos1.x + 1
+               x_velocity = 1
+       elseif n_param == 0 then
+               pos2.z = pos2.z - 1
+               pos1.x = pos1.z + 1
+               z_velocity = 1
+       end
+
+       local node = minetest.env:get_node(pos2)
+       if node.name == "air" or name == "ignore" then
+               return nil
+       elseif minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].liquidtype ~= "none" then
+               return nil
+       end
+       local drops = minetest.get_node_drops(node.name, "default:pick_mese")
+       for _, dropped_item in ipairs(drops) do
+               local item1 = tube_item({x=pos.x, y=pos.y, z=pos.z}, dropped_item)
+               item1:get_luaentity().start_pos = {x=pos.x, y=pos.y, z=pos.z}
+               item1:setvelocity({x=x_velocity, y=0, z=z_velocity})
+               item1:setacceleration({x=0, y=0, z=0})
+       end
+       minetest.env:remove_node(pos2)
+end
+
+minetest.register_node("pipeworks:nodebreaker_off", {
+       description = "Node Breaker",
+       tile_images = {"pipeworks_nodebreaker_top_off.png","pipeworks_nodebreaker_bottom_off.png","pipeworks_nodebreaker_side2_off.png","pipeworks_nodebreaker_side1_off.png",
+                       "pipeworks_nodebreaker_back.png","pipeworks_nodebreaker_front_off.png"},
+       is_ground_content = true,
+       paramtype2 = "facedir",
+       groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2,tubedevice=1},
+       mesecons= {effector={action_on=node_breaker_on, action_off=node_breaker_off}},
+       sounds = default.node_sound_stone_defaults(),
+       on_construct = function(pos)
+       local meta = minetest.env:get_meta(pos)
+       end,
+       
+})
+
+minetest.register_node("pipeworks:nodebreaker_on", {
+       description = "Node Breaker",
+       tile_images = {"pipeworks_nodebreaker_top_on.png","pipeworks_nodebreaker_bottom_on.png","pipeworks_nodebreaker_side2_on.png","pipeworks_nodebreaker_side1_on.png",
+                       "pipeworks_nodebreaker_back.png","pipeworks_nodebreaker_front_on.png"},
+       mesecons= {effector={action_on=node_breaker_on, action_off=node_breaker_off}},
+       is_ground_content = true,
+       paramtype2 = "facedir",
+       groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2,tubedevice=1,not_in_creative_inventory=1},
+       sounds = default.node_sound_stone_defaults(),
+})
\ No newline at end of file