From b8d77627a4d28c624e63423eef317dd09c68e533 Mon Sep 17 00:00:00 2001
From: RealBadAngel <mk@realbadangel.pl>
Date: Thu, 13 Dec 2012 01:49:02 +0100
Subject: [PATCH] update the mod

---
 technic/technic/textures/technic_constructor_mk1_side1_on.png        |    0 
 technic/technic/ores.lua                                             |  339 +++++
 technic/technic/textures/technic_nodebreaker_side1_off.png           |    0 
 technic/technic/textures/technic_constructor_mk1_side1_off.png       |    0 
 technic/technic/textures/technic_diamond_block_blue.png              |    0 
 technic/technic/textures/technic_marble_bricks.png                   |    0 
 technic/pipeworks/depends.txt                                        |    2 
 technic/technic/textures/technic_nodebreaker_side2.png               |    0 
 technic/technic/textures/technic_tin_dust.png                        |    0 
 technic/technic/textures/technic_concrete_block.png                  |    0 
 technic/technic/sounds/mining_drill.ogg                              |    0 
 technic/technic/textures/technic_battery_box_bottom.png              |    0 
 technic/technic/textures/technic_sonic_screwdriver.png               |    0 
 technic/technic/battery_box_mv.lua                                   |    4 
 technic/technic/textures/technic_alloy_furnace_top.png               |    0 
 technic/technic/textures/technic_mineral_chromium.png                |    0 
 technic/technic/textures/technic_gold_chest_locked_magenta.png       |    0 
 technic/technic/textures/technic_electric_furnace_bottom.png         |    0 
 technic/pipeworks/.gitignore                                         |    1 
 technic/technic/textures/technic_nodebreaker_bottom_off.png          |    0 
 technic/technic/creative.lua                                         |   21 
 technic/technic/items.lua                                            |   12 
 technic/technic/textures/technic_deployer_front_off.png              |    0 
 technic/pipeworks/textures/pipeworks_outlet_top.png                  |    0 
 technic/technic/water_mill.lua                                       |    0 
 technic/technic/textures/technic_power_meter3.png                    |    0 
 technic/technic/textures/technic_tree_tap.png                        |    0 
 technic/technic/textures/technic_deployer_bottom.png                 |    0 
 technic/technic/textures/technic_light.png                           |    0 
 technic/pipeworks/textures/pipeworks_storage_tank_back.png           |    0 
 technic/pipeworks/textures/pipeworks_windowed_loaded.png             |    0 
 technic/technic/textures/technic_doped_silicon_wafer.png             |    0 
 technic/technic/textures/technic_brass_dust.png                      |    0 
 technic/pipeworks/textures/pipeworks_plain.png                       |    0 
 technic/technic/textures/technic_marble.png                          |    0 
 technic/pipeworks/crafts.lua                                         |   94 +
 technic/technic/generator.lua                                        |    0 
 technic/technic/textures/technic_zinc_dust.png                       |    0 
 technic/technic/textures/technic_geothermal_top.png                  |    0 
 technic/technic/sounds/technic_laser.ogg                             |    0 
 technic/technic/textures/technic_brass_ingot.png                     |    0 
 technic/technic/textures/technic_constructor_mk2_side1_on.png        |    0 
 technic/technic/textures/technic_mv_solar_panel_side.png             |    0 
 technic/technic/textures/technic_gold_chest_locked_orange.png        |    0 
 technic/technic/textures/technic_mv_solar_panel_top.png              |    0 
 technic/technic/textures/technic_mv_cable_wield.png                  |    0 
 technic/technic/textures/technic_workshop_bottom.png                 |    0 
 technic/technic/electric_furnace.lua                                 |    3 
 technic/pipeworks/README                                             |   34 
 technic/pipeworks/textures/pipeworks_plastic_sheeting.png            |    0 
 technic/pipeworks/textures/pipeworks_intake_sides.png                |    0 
 technic/technic/injector1.lua                                        |  248 ++++
 technic/technic/textures/technic_workshop_top.png                    |    0 
 technic/technic/textures/technic_mithril_chest_top.png               |    0 
 technic/pipeworks/textures/pipeworks_storage_tank_front_7.png        |    0 
 technic/technic/init.lua                                             |   69 
 technic/technic/textures/technic_coal_dust.png                       |    0 
 technic/technic/textures/tetris_machine_side2B.png                   |    0 
 technic/technic/textures/technic_nodebreaker_bottom_on.png           |    0 
 technic/technic/grinder_gloopores.lua                                |   55 
 technic/technic/textures/technic_gold_chest_front_black.png          |    0 
 technic/technic/textures/technic_gold_chest_locked_red.png           |    0 
 technic/technic/sounds/chainsaw.ogg                                  |    0 
 technic/technic/textures/technic_mithril_dust.png                    |    0 
 technic/technic/textures/technic_coal_alloy_furnace_side.png         |    0 
 technic/technic/textures/technic_gold_chest_locked_blue.png          |    0 
 technic/technic/iron_chest.lua                                       |   13 
 technic/technic/textures/technic_zinc_ingot.png                      |    0 
 technic/technic/textures/technic_gold_chest_locked_white.png         |    0 
 technic/technic/item_pickup.lua                                      |    0 
 technic/technic/sounds/item_drop_pickup.3.ogg                        |    0 
 technic/technic/textures/technic_gold_chest_front_brown.png          |    0 
 technic/technic/textures/technic_power_meter7.png                    |    0 
 technic/technic/textures/technic_diamond.png                         |    0 
 technic/technic/solar_panel_mv.lua                                   |    0 
 technic/pipeworks/textures/pipeworks_storage_tank_front_3.png        |    0 
 technic/technic/textures/technic_coal_alloy_furnace_top.png          |    0 
 technic/technic/textures/tetris_machine_front1.png                   |    0 
 technic/technic/textures/technic_music_player_bottom.png             |    0 
 technic/technic/textures/technic_constructor_mk1_bottom_on.png       |    0 
 technic/technic/textures/technic_battery_box_top.png                 |    0 
 technic/technic/textures/technic_constructor_mk3_bottom_off.png      |    0 
 technic/technic/textures/technic_silver_chest_side.png               |    0 
 technic/technic/textures/technic_nodebreaker_top_on.png              |    0 
 technic/technic/textures/technic_gold_dust.png                       |    0 
 technic/technic/textures/technic_water_mill_top.png                  |    0 
 technic/pipeworks/textures/pipeworks_pump_top_x.png                  |    0 
 technic/technic/textures/technic_copper_chest_locked.png             |    0 
 technic/technic/textures/technic_gold_chest_front_pink.png           |    0 
 technic/technic/item_drop.lua                                        |    0 
 technic/technic/textures/technic_gold_chest_front_white.png          |    0 
 technic/pipeworks/textures/pipeworks_storage_tank_front_2.png        |    0 
 technic/technic/textures/technic_rebar.png                           |    0 
 technic/technic/textures/technic_iron_dust.png                       |    0 
 technic/technic/textures/technic_deployer_front_on.png               |    0 
 technic/technic/textures/technic_mv_battery_box_side0.png            |    0 
 technic/technic/textures/tetris_machine_side2P.png                   |    0 
 technic/technic/textures/technic_constructor_mk3_side2_off.png       |    0 
 technic/technic/sounds/item_drop_pickup.1.ogg                        |    0 
 technic/technic/textures/technic_constructor_front_on.png            |    0 
 technic/technic/textures/technic_constructor_mk3_side1_on.png        |    0 
 technic/technic/textures/technic_deployer_top.png                    |    0 
 technic/technic/battery_box.lua                                      |    0 
 technic/technic/textures/technic_gold_chest_front_dark_grey.png      |    0 
 technic/technic/textures/technic_constructor_mk2_bottom_on.png       |    0 
 technic/technic/textures/technic_mining_laser_mk1.png                |    0 
 technic/technic/textures/tetris_machine_side1P.png                   |    0 
 technic/pipeworks/textures/pipeworks_valvebody_top_off.png           |    0 
 technic/technic/tree_tap.lua                                         |    2 
 technic/pipeworks/textures/pipeworks_valvebody_top_on_x.png          |    0 
 technic/technic/textures/technic_mv_solar_panel_bottom.png           |    0 
 technic/technic/textures/technic_chromium_dust.png                   |    0 
 technic/technic/textures/technic_nodebreaker_side1.png               |    0 
 technic/technic/textures/technic_flashlight.png                      |    0 
 technic/pipeworks/textures/pipeworks_outlet_sides.png                |    0 
 technic/technic/textures/technic_mineral_diamond.png                 |    0 
 technic/technic/mining_drill.lua                                     |    4 
 technic/pipeworks/textures/pipeworks_windowed_empty.png              |    0 
 technic/technic/constructor.lua                                      |    0 
 technic/technic/screwdriver.lua                                      |    0 
 technic/technic/textures/technic_gold_chest_front_yellow.png         |    0 
 technic/technic/textures/technic_water_mill_top_active.png           |    0 
 technic/pipeworks/textures/pipeworks_pump_off.png                    |    0 
 technic/pipeworks/textures/pipeworks_valvebody_top_off_z.png         |    0 
 technic/technic/geothermal.lua                                       |    0 
 technic/technic/textures/technic_nodebreaker_back.png                |    0 
 technic/technic/textures/tetris_machine_side2L.png                   |    0 
 technic/technic/textures/technic_rubber_tree_full.png                |    0 
 technic/technic/textures/technic_lv_cable_wield.png                  |    0 
 technic/technic/concrete.lua                                         |   11 
 technic/technic/textures/technic_uranium.png                         |    0 
 technic/pipeworks/textures/pipeworks_pipe_end_empty.png              |    0 
 technic/technic/textures/technic_constructor_back.png                |    0 
 technic/technic/textures/technic_geothermal_side.png                 |    0 
 technic/pipeworks/textures/pipeworks_pipe_end.png                    |    0 
 technic/technic/textures/technic_power_meter4.png                    |    0 
 technic/technic/textures/tetris_machine_side1B.png                   |    0 
 technic/pipeworks/textures/pipeworks_valvebody_ends.png              |    0 
 technic/pipeworks/textures/pipeworks_valvebody_bottom.png            |    0 
 technic/technic/textures/technic_gold_chest_locked_pink.png          |    0 
 technic/pipeworks/changelog.txt                                      |   46 
 technic/technic/textures/technic_deployer_side.png                   |    0 
 technic/technic/textures/technic_nodebreaker_side2_off.png           |    0 
 technic/technic/textures/tetris_machine_front2.png                   |    0 
 technic/technic/textures/technic_geothermal_top_active.png           |    0 
 technic/technic/textures/tetris_machine_side1L.png                   |    0 
 technic/technic/textures/technic_electric_furnace_GUI.png            |    0 
 technic/pipeworks/textures/pipeworks_pipe_end_loaded.png             |    0 
 technic/pipeworks/textures/pipeworks_pump_ends.png                   |    0 
 technic/technic/textures/technic_constructor_mk2_bottom_off.png      |    0 
 technic/technic/textures/technic_alloy_furnace_side.png              |    0 
 technic/technic/textures/technic_mining_drill.png                    |    0 
 technic/technic/textures/technic_constructor_mk1_side2_off.png       |    0 
 technic/technic/textures/technic_power_meter_bg.png                  |    0 
 technic/pipeworks/textures/pipeworks_storage_tank_front_6.png        |    0 
 technic/technic/textures/technic_diamond_block.png                   |    0 
 technic/technic/textures/technic_mithril_chest_front.png             |    0 
 technic/pipeworks/init.lua                                           |  322 +++++
 technic/technic/textures/technic_constructor_mk2_side2_off.png       |    0 
 technic/technic/textures/technic_copper_dust.png                     |    0 
 technic/pipeworks/oldpipes.lua                                       |  360 ++++++
 technic/technic/textures/technic_zinc_lump.png                       |    0 
 technic/technic/textures/technic_iron_chest_top.png                  |    0 
 technic/technic/water.lua                                            |  588 +++++++++
 technic/technic/textures/technic_constructor_mk3_top_off.png         |    0 
 technic/technic/textures/technic_gold_chest_locked_green.png         |    0 
 technic/technic/textures/technic_constructor_mk1_top_off.png         |    0 
 technic/pipeworks/textures/pipeworks_intake_top.png                  |    0 
 technic/technic/textures/technic_solar_panel_side.png                |    0 
 technic/technic/sounds/item_drop_pickup.2.ogg                        |    0 
 technic/technic/textures/technic_mv_cable.png                        |    0 
 technic/technic/textures/technic_iron_chest_locked.png               |    0 
 technic/technic/textures/technic_power_meter8.png                    |    0 
 technic/technic/cans.lua                                             |   67 
 technic/technic/copper_chest.lua                                     |    0 
 technic/technic/textures/technic_gold_chest_front_grey.png           |    0 
 technic/technic/textures/technic_nodebreaker_side1_on.png            |    0 
 technic/technic/music_player.lua                                     |    0 
 technic/technic/textures/technic_gold_chest_front_orange.png         |    0 
 technic/technic/textures/technic_power_meter5.png                    |    0 
 technic/technic/project_table.lua                                    |    0 
 technic/technic/textures/technic_battery_box_side0.png               |    0 
 technic/technic/textures/technic_constructor_mk1_side2_on.png        |    0 
 technic/technic/textures/technic_electric_furnace_top.png            |    0 
 technic/technic/textures/technic_iron_chest_front.png                |    0 
 technic/technic/textures/technic_copper_coil.png                     |    0 
 technic/technic/textures/technic_gold_chest_locked_dark_grey.png     |    0 
 technic/technic/textures/technic_constructor_mk3_bottom_on.png       |    0 
 technic/technic/textures/technic_gold_chest_side.png                 |    0 
 technic/pipeworks/textures/pipeworks_storage_tank_front_1.png        |    0 
 technic/technic/textures/technic_power_meter_fg.png                  |    0 
 technic/pipeworks/textures/pipeworks_pump_sides.png                  |    0 
 technic/pipeworks/textures/pipeworks_tube_end.png                    |    0 
 technic/technic/textures/technic_generator_front.png                 |    0 
 technic/technic/textures/technic_copper_chest_front.png              |    0 
 technic/technic/textures/technic_gold_chest_front_cyan.png           |    0 
 technic/technic/textures/technic_diamond_block_green.png             |    0 
 technic/technic/node_breaker.lua                                     |    0 
 technic/technic/textures/technic_gold_chest_locked.png               |    0 
 technic/technic/textures/technic_mv_battery_box_top.png              |    0 
 technic/technic/textures/technic_alloy_furnace_front.png             |    0 
 technic/technic/textures/technic_generator_side.png                  |    0 
 technic/technic/textures/technic_grinder_top.png                     |    0 
 technic/technic/textures/technic_motor.png                           |    0 
 technic/technic/tool_workshop.lua                                    |    0 
 technic/technic/textures/technic_machine_bottom.png                  |    0 
 technic/pipeworks/devices.lua                                        |  471 +++++++
 technic/technic/textures/technic_mithril_chest_locked.png            |    0 
 technic/technic/textures/technic_power_meter.png                     |    0 
 technic/technic/sounds/technic_sonic_screwdriver.ogg                 |    0 
 technic/technic/deployer.lua                                         |    0 
 technic/technic/mithril_subspace_chest.lua                           |    0 
 technic/technic/textures/technic_nodebreaker_front_on.png            |    0 
 technic/technic/textures/technic_water_can.png                       |    0 
 technic/technic/gold_chest.lua                                       |    0 
 technic/pipeworks/textures/pipeworks_storage_tank_front_8.png        |    0 
 technic/technic/textures/technic_battery.png                         |    0 
 technic/technic/textures/technic_gold_chest_locked_black.png         |    0 
 technic/technic/textures/technic_gold_chest_front.png                |    0 
 technic/technic/textures/technic_laser_beam.png                      |    0 
 technic/technic/textures/technic_stainless_steel_dust.png            |    0 
 technic/technic/mining_laser_mk1.lua                                 |    0 
 technic/technic/textures/technic_constructor_mk2_top_on.png          |    0 
 technic/pipeworks/autoplace.lua                                      |  176 ++
 technic/technic/textures/technic_gold_chest_front_magenta.png        |    0 
 technic/technic/textures/technic_granite.png                         |    0 
 technic/technic/textures/technic_mineral_zinc.png                    |    0 
 technic/technic/textures/technic_stainless_steel_ingot.png           |    0 
 technic/pipeworks/textures/pipeworks_tube_plain.png                  |    0 
 technic/technic/textures/technic_chainsaw.png                        |    0 
 technic/technic/flashlight_old.lua                                   |  176 ++
 technic/technic/textures/technic_silver_chest_locked.png             |    0 
 technic/technic/textures/technic_water_mill_side.png                 |    0 
 technic/technic/textures/technic_workshop_side.png                   |    0 
 technic/technic/textures/technic_bronze_dust.png                     |    0 
 technic/technic/textures/technic_chromium_lump.png                   |    0 
 technic/technic/textures/technic_screwdriver.png                     |    0 
 technic/technic/textures/technic_copper_chest_side.png               |    0 
 technic/technic/textures/technic_gold_chest_locked_yellow.png        |    0 
 technic/technic/silver_chest.lua                                     |    0 
 technic/technic/textures/technic_silver_chest_front.png              |    0 
 technic/pipeworks/textures/pipeworks_storage_tank_front_5.png        |    0 
 technic/technic/rubber.lua                                           |    0 
 technic/technic/textures/technic_copper_chest_top.png                |    0 
 technic/technic/chainsaw.lua                                         |    2 
 technic/technic/textures/technic_grinder_side.png                    |    0 
 technic/technic/alloy_furnace.lua                                    |   14 
 technic/pipeworks/textures/pipeworks_testobject.png                  |    0 
 technic/pipeworks/textures/pipeworks_tube_noctr.png                  |    0 
 technic/technic/textures/technic_fine_copper_wire.png                |    0 
 technic/technic/textures/technic_mv_battery_box_bottom.png           |    0 
 technic/technic/textures/technic_electric_furnace_front_active.png   |    0 
 technic/technic/textures/technic_nodebreaker_top.png                 |    0 
 technic/technic/textures/technic_gold_chest_front_violet.png         |    0 
 technic/technic/config.lua                                           |   10 
 technic/technic/textures/technic_deployer_side1.png                  |    0 
 technic/technic/textures/technic_gold_chest_locked_dark_green.png    |    0 
 technic/technic/textures/technic_constructor_mk1_bottom_off.png      |    0 
 technic/pipeworks/textures/pipeworks_valvebody_top_off_x.png         |    0 
 technic/technic/textures/technic_raw_latex.png                       |    0 
 technic/technic/textures/technic_constructor_front_off.png           |    0 
 technic/technic/textures/technic_generator_front_active.png          |    0 
 technic/technic/textures/technic_menu_bg.png                         |    0 
 technic/technic/textures/technic_gold_chest_locked_violet.png        |    0 
 technic/technic/textures/technic_constructor_mk3_side2_on.png        |    0 
 technic/technic/wires.lua                                            |    0 
 technic/technic/textures/technic_coal_alloy_furnace_front_active.png |    0 
 technic/technic/textures/technic_electric_furnace_GUI.xcf            |    0 
 technic/technic/textures/technic_silicon_wafer.png                   |    0 
 technic/technic/textures/technic_power_meter6.png                    |    0 
 technic/technic/wires_mv.lua                                         |    0 
 technic/technic/textures/technic_electric_furnace_side.png           |    0 
 technic/technic/textures/technic_gold_chest_front_green.png          |    0 
 technic/technic/textures/technic_nodebreaker_front_off.png           |    0 
 technic/technic/textures/technic_rubber_tree_empty.png               |    0 
 technic/modpack.txt                                                  |    1 
 technic/technic/textures/technic_gold_chest_front_blue.png           |    0 
 technic/technic/textures/technic_gold_chest_locked_brown.png         |    0 
 technic/technic/textures/technic_rubber.png                          |    0 
 technic/pipeworks/textures/pipeworks_pump_top_z.png                  |    0 
 technic/technic/textures/technic_nodebreaker_top_off.png             |    0 
 technic/technic/textures/tetris_machine_top.png                      |    0 
 technic/pipeworks/textures/pipeworks_storage_tank_front_10.png       |    0 
 technic/pipeworks/textures/pipeworks_storage_tank_front_9.png        |    0 
 technic/technic/flashlight.lua                                       |    2 
 technic/technic/textures/technic_power_meter2.png                    |    0 
 technic/technic/solar_panel.lua                                      |    2 
 technic/technic/textures/technic_solar_panel_bottom.png              |    0 
 technic/technic/textures/technic_constructor_mk3_top_on.png          |    0 
 technic/technic/textures/technic_constructor_mk2_side1_off.png       |    0 
 technic/pipeworks/textures/pipeworks_storage_tank_fittings.png       |    0 
 technic/technic/textures/technic_deployer_back.png                   |    0 
 technic/technic/grinder.lua                                          |   10 
 technic/technic/textures/technic_silver_chest_top.png                |    0 
 technic/pipeworks/textures/pipeworks_tube_inv.png                    |    0 
 technic/technic/tetris.lua                                           |   17 
 technic/technic/textures/technic_battery_reload.png                  |    0 
 technic/technic/textures/technic_music_player_side.png               |    0 
 technic/pipeworks/textures/pipeworks_valvebody_sides.png             |    0 
 technic/technic/sonic_screwdriver.lua                                |    0 
 technic/pipeworks/tubes.lua                                          |  217 +++
 technic/pipeworks/textures/pipeworks_storage_tank_front_0.png        |    0 
 technic/technic/textures/technic_lava_can.png                        |    0 
 technic/pipeworks/textures/pipeworks_valvebody_top_on_z.png          |    0 
 technic/technic/mithril_chest.lua                                    |    0 
 technic/technic/textures/technic_coal_alloy_furnace_front.png        |    0 
 technic/technic/textures/technic_gold_chest_front_dark_green.png     |    0 
 technic/technic/textures/technic_gold_chest_locked_grey.png          |    0 
 technic/technic/textures/technic_nodebreaker_side2_on.png            |    0 
 technic/technic/textures/technic_nodebreaker_side.png                |    0 
 technic/technic/textures/technic_constructor_mk2_side2_on.png        |    0 
 technic/technic/textures/technic_coal_alloy_furnace_bottom.png       |    0 
 technic/pipeworks/textures/pipeworks_valvebody_top_on.png            |    0 
 technic/technic/textures/technic_diamond_drill_head.png              |    0 
 technic/technic/electric.lua                                         |    0 
 technic/technic/textures/technic_constructor_mk1_top_on.png          |    0 
 technic/technic/textures/technic_chromium_ingot.png                  |    0 
 technic/technic/textures/technic_constructor_mk3_side1_off.png       |    0 
 technic/technic/textures/technic_electric_furnace_front.png          |    0 
 technic/technic/textures/technic_nodebreaker_bottom.png              |    0 
 technic/technic/textures/technic_music_player_top.png                |    0 
 technic/technic/textures/technic_mineral_uranium.png                 |    0 
 technic/technic/textures/technic_iron_chest_side.png                 |    0 
 technic/technic/textures/technic_power_meter1.png                    |    0 
 technic/technic/textures/technic_solar_panel_top.png                 |    0 
 technic/technic/sounds/item_drop_pickup.4.ogg                        |    0 
 technic/technic/textures/technic_gold_chest_locked_cyan.png          |    0 
 technic/technic/textures/technic_silver_dust.png                     |    0 
 technic/technic/textures/technic_diamond_block_red.png               |    0 
 technic/technic/textures/technic_rubber_sapling.png                  |    0 
 technic/technic/textures/technic_deployer_side2.png                  |    0 
 technic/technic/injector.lua                                         |    0 
 technic/technic/textures/technic_mithril_chest_side.png              |    0 
 technic/technic/textures/technic_gold_chest_front_red.png            |    0 
 technic/pipeworks/textures/pipeworks_tube_transparent.png            |    0 
 technic/technic/textures/technic_constructor_mk2_top_off.png         |    0 
 technic/technic/textures/technic_gold_chest_top.png                  |    0 
 technic/technic/textures/technic_alloy_furnace_front_active.png      |    0 
 technic/technic/textures/technic_generator_top.png                   |    0 
 technic/technic/depends.txt                                          |    2 
 technic/pipeworks/textures/pipeworks_pump_on.png                     |    0 
 technic/pipeworks/textures/pipeworks_tube_short.png                  |    0 
 technic/technic/textures/technic_lv_cable.png                        |    0 
 /dev/null                                                            |  201 ---
 technic/pipeworks/textures/pipeworks_storage_tank_front_4.png        |    0 
 technic/technic/textures/technic_grinder_front.png                   |    0 
 technic/technic/textures/technic_mv_transformer.png                  |    0 
 347 files changed, 3,317 insertions(+), 279 deletions(-)

diff --git a/coal_furnace.lua b/coal_furnace.lua
deleted file mode 100644
index 9727795..0000000
--- a/coal_furnace.lua
+++ /dev/null
@@ -1,171 +0,0 @@
-minetest.register_alias("coal_furnace", "technic:coal_furnace")
-
-minetest.register_craft({
-	output = 'technic:coal_furnace',
-	recipe = {
-		{'default:stone', 'default:stone', 'default:stone'},
-		{'default:stone', '', 'default:stone'},
-		{'default:stone', 'default:stone', 'default:stone'},
-	}
-})
-
-
-coal_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;Coal Furnace]")
-	
-minetest.register_node("technic:coal_furnace", {
-	description = "Coal 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_string("formspec", coal_furnace_formspec)
-		meta:set_string("infotext", "Coal 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:coal_furnace_active", {
-	description = "Coal 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:coal_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_string("formspec", electric_furnace_formspec)
-		meta:set_string("infotext", "Coal 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:coal_furnace","technic:coal_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]")
-
-		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:coal_furnace_active")
-			meta:set_string("infotext","Furnace active")
-			meta:set_string("furnace_is_cookin",1)
-			meta:set_string("src_time", 0)
-			return
-			end
-
-		end
-	
-				hacky_swap_node(pos,"technic:coal_furnace")
-				meta:set_string("infotext","Furnace inactive")
-				meta:set_string("furnace_is_cookin",0)
-				meta:set_string("src_time", 0)
-		
-	
-end,		
-})
\ No newline at end of file
diff --git a/config.lua b/config.lua
deleted file mode 100644
index 88662d3..0000000
--- a/config.lua
+++ /dev/null
@@ -1,3 +0,0 @@
--- Please note that item_drop module already contains item_pickup
-enable_item_drop=false
-enable_item_pickup=true
diff --git a/ores.lua b/ores.lua
deleted file mode 100644
index 90013fc..0000000
--- a/ores.lua
+++ /dev/null
@@ -1,201 +0,0 @@
-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(),
-}) 
-
-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")
-
-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,  -300)
-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)
-end)
\ No newline at end of file
diff --git a/technic/modpack.txt b/technic/modpack.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/technic/modpack.txt
@@ -0,0 +1 @@
+
diff --git a/technic/pipeworks/.gitignore b/technic/pipeworks/.gitignore
new file mode 100644
index 0000000..b25c15b
--- /dev/null
+++ b/technic/pipeworks/.gitignore
@@ -0,0 +1 @@
+*~
diff --git a/technic/pipeworks/README b/technic/pipeworks/README
new file mode 100644
index 0000000..fb18d4f
--- /dev/null
+++ b/technic/pipeworks/README
@@ -0,0 +1,34 @@
+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.
diff --git a/technic/pipeworks/autoplace.lua b/technic/pipeworks/autoplace.lua
new file mode 100644
index 0000000..390c66a
--- /dev/null
+++ b/technic/pipeworks/autoplace.lua
@@ -0,0 +1,176 @@
+-- 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
+
diff --git a/technic/pipeworks/changelog.txt b/technic/pipeworks/changelog.txt
new file mode 100644
index 0000000..9e51430
--- /dev/null
+++ b/technic/pipeworks/changelog.txt
@@ -0,0 +1,46 @@
+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.
diff --git a/technic/pipeworks/crafts.lua b/technic/pipeworks/crafts.lua
new file mode 100644
index 0000000..493fdcf
--- /dev/null
+++ b/technic/pipeworks/crafts.lua
@@ -0,0 +1,94 @@
+-- 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
diff --git a/technic/pipeworks/depends.txt b/technic/pipeworks/depends.txt
new file mode 100644
index 0000000..3a7daa1
--- /dev/null
+++ b/technic/pipeworks/depends.txt
@@ -0,0 +1,2 @@
+default
+
diff --git a/technic/pipeworks/devices.lua b/technic/pipeworks/devices.lua
new file mode 100644
index 0000000..5f1ce0d
--- /dev/null
+++ b/technic/pipeworks/devices.lua
@@ -0,0 +1,471 @@
+-- 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
+
diff --git a/technic/pipeworks/init.lua b/technic/pipeworks/init.lua
new file mode 100644
index 0000000..0c6a501
--- /dev/null
+++ b/technic/pipeworks/init.lua
@@ -0,0 +1,322 @@
+-- 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!")
diff --git a/technic/pipeworks/oldpipes.lua b/technic/pipeworks/oldpipes.lua
new file mode 100644
index 0000000..90c8a27
--- /dev/null
+++ b/technic/pipeworks/oldpipes.lua
@@ -0,0 +1,360 @@
+-- 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
+
diff --git a/technic/pipeworks/textures/pipeworks_intake_sides.png b/technic/pipeworks/textures/pipeworks_intake_sides.png
new file mode 100644
index 0000000..5237f0e
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_intake_sides.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_intake_top.png b/technic/pipeworks/textures/pipeworks_intake_top.png
new file mode 100644
index 0000000..3ca91a8
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_intake_top.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_outlet_sides.png b/technic/pipeworks/textures/pipeworks_outlet_sides.png
new file mode 100644
index 0000000..fa85d0c
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_outlet_sides.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_outlet_top.png b/technic/pipeworks/textures/pipeworks_outlet_top.png
new file mode 100644
index 0000000..7de76de
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_outlet_top.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_pipe_end.png b/technic/pipeworks/textures/pipeworks_pipe_end.png
new file mode 100644
index 0000000..cb0e4b9
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_pipe_end.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_pipe_end_empty.png b/technic/pipeworks/textures/pipeworks_pipe_end_empty.png
new file mode 100644
index 0000000..400a85b
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_pipe_end_empty.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_pipe_end_loaded.png b/technic/pipeworks/textures/pipeworks_pipe_end_loaded.png
new file mode 100644
index 0000000..5624b83
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_pipe_end_loaded.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_plain.png b/technic/pipeworks/textures/pipeworks_plain.png
new file mode 100644
index 0000000..3bd1b6a
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_plain.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_plastic_sheeting.png b/technic/pipeworks/textures/pipeworks_plastic_sheeting.png
new file mode 100644
index 0000000..810ea2a
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_plastic_sheeting.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_pump_ends.png b/technic/pipeworks/textures/pipeworks_pump_ends.png
new file mode 100644
index 0000000..a76aea1
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_pump_ends.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_pump_off.png b/technic/pipeworks/textures/pipeworks_pump_off.png
new file mode 100644
index 0000000..4705a9a
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_pump_off.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_pump_on.png b/technic/pipeworks/textures/pipeworks_pump_on.png
new file mode 100644
index 0000000..4f35b08
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_pump_on.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_pump_sides.png b/technic/pipeworks/textures/pipeworks_pump_sides.png
new file mode 100644
index 0000000..14129f7
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_pump_sides.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_pump_top_x.png b/technic/pipeworks/textures/pipeworks_pump_top_x.png
new file mode 100644
index 0000000..9228bdd
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_pump_top_x.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_pump_top_z.png b/technic/pipeworks/textures/pipeworks_pump_top_z.png
new file mode 100644
index 0000000..45837e7
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_pump_top_z.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_storage_tank_back.png b/technic/pipeworks/textures/pipeworks_storage_tank_back.png
new file mode 100644
index 0000000..aeecdf9
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_storage_tank_back.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_storage_tank_fittings.png b/technic/pipeworks/textures/pipeworks_storage_tank_fittings.png
new file mode 100644
index 0000000..2460b86
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_storage_tank_fittings.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_storage_tank_front_0.png b/technic/pipeworks/textures/pipeworks_storage_tank_front_0.png
new file mode 100644
index 0000000..9118285
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_storage_tank_front_0.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_storage_tank_front_1.png b/technic/pipeworks/textures/pipeworks_storage_tank_front_1.png
new file mode 100644
index 0000000..cebd8ef
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_storage_tank_front_1.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_storage_tank_front_10.png b/technic/pipeworks/textures/pipeworks_storage_tank_front_10.png
new file mode 100644
index 0000000..7d1e54e
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_storage_tank_front_10.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_storage_tank_front_2.png b/technic/pipeworks/textures/pipeworks_storage_tank_front_2.png
new file mode 100644
index 0000000..14babe7
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_storage_tank_front_2.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_storage_tank_front_3.png b/technic/pipeworks/textures/pipeworks_storage_tank_front_3.png
new file mode 100644
index 0000000..f479797
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_storage_tank_front_3.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_storage_tank_front_4.png b/technic/pipeworks/textures/pipeworks_storage_tank_front_4.png
new file mode 100644
index 0000000..08e1092
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_storage_tank_front_4.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_storage_tank_front_5.png b/technic/pipeworks/textures/pipeworks_storage_tank_front_5.png
new file mode 100644
index 0000000..8ba4374
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_storage_tank_front_5.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_storage_tank_front_6.png b/technic/pipeworks/textures/pipeworks_storage_tank_front_6.png
new file mode 100644
index 0000000..1647011
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_storage_tank_front_6.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_storage_tank_front_7.png b/technic/pipeworks/textures/pipeworks_storage_tank_front_7.png
new file mode 100644
index 0000000..3ec4f4a
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_storage_tank_front_7.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_storage_tank_front_8.png b/technic/pipeworks/textures/pipeworks_storage_tank_front_8.png
new file mode 100644
index 0000000..0bd0f3f
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_storage_tank_front_8.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_storage_tank_front_9.png b/technic/pipeworks/textures/pipeworks_storage_tank_front_9.png
new file mode 100644
index 0000000..d24c425
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_storage_tank_front_9.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_testobject.png b/technic/pipeworks/textures/pipeworks_testobject.png
new file mode 100644
index 0000000..38f85b7
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_testobject.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_tube_end.png b/technic/pipeworks/textures/pipeworks_tube_end.png
new file mode 100644
index 0000000..e5d7be6
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_tube_end.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_tube_inv.png b/technic/pipeworks/textures/pipeworks_tube_inv.png
new file mode 100644
index 0000000..6646ca1
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_tube_inv.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_tube_noctr.png b/technic/pipeworks/textures/pipeworks_tube_noctr.png
new file mode 100644
index 0000000..a654bba
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_tube_noctr.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_tube_plain.png b/technic/pipeworks/textures/pipeworks_tube_plain.png
new file mode 100644
index 0000000..b2caab0
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_tube_plain.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_tube_short.png b/technic/pipeworks/textures/pipeworks_tube_short.png
new file mode 100644
index 0000000..8576b87
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_tube_short.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_tube_transparent.png b/technic/pipeworks/textures/pipeworks_tube_transparent.png
new file mode 100644
index 0000000..4b4ee1f
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_tube_transparent.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_valvebody_bottom.png b/technic/pipeworks/textures/pipeworks_valvebody_bottom.png
new file mode 100644
index 0000000..05f20e3
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_valvebody_bottom.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_valvebody_ends.png b/technic/pipeworks/textures/pipeworks_valvebody_ends.png
new file mode 100644
index 0000000..2bc3ecb
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_valvebody_ends.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_valvebody_sides.png b/technic/pipeworks/textures/pipeworks_valvebody_sides.png
new file mode 100644
index 0000000..989cbbc
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_valvebody_sides.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_valvebody_top_off.png b/technic/pipeworks/textures/pipeworks_valvebody_top_off.png
new file mode 100644
index 0000000..4ecd7fc
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_valvebody_top_off.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_valvebody_top_off_x.png b/technic/pipeworks/textures/pipeworks_valvebody_top_off_x.png
new file mode 100644
index 0000000..0ab4938
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_valvebody_top_off_x.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_valvebody_top_off_z.png b/technic/pipeworks/textures/pipeworks_valvebody_top_off_z.png
new file mode 100644
index 0000000..d645b2d
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_valvebody_top_off_z.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_valvebody_top_on.png b/technic/pipeworks/textures/pipeworks_valvebody_top_on.png
new file mode 100644
index 0000000..e36eb94
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_valvebody_top_on.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_valvebody_top_on_x.png b/technic/pipeworks/textures/pipeworks_valvebody_top_on_x.png
new file mode 100644
index 0000000..e2d33a0
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_valvebody_top_on_x.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_valvebody_top_on_z.png b/technic/pipeworks/textures/pipeworks_valvebody_top_on_z.png
new file mode 100644
index 0000000..7199797
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_valvebody_top_on_z.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_windowed_empty.png b/technic/pipeworks/textures/pipeworks_windowed_empty.png
new file mode 100644
index 0000000..ebd4486
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_windowed_empty.png
Binary files differ
diff --git a/technic/pipeworks/textures/pipeworks_windowed_loaded.png b/technic/pipeworks/textures/pipeworks_windowed_loaded.png
new file mode 100644
index 0000000..91c4829
--- /dev/null
+++ b/technic/pipeworks/textures/pipeworks_windowed_loaded.png
Binary files differ
diff --git a/technic/pipeworks/tubes.lua b/technic/pipeworks/tubes.lua
new file mode 100644
index 0000000..7a05d92
--- /dev/null
+++ b/technic/pipeworks/tubes.lua
@@ -0,0 +1,217 @@
+-- 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
+
diff --git a/alloy_furnace.lua b/technic/technic/alloy_furnace.lua
similarity index 97%
rename from alloy_furnace.lua
rename to technic/technic/alloy_furnace.lua
index fd0bc70..83496e1 100644
--- a/alloy_furnace.lua
+++ b/technic/technic/alloy_furnace.lua
@@ -19,6 +19,16 @@
 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)
@@ -26,7 +36,7 @@
 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)
 
@@ -421,4 +431,4 @@
 		inv:set_stack("fuel", 1, stack)
 	
 end,		
-})
\ No newline at end of file
+})
diff --git a/battery_box.lua b/technic/technic/battery_box.lua
similarity index 100%
rename from battery_box.lua
rename to technic/technic/battery_box.lua
diff --git a/battery_box_mv.lua b/technic/technic/battery_box_mv.lua
similarity index 99%
rename from battery_box_mv.lua
rename to technic/technic/battery_box_mv.lua
index 6288589..ae448e0 100644
--- a/battery_box_mv.lua
+++ b/technic/technic/battery_box_mv.lua
@@ -206,7 +206,7 @@
 		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)
@@ -318,4 +318,4 @@
 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
-		
\ No newline at end of file
+		
diff --git a/cans.lua b/technic/technic/cans.lua
similarity index 68%
rename from cans.lua
rename to technic/technic/cans.lua
index 2809498..d50a621 100644
--- a/cans.lua
+++ b/technic/technic/cans.lua
@@ -29,33 +29,32 @@
 		
 		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
@@ -64,8 +63,8 @@
 		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		
@@ -78,7 +77,45 @@
 	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
 		
diff --git a/chainsaw.lua b/technic/technic/chainsaw.lua
similarity index 94%
rename from chainsaw.lua
rename to technic/technic/chainsaw.lua
index 9f69fd9..9970935 100644
--- a/chainsaw.lua
+++ b/technic/technic/chainsaw.lua
@@ -26,7 +26,7 @@
 	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'},
 	}
 })
diff --git a/concrete.lua b/technic/technic/concrete.lua
similarity index 87%
rename from concrete.lua
rename to technic/technic/concrete.lua
index 0a480a0..6d031d9 100644
--- a/concrete.lua
+++ b/technic/technic/concrete.lua
@@ -71,4 +71,13 @@
 
 	groups = {cracky=1},
 	sounds = default.node_sound_stone_defaults(),
-})
\ No newline at end of file
+})
+
+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")
diff --git a/technic/technic/config.lua b/technic/technic/config.lua
new file mode 100644
index 0000000..3fa1282
--- /dev/null
+++ b/technic/technic/config.lua
@@ -0,0 +1,10 @@
+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
diff --git a/constructor.lua b/technic/technic/constructor.lua
similarity index 100%
rename from constructor.lua
rename to technic/technic/constructor.lua
diff --git a/copper_chest.lua b/technic/technic/copper_chest.lua
similarity index 100%
rename from copper_chest.lua
rename to technic/technic/copper_chest.lua
diff --git a/technic/technic/creative.lua b/technic/technic/creative.lua
new file mode 100644
index 0000000..7b4c493
--- /dev/null
+++ b/technic/technic/creative.lua
@@ -0,0 +1,21 @@
+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)
diff --git a/depends.txt b/technic/technic/depends.txt
similarity index 76%
rename from depends.txt
rename to technic/technic/depends.txt
index bfbfdf1..8f4edab 100644
--- a/depends.txt
+++ b/technic/technic/depends.txt
@@ -2,4 +2,4 @@
 flowers
 pipeworks
 mesecons
-farming
+stairsplus
diff --git a/deployer.lua b/technic/technic/deployer.lua
similarity index 100%
rename from deployer.lua
rename to technic/technic/deployer.lua
diff --git a/electric.lua b/technic/technic/electric.lua
similarity index 100%
rename from electric.lua
rename to technic/technic/electric.lua
diff --git a/electric_furnace.lua b/technic/technic/electric_furnace.lua
similarity index 97%
rename from electric_furnace.lua
rename to technic/technic/electric_furnace.lua
index 6563efb..ab56bdb 100644
--- a/electric_furnace.lua
+++ b/technic/technic/electric_furnace.lua
@@ -107,8 +107,9 @@
 		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;]"..
diff --git a/flashlight.lua b/technic/technic/flashlight.lua
similarity index 98%
rename from flashlight.lua
rename to technic/technic/flashlight.lua
index c9901d1..460cc21 100644
--- a/flashlight.lua
+++ b/technic/technic/flashlight.lua
@@ -13,7 +13,7 @@
     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",""}
             }
diff --git a/technic/technic/flashlight_old.lua b/technic/technic/flashlight_old.lua
new file mode 100644
index 0000000..8a2c338
--- /dev/null
+++ b/technic/technic/flashlight_old.lua
@@ -0,0 +1,176 @@
+-- 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	
\ No newline at end of file
diff --git a/generator.lua b/technic/technic/generator.lua
similarity index 100%
rename from generator.lua
rename to technic/technic/generator.lua
diff --git a/geothermal.lua b/technic/technic/geothermal.lua
similarity index 100%
rename from geothermal.lua
rename to technic/technic/geothermal.lua
diff --git a/gold_chest.lua b/technic/technic/gold_chest.lua
similarity index 100%
rename from gold_chest.lua
rename to technic/technic/gold_chest.lua
diff --git a/grinder.lua b/technic/technic/grinder.lua
similarity index 98%
rename from grinder.lua
rename to technic/technic/grinder.lua
index 40c068a..686ffd3 100644
--- a/grinder.lua
+++ b/technic/technic/grinder.lua
@@ -7,6 +7,13 @@
 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")
@@ -31,7 +38,6 @@
 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",
@@ -317,4 +323,4 @@
 end
 return nil
 		
-end
\ No newline at end of file
+end
diff --git a/technic/technic/grinder_gloopores.lua b/technic/technic/grinder_gloopores.lua
new file mode 100644
index 0000000..0c58c98
--- /dev/null
+++ b/technic/technic/grinder_gloopores.lua
@@ -0,0 +1,55 @@
+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)
+})
diff --git a/init.lua b/technic/technic/init.lua
similarity index 86%
rename from init.lua
rename to technic/technic/init.lua
index 8933a11..355e25e 100644
--- a/init.lua
+++ b/technic/technic/init.lua
@@ -1,4 +1,4 @@
--- Minetest 0.4.3 : technic
+-- Minetest 0.4.4 : technic
 
 minetest.register_alias("rebar", "technic:rebar")
 minetest.register_alias("concrete", "technic:concrete")
@@ -20,46 +20,57 @@
 --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
@@ -82,4 +93,4 @@
 	meta = minetest.env:get_meta(pos)
 	meta:from_table(meta0)
 	return 1
-end
\ No newline at end of file
+end
diff --git a/injector.lua b/technic/technic/injector.lua
similarity index 100%
rename from injector.lua
rename to technic/technic/injector.lua
diff --git a/technic/technic/injector1.lua b/technic/technic/injector1.lua
new file mode 100644
index 0000000..537e478
--- /dev/null
+++ b/technic/technic/injector1.lua
@@ -0,0 +1,248 @@
+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
diff --git a/iron_chest.lua b/technic/technic/iron_chest.lua
similarity index 93%
rename from iron_chest.lua
rename to technic/technic/iron_chest.lua
index f0e0fcb..27b1aba 100644
--- a/iron_chest.lua
+++ b/technic/technic/iron_chest.lua
@@ -54,15 +54,6 @@
 		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()
@@ -170,7 +161,3 @@
 				" 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
\ No newline at end of file
diff --git a/item_drop.lua b/technic/technic/item_drop.lua
similarity index 100%
rename from item_drop.lua
rename to technic/technic/item_drop.lua
diff --git a/item_pickup.lua b/technic/technic/item_pickup.lua
similarity index 100%
rename from item_pickup.lua
rename to technic/technic/item_pickup.lua
diff --git a/items.lua b/technic/technic/items.lua
similarity index 91%
rename from items.lua
rename to technic/technic/items.lua
index 527fc6f..c2b596e 100644
--- a/items.lua
+++ b/technic/technic/items.lua
@@ -55,27 +55,27 @@
 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'},
 	}
 })
 
diff --git a/mining_drill.lua b/technic/technic/mining_drill.lua
similarity index 90%
rename from mining_drill.lua
rename to technic/technic/mining_drill.lua
index 5fc5377..4ccfc95 100644
--- a/mining_drill.lua
+++ b/technic/technic/mining_drill.lua
@@ -25,8 +25,8 @@
 	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'},
 	}
 })
 
diff --git a/mining_laser_mk1.lua b/technic/technic/mining_laser_mk1.lua
similarity index 100%
rename from mining_laser_mk1.lua
rename to technic/technic/mining_laser_mk1.lua
diff --git a/mithril_chest.lua b/technic/technic/mithril_chest.lua
similarity index 100%
rename from mithril_chest.lua
rename to technic/technic/mithril_chest.lua
diff --git a/mithril_chest.lua b/technic/technic/mithril_subspace_chest.lua
similarity index 100%
copy from mithril_chest.lua
copy to technic/technic/mithril_subspace_chest.lua
diff --git a/music_player.lua b/technic/technic/music_player.lua
similarity index 100%
rename from music_player.lua
rename to technic/technic/music_player.lua
diff --git a/node_breaker.lua b/technic/technic/node_breaker.lua
similarity index 100%
rename from node_breaker.lua
rename to technic/technic/node_breaker.lua
diff --git a/technic/technic/ores.lua b/technic/technic/ores.lua
new file mode 100644
index 0000000..2642c9e
--- /dev/null
+++ b/technic/technic/ores.lua
@@ -0,0 +1,339 @@
+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
\ No newline at end of file
diff --git a/project_table.lua b/technic/technic/project_table.lua
similarity index 100%
rename from project_table.lua
rename to technic/technic/project_table.lua
diff --git a/rubber.lua b/technic/technic/rubber.lua
similarity index 100%
rename from rubber.lua
rename to technic/technic/rubber.lua
diff --git a/screwdriver.lua b/technic/technic/screwdriver.lua
similarity index 100%
rename from screwdriver.lua
rename to technic/technic/screwdriver.lua
diff --git a/silver_chest.lua b/technic/technic/silver_chest.lua
similarity index 100%
rename from silver_chest.lua
rename to technic/technic/silver_chest.lua
diff --git a/solar_panel.lua b/technic/technic/solar_panel.lua
similarity index 98%
rename from solar_panel.lua
rename to technic/technic/solar_panel.lua
index f2d08f6..02a8f69 100644
--- a/solar_panel.lua
+++ b/technic/technic/solar_panel.lua
@@ -54,7 +54,7 @@
 		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")
diff --git a/solar_panel_mv.lua b/technic/technic/solar_panel_mv.lua
similarity index 100%
rename from solar_panel_mv.lua
rename to technic/technic/solar_panel_mv.lua
diff --git a/sonic_screwdriver.lua b/technic/technic/sonic_screwdriver.lua
similarity index 100%
rename from sonic_screwdriver.lua
rename to technic/technic/sonic_screwdriver.lua
diff --git a/sounds/chainsaw.ogg b/technic/technic/sounds/chainsaw.ogg
similarity index 100%
rename from sounds/chainsaw.ogg
rename to technic/technic/sounds/chainsaw.ogg
Binary files differ
diff --git a/sounds/item_drop_pickup.1.ogg b/technic/technic/sounds/item_drop_pickup.1.ogg
similarity index 100%
rename from sounds/item_drop_pickup.1.ogg
rename to technic/technic/sounds/item_drop_pickup.1.ogg
Binary files differ
diff --git a/sounds/item_drop_pickup.2.ogg b/technic/technic/sounds/item_drop_pickup.2.ogg
similarity index 100%
rename from sounds/item_drop_pickup.2.ogg
rename to technic/technic/sounds/item_drop_pickup.2.ogg
Binary files differ
diff --git a/sounds/item_drop_pickup.3.ogg b/technic/technic/sounds/item_drop_pickup.3.ogg
similarity index 100%
rename from sounds/item_drop_pickup.3.ogg
rename to technic/technic/sounds/item_drop_pickup.3.ogg
Binary files differ
diff --git a/sounds/item_drop_pickup.4.ogg b/technic/technic/sounds/item_drop_pickup.4.ogg
similarity index 100%
rename from sounds/item_drop_pickup.4.ogg
rename to technic/technic/sounds/item_drop_pickup.4.ogg
Binary files differ
diff --git a/sounds/mining_drill.ogg b/technic/technic/sounds/mining_drill.ogg
similarity index 100%
rename from sounds/mining_drill.ogg
rename to technic/technic/sounds/mining_drill.ogg
Binary files differ
diff --git a/sounds/technic_laser.ogg b/technic/technic/sounds/technic_laser.ogg
similarity index 100%
rename from sounds/technic_laser.ogg
rename to technic/technic/sounds/technic_laser.ogg
Binary files differ
diff --git a/sounds/technic_sonic_screwdriver.ogg b/technic/technic/sounds/technic_sonic_screwdriver.ogg
similarity index 100%
rename from sounds/technic_sonic_screwdriver.ogg
rename to technic/technic/sounds/technic_sonic_screwdriver.ogg
Binary files differ
diff --git a/technic/technic/tetris.lua b/technic/technic/tetris.lua
new file mode 100644
index 0000000..3b14c47
--- /dev/null
+++ b/technic/technic/tetris.lua
@@ -0,0 +1,17 @@
+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(),
+})
diff --git a/textures/technic_alloy_furnace_front.png b/technic/technic/textures/technic_alloy_furnace_front.png
similarity index 100%
rename from textures/technic_alloy_furnace_front.png
rename to technic/technic/textures/technic_alloy_furnace_front.png
Binary files differ
diff --git a/textures/technic_alloy_furnace_front_active.png b/technic/technic/textures/technic_alloy_furnace_front_active.png
similarity index 100%
rename from textures/technic_alloy_furnace_front_active.png
rename to technic/technic/textures/technic_alloy_furnace_front_active.png
Binary files differ
diff --git a/textures/technic_alloy_furnace_side.png b/technic/technic/textures/technic_alloy_furnace_side.png
similarity index 100%
rename from textures/technic_alloy_furnace_side.png
rename to technic/technic/textures/technic_alloy_furnace_side.png
Binary files differ
diff --git a/textures/technic_alloy_furnace_top.png b/technic/technic/textures/technic_alloy_furnace_top.png
similarity index 100%
rename from textures/technic_alloy_furnace_top.png
rename to technic/technic/textures/technic_alloy_furnace_top.png
Binary files differ
diff --git a/textures/technic_battery.png b/technic/technic/textures/technic_battery.png
similarity index 100%
rename from textures/technic_battery.png
rename to technic/technic/textures/technic_battery.png
Binary files differ
diff --git a/textures/technic_battery_box_bottom.png b/technic/technic/textures/technic_battery_box_bottom.png
similarity index 100%
rename from textures/technic_battery_box_bottom.png
rename to technic/technic/textures/technic_battery_box_bottom.png
Binary files differ
diff --git a/textures/technic_battery_box_side0.png b/technic/technic/textures/technic_battery_box_side0.png
similarity index 100%
rename from textures/technic_battery_box_side0.png
rename to technic/technic/textures/technic_battery_box_side0.png
Binary files differ
diff --git a/textures/technic_battery_box_top.png b/technic/technic/textures/technic_battery_box_top.png
similarity index 100%
rename from textures/technic_battery_box_top.png
rename to technic/technic/textures/technic_battery_box_top.png
Binary files differ
diff --git a/textures/technic_battery_reload.png b/technic/technic/textures/technic_battery_reload.png
similarity index 100%
rename from textures/technic_battery_reload.png
rename to technic/technic/textures/technic_battery_reload.png
Binary files differ
diff --git a/textures/technic_brass_dust.png b/technic/technic/textures/technic_brass_dust.png
similarity index 100%
rename from textures/technic_brass_dust.png
rename to technic/technic/textures/technic_brass_dust.png
Binary files differ
diff --git a/textures/technic_brass_ingot.png b/technic/technic/textures/technic_brass_ingot.png
similarity index 100%
rename from textures/technic_brass_ingot.png
rename to technic/technic/textures/technic_brass_ingot.png
Binary files differ
diff --git a/textures/technic_bronze_dust.png b/technic/technic/textures/technic_bronze_dust.png
similarity index 100%
rename from textures/technic_bronze_dust.png
rename to technic/technic/textures/technic_bronze_dust.png
Binary files differ
diff --git a/textures/technic_chainsaw.png b/technic/technic/textures/technic_chainsaw.png
similarity index 100%
rename from textures/technic_chainsaw.png
rename to technic/technic/textures/technic_chainsaw.png
Binary files differ
diff --git a/textures/technic_chromium_dust.png b/technic/technic/textures/technic_chromium_dust.png
similarity index 100%
rename from textures/technic_chromium_dust.png
rename to technic/technic/textures/technic_chromium_dust.png
Binary files differ
diff --git a/textures/technic_chromium_ingot.png b/technic/technic/textures/technic_chromium_ingot.png
similarity index 100%
rename from textures/technic_chromium_ingot.png
rename to technic/technic/textures/technic_chromium_ingot.png
Binary files differ
diff --git a/textures/technic_chromium_lump.png b/technic/technic/textures/technic_chromium_lump.png
similarity index 100%
rename from textures/technic_chromium_lump.png
rename to technic/technic/textures/technic_chromium_lump.png
Binary files differ
diff --git a/textures/technic_coal_alloy_furnace_bottom.png b/technic/technic/textures/technic_coal_alloy_furnace_bottom.png
similarity index 100%
rename from textures/technic_coal_alloy_furnace_bottom.png
rename to technic/technic/textures/technic_coal_alloy_furnace_bottom.png
Binary files differ
diff --git a/textures/technic_coal_alloy_furnace_front.png b/technic/technic/textures/technic_coal_alloy_furnace_front.png
similarity index 100%
rename from textures/technic_coal_alloy_furnace_front.png
rename to technic/technic/textures/technic_coal_alloy_furnace_front.png
Binary files differ
diff --git a/textures/technic_coal_alloy_furnace_front_active.png b/technic/technic/textures/technic_coal_alloy_furnace_front_active.png
similarity index 100%
rename from textures/technic_coal_alloy_furnace_front_active.png
rename to technic/technic/textures/technic_coal_alloy_furnace_front_active.png
Binary files differ
diff --git a/textures/technic_coal_alloy_furnace_side.png b/technic/technic/textures/technic_coal_alloy_furnace_side.png
similarity index 100%
rename from textures/technic_coal_alloy_furnace_side.png
rename to technic/technic/textures/technic_coal_alloy_furnace_side.png
Binary files differ
diff --git a/textures/technic_coal_alloy_furnace_top.png b/technic/technic/textures/technic_coal_alloy_furnace_top.png
similarity index 100%
rename from textures/technic_coal_alloy_furnace_top.png
rename to technic/technic/textures/technic_coal_alloy_furnace_top.png
Binary files differ
diff --git a/textures/technic_coal_dust.png b/technic/technic/textures/technic_coal_dust.png
similarity index 100%
rename from textures/technic_coal_dust.png
rename to technic/technic/textures/technic_coal_dust.png
Binary files differ
diff --git a/textures/technic_concrete_block.png b/technic/technic/textures/technic_concrete_block.png
similarity index 100%
rename from textures/technic_concrete_block.png
rename to technic/technic/textures/technic_concrete_block.png
Binary files differ
diff --git a/textures/technic_constructor_back.png b/technic/technic/textures/technic_constructor_back.png
similarity index 100%
rename from textures/technic_constructor_back.png
rename to technic/technic/textures/technic_constructor_back.png
Binary files differ
diff --git a/textures/technic_constructor_front_off.png b/technic/technic/textures/technic_constructor_front_off.png
similarity index 100%
rename from textures/technic_constructor_front_off.png
rename to technic/technic/textures/technic_constructor_front_off.png
Binary files differ
diff --git a/textures/technic_constructor_front_on.png b/technic/technic/textures/technic_constructor_front_on.png
similarity index 100%
rename from textures/technic_constructor_front_on.png
rename to technic/technic/textures/technic_constructor_front_on.png
Binary files differ
diff --git a/textures/technic_constructor_mk1_bottom_off.png b/technic/technic/textures/technic_constructor_mk1_bottom_off.png
similarity index 100%
rename from textures/technic_constructor_mk1_bottom_off.png
rename to technic/technic/textures/technic_constructor_mk1_bottom_off.png
Binary files differ
diff --git a/textures/technic_constructor_mk1_bottom_on.png b/technic/technic/textures/technic_constructor_mk1_bottom_on.png
similarity index 100%
rename from textures/technic_constructor_mk1_bottom_on.png
rename to technic/technic/textures/technic_constructor_mk1_bottom_on.png
Binary files differ
diff --git a/textures/technic_constructor_mk1_side1_off.png b/technic/technic/textures/technic_constructor_mk1_side1_off.png
similarity index 100%
rename from textures/technic_constructor_mk1_side1_off.png
rename to technic/technic/textures/technic_constructor_mk1_side1_off.png
Binary files differ
diff --git a/textures/technic_constructor_mk1_side1_on.png b/technic/technic/textures/technic_constructor_mk1_side1_on.png
similarity index 100%
rename from textures/technic_constructor_mk1_side1_on.png
rename to technic/technic/textures/technic_constructor_mk1_side1_on.png
Binary files differ
diff --git a/textures/technic_constructor_mk1_side2_off.png b/technic/technic/textures/technic_constructor_mk1_side2_off.png
similarity index 100%
rename from textures/technic_constructor_mk1_side2_off.png
rename to technic/technic/textures/technic_constructor_mk1_side2_off.png
Binary files differ
diff --git a/textures/technic_constructor_mk1_side2_on.png b/technic/technic/textures/technic_constructor_mk1_side2_on.png
similarity index 100%
rename from textures/technic_constructor_mk1_side2_on.png
rename to technic/technic/textures/technic_constructor_mk1_side2_on.png
Binary files differ
diff --git a/textures/technic_constructor_mk1_top_off.png b/technic/technic/textures/technic_constructor_mk1_top_off.png
similarity index 100%
rename from textures/technic_constructor_mk1_top_off.png
rename to technic/technic/textures/technic_constructor_mk1_top_off.png
Binary files differ
diff --git a/textures/technic_constructor_mk1_top_on.png b/technic/technic/textures/technic_constructor_mk1_top_on.png
similarity index 100%
rename from textures/technic_constructor_mk1_top_on.png
rename to technic/technic/textures/technic_constructor_mk1_top_on.png
Binary files differ
diff --git a/textures/technic_constructor_mk2_bottom_off.png b/technic/technic/textures/technic_constructor_mk2_bottom_off.png
similarity index 100%
rename from textures/technic_constructor_mk2_bottom_off.png
rename to technic/technic/textures/technic_constructor_mk2_bottom_off.png
Binary files differ
diff --git a/textures/technic_constructor_mk2_bottom_on.png b/technic/technic/textures/technic_constructor_mk2_bottom_on.png
similarity index 100%
rename from textures/technic_constructor_mk2_bottom_on.png
rename to technic/technic/textures/technic_constructor_mk2_bottom_on.png
Binary files differ
diff --git a/textures/technic_constructor_mk2_side1_off.png b/technic/technic/textures/technic_constructor_mk2_side1_off.png
similarity index 100%
rename from textures/technic_constructor_mk2_side1_off.png
rename to technic/technic/textures/technic_constructor_mk2_side1_off.png
Binary files differ
diff --git a/textures/technic_constructor_mk2_side1_on.png b/technic/technic/textures/technic_constructor_mk2_side1_on.png
similarity index 100%
rename from textures/technic_constructor_mk2_side1_on.png
rename to technic/technic/textures/technic_constructor_mk2_side1_on.png
Binary files differ
diff --git a/textures/technic_constructor_mk2_side2_off.png b/technic/technic/textures/technic_constructor_mk2_side2_off.png
similarity index 100%
rename from textures/technic_constructor_mk2_side2_off.png
rename to technic/technic/textures/technic_constructor_mk2_side2_off.png
Binary files differ
diff --git a/textures/technic_constructor_mk2_side2_on.png b/technic/technic/textures/technic_constructor_mk2_side2_on.png
similarity index 100%
rename from textures/technic_constructor_mk2_side2_on.png
rename to technic/technic/textures/technic_constructor_mk2_side2_on.png
Binary files differ
diff --git a/textures/technic_constructor_mk2_top_off.png b/technic/technic/textures/technic_constructor_mk2_top_off.png
similarity index 100%
rename from textures/technic_constructor_mk2_top_off.png
rename to technic/technic/textures/technic_constructor_mk2_top_off.png
Binary files differ
diff --git a/textures/technic_constructor_mk2_top_on.png b/technic/technic/textures/technic_constructor_mk2_top_on.png
similarity index 100%
rename from textures/technic_constructor_mk2_top_on.png
rename to technic/technic/textures/technic_constructor_mk2_top_on.png
Binary files differ
diff --git a/textures/technic_constructor_mk3_bottom_off.png b/technic/technic/textures/technic_constructor_mk3_bottom_off.png
similarity index 100%
rename from textures/technic_constructor_mk3_bottom_off.png
rename to technic/technic/textures/technic_constructor_mk3_bottom_off.png
Binary files differ
diff --git a/textures/technic_constructor_mk3_bottom_on.png b/technic/technic/textures/technic_constructor_mk3_bottom_on.png
similarity index 100%
rename from textures/technic_constructor_mk3_bottom_on.png
rename to technic/technic/textures/technic_constructor_mk3_bottom_on.png
Binary files differ
diff --git a/textures/technic_constructor_mk3_side1_off.png b/technic/technic/textures/technic_constructor_mk3_side1_off.png
similarity index 100%
rename from textures/technic_constructor_mk3_side1_off.png
rename to technic/technic/textures/technic_constructor_mk3_side1_off.png
Binary files differ
diff --git a/textures/technic_constructor_mk3_side1_on.png b/technic/technic/textures/technic_constructor_mk3_side1_on.png
similarity index 100%
rename from textures/technic_constructor_mk3_side1_on.png
rename to technic/technic/textures/technic_constructor_mk3_side1_on.png
Binary files differ
diff --git a/textures/technic_constructor_mk3_side2_off.png b/technic/technic/textures/technic_constructor_mk3_side2_off.png
similarity index 100%
rename from textures/technic_constructor_mk3_side2_off.png
rename to technic/technic/textures/technic_constructor_mk3_side2_off.png
Binary files differ
diff --git a/textures/technic_constructor_mk3_side2_on.png b/technic/technic/textures/technic_constructor_mk3_side2_on.png
similarity index 100%
rename from textures/technic_constructor_mk3_side2_on.png
rename to technic/technic/textures/technic_constructor_mk3_side2_on.png
Binary files differ
diff --git a/textures/technic_constructor_mk3_top_off.png b/technic/technic/textures/technic_constructor_mk3_top_off.png
similarity index 100%
rename from textures/technic_constructor_mk3_top_off.png
rename to technic/technic/textures/technic_constructor_mk3_top_off.png
Binary files differ
diff --git a/textures/technic_constructor_mk3_top_on.png b/technic/technic/textures/technic_constructor_mk3_top_on.png
similarity index 100%
rename from textures/technic_constructor_mk3_top_on.png
rename to technic/technic/textures/technic_constructor_mk3_top_on.png
Binary files differ
diff --git a/textures/technic_copper_chest_front.png b/technic/technic/textures/technic_copper_chest_front.png
similarity index 100%
rename from textures/technic_copper_chest_front.png
rename to technic/technic/textures/technic_copper_chest_front.png
Binary files differ
diff --git a/textures/technic_copper_chest_locked.png b/technic/technic/textures/technic_copper_chest_locked.png
similarity index 100%
rename from textures/technic_copper_chest_locked.png
rename to technic/technic/textures/technic_copper_chest_locked.png
Binary files differ
diff --git a/textures/technic_copper_chest_side.png b/technic/technic/textures/technic_copper_chest_side.png
similarity index 100%
rename from textures/technic_copper_chest_side.png
rename to technic/technic/textures/technic_copper_chest_side.png
Binary files differ
diff --git a/textures/technic_copper_chest_top.png b/technic/technic/textures/technic_copper_chest_top.png
similarity index 100%
rename from textures/technic_copper_chest_top.png
rename to technic/technic/textures/technic_copper_chest_top.png
Binary files differ
diff --git a/textures/technic_copper_coil.png b/technic/technic/textures/technic_copper_coil.png
similarity index 100%
rename from textures/technic_copper_coil.png
rename to technic/technic/textures/technic_copper_coil.png
Binary files differ
diff --git a/textures/technic_copper_dust.png b/technic/technic/textures/technic_copper_dust.png
similarity index 100%
rename from textures/technic_copper_dust.png
rename to technic/technic/textures/technic_copper_dust.png
Binary files differ
diff --git a/textures/technic_deployer_back.png b/technic/technic/textures/technic_deployer_back.png
similarity index 100%
rename from textures/technic_deployer_back.png
rename to technic/technic/textures/technic_deployer_back.png
Binary files differ
diff --git a/textures/technic_deployer_bottom.png b/technic/technic/textures/technic_deployer_bottom.png
similarity index 100%
rename from textures/technic_deployer_bottom.png
rename to technic/technic/textures/technic_deployer_bottom.png
Binary files differ
diff --git a/textures/technic_deployer_front_off.png b/technic/technic/textures/technic_deployer_front_off.png
similarity index 100%
rename from textures/technic_deployer_front_off.png
rename to technic/technic/textures/technic_deployer_front_off.png
Binary files differ
diff --git a/textures/technic_deployer_front_on.png b/technic/technic/textures/technic_deployer_front_on.png
similarity index 100%
rename from textures/technic_deployer_front_on.png
rename to technic/technic/textures/technic_deployer_front_on.png
Binary files differ
diff --git a/textures/technic_deployer_side.png b/technic/technic/textures/technic_deployer_side.png
similarity index 100%
rename from textures/technic_deployer_side.png
rename to technic/technic/textures/technic_deployer_side.png
Binary files differ
diff --git a/textures/technic_deployer_side1.png b/technic/technic/textures/technic_deployer_side1.png
similarity index 100%
rename from textures/technic_deployer_side1.png
rename to technic/technic/textures/technic_deployer_side1.png
Binary files differ
diff --git a/textures/technic_deployer_side2.png b/technic/technic/textures/technic_deployer_side2.png
similarity index 100%
rename from textures/technic_deployer_side2.png
rename to technic/technic/textures/technic_deployer_side2.png
Binary files differ
diff --git a/textures/technic_deployer_top.png b/technic/technic/textures/technic_deployer_top.png
similarity index 100%
rename from textures/technic_deployer_top.png
rename to technic/technic/textures/technic_deployer_top.png
Binary files differ
diff --git a/textures/technic_diamond.png b/technic/technic/textures/technic_diamond.png
similarity index 100%
rename from textures/technic_diamond.png
rename to technic/technic/textures/technic_diamond.png
Binary files differ
diff --git a/textures/technic_diamond_block.png b/technic/technic/textures/technic_diamond_block.png
similarity index 100%
rename from textures/technic_diamond_block.png
rename to technic/technic/textures/technic_diamond_block.png
Binary files differ
diff --git a/textures/technic_diamond_block_blue.png b/technic/technic/textures/technic_diamond_block_blue.png
similarity index 100%
rename from textures/technic_diamond_block_blue.png
rename to technic/technic/textures/technic_diamond_block_blue.png
Binary files differ
diff --git a/textures/technic_diamond_block_green.png b/technic/technic/textures/technic_diamond_block_green.png
similarity index 100%
rename from textures/technic_diamond_block_green.png
rename to technic/technic/textures/technic_diamond_block_green.png
Binary files differ
diff --git a/textures/technic_diamond_block_red.png b/technic/technic/textures/technic_diamond_block_red.png
similarity index 100%
rename from textures/technic_diamond_block_red.png
rename to technic/technic/textures/technic_diamond_block_red.png
Binary files differ
diff --git a/textures/technic_diamond_drill_head.png b/technic/technic/textures/technic_diamond_drill_head.png
similarity index 100%
rename from textures/technic_diamond_drill_head.png
rename to technic/technic/textures/technic_diamond_drill_head.png
Binary files differ
diff --git a/textures/technic_doped_silicon_wafer.png b/technic/technic/textures/technic_doped_silicon_wafer.png
similarity index 100%
rename from textures/technic_doped_silicon_wafer.png
rename to technic/technic/textures/technic_doped_silicon_wafer.png
Binary files differ
diff --git a/technic/technic/textures/technic_electric_furnace_GUI.png b/technic/technic/textures/technic_electric_furnace_GUI.png
new file mode 100644
index 0000000..320794f
--- /dev/null
+++ b/technic/technic/textures/technic_electric_furnace_GUI.png
Binary files differ
diff --git a/technic/technic/textures/technic_electric_furnace_GUI.xcf b/technic/technic/textures/technic_electric_furnace_GUI.xcf
new file mode 100644
index 0000000..482eeb4
--- /dev/null
+++ b/technic/technic/textures/technic_electric_furnace_GUI.xcf
Binary files differ
diff --git a/textures/technic_electric_furnace_bottom.png b/technic/technic/textures/technic_electric_furnace_bottom.png
similarity index 100%
rename from textures/technic_electric_furnace_bottom.png
rename to technic/technic/textures/technic_electric_furnace_bottom.png
Binary files differ
diff --git a/textures/technic_electric_furnace_front.png b/technic/technic/textures/technic_electric_furnace_front.png
similarity index 100%
rename from textures/technic_electric_furnace_front.png
rename to technic/technic/textures/technic_electric_furnace_front.png
Binary files differ
diff --git a/textures/technic_electric_furnace_front_active.png b/technic/technic/textures/technic_electric_furnace_front_active.png
similarity index 100%
rename from textures/technic_electric_furnace_front_active.png
rename to technic/technic/textures/technic_electric_furnace_front_active.png
Binary files differ
diff --git a/textures/technic_electric_furnace_side.png b/technic/technic/textures/technic_electric_furnace_side.png
similarity index 100%
rename from textures/technic_electric_furnace_side.png
rename to technic/technic/textures/technic_electric_furnace_side.png
Binary files differ
diff --git a/textures/technic_electric_furnace_top.png b/technic/technic/textures/technic_electric_furnace_top.png
similarity index 100%
rename from textures/technic_electric_furnace_top.png
rename to technic/technic/textures/technic_electric_furnace_top.png
Binary files differ
diff --git a/textures/technic_fine_copper_wire.png b/technic/technic/textures/technic_fine_copper_wire.png
similarity index 100%
rename from textures/technic_fine_copper_wire.png
rename to technic/technic/textures/technic_fine_copper_wire.png
Binary files differ
diff --git a/textures/technic_flashlight.png b/technic/technic/textures/technic_flashlight.png
similarity index 100%
rename from textures/technic_flashlight.png
rename to technic/technic/textures/technic_flashlight.png
Binary files differ
diff --git a/textures/technic_generator_front.png b/technic/technic/textures/technic_generator_front.png
similarity index 100%
rename from textures/technic_generator_front.png
rename to technic/technic/textures/technic_generator_front.png
Binary files differ
diff --git a/textures/technic_generator_front_active.png b/technic/technic/textures/technic_generator_front_active.png
similarity index 100%
rename from textures/technic_generator_front_active.png
rename to technic/technic/textures/technic_generator_front_active.png
Binary files differ
diff --git a/textures/technic_generator_side.png b/technic/technic/textures/technic_generator_side.png
similarity index 100%
rename from textures/technic_generator_side.png
rename to technic/technic/textures/technic_generator_side.png
Binary files differ
diff --git a/textures/technic_generator_top.png b/technic/technic/textures/technic_generator_top.png
similarity index 100%
rename from textures/technic_generator_top.png
rename to technic/technic/textures/technic_generator_top.png
Binary files differ
diff --git a/textures/technic_geothermal_side.png b/technic/technic/textures/technic_geothermal_side.png
similarity index 100%
rename from textures/technic_geothermal_side.png
rename to technic/technic/textures/technic_geothermal_side.png
Binary files differ
diff --git a/textures/technic_geothermal_top.png b/technic/technic/textures/technic_geothermal_top.png
similarity index 100%
rename from textures/technic_geothermal_top.png
rename to technic/technic/textures/technic_geothermal_top.png
Binary files differ
diff --git a/textures/technic_geothermal_top_active.png b/technic/technic/textures/technic_geothermal_top_active.png
similarity index 100%
rename from textures/technic_geothermal_top_active.png
rename to technic/technic/textures/technic_geothermal_top_active.png
Binary files differ
diff --git a/textures/technic_gold_chest_front.png b/technic/technic/textures/technic_gold_chest_front.png
similarity index 100%
rename from textures/technic_gold_chest_front.png
rename to technic/technic/textures/technic_gold_chest_front.png
Binary files differ
diff --git a/textures/technic_gold_chest_front_black.png b/technic/technic/textures/technic_gold_chest_front_black.png
similarity index 100%
rename from textures/technic_gold_chest_front_black.png
rename to technic/technic/textures/technic_gold_chest_front_black.png
Binary files differ
diff --git a/textures/technic_gold_chest_front_blue.png b/technic/technic/textures/technic_gold_chest_front_blue.png
similarity index 100%
rename from textures/technic_gold_chest_front_blue.png
rename to technic/technic/textures/technic_gold_chest_front_blue.png
Binary files differ
diff --git a/textures/technic_gold_chest_front_brown.png b/technic/technic/textures/technic_gold_chest_front_brown.png
similarity index 100%
rename from textures/technic_gold_chest_front_brown.png
rename to technic/technic/textures/technic_gold_chest_front_brown.png
Binary files differ
diff --git a/textures/technic_gold_chest_front_cyan.png b/technic/technic/textures/technic_gold_chest_front_cyan.png
similarity index 100%
rename from textures/technic_gold_chest_front_cyan.png
rename to technic/technic/textures/technic_gold_chest_front_cyan.png
Binary files differ
diff --git a/textures/technic_gold_chest_front_dark_green.png b/technic/technic/textures/technic_gold_chest_front_dark_green.png
similarity index 100%
rename from textures/technic_gold_chest_front_dark_green.png
rename to technic/technic/textures/technic_gold_chest_front_dark_green.png
Binary files differ
diff --git a/textures/technic_gold_chest_front_dark_grey.png b/technic/technic/textures/technic_gold_chest_front_dark_grey.png
similarity index 100%
rename from textures/technic_gold_chest_front_dark_grey.png
rename to technic/technic/textures/technic_gold_chest_front_dark_grey.png
Binary files differ
diff --git a/textures/technic_gold_chest_front_green.png b/technic/technic/textures/technic_gold_chest_front_green.png
similarity index 100%
rename from textures/technic_gold_chest_front_green.png
rename to technic/technic/textures/technic_gold_chest_front_green.png
Binary files differ
diff --git a/textures/technic_gold_chest_front_grey.png b/technic/technic/textures/technic_gold_chest_front_grey.png
similarity index 100%
rename from textures/technic_gold_chest_front_grey.png
rename to technic/technic/textures/technic_gold_chest_front_grey.png
Binary files differ
diff --git a/textures/technic_gold_chest_front_magenta.png b/technic/technic/textures/technic_gold_chest_front_magenta.png
similarity index 100%
rename from textures/technic_gold_chest_front_magenta.png
rename to technic/technic/textures/technic_gold_chest_front_magenta.png
Binary files differ
diff --git a/textures/technic_gold_chest_front_orange.png b/technic/technic/textures/technic_gold_chest_front_orange.png
similarity index 100%
rename from textures/technic_gold_chest_front_orange.png
rename to technic/technic/textures/technic_gold_chest_front_orange.png
Binary files differ
diff --git a/textures/technic_gold_chest_front_pink.png b/technic/technic/textures/technic_gold_chest_front_pink.png
similarity index 100%
rename from textures/technic_gold_chest_front_pink.png
rename to technic/technic/textures/technic_gold_chest_front_pink.png
Binary files differ
diff --git a/textures/technic_gold_chest_front_red.png b/technic/technic/textures/technic_gold_chest_front_red.png
similarity index 100%
rename from textures/technic_gold_chest_front_red.png
rename to technic/technic/textures/technic_gold_chest_front_red.png
Binary files differ
diff --git a/textures/technic_gold_chest_front_violet.png b/technic/technic/textures/technic_gold_chest_front_violet.png
similarity index 100%
rename from textures/technic_gold_chest_front_violet.png
rename to technic/technic/textures/technic_gold_chest_front_violet.png
Binary files differ
diff --git a/textures/technic_gold_chest_front_white.png b/technic/technic/textures/technic_gold_chest_front_white.png
similarity index 100%
rename from textures/technic_gold_chest_front_white.png
rename to technic/technic/textures/technic_gold_chest_front_white.png
Binary files differ
diff --git a/textures/technic_gold_chest_front_yellow.png b/technic/technic/textures/technic_gold_chest_front_yellow.png
similarity index 100%
rename from textures/technic_gold_chest_front_yellow.png
rename to technic/technic/textures/technic_gold_chest_front_yellow.png
Binary files differ
diff --git a/textures/technic_gold_chest_locked.png b/technic/technic/textures/technic_gold_chest_locked.png
similarity index 100%
rename from textures/technic_gold_chest_locked.png
rename to technic/technic/textures/technic_gold_chest_locked.png
Binary files differ
diff --git a/textures/technic_gold_chest_locked_black.png b/technic/technic/textures/technic_gold_chest_locked_black.png
similarity index 100%
rename from textures/technic_gold_chest_locked_black.png
rename to technic/technic/textures/technic_gold_chest_locked_black.png
Binary files differ
diff --git a/textures/technic_gold_chest_locked_blue.png b/technic/technic/textures/technic_gold_chest_locked_blue.png
similarity index 100%
rename from textures/technic_gold_chest_locked_blue.png
rename to technic/technic/textures/technic_gold_chest_locked_blue.png
Binary files differ
diff --git a/textures/technic_gold_chest_locked_brown.png b/technic/technic/textures/technic_gold_chest_locked_brown.png
similarity index 100%
rename from textures/technic_gold_chest_locked_brown.png
rename to technic/technic/textures/technic_gold_chest_locked_brown.png
Binary files differ
diff --git a/textures/technic_gold_chest_locked_cyan.png b/technic/technic/textures/technic_gold_chest_locked_cyan.png
similarity index 100%
rename from textures/technic_gold_chest_locked_cyan.png
rename to technic/technic/textures/technic_gold_chest_locked_cyan.png
Binary files differ
diff --git a/textures/technic_gold_chest_locked_dark_green.png b/technic/technic/textures/technic_gold_chest_locked_dark_green.png
similarity index 100%
rename from textures/technic_gold_chest_locked_dark_green.png
rename to technic/technic/textures/technic_gold_chest_locked_dark_green.png
Binary files differ
diff --git a/textures/technic_gold_chest_locked_dark_grey.png b/technic/technic/textures/technic_gold_chest_locked_dark_grey.png
similarity index 100%
rename from textures/technic_gold_chest_locked_dark_grey.png
rename to technic/technic/textures/technic_gold_chest_locked_dark_grey.png
Binary files differ
diff --git a/textures/technic_gold_chest_locked_green.png b/technic/technic/textures/technic_gold_chest_locked_green.png
similarity index 100%
rename from textures/technic_gold_chest_locked_green.png
rename to technic/technic/textures/technic_gold_chest_locked_green.png
Binary files differ
diff --git a/textures/technic_gold_chest_locked_grey.png b/technic/technic/textures/technic_gold_chest_locked_grey.png
similarity index 100%
rename from textures/technic_gold_chest_locked_grey.png
rename to technic/technic/textures/technic_gold_chest_locked_grey.png
Binary files differ
diff --git a/textures/technic_gold_chest_locked_magenta.png b/technic/technic/textures/technic_gold_chest_locked_magenta.png
similarity index 100%
rename from textures/technic_gold_chest_locked_magenta.png
rename to technic/technic/textures/technic_gold_chest_locked_magenta.png
Binary files differ
diff --git a/textures/technic_gold_chest_locked_orange.png b/technic/technic/textures/technic_gold_chest_locked_orange.png
similarity index 100%
rename from textures/technic_gold_chest_locked_orange.png
rename to technic/technic/textures/technic_gold_chest_locked_orange.png
Binary files differ
diff --git a/textures/technic_gold_chest_locked_pink.png b/technic/technic/textures/technic_gold_chest_locked_pink.png
similarity index 100%
rename from textures/technic_gold_chest_locked_pink.png
rename to technic/technic/textures/technic_gold_chest_locked_pink.png
Binary files differ
diff --git a/textures/technic_gold_chest_locked_red.png b/technic/technic/textures/technic_gold_chest_locked_red.png
similarity index 100%
rename from textures/technic_gold_chest_locked_red.png
rename to technic/technic/textures/technic_gold_chest_locked_red.png
Binary files differ
diff --git a/textures/technic_gold_chest_locked_violet.png b/technic/technic/textures/technic_gold_chest_locked_violet.png
similarity index 100%
rename from textures/technic_gold_chest_locked_violet.png
rename to technic/technic/textures/technic_gold_chest_locked_violet.png
Binary files differ
diff --git a/textures/technic_gold_chest_locked_white.png b/technic/technic/textures/technic_gold_chest_locked_white.png
similarity index 100%
rename from textures/technic_gold_chest_locked_white.png
rename to technic/technic/textures/technic_gold_chest_locked_white.png
Binary files differ
diff --git a/textures/technic_gold_chest_locked_yellow.png b/technic/technic/textures/technic_gold_chest_locked_yellow.png
similarity index 100%
rename from textures/technic_gold_chest_locked_yellow.png
rename to technic/technic/textures/technic_gold_chest_locked_yellow.png
Binary files differ
diff --git a/textures/technic_gold_chest_side.png b/technic/technic/textures/technic_gold_chest_side.png
similarity index 100%
rename from textures/technic_gold_chest_side.png
rename to technic/technic/textures/technic_gold_chest_side.png
Binary files differ
diff --git a/textures/technic_gold_chest_top.png b/technic/technic/textures/technic_gold_chest_top.png
similarity index 100%
rename from textures/technic_gold_chest_top.png
rename to technic/technic/textures/technic_gold_chest_top.png
Binary files differ
diff --git a/textures/technic_gold_dust.png b/technic/technic/textures/technic_gold_dust.png
similarity index 100%
rename from textures/technic_gold_dust.png
rename to technic/technic/textures/technic_gold_dust.png
Binary files differ
diff --git a/textures/technic_granite.png b/technic/technic/textures/technic_granite.png
similarity index 100%
rename from textures/technic_granite.png
rename to technic/technic/textures/technic_granite.png
Binary files differ
diff --git a/textures/technic_grinder_front.png b/technic/technic/textures/technic_grinder_front.png
similarity index 100%
rename from textures/technic_grinder_front.png
rename to technic/technic/textures/technic_grinder_front.png
Binary files differ
diff --git a/textures/technic_grinder_side.png b/technic/technic/textures/technic_grinder_side.png
similarity index 100%
rename from textures/technic_grinder_side.png
rename to technic/technic/textures/technic_grinder_side.png
Binary files differ
diff --git a/textures/technic_grinder_top.png b/technic/technic/textures/technic_grinder_top.png
similarity index 100%
rename from textures/technic_grinder_top.png
rename to technic/technic/textures/technic_grinder_top.png
Binary files differ
diff --git a/textures/technic_iron_chest_front.png b/technic/technic/textures/technic_iron_chest_front.png
similarity index 100%
rename from textures/technic_iron_chest_front.png
rename to technic/technic/textures/technic_iron_chest_front.png
Binary files differ
diff --git a/textures/technic_iron_chest_locked.png b/technic/technic/textures/technic_iron_chest_locked.png
similarity index 100%
rename from textures/technic_iron_chest_locked.png
rename to technic/technic/textures/technic_iron_chest_locked.png
Binary files differ
diff --git a/textures/technic_iron_chest_side.png b/technic/technic/textures/technic_iron_chest_side.png
similarity index 100%
rename from textures/technic_iron_chest_side.png
rename to technic/technic/textures/technic_iron_chest_side.png
Binary files differ
diff --git a/textures/technic_iron_chest_top.png b/technic/technic/textures/technic_iron_chest_top.png
similarity index 100%
rename from textures/technic_iron_chest_top.png
rename to technic/technic/textures/technic_iron_chest_top.png
Binary files differ
diff --git a/textures/technic_iron_dust.png b/technic/technic/textures/technic_iron_dust.png
similarity index 100%
rename from textures/technic_iron_dust.png
rename to technic/technic/textures/technic_iron_dust.png
Binary files differ
diff --git a/textures/technic_laser_beam.png b/technic/technic/textures/technic_laser_beam.png
similarity index 100%
rename from textures/technic_laser_beam.png
rename to technic/technic/textures/technic_laser_beam.png
Binary files differ
diff --git a/textures/technic_lava_can.png b/technic/technic/textures/technic_lava_can.png
similarity index 100%
rename from textures/technic_lava_can.png
rename to technic/technic/textures/technic_lava_can.png
Binary files differ
diff --git a/textures/technic_light.png b/technic/technic/textures/technic_light.png
similarity index 100%
rename from textures/technic_light.png
rename to technic/technic/textures/technic_light.png
Binary files differ
diff --git a/textures/technic_lv_cable.png b/technic/technic/textures/technic_lv_cable.png
similarity index 100%
rename from textures/technic_lv_cable.png
rename to technic/technic/textures/technic_lv_cable.png
Binary files differ
diff --git a/textures/technic_lv_cable_wield.png b/technic/technic/textures/technic_lv_cable_wield.png
similarity index 100%
rename from textures/technic_lv_cable_wield.png
rename to technic/technic/textures/technic_lv_cable_wield.png
Binary files differ
diff --git a/textures/technic_machine_bottom.png b/technic/technic/textures/technic_machine_bottom.png
similarity index 100%
rename from textures/technic_machine_bottom.png
rename to technic/technic/textures/technic_machine_bottom.png
Binary files differ
diff --git a/textures/technic_marble.png b/technic/technic/textures/technic_marble.png
similarity index 100%
rename from textures/technic_marble.png
rename to technic/technic/textures/technic_marble.png
Binary files differ
diff --git a/textures/technic_marble_bricks.png b/technic/technic/textures/technic_marble_bricks.png
similarity index 100%
rename from textures/technic_marble_bricks.png
rename to technic/technic/textures/technic_marble_bricks.png
Binary files differ
diff --git a/textures/technic_menu_bg.png b/technic/technic/textures/technic_menu_bg.png
similarity index 100%
rename from textures/technic_menu_bg.png
rename to technic/technic/textures/technic_menu_bg.png
Binary files differ
diff --git a/textures/technic_mineral_chromium.png b/technic/technic/textures/technic_mineral_chromium.png
similarity index 100%
rename from textures/technic_mineral_chromium.png
rename to technic/technic/textures/technic_mineral_chromium.png
Binary files differ
diff --git a/textures/technic_mineral_diamond.png b/technic/technic/textures/technic_mineral_diamond.png
similarity index 100%
rename from textures/technic_mineral_diamond.png
rename to technic/technic/textures/technic_mineral_diamond.png
Binary files differ
diff --git a/textures/technic_mineral_uranium.png b/technic/technic/textures/technic_mineral_uranium.png
similarity index 100%
rename from textures/technic_mineral_uranium.png
rename to technic/technic/textures/technic_mineral_uranium.png
Binary files differ
diff --git a/textures/technic_mineral_zinc.png b/technic/technic/textures/technic_mineral_zinc.png
similarity index 100%
rename from textures/technic_mineral_zinc.png
rename to technic/technic/textures/technic_mineral_zinc.png
Binary files differ
diff --git a/textures/technic_mining_drill.png b/technic/technic/textures/technic_mining_drill.png
similarity index 100%
rename from textures/technic_mining_drill.png
rename to technic/technic/textures/technic_mining_drill.png
Binary files differ
diff --git a/textures/technic_mining_laser_mk1.png b/technic/technic/textures/technic_mining_laser_mk1.png
similarity index 100%
rename from textures/technic_mining_laser_mk1.png
rename to technic/technic/textures/technic_mining_laser_mk1.png
Binary files differ
diff --git a/textures/technic_mithril_chest_front.png b/technic/technic/textures/technic_mithril_chest_front.png
similarity index 100%
rename from textures/technic_mithril_chest_front.png
rename to technic/technic/textures/technic_mithril_chest_front.png
Binary files differ
diff --git a/textures/technic_mithril_chest_locked.png b/technic/technic/textures/technic_mithril_chest_locked.png
similarity index 100%
rename from textures/technic_mithril_chest_locked.png
rename to technic/technic/textures/technic_mithril_chest_locked.png
Binary files differ
diff --git a/textures/technic_mithril_chest_side.png b/technic/technic/textures/technic_mithril_chest_side.png
similarity index 100%
rename from textures/technic_mithril_chest_side.png
rename to technic/technic/textures/technic_mithril_chest_side.png
Binary files differ
diff --git a/textures/technic_mithril_chest_top.png b/technic/technic/textures/technic_mithril_chest_top.png
similarity index 100%
rename from textures/technic_mithril_chest_top.png
rename to technic/technic/textures/technic_mithril_chest_top.png
Binary files differ
diff --git a/textures/technic_mithril_dust.png b/technic/technic/textures/technic_mithril_dust.png
similarity index 100%
rename from textures/technic_mithril_dust.png
rename to technic/technic/textures/technic_mithril_dust.png
Binary files differ
diff --git a/textures/technic_motor.png b/technic/technic/textures/technic_motor.png
similarity index 100%
rename from textures/technic_motor.png
rename to technic/technic/textures/technic_motor.png
Binary files differ
diff --git a/textures/technic_music_player_bottom.png b/technic/technic/textures/technic_music_player_bottom.png
similarity index 100%
rename from textures/technic_music_player_bottom.png
rename to technic/technic/textures/technic_music_player_bottom.png
Binary files differ
diff --git a/textures/technic_music_player_side.png b/technic/technic/textures/technic_music_player_side.png
similarity index 100%
rename from textures/technic_music_player_side.png
rename to technic/technic/textures/technic_music_player_side.png
Binary files differ
diff --git a/textures/technic_music_player_top.png b/technic/technic/textures/technic_music_player_top.png
similarity index 100%
rename from textures/technic_music_player_top.png
rename to technic/technic/textures/technic_music_player_top.png
Binary files differ
diff --git a/textures/technic_mv_battery_box_bottom.png b/technic/technic/textures/technic_mv_battery_box_bottom.png
similarity index 100%
rename from textures/technic_mv_battery_box_bottom.png
rename to technic/technic/textures/technic_mv_battery_box_bottom.png
Binary files differ
diff --git a/textures/technic_mv_battery_box_side0.png b/technic/technic/textures/technic_mv_battery_box_side0.png
similarity index 100%
rename from textures/technic_mv_battery_box_side0.png
rename to technic/technic/textures/technic_mv_battery_box_side0.png
Binary files differ
diff --git a/textures/technic_mv_battery_box_top.png b/technic/technic/textures/technic_mv_battery_box_top.png
similarity index 100%
rename from textures/technic_mv_battery_box_top.png
rename to technic/technic/textures/technic_mv_battery_box_top.png
Binary files differ
diff --git a/textures/technic_mv_cable.png b/technic/technic/textures/technic_mv_cable.png
similarity index 100%
rename from textures/technic_mv_cable.png
rename to technic/technic/textures/technic_mv_cable.png
Binary files differ
diff --git a/textures/technic_mv_cable_wield.png b/technic/technic/textures/technic_mv_cable_wield.png
similarity index 100%
rename from textures/technic_mv_cable_wield.png
rename to technic/technic/textures/technic_mv_cable_wield.png
Binary files differ
diff --git a/textures/technic_mv_solar_panel_bottom.png b/technic/technic/textures/technic_mv_solar_panel_bottom.png
similarity index 100%
rename from textures/technic_mv_solar_panel_bottom.png
rename to technic/technic/textures/technic_mv_solar_panel_bottom.png
Binary files differ
diff --git a/textures/technic_mv_solar_panel_side.png b/technic/technic/textures/technic_mv_solar_panel_side.png
similarity index 100%
rename from textures/technic_mv_solar_panel_side.png
rename to technic/technic/textures/technic_mv_solar_panel_side.png
Binary files differ
diff --git a/textures/technic_mv_solar_panel_top.png b/technic/technic/textures/technic_mv_solar_panel_top.png
similarity index 100%
rename from textures/technic_mv_solar_panel_top.png
rename to technic/technic/textures/technic_mv_solar_panel_top.png
Binary files differ
diff --git a/textures/technic_mv_transformer.png b/technic/technic/textures/technic_mv_transformer.png
similarity index 100%
rename from textures/technic_mv_transformer.png
rename to technic/technic/textures/technic_mv_transformer.png
Binary files differ
diff --git a/textures/technic_nodebreaker_back.png b/technic/technic/textures/technic_nodebreaker_back.png
similarity index 100%
rename from textures/technic_nodebreaker_back.png
rename to technic/technic/textures/technic_nodebreaker_back.png
Binary files differ
diff --git a/textures/technic_nodebreaker_bottom.png b/technic/technic/textures/technic_nodebreaker_bottom.png
similarity index 100%
rename from textures/technic_nodebreaker_bottom.png
rename to technic/technic/textures/technic_nodebreaker_bottom.png
Binary files differ
diff --git a/textures/technic_nodebreaker_bottom_off.png b/technic/technic/textures/technic_nodebreaker_bottom_off.png
similarity index 100%
rename from textures/technic_nodebreaker_bottom_off.png
rename to technic/technic/textures/technic_nodebreaker_bottom_off.png
Binary files differ
diff --git a/textures/technic_nodebreaker_bottom_on.png b/technic/technic/textures/technic_nodebreaker_bottom_on.png
similarity index 100%
rename from textures/technic_nodebreaker_bottom_on.png
rename to technic/technic/textures/technic_nodebreaker_bottom_on.png
Binary files differ
diff --git a/textures/technic_nodebreaker_front_off.png b/technic/technic/textures/technic_nodebreaker_front_off.png
similarity index 100%
rename from textures/technic_nodebreaker_front_off.png
rename to technic/technic/textures/technic_nodebreaker_front_off.png
Binary files differ
diff --git a/textures/technic_nodebreaker_front_on.png b/technic/technic/textures/technic_nodebreaker_front_on.png
similarity index 100%
rename from textures/technic_nodebreaker_front_on.png
rename to technic/technic/textures/technic_nodebreaker_front_on.png
Binary files differ
diff --git a/textures/technic_nodebreaker_side.png b/technic/technic/textures/technic_nodebreaker_side.png
similarity index 100%
rename from textures/technic_nodebreaker_side.png
rename to technic/technic/textures/technic_nodebreaker_side.png
Binary files differ
diff --git a/textures/technic_nodebreaker_side1.png b/technic/technic/textures/technic_nodebreaker_side1.png
similarity index 100%
rename from textures/technic_nodebreaker_side1.png
rename to technic/technic/textures/technic_nodebreaker_side1.png
Binary files differ
diff --git a/textures/technic_nodebreaker_side1_off.png b/technic/technic/textures/technic_nodebreaker_side1_off.png
similarity index 100%
rename from textures/technic_nodebreaker_side1_off.png
rename to technic/technic/textures/technic_nodebreaker_side1_off.png
Binary files differ
diff --git a/textures/technic_nodebreaker_side1_on.png b/technic/technic/textures/technic_nodebreaker_side1_on.png
similarity index 100%
rename from textures/technic_nodebreaker_side1_on.png
rename to technic/technic/textures/technic_nodebreaker_side1_on.png
Binary files differ
diff --git a/textures/technic_nodebreaker_side2.png b/technic/technic/textures/technic_nodebreaker_side2.png
similarity index 100%
rename from textures/technic_nodebreaker_side2.png
rename to technic/technic/textures/technic_nodebreaker_side2.png
Binary files differ
diff --git a/textures/technic_nodebreaker_side2_off.png b/technic/technic/textures/technic_nodebreaker_side2_off.png
similarity index 100%
rename from textures/technic_nodebreaker_side2_off.png
rename to technic/technic/textures/technic_nodebreaker_side2_off.png
Binary files differ
diff --git a/textures/technic_nodebreaker_side2_on.png b/technic/technic/textures/technic_nodebreaker_side2_on.png
similarity index 100%
rename from textures/technic_nodebreaker_side2_on.png
rename to technic/technic/textures/technic_nodebreaker_side2_on.png
Binary files differ
diff --git a/textures/technic_nodebreaker_top.png b/technic/technic/textures/technic_nodebreaker_top.png
similarity index 100%
rename from textures/technic_nodebreaker_top.png
rename to technic/technic/textures/technic_nodebreaker_top.png
Binary files differ
diff --git a/textures/technic_nodebreaker_top_off.png b/technic/technic/textures/technic_nodebreaker_top_off.png
similarity index 100%
rename from textures/technic_nodebreaker_top_off.png
rename to technic/technic/textures/technic_nodebreaker_top_off.png
Binary files differ
diff --git a/textures/technic_nodebreaker_top_on.png b/technic/technic/textures/technic_nodebreaker_top_on.png
similarity index 100%
rename from textures/technic_nodebreaker_top_on.png
rename to technic/technic/textures/technic_nodebreaker_top_on.png
Binary files differ
diff --git a/textures/technic_power_meter.png b/technic/technic/textures/technic_power_meter.png
similarity index 100%
rename from textures/technic_power_meter.png
rename to technic/technic/textures/technic_power_meter.png
Binary files differ
diff --git a/textures/technic_power_meter1.png b/technic/technic/textures/technic_power_meter1.png
similarity index 100%
rename from textures/technic_power_meter1.png
rename to technic/technic/textures/technic_power_meter1.png
Binary files differ
diff --git a/textures/technic_power_meter2.png b/technic/technic/textures/technic_power_meter2.png
similarity index 100%
rename from textures/technic_power_meter2.png
rename to technic/technic/textures/technic_power_meter2.png
Binary files differ
diff --git a/textures/technic_power_meter3.png b/technic/technic/textures/technic_power_meter3.png
similarity index 100%
rename from textures/technic_power_meter3.png
rename to technic/technic/textures/technic_power_meter3.png
Binary files differ
diff --git a/textures/technic_power_meter4.png b/technic/technic/textures/technic_power_meter4.png
similarity index 100%
rename from textures/technic_power_meter4.png
rename to technic/technic/textures/technic_power_meter4.png
Binary files differ
diff --git a/textures/technic_power_meter5.png b/technic/technic/textures/technic_power_meter5.png
similarity index 100%
rename from textures/technic_power_meter5.png
rename to technic/technic/textures/technic_power_meter5.png
Binary files differ
diff --git a/textures/technic_power_meter6.png b/technic/technic/textures/technic_power_meter6.png
similarity index 100%
rename from textures/technic_power_meter6.png
rename to technic/technic/textures/technic_power_meter6.png
Binary files differ
diff --git a/textures/technic_power_meter7.png b/technic/technic/textures/technic_power_meter7.png
similarity index 100%
rename from textures/technic_power_meter7.png
rename to technic/technic/textures/technic_power_meter7.png
Binary files differ
diff --git a/textures/technic_power_meter8.png b/technic/technic/textures/technic_power_meter8.png
similarity index 100%
rename from textures/technic_power_meter8.png
rename to technic/technic/textures/technic_power_meter8.png
Binary files differ
diff --git a/textures/technic_power_meter_bg.png b/technic/technic/textures/technic_power_meter_bg.png
similarity index 100%
rename from textures/technic_power_meter_bg.png
rename to technic/technic/textures/technic_power_meter_bg.png
Binary files differ
diff --git a/textures/technic_power_meter_fg.png b/technic/technic/textures/technic_power_meter_fg.png
similarity index 100%
rename from textures/technic_power_meter_fg.png
rename to technic/technic/textures/technic_power_meter_fg.png
Binary files differ
diff --git a/textures/technic_raw_latex.png b/technic/technic/textures/technic_raw_latex.png
similarity index 100%
rename from textures/technic_raw_latex.png
rename to technic/technic/textures/technic_raw_latex.png
Binary files differ
diff --git a/textures/technic_rebar.png b/technic/technic/textures/technic_rebar.png
similarity index 100%
rename from textures/technic_rebar.png
rename to technic/technic/textures/technic_rebar.png
Binary files differ
diff --git a/textures/technic_rubber.png b/technic/technic/textures/technic_rubber.png
similarity index 100%
rename from textures/technic_rubber.png
rename to technic/technic/textures/technic_rubber.png
Binary files differ
diff --git a/textures/technic_rubber_sapling.png b/technic/technic/textures/technic_rubber_sapling.png
similarity index 100%
rename from textures/technic_rubber_sapling.png
rename to technic/technic/textures/technic_rubber_sapling.png
Binary files differ
diff --git a/textures/technic_rubber_tree_empty.png b/technic/technic/textures/technic_rubber_tree_empty.png
similarity index 100%
rename from textures/technic_rubber_tree_empty.png
rename to technic/technic/textures/technic_rubber_tree_empty.png
Binary files differ
diff --git a/textures/technic_rubber_tree_full.png b/technic/technic/textures/technic_rubber_tree_full.png
similarity index 100%
rename from textures/technic_rubber_tree_full.png
rename to technic/technic/textures/technic_rubber_tree_full.png
Binary files differ
diff --git a/textures/technic_screwdriver.png b/technic/technic/textures/technic_screwdriver.png
similarity index 100%
rename from textures/technic_screwdriver.png
rename to technic/technic/textures/technic_screwdriver.png
Binary files differ
diff --git a/textures/technic_silicon_wafer.png b/technic/technic/textures/technic_silicon_wafer.png
similarity index 100%
rename from textures/technic_silicon_wafer.png
rename to technic/technic/textures/technic_silicon_wafer.png
Binary files differ
diff --git a/textures/technic_silver_chest_front.png b/technic/technic/textures/technic_silver_chest_front.png
similarity index 100%
rename from textures/technic_silver_chest_front.png
rename to technic/technic/textures/technic_silver_chest_front.png
Binary files differ
diff --git a/textures/technic_silver_chest_locked.png b/technic/technic/textures/technic_silver_chest_locked.png
similarity index 100%
rename from textures/technic_silver_chest_locked.png
rename to technic/technic/textures/technic_silver_chest_locked.png
Binary files differ
diff --git a/textures/technic_silver_chest_side.png b/technic/technic/textures/technic_silver_chest_side.png
similarity index 100%
rename from textures/technic_silver_chest_side.png
rename to technic/technic/textures/technic_silver_chest_side.png
Binary files differ
diff --git a/textures/technic_silver_chest_top.png b/technic/technic/textures/technic_silver_chest_top.png
similarity index 100%
rename from textures/technic_silver_chest_top.png
rename to technic/technic/textures/technic_silver_chest_top.png
Binary files differ
diff --git a/textures/technic_silver_dust.png b/technic/technic/textures/technic_silver_dust.png
similarity index 100%
rename from textures/technic_silver_dust.png
rename to technic/technic/textures/technic_silver_dust.png
Binary files differ
diff --git a/textures/technic_solar_panel_bottom.png b/technic/technic/textures/technic_solar_panel_bottom.png
similarity index 100%
rename from textures/technic_solar_panel_bottom.png
rename to technic/technic/textures/technic_solar_panel_bottom.png
Binary files differ
diff --git a/textures/technic_solar_panel_side.png b/technic/technic/textures/technic_solar_panel_side.png
similarity index 100%
rename from textures/technic_solar_panel_side.png
rename to technic/technic/textures/technic_solar_panel_side.png
Binary files differ
diff --git a/textures/technic_solar_panel_top.png b/technic/technic/textures/technic_solar_panel_top.png
similarity index 100%
rename from textures/technic_solar_panel_top.png
rename to technic/technic/textures/technic_solar_panel_top.png
Binary files differ
diff --git a/textures/technic_sonic_screwdriver.png b/technic/technic/textures/technic_sonic_screwdriver.png
similarity index 100%
rename from textures/technic_sonic_screwdriver.png
rename to technic/technic/textures/technic_sonic_screwdriver.png
Binary files differ
diff --git a/textures/technic_stainless_steel_dust.png b/technic/technic/textures/technic_stainless_steel_dust.png
similarity index 100%
rename from textures/technic_stainless_steel_dust.png
rename to technic/technic/textures/technic_stainless_steel_dust.png
Binary files differ
diff --git a/textures/technic_stainless_steel_ingot.png b/technic/technic/textures/technic_stainless_steel_ingot.png
similarity index 100%
rename from textures/technic_stainless_steel_ingot.png
rename to technic/technic/textures/technic_stainless_steel_ingot.png
Binary files differ
diff --git a/textures/technic_tin_dust.png b/technic/technic/textures/technic_tin_dust.png
similarity index 100%
rename from textures/technic_tin_dust.png
rename to technic/technic/textures/technic_tin_dust.png
Binary files differ
diff --git a/textures/technic_tree_tap.png b/technic/technic/textures/technic_tree_tap.png
similarity index 100%
rename from textures/technic_tree_tap.png
rename to technic/technic/textures/technic_tree_tap.png
Binary files differ
diff --git a/textures/technic_uranium.png b/technic/technic/textures/technic_uranium.png
similarity index 100%
rename from textures/technic_uranium.png
rename to technic/technic/textures/technic_uranium.png
Binary files differ
diff --git a/textures/technic_water_can.png b/technic/technic/textures/technic_water_can.png
similarity index 100%
rename from textures/technic_water_can.png
rename to technic/technic/textures/technic_water_can.png
Binary files differ
diff --git a/textures/technic_water_mill_side.png b/technic/technic/textures/technic_water_mill_side.png
similarity index 100%
rename from textures/technic_water_mill_side.png
rename to technic/technic/textures/technic_water_mill_side.png
Binary files differ
diff --git a/textures/technic_water_mill_top.png b/technic/technic/textures/technic_water_mill_top.png
similarity index 100%
rename from textures/technic_water_mill_top.png
rename to technic/technic/textures/technic_water_mill_top.png
Binary files differ
diff --git a/textures/technic_water_mill_top_active.png b/technic/technic/textures/technic_water_mill_top_active.png
similarity index 100%
rename from textures/technic_water_mill_top_active.png
rename to technic/technic/textures/technic_water_mill_top_active.png
Binary files differ
diff --git a/textures/technic_workshop_bottom.png b/technic/technic/textures/technic_workshop_bottom.png
similarity index 100%
rename from textures/technic_workshop_bottom.png
rename to technic/technic/textures/technic_workshop_bottom.png
Binary files differ
diff --git a/textures/technic_workshop_side.png b/technic/technic/textures/technic_workshop_side.png
similarity index 100%
rename from textures/technic_workshop_side.png
rename to technic/technic/textures/technic_workshop_side.png
Binary files differ
diff --git a/textures/technic_workshop_top.png b/technic/technic/textures/technic_workshop_top.png
similarity index 100%
rename from textures/technic_workshop_top.png
rename to technic/technic/textures/technic_workshop_top.png
Binary files differ
diff --git a/textures/technic_zinc_dust.png b/technic/technic/textures/technic_zinc_dust.png
similarity index 100%
rename from textures/technic_zinc_dust.png
rename to technic/technic/textures/technic_zinc_dust.png
Binary files differ
diff --git a/textures/technic_zinc_ingot.png b/technic/technic/textures/technic_zinc_ingot.png
similarity index 100%
rename from textures/technic_zinc_ingot.png
rename to technic/technic/textures/technic_zinc_ingot.png
Binary files differ
diff --git a/textures/technic_zinc_lump.png b/technic/technic/textures/technic_zinc_lump.png
similarity index 100%
rename from textures/technic_zinc_lump.png
rename to technic/technic/textures/technic_zinc_lump.png
Binary files differ
diff --git a/technic/technic/textures/tetris_machine_front1.png b/technic/technic/textures/tetris_machine_front1.png
new file mode 100644
index 0000000..747bdd2
--- /dev/null
+++ b/technic/technic/textures/tetris_machine_front1.png
Binary files differ
diff --git a/technic/technic/textures/tetris_machine_front2.png b/technic/technic/textures/tetris_machine_front2.png
new file mode 100644
index 0000000..3ad0908
--- /dev/null
+++ b/technic/technic/textures/tetris_machine_front2.png
Binary files differ
diff --git a/technic/technic/textures/tetris_machine_side1B.png b/technic/technic/textures/tetris_machine_side1B.png
new file mode 100644
index 0000000..de1e034
--- /dev/null
+++ b/technic/technic/textures/tetris_machine_side1B.png
Binary files differ
diff --git a/technic/technic/textures/tetris_machine_side1L.png b/technic/technic/textures/tetris_machine_side1L.png
new file mode 100644
index 0000000..73942cf
--- /dev/null
+++ b/technic/technic/textures/tetris_machine_side1L.png
Binary files differ
diff --git a/technic/technic/textures/tetris_machine_side1P.png b/technic/technic/textures/tetris_machine_side1P.png
new file mode 100644
index 0000000..73942cf
--- /dev/null
+++ b/technic/technic/textures/tetris_machine_side1P.png
Binary files differ
diff --git a/technic/technic/textures/tetris_machine_side2B.png b/technic/technic/textures/tetris_machine_side2B.png
new file mode 100644
index 0000000..e8e42fe
--- /dev/null
+++ b/technic/technic/textures/tetris_machine_side2B.png
Binary files differ
diff --git a/technic/technic/textures/tetris_machine_side2L.png b/technic/technic/textures/tetris_machine_side2L.png
new file mode 100644
index 0000000..a619eb3
--- /dev/null
+++ b/technic/technic/textures/tetris_machine_side2L.png
Binary files differ
diff --git a/technic/technic/textures/tetris_machine_side2P.png b/technic/technic/textures/tetris_machine_side2P.png
new file mode 100644
index 0000000..650fc3b
--- /dev/null
+++ b/technic/technic/textures/tetris_machine_side2P.png
Binary files differ
diff --git a/technic/technic/textures/tetris_machine_top.png b/technic/technic/textures/tetris_machine_top.png
new file mode 100644
index 0000000..f1c3ac2
--- /dev/null
+++ b/technic/technic/textures/tetris_machine_top.png
Binary files differ
diff --git a/tool_workshop.lua b/technic/technic/tool_workshop.lua
similarity index 100%
rename from tool_workshop.lua
rename to technic/technic/tool_workshop.lua
diff --git a/tree_tap.lua b/technic/technic/tree_tap.lua
similarity index 95%
rename from tree_tap.lua
rename to technic/technic/tree_tap.lua
index 76f50ef..107faed 100644
--- a/tree_tap.lua
+++ b/technic/technic/tree_tap.lua
@@ -7,7 +7,7 @@
                             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()
diff --git a/technic/technic/water.lua b/technic/technic/water.lua
new file mode 100644
index 0000000..6ddaa46
--- /dev/null
+++ b/technic/technic/water.lua
@@ -0,0 +1,588 @@
+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,
+}) 
\ No newline at end of file
diff --git a/water_mill.lua b/technic/technic/water_mill.lua
similarity index 100%
rename from water_mill.lua
rename to technic/technic/water_mill.lua
diff --git a/wires.lua b/technic/technic/wires.lua
similarity index 100%
rename from wires.lua
rename to technic/technic/wires.lua
diff --git a/wires_mv.lua b/technic/technic/wires_mv.lua
similarity index 100%
rename from wires_mv.lua
rename to technic/technic/wires_mv.lua

--
Gitblit v1.8.0