summaryrefslogtreecommitdiff
path: root/pipeworks/devices.lua
diff options
context:
space:
mode:
authorVanessa Ezekowitz <vanessaezekowitz@gmail.com>2017-03-17 11:28:20 -0400
committerVanessa Ezekowitz <vanessaezekowitz@gmail.com>2017-03-17 11:28:20 -0400
commit06d9243586cecb1abed74550ce2544b436572a35 (patch)
treee3cc3b59c313ffea4ef69f2be6f3182e8fc0ffa3 /pipeworks/devices.lua
parentcaeaae8e17f696c7bd387dd1080b1dd7edfeb379 (diff)
downloaddreambuilder_modpack-06d9243586cecb1abed74550ce2544b436572a35.tar
dreambuilder_modpack-06d9243586cecb1abed74550ce2544b436572a35.tar.gz
dreambuilder_modpack-06d9243586cecb1abed74550ce2544b436572a35.tar.bz2
dreambuilder_modpack-06d9243586cecb1abed74550ce2544b436572a35.tar.xz
dreambuilder_modpack-06d9243586cecb1abed74550ce2544b436572a35.zip
update pipeworks again
Diffstat (limited to 'pipeworks/devices.lua')
-rw-r--r--pipeworks/devices.lua233
1 files changed, 142 insertions, 91 deletions
diff --git a/pipeworks/devices.lua b/pipeworks/devices.lua
index a102a28..4b7f574 100644
--- a/pipeworks/devices.lua
+++ b/pipeworks/devices.lua
@@ -1,3 +1,84 @@
+
+-- rotation handlers
+
+function pipeworks.fix_after_rotation(pos, node, user, mode, new_param2)
+
+ if string.find(node.name, "spigot") then new_param2 = new_param2 % 4 end
+
+ newnode = string.gsub(node.name, "_on", "_off")
+ minetest.swap_node(pos, { name = newnode, param2 = new_param2 })
+ pipeworks.scan_for_pipe_objects(pos)
+
+ return true
+end
+
+function pipeworks.rotate_on_place(itemstack, placer, pointed_thing)
+
+ local playername = placer:get_player_name()
+ if not minetest.is_protected(pointed_thing.under, playername)
+ and not minetest.is_protected(pointed_thing.above, playername) then
+
+ local node = minetest.get_node(pointed_thing.under)
+
+ if (not placer:get_player_control().sneak)
+ and minetest.registered_nodes[node.name]
+ and minetest.registered_nodes[node.name].on_rightclick then
+ minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack)
+ else
+
+ local pitch = placer:get_look_pitch()
+ local above = pointed_thing.above
+ local under = pointed_thing.under
+ local fdir = minetest.dir_to_facedir(placer:get_look_dir())
+ local undernode = minetest.get_node(under)
+ local abovenode = minetest.get_node(above)
+ local uname = undernode.name
+ local aname = abovenode.name
+ local isabove = (above.x == under.x) and (above.z == under.z) and (pitch > 0)
+ local pos1 = above
+
+ -- check if the object should be turned vertically
+ if above.x == under.x
+ and above.z == under.z
+ and (
+ string.find(uname, "pipeworks:pipe_")
+ or string.find(uname, "pipeworks:storage_")
+ or string.find(uname, "pipeworks:expansion_")
+ or ( string.find(uname, "pipeworks:grating") and not isabove )
+ or ( string.find(uname, "pipeworks:pump_") and not isabove )
+
+ or (
+ ( string.find(uname, "pipeworks:valve")
+ or string.find(uname, "pipeworks:entry_panel")
+ or string.find(uname, "pipeworks:flow_sensor") )
+ and minetest.facedir_to_dir(undernode.param2).y ~= 0 )
+ )
+ then
+ fdir = 17
+ end
+
+ if minetest.registered_nodes[uname]
+ and minetest.registered_nodes[uname]["buildable_to"] then
+ pos1 = under
+ end
+
+ if minetest.registered_nodes[minetest.get_node(pos1).name]
+ and not minetest.registered_nodes[minetest.get_node(pos1).name]["buildable_to"] then return end
+
+ local placednode = string.gsub(itemstack:get_name(), "_loaded", "_empty")
+ placednode = string.gsub(placednode, "_on", "_off")
+
+ minetest.add_node(pos1, {name = placednode, param2 = fdir })
+ pipeworks.scan_for_pipe_objects(pos1)
+
+ if not pipeworks.expect_infinite_stacks then
+ itemstack:take_item()
+ end
+ end
+ end
+ return itemstack
+end
+
-- List of devices that should participate in the autoplace algorithm
local pipereceptor_on = nil
@@ -76,7 +157,8 @@ for s in ipairs(states) do
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
local fdir = node.param2
minetest.add_node(pos, { name = "pipeworks:pump_"..states[3-s], param2 = fdir })
- end
+ end,
+ on_rotate = screwdriver.rotate_simple
})
minetest.register_node("pipeworks:valve_"..states[s].."_empty", {
@@ -89,18 +171,16 @@ for s in ipairs(states) do
paramtype2 = "facedir",
selection_box = {
type = "fixed",
- fixed = { -8/16, -4/16, -5/16, 8/16, 5/16, 5/16 }
+ fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 }
},
collision_box = {
type = "fixed",
- fixed = { -8/16, -4/16, -5/16, 8/16, 5/16, 5/16 }
+ fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 }
},
groups = dgroups,
sounds = default.node_sound_wood_defaults(),
walkable = true,
- after_place_node = function(pos)
- pipeworks.scan_for_pipe_objects(pos)
- end,
+ on_place = pipeworks.rotate_on_place,
after_dig_node = function(pos)
pipeworks.scan_for_pipe_objects(pos)
end,
@@ -116,7 +196,8 @@ for s in ipairs(states) do
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
local fdir = node.param2
minetest.add_node(pos, { name = "pipeworks:valve_"..states[3-s].."_empty", param2 = fdir })
- end
+ end,
+ on_rotate = pipeworks.fix_after_rotation
})
end
@@ -130,18 +211,16 @@ minetest.register_node("pipeworks:valve_on_loaded", {
paramtype2 = "facedir",
selection_box = {
type = "fixed",
- fixed = { -8/16, -4/16, -5/16, 8/16, 5/16, 5/16 }
+ fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 }
},
collision_box = {
type = "fixed",
- fixed = { -8/16, -4/16, -5/16, 8/16, 5/16, 5/16 }
+ fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 }
},
groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
sounds = default.node_sound_wood_defaults(),
walkable = true,
- after_place_node = function(pos)
- pipeworks.scan_for_pipe_objects(pos)
- end,
+ on_place = pipeworks.rotate_on_place,
after_dig_node = function(pos)
pipeworks.scan_for_pipe_objects(pos)
end,
@@ -154,10 +233,11 @@ minetest.register_node("pipeworks:valve_on_loaded", {
minetest.add_node(pos,{name="pipeworks:valve_off_empty", param2 = node.param2})
end
}},
- on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
+ on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
local fdir = node.param2
minetest.add_node(pos, { name = "pipeworks:valve_off_empty", param2 = fdir })
- end
+ end,
+ on_rotate = pipeworks.fix_after_rotation
})
-- grating
@@ -183,6 +263,7 @@ minetest.register_node("pipeworks:grating", {
after_dig_node = function(pos)
pipeworks.scan_for_pipe_objects(pos)
end,
+ on_rotate = false
})
-- outlet spigot
@@ -211,7 +292,8 @@ minetest.register_node("pipeworks:spigot", {
collision_box = {
type = "fixed",
fixed = { -2/16, -6/16, -2/16, 2/16, 2/16, 8/16 }
- }
+ },
+ on_rotate = pipeworks.fix_after_rotation
})
minetest.register_node("pipeworks:spigot_pouring", {
@@ -237,6 +319,7 @@ minetest.register_node("pipeworks:spigot_pouring", {
sounds = default.node_sound_wood_defaults(),
walkable = true,
after_place_node = function(pos)
+ minetest.set_node(pos, { name = "pipeworks:spigot", param2 = minetest.get_node(pos).param2 })
pipeworks.scan_for_pipe_objects(pos)
end,
after_dig_node = function(pos)
@@ -251,6 +334,7 @@ minetest.register_node("pipeworks:spigot_pouring", {
fixed = { -2/16, -6/16, -2/16, 2/16, 2/16, 8/16 }
},
drop = "pipeworks:spigot",
+ on_rotate = pipeworks.fix_after_rotation
})
-- sealed pipe entry/exit (horizontal pipe passing through a metal
@@ -274,66 +358,13 @@ minetest.register_node("pipeworks:entry_panel_empty", {
groups = {snappy=3, pipe=1},
sounds = default.node_sound_wood_defaults(),
walkable = true,
- after_place_node = function(pos)
- pipeworks.scan_for_pipe_objects(pos)
- end,
+ on_place = pipeworks.rotate_on_place,
after_dig_node = function(pos)
pipeworks.scan_for_pipe_objects(pos)
end,
selection_box = panel_cbox,
collision_box = panel_cbox,
- on_place = function(itemstack, placer, pointed_thing)
- local playername = placer:get_player_name()
- if not minetest.is_protected(pointed_thing.under, playername)
- and not minetest.is_protected(pointed_thing.above, playername) then
- local node = minetest.get_node(pointed_thing.under)
-
- if not minetest.registered_nodes[node.name]
- or not minetest.registered_nodes[node.name].on_rightclick then
- local pitch = placer:get_look_pitch()
- local above = pointed_thing.above
- local under = pointed_thing.under
- local fdir = minetest.dir_to_facedir(placer:get_look_dir())
- local undernode = minetest.get_node(under)
- local abovenode = minetest.get_node(above)
- local uname = undernode.name
- local aname = abovenode.name
- local isabove = (above.x == under.x) and (above.z == under.z) and (pitch > 0)
- local pos1 = above
-
- if above.x == under.x
- and above.z == under.z
- and ( string.find(uname, "pipeworks:pipe_")
- or string.find(uname, "pipeworks:storage_")
- or string.find(uname, "pipeworks:expansion_")
- or ( string.find(uname, "pipeworks:grating") and not isabove )
- or ( string.find(uname, "pipeworks:pump_") and not isabove )
- or ( string.find(uname, "pipeworks:entry_panel")
- and undernode.param2 == 13 )
- )
- then
- fdir = 13
- end
-
- if minetest.registered_nodes[uname]["buildable_to"] then
- pos1 = under
- end
-
- if not minetest.registered_nodes[minetest.get_node(pos1).name]["buildable_to"] then return end
-
- minetest.add_node(pos1, {name = "pipeworks:entry_panel_empty", param2 = fdir })
- pipeworks.scan_for_pipe_objects(pos1)
-
- if not pipeworks.expect_infinite_stacks then
- itemstack:take_item()
- end
-
- else
- minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack)
- end
- end
- return itemstack
- end
+ on_rotate = pipeworks.fix_after_rotation
})
minetest.register_node("pipeworks:entry_panel_loaded", {
@@ -346,15 +377,14 @@ minetest.register_node("pipeworks:entry_panel_loaded", {
groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
sounds = default.node_sound_wood_defaults(),
walkable = true,
- after_place_node = function(pos)
- pipeworks.scan_for_pipe_objects(pos)
- end,
+ on_place = pipeworks.rotate_on_place,
after_dig_node = function(pos)
pipeworks.scan_for_pipe_objects(pos)
end,
selection_box = panel_cbox,
collision_box = panel_cbox,
- drop = "pipeworks:entry_panel_empty"
+ drop = "pipeworks:entry_panel_empty",
+ on_rotate = pipeworks.fix_after_rotation
})
minetest.register_node("pipeworks:flow_sensor_empty", {
@@ -368,9 +398,7 @@ minetest.register_node("pipeworks:flow_sensor_empty", {
groups = {snappy=3, pipe=1},
sounds = default.node_sound_wood_defaults(),
walkable = true,
- after_place_node = function(pos)
- pipeworks.scan_for_pipe_objects(pos)
- end,
+ on_place = pipeworks.rotate_on_place,
after_dig_node = function(pos)
pipeworks.scan_for_pipe_objects(pos)
end,
@@ -382,18 +410,19 @@ minetest.register_node("pipeworks:flow_sensor_empty", {
selection_box = {
type = "fixed",
fixed = {
- { -8/16, -2/16, -2/16, 8/16, 2/16, 2/16 },
- { -4/16, -3/16, -3/16, 4/16, 3/16, 3/16 },
+ { -2/16, -2/16, -8/16, 2/16, 2/16, 8/16 },
+ { -3/16, -3/16, -4/16, 3/16, 3/16, 4/16 },
}
},
collision_box = {
type = "fixed",
fixed = {
- { -8/16, -2/16, -2/16, 8/16, 2/16, 2/16 },
- { -4/16, -3/16, -3/16, 4/16, 3/16, 3/16 },
+ { -2/16, -2/16, -8/16, 2/16, 2/16, 8/16 },
+ { -3/16, -3/16, -4/16, 3/16, 3/16, 4/16 },
}
},
- mesecons = pipereceptor_off
+ mesecons = pipereceptor_off,
+ on_rotate = pipeworks.fix_after_rotation
})
minetest.register_node("pipeworks:flow_sensor_loaded", {
@@ -407,9 +436,7 @@ minetest.register_node("pipeworks:flow_sensor_loaded", {
groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
sounds = default.node_sound_wood_defaults(),
walkable = true,
- after_place_node = function(pos)
- pipeworks.scan_for_pipe_objects(pos)
- end,
+ on_place = pipeworks.rotate_on_place,
after_dig_node = function(pos)
pipeworks.scan_for_pipe_objects(pos)
end,
@@ -421,19 +448,20 @@ minetest.register_node("pipeworks:flow_sensor_loaded", {
selection_box = {
type = "fixed",
fixed = {
- { -8/16, -2/16, -2/16, 8/16, 2/16, 2/16 },
- { -4/16, -3/16, -3/16, 4/16, 3/16, 3/16 },
+ { -2/16, -2/16, -8/16, 2/16, 2/16, 8/16 },
+ { -3/16, -3/16, -4/16, 3/16, 3/16, 4/16 },
}
},
collision_box = {
type = "fixed",
fixed = {
- { -8/16, -2/16, -2/16, 8/16, 2/16, 2/16 },
- { -4/16, -3/16, -3/16, 4/16, 3/16, 3/16 },
+ { -2/16, -2/16, -8/16, 2/16, 2/16, 8/16 },
+ { -3/16, -3/16, -4/16, 3/16, 3/16, 4/16 },
}
},
drop = "pipeworks:flow_sensor_empty",
- mesecons = pipereceptor_on
+ mesecons = pipereceptor_on,
+ on_rotate = pipeworks.fix_after_rotation
})
-- tanks
@@ -473,6 +501,7 @@ for fill = 0, 10 do
after_dig_node = function(pos)
pipeworks.scan_for_pipe_objects(pos)
end,
+ on_rotate = false
})
minetest.register_node("pipeworks:storage_tank_"..fill, {
@@ -499,6 +528,7 @@ for fill = 0, 10 do
after_dig_node = function(pos)
pipeworks.scan_for_pipe_objects(pos)
end,
+ on_rotate = false
})
end
@@ -533,6 +563,7 @@ minetest.register_node("pipeworks:fountainhead", {
type = "fixed",
fixed = { -2/16, -8/16, -2/16, 2/16, 8/16, 2/16 }
},
+ on_rotate = false
})
minetest.register_node("pipeworks:fountainhead_pouring", {
@@ -546,6 +577,7 @@ minetest.register_node("pipeworks:fountainhead_pouring", {
sounds = default.node_sound_wood_defaults(),
walkable = true,
after_place_node = function(pos)
+ minetest.set_node(pos, { name = "pipeworks:fountainhead", param2 = minetest.get_node(pos).param2 })
pipeworks.scan_for_pipe_objects(pos)
end,
after_dig_node = function(pos)
@@ -564,9 +596,28 @@ minetest.register_node("pipeworks:fountainhead_pouring", {
type = "fixed",
fixed = { -2/16, -8/16, -2/16, 2/16, 8/16, 2/16 }
},
- drop = "pipeworks:fountainhead"
+ drop = "pipeworks:fountainhead",
+ on_rotate = false
})
minetest.register_alias("pipeworks:valve_off_loaded", "pipeworks:valve_off_empty")
minetest.register_alias("pipeworks:entry_panel", "pipeworks:entry_panel_empty")
+minetest.register_lbm({
+ name = "pipeworks:rotate_valves_flowsensors",
+ label = "Flip pipeworks valves and flow sensors around X/Z",
+ run_at_every_load = false,
+ nodenames = {
+ "pipeworks:flow_sensor_empty",
+ "pipeworks:flow_sensor_loaded",
+ "pipeworks:valve_off_empty",
+ "pipeworks:valve_on_empty",
+ "pipeworks:valve_off_loaded",
+ },
+ action = function(pos, node)
+ local dir = minetest.facedir_to_dir(node.param2)
+ local newdir = { x=dir.z, y=dir.y, z=dir.x }
+ local newfdir = minetest.dir_to_facedir(newdir)
+ minetest.swap_node(pos, { name = node.name, param2 = newfdir })
+ end
+})