76 files added
269 files renamed
1 files copied
3 files deleted
New file |
| | |
| | | This simple mod uses nodeboxes to supply a complete set of 3D flanged pipes, |
| | | along with "valve" and "pump" devices. |
| | | |
| | | Unlike the previous version of this mod, these pipes are rounded, and when |
| | | placed, they'll automatically join together as needed. Pipes can go vertically |
| | | or horizontally, and there are enough nodes defined to allow for all possible |
| | | connections. Valves and pumps can only be placed horizontally, and will |
| | | automatically rotate and join with neighboring pipes as objects are added, as |
| | | well as joining with each other under certain circumstances. |
| | | |
| | | Pipes come in two variants: one type bears one or more dark windows on each |
| | | pipe, suggesting they're empty, while the other type bears green-tinted |
| | | windows, as if full (the two colors should also be easy to select if you want |
| | | to change them in a paint program). These windows only appear on straight |
| | | lengths and on certain junctions. |
| | | |
| | | There are no crafting recipes, yet, but you can use /giveme as usual, namely |
| | | "/giveme pipeworks:pipe 999" or so, and then place them as needed. See |
| | | init.lua for more details. |
| | | |
| | | This mod is intended to be used as a basis or at least as sort of a model for |
| | | something else to build on (perhaps a nicer-looking oil mod?), and does not |
| | | provide any of the code necessary to cause anything to flow through them. Like |
| | | the pipes, the valve and pump don't do anything useful yet, but you can punch |
| | | them to turn them "on" and "off". Note that the valve and pump textures and |
| | | shapes are not yet complete (hence their boxy appearance). |
| | | |
| | | This mod is a work in progress. |
| | | |
| | | Please note that owing to the nature of this mod, I have opted to use 64px |
| | | textures. Anything less just looks terrible. |
| | | |
| | | If you don't need the old node names from the previous version of this mod, |
| | | edit init.lua and comment-out the 'dofile' line at the top. |
New file |
| | |
| | | -- autorouting for pipes |
| | | |
| | | function pipe_scanforobjects(pos) |
| | | pipe_autoroute({ x=pos.x-1, y=pos.y , z=pos.z }, "_loaded") |
| | | pipe_autoroute({ x=pos.x+1, y=pos.y , z=pos.z }, "_loaded") |
| | | pipe_autoroute({ x=pos.x , y=pos.y-1, z=pos.z }, "_loaded") |
| | | pipe_autoroute({ x=pos.x , y=pos.y+1, z=pos.z }, "_loaded") |
| | | pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z-1 }, "_loaded") |
| | | pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z+1 }, "_loaded") |
| | | pipe_autoroute(pos, "_loaded") |
| | | |
| | | pipe_autoroute({ x=pos.x-1, y=pos.y , z=pos.z }, "_empty") |
| | | pipe_autoroute({ x=pos.x+1, y=pos.y , z=pos.z }, "_empty") |
| | | pipe_autoroute({ x=pos.x , y=pos.y-1, z=pos.z }, "_empty") |
| | | pipe_autoroute({ x=pos.x , y=pos.y+1, z=pos.z }, "_empty") |
| | | pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z-1 }, "_empty") |
| | | pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z+1 }, "_empty") |
| | | pipe_autoroute(pos, "_empty") |
| | | end |
| | | |
| | | function pipe_autoroute(pos, state) |
| | | nctr = minetest.env:get_node(pos) |
| | | if (string.find(nctr.name, "pipeworks:pipe_") == nil) then return end |
| | | |
| | | pipes_scansurroundings(pos) |
| | | |
| | | nsurround = pxm..pxp..pym..pyp..pzm..pzp |
| | | if nsurround == "000000" then nsurround = "110000" end |
| | | minetest.env:add_node(pos, { name = "pipeworks:pipe_"..nsurround..state }) |
| | | end |
| | | |
| | | -- autorouting for pneumatic tubes |
| | | |
| | | function tube_scanforobjects(pos) |
| | | tube_autoroute({ x=pos.x-1, y=pos.y , z=pos.z }) |
| | | tube_autoroute({ x=pos.x+1, y=pos.y , z=pos.z }) |
| | | tube_autoroute({ x=pos.x , y=pos.y-1, z=pos.z }) |
| | | tube_autoroute({ x=pos.x , y=pos.y+1, z=pos.z }) |
| | | tube_autoroute({ x=pos.x , y=pos.y , z=pos.z-1 }) |
| | | tube_autoroute({ x=pos.x , y=pos.y , z=pos.z+1 }) |
| | | tube_autoroute(pos) |
| | | end |
| | | |
| | | function tube_autoroute(pos) |
| | | nctr = minetest.env:get_node(pos) |
| | | print ("minetest.get_item_group("..nctr.name..',"tubedevice") == '..minetest.get_item_group(nctr.name, "tubedevice")) |
| | | if (string.find(nctr.name, "pipeworks:tube_") == nil) |
| | | and minetest.get_item_group(nctr.name, "tubedevice") ~= 1 then return end |
| | | |
| | | pxm=0 |
| | | pxp=0 |
| | | pym=0 |
| | | pyp=0 |
| | | pzm=0 |
| | | pzp=0 |
| | | |
| | | nxm = minetest.env:get_node({ x=pos.x-1, y=pos.y , z=pos.z }) |
| | | nxp = minetest.env:get_node({ x=pos.x+1, y=pos.y , z=pos.z }) |
| | | nym = minetest.env:get_node({ x=pos.x , y=pos.y-1, z=pos.z }) |
| | | nyp = minetest.env:get_node({ x=pos.x , y=pos.y+1, z=pos.z }) |
| | | nzm = minetest.env:get_node({ x=pos.x , y=pos.y , z=pos.z-1 }) |
| | | nzp = minetest.env:get_node({ x=pos.x , y=pos.y , z=pos.z+1 }) |
| | | |
| | | if (string.find(nxm.name, "pipeworks:tube_") ~= nil) |
| | | or minetest.get_item_group(nxm.name, "tubedevice") == 1 then pxm=1 end |
| | | if (string.find(nxp.name, "pipeworks:tube_") ~= nil) |
| | | or minetest.get_item_group(nxp.name, "tubedevice") == 1 then pxp=1 end |
| | | if (string.find(nym.name, "pipeworks:tube_") ~= nil) |
| | | or minetest.get_item_group(nym.name, "tubedevice") == 1 then pym=1 end |
| | | if (string.find(nyp.name, "pipeworks:tube_") ~= nil) |
| | | or minetest.get_item_group(nyp.name, "tubedevice") == 1 then pyp=1 end |
| | | if (string.find(nzm.name, "pipeworks:tube_") ~= nil) |
| | | or minetest.get_item_group(nzm.name, "tubedevice") == 1 then pzm=1 end |
| | | if (string.find(nzp.name, "pipeworks:tube_") ~= nil) |
| | | or minetest.get_item_group(nzp.name, "tubedevice") == 1 then pzp=1 end |
| | | |
| | | nsurround = pxm..pxp..pym..pyp..pzm..pzp |
| | | if minetest.get_item_group(nctr.name, "tubedevice") ~= 1 then |
| | | minetest.env:add_node(pos, { name = "pipeworks:tube_"..nsurround }) |
| | | end |
| | | |
| | | end |
| | | |
| | | -- auto-rotation code for various devices the tubes attach to |
| | | |
| | | function pipe_device_autorotate(pos, state, bname) |
| | | |
| | | if state == nil then |
| | | nname = bname |
| | | else |
| | | nname = bname.."_"..state |
| | | end |
| | | |
| | | local nctr = minetest.env:get_node(pos) |
| | | |
| | | pipes_scansurroundings(pos) |
| | | |
| | | if (pxm+pxp) ~= 0 then |
| | | minetest.env:add_node(pos, { name = nname.."_x" }) |
| | | return |
| | | end |
| | | |
| | | if (pzm+pzp) ~= 0 then |
| | | minetest.env:add_node(pos, { name = nname.."_z" }) |
| | | end |
| | | |
| | | end |
| | | |
| | | function pipes_scansurroundings(pos) |
| | | pxm=0 |
| | | pxp=0 |
| | | pym=0 |
| | | pyp=0 |
| | | pzm=0 |
| | | pzp=0 |
| | | |
| | | nxm = minetest.env:get_node({ x=pos.x-1, y=pos.y , z=pos.z }) |
| | | nxp = minetest.env:get_node({ x=pos.x+1, y=pos.y , z=pos.z }) |
| | | nym = minetest.env:get_node({ x=pos.x , y=pos.y-1, z=pos.z }) |
| | | nyp = minetest.env:get_node({ x=pos.x , y=pos.y+1, z=pos.z }) |
| | | nzm = minetest.env:get_node({ x=pos.x , y=pos.y , z=pos.z-1 }) |
| | | nzp = minetest.env:get_node({ x=pos.x , y=pos.y , z=pos.z+1 }) |
| | | |
| | | if (string.find(nxm.name, "pipeworks:pipe_") ~= nil) then pxm=1 end |
| | | if (string.find(nxp.name, "pipeworks:pipe_") ~= nil) then pxp=1 end |
| | | if (string.find(nym.name, "pipeworks:pipe_") ~= nil) then pym=1 end |
| | | if (string.find(nyp.name, "pipeworks:pipe_") ~= nil) then pyp=1 end |
| | | if (string.find(nzm.name, "pipeworks:pipe_") ~= nil) then pzm=1 end |
| | | if (string.find(nzp.name, "pipeworks:pipe_") ~= nil) then pzp=1 end |
| | | |
| | | for p in ipairs(pipes_devicelist) do |
| | | pdev = pipes_devicelist[p] |
| | | if (string.find(nxm.name, "pipeworks:"..pdev.."_off_x") ~= nil) or |
| | | (string.find(nxm.name, "pipeworks:"..pdev.."_on_x") ~= nil) or |
| | | (string.find(nxm.name, "pipeworks:"..pdev.."_x") ~= nil) then |
| | | pxm=1 |
| | | end |
| | | |
| | | if (string.find(nxp.name, "pipeworks:"..pdev.."_off_x") ~= nil) or |
| | | (string.find(nxp.name, "pipeworks:"..pdev.."_on_x") ~= nil) or |
| | | (string.find(nxp.name, "pipeworks:"..pdev.."_x") ~= nil) then |
| | | pxp=1 |
| | | end |
| | | |
| | | if (string.find(nzm.name, "pipeworks:"..pdev.."_off_z") ~= nil) or |
| | | (string.find(nzm.name, "pipeworks:"..pdev.."_on_z") ~= nil) or |
| | | (string.find(nzm.name, "pipeworks:"..pdev.."_z") ~= nil) then |
| | | pzm=1 |
| | | end |
| | | |
| | | if (string.find(nzp.name, "pipeworks:"..pdev.."_off_z") ~= nil) or |
| | | (string.find(nzp.name, "pipeworks:"..pdev.."_on_z") ~= nil) or |
| | | (string.find(nzp.name, "pipeworks:"..pdev.."_z") ~= nil) then |
| | | pzp=1 |
| | | end |
| | | end |
| | | |
| | | -- storage tanks and intake grates have vertical connections |
| | | -- also, so they require a special case |
| | | |
| | | if (string.find(nym.name, "pipeworks:storage_tank_") ~= nil) or |
| | | (string.find(nym.name, "pipeworks:intake") ~= nil) or |
| | | (string.find(nym.name, "pipeworks:outlet") ~= nil) then |
| | | pym=1 |
| | | end |
| | | end |
| | | |
| | | function pipe_look_for_stackable_tanks(pos) |
| | | tym = minetest.env:get_node({ x=pos.x , y=pos.y-1, z=pos.z }) |
| | | |
| | | if string.find(tym.name, "pipeworks:storage_tank_") ~= nil or |
| | | string.find(tym.name, "pipeworks:expansion_tank_") ~= nil then |
| | | minetest.env:add_node(pos, { name = "pipeworks:expansion_tank_0"}) |
| | | end |
| | | end |
| | | |
New file |
| | |
| | | Changelog |
| | | --------- |
| | | |
| | | 2012-08-24: Added square-ish pneumatic tubes, with their own autoplace code |
| | | (they do not connect to the steel pipes or their related devices). |
| | | |
| | | 2012-08-22: Added outlet grate, made it participate in autoplace algorithm. |
| | | Extended storage tank to show fill level in 10% steps (0% to 100%). Added |
| | | "expansion tank" that appears if the user stacks tanks upwards. (Downwards is |
| | | not checked). |
| | | |
| | | 2012-08-21: Made storage tank participate in autoplace algorithm. Tuned API a |
| | | little to allow for more flexible placement. Re-organized code a bit to allow |
| | | for some upcoming rules changes. Made storage tanks' upper/lower fittins and |
| | | intake grate participate in autoplace algorithm. |
| | | |
| | | 2012-08-20: Added temporary nodes for storage tank and intake grating, but |
| | | without autoplace. |
| | | |
| | | 2012-08-19: Pumps and valves now fully participate in the |
| | | auto-rotate/auto-place algorithm. |
| | | |
| | | 2012-08-18: Total rewrite again. All pipes are now nice and round-looking, and |
| | | they auto-connect! Also added temporary nodes for pump and valve (each with an |
| | | on/off setting - punch to change). No crafting recipes yet and the pipes still |
| | | don't do anything useful yet. Soon. |
| | | |
| | | 2012-08-06: Moved this changelog off the forum post and into a separate file. |
| | | |
| | | 2012-08-05 (multiple updates): Rewrote pipeworks to use loops and tables to |
| | | create the nodes. Requires far less code now. Added -X, +X, -Y, +Y, -Z, +Z |
| | | capped stubs and a short centered horizontal segment. Changed node definitions |
| | | so that the aforementioned "short centered" segment is given on dig/drop. |
| | | Renamed it to just "pipeworks:pipe" (and pipe_loaded). Added empty/loaded |
| | | indicator images to the capped ends, removed some redundant comments. Made the |
| | | empty/loaded indication at the capped end more prominent. |
| | | |
| | | 2012-07-21: Added screenshot showing pipes as they look now that nodebox |
| | | texture rotation is fixed. |
| | | |
| | | 2012-07-18: Changed the mod name and all internals to 'pipeworks' instead of |
| | | 'pipes'... after a couple of mistakes :-) |
| | | |
| | | 2012-07-12: moved project to github. |
| | | |
| | | 2012-06-23: Initial release, followed by reworking the textures a bit. |
New file |
| | |
| | | -- Crafting recipes for pipeworks |
| | | |
| | | -- If the technic mod is present, then don't bother registering these recipes |
| | | -- as that mod supplies its own. |
| | | |
| | | if io.open(minetest.get_modpath("pipeworks").."/../technic/init.lua", "r") == nil then |
| | | |
| | | -- If homedecor is not installed, we need to register a few of its crafts |
| | | -- manually so we can use them. |
| | | |
| | | if minetest.get_modpath("homedecor") == nil then |
| | | |
| | | minetest.register_craftitem(":homedecor:plastic_sheeting", { |
| | | description = "Plastic sheet", |
| | | inventory_image = "pipeworks_plastic_sheeting.png", |
| | | }) |
| | | |
| | | minetest.register_craft({ |
| | | type = "cooking", |
| | | output = "homedecor:plastic_sheeting", |
| | | recipe = "default:junglegrass", |
| | | }) |
| | | |
| | | minetest.register_craft({ |
| | | type = 'fuel', |
| | | recipe = 'homedecor:plastic_sheeting', |
| | | burntime = 30, |
| | | }) |
| | | end |
| | | |
| | | minetest.register_craft( { |
| | | output = "pipeworks:pipe_110000_empty 12", |
| | | recipe = { |
| | | { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }, |
| | | { "", "", "" }, |
| | | { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" } |
| | | }, |
| | | }) |
| | | |
| | | minetest.register_craft( { |
| | | output = "pipeworks:pump 2", |
| | | recipe = { |
| | | { "default:stone", "default:stone", "default:stone" }, |
| | | { "default:steel_ingot", "default:stick", "default:steel_ingot" }, |
| | | { "default:stone", "default:stone", "default:stone" } |
| | | }, |
| | | }) |
| | | |
| | | minetest.register_craft( { |
| | | output = "pipeworks:valve 2", |
| | | recipe = { |
| | | { "", "default:stick", "" }, |
| | | { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }, |
| | | { "", "default:steel_ingot", "" } |
| | | }, |
| | | }) |
| | | |
| | | minetest.register_craft( { |
| | | output = "pipeworks:storage_tank 2", |
| | | recipe = { |
| | | { "", "default:steel_ingot", "default:steel_ingot" }, |
| | | { "default:steel_ingot", "default:glass", "default:steel_ingot" }, |
| | | { "default:steel_ingot", "default:steel_ingot", "" } |
| | | }, |
| | | }) |
| | | |
| | | minetest.register_craft( { |
| | | output = "pipeworks:intake 2", |
| | | recipe = { |
| | | { "", "default:steel_ingot", "" }, |
| | | { "default:steel_ingot", "", "default:steel_ingot" }, |
| | | { "", "default:steel_ingot", "" } |
| | | }, |
| | | }) |
| | | |
| | | minetest.register_craft( { |
| | | output = "pipeworks:outlet 2", |
| | | recipe = { |
| | | { "default:steel_ingot", "", "default:steel_ingot" }, |
| | | { "", "default:steel_ingot", "" }, |
| | | { "default:steel_ingot", "", "default:steel_ingot" } |
| | | }, |
| | | }) |
| | | |
| | | minetest.register_craft( { |
| | | output = "pipeworks:tube 12", |
| | | recipe = { |
| | | { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, |
| | | { "", "", "" }, |
| | | { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } |
| | | }, |
| | | }) |
| | | |
| | | end |
New file |
| | |
| | | -- List of devices that should participate in the autoplace algorithm |
| | | |
| | | pipes_devicelist = { |
| | | "pump", |
| | | "valve", |
| | | "storage_tank_0", |
| | | "storage_tank_1", |
| | | "storage_tank_2", |
| | | "storage_tank_3", |
| | | "storage_tank_4", |
| | | "storage_tank_5", |
| | | "storage_tank_6", |
| | | "storage_tank_7", |
| | | "storage_tank_8", |
| | | "storage_tank_9", |
| | | "storage_tank_10" |
| | | } |
| | | |
| | | -- tables |
| | | |
| | | minetest.register_alias("pipeworks:pump", "pipeworks:pump_off_x") |
| | | minetest.register_alias("pipeworks:valve", "pipeworks:valve_off_x") |
| | | minetest.register_alias("pipeworks:storage_tank", "pipeworks:storage_tank_0_x") |
| | | |
| | | pipe_pumpbody_x = { |
| | | { -6/16, -8/16, -6/16, 6/16, 8/16, 6/16 } |
| | | } |
| | | |
| | | pipe_pumpbody_z = { |
| | | { -6/16, -8/16, -6/16, 6/16, 8/16, 6/16 } |
| | | } |
| | | |
| | | pipe_valvebody_x = { |
| | | { -4/16, -4/16, -4/16, 4/16, 4/16, 4/16 } |
| | | } |
| | | |
| | | pipe_valvebody_z = { |
| | | { -4/16, -4/16, -4/16, 4/16, 4/16, 4/16 } |
| | | } |
| | | |
| | | pipe_valvehandle_on_x = { |
| | | { -5/16, 4/16, -1/16, 0, 5/16, 1/16 } |
| | | } |
| | | |
| | | pipe_valvehandle_on_z = { |
| | | { -1/16, 4/16, -5/16, 1/16, 5/16, 0 } |
| | | } |
| | | |
| | | pipe_valvehandle_off_x = { |
| | | { -1/16, 4/16, -5/16, 1/16, 5/16, 0 } |
| | | } |
| | | |
| | | pipe_valvehandle_off_z = { |
| | | { -5/16, 4/16, -1/16, 0, 5/16, 1/16 } |
| | | } |
| | | |
| | | -- Now define the nodes. |
| | | |
| | | local states = { "on", "off" } |
| | | local dgroups = "" |
| | | |
| | | for s in ipairs(states) do |
| | | |
| | | if states[s] == "off" then |
| | | dgroups = {snappy=3, pipe=1} |
| | | else |
| | | dgroups = {snappy=3, pipe=1, not_in_creative_inventory=1} |
| | | end |
| | | |
| | | local pumpboxes = {} |
| | | pipe_addbox(pumpboxes, pipe_leftstub) |
| | | pipe_addbox(pumpboxes, pipe_pumpbody_x) |
| | | pipe_addbox(pumpboxes, pipe_rightstub) |
| | | local tilex = "pipeworks_pump_ends.png" |
| | | local tilez = "pipeworks_pump_"..states[s]..".png" |
| | | |
| | | minetest.register_node("pipeworks:pump_"..states[s].."_x", { |
| | | description = "Pump Module ("..states[s]..")", |
| | | drawtype = "nodebox", |
| | | tiles = { |
| | | "pipeworks_pump_top_x.png", |
| | | "pipeworks_pump_sides.png", |
| | | tilex, |
| | | tilex, |
| | | "pipeworks_pump_sides.png", |
| | | tilez |
| | | }, |
| | | paramtype = "light", |
| | | selection_box = { |
| | | type = "fixed", |
| | | fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 } |
| | | }, |
| | | node_box = { |
| | | type = "fixed", |
| | | fixed = pumpboxes |
| | | }, |
| | | groups = dgroups, |
| | | sounds = default.node_sound_wood_defaults(), |
| | | walkable = true, |
| | | stack_max = 99, |
| | | after_place_node = function(pos) |
| | | pipe_device_autorotate(pos, states[s], "pipeworks:pump") |
| | | pipe_scanforobjects(pos) |
| | | end, |
| | | after_dig_node = function(pos) |
| | | pipe_scanforobjects(pos) |
| | | end, |
| | | drop = "pipeworks:pump_off_x" |
| | | }) |
| | | |
| | | local pumpboxes = {} |
| | | pipe_addbox(pumpboxes, pipe_frontstub) |
| | | pipe_addbox(pumpboxes, pipe_pumpbody_z) |
| | | pipe_addbox(pumpboxes, pipe_backstub) |
| | | |
| | | minetest.register_node("pipeworks:pump_"..states[s].."_z", { |
| | | description = "Pump Module ("..states[s]..", Z-axis)", |
| | | drawtype = "nodebox", |
| | | tiles = { |
| | | "pipeworks_pump_top_z.png", |
| | | "pipeworks_pump_sides.png", |
| | | tilez, |
| | | tilez, |
| | | "pipeworks_pump_sides.png", |
| | | tilex |
| | | }, |
| | | paramtype = "light", |
| | | selection_box = { |
| | | type = "fixed", |
| | | fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 } |
| | | }, |
| | | node_box = { |
| | | type = "fixed", |
| | | fixed = pumpboxes |
| | | }, |
| | | groups = {snappy=3, pipe=1, not_in_creative_inventory=1}, |
| | | sounds = default.node_sound_wood_defaults(), |
| | | walkable = true, |
| | | stack_max = 99, |
| | | after_place_node = function(pos) |
| | | pipe_device_autorotate(pos, states[s], "pipeworks:pump") |
| | | pipe_scanforobjects(pos) |
| | | end, |
| | | after_dig_node = function(pos) |
| | | pipe_scanforobjects(pos) |
| | | end, |
| | | drop = "pipeworks:pump_off_x" |
| | | }) |
| | | |
| | | local valveboxes = {} |
| | | pipe_addbox(valveboxes, pipe_leftstub) |
| | | pipe_addbox(valveboxes, pipe_valvebody_x) |
| | | if states[s] == "off" then |
| | | pipe_addbox(valveboxes, pipe_valvehandle_off_x) |
| | | else |
| | | pipe_addbox(valveboxes, pipe_valvehandle_on_x) |
| | | end |
| | | pipe_addbox(valveboxes, pipe_rightstub) |
| | | local tilex = "pipeworks_valvebody_ends.png" |
| | | local tilez = "pipeworks_valvebody_sides.png" |
| | | |
| | | minetest.register_node("pipeworks:valve_"..states[s].."_x", { |
| | | description = "Valve ("..states[s]..")", |
| | | drawtype = "nodebox", |
| | | tiles = { |
| | | "pipeworks_valvebody_top_"..states[s].."_x.png", |
| | | "pipeworks_valvebody_bottom.png", |
| | | tilex, |
| | | tilex, |
| | | tilez, |
| | | tilez, |
| | | }, |
| | | paramtype = "light", |
| | | selection_box = { |
| | | type = "fixed", |
| | | fixed = { -8/16, -4/16, -5/16, 8/16, 5/16, 5/16 } |
| | | }, |
| | | node_box = { |
| | | type = "fixed", |
| | | fixed = valveboxes |
| | | }, |
| | | groups = dgroups, |
| | | sounds = default.node_sound_wood_defaults(), |
| | | walkable = true, |
| | | stack_max = 99, |
| | | after_place_node = function(pos) |
| | | pipe_device_autorotate(pos, states[s], "pipeworks:valve") |
| | | pipe_scanforobjects(pos) |
| | | end, |
| | | after_dig_node = function(pos) |
| | | pipe_scanforobjects(pos) |
| | | end, |
| | | drop = "pipeworks:valve_off_x", |
| | | pipelike=1, |
| | | on_construct = function(pos) |
| | | local meta = minetest.env:get_meta(pos) |
| | | meta:set_int("pipelike",1) |
| | | end, |
| | | }) |
| | | |
| | | local valveboxes = {} |
| | | pipe_addbox(valveboxes, pipe_frontstub) |
| | | pipe_addbox(valveboxes, pipe_valvebody_z) |
| | | if states[s] == "off" then |
| | | pipe_addbox(valveboxes, pipe_valvehandle_off_z) |
| | | else |
| | | pipe_addbox(valveboxes, pipe_valvehandle_on_z) |
| | | end |
| | | pipe_addbox(valveboxes, pipe_backstub) |
| | | |
| | | minetest.register_node("pipeworks:valve_"..states[s].."_z", { |
| | | description = "Valve ("..states[s]..", Z-axis)", |
| | | drawtype = "nodebox", |
| | | tiles = { |
| | | "pipeworks_valvebody_top_"..states[s].."_z.png", |
| | | "pipeworks_valvebody_bottom.png", |
| | | tilez, |
| | | tilez, |
| | | tilex, |
| | | tilex, |
| | | }, |
| | | paramtype = "light", |
| | | selection_box = { |
| | | type = "fixed", |
| | | fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 } |
| | | }, |
| | | node_box = { |
| | | type = "fixed", |
| | | fixed = valveboxes |
| | | }, |
| | | groups = {snappy=3, pipe=1, not_in_creative_inventory=1}, |
| | | sounds = default.node_sound_wood_defaults(), |
| | | walkable = true, |
| | | stack_max = 99, |
| | | after_place_node = function(pos) |
| | | pipe_device_autorotate(pos, states[s], "pipeworks:valve") |
| | | pipe_scanforobjects(pos) |
| | | |
| | | end, |
| | | after_dig_node = function(pos) |
| | | pipe_scanforobjects(pos) |
| | | end, |
| | | drop = "pipeworks:valve_off_x", |
| | | pipelike=1, |
| | | on_construct = function(pos) |
| | | local meta = minetest.env:get_meta(pos) |
| | | meta:set_int("pipelike",1) |
| | | end, |
| | | }) |
| | | end |
| | | |
| | | -- intake grate |
| | | |
| | | minetest.register_node("pipeworks:intake", { |
| | | description = "Intake grate", |
| | | drawtype = "nodebox", |
| | | tiles = { |
| | | "pipeworks_intake_top.png", |
| | | "pipeworks_intake_sides.png", |
| | | "pipeworks_intake_sides.png", |
| | | "pipeworks_intake_sides.png", |
| | | "pipeworks_intake_sides.png", |
| | | "pipeworks_intake_sides.png" |
| | | }, |
| | | selection_box = { |
| | | type = "fixed", |
| | | fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 } |
| | | }, |
| | | node_box = { |
| | | type = "fixed", |
| | | fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 } |
| | | }, |
| | | paramtype = "light", |
| | | groups = {snappy=3, pipe=1}, |
| | | sounds = default.node_sound_wood_defaults(), |
| | | walkable = true, |
| | | stack_max = 99, |
| | | after_place_node = function(pos) |
| | | pipe_scanforobjects(pos) |
| | | end, |
| | | after_dig_node = function(pos) |
| | | pipe_scanforobjects(pos) |
| | | end, |
| | | pipelike=1, |
| | | on_construct = function(pos) |
| | | local meta = minetest.env:get_meta(pos) |
| | | meta:set_int("pipelike",1) |
| | | end, |
| | | }) |
| | | |
| | | -- outlet grate |
| | | |
| | | minetest.register_node("pipeworks:outlet", { |
| | | description = "Outlet grate", |
| | | drawtype = "nodebox", |
| | | tiles = { |
| | | "pipeworks_outlet_top.png", |
| | | "pipeworks_outlet_sides.png", |
| | | "pipeworks_outlet_sides.png", |
| | | "pipeworks_outlet_sides.png", |
| | | "pipeworks_outlet_sides.png", |
| | | "pipeworks_outlet_sides.png" |
| | | }, |
| | | selection_box = { |
| | | type = "fixed", |
| | | fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 } |
| | | }, |
| | | node_box = { |
| | | type = "fixed", |
| | | fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 } |
| | | }, |
| | | paramtype = "light", |
| | | groups = {snappy=3, pipe=1}, |
| | | sounds = default.node_sound_wood_defaults(), |
| | | walkable = true, |
| | | stack_max = 99, |
| | | after_place_node = function(pos) |
| | | pipe_scanforobjects(pos) |
| | | end, |
| | | after_dig_node = function(pos) |
| | | pipe_scanforobjects(pos) |
| | | end, |
| | | pipelike=1, |
| | | on_construct = function(pos) |
| | | local meta = minetest.env:get_meta(pos) |
| | | meta:set_int("pipelike",1) |
| | | end, |
| | | }) |
| | | |
| | | -- tanks |
| | | |
| | | for fill = 0, 10 do |
| | | if fill == 0 then |
| | | filldesc="empty" |
| | | sgroups = {snappy=3, pipe=1, tankfill=fill+1} |
| | | else |
| | | filldesc=fill.."0% full" |
| | | sgroups = {snappy=3, pipe=1, tankfill=fill+1, not_in_creative_inventory=1} |
| | | end |
| | | |
| | | minetest.register_node("pipeworks:expansion_tank_"..fill, { |
| | | description = "Expansion Tank ("..filldesc..")... You hacker, you.", |
| | | tiles = { |
| | | "pipeworks_storage_tank_fittings.png", |
| | | "pipeworks_storage_tank_fittings.png", |
| | | "pipeworks_storage_tank_back.png", |
| | | "pipeworks_storage_tank_back.png", |
| | | "pipeworks_storage_tank_back.png", |
| | | "pipeworks_storage_tank_front_"..fill..".png" |
| | | }, |
| | | paramtype = "light", |
| | | paramtype2 = "facedir", |
| | | groups = {snappy=3, pipe=1, tankfill=fill+1, not_in_creative_inventory=1}, |
| | | sounds = default.node_sound_wood_defaults(), |
| | | walkable = true, |
| | | stack_max = 99, |
| | | drop = "pipeworks:storage_tank_"..fill.."_x", |
| | | after_place_node = function(pos) |
| | | pipe_look_for_stackable_tanks(pos) |
| | | pipe_scanforobjects(pos) |
| | | end, |
| | | after_dig_node = function(pos) |
| | | pipe_scanforobjects(pos) |
| | | end, |
| | | pipelike=0, |
| | | on_construct = function(pos) |
| | | local meta = minetest.env:get_meta(pos) |
| | | meta:set_int("pipelike",0) |
| | | end, |
| | | }) |
| | | |
| | | minetest.register_node("pipeworks:storage_tank_"..fill.."_x", { |
| | | description = "Fluid Storage Tank ("..filldesc..")", |
| | | tiles = { |
| | | "pipeworks_storage_tank_fittings.png", |
| | | "pipeworks_storage_tank_back.png", |
| | | "pipeworks_storage_tank_fittings.png", |
| | | "pipeworks_storage_tank_fittings.png", |
| | | "pipeworks_storage_tank_back.png", |
| | | "pipeworks_storage_tank_front_"..fill..".png" |
| | | }, |
| | | paramtype = "light", |
| | | groups = sgroups, |
| | | sounds = default.node_sound_wood_defaults(), |
| | | walkable = true, |
| | | stack_max = 99, |
| | | after_place_node = function(pos) |
| | | pipe_look_for_stackable_tanks(pos) |
| | | if string.find(minetest.env:get_node(pos).name, "pipeworks:storage_tank_") ~= nil then |
| | | pipe_device_autorotate(pos, nil, "pipeworks:storage_tank_"..fill) |
| | | end |
| | | pipe_scanforobjects(pos) |
| | | end, |
| | | after_dig_node = function(pos) |
| | | pipe_scanforobjects(pos) |
| | | end, |
| | | pipelike=1, |
| | | on_construct = function(pos) |
| | | local meta = minetest.env:get_meta(pos) |
| | | meta:set_int("pipelike",1) |
| | | end, |
| | | }) |
| | | |
| | | minetest.register_node("pipeworks:storage_tank_"..fill.."_z", { |
| | | description = "Fluid Storage Tank (Z axis, "..filldesc..")... You hacker, you.", |
| | | tiles = { |
| | | "pipeworks_storage_tank_fittings.png", |
| | | "pipeworks_storage_tank_back.png", |
| | | "pipeworks_storage_tank_front_"..fill..".png", |
| | | "pipeworks_storage_tank_back.png", |
| | | "pipeworks_storage_tank_fittings.png", |
| | | "pipeworks_storage_tank_fittings.png" |
| | | }, |
| | | paramtype = "light", |
| | | groups = {snappy=3, pipe=1, tankfill=fill+1, not_in_creative_inventory=1}, |
| | | sounds = default.node_sound_wood_defaults(), |
| | | walkable = true, |
| | | stack_max = 99, |
| | | drop = "pipeworks:storage_tank_"..fill.."_x", |
| | | after_place_node = function(pos) |
| | | pipe_look_for_stackable_tanks(pos) |
| | | if string.find(minetest.env:get_node(pos).name, "pipeworks:storage_tank_") ~= nil then |
| | | pipe_device_autorotate(pos, nil, "pipeworks:storage_tank_"..fill) |
| | | end |
| | | pipe_scanforobjects(pos) |
| | | end, |
| | | after_dig_node = function(pos) |
| | | pipe_scanforobjects(pos) |
| | | end, |
| | | pipelike=1, |
| | | on_construct = function(pos) |
| | | local meta = minetest.env:get_meta(pos) |
| | | meta:set_int("pipelike",1) |
| | | end, |
| | | }) |
| | | end |
| | | |
| | | -- various actions |
| | | |
| | | local axes = { "x", "z" } |
| | | |
| | | for a in ipairs(axes) do |
| | | minetest.register_on_punchnode(function (pos, node) |
| | | if node.name=="pipeworks:valve_on_"..axes[a] then |
| | | minetest.env:add_node(pos, { name = "pipeworks:valve_off_"..axes[a] }) |
| | | local meta = minetest.env:get_meta(pos) |
| | | meta:set_int("pipelike",0) |
| | | end |
| | | end) |
| | | |
| | | minetest.register_on_punchnode(function (pos, node) |
| | | if node.name=="pipeworks:valve_off_"..axes[a] then |
| | | minetest.env:add_node(pos, { name = "pipeworks:valve_on_"..axes[a] }) |
| | | local meta = minetest.env:get_meta(pos) |
| | | meta:set_int("pipelike",1) |
| | | end |
| | | end) |
| | | |
| | | minetest.register_on_punchnode(function (pos, node) |
| | | if node.name=="pipeworks:pump_on_"..axes[a] then |
| | | minetest.env:add_node(pos, { name = "pipeworks:pump_off_"..axes[a] }) |
| | | end |
| | | end) |
| | | |
| | | minetest.register_on_punchnode(function (pos, node) |
| | | if node.name=="pipeworks:pump_off_"..axes[a] then |
| | | minetest.env:add_node(pos, { name = "pipeworks:pump_on_"..axes[a] }) |
| | | end |
| | | end) |
| | | end |
| | | |
New file |
| | |
| | | -- Pipeworks mod by Vanessa Ezekowitz - 2012-08-05 |
| | | -- |
| | | -- Entirely my own code. This mod supplies various shapes of pipes |
| | | -- and devices that they can connect to such as pumps, valves, etc. |
| | | -- All pipes autoconnect as you lay them out, and devices will auto- |
| | | -- connect to them. |
| | | -- |
| | | -- License: WTFPL |
| | | -- |
| | | |
| | | -- Un-comment the following dofile line to re-enable the old pipe nodes. |
| | | -- dofile(minetest.get_modpath("pipeworks").."/oldpipes.lua") |
| | | |
| | | minetest.register_alias("pipeworks:pipe", "pipeworks:pipe_110000_empty") |
| | | |
| | | pipe_leftstub = { |
| | | { -32/64, -2/64, -6/64, 1/64, 2/64, 6/64 }, -- pipe segment against -X face |
| | | { -32/64, -4/64, -5/64, 1/64, 4/64, 5/64 }, |
| | | { -32/64, -5/64, -4/64, 1/64, 5/64, 4/64 }, |
| | | { -32/64, -6/64, -2/64, 1/64, 6/64, 2/64 }, |
| | | |
| | | { -32/64, -3/64, -8/64, -30/64, 3/64, 8/64 }, -- (the flange for it) |
| | | { -32/64, -5/64, -7/64, -30/64, 5/64, 7/64 }, |
| | | { -32/64, -6/64, -6/64, -30/64, 6/64, 6/64 }, |
| | | { -32/64, -7/64, -5/64, -30/64, 7/64, 5/64 }, |
| | | { -32/64, -8/64, -3/64, -30/64, 8/64, 3/64 } |
| | | } |
| | | |
| | | pipe_rightstub = { |
| | | { -1/64, -2/64, -6/64, 32/64, 2/64, 6/64 }, -- pipe segment against +X face |
| | | { -1/64, -4/64, -5/64, 32/64, 4/64, 5/64 }, |
| | | { -1/64, -5/64, -4/64, 32/64, 5/64, 4/64 }, |
| | | { -1/64, -6/64, -2/64, 32/64, 6/64, 2/64 }, |
| | | |
| | | { 30/64, -3/64, -8/64, 32/64, 3/64, 8/64 }, -- (the flange for it) |
| | | { 30/64, -5/64, -7/64, 32/64, 5/64, 7/64 }, |
| | | { 30/64, -6/64, -6/64, 32/64, 6/64, 6/64 }, |
| | | { 30/64, -7/64, -5/64, 32/64, 7/64, 5/64 }, |
| | | { 30/64, -8/64, -3/64, 32/64, 8/64, 3/64 } |
| | | } |
| | | |
| | | pipe_bottomstub = { |
| | | { -2/64, -32/64, -6/64, 2/64, 1/64, 6/64 }, -- pipe segment against -Y face |
| | | { -4/64, -32/64, -5/64, 4/64, 1/64, 5/64 }, |
| | | { -5/64, -32/64, -4/64, 5/64, 1/64, 4/64 }, |
| | | { -6/64, -32/64, -2/64, 6/64, 1/64, 2/64 }, |
| | | |
| | | { -3/64, -32/64, -8/64, 3/64, -30/64, 8/64 }, -- (the flange for it) |
| | | { -5/64, -32/64, -7/64, 5/64, -30/64, 7/64 }, |
| | | { -6/64, -32/64, -6/64, 6/64, -30/64, 6/64 }, |
| | | { -7/64, -32/64, -5/64, 7/64, -30/64, 5/64 }, |
| | | { -8/64, -32/64, -3/64, 8/64, -30/64, 3/64 } |
| | | } |
| | | |
| | | |
| | | pipe_topstub = { |
| | | { -2/64, -1/64, -6/64, 2/64, 32/64, 6/64 }, -- pipe segment against +Y face |
| | | { -4/64, -1/64, -5/64, 4/64, 32/64, 5/64 }, |
| | | { -5/64, -1/64, -4/64, 5/64, 32/64, 4/64 }, |
| | | { -6/64, -1/64, -2/64, 6/64, 32/64, 2/64 }, |
| | | |
| | | { -3/64, 30/64, -8/64, 3/64, 32/64, 8/64 }, -- (the flange for it) |
| | | { -5/64, 30/64, -7/64, 5/64, 32/64, 7/64 }, |
| | | { -6/64, 30/64, -6/64, 6/64, 32/64, 6/64 }, |
| | | { -7/64, 30/64, -5/64, 7/64, 32/64, 5/64 }, |
| | | { -8/64, 30/64, -3/64, 8/64, 32/64, 3/64 } |
| | | } |
| | | |
| | | pipe_frontstub = { |
| | | { -6/64, -2/64, -32/64, 6/64, 2/64, 1/64 }, -- pipe segment against -Z face |
| | | { -5/64, -4/64, -32/64, 5/64, 4/64, 1/64 }, |
| | | { -4/64, -5/64, -32/64, 4/64, 5/64, 1/64 }, |
| | | { -2/64, -6/64, -32/64, 2/64, 6/64, 1/64 }, |
| | | |
| | | { -8/64, -3/64, -32/64, 8/64, 3/64, -30/64 }, -- (the flange for it) |
| | | { -7/64, -5/64, -32/64, 7/64, 5/64, -30/64 }, |
| | | { -6/64, -6/64, -32/64, 6/64, 6/64, -30/64 }, |
| | | { -5/64, -7/64, -32/64, 5/64, 7/64, -30/64 }, |
| | | { -3/64, -8/64, -32/64, 3/64, 8/64, -30/64 } |
| | | } |
| | | |
| | | pipe_backstub = { |
| | | { -6/64, -2/64, -1/64, 6/64, 2/64, 32/64 }, -- pipe segment against -Z face |
| | | { -5/64, -4/64, -1/64, 5/64, 4/64, 32/64 }, |
| | | { -4/64, -5/64, -1/64, 4/64, 5/64, 32/64 }, |
| | | { -2/64, -6/64, -1/64, 2/64, 6/64, 32/64 }, |
| | | |
| | | { -8/64, -3/64, 30/64, 8/64, 3/64, 32/64 }, -- (the flange for it) |
| | | { -7/64, -5/64, 30/64, 7/64, 5/64, 32/64 }, |
| | | { -6/64, -6/64, 30/64, 6/64, 6/64, 32/64 }, |
| | | { -5/64, -7/64, 30/64, 5/64, 7/64, 32/64 }, |
| | | { -3/64, -8/64, 30/64, 3/64, 8/64, 32/64 } |
| | | } |
| | | |
| | | pipe_selectboxes = { |
| | | { -32/64, -8/64, -8/64, 8/64, 8/64, 8/64 }, |
| | | { -8/64 , -8/64, -8/64, 32/64, 8/64, 8/64 }, |
| | | { -8/64 , -32/64, -8/64, 8/64, 8/64, 8/64 }, |
| | | { -8/64 , -8/64, -8/64, 8/64, 32/64, 8/64 }, |
| | | { -8/64 , -8/64, -32/64, 8/64, 8/64, 8/64 }, |
| | | { -8/64 , -8/64, -8/64, 8/64, 8/64, 32/64 } |
| | | } |
| | | |
| | | pipe_bendsphere = { |
| | | { -4/64, -4/64, -4/64, 4/64, 4/64, 4/64 }, |
| | | { -5/64, -3/64, -3/64, 5/64, 3/64, 3/64 }, |
| | | { -3/64, -5/64, -3/64, 3/64, 5/64, 3/64 }, |
| | | { -3/64, -3/64, -5/64, 3/64, 3/64, 5/64 } |
| | | } |
| | | |
| | | -- Functions |
| | | |
| | | dbg = function(s) |
| | | if DEBUG == 1 then |
| | | print('[PIPEWORKS] ' .. s) |
| | | end |
| | | end |
| | | |
| | | function pipes_fix_image_names(table, replacement) |
| | | outtable={} |
| | | for i in ipairs(table) do |
| | | outtable[i]=string.gsub(table[i], "_XXXXX", replacement) |
| | | end |
| | | |
| | | return outtable |
| | | end |
| | | |
| | | function pipe_addbox(t, b) |
| | | for i in ipairs(b) |
| | | do table.insert(t, b[i]) |
| | | end |
| | | end |
| | | |
| | | -- now define the nodes! |
| | | |
| | | for xm = 0, 1 do |
| | | for xp = 0, 1 do |
| | | for ym = 0, 1 do |
| | | for yp = 0, 1 do |
| | | for zm = 0, 1 do |
| | | for zp = 0, 1 do |
| | | local outboxes = {} |
| | | local outsel = {} |
| | | local outimgs = {} |
| | | |
| | | if yp==1 then |
| | | pipe_addbox(outboxes, pipe_topstub) |
| | | table.insert(outsel, pipe_selectboxes[4]) |
| | | table.insert(outimgs, "pipeworks_pipe_end.png") |
| | | else |
| | | table.insert(outimgs, "pipeworks_plain.png") |
| | | end |
| | | if ym==1 then |
| | | pipe_addbox(outboxes, pipe_bottomstub) |
| | | table.insert(outsel, pipe_selectboxes[3]) |
| | | table.insert(outimgs, "pipeworks_pipe_end.png") |
| | | else |
| | | table.insert(outimgs, "pipeworks_plain.png") |
| | | end |
| | | if xp==1 then |
| | | pipe_addbox(outboxes, pipe_rightstub) |
| | | table.insert(outsel, pipe_selectboxes[2]) |
| | | table.insert(outimgs, "pipeworks_pipe_end.png") |
| | | else |
| | | table.insert(outimgs, "pipeworks_plain.png") |
| | | end |
| | | if xm==1 then |
| | | pipe_addbox(outboxes, pipe_leftstub) |
| | | table.insert(outsel, pipe_selectboxes[1]) |
| | | table.insert(outimgs, "pipeworks_pipe_end.png") |
| | | else |
| | | table.insert(outimgs, "pipeworks_plain.png") |
| | | end |
| | | if zp==1 then |
| | | pipe_addbox(outboxes, pipe_backstub) |
| | | table.insert(outsel, pipe_selectboxes[6]) |
| | | table.insert(outimgs, "pipeworks_pipe_end.png") |
| | | else |
| | | table.insert(outimgs, "pipeworks_plain.png") |
| | | end |
| | | if zm==1 then |
| | | pipe_addbox(outboxes, pipe_frontstub) |
| | | table.insert(outsel, pipe_selectboxes[5]) |
| | | table.insert(outimgs, "pipeworks_pipe_end.png") |
| | | else |
| | | table.insert(outimgs, "pipeworks_plain.png") |
| | | end |
| | | |
| | | local jx = xp+xm |
| | | local jy = yp+ym |
| | | local jz = zp+zm |
| | | |
| | | if (jx+jy+jz) == 1 then |
| | | if xm == 1 then |
| | | table.remove(outimgs, 3) |
| | | table.insert(outimgs, 3, "pipeworks_pipe_end_XXXXX.png") |
| | | end |
| | | if xp == 1 then |
| | | table.remove(outimgs, 4) |
| | | table.insert(outimgs, 4, "pipeworks_pipe_end_XXXXX.png") |
| | | end |
| | | if ym == 1 then |
| | | table.remove(outimgs, 1) |
| | | table.insert(outimgs, 1, "pipeworks_pipe_end_XXXXX.png") |
| | | end |
| | | if xp == 1 then |
| | | table.remove(outimgs, 2) |
| | | table.insert(outimgs, 2, "pipeworks_pipe_end_XXXXX.png") |
| | | end |
| | | if zm == 1 then |
| | | table.remove(outimgs, 5) |
| | | table.insert(outimgs, 5, "pipeworks_pipe_end_XXXXX.png") |
| | | end |
| | | if zp == 1 then |
| | | table.remove(outimgs, 6) |
| | | table.insert(outimgs, 6, "pipeworks_pipe_end_XXXXX.png") |
| | | end |
| | | end |
| | | |
| | | if (jx==1 and jy==1 and jz~=1) or (jx==1 and jy~=1 and jz==1) or (jx~= 1 and jy==1 and jz==1) then |
| | | pipe_addbox(outboxes, pipe_bendsphere) |
| | | end |
| | | |
| | | if (jx==2 and jy~=2 and jz~=2) then |
| | | table.remove(outimgs, 5) |
| | | table.remove(outimgs, 5) |
| | | table.insert(outimgs, 5, "pipeworks_windowed_XXXXX.png") |
| | | table.insert(outimgs, 5, "pipeworks_windowed_XXXXX.png") |
| | | end |
| | | |
| | | if (jx~=2 and jy~=2 and jz==2) or (jx~=2 and jy==2 and jz~=2) then |
| | | table.remove(outimgs, 3) |
| | | table.remove(outimgs, 3) |
| | | table.insert(outimgs, 3, "pipeworks_windowed_XXXXX.png") |
| | | table.insert(outimgs, 3, "pipeworks_windowed_XXXXX.png") |
| | | end |
| | | |
| | | local pname = xm..xp..ym..yp..zm..zp |
| | | local pgroups = "" |
| | | |
| | | if pname ~= "110000" then |
| | | pgroups = {snappy=3, pipe=1, not_in_creative_inventory=1} |
| | | pipedesc = "Pipe segment (empty, "..pname..")... You hacker, you." |
| | | else |
| | | pgroups = {snappy=3, pipe=1} |
| | | pipedesc = "Pipe segment" |
| | | end |
| | | |
| | | minetest.register_node("pipeworks:pipe_"..pname.."_empty", { |
| | | description = pipedesc, |
| | | drawtype = "nodebox", |
| | | tiles = pipes_fix_image_names(outimgs, "_empty"), |
| | | paramtype = "light", |
| | | selection_box = { |
| | | type = "fixed", |
| | | fixed = outsel |
| | | }, |
| | | node_box = { |
| | | type = "fixed", |
| | | fixed = outboxes |
| | | }, |
| | | groups = pgroups, |
| | | sounds = default.node_sound_wood_defaults(), |
| | | walkable = true, |
| | | stack_max = 99, |
| | | drop = "pipeworks:pipe_110000_empty", |
| | | pipelike=1, |
| | | on_construct = function(pos) |
| | | local meta = minetest.env:get_meta(pos) |
| | | meta:set_int("pipelike",1) |
| | | end, |
| | | after_place_node = function(pos) |
| | | pipe_scanforobjects(pos) |
| | | end, |
| | | after_dig_node = function(pos) |
| | | pipe_scanforobjects(pos) |
| | | end, |
| | | }) |
| | | |
| | | minetest.register_node("pipeworks:pipe_"..pname.."_loaded", { |
| | | description = "Pipe segment (loaded, "..pname..")... You hacker, you.", |
| | | drawtype = "nodebox", |
| | | tiles = pipes_fix_image_names(outimgs, "_loaded"), |
| | | paramtype = "light", |
| | | selection_box = { |
| | | type = "fixed", |
| | | fixed = outsel |
| | | }, |
| | | node_box = { |
| | | type = "fixed", |
| | | fixed = outboxes |
| | | }, |
| | | groups = {snappy=3, pipe=1, not_in_creative_inventory=1}, |
| | | sounds = default.node_sound_wood_defaults(), |
| | | walkable = true, |
| | | stack_max = 99, |
| | | drop = "pipeworks:pipe_110000_loaded", |
| | | pipelike=1, |
| | | on_construct = function(pos) |
| | | local meta = minetest.env:get_meta(pos) |
| | | meta:set_int("pipelike",1) |
| | | end, |
| | | after_place_node = function(pos) |
| | | pipe_scanforobjects(pos) |
| | | end, |
| | | after_dig_node = function(pos) |
| | | pipe_scanforobjects(pos) |
| | | end |
| | | }) |
| | | end |
| | | end |
| | | end |
| | | end |
| | | end |
| | | end |
| | | |
| | | dofile(minetest.get_modpath("pipeworks").."/tubes.lua") |
| | | dofile(minetest.get_modpath("pipeworks").."/devices.lua") |
| | | dofile(minetest.get_modpath("pipeworks").."/autoplace.lua") |
| | | dofile(minetest.get_modpath("pipeworks").."/crafts.lua") |
| | | |
| | | print("Pipeworks loaded!") |
New file |
| | |
| | | -- This file is basically most of the old init.lua and only supplies the |
| | | -- old nodes created by the previous verison of Pipeworks. |
| | | -- |
| | | -- License: WTFPL |
| | | -- |
| | | |
| | | local nodenames = { |
| | | "vertical", |
| | | "horizontal", |
| | | "junction_xy", |
| | | "junction_xz", |
| | | "bend_xy_down", |
| | | "bend_xy_up", |
| | | "bend_xz", |
| | | "crossing_xz", |
| | | "crossing_xy", |
| | | "crossing_xyz", |
| | | "pipe_segment", |
| | | "cap_neg_x", |
| | | "cap_pos_x", |
| | | "cap_neg_y", |
| | | "cap_pos_y", |
| | | "cap_neg_z", |
| | | "cap_pos_z" |
| | | } |
| | | |
| | | local descriptions = { |
| | | "vertical", |
| | | "horizontal", |
| | | "junction between X and Y axes", |
| | | "junction between X and Z axes", |
| | | "downward bend between X and Y axes", |
| | | "upward bend between X and Y axes", |
| | | "bend between X/Z axes", |
| | | "4-way crossing between X and Z axes", |
| | | "4-way crossing between X/Z and Y axes", |
| | | "6-way crossing", |
| | | "basic segment", |
| | | "capped, negative X half only", |
| | | "capped, positive X half only", |
| | | "capped, negative Y half only", |
| | | "capped, positive Y half only", |
| | | "capped, negative Z half only", |
| | | "capped, positive Z half only" |
| | | } |
| | | |
| | | local nodeimages = { |
| | | {"pipeworks_pipe_end.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_plain.png", |
| | | "pipeworks_plain.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png"}, |
| | | |
| | | {"pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_plain.png", |
| | | "pipeworks_plain.png"}, |
| | | |
| | | {"pipeworks_pipe_end.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_plain.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png"}, |
| | | |
| | | {"pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_plain.png"}, |
| | | |
| | | {"pipeworks_plain.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_plain.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png"}, |
| | | |
| | | {"pipeworks_pipe_end.png", |
| | | "pipeworks_plain.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_plain.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png"}, |
| | | |
| | | {"pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_plain.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_plain.png"}, |
| | | |
| | | {"pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_pipe_end.png"}, |
| | | |
| | | {"pipeworks_pipe_end.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png"}, |
| | | |
| | | {"pipeworks_pipe_end.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_pipe_end.png"}, |
| | | |
| | | -- horizontal short segment |
| | | |
| | | {"pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_plain.png", |
| | | "pipeworks_plain.png"}, |
| | | |
| | | -- capped |
| | | |
| | | {"pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png"}, |
| | | |
| | | {"pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png"}, |
| | | |
| | | {"pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png"}, |
| | | |
| | | {"pipeworks_pipe_end.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png"}, |
| | | |
| | | {"pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_pipe_end.png"}, |
| | | |
| | | {"pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_windowed_XXXXX.png", |
| | | "pipeworks_pipe_end.png", |
| | | "pipeworks_windowed_XXXXX.png"}, |
| | | } |
| | | |
| | | local selectionboxes = { |
| | | { -0.15, -0.5, -0.15, 0.15, 0.5, 0.15 }, |
| | | { -0.5, -0.15, -0.15, 0.5, 0.15, 0.15 }, |
| | | { -0.15, -0.5, -0.15, 0.5, 0.5, 0.15 }, |
| | | { -0.5, -0.15, -0.15, 0.5, 0.15, 0.5 }, |
| | | { -0.15, -0.5, -0.15, 0.5, 0.15, 0.15 }, |
| | | { -0.15, -0.15, -0.15, 0.5, 0.5, 0.15 }, |
| | | { -0.15, -0.15, -0.15, 0.5, 0.15, 0.5 }, |
| | | { -0.5, -0.15, -0.5, 0.5, 0.15, 0.5 }, |
| | | { -0.5, -0.5, -0.15, 0.5, 0.5, 0.15 }, |
| | | { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, |
| | | { -0.3, -0.15, -0.15, 0.3, 0.15, 0.15 }, |
| | | { -0.5, -0.15, -0.15, 0, 0.15, 0.15 }, |
| | | { 0, -0.15, -0.15, 0.5, 0.15, 0.15 }, |
| | | { -0.15, -0.5, -0.15, 0.15, 0, 0.15 }, |
| | | { -0.15, 0, -0.15, 0.15, 0.5, 0.15 }, |
| | | { -0.15, -0.15, -0.5, 0.15, 0.15, 0 }, |
| | | { -0.15, -0.15, 0, 0.15, 0.15, 0.5 }, |
| | | } |
| | | |
| | | local nodeboxes = { |
| | | {{ -0.15, -0.5 , -0.15, 0.15, -0.45, 0.15 }, -- vertical |
| | | { -0.1 , -0.45, -0.1 , 0.1 , 0.45, 0.1 }, |
| | | { -0.15, 0.45, -0.15, 0.15, 0.5 , 0.15 }}, |
| | | |
| | | {{ -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 }, -- horizontal |
| | | { -0.45, -0.1 , -0.1 , 0.45, 0.1 , 0.1 }, |
| | | { 0.45, -0.15, -0.15, 0.5 , 0.15, 0.15 }}, |
| | | |
| | | {{ -0.15, -0.5 , -0.15, 0.15, -0.45, 0.15 }, -- vertical with X/Z junction |
| | | { -0.1 , -0.45, -0.1 , 0.1 , 0.45, 0.1 }, |
| | | { -0.15, 0.45, -0.15, 0.15, 0.5 , 0.15 }, |
| | | { 0.1 , -0.1 , -0.1 , 0.45, 0.1 , 0.1 }, |
| | | { 0.45, -0.15, -0.15, 0.5 , 0.15, 0.15 }}, |
| | | |
| | | {{ -0.15, -0.15, 0.45, 0.15, 0.15, 0.5 }, -- horizontal with X/Z junction |
| | | { -0.1 , -0.1 , 0.1 , 0.1 , 0.1 , 0.45 }, |
| | | { -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 }, |
| | | { -0.45, -0.1 , -0.1 , 0.45, 0.1 , 0.1 }, |
| | | { 0.45, -0.15, -0.15, 0.5 , 0.15, 0.15 }}, |
| | | |
| | | {{ -0.15, -0.5 , -0.15, 0.15, -0.45, 0.15 }, -- bend down from X/Z to Y axis |
| | | { -0.1 , -0.45, -0.1 , 0.1 , 0.1 , 0.1 }, |
| | | { -0.1 , -0.1 , -0.1 , 0.45, 0.1 , 0.1 }, |
| | | { 0.45, -0.15, -0.15, 0.5 , 0.15, 0.15 }}, |
| | | |
| | | {{ -0.15, 0.45 , -0.15, 0.15, 0.5, 0.15 }, -- bend up from X/Z to Y axis |
| | | { -0.1 , -0.1 , -0.1 , 0.1 , 0.45, 0.1 }, |
| | | { -0.1 , -0.1 , -0.1 , 0.45, 0.1 , 0.1 }, |
| | | { 0.45, -0.15, -0.15, 0.5 , 0.15, 0.15 }}, |
| | | |
| | | {{ -0.15, -0.15, 0.45, 0.15, 0.15, 0.5 }, -- bend between X and Z axes |
| | | { -0.1 , -0.1 , 0.1 , 0.1 , 0.1 , 0.45 }, |
| | | { -0.1 , -0.1 , -0.1 , 0.45, 0.1 , 0.1 }, |
| | | { 0.45, -0.15, -0.15, 0.5 , 0.15, 0.15 }}, |
| | | |
| | | {{ -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 }, -- 4-way crossing between X and Z axes |
| | | { -0.45, -0.1 , -0.1 , 0.45, 0.1 , 0.1 }, |
| | | { 0.45, -0.15, -0.15, 0.5 , 0.15, 0.15 }, |
| | | { -0.15, -0.15, -0.5 , 0.15, 0.15, -0.45 }, |
| | | { -0.1 , -0.1 , -0.45, 0.1 , 0.1 , 0.45 }, |
| | | { -0.15, -0.15, 0.45, 0.15, 0.15, 0.5 }}, |
| | | |
| | | {{ -0.15, -0.5 , -0.15, 0.15, -0.45, 0.15 }, -- 4-way crossing between X/Z and Y axes |
| | | { -0.1 , -0.45, -0.1 , 0.1 , 0.45, 0.1 }, |
| | | { -0.15, 0.45, -0.15, 0.15, 0.5 , 0.15 }, |
| | | { -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 }, |
| | | { -0.45, -0.1 , -0.1 , 0.45, 0.1 , 0.1 }, |
| | | { 0.45, -0.15, -0.15, 0.5 , 0.15, 0.15 }}, |
| | | |
| | | {{ -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 }, -- 6-way crossing (all 3 axes) |
| | | { -0.45, -0.1 , -0.1 , 0.45, 0.1 , 0.1 }, |
| | | { 0.45, -0.15, -0.15, 0.5 , 0.15, 0.15 }, |
| | | { -0.15, -0.15, -0.5 , 0.15, 0.15, -0.45 }, |
| | | { -0.1 , -0.1 , -0.45, 0.1 , 0.1 , 0.45 }, |
| | | { -0.15, -0.15, 0.45, 0.15, 0.15, 0.5 }, |
| | | { -0.15, -0.5 , -0.15, 0.15, -0.45, 0.15 }, |
| | | { -0.1 , -0.45, -0.1 , 0.1 , 0.45, 0.1 }, |
| | | { -0.15, 0.45, -0.15, 0.15, 0.5 , 0.15 }}, |
| | | |
| | | {{ -0.3 , -0.15, -0.15, -0.25, 0.15, 0.15 }, -- main center segment |
| | | { -0.25, -0.1 , -0.1 , 0.25, 0.1 , 0.1 }, |
| | | { 0.25, -0.15, -0.15, 0.3 , 0.15, 0.15 }}, |
| | | |
| | | {{ -0.5, -0.15, -0.15, -0.45, 0.15, 0.15 }, -- anchored at -X |
| | | { -0.45, -0.1, -0.1, -0.2, 0.1, 0.1 }, |
| | | { -0.2, -0.15, -0.15, -0.15, 0.15, 0.15 }, |
| | | { -0.15, -0.12, -0.12, -0.1, 0.12, 0.12 }, |
| | | { -0.1, -0.08, -0.08, -0.05, 0.08, 0.08 }, |
| | | { -0.05, -0.04, -0.04, 0, 0.04, 0.04 }}, |
| | | |
| | | {{ 0.45, -0.15, -0.15, 0.5, 0.15, 0.15 }, -- anchored at +X |
| | | { 0.2, -0.1, -0.1, 0.45, 0.1, 0.1 }, |
| | | { 0.15, -0.15, -0.15, 0.2, 0.15, 0.15 }, |
| | | { 0.1, -0.12, -0.12, 0.15, 0.12, 0.12 }, |
| | | { 0.05, -0.08, -0.08, 0.1, 0.08, 0.08 }, |
| | | { 0, -0.04, -0.04, 0.05, 0.04, 0.04 }}, |
| | | |
| | | {{ -0.15, -0.5, -0.15, 0.15, -0.45, 0.15 }, -- anchored at -Y |
| | | { -0.1, -0.45, -0.1, 0.1, -0.2, 0.1 }, |
| | | { -0.15, -0.2, -0.15, 0.15, -0.15, 0.15 }, |
| | | { -0.12, -0.15, -0.12, 0.12, -0.1, 0.12 }, |
| | | { -0.08, -0.1, -0.08, 0.08, -0.05, 0.08 }, |
| | | { -0.04, -0.05, -0.04, 0.04, 0, 0.04 }}, |
| | | |
| | | {{ -0.15, 0.45, -0.15, 0.15, 0.5, 0.15 }, -- anchored at +Y |
| | | { -0.1, 0.2, -0.1, 0.1, 0.45, 0.1 }, |
| | | { -0.15, 0.15, -0.15, 0.15, 0.2, 0.15 }, |
| | | { -0.12, 0.1, -0.12, 0.12, 0.15, 0.12 }, |
| | | { -0.08, 0.05, -0.08, 0.08, 0.1, 0.08 } , |
| | | { -0.04, 0, -0.04, 0.04, 0.05, 0.04 }}, |
| | | |
| | | {{ -0.15, -0.15, -0.5, 0.15, 0.15, -0.45 }, -- anchored at -Z |
| | | { -0.1, -0.1, -0.45, 0.1, 0.1, -0.2 }, |
| | | { -0.15, -0.15, -0.2, 0.15, 0.15, -0.15 }, |
| | | { -0.12, -0.12, -0.15, 0.12, 0.12, -0.1 }, |
| | | { -0.08, -0.08, -0.1, 0.08, 0.08, -0.05 }, |
| | | { -0.04, -0.04, -0.05, 0.04, 0.04, 0 }}, |
| | | |
| | | {{ -0.15, -0.15, 0.45, 0.15, 0.15, 0.5 }, -- anchored at +Z |
| | | { -0.1, -0.1, 0.2, 0.1, 0.1, 0.45 }, |
| | | { -0.15, -0.15, 0.15, 0.15, 0.15, 0.2 }, |
| | | { -0.12, -0.12, 0.1, 0.12, 0.12, 0.15 }, |
| | | { -0.08, -0.08, 0.05, 0.08, 0.08, 0.1 }, |
| | | { -0.04, -0.04, 0, 0.04, 0.04, 0.05 }}, |
| | | } |
| | | |
| | | function fix_image_names(node, replacement) |
| | | outtable={} |
| | | for i in ipairs(nodeimages[node]) do |
| | | outtable[i]=string.gsub(nodeimages[node][i], "_XXXXX", replacement) |
| | | end |
| | | |
| | | return outtable |
| | | end |
| | | |
| | | -- Now define the actual nodes |
| | | |
| | | for node in ipairs(nodenames) do |
| | | |
| | | if node ~= 2 then |
| | | pgroups = {snappy=3, pipe=1, not_in_creative_inventory=1} |
| | | else |
| | | pgroups = {snappy=3, pipe=1} |
| | | end |
| | | |
| | | minetest.register_node("pipeworks:"..nodenames[node], { |
| | | description = "Empty Pipe ("..descriptions[node]..")", |
| | | drawtype = "nodebox", |
| | | tiles = fix_image_names(node, "_empty"), |
| | | paramtype = "light", |
| | | paramtype2 = "facedir", |
| | | selection_box = { |
| | | type = "fixed", |
| | | fixed = selectionboxes[node], |
| | | }, |
| | | node_box = { |
| | | type = "fixed", |
| | | fixed = nodeboxes[node] |
| | | }, |
| | | groups = pgroups, |
| | | sounds = default.node_sound_wood_defaults(), |
| | | walkable = true, |
| | | stack_max = 99, |
| | | drop = "pipeworks:pipe" |
| | | }) |
| | | |
| | | minetest.register_node("pipeworks:"..nodenames[node].."_loaded", { |
| | | description = "Loaded Pipe ("..descriptions[node]..")", |
| | | drawtype = "nodebox", |
| | | tiles = fix_image_names(node, "_loaded"), |
| | | paramtype = "light", |
| | | paramtype2 = "facedir", |
| | | selection_box = { |
| | | type = "fixed", |
| | | fixed = selectionboxes[node], |
| | | }, |
| | | node_box = { |
| | | type = "fixed", |
| | | fixed = nodeboxes[node] |
| | | }, |
| | | groups = {snappy=3, pipe=1, not_in_creative_inventory=1}, |
| | | sounds = default.node_sound_wood_defaults(), |
| | | walkable = true, |
| | | stack_max = 99, |
| | | drop = "pipeworks:pipe" |
| | | }) |
| | | end |
| | | |
New file |
| | |
| | | -- This file supplies pneumatic tubes and a 'test' device |
| | | |
| | | minetest.register_node("pipeworks:testobject", { |
| | | description = "Pneumatic tube test ojbect", |
| | | tiles = { |
| | | "pipeworks_testobject.png", |
| | | }, |
| | | paramtype = "light", |
| | | groups = {snappy=3, tubedevice=1}, |
| | | sounds = default.node_sound_wood_defaults(), |
| | | walkable = true, |
| | | after_place_node = function(pos) |
| | | tube_scanforobjects(pos) |
| | | end, |
| | | after_dig_node = function(pos) |
| | | tube_scanforobjects(pos) |
| | | end, |
| | | }) |
| | | |
| | | -- tables |
| | | |
| | | minetest.register_alias("pipeworks:tube", "pipeworks:tube_000000") |
| | | |
| | | tube_leftstub = { |
| | | { -32/64, -9/64, -9/64, 9/64, 9/64, 9/64 }, -- tube segment against -X face |
| | | } |
| | | |
| | | tube_rightstub = { |
| | | { -9/64, -9/64, -9/64, 32/64, 9/64, 9/64 }, -- tube segment against +X face |
| | | } |
| | | |
| | | tube_bottomstub = { |
| | | { -9/64, -32/64, -9/64, 9/64, 9/64, 9/64 }, -- tube segment against -Y face |
| | | } |
| | | |
| | | |
| | | tube_topstub = { |
| | | { -9/64, -9/64, -9/64, 9/64, 32/64, 9/64 }, -- tube segment against +Y face |
| | | } |
| | | |
| | | tube_frontstub = { |
| | | { -9/64, -9/64, -32/64, 9/64, 9/64, 9/64 }, -- tube segment against -Z face |
| | | } |
| | | |
| | | tube_backstub = { |
| | | { -9/64, -9/64, -9/64, 9/64, 9/64, 32/64 }, -- tube segment against -Z face |
| | | } |
| | | |
| | | tube_selectboxes = { |
| | | { -32/64, -10/64, -10/64, 10/64, 10/64, 10/64 }, |
| | | { -10/64 , -10/64, -10/64, 32/64, 10/64, 10/64 }, |
| | | { -10/64 , -32/64, -10/64, 10/64, 10/64, 10/64 }, |
| | | { -10/64 , -10/64, -10/64, 10/64, 32/64, 10/64 }, |
| | | { -10/64 , -10/64, -32/64, 10/64, 10/64, 10/64 }, |
| | | { -10/64 , -10/64, -10/64, 10/64, 10/64, 32/64 } |
| | | } |
| | | |
| | | -- Functions |
| | | |
| | | function tube_addbox(t, b) |
| | | for i in ipairs(b) |
| | | do table.insert(t, b[i]) |
| | | end |
| | | end |
| | | |
| | | -- now define the nodes! |
| | | |
| | | for xm = 0, 1 do |
| | | for xp = 0, 1 do |
| | | for ym = 0, 1 do |
| | | for yp = 0, 1 do |
| | | for zm = 0, 1 do |
| | | for zp = 0, 1 do |
| | | local outboxes = {} |
| | | local outsel = {} |
| | | local outimgs = {} |
| | | |
| | | if yp==1 then |
| | | tube_addbox(outboxes, tube_topstub) |
| | | table.insert(outsel, tube_selectboxes[4]) |
| | | table.insert(outimgs, "pipeworks_tube_noctr.png") |
| | | else |
| | | table.insert(outimgs, "pipeworks_tube_plain.png") |
| | | end |
| | | if ym==1 then |
| | | tube_addbox(outboxes, tube_bottomstub) |
| | | table.insert(outsel, tube_selectboxes[3]) |
| | | table.insert(outimgs, "pipeworks_tube_noctr.png") |
| | | else |
| | | table.insert(outimgs, "pipeworks_tube_plain.png") |
| | | end |
| | | if xp==1 then |
| | | tube_addbox(outboxes, tube_rightstub) |
| | | table.insert(outsel, tube_selectboxes[2]) |
| | | table.insert(outimgs, "pipeworks_tube_noctr.png") |
| | | else |
| | | table.insert(outimgs, "pipeworks_tube_plain.png") |
| | | end |
| | | if xm==1 then |
| | | tube_addbox(outboxes, tube_leftstub) |
| | | table.insert(outsel, tube_selectboxes[1]) |
| | | table.insert(outimgs, "pipeworks_tube_noctr.png") |
| | | else |
| | | table.insert(outimgs, "pipeworks_tube_plain.png") |
| | | end |
| | | if zp==1 then |
| | | tube_addbox(outboxes, tube_backstub) |
| | | table.insert(outsel, tube_selectboxes[6]) |
| | | table.insert(outimgs, "pipeworks_tube_noctr.png") |
| | | else |
| | | table.insert(outimgs, "pipeworks_tube_plain.png") |
| | | end |
| | | if zm==1 then |
| | | tube_addbox(outboxes, tube_frontstub) |
| | | table.insert(outsel, tube_selectboxes[5]) |
| | | table.insert(outimgs, "pipeworks_tube_noctr.png") |
| | | else |
| | | table.insert(outimgs, "pipeworks_tube_plain.png") |
| | | end |
| | | |
| | | local jx = xp+xm |
| | | local jy = yp+ym |
| | | local jz = zp+zm |
| | | |
| | | if (jx+jy+jz) == 1 then |
| | | if xm == 1 then |
| | | table.remove(outimgs, 3) |
| | | table.insert(outimgs, 3, "pipeworks_tube_end.png") |
| | | end |
| | | if xp == 1 then |
| | | table.remove(outimgs, 4) |
| | | table.insert(outimgs, 4, "pipeworks_tube_end.png") |
| | | end |
| | | if ym == 1 then |
| | | table.remove(outimgs, 1) |
| | | table.insert(outimgs, 1, "pipeworks_tube_end.png") |
| | | end |
| | | if xp == 1 then |
| | | table.remove(outimgs, 2) |
| | | table.insert(outimgs, 2, "pipeworks_tube_end.png") |
| | | end |
| | | if zm == 1 then |
| | | table.remove(outimgs, 5) |
| | | table.insert(outimgs, 5, "pipeworks_tube_end.png") |
| | | end |
| | | if zp == 1 then |
| | | table.remove(outimgs, 6) |
| | | table.insert(outimgs, 6, "pipeworks_tube_end.png") |
| | | end |
| | | end |
| | | |
| | | local tname = xm..xp..ym..yp..zm..zp |
| | | local tgroups = "" |
| | | |
| | | if tname ~= "000000" then |
| | | tgroups = {snappy=3, tube=1, not_in_creative_inventory=1} |
| | | tubedesc = "Pneumatic tube segment ("..tname..")... You hacker, you." |
| | | iimg=nil |
| | | wscale = {x=1,y=1,z=1} |
| | | else |
| | | tgroups = {snappy=3, tube=1} |
| | | tubedesc = "Pneumatic tube segment" |
| | | iimg="pipeworks_tube_inv.png" |
| | | outimgs = { |
| | | "pipeworks_tube_short.png", |
| | | "pipeworks_tube_short.png", |
| | | "pipeworks_tube_end.png", |
| | | "pipeworks_tube_end.png", |
| | | "pipeworks_tube_short.png", |
| | | "pipeworks_tube_short.png" |
| | | } |
| | | outboxes = { -24/64, -9/64, -9/64, 24/64, 9/64, 9/64 } |
| | | outsel = { -24/64, -10/64, -10/64, 24/64, 10/64, 10/64 } |
| | | wscale = {x=1,y=1,z=0.01} |
| | | end |
| | | |
| | | minetest.register_node("pipeworks:tube_"..tname, { |
| | | description = tubedesc, |
| | | drawtype = "nodebox", |
| | | tiles = outimgs, |
| | | inventory_image=iimg, |
| | | wield_image=iimg, |
| | | wield_scale=wscale, |
| | | paramtype = "light", |
| | | selection_box = { |
| | | type = "fixed", |
| | | fixed = outsel |
| | | }, |
| | | node_box = { |
| | | type = "fixed", |
| | | fixed = outboxes |
| | | }, |
| | | groups = tgroups, |
| | | sounds = default.node_sound_wood_defaults(), |
| | | walkable = true, |
| | | stack_max = 99, |
| | | drop = "pipeworks:tube_000000", |
| | | tubelike=1, |
| | | on_construct = function(pos) |
| | | local meta = minetest.env:get_meta(pos) |
| | | meta:set_int("tubelike",1) |
| | | end, |
| | | after_place_node = function(pos) |
| | | tube_scanforobjects(pos) |
| | | end, |
| | | after_dig_node = function(pos) |
| | | tube_scanforobjects(pos) |
| | | end |
| | | }) |
| | | |
| | | end |
| | | end |
| | | end |
| | | end |
| | | end |
| | | end |
| | | |
File was renamed from alloy_furnace.lua |
| | |
| | | alloy_recipes[registered_recipes_count].dst_name=string3 |
| | | alloy_recipes[registered_recipes_count].dst_count=count3 |
| | | registered_recipes_count=registered_recipes_count+1 |
| | | if UI_recipes_hook then |
| | | minetest.register_craft({ |
| | | type = "alloy", |
| | | output = string3.." "..count3, |
| | | recipe = { |
| | | {string1.." "..count1}, |
| | | {string2.." "..count2}, |
| | | } |
| | | }) |
| | | end |
| | | end |
| | | |
| | | register_alloy_recipe ("technic:copper_dust",3, "technic:tin_dust",1, "technic:bronze_dust",4) |
| | |
| | | register_alloy_recipe ("technic:iron_dust",3, "technic:chromium_dust",1, "technic:stainless_steel_dust",4) |
| | | register_alloy_recipe ("default:steel_ingot",3, "technic:chromium_ingot",1, "technic:stainless_steel_ingot",4) |
| | | register_alloy_recipe ("technic:copper_dust",2, "technic:zinc_dust",1, "technic:brass_dust",3) |
| | | register_alloy_recipe ("technic:copper_ingot",2, "technic:zinc_ingot",1, "technic:brass_ingot",3) |
| | | register_alloy_recipe ("moreores:copper_ingot",2, "technic:zinc_ingot",1, "technic:brass_ingot",3) |
| | | register_alloy_recipe ("default:sand",2, "technic:coal_dust",2, "technic:silicon_wafer",1) |
| | | register_alloy_recipe ("technic:silicon_wafer",1, "technic:mithril_dust",1, "technic:doped_silicon_wafer",1) |
| | | |
| | |
| | | inv:set_stack("fuel", 1, stack) |
| | | |
| | | end, |
| | | }) |
| | | }) |
File was renamed from battery_box_mv.lua |
| | |
| | | MV_nodes[1].y=pos1.y |
| | | MV_nodes[1].z=pos1.z |
| | | MV_nodes[1].visited=false |
| | | |
| | | |
| | | table_index=1 |
| | | repeat |
| | | check_MV_node (PR_nodes,RE_nodes,MV_nodes,table_index) |
| | |
| | | if meta:get_float("mv_cablelike")==1 then new_node_added=add_new_MVcable_node(MV_nodes,pos1) end |
| | | if minetest.env:get_node(pos1).name == "technic:solar_panel_mv" then new_node_added=add_new_MVcable_node(PR_nodes,pos1) end |
| | | end |
| | | |
| | | |
File was renamed from cans.lua |
| | |
| | | |
| | | if pointed_thing.type ~= "node" then |
| | | return end |
| | | |
| | | n = minetest.env:get_node(pointed_thing.under) |
| | | |
| | | item=itemstack:to_table() |
| | | local load=nil |
| | | if item["metadata"]=="" then load=0 |
| | | else load=tonumber(item["metadata"]) |
| | | end |
| | | |
| | | if n.name == "default:water_source" then |
| | | item=itemstack:to_table() |
| | | local load=tonumber((item["wear"])) |
| | | if load==0 then load =65535 end |
| | | load=get_RE_item_load(load,water_can_max_load) |
| | | if load+1<17 then |
| | | minetest.env:add_node(pointed_thing.under, {name="air"}) |
| | | load=load+1; |
| | | load=set_RE_item_load(load,water_can_max_load) |
| | | item["wear"]=tostring(load) |
| | | item["metadata"]=tostring(load) |
| | | set_RE_wear(item,load,water_can_max_load) |
| | | itemstack:replace(item) |
| | | end |
| | | return itemstack |
| | | end |
| | | item=itemstack:to_table() |
| | | load=tonumber((item["wear"])) |
| | | if load==0 then load =65535 end |
| | | load=get_RE_item_load(load,water_can_max_load) |
| | | if load==0 then return end |
| | | if load==0 then return end |
| | | |
| | | if n.name == "default:water_flowing" then |
| | | minetest.env:add_node(pointed_thing.under, {name="default:water_source"}) |
| | | load=load-1; |
| | | load=set_RE_item_load(load,water_can_max_load) |
| | | item["wear"]=tostring(load) |
| | | item["metadata"]=tostring(load) |
| | | set_RE_wear(item,load,water_can_max_load) |
| | | itemstack:replace(item) |
| | | return itemstack |
| | | end |
| | |
| | | if n.name == "air" then |
| | | minetest.env:add_node(pointed_thing.above, {name="default:water_source"}) |
| | | load=load-1; |
| | | load=set_RE_item_load(load,water_can_max_load) |
| | | item["wear"]=tostring(load) |
| | | item["metadata"]=tostring(load) |
| | | set_RE_wear(item,load,water_can_max_load) |
| | | itemstack:replace(item) |
| | | return itemstack |
| | | end |
| | |
| | | stack_max = 1, |
| | | liquids_pointable = true, |
| | | on_use = function(itemstack, user, pointed_thing) |
| | | |
| | | item=itemstack:to_table() |
| | | local load=nil |
| | | if item["metadata"]=="" then load=0 |
| | | else load=tonumber(item["metadata"]) |
| | | end |
| | | |
| | | if n.name == "default:water_source" then |
| | | if load+1<17 then |
| | | minetest.env:add_node(pointed_thing.under, {name="air"}) |
| | | load=load+1; |
| | | item["metadata"]=tostring(load) |
| | | set_RE_wear(item,load,water_can_max_load) |
| | | itemstack:replace(item) |
| | | end |
| | | return itemstack |
| | | end |
| | | item=itemstack:to_table() |
| | | if load==0 then return end |
| | | |
| | | if n.name == "default:lava_flowing" then |
| | | minetest.env:add_node(pointed_thing.under, {name="default:lava_source"}) |
| | | load=load-1; |
| | | item["metadata"]=tostring(load) |
| | | set_RE_wear(item,load,water_can_max_load) |
| | | itemstack:replace(item) |
| | | return itemstack |
| | | end |
| | | |
| | | n = minetest.env:get_node(pointed_thing.above) |
| | | if n.name == "air" then |
| | | minetest.env:add_node(pointed_thing.above, {name="default:lava_source"}) |
| | | load=load-1; |
| | | item["metadata"]=tostring(load) |
| | | set_RE_wear(item,load,water_can_max_load) |
| | | itemstack:replace(item) |
| | | return itemstack |
| | | end |
| | | |
| | | if pointed_thing.type ~= "node" then |
| | | return end |
| | | |
File was renamed from chainsaw.lua |
| | |
| | | output = 'technic:chainsaw', |
| | | recipe = { |
| | | {'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:battery'}, |
| | | {'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:battery'}, |
| | | {'technic:stainless_steel_ingot', 'technic:motor', 'technic:battery'}, |
| | | {'','','moreores:copper_ingot'}, |
| | | } |
| | | }) |
File was renamed from concrete.lua |
| | |
| | | |
| | | groups = {cracky=1}, |
| | | sounds = default.node_sound_stone_defaults(), |
| | | }) |
| | | }) |
| | | |
| | | stairsplus.register_stair_and_slab_and_panel_and_micro("concrete", "technic:concrete", |
| | | {cracky=3}, |
| | | {"technic_concrete_block.png"}, |
| | | "Concrete Stairs", |
| | | "Concrete Slab", |
| | | "Concrete Panel", |
| | | "Concrete Microblock", |
| | | "concrete") |
New file |
| | |
| | | enable_item_drop=false |
| | | enable_item_pickup=true |
| | | enable_technic_inventory=true |
| | | enable_mining_drill=true |
| | | enable_mining_laser=true |
| | | enable_flashlight=true |
| | | enable_rubber_tree_generation=true |
| | | enable_marble_generation=true |
| | | enable_granite_generation=true |
| | | enable_obsidian_generation=true |
New file |
| | |
| | | technic.creative_inventory_size = 0 |
| | | technic.creative_list = {} |
| | | |
| | | -- Create detached creative inventory after loading all mods |
| | | minetest.after(0, function() |
| | | local inv = minetest.create_detached_inventory("technic_creative", {}) |
| | | technic.creative_list = {} |
| | | for name,def in pairs(minetest.registered_items) do |
| | | if (not def.groups.not_in_creative_inventory or def.groups.not_in_creative_inventory == 0) |
| | | and def.description and def.description ~= "" then |
| | | table.insert(technic.creative_list, name) |
| | | end |
| | | end |
| | | table.sort(technic.creative_list) |
| | | --inv:set_size("main", #technic.creative_list) |
| | | --for _,itemstring in ipairs(technic.creative_list) do |
| | | -- local stack = ItemStack(itemstring) |
| | | -- inv:add_item("main", stack) |
| | | --end |
| | | --technic.creative_inventory_size = #technic.creative_list |
| | | end) |
File was renamed from depends.txt |
| | |
| | | flowers |
| | | pipeworks |
| | | mesecons |
| | | farming |
| | | stairsplus |
File was renamed from electric_furnace.lua |
| | |
| | | local load = math.floor(internal_EU_buffer/2000 * 100) |
| | | meta:set_string("formspec", |
| | | "invsize[8,9;]".. |
| | | "background[-1,-1;10,11;technic_electric_furnace_GUI.png]".. |
| | | "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:".. |
| | | (load)..":technic_power_meter_fg.png]".. |
| | | (load)..":technic_power_meter_fg.png]".. |
| | | "list[current_name;src;3,1;1,1;]".. |
| | | "list[current_name;dst;5,1;2,2;]".. |
| | | "list[current_player;main;0,5;8,4;]".. |
File was renamed from flashlight.lua |
| | |
| | | minetest.register_craft({ |
| | | output = "technic:flashlight", |
| | | recipe = { |
| | | {"glass","glass","glass"}, |
| | | {"technic:rubber","glass","technic:rubber"}, |
| | | {"technic:stainless_steel_ingot","technic:battery","technic:stainless_steel_ingot"}, |
| | | {"","technic:battery",""} |
| | | } |
New file |
| | |
| | | -- original code comes from walkin_light mod by Echo http://minetest.net/forum/viewtopic.php?id=2621 |
| | | |
| | | flashlight_max_charge=30000 |
| | | |
| | | minetest.register_tool("technic:flashlight", { |
| | | description = "Flashlight", |
| | | inventory_image = "technic_flashlight.png", |
| | | stack_max = 1, |
| | | on_use = function(itemstack, user, pointed_thing) |
| | | end, |
| | | }) |
| | | |
| | | minetest.register_craft({ |
| | | output = "technic:flashlight", |
| | | recipe = { |
| | | {"glass","glass","glass"}, |
| | | {"technic:stainless_steel_ingot","technic:battery","technic:stainless_steel_ingot"}, |
| | | {"","technic:battery",""} |
| | | } |
| | | }) |
| | | local players = {} |
| | | local player_positions = {} |
| | | local last_wielded = {} |
| | | |
| | | function round(num) |
| | | return math.floor(num + 0.5) |
| | | end |
| | | |
| | | minetest.register_on_joinplayer(function(player) |
| | | local player_name = player:get_player_name() |
| | | table.insert(players, player_name) |
| | | last_wielded[player_name] = flashlight_weared(player) |
| | | local pos = player:getpos() |
| | | local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)} |
| | | local wielded_item = player:get_wielded_item():get_name() |
| | | if flashlight_weared(player)==true then |
| | | -- Neuberechnung des Lichts erzwingen |
| | | minetest.env:add_node(rounded_pos,{type="node",name="technic:light_off"}) |
| | | minetest.env:add_node(rounded_pos,{type="node",name="air"}) |
| | | end |
| | | player_positions[player_name] = {} |
| | | player_positions[player_name]["x"] = rounded_pos.x; |
| | | player_positions[player_name]["y"] = rounded_pos.y; |
| | | player_positions[player_name]["z"] = rounded_pos.z; |
| | | end) |
| | | |
| | | minetest.register_on_leaveplayer(function(player) |
| | | local player_name = player:get_player_name() |
| | | for i,v in ipairs(players) do |
| | | if v == player_name then |
| | | table.remove(players, i) |
| | | last_wielded[player_name] = nil |
| | | -- Neuberechnung des Lichts erzwingen |
| | | local pos = player:getpos() |
| | | local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)} |
| | | minetest.env:add_node(rounded_pos,{type="node",name="technic:light_off"}) |
| | | minetest.env:add_node(rounded_pos,{type="node",name="air"}) |
| | | player_positions[player_name]["x"] = nil |
| | | player_positions[player_name]["y"] = nil |
| | | player_positions[player_name]["z"] = nil |
| | | player_positions[player_name]["m"] = nil |
| | | player_positions[player_name] = nil |
| | | end |
| | | end |
| | | end) |
| | | |
| | | minetest.register_globalstep(function(dtime) |
| | | for i,player_name in ipairs(players) do |
| | | local player = minetest.env:get_player_by_name(player_name) |
| | | if flashlight_weared(player)==true then |
| | | -- Fackel ist in der Hand |
| | | local pos = player:getpos() |
| | | local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)} |
| | | if (last_wielded[player_name] ~= true) or (player_positions[player_name]["x"] ~= rounded_pos.x or player_positions[player_name]["y"] ~= rounded_pos.y or player_positions[player_name]["z"] ~= rounded_pos.z) then |
| | | -- Fackel gerade in die Hand genommen oder zu neuem Node bewegt |
| | | local is_air = minetest.env:get_node_or_nil(rounded_pos) |
| | | if is_air == nil or (is_air ~= nil and (is_air.name == "air" or is_air.name == "technic:light")) then |
| | | -- wenn an aktueller Position "air" ist, Fackellicht setzen |
| | | minetest.env:add_node(rounded_pos,{type="node",name="technic:light"}) |
| | | end |
| | | if (player_positions[player_name]["x"] ~= rounded_pos.x or player_positions[player_name]["y"] ~= rounded_pos.y or player_positions[player_name]["z"] ~= rounded_pos.z) then |
| | | -- wenn Position geänder, dann altes Licht löschen |
| | | local old_pos = {x=player_positions[player_name]["x"], y=player_positions[player_name]["y"], z=player_positions[player_name]["z"]} |
| | | -- Neuberechnung des Lichts erzwingen |
| | | local is_light = minetest.env:get_node_or_nil(old_pos) |
| | | if is_light ~= nil and is_light.name == "technic:light" then |
| | | minetest.env:add_node(old_pos,{type="node",name="technic:light_off"}) |
| | | minetest.env:add_node(old_pos,{type="node",name="air"}) |
| | | end |
| | | end |
| | | -- gemerkte Position ist nun die gerundete neue Position |
| | | player_positions[player_name]["x"] = rounded_pos.x |
| | | player_positions[player_name]["y"] = rounded_pos.y |
| | | player_positions[player_name]["z"] = rounded_pos.z |
| | | end |
| | | |
| | | last_wielded[player_name] = true; |
| | | elseif last_wielded[player_name] == true then |
| | | -- Fackel nicht in der Hand, aber beim letzten Durchgang war die Fackel noch in der Hand |
| | | local pos = player:getpos() |
| | | local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)} |
| | | repeat |
| | | local is_light = minetest.env:get_node_or_nil(rounded_pos) |
| | | if is_light ~= nil and is_light.name == "technic:light" then |
| | | -- minetest.env:remove_node(rounded_pos) |
| | | -- Erzwinge Neuberechnung des Lichts |
| | | minetest.env:add_node(rounded_pos,{type="node",name="technic:light_off"}) |
| | | minetest.env:add_node(rounded_pos,{type="node",name="air"}) |
| | | end |
| | | until minetest.env:get_node_or_nil(rounded_pos) ~= "technic:light" |
| | | local old_pos = {x=player_positions[player_name]["x"], y=player_positions[player_name]["y"], z=player_positions[player_name]["z"]} |
| | | repeat |
| | | is_light = minetest.env:get_node_or_nil(old_pos) |
| | | if is_light ~= nil and is_light.name == "technic:light" then |
| | | -- minetest.env:remove_node(old_pos) |
| | | -- Erzwinge Neuberechnung des Lichts |
| | | minetest.env:add_node(old_pos,{type="node",name="technic:light_off"}) |
| | | minetest.env:add_node(old_pos,{type="node",name="air"}) |
| | | end |
| | | until minetest.env:get_node_or_nil(old_pos) ~= "technic:light" |
| | | last_wielded[player_name] = true |
| | | end |
| | | end |
| | | end) |
| | | |
| | | minetest.register_node("technic:light", { |
| | | drawtype = "glasslike", |
| | | tile_images = {"technic_light.png"}, |
| | | paramtype = "light", |
| | | walkable = false, |
| | | is_ground_content = true, |
| | | light_propagates = true, |
| | | sunlight_propagates = true, |
| | | light_source = 15, |
| | | selection_box = { |
| | | type = "fixed", |
| | | fixed = {0, 0, 0, 0, 0, 0}, |
| | | }, |
| | | }) |
| | | minetest.register_node("technic:light_off", { |
| | | drawtype = "glasslike", |
| | | tile_images = {"technic_light.png"}, |
| | | paramtype = "light", |
| | | walkable = false, |
| | | is_ground_content = true, |
| | | light_propagates = true, |
| | | sunlight_propagates = true, |
| | | selection_box = { |
| | | type = "fixed", |
| | | fixed = {0, 0, 0, 0, 0, 0}, |
| | | }, |
| | | }) |
| | | |
| | | function flashlight_weared (player) |
| | | flashlight_on=false |
| | | local inv = player:get_inventory() |
| | | local hotbar=inv:get_list("main") |
| | | for i=1,8,1 do |
| | | |
| | | if hotbar[i]:get_name() == "technic:flashlight" then |
| | | item=hotbar[i]:to_table() |
| | | if item["metadata"]=="" or item["metadata"]=="0" then return flashlight_on end --flashlight not charghed |
| | | charge=tonumber(item["metadata"]) |
| | | if charge-2>0 then |
| | | flashlight_on=true |
| | | charge =charge-2; |
| | | set_RE_wear(item,charge,flashlight_max_charge) |
| | | item["metadata"]=tostring(charge) |
| | | hotbar[i]:replace(item) |
| | | inv:set_stack("main",i,hotbar[i]) |
| | | return true |
| | | end |
| | | end |
| | | end |
| | | return flashlight_on |
| | | end |
File was renamed from grinder.lua |
| | |
| | | grinder_recipes[registered_grinder_recipes_count].src_name=string1 |
| | | grinder_recipes[registered_grinder_recipes_count].dst_name=string2 |
| | | registered_grinder_recipes_count=registered_grinder_recipes_count+1 |
| | | if UI_recipes_hook then |
| | | minetest.register_craft({ |
| | | type = "grinding", |
| | | output = string2, |
| | | recipe = string1, |
| | | }) |
| | | end |
| | | end |
| | | |
| | | register_grinder_recipe("default:stone","default:sand") |
| | |
| | | register_grinder_recipe("flowers:flower_tulip","dye:orange 2") |
| | | register_grinder_recipe("flowers:flower_rose","dye:red 2") |
| | | register_grinder_recipe("flowers:flower_viola","dye:violet 2") |
| | | |
| | | |
| | | minetest.register_craftitem( "technic:coal_dust", { |
| | | description = "Coal Dust", |
| | |
| | | end |
| | | return nil |
| | | |
| | | end |
| | | end |
New file |
| | |
| | | register_grinder_recipe("gloopores:alatro_lump","technic:alatro_dust 2") |
| | | register_grinder_recipe("gloopores:kalite_lump","technic:kalite_dust 2") |
| | | register_grinder_recipe("gloopores:arol_lump","technic:arol_dust 2") |
| | | register_grinder_recipe("gloopores:talinite_lump","technic:talinite_dust 2") |
| | | register_grinder_recipe("gloopores:akalin_lump","technic:akalin_dust 2") |
| | | Â |
| | | minetest.register_craftitem("technic:alatro_dust", { |
| | | Â Â Â Â description = "Alatro Dust", |
| | | Â Â Â Â inventory_image = "technic_alatro_dust.png", |
| | | }) |
| | | Â |
| | | minetest.register_craft({ |
| | | Â Â type = "cooking", |
| | | Â Â output = "gloopores:alatro_ingot", |
| | | Â Â recipe = "technic:alatro_dust", |
| | | }) |
| | | Â |
| | | minetest.register_craftitem("technicplus:arol_dust", { |
| | | Â Â Â Â description = "Arol Dust", |
| | | Â Â Â Â inventory_image = "technic_arol_dust.png", |
| | | }) |
| | | Â |
| | | minetest.register_craft({ |
| | | Â Â type = "cooking", |
| | | Â Â output = "gloopores:arol_ingot", |
| | | Â Â recipe = "technic:arol_dust", |
| | | }) |
| | | Â |
| | | minetest.register_craftitem("technic:talinite_dust", { |
| | | Â Â Â Â description = "Talinite Dust", |
| | | Â Â Â Â inventory_image = "technic_talinite_dust.png", |
| | | }) |
| | | Â |
| | | minetest.register_craft({ |
| | | Â Â type = "cooking", |
| | | Â Â output = "gloopores:talinite_ingot", |
| | | Â Â recipe = "technic:talinite_dust", |
| | | }) |
| | | Â |
| | | minetest.register_craftitem("technic:akalin_dust", { |
| | | Â Â Â Â description = "Akalin Dust", |
| | | Â Â Â Â inventory_image = "technic_akalin_dust.png", |
| | | }) |
| | | Â |
| | | minetest.register_craft({ |
| | | Â Â type = "cooking", |
| | | Â Â output = "gloopores:akalin_ingot", |
| | | Â Â recipe = "technic:akalin_dust", |
| | | }) |
| | | Â |
| | | minetest.register_craftitem("technic:kalite_dust", { |
| | | Â Â Â Â description = "Kalite Dust", |
| | | Â Â Â Â inventory_image = "technic_kalite_dust.png", |
| | | Â Â Â Â on_use = minetest.item_eat(2) |
| | | }) |
File was renamed from init.lua |
| | |
| | | -- Minetest 0.4.3 : technic |
| | | -- Minetest 0.4.4 : technic |
| | | |
| | | minetest.register_alias("rebar", "technic:rebar") |
| | | minetest.register_alias("concrete", "technic:concrete") |
| | |
| | | --Read technic config file |
| | | dofile(modpath.."/config.lua") |
| | | |
| | | dofile(modpath.."/concrete.lua") |
| | | -- world gen |
| | | dofile(modpath.."/ores.lua") |
| | | if enable_rubber_tree_generation==true then dofile(modpath.."/rubber.lua") end |
| | | |
| | | -- chests |
| | | dofile(modpath.."/iron_chest.lua") |
| | | dofile(modpath.."/copper_chest.lua") |
| | | dofile(modpath.."/silver_chest.lua") |
| | | dofile(modpath.."/gold_chest.lua") |
| | | dofile(modpath.."/mithril_chest.lua") |
| | | dofile(modpath.."/electric_furnace.lua") |
| | | dofile(modpath.."/battery_box.lua") |
| | | dofile(modpath.."/wires.lua") |
| | | dofile(modpath.."/wires_mv.lua") |
| | | dofile(modpath.."/ores.lua") |
| | | dofile(modpath.."/tool_workshop.lua") |
| | | dofile(modpath.."/music_player.lua") |
| | | dofile(modpath.."/grinder.lua") |
| | | dofile(modpath.."/mining_laser_mk1.lua") |
| | | dofile(modpath.."/injector.lua") |
| | | dofile(modpath.."/generator.lua") |
| | | |
| | | --items |
| | | dofile(modpath.."/concrete.lua") |
| | | dofile(modpath.."/items.lua") |
| | | |
| | | --LV machines |
| | | dofile(modpath.."/alloy_furnace.lua") |
| | | dofile(modpath.."/solar_panel.lua") |
| | | dofile(modpath.."/geothermal.lua") |
| | | dofile(modpath.."/water_mill.lua") |
| | | dofile(modpath.."/alloy_furnace.lua") |
| | | dofile(modpath.."/items.lua") |
| | | dofile(modpath.."/mining_drill.lua") |
| | | dofile(modpath.."/screwdriver.lua") |
| | | dofile(modpath.."/sonic_screwdriver.lua") |
| | | dofile(modpath.."/node_breaker.lua") |
| | | dofile(modpath.."/deployer.lua") |
| | | dofile(modpath.."/constructor.lua") |
| | | dofile(modpath.."/tree_tap.lua") |
| | | dofile(modpath.."/flashlight.lua") |
| | | dofile(modpath.."/cans.lua") |
| | | dofile(modpath.."/chainsaw.lua") |
| | | |
| | | if enable_item_drop then dofile(modpath.."/item_drop.lua") end |
| | | if enable_item_pickup then dofile(modpath.."/item_pickup.lua") end |
| | | dofile(modpath.."/electric_furnace.lua") |
| | | dofile(modpath.."/battery_box.lua") |
| | | dofile(modpath.."/wires.lua") |
| | | dofile(modpath.."/tool_workshop.lua") |
| | | dofile(modpath.."/music_player.lua") |
| | | dofile(modpath.."/generator.lua") |
| | | dofile(modpath.."/grinder.lua") |
| | | |
| | | --MV machines |
| | | dofile(modpath.."/wires_mv.lua") |
| | | dofile(modpath.."/solar_panel_mv.lua") |
| | | dofile(modpath.."/battery_box_mv.lua") |
| | | |
| | | --Tools |
| | | if enable_mining_dril==true then dofile(modpath.."/mining_drill.lua") end |
| | | if enable_mining_laser==true then dofile(modpath.."/mining_laser_mk1.lua") end |
| | | if enable_flashlight==true then dofile(modpath.."/flashlight.lua") end |
| | | dofile(modpath.."/cans.lua") |
| | | dofile(modpath.."/chainsaw.lua") |
| | | dofile(modpath.."/tree_tap.lua") |
| | | dofile(modpath.."/screwdriver.lua") |
| | | dofile(modpath.."/sonic_screwdriver.lua") |
| | | |
| | | -- mesecons and tubes related |
| | | dofile(modpath.."/injector.lua") |
| | | dofile(modpath.."/node_breaker.lua") |
| | | dofile(modpath.."/deployer.lua") |
| | | dofile(modpath.."/constructor.lua") |
| | | |
| | | if enable_item_drop then dofile(modpath.."/item_drop.lua") end |
| | | if enable_item_pickup then dofile(modpath.."/item_pickup.lua") end |
| | | |
| | | function has_locked_chest_privilege(meta, player) |
| | | if player:get_player_name() ~= meta:get_string("owner") then |
| | |
| | | meta = minetest.env:get_meta(pos) |
| | | meta:from_table(meta0) |
| | | return 1 |
| | | end |
| | | end |
New file |
| | |
| | | minetest.register_craftitem("technic:injector", { |
| | | description = "Injector", |
| | | stack_max = 99, |
| | | }) |
| | | |
| | | minetest.register_node("technic:injector", { |
| | | description = "Injector", |
| | | tiles = {"technic_iron_chest_top.png", "technic_iron_chest_top.png", "technic_iron_chest_side.png", |
| | | "technic_iron_chest_side.png", "technic_iron_chest_side.png", "technic_iron_chest_front.png"}, |
| | | paramtype2 = "facedir", |
| | | groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, |
| | | 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", |
| | | "invsize[9,9;]".. |
| | | "list[current_name;main;0,2;8,2;]".. |
| | | "list[current_player;main;0,5;8,4;]") |
| | | meta:set_string("infotext", "Injector") |
| | | 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_punch = function (pos, node, puncher) |
| | | local meta = minetest.env:get_meta(pos); |
| | | local inv = meta:get_inventory() |
| | | for _,stack in ipairs(inv:get_list("main")) do |
| | | if stack:get_name() ~="" then |
| | | inv:remove_item("main",stack) |
| | | item1=tube_item({x=pos.x+.5,y=pos.y,z=pos.z},stack) |
| | | return |
| | | end |
| | | end |
| | | end, |
| | | }) |
| | | |
| | | |
| | | function tube_item(pos, item) |
| | | -- Take item in any format |
| | | local stack = ItemStack(item) |
| | | local obj = minetest.env:add_entity(pos, "technic:tubed_item") |
| | | obj:get_luaentity():set_item(stack:to_string()) |
| | | obj:get_luaentity().start_pos = {x=pos.x,y=pos.y,z=pos.z} |
| | | obj:setacceleration({x=0, y=0, z=0}) |
| | | pos.x=pos.x+1 |
| | | local meta = minetest.env:get_meta(pos) |
| | | if meta:get_int("tubelike")==1 then obj:setvelocity({x=1, y=0, z=0}) return obj end |
| | | pos.x=pos.x-2 |
| | | meta = minetest.env:get_meta(pos) |
| | | if meta:get_int("tubelike")==1 then obj:setvelocity({x=-1, y=0, z=0}) return obj end |
| | | pos.x=pos.x+1 |
| | | pos.z=pos.z+1 |
| | | meta = minetest.env:get_meta(pos) |
| | | if meta:get_int("tubelike")==1 then obj:setvelocity({x=0, y=0, z=1}) return obj end |
| | | pos.z=pos.z-2 |
| | | meta = minetest.env:get_meta(pos) |
| | | if meta:get_int("tubelike")==1 then obj:setvelocity({x=0, y=0, z=-1}) return obj end |
| | | pos.z=pos.z+1 |
| | | pos.y=pos.y+1 |
| | | meta = minetest.env:get_meta(pos) |
| | | if meta:get_int("tubelike")==1 then obj:setvelocity({x=0, y=1, z=0}) return obj end |
| | | pos.y=pos.y-2 |
| | | meta = minetest.env:get_meta(pos) |
| | | if meta:get_int("tubelike")==1 then obj:setvelocity({x=0, y=-2, z=0}) return obj end |
| | | pos.y=pos.y+1 |
| | | return obj |
| | | end |
| | | |
| | | minetest.register_entity("technic:tubed_item", { |
| | | initial_properties = { |
| | | hp_max = 1, |
| | | physical = false, |
| | | collisionbox = {0,0,0,0,0,0}, |
| | | visual = "sprite", |
| | | visual_size = {x=0.5, y=0.5}, |
| | | textures = {""}, |
| | | spritediv = {x=1, y=1}, |
| | | initial_sprite_basepos = {x=0, y=0}, |
| | | is_visible = false, |
| | | start_pos={} |
| | | }, |
| | | |
| | | itemstring = '', |
| | | physical_state = false, |
| | | |
| | | set_item = function(self, itemstring) |
| | | self.itemstring = itemstring |
| | | local stack = ItemStack(itemstring) |
| | | local itemtable = stack:to_table() |
| | | local itemname = nil |
| | | if itemtable then |
| | | itemname = stack:to_table().name |
| | | end |
| | | local item_texture = nil |
| | | local item_type = "" |
| | | if minetest.registered_items[itemname] then |
| | | item_texture = minetest.registered_items[itemname].inventory_image |
| | | item_type = minetest.registered_items[itemname].type |
| | | end |
| | | prop = { |
| | | is_visible = true, |
| | | visual = "sprite", |
| | | textures = {"unknown_item.png"} |
| | | } |
| | | if item_texture and item_texture ~= "" then |
| | | prop.visual = "sprite" |
| | | prop.textures = {item_texture} |
| | | prop.visual_size = {x=0.3, y=0.3} |
| | | else |
| | | prop.visual = "wielditem" |
| | | prop.textures = {itemname} |
| | | prop.visual_size = {x=0.15, y=0.15} |
| | | end |
| | | self.object:set_properties(prop) |
| | | end, |
| | | |
| | | get_staticdata = function(self) |
| | | |
| | | return minetest.serialize({ |
| | | itemstring=self.itemstring, |
| | | velocity=self.object:getvelocity(), |
| | | start_pos=self.start_pos |
| | | }) |
| | | end, |
| | | |
| | | on_activate = function(self, staticdata) |
| | | if staticdata=="" or staticdata==nil then return end |
| | | local item = minetest.deserialize(staticdata) |
| | | local stack = ItemStack(item.itemstring) |
| | | local itemtable = stack:to_table() |
| | | local itemname = nil |
| | | if itemtable then |
| | | itemname = stack:to_table().name |
| | | end |
| | | |
| | | if itemname then |
| | | self.start_pos=item.start_pos |
| | | self.object:setvelocity(item.velocity) |
| | | self.object:setacceleration({x=0, y=0, z=0}) |
| | | self.object:setpos(item.start_pos) |
| | | end |
| | | self:set_item(item.itemstring) |
| | | end, |
| | | |
| | | on_step = function(self, dtime) |
| | | if self.start_pos then |
| | | local pos = self.object:getpos() |
| | | local node = minetest.env:get_node(pos) |
| | | local meta = minetest.env:get_meta(pos) |
| | | tubelike=meta:get_int("tubelike") |
| | | local velocity=self.object:getvelocity() |
| | | |
| | | if not velocity then return end |
| | | |
| | | if math.abs(velocity.x)==1 then |
| | | local next_node=math.abs(pos.x-self.start_pos.x) |
| | | if next_node >= 1 then |
| | | self.start_pos.x=self.start_pos.x+velocity.x |
| | | if check_pos_vector (self.start_pos, velocity)==0 then |
| | | check_next_step (self.start_pos, velocity) |
| | | self.object:setpos(self.start_pos) |
| | | self.object:setvelocity(velocity) |
| | | return |
| | | end |
| | | end |
| | | end |
| | | |
| | | if math.abs(velocity.y)==1 then |
| | | local next_node=math.abs(pos.y-self.start_pos.y) |
| | | if next_node >= 1 then |
| | | self.start_pos.y=self.start_pos.y+velocity.y |
| | | if check_pos_vector (self.start_pos, velocity)==0 then |
| | | check_next_step (self.start_pos, velocity) |
| | | self.object:setpos(self.start_pos) |
| | | self.object:setvelocity(velocity) |
| | | return |
| | | end |
| | | end |
| | | end |
| | | |
| | | if math.abs(velocity.z)==1 then |
| | | local next_node=math.abs(pos.z-self.start_pos.z) |
| | | if next_node >= 1 then |
| | | self.start_pos.z=self.start_pos.z+velocity.z |
| | | if check_pos_vector (self.start_pos, velocity)==0 then |
| | | check_next_step (self.start_pos, velocity) |
| | | self.object:setpos(self.start_pos) |
| | | self.object:setvelocity(velocity) |
| | | return |
| | | end |
| | | end |
| | | end |
| | | end |
| | | end |
| | | }) |
| | | |
| | | |
| | | function check_next_step (pos,velocity) |
| | | local meta |
| | | local tubelike |
| | | |
| | | if velocity.x==0 then |
| | | meta = minetest.env:get_meta({x=pos.x-1,y=pos.y,z=pos.z}) |
| | | tubelike=meta:get_int("tubelike") |
| | | if tubelike==1 then velocity.x=-1 velocity.y=0 velocity.z=0 return end |
| | | meta = minetest.env:get_meta({x=pos.x+1,y=pos.y,z=pos.z}) |
| | | tubelike=meta:get_int("tubelike") |
| | | if tubelike==1 then velocity.x=1 velocity.y=0 velocity.z=0 return end |
| | | end |
| | | |
| | | if velocity.z==0 then |
| | | meta = minetest.env:get_meta({x=pos.x,y=pos.y,z=pos.z+1}) |
| | | tubelike=meta:get_int("tubelike") |
| | | if tubelike==1 then velocity.x=0 velocity.y=0 velocity.z=1 return end |
| | | meta = minetest.env:get_meta({x=pos.x,y=pos.y,z=pos.z-1}) |
| | | tubelike=meta:get_int("tubelike") |
| | | if tubelike==1 then velocity.x=0 velocity.y=0 velocity.z=-1 return end |
| | | end |
| | | |
| | | if velocity.y==0 then |
| | | meta = minetest.env:get_meta({x=pos.x,y=pos.y+1,z=pos.z}) |
| | | tubelike=meta:get_int("tubelike") |
| | | if tubelike==1 then velocity.x=0 velocity.y=1 velocity.z=0 return end |
| | | meta = minetest.env:get_meta({x=pos.x,y=pos.y-1,z=pos.z}) |
| | | tubelike=meta:get_int("tubelike") |
| | | if tubelike==1 then velocity.x=0 velocity.y=-1 velocity.z=0 return end |
| | | end |
| | | |
| | | --velocity.x=0 |
| | | --velocity.y=0 |
| | | --velocity.z=0 |
| | | end |
| | | |
| | | function check_pos_vector (pos,velocity) |
| | | added={} |
| | | added.x=pos.x+velocity.x |
| | | added.y=pos.y+velocity.y |
| | | added.z=pos.z+velocity.z |
| | | local meta=minetest.env:get_meta(added) |
| | | --print(dump(added).." : "..tubelike) |
| | | if meta:get_int("tubelike")==1 then return 1 end |
| | | return 0 |
| | | end |
File was renamed from iron_chest.lua |
| | |
| | | local inv = meta:get_inventory() |
| | | inv:set_size("main", 9*4) |
| | | end, |
| | | |
| | | after_place_node = function(pos, placer) |
| | | ntop1 = minetest.env:get_node({x=pos.x, y=pos.y, z=pos.z}) |
| | | ntop = minetest.env:get_node({x=pos.x, y=pos.y+1, z=pos.z}) |
| | | if ntop.name ~= "air" then |
| | | minetest.node_dig(pos, ntop1, placer) |
| | | end |
| | | end, |
| | | |
| | | can_dig = function(pos,player) |
| | | local meta = minetest.env:get_meta(pos); |
| | | local inv = meta:get_inventory() |
| | |
| | | " takes stuff from locked chest at "..minetest.pos_to_string(pos)) |
| | | end, |
| | | }) |
| | | |
| | | function add_item (player) |
| | | player:get_inventory():add_item("main", "blabla 1") |
| | | end |
File was renamed from items.lua |
| | |
| | | minetest.register_craft({ |
| | | output = 'technic:green_energy_crystal', |
| | | recipe = { |
| | | {'moreores:gold_ingot', 'technic:battery', 'group:dye,basecolor_green'}, |
| | | {'moreores:gold_ingot', 'technic:battery', 'dye:green'}, |
| | | {'technic:battery', 'technic:red_energy_crystal', 'technic:battery'}, |
| | | {'group:dye,basecolor_green', 'technic:battery', 'moreores:gold_ingot'}, |
| | | {'dye:green', 'technic:battery', 'moreores:gold_ingot'}, |
| | | } |
| | | }) |
| | | |
| | | minetest.register_craft({ |
| | | output = 'technic:blue_energy_crystal', |
| | | recipe = { |
| | | {'moreores:gold_ingot', 'technic:battery', 'group:dye,basecolor_blue'}, |
| | | {'moreores:gold_ingot', 'technic:battery', 'dye:blue'}, |
| | | {'technic:battery', 'technic:green_energy_crystal', 'technic:battery'}, |
| | | {'group:dye,basecolor_green', 'technic:battery', 'moreores:gold_ingot'}, |
| | | {'dye:blue', 'technic:battery', 'moreores:gold_ingot'}, |
| | | } |
| | | }) |
| | | |
| | | minetest.register_craft({ |
| | | output = 'technic:red_energy_crystal', |
| | | recipe = { |
| | | {'moreores:gold_ingot', 'technic:battery', 'group:dye,basecolor_red'}, |
| | | {'moreores:gold_ingot', 'technic:battery', 'dye:red'}, |
| | | {'technic:battery', 'technic:diamond_block', 'technic:battery'}, |
| | | {'group:dye,basecolor_red', 'technic:battery', 'moreores:gold_ingot'}, |
| | | {'dye:red', 'technic:battery', 'moreores:gold_ingot'}, |
| | | } |
| | | }) |
| | | |
File was renamed from mining_drill.lua |
| | |
| | | output = 'technic:mining_drill', |
| | | recipe = { |
| | | {'technic:stainless_steel_ingot', 'technic:diamond_drill_head', 'technic:stainless_steel_ingot'}, |
| | | {'technic:stainless_steel_ingot', 'technic:red_energy_crystal', 'technic:stainless_steel_ingot'}, |
| | | {'', 'moreores:copper_ingot', ''}, |
| | | {'technic:stainless_steel_ingot', 'technic:motor', 'technic:stainless_steel_ingot'}, |
| | | {'', 'technic:red_energy_crystal', 'moreores:copper_ingot'}, |
| | | } |
| | | }) |
| | | |
copy from mithril_chest.lua
copy to technic/technic/mithril_subspace_chest.lua
New file |
| | |
| | | minetest.register_node( "technic:marble", { |
| | | description = "Marble", |
| | | tiles = { "technic_marble.png" }, |
| | | is_ground_content = true, |
| | | groups = {cracky=3}, |
| | | sounds = default.node_sound_stone_defaults(), |
| | | }) |
| | | |
| | | minetest.register_node( "technic:marble_bricks", { |
| | | description = "Marble Bricks", |
| | | tiles = { "technic_marble_bricks.png" }, |
| | | is_ground_content = true, |
| | | groups = {cracky=3}, |
| | | sounds = default.node_sound_stone_defaults(), |
| | | }) |
| | | |
| | | minetest.register_craft({ |
| | | output = 'technic:marble_bricks 4', |
| | | recipe = { |
| | | {'technic:marble','technic:marble'}, |
| | | {'technic:marble','technic:marble'} |
| | | } |
| | | }) |
| | | |
| | | minetest.register_node( "technic:granite", { |
| | | description = "Granite", |
| | | tiles = { "technic_granite.png" }, |
| | | is_ground_content = true, |
| | | groups = {cracky=3}, |
| | | sounds = default.node_sound_stone_defaults(), |
| | | }) |
| | | |
| | | minetest.register_node( "technic:obsidian", { |
| | | description = "Obsidian", |
| | | tiles = { "technic_obsidian.png" }, |
| | | is_ground_content = true, |
| | | groups = {cracky=3}, |
| | | sounds = default.node_sound_stone_defaults(), |
| | | }) |
| | | |
| | | stairsplus.register_stair_and_slab_and_panel_and_micro("marble", "technic:marble", |
| | | {cracky=3}, |
| | | {"technic_marble.png"}, |
| | | "Marble Stairs", |
| | | "Marble Slab", |
| | | "Marble Panel", |
| | | "Marble Microblock", |
| | | "marble") |
| | | stairsplus.register_stair_and_slab_and_panel_and_micro("marble_bricks", "technic:marble_bricks", |
| | | {cracky=3}, |
| | | {"technic_marble_bricks.png"}, |
| | | "Marble Bricks Stairs", |
| | | "Marble Bricks Slab", |
| | | "Marble Bricks Panel", |
| | | "Marble Bricks Microblock", |
| | | "marble_bricks") |
| | | stairsplus.register_stair_and_slab_and_panel_and_micro("granite", "technic:granite", |
| | | {cracky=3}, |
| | | {"technic_granite.png"}, |
| | | "Granite Stairs", |
| | | "Granite Slab", |
| | | "Granite Panel", |
| | | "Granite Microblock", |
| | | "granite") |
| | | stairsplus.register_stair_and_slab_and_panel_and_micro("obsidian", "technic:obsidian", |
| | | {cracky=3}, |
| | | {"technic_obsidian.png"}, |
| | | "Obsidian Stairs", |
| | | "Obsidian Slab", |
| | | "Obsidian Panel", |
| | | "Obsidian Microblock", |
| | | "obsidian") |
| | | |
| | | minetest.register_node( "technic:mineral_diamond", { |
| | | description = "Diamond Ore", |
| | | tiles = { "default_stone.png^technic_mineral_diamond.png" }, |
| | | is_ground_content = true, |
| | | groups = {cracky=3}, |
| | | sounds = default.node_sound_stone_defaults(), |
| | | drop = 'craft "technic:diamond" 1', |
| | | }) |
| | | |
| | | minetest.register_craftitem( "technic:diamond", { |
| | | description = "Diamond", |
| | | inventory_image = "technic_diamond.png", |
| | | on_place_on_ground = minetest.craftitem_place_item, |
| | | }) |
| | | |
| | | minetest.register_node( "technic:mineral_uranium", { |
| | | description = "Uranium Ore", |
| | | tiles = { "default_stone.png^technic_mineral_uranium.png" }, |
| | | is_ground_content = true, |
| | | groups = {cracky=3}, |
| | | sounds = default.node_sound_stone_defaults(), |
| | | drop = 'craft "technic:uranium" 1', |
| | | }) |
| | | |
| | | minetest.register_craftitem( "technic:uranium", { |
| | | description = "Uranium", |
| | | inventory_image = "technic_uranium.png", |
| | | on_place_on_ground = minetest.craftitem_place_item, |
| | | }) |
| | | |
| | | minetest.register_node( "technic:mineral_chromium", { |
| | | description = "Chromium Ore", |
| | | tiles = { "default_stone.png^technic_mineral_chromium.png" }, |
| | | is_ground_content = true, |
| | | groups = {cracky=3}, |
| | | sounds = default.node_sound_stone_defaults(), |
| | | drop = 'craft "technic:chromium_lump" 1', |
| | | }) |
| | | |
| | | minetest.register_craftitem( "technic:chromium_lump", { |
| | | description = "Chromium Lump", |
| | | inventory_image = "technic_chromium_lump.png", |
| | | on_place_on_ground = minetest.craftitem_place_item, |
| | | }) |
| | | |
| | | minetest.register_craftitem( "technic:chromium_ingot", { |
| | | description = "Chromium Ingot", |
| | | inventory_image = "technic_chromium_ingot.png", |
| | | on_place_on_ground = minetest.craftitem_place_item, |
| | | }) |
| | | |
| | | minetest.register_craft({ |
| | | type = 'cooking', |
| | | output = "technic:chromium_ingot", |
| | | recipe = "technic:chromium_lump" |
| | | }) |
| | | |
| | | |
| | | minetest.register_node( "technic:mineral_zinc", { |
| | | description = "Zinc Ore", |
| | | tile_images = { "default_stone.png^technic_mineral_zinc.png" }, |
| | | is_ground_content = true, |
| | | groups = {cracky=3}, |
| | | sounds = default.node_sound_stone_defaults(), |
| | | drop = 'craft "technic:zinc_lump" 1', |
| | | }) |
| | | |
| | | minetest.register_craftitem( "technic:zinc_lump", { |
| | | description = "Zinc Lump", |
| | | inventory_image = "technic_zinc_lump.png", |
| | | }) |
| | | |
| | | minetest.register_craftitem( "technic:zinc_ingot", { |
| | | description = "Zinc Ingot", |
| | | inventory_image = "technic_zinc_ingot.png", |
| | | }) |
| | | |
| | | minetest.register_craftitem( "technic:stainless_steel_ingot", { |
| | | description = "Stainless Steel Ingot", |
| | | inventory_image = "technic_stainless_steel_ingot.png", |
| | | }) |
| | | |
| | | minetest.register_craftitem( "technic:brass_ingot", { |
| | | description = "Brass Ingot", |
| | | inventory_image = "technic_brass_ingot.png", |
| | | }) |
| | | |
| | | minetest.register_craft({ |
| | | type = 'cooking', |
| | | output = "technic:zinc_ingot", |
| | | recipe = "technic:zinc_lump" |
| | | }) |
| | | |
| | | |
| | | local function generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, ore_per_chunk, height_min, height_max) |
| | | if maxp.y < height_min or minp.y > height_max then |
| | | return |
| | | end |
| | | local y_min = math.max(minp.y, height_min) |
| | | local y_max = math.min(maxp.y, height_max) |
| | | local volume = (maxp.x-minp.x+1)*(y_max-y_min+1)*(maxp.z-minp.z+1) |
| | | local pr = PseudoRandom(seed) |
| | | local num_chunks = math.floor(chunks_per_volume * volume) |
| | | local chunk_size = 3 |
| | | if ore_per_chunk <= 4 then |
| | | chunk_size = 2 |
| | | end |
| | | local inverse_chance = math.floor(chunk_size*chunk_size*chunk_size / ore_per_chunk) |
| | | --print("generate_ore num_chunks: "..dump(num_chunks)) |
| | | for i=1,num_chunks do |
| | | if (y_max-chunk_size+1 <= y_min) then return end |
| | | local y0 = pr:next(y_min, y_max-chunk_size+1) |
| | | if y0 >= height_min and y0 <= height_max then |
| | | local x0 = pr:next(minp.x, maxp.x-chunk_size+1) |
| | | local z0 = pr:next(minp.z, maxp.z-chunk_size+1) |
| | | local p0 = {x=x0, y=y0, z=z0} |
| | | for x1=0,chunk_size-1 do |
| | | for y1=0,chunk_size-1 do |
| | | for z1=0,chunk_size-1 do |
| | | if pr:next(1,inverse_chance) == 1 then |
| | | local x2 = x0+x1 |
| | | local y2 = y0+y1 |
| | | local z2 = z0+z1 |
| | | local p2 = {x=x2, y=y2, z=z2} |
| | | if minetest.env:get_node(p2).name == wherein then |
| | | minetest.env:set_node(p2, {name=name}) |
| | | end |
| | | end |
| | | end |
| | | end |
| | | end |
| | | end |
| | | end |
| | | --print("generate_ore done") |
| | | end |
| | | |
| | | minetest.register_on_generated(function(minp, maxp, seed) |
| | | generate_ore("technic:mineral_diamond", "default:stone", minp, maxp, seed+21, 1/11/11/11, 4, -31000, -450) |
| | | generate_ore("technic:mineral_uranium", "default:stone", minp, maxp, seed+22, 1/10/10/10, 3, -300, -80) |
| | | generate_ore("technic:mineral_chromium", "default:stone", minp, maxp, seed+23, 1/10/10/10, 2, -31000, -100) |
| | | generate_ore("technic:mineral_zinc", "default:stone", minp, maxp, seed+24, 1/9/9/9, 4, -31000, 2) |
| | | generate_ore("technic:marble", "default:stone", minp, maxp, seed+25, 1/128, 20, -100, -32) |
| | | generate_ore("technic:granite", "default:stone", minp, maxp, seed+25, 1/128, 15, -190, -90) |
| | | generate_stratus("technic:obsidian", |
| | | {"default:stone"}, |
| | | {"default:lava_source"},{"default:air"}, |
| | | minp, maxp, seed+4, 10, 25, 7, -450, -31000, -450) |
| | | end) |
| | | |
| | | function generate_stratus(name, wherein, ceilin, ceil, minp, maxp, seed, stratus_chance, radius, radius_y, deep, height_min, height_max) |
| | | if maxp.y < height_min or minp.y > height_max then |
| | | return |
| | | end |
| | | -- it will be only generate a stratus for every 100 m of area |
| | | local stratus_per_volume=1 |
| | | local area=45 |
| | | local y_min = math.max(minp.y, height_min) |
| | | local y_max = math.min(maxp.y, height_max) |
| | | local volume = ((maxp.x-minp.x+1)/area)*((y_max-y_min+1)/area)*((maxp.z-minp.z+1)/area) |
| | | local pr = PseudoRandom(seed) |
| | | local blocks = math.floor(stratus_per_volume*volume) |
| | | print(" <<"..dump(name)..">>"); |
| | | if blocks == 0 then |
| | | blocks = 1 |
| | | end |
| | | print(" blocks: "..dump(blocks).." in vol: "..dump(volume).." ("..dump(maxp.x-minp.x+1)..","..dump(y_max-y_min+1)..","..dump(maxp.z-minp.z+1)..")") |
| | | for i=1,blocks do |
| | | local x = pr:next(1,stratus_chance) |
| | | if x == 1 then |
| | | -- TODO deep |
| | | local y0=y_max-radius_y+1 |
| | | if y0 < y_min then |
| | | y0=y_min |
| | | else |
| | | y0=pr:next(y_min, y0) |
| | | end |
| | | local x0 = maxp.x-radius+1 |
| | | if x0 < minp.x then |
| | | x0 = minp.x |
| | | else |
| | | x0 = pr:next(minp.x, x0) |
| | | end |
| | | local z0 = maxp.z-radius+1 |
| | | if z0 < minp.z then |
| | | x0 = minp.z |
| | | else |
| | | z0 = pr:next(minp.z, z0) |
| | | end |
| | | local p0 = {x=x0, y=y0, z=z0} |
| | | local n = minetest.env:get_node(p0).name |
| | | local i = 0 |
| | | --print(" upper node "..n) |
| | | x = 0 |
| | | for k, v in ipairs(ceilin) do |
| | | if n == v then |
| | | x = 1 |
| | | break |
| | | end |
| | | end |
| | | if x == 1 then |
| | | -- search for the node to replace |
| | | --print(" Searching nodes to replace from "..dump(y0-1).." to "..dump(y_min)) |
| | | for y1=y0-1,y_min,-1 do |
| | | p0.y=y1 |
| | | n = minetest.env:get_node(p0).name |
| | | x = 0 |
| | | for k, v in ipairs(wherein) do |
| | | if n == v then |
| | | x = 1 |
| | | break |
| | | end |
| | | end |
| | | if x == 1 then |
| | | y0=y1-deep |
| | | if y0 < y_min then |
| | | y0 = y_min |
| | | end |
| | | break |
| | | end |
| | | end |
| | | local rx=pr:next(radius/2,radius)+1 |
| | | local rz=pr:next(radius/2,radius)+1 |
| | | local ry=pr:next(radius_y/2,radius_y)+1 |
| | | --print(" area of generation ("..dump(rx)..","..dump(rz)..","..dump(ry)..")") |
| | | for x1=0,rx do |
| | | rz = rz + 3 - pr:next(1,6) |
| | | if rz < 1 then |
| | | rz = 1 |
| | | end |
| | | for z1=pr:next(1,3),rz do |
| | | local ry0=ry+ pr:next(1,3) |
| | | for y1=pr:next(1,3),ry0 do |
| | | local x2 = x0+x1 |
| | | local y2 = y0+y1 |
| | | local z2 = z0+z1 |
| | | local p2 = {x=x2, y=y2, z=z2} |
| | | n = minetest.env:get_node(p2).name |
| | | x = 0 |
| | | for k, v in ipairs(wherein) do |
| | | if n == v then |
| | | x = 1 |
| | | break |
| | | end |
| | | end |
| | | if x == 1 then |
| | | if ceil == nil then |
| | | minetest.env:set_node(p2, {name=name}) |
| | | i = i +1 |
| | | else |
| | | local p3 = {p2.x,p2.y+1,p2} |
| | | if minetest.env:get_node(p3).name == ceil then |
| | | minetest.env:set_node(p2, {name=name}) |
| | | i = i +1 |
| | | end |
| | | end |
| | | end |
| | | end |
| | | end |
| | | end |
| | | print(" generated "..dump(i).." blocks in ("..dump(x0)..","..dump(y0)..","..dump(z0)..")") |
| | | end |
| | | |
| | | end |
| | | end |
| | | --print("generate_ore done") |
| | | end |
File was renamed from solar_panel.lua |
| | |
| | | local light = minetest.env:get_node_light(pos1, nil) |
| | | local meta = minetest.env:get_meta(pos) |
| | | if light == nil then light = 0 end |
| | | if light >= 14 then |
| | | if light >= 12 then |
| | | meta:set_string("infotext", "Solar Panel is active ") |
| | | meta:set_float("active",1) |
| | | local internal_EU_buffer=meta:get_float("internal_EU_buffer") |
New file |
| | |
| | | minetest.register_node("technic:tetris_machine_node1", { |
| | | tiles = {"tetris_machine_top.png", "technic_mv_battery_box_bottom.png", "tetris_machine_front1.png", |
| | | "tetris_machine_side1B.png", "tetris_machine_side1P.png", "tetris_machine_side1L.png"}, |
| | | tile_images = {"technic_tetris_machine.png",}, |
| | | is_ground_content = true, |
| | | groups = {cracky=1}, |
| | | sounds = default.node_sound_stone_defaults(), |
| | | }) |
| | | |
| | | minetest.register_node("technic:tetris_machine_node2", { |
| | | tiles = {"tetris_machine_top.png", "technic_mv_battery_box_bottom.png", "tetris_machine_front2.png", |
| | | "tetris_machine_side2B.png", "tetris_machine_side2P.png", "tetris_machine_side2L.png"}, |
| | | tile_images = {"technic_tetris_machine.png",}, |
| | | is_ground_content = true, |
| | | groups = {cracky=1}, |
| | | sounds = default.node_sound_stone_defaults(), |
| | | }) |
File was renamed from tree_tap.lua |
| | |
| | | local pos=minetest.get_pointed_thing_position(pointed_thing,above) |
| | | local node=minetest.env:get_node(pos) |
| | | local node_name=node.name |
| | | if node_name == "farming_plus:rubber_tree_full" then |
| | | if node_name == "farming_plus:rubber_tree_full" or node_name == "farming:rubber_tree_full" or node_name == "technic:rubber_tree_full" then |
| | | user:get_inventory():add_item("main",ItemStack("technic:raw_latex")) |
| | | minetest.env:set_node(pos,node) |
| | | local item=itemstack:to_table() |
New file |
| | |
| | | minetest.register_alias("battery", "technic:battery") |
| | | minetest.register_alias("battery_box", "technic:battery_box") |
| | | minetest.register_alias("electric_furnace", "technic:electric_furnace") |
| | | |
| | | |
| | | minetest.register_craft({ |
| | | output = 'technic:battery 1', |
| | | recipe = { |
| | | {'default:wood', 'moreores:copper_ingot', 'default:wood'}, |
| | | {'default:wood', 'moreores:tin_ingot', 'default:wood'}, |
| | | {'default:wood', 'moreores:copper_ingot', 'default:wood'}, |
| | | } |
| | | }) |
| | | |
| | | minetest.register_craft({ |
| | | output = 'technic:battery_box 1', |
| | | recipe = { |
| | | {'technic:battery', 'default:wood', 'technic:battery'}, |
| | | {'technic:battery', 'moreores:copper_ingot', 'technic:battery'}, |
| | | {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, |
| | | } |
| | | }) |
| | | |
| | | minetest.register_craft({ |
| | | output = 'technic:electric_furnace', |
| | | recipe = { |
| | | {'default:brick', 'default:brick', 'default:brick'}, |
| | | {'default:brick', '', 'default:brick'}, |
| | | {'default:steel_ingot', 'moreores:copper_ingot', 'default:steel_ingot'}, |
| | | } |
| | | }) |
| | | |
| | | |
| | | --minetest.register_craftitem("technic:battery", { |
| | | -- description = "Recharcheable battery", |
| | | -- inventory_image = "technic_battery.png", |
| | | -- stack_max = 1, |
| | | --}) |
| | | |
| | | minetest.register_tool("technic:battery", |
| | | {description = "RE Battery", |
| | | inventory_image = "technic_battery.png", |
| | | energy_charge = 0, |
| | | tool_capabilities = {max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}}) |
| | | |
| | | minetest.register_craftitem("technic:battery_box", { |
| | | description = "Battery box", |
| | | stack_max = 99, |
| | | }) |
| | | |
| | | |
| | | |
| | | battery_box_formspec = |
| | | "invsize[8,9;]".. |
| | | "image[1,1;1,2;technic_power_meter_bg.png]".. |
| | | "list[current_name;src;3,1;1,1;]".. |
| | | "image[4,1;1,1;technic_battery_reload.png]".. |
| | | "list[current_name;dst;5,1;1,1;]".. |
| | | "label[0,0;Battery box]".. |
| | | "label[3,0;Charge]".. |
| | | "label[5,0;Discharge]".. |
| | | "label[1,3;Power level]".. |
| | | "list[current_player;main;0,5;8,4;]" |
| | | |
| | | minetest.register_node("technic:battery_box", { |
| | | description = "Battery box", |
| | | tiles = {"technic_battery_box_top.png", "technic_battery_box_bottom.png", "technic_battery_box_side.png", |
| | | "technic_battery_box_side.png", "technic_battery_box_side.png", "technic_battery_box_side.png"}, |
| | | groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, |
| | | sounds = default.node_sound_wood_defaults(), |
| | | technic_power_machine=1, |
| | | on_construct = function(pos) |
| | | local meta = minetest.env:get_meta(pos) |
| | | meta:set_string("infotext", "Battery box") |
| | | meta:set_float("technic_power_machine", 1) |
| | | meta:set_string("formspec", battery_box_formspec) |
| | | local inv = meta:get_inventory() |
| | | inv:set_size("src", 1) |
| | | inv:set_size("dst", 1) |
| | | battery_charge = 0 |
| | | max_charge = 60000 |
| | | end, |
| | | can_dig = function(pos,player) |
| | | local meta = minetest.env:get_meta(pos); |
| | | local inv = meta:get_inventory() |
| | | if not inv:is_empty("dst") then |
| | | return false |
| | | elseif not inv:is_empty("src") then |
| | | return false |
| | | end |
| | | return true |
| | | end, |
| | | }) |
| | | |
| | | electric_furnace_formspec = |
| | | "invsize[8,9;]".. |
| | | "image[1,1;1,2;technic_power_meter_bg.png]".. |
| | | "list[current_name;src;3,1;1,1;]".. |
| | | "list[current_name;dst;5,1;2,2;]".. |
| | | "list[current_player;main;0,5;8,4;]".. |
| | | "label[0,0;Electric Furnace]".. |
| | | "label[1,3;Power level]" |
| | | |
| | | minetest.register_node("technic:electric_furnace", { |
| | | description = "Electric furnace", |
| | | tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png", |
| | | "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_furnace_front.png"}, |
| | | paramtype2 = "facedir", |
| | | groups = {cracky=2}, |
| | | legacy_facedir_simple = true, |
| | | sounds = default.node_sound_stone_defaults(), |
| | | technic_power_machine=1, |
| | | internal_EU_buffer=0; |
| | | interal_EU_buffer_size=2000; |
| | | on_construct = function(pos) |
| | | local meta = minetest.env:get_meta(pos) |
| | | meta:set_float("technic_power_machine", 1) |
| | | meta:set_string("formspec", electric_furnace_formspec) |
| | | meta:set_string("infotext", "Electric furnace") |
| | | local inv = meta:get_inventory() |
| | | inv:set_size("src", 1) |
| | | inv:set_size("dst", 4) |
| | | local EU_used = 0 |
| | | local furnace_is_cookin = 0 |
| | | local cooked = nil |
| | | meta:set_float("internal_EU_buffer",0) |
| | | meta:set_float("internal_EU_buffer_size",2000) |
| | | |
| | | end, |
| | | can_dig = function(pos,player) |
| | | local meta = minetest.env:get_meta(pos); |
| | | local inv = meta:get_inventory() |
| | | if not inv:is_empty("dst") then |
| | | return false |
| | | elseif not inv:is_empty("src") then |
| | | return false |
| | | end |
| | | return true |
| | | end, |
| | | }) |
| | | |
| | | minetest.register_node("technic:electric_furnace_active", { |
| | | description = "Electric Furnace", |
| | | tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png", |
| | | "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_furnace_front_active.png"}, |
| | | paramtype2 = "facedir", |
| | | light_source = 8, |
| | | drop = "technic:electric_furnace", |
| | | groups = {cracky=2, not_in_creative_inventory=1}, |
| | | legacy_facedir_simple = true, |
| | | sounds = default.node_sound_stone_defaults(), |
| | | internal_EU_buffer=0; |
| | | interal_EU_buffer_size=2000; |
| | | technic_power_machine=1, |
| | | on_construct = function(pos) |
| | | local meta = minetest.env:get_meta(pos) |
| | | meta:set_float("technic_power_machine", 1) |
| | | meta:set_string("formspec", electric_furnace_formspec) |
| | | meta:set_string("infotext", "Electric furnace"); |
| | | local inv = meta:get_inventory() |
| | | inv:set_size("src", 1) |
| | | inv:set_size("dst", 4) |
| | | local EU_used = 0 |
| | | local furnace_is_cookin = 0 |
| | | local cooked = nil |
| | | end, |
| | | can_dig = function(pos,player) |
| | | local meta = minetest.env:get_meta(pos); |
| | | local inv = meta:get_inventory() |
| | | if not inv:is_empty("dst") then |
| | | return false |
| | | elseif not inv:is_empty("src") then |
| | | return false |
| | | end |
| | | return true |
| | | end, |
| | | }) |
| | | |
| | | minetest.register_abm({ |
| | | nodenames = {"technic:electric_furnace","technic:electric_furnace_active"}, |
| | | interval = 1, |
| | | chance = 1, |
| | | |
| | | action = function(pos, node, active_object_count, active_object_count_wider) |
| | | |
| | | local meta = minetest.env:get_meta(pos) |
| | | internal_EU_buffer=meta:get_float("internal_EU_buffer") |
| | | internal_EU_buffer_size=meta:get_float("internal_EU_buffer") |
| | | local load = math.floor(internal_EU_buffer/2000 * 100) |
| | | meta:set_string("formspec", |
| | | "invsize[8,9;]".. |
| | | "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:".. |
| | | (load)..":technic_power_meter_fg.png]".. |
| | | "list[current_name;src;3,1;1,1;]".. |
| | | "list[current_name;dst;5,1;2,2;]".. |
| | | "list[current_player;main;0,5;8,4;]".. |
| | | "label[0,0;Electric Furnace]".. |
| | | "label[1,3;Power level]") |
| | | |
| | | local inv = meta:get_inventory() |
| | | |
| | | local furnace_is_cookin = meta:get_float("furnace_is_cookin") |
| | | |
| | | |
| | | local srclist = inv:get_list("src") |
| | | local cooked=nil |
| | | |
| | | if srclist then |
| | | cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) |
| | | end |
| | | |
| | | |
| | | if (furnace_is_cookin == 1) then |
| | | if internal_EU_buffer>=150 then |
| | | internal_EU_buffer=internal_EU_buffer-150; |
| | | meta:set_float("internal_EU_buffer",internal_EU_buffer) |
| | | meta:set_float("src_time", meta:get_float("src_time") + 3) |
| | | if cooked and cooked.item and meta:get_float("src_time") >= cooked.time then |
| | | -- check if there's room for output in "dst" list |
| | | if inv:room_for_item("dst",cooked.item) then |
| | | -- Put result in "dst" list |
| | | inv:add_item("dst", cooked.item) |
| | | -- take stuff from "src" list |
| | | srcstack = inv:get_stack("src", 1) |
| | | srcstack:take_item() |
| | | inv:set_stack("src", 1, srcstack) |
| | | else |
| | | print("Furnace inventory full!") |
| | | end |
| | | meta:set_string("src_time", 0) |
| | | end |
| | | end |
| | | end |
| | | |
| | | |
| | | |
| | | |
| | | if srclist then |
| | | cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) |
| | | if cooked.time>0 then |
| | | hacky_swap_node(pos,"technic:electric_furnace_active") |
| | | meta:set_string("infotext","Furnace active") |
| | | meta:set_string("furnace_is_cookin",1) |
| | | -- meta:set_string("formspec", electric_furnace_formspec) |
| | | meta:set_string("src_time", 0) |
| | | return |
| | | end |
| | | |
| | | end |
| | | |
| | | hacky_swap_node(pos,"technic:electric_furnace") |
| | | meta:set_string("infotext","Furnace inactive") |
| | | meta:set_string("furnace_is_cookin",0) |
| | | -- meta:set_string("formspec", electric_furnace_formspec) |
| | | meta:set_string("src_time", 0) |
| | | |
| | | |
| | | end, |
| | | }) |
| | | |
| | | |
| | | |
| | | |
| | | function take_EU_from_net(pos, EU_to_take) |
| | | local meta = minetest.env:get_meta(pos) |
| | | local pos1=pos |
| | | pos1.z=pos1.z +1 |
| | | local meta1 = minetest.env:get_meta(pos1) |
| | | charge=meta1:get_float("battery_charge") |
| | | charge=charge - EU_to_take |
| | | meta1:set_float("battery_charge",charge) |
| | | end |
| | | |
| | | LV_nodes_visited = {} |
| | | |
| | | function get_RE_item_load (load1,max_load) |
| | | if load1==0 then load1=65535 end |
| | | local temp = 65536-load1 |
| | | temp= temp/65535*max_load |
| | | return math.floor(temp + 0.5) |
| | | end |
| | | |
| | | function set_RE_item_load (load1,max_load) |
| | | if load1 == 0 then return 65535 end |
| | | local temp=load1/max_load*65535 |
| | | temp=65536-temp |
| | | return math.floor(temp) |
| | | end |
| | | |
| | | minetest.register_abm({ |
| | | nodenames = {"technic:battery_box"}, |
| | | interval = 1, |
| | | chance = 1, |
| | | action = function(pos, node, active_object_count, active_object_count_wider) |
| | | local meta = minetest.env:get_meta(pos) |
| | | charge= meta:get_float("battery_charge") |
| | | max_charge= 60000 |
| | | |
| | | local inv = meta:get_inventory() |
| | | if inv:is_empty("src")==false then |
| | | srcstack = inv:get_stack("src", 1) |
| | | src_item=srcstack:to_table() |
| | | if src_item["name"]== "technic:battery" then |
| | | local load1=tonumber((src_item["wear"])) |
| | | load1=get_RE_item_load(load1,10000) |
| | | load_step=1000 |
| | | if load1<10000 and charge>0 then |
| | | if charge-load_step<0 then load_step=charge end |
| | | if load1+load_step>10000 then load_step=10000-load1 end |
| | | load1=load1+load_step |
| | | charge=charge-load_step |
| | | |
| | | load1=set_RE_item_load(load1,10000) |
| | | src_item["wear"]=tostring(load1) |
| | | inv:set_stack("src", 1, src_item) |
| | | end |
| | | end |
| | | end |
| | | meta:set_float("battery_charge",charge) |
| | | |
| | | |
| | | if inv:is_empty("src")==false then |
| | | srcstack = inv:get_stack("src", 1) |
| | | src_item=srcstack:to_table() |
| | | if src_item["name"]== "technic:laser_mk1" then |
| | | local load1=tonumber((src_item["wear"])) |
| | | load1=get_RE_item_load(load1,40000) |
| | | load_step=1000 |
| | | if load1<40000 and charge>0 then |
| | | if charge-load_step<0 then load_step=charge end |
| | | if load1+load_step>40000 then load_step=40000-load1 end |
| | | load1=load1+load_step |
| | | charge=charge-load_step |
| | | load1=set_RE_item_load(load1,40000) |
| | | src_item["wear"]=tostring(load1) |
| | | inv:set_stack("src", 1, src_item) |
| | | end |
| | | end |
| | | end |
| | | meta:set_float("battery_charge",charge) |
| | | |
| | | |
| | | if inv:is_empty("dst") == false then |
| | | srcstack = inv:get_stack("dst", 1) |
| | | src_item=srcstack:to_table() |
| | | if src_item["name"]== "technic:battery" then |
| | | local load1=tonumber((src_item["wear"])) |
| | | load1=get_RE_item_load(load1,10000) |
| | | load_step=1000 |
| | | if load1>0 and charge<max_charge then |
| | | if charge+load_step>max_charge then load_step=max_charge-charge end |
| | | if load1-load_step<0 then load_step=load1 end |
| | | load1=load1-load_step |
| | | charge=charge+load_step |
| | | |
| | | load1=set_RE_item_load(load1,10000) |
| | | src_item["wear"]=tostring(load1) |
| | | inv:set_stack("dst", 1, src_item) |
| | | end |
| | | end |
| | | end |
| | | |
| | | |
| | | meta:set_float("battery_charge",charge) |
| | | meta:set_string("infotext", "Battery box: "..charge.."/"..max_charge); |
| | | |
| | | local load = math.floor(charge/60000 * 100) |
| | | meta:set_string("formspec", |
| | | "invsize[8,9;]".. |
| | | "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:".. |
| | | (load)..":technic_power_meter_fg.png]".. |
| | | "list[current_name;src;3,1;1,1;]".. |
| | | "image[4,1;1,1;technic_battery_reload.png]".. |
| | | "list[current_name;dst;5,1;1,1;]".. |
| | | "label[0,0;Battery box]".. |
| | | "label[3,0;Charge]".. |
| | | "label[5,0;Discharge]".. |
| | | "label[1,3;Power level]".. |
| | | "list[current_player;main;0,5;8,4;]") |
| | | |
| | | local pos1={} |
| | | |
| | | pos1.y=pos.y-1 |
| | | pos1.x=pos.x |
| | | pos1.z=pos.z |
| | | |
| | | |
| | | meta1 = minetest.env:get_meta(pos1) |
| | | if meta1:get_float("cablelike")~=1 then return end |
| | | |
| | | local LV_nodes = {} |
| | | local PR_nodes = {} |
| | | local RE_nodes = {} |
| | | |
| | | LV_nodes[1]={} |
| | | LV_nodes[1].x=pos1.x |
| | | LV_nodes[1].y=pos1.y |
| | | LV_nodes[1].z=pos1.z |
| | | LV_nodes[1].visited=false |
| | | |
| | | |
| | | table_index=1 |
| | | repeat |
| | | check_LV_node (PR_nodes,RE_nodes,LV_nodes,table_index) |
| | | table_index=table_index+1 |
| | | if LV_nodes[table_index]==nil then break end |
| | | until false |
| | | |
| | | |
| | | local pos1={} |
| | | i=1 |
| | | repeat |
| | | if PR_nodes[i]==nil then break end |
| | | pos1.x=PR_nodes[i].x |
| | | pos1.y=PR_nodes[i].y |
| | | pos1.z=PR_nodes[i].z |
| | | local meta1 = minetest.env:get_meta(pos1) |
| | | local active=meta1:get_float("active") |
| | | if active==1 then charge=charge+80 end |
| | | i=i+1 |
| | | until false |
| | | |
| | | if charge>max_charge then charge=max_charge end |
| | | |
| | | i=1 |
| | | repeat |
| | | if RE_nodes[i]==nil then break end |
| | | pos1.x=RE_nodes[i].x -- loading all conected machines buffers |
| | | pos1.y=RE_nodes[i].y |
| | | pos1.z=RE_nodes[i].z |
| | | local meta1 = minetest.env:get_meta(pos1) |
| | | local internal_EU_buffer=meta1:get_float("internal_EU_buffer") |
| | | local internal_EU_buffer_size=meta1:get_float("internal_EU_buffer_size") |
| | | |
| | | local charge_to_give=200 |
| | | if internal_EU_buffer+charge_to_give>internal_EU_buffer_size then |
| | | charge_to_give=internal_EU_buffer_size-internal_EU_buffer |
| | | end |
| | | if charge-charge_to_give<0 then charge_to_give=charge end |
| | | |
| | | internal_EU_buffer=internal_EU_buffer+charge_to_give |
| | | meta1:set_float("internal_EU_buffer",internal_EU_buffer) |
| | | charge=charge-charge_to_give; |
| | | |
| | | i=i+1 |
| | | until false |
| | | |
| | | meta:set_float("battery_charge",charge) |
| | | meta:set_string("infotext", "Battery box: "..charge.."/"..max_charge); |
| | | |
| | | |
| | | end |
| | | }) |
| | | |
| | | function add_new_cable_node (LV_nodes,pos1) |
| | | local i=1 |
| | | repeat |
| | | if LV_nodes[i]==nil then break end |
| | | if pos1.x==LV_nodes[i].x and pos1.y==LV_nodes[i].y and pos1.z==LV_nodes[i].z then return false end |
| | | i=i+1 |
| | | until false |
| | | LV_nodes[i]={} |
| | | LV_nodes[i].x=pos1.x |
| | | LV_nodes[i].y=pos1.y |
| | | LV_nodes[i].z=pos1.z |
| | | LV_nodes[i].visited=false |
| | | return true |
| | | end |
| | | |
| | | function check_LV_node (PR_nodes,RE_nodes,LV_nodes,i) |
| | | local pos1={} |
| | | pos1.x=LV_nodes[i].x |
| | | pos1.y=LV_nodes[i].y |
| | | pos1.z=LV_nodes[i].z |
| | | LV_nodes[i].visited=true |
| | | new_node_added=false |
| | | |
| | | pos1.x=pos1.x+1 |
| | | check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) |
| | | pos1.x=pos1.x-2 |
| | | check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) |
| | | pos1.x=pos1.x+1 |
| | | |
| | | pos1.y=pos1.y+1 |
| | | check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) |
| | | pos1.y=pos1.y-2 |
| | | check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) |
| | | pos1.y=pos1.y+1 |
| | | |
| | | pos1.z=pos1.z+1 |
| | | check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) |
| | | pos1.z=pos1.z-2 |
| | | check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) |
| | | pos1.z=pos1.z+1 |
| | | return new_node_added |
| | | end |
| | | |
| | | function check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) |
| | | meta = minetest.env:get_meta(pos1) |
| | | if meta:get_float("cablelike")==1 then new_node_added=add_new_cable_node(LV_nodes,pos1) end |
| | | if minetest.env:get_node(pos1).name == "technic:solar_panel" then new_node_added=add_new_cable_node(PR_nodes,pos1) end |
| | | if minetest.env:get_node(pos1).name == "technic:electric_furnace" then new_node_added=add_new_cable_node(RE_nodes,pos1) end |
| | | if minetest.env:get_node(pos1).name == "technic:electric_furnace_active" then new_node_added=add_new_cable_node(RE_nodes,pos1) end |
| | | if minetest.env:get_node(pos1).name == "technic:tool_workshop" then new_node_added=add_new_cable_node(RE_nodes,pos1) end |
| | | if minetest.env:get_node(pos1).name == "technic:music_player" then new_node_added=add_new_cable_node(RE_nodes,pos1) end |
| | | if minetest.env:get_node(pos1).name == "technic:grinder" then new_node_added=add_new_cable_node(RE_nodes,pos1) end |
| | | end |
| | | |
| | | |
| | | function get_connected_charge (charge,pos1) |
| | | local charge1=0 |
| | | local meta={} |
| | | if minetest.env:get_node(pos1).name == "technic:battery_box" then |
| | | print ("found batbox") |
| | | meta = minetest.env:get_meta(pos1) |
| | | return meta:get_float("cable_OUT") |
| | | end |
| | | |
| | | if minetest.env:get_node(pos1).name == "technic:lv_cable" then |
| | | meta = minetest.env:get_meta(pos1) |
| | | charge1=meta:get_float("cable_OUT") |
| | | if charge1>charge then |
| | | charge=charge1 |
| | | end |
| | | end |
| | | return charge |
| | | end |
| | | |
| | | minetest.register_node("technic:solar_panel", { |
| | | tiles = {"technic_solar_panel_top.png", "technic_solar_panel_side.png", "technic_solar_panel_side.png", |
| | | "technic_solar_panel_side.png", "technic_solar_panel_side.png", "technic_solar_panel_side.png"}, |
| | | groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, |
| | | sounds = default.node_sound_wood_defaults(), |
| | | description="Solar Panel", |
| | | active = false, |
| | | technic_power_machine=1, |
| | | drawtype = "nodebox", |
| | | paramtype = "light", |
| | | is_ground_content = true, |
| | | node_box = { |
| | | type = "fixed", |
| | | fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, |
| | | }, |
| | | selection_box = { |
| | | type = "fixed", |
| | | fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, |
| | | }, |
| | | on_construct = function(pos) |
| | | local meta = minetest.env:get_meta(pos) |
| | | meta:set_float("technic_power_machine", 1) |
| | | meta:set_string("infotext", "Solar Panel") |
| | | meta:set_float("active", false) |
| | | end, |
| | | }) |
| | | |
| | | minetest.register_craft({ |
| | | output = 'technic:solar_panel 1', |
| | | recipe = { |
| | | {'default:sand', 'default:sand','default:sand'}, |
| | | {'default:sand', 'moreores:copper_ingot','default:sand'}, |
| | | {'default:sand', 'default:sand','default:sand'}, |
| | | |
| | | } |
| | | }) |
| | | |
| | | minetest.register_abm( |
| | | {nodenames = {"technic:solar_panel"}, |
| | | interval = 1, |
| | | chance = 1, |
| | | action = function(pos, node, active_object_count, active_object_count_wider) |
| | | |
| | | local pos1={} |
| | | pos1.y=pos.y+1 |
| | | pos1.x=pos.x |
| | | pos1.z=pos.z |
| | | |
| | | local light = minetest.env:get_node_light(pos1, nil) |
| | | local meta = minetest.env:get_meta(pos) |
| | | if light == nil then light = 0 end |
| | | if light >= 12 then |
| | | meta:set_string("infotext", "Solar Panel is active ") |
| | | meta:set_float("active",1) |
| | | else |
| | | meta:set_string("infotext", "Solar Panel is inactive"); |
| | | meta:set_float("active",0) |
| | | end |
| | | end, |
| | | }) |