From 82cba919fa8c6872718cf3f47520299f40ea700b Mon Sep 17 00:00:00 2001
From: RealBadAngel <mk@realbadangel.pl>
Date: Sun, 27 Jan 2013 14:03:47 +0100
Subject: [PATCH] cleanup phase2

---
 technic/battery_box_mv.lua                                              |  321 ++
 technic/textures/technicx32/technic_nodebreaker_side2_off.png           |    0 
 technic/textures/technicx32/technic_battery_box_side0.png               |    0 
 technic/textures/technic_battery_box_side_mv.png                        |    0 
 technic/textures/technic_tree_tap.png                                   |    0 
 technic/textures/technicx32/technic_copper_chest_locked.png             |    0 
 technic/solar_panel.lua                                                 |   76 
 technic/textures/technic_coal_alloy_furnace_top.png                     |    0 
 technic/textures/power_meter.png                                        |    0 
 technic/textures/technicx32/technic_brass_ingot.png                     |    0 
 technic/textures/technicx32/technic_mineral_zinc.png                    |    0 
 technic/textures/technic_gold_chest_locked_violet.png                   |    0 
 technic/textures/technic_gold_chest_top.png                             |    0 
 technic/textures/technic_tin_dust.png                                   |    0 
 technic/textures/technicx32/technic_water_mill_top.png                  |    0 
 technic/textures/technic_iron_chest_top.png                             |    0 
 technic/textures/technic_constructor_mk3_side2_on.png                   |    0 
 technic/textures/technicx32/technic_concrete_block.png                  |    0 
 technic/textures/technicx32/technic_electric_furnace_front_active.png   |    0 
 technic/textures/technicx32/technic_gold_chest_front.png                |    0 
 technic/textures/technic_mv_solarpanel_bottom.png                       |    0 
 technic/textures/technicx32/technic_gold_chest_front_blue.png           |    0 
 technic/textures/technicx32/technic_gold_chest_locked.png               |    0 
 technic/textures/technicx32/technic_zinc_ingot.png                      |    0 
 technic/textures/technicx32/technic_light.png                           |    0 
 technic/textures/technic_constructor_mk1_side2_off.png                  |    0 
 technic/textures/technicx32/technic_mv_cable_wield.png                  |    0 
 technic/screwdriver.lua                                                 |   47 
 technic/textures/technic_zinc_dust.png                                  |    0 
 technic/textures/technic_deployer_side1.png                             |    0 
 technic/textures/technic_gold_chest_front_red.png                       |    0 
 technic/geothermal.lua                                                  |  135 
 technic/textures/technicx32/technic_coal_alloy_furnace_front.png        |    0 
 technic/textures/technic_power_meter3.png                               |    0 
 technic/textures/technicx32/technic_nodebreaker_front_off.png           |    0 
 technic/textures/technicx32/technic_solar_panel_side.png                |    0 
 technic/injector.lua                                                    |  325 ++
 technic/textures/technic_brass_dust.png                                 |    0 
 technic/mithril_chest.lua                                               |  145 +
 technic/textures/technic_nodebreaker_front_off.png                      |    0 
 technic/rubber.lua                                                      |  121 
 technic/textures/technic_grinder_front.png                              |    0 
 technic/textures/technicx32/technic_gold_chest_front_black.png          |    0 
 technic/textures/technic_marble_bricks.png                              |    0 
 technic/textures/technic_zinc_lump.png                                  |    0 
 technic/textures/technic_mithril_dust.png                               |    0 
 technic/textures/technic_nodebreaker_bottom_off.png                     |    0 
 technic/textures/technic_generator_front_active.png                     |    0 
 technic/textures/technicx32/technic_silver_chest_front.png              |    0 
 technic/wires.lua                                                       |  401 ++
 technic/tool_workshop.lua                                               |   97 
 technic/textures/technicx32/technic_raw_latex.png                       |    0 
 technic/textures/technic_gold_chest_front_pink.png                      |    0 
 technic/solar_panel_mv.lua                                              |   76 
 technic/textures/technic_concrete_block.png                             |    0 
 technic/textures/technic_chromium_lump.png                              |    0 
 technic/textures/technicx32/technic_constructor_mk3_top_on.png          |    0 
 technic/textures/technicx32/technic_gold_chest_locked_grey.png          |    0 
 technic/textures/technicx32/technic_mv_cable.png                        |    0 
 technic/textures/technic_silver_chest_front.png                         |    0 
 technic/textures/technicx32/technic_electric_furnace_front.png          |    0 
 technic/textures/technic_obsidian.png                                   |    0 
 technic/textures/technicx32/technic_copper_chest_side.png               |    0 
 technic/textures/technic_gold_chest_locked_red.png                      |    0 
 technic/textures/technic_rubber_tree_empty.png                          |    0 
 technic/textures/technicx32/technic_gold_chest_top.png                  |    0 
 technic/textures/technic_gold_chest_locked_blue.png                     |    0 
 technic/textures/technic_nodebreaker_bottom.png                         |    0 
 technic/textures/technicx32/technic_gold_chest_locked_white.png         |    0 
 technic/textures/technicx32/technic_battery_box_top.png                 |    0 
 technic/textures/technicx32/technic_constructor_mk1_top_off.png         |    0 
 technic/textures/technic_electric_furnace_side.png                      |    0 
 technic/textures/technicx32/technic_iron_chest_front.png                |    0 
 technic/textures/technicx32/technic_mv_battery_box_side0.png            |    0 
 technic/textures/technicx32/technic_gold_chest_front_yellow.png         |    0 
 technic/textures/technicx32/technic_diamond.png                         |    0 
 technic/textures/technic_deployer_side2.png                             |    0 
 technic/textures/technicx32/technic_constructor_mk3_top_off.png         |    0 
 technic/textures/technic_water_mill_top.png                             |    0 
 technic/gold_chest.lua                                                  |  466 +++
 technic/textures/technicx32/technic_mv_transformer.png                  |    0 
 technic/textures/technicx32/technic_power_meter6.png                    |    0 
 technic/ores.lua                                                        |  339 ++
 technic/textures/technic_mv_cable_wield.png                             |    0 
 technic/textures/technic_mv_transformer.png                             |    0 
 technic/textures/technicx32/technic_deployer_side1.png                  |    0 
 technic/textures/technicx32/technic_mithril_chest_top.png               |    0 
 technic/textures/technicx32/technic_gold_chest_front_orange.png         |    0 
 technic/textures/technicx32/technic_mining_laser_mk1.png                |    0 
 technic/textures/technicx32/technic_electric_furnace_side.png           |    0 
 technic/textures/technic_mithril_chest_front.png                        |    0 
 technic/textures/technicx32/technic_constructor_mk1_side2_off.png       |    0 
 technic/textures/technicx32/technic_power_meter5.png                    |    0 
 technic/textures/technicx32/technic_rubber_tree_full.png                |    0 
 technic/textures/technic_constructor_front_off.png                      |    0 
 technic/textures/technicx32/technic_mineral_chromium.png                |    0 
 technic/textures/technic_power_meter4.png                               |    0 
 technic/textures/technic_chromium_ingot.png                             |    0 
 technic/textures/technicx32/technic_gold_chest_side.png                 |    0 
 technic/textures/technic_constructor_mk2_side1_on.png                   |    0 
 technic/textures/technicx32/technic_machine_bottom.png                  |    0 
 technic/music_player.lua                                                |  126 
 technic/textures/technic_mithril_chest_side.png                         |    0 
 technic/textures/technicx32/technic_zinc_dust.png                       |    0 
 technic/textures/technicx32/technic_constructor_mk2_side2_off.png       |    0 
 technic/textures/technic_gold_dust.png                                  |    0 
 technic/textures/technic_diamond_block_red.png                          |    0 
 technic/textures/technic_diamond_drill_head.png                         |    0 
 technic/textures/technicx32/technic_gold_chest_locked_green.png         |    0 
 technic/textures/technicx32/technic_silver_dust.png                     |    0 
 technic/textures/technicx32/technic_nodebreaker_side1_on.png            |    0 
 technic/textures/technic_gold_chest_front_dark_green.png                |    0 
 technic/textures/technic_mining_drill.png                               |    0 
 technic/textures/technic_deployer_bottom.png                            |    0 
 technic/textures/technicx32/technic_workshop_bottom.png                 |    0 
 technic/textures/technic_silicon_wafer.png                              |    0 
 technic/textures/technicx32/technic_power_meter_fg.png                  |    0 
 technic/textures/technicx32/technic_constructor_front_on.png            |    0 
 technic/wires_mv.lua                                                    |  400 ++
 technic/textures/technic_granite.png                                    |    0 
 technic/textures/technicx32/technic_silver_chest_top.png                |    0 
 technic/textures/technicx32/technic_nodebreaker_back.png                |    0 
 technic/textures/technicx32/technic_music_player_top.png                |    0 
 technic/textures/technicx32/technic_alloy_furnace_side.png              |    0 
 technic/textures/technicx32/technic_nodebreaker_side2.png               |    0 
 technic/textures/technicx32/technic_constructor_mk3_side2_off.png       |    0 
 technic/textures/technicx32/technic_workshop_top.png                    |    0 
 technic/textures/technic_alloy_furnace_front_active.png                 |    0 
 technic/textures/technic_constructor_mk2_top_on.png                     |    0 
 technic/textures/technic_laser_beam.png                                 |    0 
 technic/copper_chest.lua                                                |   95 
 technic/textures/technicx32/technic_lv_cable.png                        |    0 
 technic/textures/technic_mineral_uranium.png                            |    0 
 technic/textures/technicx32/technic_uranium.png                         |    0 
 technic/textures/technicx32/technic_water_mill_side.png                 |    0 
 technic/textures/technic_nodebreaker_top.png                            |    0 
 technic/textures/technicx32/technic_alloy_furnace_front_active.png      |    0 
 technic/electric.lua                                                    |  268 +
 technic/textures/technic_gold_chest_locked_brown.png                    |    0 
 technic/textures/technicx32/technic_nodebreaker_side2_on.png            |    0 
 technic/textures/technic_silver_chest_top.png                           |    0 
 technic/textures/technicx32/technic_alloy_furnace_top.png               |    0 
 technic/textures/technic_copper_chest_front.png                         |    0 
 technic/textures/technic_mineral_chromium.png                           |    0 
 technic/textures/technicx32/technic_chainsaw.png                        |    0 
 technic/textures/technic_power_meter2.png                               |    0 
 technic/textures/technicx32/technic_bronze_dust.png                     |    0 
 technic/textures/technicx32/technic_mithril_dust.png                    |    0 
 technic/concrete.lua                                                    |   83 
 technic/textures/technicx32/technic_generator_front.png                 |    0 
 technic/textures/technicx32/technic_mithril_chest_locked.png            |    0 
 technic/textures/technicx32/technic_marble.png                          |    0 
 technic/flashlight_old.lua                                              |  176 +
 technic/textures/technicx32/technic_power_meter_bg.png                  |    0 
 technic/textures/technicx32/technic_copper_coil.png                     |    0 
 technic/textures/technicx32/technic_grinder_side.png                    |    0 
 technic/textures/technic_gold_chest_locked_black.png                    |    0 
 technic/textures/technicx32/technic_power_meter7.png                    |    0 
 technic/textures/technic_mv_solarpanel_side.png                         |    0 
 technic/textures/technic_lv_cable.png                                   |    0 
 technic/textures/technic_battery.png                                    |    0 
 technic/generator.lua                                                   |  148 +
 technic/textures/technic_music_player_top.png                           |    0 
 technic/textures/technic_nodebreaker_back.png                           |    0 
 technic/textures/technic_marble.png                                     |    0 
 technic/textures/technicx32/technic_constructor_mk2_side2_on.png        |    0 
 technic/textures/technic_mv_cable.png                                   |    0 
 technic/textures/technic_silver_chest_side.png                          |    0 
 technic/textures/technic_power_meter_fg.png                             |    0 
 technic/textures/technicx32/technic_lv_cable_wield.png                  |    0 
 technic/textures/technic_iron_chest_side.png                            |    0 
 technic/textures/technicx32/technic_gold_chest_front_white.png          |    0 
 technic/textures/technicx32/technic_rubber_tree_empty.png               |    0 
 technic/textures/technic_solar_panel_top.png                            |    0 
 technic/textures/technic_gold_chest_front_dark_grey.png                 |    0 
 technic/textures/technicx32/technic_mineral_diamond.png                 |    0 
 technic/textures/technic_generator_front.png                            |    0 
 technic/textures/technic_gold_chest_locked_cyan.png                     |    0 
 technic/textures/technic_constructor_mk1_side1_off.png                  |    0 
 technic/textures/technicx32/technic_nodebreaker_side1.png               |    0 
 technic/textures/technic_gold_chest_locked_green.png                    |    0 
 technic/textures/technicx32/technic_iron_dust.png                       |    0 
 technic/textures/technicx32/technic_generator_top.png                   |    0 
 technic/textures/technicx32/technic_rebar.png                           |    0 
 technic/textures/technicx32/technic_stainless_steel_ingot.png           |    0 
 technic/textures/technicx32/technic_music_player_side.png               |    0 
 technic/textures/technicx32/technic_constructor_mk1_side1_off.png       |    0 
 technic/textures/technicx32/technic_coal_alloy_furnace_front_active.png |    0 
 technic/textures/technic_constructor_mk1_side2_on.png                   |    0 
 technic/textures/technic_constructor_mk1_side1_on.png                   |    0 
 technic/textures/technicx32/technic_tin_dust.png                        |    0 
 technic/textures/technicx32/technic_gold_chest_front_violet.png         |    0 
 technic/textures/technic_gold_chest_front_white.png                     |    0 
 technic/textures/technicx32/technic_chromium_dust.png                   |    0 
 technic/textures/technic_constructor_back.png                           |    0 
 technic/textures/technic_generator_side.png                             |    0 
 technic/textures/technic_constructor_mk1_top_on.png                     |    0 
 technic/textures/technic_electric_furnace_top.png                       |    0 
 technic/textures/technicx32/technic_battery.png                         |    0 
 technic/textures/technicx32/technic_constructor_mk2_top_off.png         |    0 
 technic/textures/technic_bronze_dust.png                                |    0 
 technic/textures/technic_power_meter1.png                               |    0 
 technic/textures/technicx32/technic_constructor_back.png                |    0 
 technic/textures/technic_nodebreaker_side2_off.png                      |    0 
 technic/textures/technicx32/technic_deployer_back.png                   |    0 
 technic/textures/technicx32/technic_screwdriver.png                     |    0 
 technic/textures/technicx32/technic_nodebreaker_bottom.png              |    0 
 technic/textures/technic_deployer_side.png                              |    0 
 technic/textures/technicx32/technic_nodebreaker_top.png                 |    0 
 technic/textures/technicx32/technic_mv_solar_panel_bottom.png           |    0 
 technic/textures/technicx32/technic_grinder_top.png                     |    0 
 technic/textures/technicx32/technic_workshop_side.png                   |    0 
 technic/textures/technic_battery_box_top.png                            |    0 
 technic/textures/technic_constructor_mk1_top_off.png                    |    0 
 technic/textures/technic_stainless_steel_dust.png                       |    0 
 technic/textures/technicx32/technic_coal_alloy_furnace_bottom.png       |    0 
 technic/textures/technicx32/technic_constructor_mk3_side1_off.png       |    0 
 technic/textures/technicx32/technic_constructor_mk2_top_on.png          |    0 
 technic/textures/technic_constructor_mk2_side2_on.png                   |    0 
 technic/cans.lua                                                        |  162 +
 technic/textures/technic_deployer_front_off.png                         |    0 
 technic/mining_drill.lua                                                |   49 
 technic/textures/technicx32/technic_diamond_block_blue.png              |    0 
 technic/textures/technic_constructor_mk2_side2_off.png                  |    0 
 technic/textures/technic_fine_copper_wire.png                           |    0 
 technic/textures/technic_gold_chest_front_green.png                     |    0 
 technic/textures/technicx32/technic_copper_chest_top.png                |    0 
 technic/textures/technicx32/technic_power_meter8.png                    |    0 
 technic/textures/technicx32/technic_geothermal_top.png                  |    0 
 technic/textures/technicx32/technic_mv_battery_box_bottom.png           |    0 
 technic/textures/technicx32/technic_constructor_mk1_side2_on.png        |    0 
 technic/textures/technic_rebar.png                                      |    0 
 technic/textures/technicx32/technic_nodebreaker_bottom_on.png           |    0 
 technic/textures/technic_rubber_leaves.png                              |    0 
 technic/tetris.lua                                                      |   17 
 technic/textures/technic_alloy_furnace_side.png                         |    0 
 technic/textures/technic_nodebreaker_front_on.png                       |    0 
 technic/textures/technicx32/technic_gold_chest_front_red.png            |    0 
 technic/textures/technicx32/technic_mithril_chest_front.png             |    0 
 technic/textures/technic_diamond.png                                    |    0 
 technic/textures/technic_iron_chest_locked.png                          |    0 
 technic/textures/technic_chainsaw.png                                   |    0 
 technic/textures/technic_gold_chest_locked_orange.png                   |    0 
 technic/textures/technic_geothermal_side.png                            |    0 
 technic/textures/technic_constructor_mk3_side2_off.png                  |    0 
 technic/textures/technic_gold_chest_locked_dark_grey.png                |    0 
 technic/textures/technicx32/technic_sonic_screwdriver.png               |    0 
 technic/textures/technicx32/technic_fine_copper_wire.png                |    0 
 technic/textures/technicx32/technic_gold_chest_front_cyan.png           |    0 
 technic/textures/technicx32/technic_gold_chest_locked_dark_grey.png     |    0 
 technic/grinder.lua                                                     |  326 ++
 technic/textures/technic_nodebreaker_bottom_on.png                      |    0 
 technic/textures/technic_electric_furnace_front_active.png              |    0 
 technic/textures/technic_copper_chest_top.png                           |    0 
 technic/textures/technic_nodebreaker_top_off.png                        |    0 
 technic/textures/technic_iron_dust.png                                  |    0 
 technic/textures/technic_battery_box_bottom.png                         |    0 
 technic/textures/technic_power_meter7.png                               |    0 
 technic/textures/technic_geothermal_top_active.png                      |    0 
 technic/textures/technicx32/technic_nodebreaker_bottom_off.png          |    0 
 technic/textures/technic_gold_chest_front_brown.png                     |    0 
 technic/item_pickup.lua                                                 |   63 
 technic/textures/technicx32/technic_constructor_mk1_bottom_off.png      |    0 
 technic/textures/technic_coal_alloy_furnace_front.png                   |    0 
 technic/textures/technic_constructor_mk3_bottom_on.png                  |    0 
 technic/textures/technic_gold_chest_front.png                           |    0 
 technic/textures/technic_power_meter.png                                |    0 
 technic/textures/technic_constructor_mk1_bottom_off.png                 |    0 
 technic/textures/technic_constructor_mk3_side1_off.png                  |    0 
 technic/config.lua                                                      |   10 
 technic/textures/technicx32/technic_constructor_mk2_side1_off.png       |    0 
 technic/textures/technic_diamond_block_blue.png                         |    0 
 technic/textures/technicx32/technic_constructor_mk1_side1_on.png        |    0 
 technic/textures/technicx32/technic_constructor_mk2_bottom_on.png       |    0 
 technic/textures/technic_copper_coil.png                                |    0 
 technic/textures/technic_gold_chest_front_grey.png                      |    0 
 technic/textures/technic_screwdriver.png                                |    0 
 technic/textures/technic_battery_box_side0.png                          |    0 
 technic/electric_furnace.lua                                            |  177 +
 technic/textures/technicx32/technic_battery_box_bottom.png              |    0 
 technic/water.lua                                                       |  588 ++++
 technic/textures/technic_constructor_front_on.png                       |    0 
 technic/textures/technic_rubber_sapling.png                             |    0 
 technic/textures/technicx32/technic_constructor_mk2_bottom_off.png      |    0 
 technic/textures/technic_gold_chest_front_yellow.png                    |    0 
 technic/items.lua                                                       |  157 +
 technic/textures/technicx32/technic_doped_silicon_wafer.png             |    0 
 technic/node_breaker.lua                                                |   89 
 technic/textures/technic_alloy_furnace_front.png                        |    0 
 technic/sonic_screwdriver.lua                                           |   55 
 technic/textures/technicx32/technic_coal_alloy_furnace_top.png          |    0 
 technic/textures/technic_generator_top.png                              |    0 
 technic/textures/technic_silver_chest_locked.png                        |    0 
 technic/textures/technic_nodebreaker_top_on.png                         |    0 
 technic/textures/technicx32/technic_constructor_mk1_bottom_on.png       |    0 
 technic/textures/technic_music_player_bottom.png                        |    0 
 technic/textures/technicx32/technic_mv_solar_panel_side.png             |    0 
 technic/deployer.lua                                                    |   91 
 technic/textures/technic_gold_chest_front_violet.png                    |    0 
 technic/textures/technic_light.png                                      |    0 
 technic/textures/technic_workshop_top.png                               |    0 
 technic/textures/technicx32/technic_iron_chest_locked.png               |    0 
 technic/textures/technic_gold_chest_locked.png                          |    0 
 technic/textures/technicx32/technic_gold_chest_locked_blue.png          |    0 
 technic/textures/technic_copper_chest_side.png                          |    0 
 technic/textures/technicx32/technic_power_meter2.png                    |    0 
 technic/textures/technic_mv_solar_panel_top.png                         |    0 
 technic/textures/technic_nodebreaker_side2_on.png                       |    0 
 technic/textures/technicx32/technic_gold_chest_locked_orange.png        |    0 
 technic/textures/technicx32/technic_brass_dust.png                      |    0 
 technic/textures/technic_mineral_diamond.png                            |    0 
 technic/textures/technic_constructor_mk2_bottom_on.png                  |    0 
 technic/textures/technic_water_mill_top_active.png                      |    0 
 technic/item_drop.lua                                                   |  100 
 technic/textures/technic_electric_furnace_front.png                     |    0 
 technic/textures/technic_solar_panel_side.png                           |    0 
 technic/textures/technic_geothermal_top.png                             |    0 
 technic/textures/technicx32/technic_mv_solar_panel_top.png              |    0 
 modpack.txt                                                             |    1 
 technic/textures/technic_electric_furnace_bottom.png                    |    0 
 technic/textures/technic_constructor_mk2_side1_off.png                  |    0 
 technic/textures/technic_gold_chest_locked_white.png                    |    0 
 technic/textures/technicx32/technic_coal_alloy_furnace_side.png         |    0 
 technic/textures/technic_power_meter8.png                               |    0 
 technic/textures/technicx32/technic_constructor_mk3_bottom_on.png       |    0 
 technic/textures/technicx32/technic_geothermal_top_active.png           |    0 
 technic/textures/technicx32/technic_gold_chest_locked_cyan.png          |    0 
 technic/textures/technicx32/technic_chromium_ingot.png                  |    0 
 technic/textures/technic_grinder_side.png                               |    0 
 technic/textures/technicx32/technic_gold_chest_locked_violet.png        |    0 
 technic/textures/technic_machine_bottom.png                             |    0 
 technic/textures/technic_flashlight.png                                 |    0 
 technic/textures/technic_battery_box_side8.png                          |    0 
 technic/textures/technic_gold_chest_front_black.png                     |    0 
 technic/textures/technicx32/technic_diamond_block.png                   |    0 
 technic/textures/technicx32/technic_silver_chest_side.png               |    0 
 technic/textures/technicx32/technic_tree_tap.png                        |    0 
 technic/project_table.lua                                               |   39 
 technic/textures/technic_mv_solar_panel_side.png                        |    0 
 technic/textures/technicx32/technic_deployer_front_off.png              |    0 
 technic/textures/technic_rubber_tree_full.png                           |    0 
 technic/textures/technic_water_mill_side.png                            |    0 
 technic/textures/technicx32/technic_gold_chest_front_green.png          |    0 
 technic/textures/technicx32/technic_water_mill_top_active.png           |    0 
 technic/textures/technic_copper_dust.png                                |    0 
 technic/textures/technicx32/technic_deployer_side.png                   |    0 
 technic/textures/technicx32/technic_generator_front_active.png          |    0 
 technic/textures/technic_constructor_mk2_bottom_off.png                 |    0 
 technic/textures/technicx32/technic_constructor_mk2_side1_on.png        |    0 
 technic/textures/technic_workshop_side.png                              |    0 
 technic/textures/technicx32/technic_deployer_front_on.png               |    0 
 technic/textures/technicx32/technic_nodebreaker_top_off.png             |    0 
 technic/textures/technic_water_can.png                                  |    0 
 technic/textures/technic_music_player_side.png                          |    0 
 technic/textures/technicx32/technic_constructor_front_off.png           |    0 
 technic/tree_tap.lua                                                    |   49 
 technic/textures/technic_diamond_block_green.png                        |    0 
 technic/textures/technicx32/technic_rubber.png                          |    0 
 technic/textures/technicx32/technic_deployer_side2.png                  |    0 
 technic/textures/technicx32/technic_rubber_sapling.png                  |    0 
 technic/textures/technic_uranium.png                                    |    0 
 technic/textures/technicx32/technic_nodebreaker_side1_off.png           |    0 
 technic/textures/technicx32/technic_coal_dust.png                       |    0 
 technic/textures/technic_deployer_back.png                              |    0 
 technic/textures/technicx32/technic_generator_side.png                  |    0 
 technic/textures/technic_deployer_top.png                               |    0 
 technic/silver_chest.lua                                                |  131 
 technic/textures/technic_iron_chest_front.png                           |    0 
 technic/textures/technic_constructor_mk2_top_off.png                    |    0 
 technic/textures/technic_grinder_top.png                                |    0 
 technic/textures/technic_coal_alloy_furnace_bottom.png                  |    0 
 technic/textures/technic_mining_laser_mk1.png                           |    0 
 technic/textures/technicx32/technic_geothermal_side.png                 |    0 
 technic/textures/technicx32/technic_laser_beam.png                      |    0 
 technic/textures/technicx32/technic_constructor_mk1_top_on.png          |    0 
 technic/textures/technicx32/technic_gold_chest_locked_red.png           |    0 
 technic/textures/technic_battery_box_side.png                           |    0 
 technic/textures/technic_zinc_ingot.png                                 |    0 
 technic/textures/technicx32/technic_constructor_mk3_side2_on.png        |    0 
 technic/textures/technicx32/technic_gold_chest_front_dark_green.png     |    0 
 technic/iron_chest.lua                                                  |   97 
 technic/textures/technicx32/technic_battery_reload.png                  |    0 
 technic/textures/technic_gold_chest_locked_dark_green.png               |    0 
 technic/textures/technicx32/technic_power_meter1.png                    |    0 
 technic/textures/technic_solar_panel_bottom.png                         |    0 
 technic/depends.txt                                                     |    4 
 technic/textures/technic_nodebreaker_side1_off.png                      |    0 
 technic/textures/technicx32/technic_gold_chest_locked_dark_green.png    |    0 
 technic/textures/technic_alloy_furnace_top.png                          |    0 
 technic/textures/technic_gold_chest_locked_magenta.png                  |    0 
 technic/textures/technic_mv_battery_box_top.png                         |    0 
 technic/textures/technicx32/technic_diamond_block_green.png             |    0 
 technic/textures/technic_nodebreaker_side2.png                          |    0 
 technic/textures/technicx32/technic_gold_chest_front_dark_grey.png      |    0 
 technic/textures/technic_motor.png                                      |    0 
 technic/textures/technicx32/technic_motor.png                           |    0 
 technic/textures/technicx32/technic_alloy_furnace_front.png             |    0 
 technic/textures/technic_raw_latex.png                                  |    0 
 technic/textures/technicx32/technic_nodebreaker_side.png                |    0 
 technic/creative.lua                                                    |   21 
 technic/textures/technicx32/technic_marble_bricks.png                   |    0 
 technic/mithril_subspace_chest.lua                                      |  145 +
 technic/textures/technicx32/technic_gold_chest_front_pink.png           |    0 
 technic/textures/technic_sonic_screwdriver.png                          |    0 
 technic/textures/technic_chromium_dust.png                              |    0 
 technic/constructor.lua                                                 |  298 ++
 technic/textures/technic_mineral_zinc.png                               |    0 
 technic/textures/technicx32/technic_mv_battery_box_top.png              |    0 
 technic/textures/technicx32/technic_stainless_steel_dust.png            |    0 
 technic/textures/technic_nodebreaker_side1_on.png                       |    0 
 technic/textures/technicx32/technic_zinc_lump.png                       |    0 
 technic/flashlight.lua                                                  |  169 +
 technic/textures/technic_coal_alloy_furnace_front_active.png            |    0 
 technic/textures/technicx32/technic_copper_dust.png                     |    0 
 technic/textures/technicx32/technic_nodebreaker_front_on.png            |    0 
 technic/textures/technicx32/technic_gold_chest_front_grey.png           |    0 
 technic/grinder_gloopores.lua                                           |   55 
 technic/textures/technicx32/technic_flashlight.png                      |    0 
 technic/textures/technicx32/technic_gold_chest_locked_pink.png          |    0 
 technic/textures/technic_lava_can.png                                   |    0 
 technic/textures/technicx32/technic_power_meter4.png                    |    0 
 technic/textures/technic_mithril_chest_top.png                          |    0 
 technic/alloy_furnace.lua                                               |  434 +++
 technic/textures/technic_constructor_mk1_bottom_on.png                  |    0 
 technic/textures/technicx32/technic_mineral_uranium.png                 |    0 
 technic/textures/technic_constructor_mk3_bottom_off.png                 |    0 
 technic/textures/technic_copper_chest_locked.png                        |    0 
 technic/textures/technicx32/technic_silver_chest_locked.png             |    0 
 technic/textures/technic_battery_reload.png                             |    0 
 technic/init.lua                                                        |   82 
 technic/battery_box.lua                                                 |  398 ++
 technic/textures/technicx32/technic_water_can.png                       |    0 
 technic/textures/technicx32/technic_electric_furnace_top.png            |    0 
 technic/textures/technic_constructor_mk3_side1_on.png                   |    0 
 technic/textures/technic_power_meter5.png                               |    0 
 technic/textures/technicx32/technic_iron_chest_side.png                 |    0 
 technic/textures/technicx32/technic_diamond_block_red.png               |    0 
 technic/textures/technic_nodebreaker_side.png                           |    0 
 technic/textures/technicx32/technic_grinder_front.png                   |    0 
 technic/textures/technic_mv_solarpanel_top.png                          |    0 
 technic/textures/textures_here.txt                                      |    1 
 technic/textures/technic_coal_alloy_furnace_side.png                    |    0 
 technic/injector1.lua                                                   |  248 +
 technic/textures/technic_mithril_chest_locked.png                       |    0 
 technic/textures/technic_stainless_steel_ingot.png                      |    0 
 technic/textures/technic_gold_chest_locked_pink.png                     |    0 
 technic/textures/technicx32/technic_granite.png                         |    0 
 technic/textures/technicx32/technic_nodebreaker_top_on.png              |    0 
 technic/textures/technic_deployer_front_on.png                          |    0 
 technic/textures/technic_battery_meter_fg.png                           |    0 
 technic/textures/technicx32/technic_gold_dust.png                       |    0 
 technic/textures/technicx32/technic_solar_panel_top.png                 |    0 
 technic/textures/technic_brass_ingot.png                                |    0 
 technic/textures/technicx32/technic_iron_chest_top.png                  |    0 
 technic/textures/technicx32/technic_diamond_drill_head.png              |    0 
 technic/textures/technic_gold_chest_front_magenta.png                   |    0 
 technic/textures/technicx32/technic_constructor_mk3_side1_on.png        |    0 
 technic/textures/technic_gold_chest_front_blue.png                      |    0 
 technic/textures/technicx32/technic_silicon_wafer.png                   |    0 
 technic/textures/technic_nodebreaker_side1.png                          |    0 
 technic/textures/technicx32/technic_music_player_bottom.png             |    0 
 technic/chainsaw.lua                                                    |   59 
 technic/textures/technic_silver_dust.png                                |    0 
 technic/textures/technic_gold_chest_front_orange.png                    |    0 
 technic/mining_laser_mk1.lua                                            |  174 +
 technic/textures/technicx32/technic_gold_chest_locked_magenta.png       |    0 
 technic/textures/technicx32/technic_copper_chest_front.png              |    0 
 technic/textures/technic_doped_silicon_wafer.png                        |    0 
 technic/textures/technicx32/technic_gold_chest_front_brown.png          |    0 
 technic/water_mill.lua                                                  |  128 
 technic/textures/technicx32/technic_constructor_mk3_bottom_off.png      |    0 
 technic/textures/technic_mv_battery_box_bottom.png                      |    0 
 technic/textures/technicx32/technic_mining_drill.png                    |    0 
 technic/textures/technic_diamond_block.png                              |    0 
 technic/textures/technicx32/technic_gold_chest_locked_yellow.png        |    0 
 technic/textures/technic_gold_chest_front_cyan.png                      |    0 
 technic/textures/technic_mv_solar_panel_bottom.png                      |    0 
 technic/textures/technicx32/technic_chromium_lump.png                   |    0 
 technic/textures/technic_gold_chest_side.png                            |    0 
 technic/textures/technicx32/technic_gold_chest_locked_black.png         |    0 
 technic/textures/technic_gold_chest_locked_grey.png                     |    0 
 technic/textures/technic_gold_chest_locked_yellow.png                   |    0 
 technic/textures/technic_power_meter_bg.png                             |    0 
 technic/textures/technic_constructor_mk3_top_off.png                    |    0 
 technic/textures/technicx32/technic_mithril_chest_side.png              |    0 
 technic/textures/technicx32/technic_gold_chest_front_magenta.png        |    0 
 technic/textures/technic_rubber.png                                     |    0 
 technic/textures/technicx32/technic_electric_furnace_bottom.png         |    0 
 technic/textures/technicx32/technic_power_meter3.png                    |    0 
 technic/textures/technicx32/technic_solar_panel_bottom.png              |    0 
 technic/textures/technic_lv_cable_wield.png                             |    0 
 technic/textures/technic_mv_battery_box_side0.png                       |    0 
 technic/chest_commons.lua                                               |   78 
 technic/textures/technicx32/technic_lava_can.png                        |    0 
 technic/textures/technicx32/technic_power_meter.png                     |    0 
 technic/textures/technicx32/technic_deployer_top.png                    |    0 
 technic/textures/technic_workshop_bottom.png                            |    0 
 technic/textures/technic_coal_dust.png                                  |    0 
 technic/textures/technic_power_meter6.png                               |    0 
 technic/textures/technic_constructor_mk3_top_on.png                     |    0 
 technic/textures/technicx32/technic_deployer_bottom.png                 |    0 
 technic/textures/technicx32/technic_gold_chest_locked_brown.png         |    0 
 502 files changed, 8,340 insertions(+), 0 deletions(-)

diff --git a/modpack.txt b/modpack.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/modpack.txt
@@ -0,0 +1 @@
+
diff --git a/technic/alloy_furnace.lua b/technic/alloy_furnace.lua
new file mode 100644
index 0000000..83496e1
--- /dev/null
+++ b/technic/alloy_furnace.lua
@@ -0,0 +1,434 @@
+alloy_recipes ={}
+
+registered_recipes_count=1
+
+function register_alloy_recipe (string1,count1, string2,count2, string3,count3)
+alloy_recipes[registered_recipes_count]={}
+alloy_recipes[registered_recipes_count].src1_name=string1
+alloy_recipes[registered_recipes_count].src1_count=count1
+alloy_recipes[registered_recipes_count].src2_name=string2
+alloy_recipes[registered_recipes_count].src2_count=count2
+alloy_recipes[registered_recipes_count].dst_name=string3
+alloy_recipes[registered_recipes_count].dst_count=count3
+registered_recipes_count=registered_recipes_count+1
+alloy_recipes[registered_recipes_count]={}
+alloy_recipes[registered_recipes_count].src1_name=string2
+alloy_recipes[registered_recipes_count].src1_count=count2
+alloy_recipes[registered_recipes_count].src2_name=string1
+alloy_recipes[registered_recipes_count].src2_count=count1
+alloy_recipes[registered_recipes_count].dst_name=string3
+alloy_recipes[registered_recipes_count].dst_count=count3
+registered_recipes_count=registered_recipes_count+1
+if UI_recipes_hook then
+	minetest.register_craft({
+	type = "alloy",
+	output = string3.." "..count3,
+	recipe = {
+		{string1.." "..count1},
+		{string2.." "..count2},
+			}
+	})
+	end
+end
+
+register_alloy_recipe ("technic:copper_dust",3, "technic:tin_dust",1, "technic:bronze_dust",4)
+register_alloy_recipe ("moreores:copper_ingot",3, "moreores:tin_ingot",1, "moreores:bronze_ingot",4)
+register_alloy_recipe ("technic:iron_dust",3, "technic:chromium_dust",1, "technic:stainless_steel_dust",4)
+register_alloy_recipe ("default:steel_ingot",3, "technic:chromium_ingot",1, "technic:stainless_steel_ingot",4)
+register_alloy_recipe ("technic:copper_dust",2, "technic:zinc_dust",1, "technic:brass_dust",3)
+register_alloy_recipe ("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)
+
+
+minetest.register_craft({
+	output = 'technic:alloy_furnace',
+	recipe = {
+		{'default:brick', 'default:brick', 'default:brick'},
+		{'default:brick', '', 'default:brick'},
+		{'default:steel_ingot', 'moreores:copper_ingot', 'default:steel_ingot'},
+	}
+})
+
+
+alloy_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;src2;3,2;1,1;]"..
+	"list[current_name;dst;5,1;2,2;]"..
+	"list[current_player;main;0,5;8,4;]"..
+	"label[0,0;Electric Alloy Furnace]"..
+	"label[1,3;Power level]"
+	
+minetest.register_node("technic:alloy_furnace", {
+	description = "Electric alloy furnace",
+	tiles = {"technic_alloy_furnace_top.png", "technic_machine_bottom.png", "technic_alloy_furnace_side.png",
+		"technic_alloy_furnace_side.png", "technic_alloy_furnace_side.png", "technic_alloy_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", alloy_furnace_formspec)
+		meta:set_string("infotext", "Electric Alloy furnace")
+		local inv = meta:get_inventory()
+		inv:set_size("src", 1)
+		inv:set_size("src2", 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 end
+		if not inv:is_empty("src") then
+			return false end
+		if not inv:is_empty("src2") then
+			return false end
+		return true
+	end,
+})
+
+minetest.register_node("technic:alloy_furnace_active", {
+	description = "Alloy Furnace",
+	tiles = {"technic_alloy_furnace_top.png", "technic_machine_bottom.png", "technic_alloy_furnace_side.png",
+		"technic_alloy_furnace_side.png", "technic_alloy_furnace_side.png", "technic_alloy_furnace_front_active.png"},
+	paramtype2 = "facedir",
+	light_source = 8,
+	drop = "technic:alloy_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,
+	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:alloy_furnace","technic:alloy_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;src2;3,2;1,1;]"..
+				"list[current_name;dst;5,1;2,2;]"..
+				"list[current_player;main;0,5;8,4;]"..
+				"label[0,0;Electric Alloy Furnace]"..
+				"label[1,3;Power level]")
+
+		local inv = meta:get_inventory()
+		
+		local furnace_is_cookin = meta:get_int("furnace_is_cookin")
+		
+		
+		local srclist = inv:get_list("src")
+		local srclist2 = inv:get_list("src2")
+		
+		srcstack = inv:get_stack("src", 1)
+		if srcstack then src_item1=srcstack:to_table() end
+		srcstack = inv:get_stack("src2", 1)
+		if srcstack then src_item2=srcstack:to_table() end
+		dst_index=nil
+
+		if src_item1 and src_item2 then 
+				dst_index=get_cook_result(src_item1,src_item2) 
+				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") + 1)
+			if dst_index and meta:get_float("src_time") >= 4 then
+				-- check if there's room for output in "dst" list
+				dst_stack={}
+				dst_stack["name"]=alloy_recipes[dst_index].dst_name
+				dst_stack["count"]=alloy_recipes[dst_index].dst_count
+				if inv:room_for_item("dst",dst_stack) then
+					-- Put result in "dst" list
+					inv:add_item("dst",dst_stack)
+					-- take stuff from "src" list
+					for i=1,alloy_recipes[dst_index].src1_count,1 do
+						srcstack = inv:get_stack("src", 1)
+						srcstack:take_item()
+						inv:set_stack("src", 1, srcstack)
+						end
+					for i=1,alloy_recipes[dst_index].src2_count,1 do
+						srcstack = inv:get_stack("src2", 1)
+						srcstack:take_item()
+						inv:set_stack("src2", 1, srcstack)
+						end
+
+
+				else
+					print("Furnace inventory full!")
+				end
+				meta:set_string("src_time", 0)
+			end
+			end		
+		end
+		
+		
+
+		
+		if dst_index and meta:get_int("furnace_is_cookin")==0 then
+			hacky_swap_node(pos,"technic:alloy_furnace_active")
+			meta:set_string("infotext","Electric Alloy Furnace active")
+			meta:set_int("furnace_is_cookin",1)
+			meta:set_string("src_time", 0)
+			return
+			end
+
+			
+		if meta:get_int("furnace_is_cookin")==0 or dst_index==nil then
+			hacky_swap_node(pos,"technic:alloy_furnace")
+			meta:set_string("infotext","Electric Alloy Furnace inactive")
+			meta:set_int("furnace_is_cookin",0)
+			meta:set_string("src_time", 0)
+		end
+	
+end,		
+})
+
+function get_cook_result(src_item1, src_item2)
+local counter=registered_recipes_count-1
+for i=1, counter,1 do
+if	alloy_recipes[i].src1_name==src_item1["name"] and
+	alloy_recipes[i].src2_name==src_item2["name"] and
+	alloy_recipes[i].src1_count<=src_item1["count"] and
+	alloy_recipes[i].src2_count<=src_item2["count"] 
+	then return i end
+end
+return nil
+end
+
+
+--coal driven alloy furnace:
+
+minetest.register_craft({
+	output = 'technic:coal_alloy_furnace',
+	recipe = {
+		{'default:brick', 'default:brick', 'default:brick'},
+		{'default:brick', '', 'default:brick'},
+		{'default:brick', 'default:brick', 'default:brick'},
+	}
+})
+
+
+coal_alloy_furnace_formspec =
+	"size[8,9]"..
+	"label[0,0;Alloy Furnace]"..
+	"image[2,2;1,1;default_furnace_fire_bg.png]"..
+	"list[current_name;fuel;2,3;1,1;]"..
+	"list[current_name;src;2,1;1,1;]"..
+	"list[current_name;src2;3,1;1,1;]"..
+	"list[current_name;dst;5,1;2,2;]"..
+	"list[current_player;main;0,5;8,4;]"
+	
+minetest.register_node("technic:coal_alloy_furnace", {
+	description = "Alloy Furnace",
+	tiles = {"technic_coal_alloy_furnace_top.png", "technic_coal_alloy_furnace_bottom.png", "technic_coal_alloy_furnace_side.png",
+		"technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_front.png"},
+	paramtype2 = "facedir",
+	groups = {cracky=2},
+	legacy_facedir_simple = true,
+	sounds = default.node_sound_stone_defaults(),
+	on_construct = function(pos)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("formspec", coal_alloy_furnace_formspec)
+		meta:set_string("infotext", "Alloy Furnace")
+		local inv = meta:get_inventory()
+		inv:set_size("fuel", 1)
+		inv:set_size("src", 1)
+		inv:set_size("src2", 1)
+		inv:set_size("dst", 4)
+		local furnace_is_cookin = 0
+		local dst_index = nil
+
+	end,
+	can_dig = function(pos,player)
+		local meta = minetest.env:get_meta(pos);
+		local inv = meta:get_inventory()
+		if not (inv:is_empty("fuel") or inv:is_empty("dst") or inv:is_empty("src") or inv:is_empty("src2") )then
+			return false
+			end
+		return true
+	end,
+})
+
+minetest.register_node("technic:coal_alloy_furnace_active", {
+	description = "Alloy Furnace",
+	tiles = {"technic_coal_alloy_furnace_top.png", "technic_coal_alloy_furnace_bottom.png", "technic_coal_alloy_furnace_side.png",
+		"technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_front_active.png"},
+	paramtype2 = "facedir",
+	light_source = 8,
+	drop = "technic:coal_alloy_furnace",
+	groups = {cracky=2, not_in_creative_inventory=1},
+	legacy_facedir_simple = true,
+	sounds = default.node_sound_stone_defaults(),
+	can_dig = function(pos,player)
+		local meta = minetest.env:get_meta(pos);
+		local inv = meta:get_inventory()
+		if not (inv:is_empty("fuel") or inv:is_empty("dst") or inv:is_empty("src") or inv:is_empty("src2") )then
+			return false
+			end
+		return true
+	end,
+})
+
+minetest.register_abm({
+	nodenames = {"technic:coal_alloy_furnace","technic:coal_alloy_furnace_active"},
+	interval = 1,
+	chance = 1,
+	
+	action = function(pos, node, active_object_count, active_object_count_wider)
+		local meta = minetest.env:get_meta(pos)
+		for i, name in ipairs({
+				"fuel_totaltime",
+				"fuel_time",
+				"src_totaltime",
+				"src_time"
+		}) do
+			if meta:get_string(name) == "" then
+				meta:set_float(name, 0.0)
+			end
+		end
+
+		local inv = meta:get_inventory()
+
+		srcstack = inv:get_stack("src", 1)
+		if srcstack then src_item1=srcstack:to_table() end
+		srcstack = inv:get_stack("src2", 1)
+		if srcstack then src_item2=srcstack:to_table() end
+		dst_index=nil
+
+		if src_item1 and src_item2 then 
+				dst_index=get_cook_result(src_item1,src_item2) 
+				end	
+		
+		local was_active = false
+		
+		if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
+			was_active = true
+			meta:set_float("fuel_time", meta:get_float("fuel_time") + 1)
+			meta:set_float("src_time", meta:get_float("src_time") + 1)
+			if dst_index and meta:get_float("src_time") >= 5 then
+				-- check if there's room for output in "dst" list
+				dst_stack={}
+				dst_stack["name"]=alloy_recipes[dst_index].dst_name
+				dst_stack["count"]=alloy_recipes[dst_index].dst_count			
+				if inv:room_for_item("dst",dst_stack) then
+					-- Put result in "dst" list
+					inv:add_item("dst", dst_stack)
+					-- take stuff from "src" list
+					for i=1,alloy_recipes[dst_index].src1_count,1 do
+						srcstack = inv:get_stack("src", 1)
+						srcstack:take_item()
+						inv:set_stack("src", 1, srcstack)
+						end
+					for i=1,alloy_recipes[dst_index].src2_count,1 do
+						srcstack = inv:get_stack("src2", 1)
+						srcstack:take_item()
+						inv:set_stack("src2", 1, srcstack)
+						end
+				else
+					print("Furnace inventory full!")
+				end
+				meta:set_string("src_time", 0)
+			end
+		end
+		
+		if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
+			local percent = math.floor(meta:get_float("fuel_time") /
+					meta:get_float("fuel_totaltime") * 100)
+			meta:set_string("infotext","Furnace active: "..percent.."%")
+			hacky_swap_node(pos,"technic:coal_alloy_furnace_active")
+			meta:set_string("formspec",
+				"size[8,9]"..
+				"label[0,0;Electric Alloy Furnace]"..
+				"image[2,2;1,1;default_furnace_fire_bg.png^[lowpart:"..
+						(100-percent)..":default_furnace_fire_fg.png]"..
+				"list[current_name;fuel;2,3;1,1;]"..
+				"list[current_name;src;2,1;1,1;]"..
+				"list[current_name;src2;3,1;1,1;]"..
+				"list[current_name;dst;5,1;2,2;]"..
+				"list[current_player;main;0,5;8,4;]")
+			return
+		end
+
+		local fuel = nil
+		local fuellist = inv:get_list("fuel")
+		
+		srcstack = inv:get_stack("src", 1)
+		if srcstack then src_item1=srcstack:to_table() end
+		srcstack = inv:get_stack("src2", 1)
+		if srcstack then src_item2=srcstack:to_table() end
+		dst_index=nil
+
+		if src_item1 and src_item2 then 
+				dst_index=get_cook_result(src_item1,src_item2) 
+				end
+		
+		
+		if fuellist then
+			fuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist})
+		end
+
+		if fuel.time <= 0 then
+			meta:set_string("infotext","Furnace out of fuel")
+			hacky_swap_node(pos,"technic:coal_alloy_furnace")
+			meta:set_string("formspec", coal_alloy_furnace_formspec)
+			return
+		end
+
+		if dst_index==nil then
+			if was_active then
+				meta:set_string("infotext","Furnace is empty")
+				hacky_swap_node(pos,"technic:coal_alloy_furnace")
+				meta:set_string("formspec", coal_alloy_furnace_formspec)
+			end
+			return
+		end
+
+		meta:set_string("fuel_totaltime", fuel.time)
+		meta:set_string("fuel_time", 0)
+		
+		local stack = inv:get_stack("fuel", 1)
+		stack:take_item()
+		inv:set_stack("fuel", 1, stack)
+	
+end,		
+})
diff --git a/technic/battery_box.lua b/technic/battery_box.lua
new file mode 100644
index 0000000..f5827a4
--- /dev/null
+++ b/technic/battery_box.lua
@@ -0,0 +1,398 @@
+power_tools ={}
+
+registered_power_tools_count=1
+
+function register_power_tool (string1,max_charge)
+power_tools[registered_power_tools_count]={}
+power_tools[registered_power_tools_count].tool_name=string1
+power_tools[registered_power_tools_count].max_charge=max_charge
+registered_power_tools_count=registered_power_tools_count+1
+end
+
+register_power_tool ("technic:mining_drill",60000)
+register_power_tool ("technic:chainsaw",30000)
+register_power_tool ("technic:laser_mk1",40000)
+register_power_tool ("technic:battery",10000)
+register_power_tool ("technic:sonic_screwdriver",15000)
+register_power_tool ("technic:flashlight",30000)
+register_power_tool ("technic:red_energy_crystal",100000)
+register_power_tool ("technic:green_energy_crystal",250000)
+register_power_tool ("technic:blue_energy_crystal",500000)
+
+minetest.register_alias("battery", "technic:battery")
+minetest.register_alias("battery_box", "technic:battery_box")
+
+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_tool("technic:battery",
+{description = "RE Battery",
+inventory_image = "technic_battery.png",
+tool_capabilities = {load=0,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_side0.png",
+		"technic_battery_box_side0.png", "technic_battery_box_side0.png", "technic_battery_box_side0.png"},
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+	sounds = default.node_sound_wood_defaults(),
+	technic_power_machine=1,
+	last_side_shown=0,
+	drop="technic:battery_box",
+	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
+		last_side_shown=0
+		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,
+})
+
+
+for i=1,8,1 do
+minetest.register_node("technic:battery_box"..i, {
+	description = "Battery box",
+	tiles = {"technic_battery_box_top.png", "technic_battery_box_bottom.png", "technic_battery_box_side0.png^technic_power_meter"..i..".png",
+		"technic_battery_box_side0.png^technic_power_meter"..i..".png", "technic_battery_box_side0.png^technic_power_meter"..i..".png", "technic_battery_box_side0.png^technic_power_meter"..i..".png"},
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
+	sounds = default.node_sound_wood_defaults(),
+	technic_power_machine=1,
+	last_side_shown=0,
+	drop="technic:battery_box",
+	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
+		last_side_shown=0
+		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,
+})
+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
+
+function set_RE_wear (item_stack,load1,max_load)
+local temp=65536-math.floor(load1/max_load*65535)
+item_stack["wear"]=tostring(temp)
+return item_stack	
+end
+
+minetest.register_abm({
+	nodenames = {"technic:battery_box","technic:battery_box1","technic:battery_box2","technic:battery_box3","technic:battery_box4",
+		     "technic:battery_box5","technic:battery_box6","technic:battery_box7","technic:battery_box8"
+			},
+	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_int("battery_charge")
+	max_charge= 60000
+	local i=math.ceil((charge/max_charge)*8)
+	if i>8 then i=8 end
+	j=meta:get_float("last_side_shown")
+	if i~=j then
+	if i>0 then hacky_swap_node(pos,"technic:battery_box"..i)  
+	elseif i==0 then hacky_swap_node(pos,"technic:battery_box") end 
+	meta:set_float("last_side_shown",i)
+	end
+
+--loading registered power tools	
+	local inv = meta:get_inventory()
+	if inv:is_empty("src")==false  then 
+		srcstack = inv:get_stack("src", 1)
+		src_item=srcstack:to_table()
+		item_meta=srcstack:get_metadata()
+		if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before tool/item
+
+	local item_max_charge = nil
+	local counter=registered_power_tools_count-1
+	for i=1, counter,1 do
+		if power_tools[i].tool_name==src_item["name"] then
+		item_max_charge=power_tools[i].max_charge	
+		end
+		end
+	if item_max_charge then
+		load1=tonumber((src_item["metadata"])) 
+		load_step=1000
+		if load1<item_max_charge and charge>0 then 
+		 if charge-load_step<0 then load_step=charge end
+		 if load1+load_step>item_max_charge then load_step=item_max_charge-load1 end
+		load1=load1+load_step
+		charge=charge-load_step
+		set_RE_wear(src_item,load1,item_max_charge)
+		src_item["metadata"]=tostring(load1)
+		inv:set_stack("src", 1, src_item)
+		end
+		meta:set_int("battery_charge",charge)
+	end	
+	end
+	
+-- dischargin registered power tools
+		if inv:is_empty("dst") == false then 
+		srcstack = inv:get_stack("dst", 1)
+		src_item=srcstack:to_table()
+		local item_max_charge = nil
+		local counter=registered_power_tools_count-1
+		for i=1, counter,1 do
+		if power_tools[i].tool_name==src_item["name"] then
+		item_max_charge=power_tools[i].max_charge	
+		end
+		end
+		if item_max_charge then
+		if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before battery/crystal
+		local load1=tonumber((src_item["metadata"])) 
+		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
+		set_RE_wear(src_item,load1,item_max_charge)
+		src_item["metadata"]=tostring(load1)	
+		inv:set_stack("dst", 1, src_item)
+		end		
+		end
+		end
+		
+	meta:set_int("battery_charge",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 -- gettin power from all connected producers
+		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 internal_EU_buffer=meta1:get_float("internal_EU_buffer")
+	if charge<max_charge then 
+	charge_to_take=200	
+	if internal_EU_buffer-charge_to_take<=0 then
+		charge_to_take=internal_EU_buffer
+	end
+	if charge_to_take>0 then 
+	charge=charge+charge_to_take 
+	internal_EU_buffer=internal_EU_buffer-charge_to_take
+	meta1:set_float("internal_EU_buffer",internal_EU_buffer)
+	end
+	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
+	charge=math.floor(charge)
+	charge_string=tostring(charge)
+	meta:set_string("infotext", "Battery box: "..charge_string.."/"..max_charge);
+	meta:set_int("battery_charge",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:generator" then 	new_node_added=add_new_cable_node(PR_nodes,pos1) end		
+if minetest.env:get_node(pos1).name == "technic:generator_active" then 	new_node_added=add_new_cable_node(PR_nodes,pos1) end		
+if minetest.env:get_node(pos1).name == "technic:geothermal" then 	new_node_added=add_new_cable_node(PR_nodes,pos1) end		
+if minetest.env:get_node(pos1).name == "technic:geothermal_active" then 	new_node_added=add_new_cable_node(PR_nodes,pos1) end		
+if minetest.env:get_node(pos1).name == "technic:water_mill" then 	new_node_added=add_new_cable_node(PR_nodes,pos1) end		
+if minetest.env:get_node(pos1).name == "technic:water_mill_active" 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:alloy_furnace" then 	new_node_added=add_new_cable_node(RE_nodes,pos1) end		
+if minetest.env:get_node(pos1).name == "technic:alloy_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
+		
\ No newline at end of file
diff --git a/technic/battery_box_mv.lua b/technic/battery_box_mv.lua
new file mode 100644
index 0000000..ae448e0
--- /dev/null
+++ b/technic/battery_box_mv.lua
@@ -0,0 +1,321 @@
+minetest.register_craft({
+	output = 'technic:mv_battery_box 1',
+	recipe = {
+		{'technic:battery_box', 'technic:battery_box', 'technic:battery_box'},
+		{'technic:battery_box', 'technic:mv_transformer', 'technic:battery_box'},
+		{'', 'technic:mv_cable', ''},
+	}
+}) 
+
+
+
+mv_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;MV_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:mv_battery_box", {
+	description = "MV Battery Box",
+	tiles = {"technic_mv_battery_box_top.png", "technic_mv_battery_box_bottom.png", "technic_mv_battery_box_side0.png",
+		"technic_mv_battery_box_side0.png", "technic_mv_battery_box_side0.png", "technic_mv_battery_box_side0.png"},
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+	sounds = default.node_sound_wood_defaults(),
+	technic_mv_power_machine=1,
+	last_side_shown=0,
+	drop="technic:mv_battery_box",
+	on_construct = function(pos)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("infotext", "MV Battery box")
+		meta:set_float("technic_mv_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 = 300000
+		last_side_shown=0
+		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,
+})
+
+
+for i=1,8,1 do
+minetest.register_node("technic:mv_battery_box"..i, {
+	description = "MV Battery Box",
+	tiles = {"technic_mv_battery_box_top.png", "technic_mv_battery_box_bottom.png", "technic_mv_battery_box_side0.png^technic_power_meter"..i..".png",
+		"technic_mv_battery_box_side0.png^technic_power_meter"..i..".png", "technic_mv_battery_box_side0.png^technic_power_meter"..i..".png", "technic_mv_battery_box_side0.png^technic_power_meter"..i..".png"},
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
+	sounds = default.node_sound_wood_defaults(),
+	technic_power_machine=1,
+	last_side_shown=0,
+	drop="technic:mv_battery_box",
+	on_construct = function(pos)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("infotext", "MV Battery box")
+		meta:set_float("technic_mv_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 = 300000
+		last_side_shown=0
+		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,
+})
+end
+
+
+MV_nodes_visited = {}
+
+
+minetest.register_abm({
+	nodenames = {"technic:mv_battery_box","technic:mv_battery_box1","technic:mv_battery_box2","technic:mv_battery_box3","technic:mv_battery_box4",
+		     "technic:mv_battery_box5","technic:mv_battery_box6","technic:mv_battery_box7","technic:mv_battery_box8"
+			},
+	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_int("battery_charge")
+	max_charge= 300000
+	local i=math.ceil((charge/max_charge)*8)
+	if i>8 then i=8 end
+	j=meta:get_float("last_side_shown")
+	if i~=j then
+	if i>0 then hacky_swap_node(pos,"technic:mv_battery_box"..i)  
+	elseif i==0 then hacky_swap_node(pos,"technic:mv_battery_box") end 
+	meta:set_float("last_side_shown",i)
+	end
+
+--loading registered power tools	
+	local inv = meta:get_inventory()
+	if inv:is_empty("src")==false  then 
+		srcstack = inv:get_stack("src", 1)
+		src_item=srcstack:to_table()
+		item_meta=srcstack:get_metadata()
+		if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before tool/item
+
+	local item_max_charge = nil
+	local counter=registered_power_tools_count-1
+	for i=1, counter,1 do
+		if power_tools[i].tool_name==src_item["name"] then
+		item_max_charge=power_tools[i].max_charge	
+		end
+		end
+	if item_max_charge then
+		load1=tonumber((src_item["metadata"])) 
+		load_step=4000
+		if load1<item_max_charge and charge>0 then 
+		 if charge-load_step<0 then load_step=charge end
+		 if load1+load_step>item_max_charge then load_step=item_max_charge-load1 end
+		load1=load1+load_step
+		charge=charge-load_step
+		set_RE_wear(src_item,load1,item_max_charge)
+		src_item["metadata"]=tostring(load1)
+		inv:set_stack("src", 1, src_item)
+		end
+		meta:set_int("battery_charge",charge)
+	end	
+	end
+	
+-- dischargin registered power tools
+		if inv:is_empty("dst") == false then 
+		srcstack = inv:get_stack("dst", 1)
+		src_item=srcstack:to_table()
+		local item_max_charge = nil
+		local counter=registered_power_tools_count-1
+		for i=1, counter,1 do
+		if power_tools[i].tool_name==src_item["name"] then
+		item_max_charge=power_tools[i].max_charge	
+		end
+		end
+		if item_max_charge then
+		if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before battery/crystal
+		local load1=tonumber((src_item["metadata"])) 
+		load_step=4000
+		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
+		set_RE_wear(src_item,load1,item_max_charge)
+		src_item["metadata"]=tostring(load1)	
+		inv:set_stack("dst", 1, src_item)
+		end		
+		end
+		end
+		
+	meta:set_int("battery_charge",charge)
+
+	local load = math.floor(charge/300000 * 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;MV 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("mv_cablelike")~=1 then return end
+
+		local MV_nodes = {}
+		local PR_nodes = {}
+		local RE_nodes = {}
+
+	 	MV_nodes[1]={}
+	 	MV_nodes[1].x=pos1.x
+		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)
+	table_index=table_index+1
+	if MV_nodes[table_index]==nil then break end
+	until false
+
+
+local pos1={}
+i=1
+	repeat
+	if PR_nodes[i]==nil then break end -- gettin power from all connected producers
+		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 internal_EU_buffer=meta1:get_float("internal_EU_buffer")
+	if charge<max_charge then 
+	charge_to_take=1000	
+	if internal_EU_buffer-charge_to_take<=0 then
+		charge_to_take=internal_EU_buffer
+	end
+	if charge_to_take>0 then 
+	charge=charge+charge_to_take 
+	internal_EU_buffer=internal_EU_buffer-charge_to_take
+	meta1:set_float("internal_EU_buffer",internal_EU_buffer)
+	end
+	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=1000
+	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
+	charge=math.floor(charge)
+	charge_string=tostring(charge)
+	meta:set_string("infotext", "Battery box: "..charge_string.."/"..max_charge);
+	meta:set_int("battery_charge",charge)
+
+end
+})
+
+function add_new_MVcable_node (MV_nodes,pos1)
+local i=1
+	repeat
+		if MV_nodes[i]==nil then break end
+		if pos1.x==MV_nodes[i].x and pos1.y==MV_nodes[i].y and pos1.z==MV_nodes[i].z then return false end
+		i=i+1
+	until false
+MV_nodes[i]={}
+MV_nodes[i].x=pos1.x
+MV_nodes[i].y=pos1.y
+MV_nodes[i].z=pos1.z
+MV_nodes[i].visited=false
+return true
+end
+
+function check_MV_node (PR_nodes,RE_nodes,MV_nodes,i)
+		local pos1={}
+		pos1.x=MV_nodes[i].x
+		pos1.y=MV_nodes[i].y
+		pos1.z=MV_nodes[i].z
+		MV_nodes[i].visited=true
+		new_node_added=false
+	
+		pos1.x=pos1.x+1
+		check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
+		pos1.x=pos1.x-2
+		check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
+		pos1.x=pos1.x+1
+		
+		pos1.y=pos1.y+1
+		check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
+		pos1.y=pos1.y-2
+		check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
+		pos1.y=pos1.y+1
+
+		pos1.z=pos1.z+1
+		check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
+		pos1.z=pos1.z-2
+		check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
+		pos1.z=pos1.z+1
+return new_node_added
+end
+
+function check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
+meta = minetest.env:get_meta(pos1)
+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
+		
diff --git a/technic/cans.lua b/technic/cans.lua
new file mode 100644
index 0000000..d50a621
--- /dev/null
+++ b/technic/cans.lua
@@ -0,0 +1,162 @@
+water_can_max_load = 16
+lava_can_max_load = 8
+
+minetest.register_craft({
+	output = 'technic:water_can 1',
+	recipe = {
+		{'technic:zinc_ingot', 'technic:rubber','technic:zinc_ingot'},
+		{'default:steel_ingot', '', 'default:steel_ingot'},
+		{'technic:zinc_ingot', 'default:steel_ingot', 'technic:zinc_ingot'},
+	}
+})
+
+minetest.register_craft({
+	output = 'technic:lava_can 1',
+	recipe = {
+		{'technic:zinc_ingot', 'technic:stainless_steel_ingot','technic:zinc_ingot'},
+		{'technic:stainless_steel_ingot', '', 'technic:stainless_steel_ingot'},
+		{'technic:zinc_ingot', 'technic:stainless_steel_ingot', 'technic:zinc_ingot'},
+	}
+})
+
+
+minetest.register_tool("technic:water_can", {
+	description = "Water Can",
+	inventory_image = "technic_water_can.png",
+	stack_max = 1,
+	liquids_pointable = true,
+	on_use = function(itemstack, user, pointed_thing)
+		
+		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
+			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:water_flowing" then
+			minetest.env:add_node(pointed_thing.under, {name="default:water_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:water_source"})
+			load=load-1;	
+			item["metadata"]=tostring(load)
+			set_RE_wear(item,load,water_can_max_load)
+			itemstack:replace(item)
+			return itemstack
+			end		
+	end,
+})
+
+minetest.register_tool("technic:lava_can", {
+	description = "Lava Can",
+	inventory_image = "technic_lava_can.png",
+	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
+		
+		n = minetest.env:get_node(pointed_thing.under)
+		if n.name == "default:lava_source" then
+			item=itemstack:to_table()
+			local load=tonumber((item["wear"])) 
+			if  load==0 then load =65535 end
+			load=get_RE_item_load(load,lava_can_max_load)
+			if load+1<9 then
+			minetest.env:add_node(pointed_thing.under, {name="air"})
+			 load=load+1;	
+			load=set_RE_item_load(load,lava_can_max_load)
+			item["wear"]=tostring(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,lava_can_max_load)
+			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;	
+			load=set_RE_item_load(load,lava_can_max_load)
+			item["wear"]=tostring(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;	
+			load=set_RE_item_load(load,lava_can_max_load)
+			item["wear"]=tostring(load)
+			itemstack:replace(item)
+			return itemstack
+			end		
+	end,
+})
diff --git a/technic/chainsaw.lua b/technic/chainsaw.lua
new file mode 100644
index 0000000..9970935
--- /dev/null
+++ b/technic/chainsaw.lua
@@ -0,0 +1,59 @@
+chainsaw_max_charge=30000
+
+minetest.register_tool("technic:chainsaw", {
+	description = "Chainsaw",
+	inventory_image = "technic_chainsaw.png",
+	stack_max = 1,
+	on_use = function(itemstack, user, pointed_thing)
+		if pointed_thing.type=="node" then 
+		item=itemstack:to_table()
+		if item["metadata"]=="" or item["metadata"]=="0" then return end --tool not charged 
+		charge=tonumber(item["metadata"]) 
+		charge_to_take=600;
+		if charge-charge_to_take>0 then
+		 charge_to_take=chainsaw_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user,charge_to_take)
+		 charge=charge-charge_to_take;	
+		set_RE_wear(item,charge,chainsaw_max_charge)
+		item["metadata"]=tostring(charge)	
+		itemstack:replace(item)
+		return itemstack
+		end
+		end
+	end,
+})
+
+minetest.register_craft({
+	output = 'technic:chainsaw',
+	recipe = {
+		{'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:battery'},
+		{'technic:stainless_steel_ingot', 'technic:motor', 'technic:battery'},
+		{'','','moreores:copper_ingot'},
+	}
+})
+
+
+
+
+timber_nodenames={"default:jungletree", "default:papyrus", "default:cactus", "default:tree"}
+
+function chainsaw_dig_it (pos, player,charge_to_take)		
+	charge_to_take=0
+	local node=minetest.env:get_node(pos)
+	local i=1
+	while timber_nodenames[i]~=nil do
+		if node.name==timber_nodenames[i] then
+			charge_to_take=600
+			np={x=pos.x, y=pos.y, z=pos.z}
+			while minetest.env:get_node(np).name==timber_nodenames[i] do
+				minetest.env:remove_node(np)
+				minetest.env:add_item(np, timber_nodenames[i])
+				np={x=np.x, y=np.y+1, z=np.z}
+			end
+			minetest.sound_play("chainsaw", {pos = pos, gain = 1.0, max_hear_distance = 10,})
+			return charge_to_take	
+		end
+		i=i+1
+	end
+
+return charge_to_take
+end
\ No newline at end of file
diff --git a/technic/chest_commons.lua b/technic/chest_commons.lua
new file mode 100644
index 0000000..7786496
--- /dev/null
+++ b/technic/chest_commons.lua
@@ -0,0 +1,78 @@
+chest_groups1 = {snappy=2,choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1}
+chest_groups2 = {snappy=2,choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1,not_in_creative_inventory=1}
+
+tubes_properties = {insert_object=function(pos,node,stack,direction)
+					local meta=minetest.env:get_meta(pos)
+					local inv=meta:get_inventory()
+					return inv:add_item("main",stack)
+				end,
+				can_insert=function(pos,node,stack,direction)
+					local meta=minetest.env:get_meta(pos)
+					local inv=meta:get_inventory()
+					return inv:room_for_item("main",stack)
+				end,
+				input_inventory="main"}
+				
+chest_can_dig = function(pos,player)
+local meta = minetest.env:get_meta(pos);
+local inv = meta:get_inventory()
+return inv:is_empty("main")
+end
+
+def_allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+local meta = minetest.env:get_meta(pos)
+if not has_locked_chest_privilege(meta, player) then
+	minetest.log("action", player:get_player_name()..
+	" tried to access a locked chest belonging to "..
+	meta:get_string("owner").." at "..
+	minetest.pos_to_string(pos))
+	return 0
+	end
+	return count
+end
+
+def_allow_metadata_inventory_put = function(pos, listname, index, stack, player)
+local meta = minetest.env:get_meta(pos)
+if not has_locked_chest_privilege(meta, player) then
+	minetest.log("action", player:get_player_name()..
+	" tried to access a locked chest belonging to "..
+	meta:get_string("owner").." at "..
+	minetest.pos_to_string(pos))
+	return 0
+end
+return stack:get_count()
+end
+
+def_allow_metadata_inventory_take = function(pos, listname, index, stack, player)
+local meta = minetest.env:get_meta(pos)
+if not has_locked_chest_privilege(meta, player) then
+	minetest.log("action", player:get_player_name()..
+	" tried to access a locked chest belonging to "..
+	meta:get_string("owner").." at "..
+	minetest.pos_to_string(pos))
+	return 0
+	end
+return stack:get_count()
+end
+
+def_on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+	minetest.log("action", player:get_player_name()..
+	" moves stuff in locked chest at "..minetest.pos_to_string(pos))
+end
+
+def_on_metadata_inventory_put = function(pos, listname, index, stack, player)
+	minetest.log("action", player:get_player_name()..
+	" moves stuff to locked chest at "..minetest.pos_to_string(pos))
+end
+
+def_on_metadata_inventory_take = function(pos, listname, index, stack, player)
+	minetest.log("action", player:get_player_name()..
+	" takes stuff from locked chest at "..minetest.pos_to_string(pos))
+end
+
+function has_locked_chest_privilege(meta, player)
+	if player:get_player_name() ~= meta:get_string("owner") then
+		return false
+	end
+	return true
+end
diff --git a/technic/concrete.lua b/technic/concrete.lua
new file mode 100644
index 0000000..2d68ca1
--- /dev/null
+++ b/technic/concrete.lua
@@ -0,0 +1,83 @@
+
+minetest.register_craft({
+	output = 'technic:rebar 6',
+	recipe = {
+		{'','', 'default:steel_ingot'},
+		{'','default:steel_ingot',''},
+		{'default:steel_ingot', '', ''},
+	}
+})
+
+minetest.register_craft({
+	output = 'technic:concrete 5',
+	recipe = {
+		{'default:stone','technic:rebar','default:stone'},
+		{'technic:rebar','default:stone','technic:rebar'},
+		{'default:stone','technic:rebar','default:stone'},
+	}
+})
+
+minetest.register_craft({
+	output = 'technic:concrete_post 4',
+	recipe = {
+		{'default:stone','technic:rebar','default:stone'},
+		{'default:stone','technic:rebar','default:stone'},
+		{'default:stone','technic:rebar','default:stone'},
+}
+})
+
+minetest.register_craftitem("technic:rebar", {
+	description = "Rebar",
+	inventory_image = "technic_rebar.png",
+	stack_max = 99,
+})
+
+minetest.register_craftitem("technic:concrete", {
+	description = "Concrete Block",
+	inventory_image = "technic_concrete_block.png",
+	stack_max = 99,
+})
+
+minetest.register_craftitem("technic:concrete_post", {
+	description = "Concrete Post",
+	inventory_image = "technic_concrete_post.png",
+	stack_max = 99,
+})
+
+
+
+-- NODES:
+
+minetest.register_node("technic:concrete", {
+	description = "Concrete Block",
+	tile_images = {"technic_concrete_block.png",},
+	is_ground_content = true,
+	groups = {cracky=1},
+	sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node("technic:concrete_post", {
+	description = "Concrete Post",
+	drawtype = "fencelike",
+	tiles = {"technic_concrete_block.png"},
+	inventory_image = "default_fence.png",
+	wield_image = "default_fence.png",
+	paramtype = "light",
+	is_ground_content = true,
+	selection_box = {
+		type = "fixed",
+		fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
+	},
+
+	groups = {cracky=1},
+	sounds = default.node_sound_stone_defaults(),
+})
+
+stairsplus.register_stair_and_slab_and_panel_and_micro(":stairsplus", "concrete", "technic:concrete",
+		{cracky=3},
+		{"technic_concrete_block.png"},
+		"Concrete Stairs",
+		"Concrete Slab",
+		"Concrete Panel",
+		"Concrete Microblock",
+		"concrete")
diff --git a/technic/config.lua b/technic/config.lua
new file mode 100644
index 0000000..3fa1282
--- /dev/null
+++ b/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/technic/constructor.lua b/technic/constructor.lua
new file mode 100644
index 0000000..b5a61cb
--- /dev/null
+++ b/technic/constructor.lua
@@ -0,0 +1,298 @@
+
+minetest.register_craft({
+	type = "shapeless",
+	output = 'technic:constructor_mk1_off 1',
+	recipe = {'technic:nodebreaker_off', 'technic:deployer_off'},
+
+})
+minetest.register_craft({
+	type = "shapeless",
+	output = 'technic:constructor_mk2_off 1',
+	recipe = {'technic:constructor_mk1_off', 'technic:constructor_mk1_off'},
+
+})
+
+minetest.register_craft({
+	type = "shapeless",
+	output = 'technic:constructor_mk3_off 1',
+	recipe = {'technic:constructor_mk2_off', 'technic:constructor_mk2_off'},
+
+})
+
+mk1_on = function(pos, node)
+	local meta = minetest.env:get_meta(pos)
+	local inv = meta:get_inventory()
+	local pos1={}
+	pos1.x=pos.x
+	pos1.y=pos.y
+	pos1.z=pos.z
+	if node.param2==3 then pos1.x=pos1.x+1 end
+	if node.param2==2 then pos1.z=pos1.z+1 end
+	if node.param2==1 then pos1.x=pos1.x-1 end
+	if node.param2==0 then pos1.z=pos1.z-1 end
+
+	if node.name == "technic:constructor_mk1_off" then
+		hacky_swap_node(pos,"technic:constructor_mk1_on")
+		nodeupdate(pos)
+		local node1=minetest.env:get_node(pos1)
+		deploy_node (inv,"slot1",pos1,node1,node)
+	end
+end
+
+mk1_off = function(pos, node)
+	if node.name == "technic:constructor_mk1_on" then
+		hacky_swap_node(pos,"technic:constructor_mk1_off")
+		nodeupdate(pos)
+	end
+end
+
+
+minetest.register_node("technic:constructor_mk1_off", {
+	description = "Constructor MK1",
+	tile_images = {"technic_constructor_mk1_top_off.png","technic_constructor_mk1_bottom_off.png","technic_constructor_mk1_side2_off.png","technic_constructor_mk1_side1_off.png",
+			"technic_constructor_back.png","technic_constructor_front_off.png"},
+	is_ground_content = true,
+	paramtype2 = "facedir",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon_receptor_off = 1, mesecon_effector_off = 1, mesecon = 2},
+	mesecons= {effector={action_on=mk1_on}},
+	sounds = default.node_sound_stone_defaults(),
+	on_construct = function(pos)
+	local meta = minetest.env:get_meta(pos)
+	meta:set_string("formspec",
+				"invsize[8,9;]"..
+				"label[0,0;Constructor MK1]"..
+				"label[5,0;Slot 1]"..
+				"list[current_name;slot1;6,0;1,1;]"..
+				"list[current_player;main;0,5;8,4;]")
+		meta:set_string("infotext", "Constructor MK1")
+		local inv = meta:get_inventory()
+		inv:set_size("slot1", 1)
+	end,
+
+	can_dig = function(pos,player)
+		local meta = minetest.env:get_meta(pos)
+		local inv = meta:get_inventory()
+		return inv:is_empty("slot1")
+	end,	
+})
+
+minetest.register_node("technic:constructor_mk1_on", {
+	description = "Constructor MK1",
+	tile_images = {"technic_constructor_mk1_top_on.png","technic_constructor_mk1_bottom_on.png","technic_constructor_mk1_side2_on.png","technic_constructor_mk1_side1_on.png",
+			"technic_constructor_back.png","technic_constructor_front_on.png"},
+	is_ground_content = true,
+	paramtype2 = "facedir",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon = 2,not_in_creative_inventory=1},
+	mesecons= {effector={action_off=mk1_off}},
+	sounds = default.node_sound_stone_defaults(),
+})
+
+
+--Constructor MK2
+
+mk2_on = function(pos, node)
+	local meta = minetest.env:get_meta(pos)
+	local inv = meta:get_inventory()
+	local pos1={}
+	local pos2={}
+	pos1.x=pos.x
+	pos1.y=pos.y
+	pos1.z=pos.z
+	pos2.x=pos.x
+	pos2.y=pos.y
+	pos2.z=pos.z
+	if node.param2==3 then pos1.x=pos1.x+1 pos2.x=pos2.x+2 end
+	if node.param2==2 then pos1.z=pos1.z+1 pos2.z=pos2.z+2 end
+	if node.param2==1 then pos1.x=pos1.x-1 pos2.x=pos2.x-2 end
+	if node.param2==0 then pos1.z=pos1.z-1 pos2.z=pos2.z-2 end
+
+	if node.name == "technic:constructor_mk2_off" then
+		hacky_swap_node(pos,"technic:constructor_mk2_on")
+		nodeupdate(pos)
+		local node1=minetest.env:get_node(pos1)
+		deploy_node (inv,"slot1",pos1,node1,node)
+		local node1=minetest.env:get_node(pos2)	
+		deploy_node (inv,"slot2",pos2,node1,node)
+	end
+end
+
+mk2_off = function(pos, node)
+	if node.name == "technic:constructor_mk2_on" then
+		hacky_swap_node(pos,"technic:constructor_mk2_off")
+		nodeupdate(pos)
+	end
+end
+
+minetest.register_node("technic:constructor_mk2_off", {
+	description = "Constructor MK2",
+	tile_images = {"technic_constructor_mk2_top_off.png","technic_constructor_mk2_bottom_off.png","technic_constructor_mk2_side2_off.png","technic_constructor_mk2_side1_off.png",
+			"technic_constructor_back.png","technic_constructor_front_off.png"},
+	is_ground_content = true,
+	paramtype2 = "facedir",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2},
+	mesecons= {effector={action_on=mk2_on}},
+	sounds = default.node_sound_stone_defaults(),
+	on_construct = function(pos)
+	local meta = minetest.env:get_meta(pos)
+	meta:set_string("formspec",
+				"invsize[8,9;]"..
+				"label[0,0;Constructor MK2]"..
+				"label[5,0;Slot 1]"..
+				"list[current_name;slot1;6,0;1,1;]"..
+				"label[5,1;Slot 2]"..
+				"list[current_name;slot2;6,1;1,1;]"..
+				"list[current_player;main;0,5;8,4;]")
+		meta:set_string("infotext", "Constructor MK2")
+		local inv = meta:get_inventory()
+		inv:set_size("slot1", 1)
+		inv:set_size("slot2", 1)
+	end,
+
+	can_dig = function(pos,player)
+		local meta = minetest.env:get_meta(pos)
+		local inv = meta:get_inventory()
+		if inv:is_empty("slot1")==false or inv:is_empty("slot2")==false then return false end
+		return true
+	end,	
+})
+
+minetest.register_node("technic:constructor_mk2_on", {
+	description = "Constructor MK2",
+	tile_images = {"technic_constructor_mk2_top_on.png","technic_constructor_mk2_bottom_on.png","technic_constructor_mk2_side2_on.png","technic_constructor_mk2_side1_on.png",
+			"technic_constructor_back.png","technic_constructor_front_on.png"},
+	is_ground_content = true,
+	paramtype2 = "facedir",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2, not_in_creative_inventory=1},
+	mesecons= {effector={action_off=mk2_off}},
+	sounds = default.node_sound_stone_defaults(),
+})
+
+
+-- Constructor MK3
+mk3_on = function(pos, node)
+	local meta = minetest.env:get_meta(pos)
+	local inv = meta:get_inventory()
+	
+	local pos1={}
+	local pos2={}
+	local pos3={}
+	local pos4={}
+	
+	pos1.x=pos.x
+	pos1.y=pos.y
+	pos1.z=pos.z
+	
+	pos2.x=pos.x
+	pos2.y=pos.y
+	pos2.z=pos.z
+	
+	pos3.x=pos.x
+	pos3.y=pos.y
+	pos3.z=pos.z
+
+	pos4.x=pos.x
+	pos4.y=pos.y
+	pos4.z=pos.z
+
+	if node.param2==3 then pos1.x=pos1.x+1 pos2.x=pos2.x+2 pos3.x=pos3.x+3 pos4.x=pos4.x+4 end
+	if node.param2==2 then pos1.z=pos1.z+1 pos2.z=pos2.z+2 pos3.z=pos3.z+3 pos4.z=pos4.z+4 end
+	if node.param2==1 then pos1.x=pos1.x-1 pos2.x=pos2.x-2 pos3.x=pos3.x-3 pos4.x=pos4.x-4 end
+	if node.param2==0 then pos1.z=pos1.z-1 pos2.z=pos2.z-2 pos3.z=pos3.z-3 pos4.z=pos4.z-4 end
+
+	if node.name == "technic:constructor_mk3_off" then
+		hacky_swap_node(pos,"technic:constructor_mk3_on")
+		nodeupdate(pos)
+		local node1=minetest.env:get_node(pos1)
+		deploy_node (inv,"slot1",pos1,node1,node)
+		local node1=minetest.env:get_node(pos2)	
+		deploy_node (inv,"slot2",pos2,node1,node)
+		local node1=minetest.env:get_node(pos3)	
+		deploy_node (inv,"slot3",pos3,node1,node)
+		local node1=minetest.env:get_node(pos4)	
+		deploy_node (inv,"slot4",pos4,node1,node)
+	end
+end
+
+mk3_off = function(pos, node)
+	if node.name == "technic:constructor_mk3_on" then
+		hacky_swap_node(pos,"technic:constructor_mk3_off")
+		nodeupdate(pos)
+	end
+end
+
+minetest.register_node("technic:constructor_mk3_off", {
+	description = "Constructor MK3",
+	tile_images = {"technic_constructor_mk3_top_off.png","technic_constructor_mk3_bottom_off.png","technic_constructor_mk3_side2_off.png","technic_constructor_mk3_side1_off.png",
+			"technic_constructor_back.png","technic_constructor_front_off.png"},
+	is_ground_content = true,
+	paramtype2 = "facedir",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2},
+	mesecons= {effector={action_on=mk3_on}},
+	sounds = default.node_sound_stone_defaults(),
+	on_construct = function(pos)
+	local meta = minetest.env:get_meta(pos)
+	meta:set_string("formspec",
+				"invsize[8,9;]"..
+				"label[0,0;Constructor MK2]"..
+				"label[5,0;Slot 1]"..
+				"list[current_name;slot1;6,0;1,1;]"..
+				"label[5,1;Slot 2]"..
+				"list[current_name;slot2;6,1;1,1;]"..
+				"label[5,2;Slot 3]"..
+				"list[current_name;slot3;6,2;1,1;]"..
+				"label[5,3;Slot 4]"..
+				"list[current_name;slot4;6,3;1,1;]"..
+				"list[current_player;main;0,5;8,4;]")
+		meta:set_string("infotext", "Constructor MK3")
+		local inv = meta:get_inventory()
+		inv:set_size("slot1", 1)
+		inv:set_size("slot2", 1)
+		inv:set_size("slot3", 1)
+		inv:set_size("slot4", 1)
+
+	end,
+
+	can_dig = function(pos,player)
+		local meta = minetest.env:get_meta(pos)
+		local inv = meta:get_inventory()
+		if inv:is_empty("slot1")==false or inv:is_empty("slot2")==false or inv:is_empty("slot3")==false or inv:is_empty("slot4")==false then return false end
+		return true
+	end,	
+})
+
+minetest.register_node("technic:constructor_mk3_on", {
+	description = "Constructor MK3",
+	tile_images = {"technic_constructor_mk3_top_on.png","technic_constructor_mk3_bottom_on.png","technic_constructor_mk3_side2_on.png","technic_constructor_mk3_side1_on.png",
+			"technic_constructor_back.png","technic_constructor_front_on.png"},
+	is_ground_content = true,
+	paramtype2 = "facedir",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2,not_in_creative_inventory=1},
+	mesecons= {effector={action_off=mk3_off}},
+	sounds = default.node_sound_stone_defaults(),
+})
+
+
+deploy_node =function (inv, slot_name, pos1, node1, node)
+if node1.name == "air" then 
+			if not inv:is_empty(slot_name) then
+			stack1=inv:get_list(slot_name)
+			node_to_be_placed={name=stack1[1]:get_name(), param1=0, param2=node.param2}
+			minetest.env:set_node(pos1,node_to_be_placed)
+			stack1[1]:take_item()
+			inv:set_stack(slot_name, 1, stack1[1])
+			return
+			end
+		return 
+		end
+		if node1.name == "ignore" or
+		   node1.name == "default:lava_source" or
+		   node1.name == "default:lava_flowing" or	
+		   node1.name == "default:water_source" or
+		   node1.name == "default:water_flowing" 
+		   then return end
+		if inv:room_for_item(slot_name,node1) then	
+			inv:add_item(slot_name,node1)
+			minetest.env:remove_node(pos1)
+		end
+
+end
diff --git a/technic/copper_chest.lua b/technic/copper_chest.lua
new file mode 100644
index 0000000..ed75288
--- /dev/null
+++ b/technic/copper_chest.lua
@@ -0,0 +1,95 @@
+minetest.register_craft({
+	output = 'technic:copper_chest 1',
+	recipe = {
+		{'moreores:copper_ingot','moreores:copper_ingot','moreores:copper_ingot'},
+		{'moreores:copper_ingot','technic:iron_chest','moreores:copper_ingot'},
+		{'moreores:copper_ingot','moreores:copper_ingot','moreores:copper_ingot'},
+	}
+})
+
+minetest.register_craft({
+	output = 'technic:copper_locked_chest 1',
+	recipe = {
+		{'moreores:copper_ingot','moreores:copper_ingot','moreores:copper_ingot'},
+		{'moreores:copper_ingot','technic:iron_locked_chest','moreores:copper_ingot'},
+		{'moreores:copper_ingot','moreores:copper_ingot','moreores:copper_ingot'},
+	}
+})
+
+minetest.register_craft({
+	output = 'technic:copper_locked_chest 1',
+	recipe = {
+		{'default:steel_ingot'},
+		{'technic:copper_chest'},
+	}
+})
+
+minetest.register_craftitem("technic:copper_chest", {
+	description = "Copper Chest",
+	stack_max = 99,
+})
+minetest.register_craftitem("technic:copper_locked_chest", {
+	description = "Copper Locked Chest",
+	stack_max = 99,
+})
+
+minetest.register_node("technic:copper_chest", {
+	description = "Copper Chest",
+	tiles = {"technic_copper_chest_top.png", "technic_copper_chest_top.png", "technic_copper_chest_side.png",
+		"technic_copper_chest_side.png", "technic_copper_chest_side.png", "technic_copper_chest_front.png"},
+	paramtype2 = "facedir",
+	groups = chest_groups1,
+	tube = tubes_properties,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[10,9;]"..
+				"list[current_name;main;0,0;10,4;]"..
+				"list[current_player;main;0,5;8,4;]")
+		meta:set_string("infotext", "Copper Chest")
+		local inv = meta:get_inventory()
+		inv:set_size("main", 10*4)
+	end,
+
+	can_dig = chest_can_dig,
+	on_metadata_inventory_move = def_on_metadata_inventory_move,
+	on_metadata_inventory_put = def_on_metadata_inventory_put,
+	on_metadata_inventory_take = def_on_metadata_inventory_take 
+})
+  
+minetest.register_node("technic:copper_locked_chest", {
+	description = "Copper Locked Chest",
+	tiles = {"technic_copper_chest_top.png", "technic_copper_chest_top.png", "technic_copper_chest_side.png",
+		"technic_copper_chest_side.png", "technic_copper_chest_side.png", "technic_copper_chest_locked.png"},
+	paramtype2 = "facedir",
+	groups = chest_groups1,
+	tube = tubes_properties,legacy_facedir_simple = true,
+	legacy_facedir_simple = true,
+	sounds = default.node_sound_wood_defaults(),
+	after_place_node = function(pos, placer)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("owner", placer:get_player_name() or "")
+		meta:set_string("infotext", "Copper Locked Chest (owned by "..
+				meta:get_string("owner")..")")
+	end,
+	on_construct = function(pos)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("formspec",
+				"invsize[10,9;]"..
+				"list[current_name;main;0,0;10,4;]"..
+				"list[current_player;main;0,5;8,4;]")
+		meta:set_string("infotext", "Copper Locked Chest")
+		meta:set_string("owner", "")
+		local inv = meta:get_inventory()
+		inv:set_size("main", 10*4)
+	end,
+
+	can_dig = chest_can_dig,
+	allow_metadata_inventory_move = def_allow_metadata_inventory_move,
+	allow_metadata_inventory_put = def_allow_metadata_inventory_put,
+	allow_metadata_inventory_take = def_allow_metadata_inventory_take,
+	on_metadata_inventory_move = def_on_metadata_inventory_move,
+	on_metadata_inventory_put = def_on_metadata_inventory_put,
+	on_metadata_inventory_take = def_on_metadata_inventory_take 
+})
diff --git a/technic/creative.lua b/technic/creative.lua
new file mode 100644
index 0000000..7b4c493
--- /dev/null
+++ b/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/technic/depends.txt b/technic/depends.txt
new file mode 100644
index 0000000..492d75e
--- /dev/null
+++ b/technic/depends.txt
@@ -0,0 +1,4 @@
+moreores
+pipeworks
+mesecons
+stairsplus
diff --git a/technic/deployer.lua b/technic/deployer.lua
new file mode 100644
index 0000000..ce3b735
--- /dev/null
+++ b/technic/deployer.lua
@@ -0,0 +1,91 @@
+minetest.register_craft({
+	output = 'technic:deployer_off 1',
+	recipe = {
+		{'default:wood', 'default:chest','default:wood'},
+		{'default:stone', 'mesecons:piston','default:stone'},
+		{'default:stone', 'mesecons:mesecon','default:stone'},
+
+	}
+})
+
+minetest.register_node("technic:deployer_off", {
+	description = "Deployer",
+	tile_images = {"technic_deployer_top.png","technic_deployer_bottom.png","technic_deployer_side2.png","technic_deployer_side1.png",
+			"technic_deployer_back.png","technic_deployer_front_off.png"},
+	is_ground_content = true,
+	paramtype2 = "facedir",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon_receptor_off = 1, mesecon_effector_off = 1, mesecon = 2,tubedevice=1},
+	sounds = default.node_sound_stone_defaults(),
+	on_construct = function(pos)
+	local meta = minetest.env:get_meta(pos)
+	meta:set_string("formspec",
+				"invsize[8,9;]"..
+				"label[0,0;Deployer]"..
+				"list[current_name;main;4,1;3,3;]"..
+				"list[current_player;main;0,5;8,4;]")
+		meta:set_string("infotext", "Deployer")
+		local inv = meta:get_inventory()
+		inv:set_size("main", 3*3)
+	end,
+
+	can_dig = function(pos,player)
+		local meta = minetest.env:get_meta(pos);
+		local inv = meta:get_inventory()
+		if not inv:is_empty("main") then
+			return false
+		end
+		return true
+		end,
+	
+})
+
+minetest.register_node("technic:deployer_on", {
+	description = "Deployer",
+	tile_images = {"technic_deployer_top.png","technic_deployer_bottom.png","technic_deployer_side2.png","technic_deployer_side1.png",
+			"technic_deployer_back.png","technic_deployer_front_on.png"},
+	is_ground_content = true,
+	paramtype2 = "facedir",
+	tubelike=1,
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon_receptor_off = 1, mesecon_effector_off = 1, mesecon = 2,tubedevice=1,not_in_creative_inventory=1},
+	sounds = default.node_sound_stone_defaults(),
+})
+
+mesecon:register_on_signal_on(function(pos, node)
+	local pos1={}
+	pos1.x=pos.x
+	pos1.y=pos.y
+	pos1.z=pos.z
+	if node.param2==3 then pos1.x=pos1.x+1 end
+	if node.param2==2 then pos1.z=pos1.z+1 end
+	if node.param2==1 then pos1.x=pos1.x-1 end
+	if node.param2==0 then pos1.z=pos1.z-1 end
+
+	if node.name == "technic:deployer_off" then
+		hacky_swap_node(pos,"technic:deployer_on")
+		nodeupdate(pos)
+			local meta = minetest.env:get_meta(pos);
+		
+		local inv = meta:get_inventory()
+		print (dump(inv))
+		for _,stack in ipairs(inv:get_list("main")) do
+		print (dump(stack:get_name()))
+
+		if stack:get_name() ~=nil then 
+			node1={name=stack:get_name(), param1=0, param2=node.param2}
+			minetest.env:place_node(pos1,node1)
+			return
+			end
+	end
+	end
+end)
+
+mesecon:register_on_signal_off(function(pos, node)
+	if node.name == "technic:deployer_on" then
+		hacky_swap_node(pos,"technic:deployer_off")
+		nodeupdate(pos)
+	end
+end)
+
+mesecon:register_effector("technic:deployer_on", "technic:deployer_off")
+
+
diff --git a/technic/electric.lua b/technic/electric.lua
new file mode 100644
index 0000000..2eb2bf3
--- /dev/null
+++ b/technic/electric.lua
@@ -0,0 +1,268 @@
+power_tools ={}
+
+registered_power_tools_count=1
+
+function register_power_tool (string1,max_charge)
+power_tools[registered_power_tools_count]={}
+power_tools[registered_power_tools_count].tool_name=string1
+power_tools[registered_power_tools_count].max_charge=max_charge
+registered_power_tools_count=registered_power_tools_count+1
+end
+
+register_power_tool ("technic:mining_drill",60000)
+register_power_tool ("technic:laser_mk1",40000)
+register_power_tool ("technic:battery",10000)
+
+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_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,		
+})
\ No newline at end of file
diff --git a/technic/electric_furnace.lua b/technic/electric_furnace.lua
new file mode 100644
index 0000000..1358802
--- /dev/null
+++ b/technic/electric_furnace.lua
@@ -0,0 +1,177 @@
+minetest.register_alias("electric_furnace", "technic:electric_furnace")
+
+minetest.register_craft({
+	output = 'technic:electric_furnace',
+	recipe = {
+		{'default:cobble', 'default:cobble', 'default:cobble'},
+		{'default:cobble', '', 'default:cobble'},
+		{'default:steel_ingot', 'moreores:copper_ingot', 'default:steel_ingot'},
+	}
+})
+
+
+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,		
+})
diff --git a/technic/flashlight.lua b/technic/flashlight.lua
new file mode 100644
index 0000000..e773cfc
--- /dev/null
+++ b/technic/flashlight.lua
@@ -0,0 +1,169 @@
+-- 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 = {
+		    {"technic:rubber","glass","technic:rubber"},
+                    {"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)
+	local pos = player:getpos()
+	local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
+	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 player then
+		flashlight_weared=check_for_flashlight(player)
+		local pos = player:getpos()
+		local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
+		local old_pos = {x=player_positions[player_name]["x"], y=player_positions[player_name]["y"], z=player_positions[player_name]["z"]}
+		
+		if last_wielded[player_name] and not flashlight_weared then --remove light, flashlight weared out or was removed from hotbar
+			local node=minetest.env:get_node_or_nil(old_pos)
+			if node then
+			if node.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"})		
+			  last_wielded[player_name]=false
+			  end
+			end
+			end
+
+		player_moved=not(old_pos.x==rounded_pos.x and old_pos.y==rounded_pos.y and old_pos.z==rounded_pos.z)
+		if player_moved and last_wielded[player_name] and flashlight_weared  then
+			
+			local node=minetest.env:get_node_or_nil(rounded_pos)
+			if node then
+			if node.name=="air" then 
+			  	minetest.env:add_node(rounded_pos,{type="node",name="technic:light"})
+			  end
+			end
+			local node=minetest.env:get_node_or_nil(old_pos)
+			if node then
+			  if node.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
+			player_positions[player_name]["x"] = rounded_pos.x
+			player_positions[player_name]["y"] = rounded_pos.y
+			player_positions[player_name]["z"] = rounded_pos.z
+			
+		else if not last_wielded[player_name] and flashlight_weared then
+			local node=minetest.env:get_node_or_nil(rounded_pos)
+			if node then
+			if node.name=="air" then 
+			  	minetest.env:add_node(rounded_pos,{type="node",name="technic:light"})
+			  end
+			end
+			player_positions[player_name]["x"] = rounded_pos.x
+			player_positions[player_name]["y"] = rounded_pos.y
+			player_positions[player_name]["z"] = rounded_pos.z
+			last_wielded[player_name]=true
+			end			
+			
+	end
+	end
+	end
+end)
+
+minetest.register_node("technic:light", {
+	drawtype = "glasslike",
+	tile_images = {"technic_light.png"},
+	paramtype = "light",
+	walkable = false,
+	buildable_to = true,
+	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,
+	buildable_to = true,
+	is_ground_content = true,
+	light_propagates = true,
+	sunlight_propagates = true,
+	selection_box = {
+        type = "fixed",
+        fixed = {0, 0, 0, 0, 0, 0},
+    },
+})
+
+function check_for_flashlight (player)
+if player==nil then return false end
+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 false end --flashlight not charghed
+			charge=tonumber(item["metadata"]) 
+			if charge-2>0 then
+			 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 false
+end	
diff --git a/technic/flashlight_old.lua b/technic/flashlight_old.lua
new file mode 100644
index 0000000..8a2c338
--- /dev/null
+++ b/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/technic/generator.lua b/technic/generator.lua
new file mode 100644
index 0000000..c8ac802
--- /dev/null
+++ b/technic/generator.lua
@@ -0,0 +1,148 @@
+minetest.register_alias("generator", "technic:generator")
+minetest.register_alias("generator", "technic:generator_active")
+
+minetest.register_craft({
+	output = 'technic:generator',
+	recipe = {
+		{'default:stone', 'default:stone', 'default:stone'},
+		{'default:stone', '', 'default:stone'},
+		{'default:stone', 'moreores:copper_ingot', 'default:stone'},
+	}
+})
+
+minetest.register_craftitem("technic:generator", {
+	description = "Coal Driven Generator",
+	stack_max = 99,
+}) 
+
+generator_formspec =
+	"invsize[8,9;]"..
+	"image[0,0;5,5;technic_generator_menu.png]"..
+	"image[1,1;1,2;technic_power_meter_bg.png]"..
+--	"label[0,0;Generator]"..
+	"label[1,3;Power level]"..
+	"list[current_name;src;3,1;1,1;]"..
+	"image[4,1;1,1;default_furnace_fire_bg.png]"..
+	"list[current_player;main;0,5;8,4;]"
+	
+
+minetest.register_node("technic:generator", {
+	description = "Coal Driven Generator",
+	tiles = {"technic_generator_top.png", "technic_machine_bottom.png", "technic_generator_side.png",
+		"technic_generator_side.png", "technic_generator_side.png", "technic_generator_front.png"},
+	paramtype2 = "facedir",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+	legacy_facedir_simple = true,
+	sounds = default.node_sound_wood_defaults(),
+	technic_power_machine=1,
+	internal_EU_buffer=0;
+	internal_EU_buffer_size=5000;
+	burn_time=0;
+	on_construct = function(pos)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("infotext", "Generator")
+		meta:set_float("technic_power_machine", 1)
+		meta:set_float("internal_EU_buffer", 0)
+		meta:set_float("internal_EU_buffer_size", 5000)
+		meta:set_string("formspec", generator_formspec)
+		meta:set_float("burn_time", 0)
+		
+		local inv = meta:get_inventory()
+		inv:set_size("src", 1)
+		
+		end,	
+	can_dig = function(pos,player)
+		local meta = minetest.env:get_meta(pos);
+		local inv = meta:get_inventory()
+		if not inv:is_empty("src") then
+			return false
+		end
+		return true
+		end,
+
+})
+
+minetest.register_node("technic:generator_active", {
+	description = "Coal Driven Generator",
+	tiles = {"technic_generator_top.png", "technic_machine_bottom.png", "technic_generator_side.png",
+		"technic_generator_side.png", "technic_generator_side.png", "technic_generator_front_active.png"},
+	paramtype2 = "facedir",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
+	legacy_facedir_simple = true,
+	sounds = default.node_sound_wood_defaults(),
+	drop="technic:generator",
+	technic_power_machine=1,
+	internal_EU_buffer=0;
+	internal_EU_buffer_size=0;
+	burn_time=0;
+	can_dig = function(pos,player)
+		local meta = minetest.env:get_meta(pos);
+		local inv = meta:get_inventory()
+		if not inv:is_empty("src") then
+			return false
+		end
+		return true
+		end,
+
+})
+minetest.register_abm({
+	nodenames = {"technic:generator","technic:generator_active"},
+	interval = 1,
+	chance = 1,
+	action = function(pos, node, active_object_count, active_object_count_wider)
+
+	local meta = minetest.env:get_meta(pos)
+	local burn_time= meta:get_float("burn_time")
+	local charge= meta:get_float("internal_EU_buffer")
+	local max_charge= meta:get_float("internal_EU_buffer_size")
+	local burn_charge=200
+
+	if burn_time>0 then
+		if charge+burn_charge>max_charge then
+		burn_charge=max_charge-charge
+		end
+		if burn_charge>0 then 
+		burn_time=burn_time-1
+		meta:set_float("burn_time",burn_time)
+		charge=charge+burn_charge
+		meta:set_float("internal_EU_buffer",charge)
+		end
+		
+	end
+	if burn_time==0 then
+		local inv = meta:get_inventory()
+		if inv:is_empty("src")==false  then 
+		local srcstack = inv:get_stack("src", 1)
+		src_item=srcstack:to_table()
+		if src_item["name"]== "default:coal_lump" then
+		srcstack:take_item()
+		inv:set_stack("src", 1, srcstack)
+		burn_time=16
+		meta:set_float("burn_time",burn_time)
+		hacky_swap_node (pos,"technic:generator_active") 
+		end
+		end
+	end
+
+	local load = math.floor((charge/max_charge)*100)
+	local percent = math.floor((burn_time/16)*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]"..
+				"label[0,0;Generator]"..
+				"label[1,3;Power level]"..
+				"list[current_name;src;3,1;1,1;]"..
+				"image[4,1;1,1;default_furnace_fire_bg.png^[lowpart:"..
+						(percent)..":default_furnace_fire_fg.png]"..
+				"list[current_player;main;0,5;8,4;]"
+				)
+				
+	if burn_time==0 then
+		hacky_swap_node (pos,"technic:generator")
+	end
+		
+
+	end
+}) 
+
diff --git a/technic/geothermal.lua b/technic/geothermal.lua
new file mode 100644
index 0000000..8f3a7d7
--- /dev/null
+++ b/technic/geothermal.lua
@@ -0,0 +1,135 @@
+minetest.register_alias("geothermal", "technic:geothermal")
+
+minetest.register_craft({
+	output = 'technic:geothermal',
+	recipe = {
+		{'default:stone', 'default:stone', 'default:stone'},
+		{'moreores:copper_ingot', 'technic:diamond', 'moreores:copper_ingot'},
+		{'default:stone', 'moreores:copper_ingot', 'default:stone'},
+	}
+})
+
+minetest.register_craftitem("technic:geothermal", {
+	description = "Geothermal Generator",
+	stack_max = 99,
+}) 
+
+geothermal_formspec =
+	"invsize[8,4;]"..
+	"image[1,1;1,2;technic_power_meter_bg.png]"..
+	"label[0,0;Geothermal Generator]"..
+	"label[1,3;Power level]"..
+	"list[current_player;main;0,5;8,4;]"
+	
+
+minetest.register_node("technic:geothermal", {
+	description = "Geothermal Generator",
+	tiles = {"technic_geothermal_top.png", "technic_machine_bottom.png", "technic_geothermal_side.png",
+		"technic_geothermal_side.png", "technic_geothermal_side.png", "technic_geothermal_side.png"},
+	paramtype2 = "facedir",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+	legacy_facedir_simple = true,
+	sounds = default.node_sound_wood_defaults(),
+	technic_power_machine=1,
+	internal_EU_buffer=0;
+	internal_EU_buffer_size=5000;
+	burn_time=0;
+	on_construct = function(pos)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("infotext", "Geothermal Generator")
+		meta:set_float("technic_power_machine", 1)
+		meta:set_float("internal_EU_buffer", 0)
+		meta:set_float("internal_EU_buffer_size", 2000)
+		meta:set_string("formspec", geothermal_formspec)	
+		end,	
+
+})
+
+minetest.register_node("technic:geothermal_active", {
+	description = "Geothermal Generator",
+	tiles = {"technic_geothermal_top_active.png", "technic_machine_bottom.png", "technic_geothermal_side.png",
+		"technic_geothermal_side.png", "technic_geothermal_side.png", "technic_geothermal_side.png"},
+	paramtype2 = "facedir",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
+	legacy_facedir_simple = true,
+	sounds = default.node_sound_wood_defaults(),
+	drop="technic:geothermal",
+	technic_power_machine=1,
+	internal_EU_buffer=0;
+	internal_EU_buffer_size=0;
+})
+
+minetest.register_abm({
+	nodenames = {"technic:geothermal","technic:geothermal_active"},
+	interval = 1,
+	chance = 1,
+	action = function(pos, node, active_object_count, active_object_count_wider)
+
+	local meta = minetest.env:get_meta(pos)
+	local charge= meta:get_float("internal_EU_buffer")
+	local max_charge= meta:get_float("internal_EU_buffer_size")
+	local water_nodes = 0
+	local lava_nodes = 0
+	local production_level=0
+	local load_step=0
+
+	pos.x=pos.x+1
+	local check=check_node_around (pos)
+	if check==1 then water_nodes=water_nodes+1 end
+	if check==2 then lava_nodes=lava_nodes+1 end
+	pos.x=pos.x-2
+	check=check_node_around (pos)
+	if check==1 then water_nodes=water_nodes+1 end
+	if check==2 then lava_nodes=lava_nodes+1 end
+	pos.x=pos.x+1
+	pos.z=pos.z+1
+	check=check_node_around (pos)
+	if check==1 then water_nodes=water_nodes+1 end
+	if check==2 then lava_nodes=lava_nodes+1 end
+	pos.z=pos.z-2
+	check=check_node_around (pos)
+	if check==1 then water_nodes=water_nodes+1 end
+	if check==2 then lava_nodes=lava_nodes+1 end
+	pos.z=pos.z+1
+	
+	if water_nodes==1 and lava_nodes==1 then production_level=50 load_step=30 end
+	if water_nodes==2 and lava_nodes==1 then production_level=75 load_step=45 end
+	if water_nodes==1 and lava_nodes==2 then production_level=75 load_step=45 end
+	if water_nodes==2 and lava_nodes==2 then production_level=100 load_step=60 end
+	if water_nodes==3 and lava_nodes==1 then production_level=25 load_step=15 end
+	if water_nodes==1 and lava_nodes==3 then production_level=25 load_step=15 end
+
+        if production_level>0 then
+		if charge+load_step>max_charge then
+		load_step=max_charge-charge
+		end
+		if load_step>0 then 
+		charge=charge+load_step
+		meta:set_float("internal_EU_buffer",charge)
+		end
+	end
+
+	local load = math.floor((charge/max_charge)*100)
+	meta:set_string("formspec",
+				"invsize[8,4;]"..
+				"image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
+						(load)..":technic_power_meter_fg.png]"..
+				"label[0,0;Geothermal Generator]"..
+				"label[1,3;Power level]"..
+				"label[4,0;Production at "..tostring(production_level).."%]"
+				)
+				
+	if production_level>0 and minetest.env:get_node(pos).name=="technic:geothermal" then
+		hacky_swap_node (pos,"technic:geothermal_active")
+		return
+	end
+	if production_level==0 then hacky_swap_node (pos,"technic:geothermal") end
+end
+}) 
+
+function check_node_around (pos)
+local node=minetest.env:get_node(pos)
+if node.name=="default:water_source" or node.name=="default:water_flowing"  then return 1 end
+if node.name=="default:lava_source" or node.name=="default:lava_flowing"  then return 2 end	
+return 0
+end
\ No newline at end of file
diff --git a/technic/gold_chest.lua b/technic/gold_chest.lua
new file mode 100644
index 0000000..820ba86
--- /dev/null
+++ b/technic/gold_chest.lua
@@ -0,0 +1,466 @@
+local chest_mark_colors = {
+    '_black',
+    '_blue', 
+    '_brown',
+    '_cyan',
+    '_dark_green',
+    '_dark_grey',
+    '_green',
+    '_grey',
+    '_magenta',
+    '_orange',
+    '_pink',
+    '_red',
+    '_violet',
+    '_white',
+    '_yellow',
+}
+
+minetest.register_craft({
+	output = 'technic:gold_chest 1',
+	recipe = {
+		{'moreores:gold_ingot','moreores:gold_ingot','moreores:gold_ingot'},
+		{'moreores:gold_ingot','technic:silver_chest','moreores:gold_ingot'},
+		{'moreores:gold_ingot','moreores:gold_ingot','moreores:gold_ingot'},
+	}
+})
+
+minetest.register_craft({
+	output = 'technic:gold_locked_chest 1',
+	recipe = {
+		{'moreores:gold_ingot','moreores:gold_ingot','moreores:gold_ingot'},
+		{'moreores:gold_ingot','technic:silver_locked_chest','moreores:gold_ingot'},
+		{'moreores:gold_ingot','moreores:gold_ingot','moreores:gold_ingot'},
+	}
+})
+
+minetest.register_craft({
+	output = 'technic:gold_locked_chest 1',
+	recipe = {
+		{'default:steel_ingot'},
+		{'technic:gold_chest'},
+	}
+})
+
+minetest.register_craftitem("technic:gold_chest", {
+	description = "Gold Chest",
+	stack_max = 99,
+})
+minetest.register_craftitem("technic:gold_locked_chest", {
+	description = "Gold Locked Chest",
+	stack_max = 99,
+})
+
+gold_chest_formspec	=	"invsize[12,9;]"..
+						"list[current_name;main;0,0;12,4;]"..
+						"list[current_player;main;0,5;8,4;]"
+
+gold_chest_inv_size = 12*4
+
+minetest.register_node("technic:gold_chest", {
+	description = "Gold Chest",
+	tiles = {"technic_gold_chest_top.png", "technic_gold_chest_top.png", "technic_gold_chest_side.png",
+		"technic_gold_chest_side.png", "technic_gold_chest_side.png", "technic_gold_chest_front.png"},
+	paramtype2 = "facedir",
+	groups = chest_groups1,
+	tube = tubes_properties,
+	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",gold_chest_formspec)
+		meta:set_string("infotext", "Gold Chest")
+		local inv = meta:get_inventory()
+		inv:set_size("main", gold_chest_inv_size)
+	end,
+
+	can_dig = chest_can_dig,
+
+	on_punch = function (pos, node, puncher)
+	chest_punched (pos,node,puncher);
+	end,
+
+	on_receive_fields = function(pos, formname, fields, sender)
+	local meta = minetest.env:get_meta(pos);
+	fields.text = fields.text or ""
+	meta:set_string("text", fields.text)
+	meta:set_string("infotext", '"'..fields.text..'"')
+	meta:set_string("formspec",gold_chest_formspec)
+	end,
+
+	on_metadata_inventory_move = def_on_metadata_inventory_move,
+	on_metadata_inventory_put = def_on_metadata_inventory_put,
+	on_metadata_inventory_take = def_on_metadata_inventory_take 
+})
+
+for i, state in ipairs(chest_mark_colors) do
+minetest.register_node("technic:gold_chest".. state, {
+	description = "Gold Chest",
+	tiles = {"technic_gold_chest_top.png", "technic_gold_chest_top.png", "technic_gold_chest_side.png",
+		"technic_gold_chest_side.png", "technic_gold_chest_side.png", "technic_gold_chest_front"..state..".png"},
+	paramtype2 = "facedir",
+	groups = chest_groups2,
+	tube = tubes_properties,
+	legacy_facedir_simple = true,
+	sounds = default.node_sound_wood_defaults(),
+	drop = "technic:gold_chest",
+	on_construct = function(pos)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("formspec",gold_chest_formspec)
+		meta:set_string("infotext", "Gold Chest")
+		local inv = meta:get_inventory()
+		inv:set_size("main", gold_chest_inv_size)
+	end,
+
+	can_dig =chest_can_dig,
+
+	on_punch = function (pos, node, puncher)
+	chest_punched (pos,node,puncher);
+	end,
+	
+	on_receive_fields = function(pos, formname, fields, sender)
+        local meta = minetest.env:get_meta(pos);
+      		fields.text = fields.text or ""
+		meta:set_string("text", fields.text)
+		meta:set_string("infotext", '"'..fields.text..'"')
+		meta:set_string("formspec",gold_chest_formspec)
+	end,
+
+	on_metadata_inventory_move = def_on_metadata_inventory_move,
+	on_metadata_inventory_put = def_on_metadata_inventory_put,
+	on_metadata_inventory_take = def_on_metadata_inventory_take 
+})
+end
+
+minetest.register_node("technic:gold_locked_chest", {
+	description = "Gold Locked Chest",
+	tiles = {"technic_gold_chest_top.png", "technic_gold_chest_top.png", "technic_gold_chest_side.png",
+		"technic_gold_chest_side.png", "technic_gold_chest_side.png", "technic_gold_chest_locked.png"},
+	paramtype2 = "facedir",
+	drop = "technic:gold_locked_chest",
+	groups = chest_groups1,
+	tube = tubes_properties,
+	legacy_facedir_simple = true,
+	sounds = default.node_sound_wood_defaults(),
+	after_place_node = function(pos, placer)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("owner", placer:get_player_name() or "")
+		meta:set_string("infotext", "Gold Locked Chest (owned by "..
+				meta:get_string("owner")..")")
+	end,
+	on_construct = function(pos)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("formspec",gold_chest_formspec)
+		meta:set_string("infotext", "Gold Locked Chest")
+		meta:set_string("owner", "")
+		local inv = meta:get_inventory()
+		inv:set_size("main", gold_chest_inv_size)
+	end,
+
+	can_dig =chest_can_dig,
+
+	on_punch = function (pos, node, puncher)
+		local meta = minetest.env:get_meta(pos);
+		if (has_locked_chest_privilege(meta, puncher)) then
+			locked_chest_punched (pos,node,puncher);
+		end
+	end,
+	
+	on_receive_fields = function(pos, formname, fields, sender)
+		local meta = minetest.env:get_meta(pos);
+		fields.text = fields.text or ""
+		meta:set_string("text", fields.text)
+		meta:set_string("infotext", '"'..fields.text..'"')
+		meta:set_string("formspec",gold_chest_formspec)
+	end,
+
+	allow_metadata_inventory_move = def_allow_metadata_inventory_move,
+	allow_metadata_inventory_put = def_allow_metadata_inventory_put,
+	allow_metadata_inventory_take = def_allow_metadata_inventory_take,
+	on_metadata_inventory_move = def_on_metadata_inventory_move,
+	on_metadata_inventory_put = def_on_metadata_inventory_put,
+	on_metadata_inventory_take = def_on_metadata_inventory_take 
+})
+
+for i, state in ipairs(chest_mark_colors) do
+minetest.register_node("technic:gold_locked_chest".. state, {
+	description = "Gold Locked Chest",
+	tiles = {"technic_gold_chest_top.png", "technic_gold_chest_top.png", "technic_gold_chest_side.png",
+		"technic_gold_chest_side.png", "technic_gold_chest_side.png", "technic_gold_chest_locked"..state..".png"},
+	paramtype2 = "facedir",
+	drop = "technic:gold_locked_chest",
+	groups = chest_groups2,
+	tube = tubes_properties,
+	legacy_facedir_simple = true,
+	sounds = default.node_sound_wood_defaults(),
+	after_place_node = function(pos, placer)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("owner", placer:get_player_name() or "")
+		meta:set_string("infotext", "Gold Locked Chest (owned by "..
+				meta:get_string("owner")..")")
+	end,
+	on_construct = function(pos)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("formspec",gold_chest_formspec)
+		meta:set_string("infotext", "Gold Locked Chest")
+		meta:set_string("owner", "")
+		local inv = meta:get_inventory()
+		inv:set_size("main", gold_chest_inv_size)
+	end,
+
+	can_dig = chest_can_dig,
+
+	on_punch = function (pos, node, puncher)
+	        local meta = minetest.env:get_meta(pos);
+		if (has_locked_chest_privilege(meta, puncher)) then
+		locked_chest_punched (pos,node,puncher);
+		end
+	end,
+
+	on_receive_fields = function(pos, formname, fields, sender)
+		local meta = minetest.env:get_meta(pos);
+		fields.text = fields.text or ""
+		meta:set_string("text", fields.text)
+		meta:set_string("infotext", '"'..fields.text..'"')
+		meta:set_string("formspec",gold_chest_formspec)
+	end,
+
+	allow_metadata_inventory_move = def_allow_metadata_inventory_move,
+	allow_metadata_inventory_put = def_allow_metadata_inventory_put,
+	allow_metadata_inventory_take = def_allow_metadata_inventory_take,
+	on_metadata_inventory_move = def_on_metadata_inventory_move,
+	on_metadata_inventory_put = def_on_metadata_inventory_put,
+	on_metadata_inventory_take = def_on_metadata_inventory_take 
+})
+end
+
+function chest_punched (pos,node,puncher)
+	
+	local player_tool = puncher:get_wielded_item();
+	local item=player_tool:get_name();
+	if item == "dye:black" then
+		if (hacky_swap_node(pos,"technic:gold_chest_black")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:blue" then
+		if (hacky_swap_node(pos,"technic:gold_chest_blue")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:brown" then
+		if (hacky_swap_node(pos,"technic:gold_chest_brown")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:cyan" then
+		if (hacky_swap_node(pos,"technic:gold_chest_cyan")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:dark_green" then
+		if (hacky_swap_node(pos,"technic:gold_chest_dark_green")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:dark_grey" then
+		if (hacky_swap_node(pos,"technic:gold_chest_dark_grey")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:green" then
+		if (hacky_swap_node(pos,"technic:gold_chest_green")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:grey" then
+		if (hacky_swap_node(pos,"technic:gold_chest_grey")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:magenta" then
+		if (hacky_swap_node(pos,"technic:gold_chest_magenta")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:orange" then
+		if (hacky_swap_node(pos,"technic:gold_chest_orange")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:pink" then
+		if (hacky_swap_node(pos,"technic:gold_chest_pink")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:red" then
+		if (hacky_swap_node(pos,"technic:gold_chest_red")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:violet" then
+		if (hacky_swap_node(pos,"technic:gold_chest_violet")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:white" then
+		if (hacky_swap_node(pos,"technic:gold_chest_white")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:yellow" then
+		if (hacky_swap_node(pos,"technic:gold_chest_yellow")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+
+		local meta = minetest.env:get_meta(pos);
+                meta:set_string("formspec", "hack:sign_text_input")
+	end
+
+
+function locked_chest_punched (pos,node,puncher)
+	
+	local player_tool = puncher:get_wielded_item();
+	local item=player_tool:get_name();
+	if item == "dye:black" then
+		if (hacky_swap_node(pos,"technic:gold_locked_chest_black")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:blue" then
+		if (hacky_swap_node(pos,"technic:gold_locked_chest_blue")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:brown" then
+		if (hacky_swap_node(pos,"technic:gold_locked_chest_brown")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:cyan" then
+		if (hacky_swap_node(pos,"technic:gold_locked_chest_cyan")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:dark_green" then
+		if (hacky_swap_node(pos,"technic:gold_locked_chest_dark_green")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:dark_grey" then
+		if (hacky_swap_node(pos,"technic:gold_locked_chest_dark_grey")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:green" then
+		if (hacky_swap_node(pos,"technic:gold_locked_chest_green")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:grey" then
+		if (hacky_swap_node(pos,"technic:gold_locked_chest_grey")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:magenta" then
+		if (hacky_swap_node(pos,"technic:gold_locked_chest_magenta")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:orange" then
+		if (hacky_swap_node(pos,"technic:gold_locked_chest_orange")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:pink" then
+		if (hacky_swap_node(pos,"technic:gold_locked_chest_pink")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:red" then
+		if (hacky_swap_node(pos,"technic:gold_locked_chest_red")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:violet" then
+		if (hacky_swap_node(pos,"technic:gold_locked_chest_violet")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:white" then
+		if (hacky_swap_node(pos,"technic:gold_locked_chest_white")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+	if item == "dye:yellow" then
+		if (hacky_swap_node(pos,"technic:gold_locked_chest_yellow")) then
+			player_tool:take_item(1);
+			puncher:set_wielded_item(player_tool);
+			return
+		   end
+		end
+
+		local meta = minetest.env:get_meta(pos);
+                meta:set_string("formspec", "hack:sign_text_input")
+	end
+	
diff --git a/technic/grinder.lua b/technic/grinder.lua
new file mode 100644
index 0000000..686ffd3
--- /dev/null
+++ b/technic/grinder.lua
@@ -0,0 +1,326 @@
+grinder_recipes ={}
+
+registered_grinder_recipes_count=1
+
+function register_grinder_recipe (string1,string2)
+grinder_recipes[registered_grinder_recipes_count]={}
+grinder_recipes[registered_grinder_recipes_count].src_name=string1
+grinder_recipes[registered_grinder_recipes_count].dst_name=string2
+registered_grinder_recipes_count=registered_grinder_recipes_count+1
+if UI_recipes_hook then
+	minetest.register_craft({
+	type = "grinding",
+	output = string2,
+	recipe = string1,
+	})
+	end
+end
+
+register_grinder_recipe("default:stone","default:sand")
+register_grinder_recipe("default:cobble","default:gravel")
+register_grinder_recipe("default:gravel","default:dirt")
+register_grinder_recipe("default:desert_stone","default:desert_sand")
+register_grinder_recipe("default:iron_lump","technic:iron_dust 2") 
+register_grinder_recipe("default:coal_lump","technic:coal_dust 2") 
+register_grinder_recipe("moreores:copper_lump","technic:copper_dust 2")
+register_grinder_recipe("moreores:tin_lump","technic:tin_dust 2") 
+register_grinder_recipe("moreores:silver_lump","technic:silver_dust 2")
+register_grinder_recipe("moreores:gold_lump","technic:gold_dust 2") 
+register_grinder_recipe("moreores:mithril_lump","technic:mithril_dust 2") 
+register_grinder_recipe("technic:chromium_lump","technic:chromium_dust 2") 
+register_grinder_recipe("technic:zinc_lump","technic:zinc_dust 2") 
+register_grinder_recipe("technic:coal_dust","dye:black 2") 
+register_grinder_recipe("default:cactus","dye:green 2") 
+register_grinder_recipe("default:dry_shrub","dye:brown 2") 
+register_grinder_recipe("flowers:flower_geranium","dye:blue 2") 
+register_grinder_recipe("flowers:flower_dandelion_white","dye:white 2") 
+register_grinder_recipe("flowers:flower_dandelion_yellow","dye:yellow 2") 
+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",
+	inventory_image = "technic_coal_dust.png",
+	on_place_on_ground = minetest.craftitem_place_item,
+	})
+
+minetest.register_craftitem( "technic:iron_dust", {
+	description = "Iron Dust",
+	inventory_image = "technic_iron_dust.png",
+	on_place_on_ground = minetest.craftitem_place_item,
+	})
+
+minetest.register_craft({
+    type = "cooking",
+    output = "default:steel_ingot",
+    recipe = "technic:iron_dust",
+}) 
+
+minetest.register_craftitem( "technic:copper_dust", {
+	description = "Copper Dust",
+	inventory_image = "technic_copper_dust.png",
+	on_place_on_ground = minetest.craftitem_place_item,
+	})
+minetest.register_craft({
+    type = "cooking",
+    output = "moreores:copper_ingot",
+    recipe = "technic:copper_dust",
+}) 
+
+minetest.register_craftitem( "technic:tin_dust", {
+	description = "Tin Dust",
+	inventory_image = "technic_tin_dust.png",
+	on_place_on_ground = minetest.craftitem_place_item,
+	})
+minetest.register_craft({
+    type = "cooking",
+    output = "moreores:tin_ingot",
+    recipe = "technic:tin_dust",
+}) 
+
+minetest.register_craftitem( "technic:silver_dust", {
+	description = "Silver Dust",
+	inventory_image = "technic_silver_dust.png",
+	on_place_on_ground = minetest.craftitem_place_item,
+	})
+minetest.register_craft({
+    type = "cooking",
+    output = "moreores:silver_ingot",
+    recipe = "technic:silver_dust",
+}) 
+
+minetest.register_craftitem( "technic:gold_dust", {
+	description = "Gold Dust",
+	inventory_image = "technic_gold_dust.png",
+	on_place_on_ground = minetest.craftitem_place_item,
+	})
+minetest.register_craft({
+    type = "cooking",
+    output = "moreores:gold_ingot",
+    recipe = "technic:gold_dust",
+}) 
+
+minetest.register_craftitem( "technic:mithril_dust", {
+	description = "Mithril Dust",
+	inventory_image = "technic_mithril_dust.png",
+	on_place_on_ground = minetest.craftitem_place_item,
+	})
+minetest.register_craft({
+    type = "cooking",
+    output = "moreores:mithril_ingot",
+    recipe = "technic:mithril_dust",
+}) 
+
+minetest.register_craftitem( "technic:chromium_dust", {
+	description = "Chromium Dust",
+	inventory_image = "technic_chromium_dust.png",
+	on_place_on_ground = minetest.craftitem_place_item,
+	})
+minetest.register_craft({
+    type = "cooking",
+    output = "technic:chromium_ingot",
+    recipe = "technic:chromium_dust",
+}) 
+
+minetest.register_craftitem( "technic:bronze_dust", {
+	description = "Bronze Dust",
+	inventory_image = "technic_bronze_dust.png",
+	on_place_on_ground = minetest.craftitem_place_item,
+	})
+minetest.register_craft({
+    type = "cooking",
+    output = "moreores:bronze_ingot",
+    recipe = "technic:bronze_dust",
+}) 
+
+minetest.register_craftitem( "technic:brass_dust", {
+	description = "Brass Dust",
+	inventory_image = "technic_brass_dust.png",
+	on_place_on_ground = minetest.craftitem_place_item,
+	})
+minetest.register_craft({
+    type = "cooking",
+    output = "technic:brass_ingot",
+    recipe = "technic:brass_dust",
+}) 
+
+minetest.register_craftitem( "technic:stainless_steel_dust", {
+	description = "Stainless Steel Dust",
+	inventory_image = "technic_stainless_steel_dust.png",
+	})
+
+minetest.register_craft({
+    type = "cooking",
+    output = "technic:stainless_steel_ingot",
+    recipe = "technic:stainless_steel_dust",
+}) 
+
+minetest.register_craftitem( "technic:zinc_dust", {
+	description = "Zinc Dust",
+	inventory_image = "technic_zinc_dust.png",
+	})
+
+minetest.register_craft({
+    type = "cooking",
+    output = "technic:zinc_ingot",
+    recipe = "technic:zinc_dust",
+}) 
+
+minetest.register_alias("grinder", "technic:grinder")
+minetest.register_craft({
+	output = 'technic:grinder',
+	recipe = {
+		{'default:desert_stone', 'default:desert_stone', 'default:desert_stone'},
+		{'default:desert_stone', 'technic:diamond', 'default:desert_stone'},
+		{'default:stone', 'moreores:copper_ingot', 'default:stone'},
+	}
+})
+
+minetest.register_craftitem("technic:grinder", {
+	description = "Grinder",
+	stack_max = 99,
+}) 
+
+grinder_formspec =
+	"invsize[8,9;]"..
+	"image[1,1;1,2;technic_power_meter_bg.png]"..
+	"label[0,0;Grinder]"..
+	"label[1,3;Power level]"..
+	"list[current_name;src;3,1;1,1;]"..
+	"list[current_name;dst;5,1;2,2;]"..
+	"list[current_player;main;0,5;8,4;]"
+	
+
+minetest.register_node("technic:grinder", {
+	description = "Grinder",
+	tiles = {"technic_grinder_top.png", "technic_machine_bottom.png", "technic_grinder_side.png",
+		"technic_grinder_side.png", "technic_grinder_side.png", "technic_grinder_front.png"},
+	paramtype2 = "facedir",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+	legacy_facedir_simple = true,
+	sounds = default.node_sound_wood_defaults(),
+	technic_power_machine=1,
+	internal_EU_buffer=0;
+	internal_EU_buffer_size=5000;
+	grind_time=0;
+	grinded = nil;
+	src_time = 0;
+	on_construct = function(pos)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("infotext", "Grinder")
+		meta:set_float("technic_power_machine", 1)
+		meta:set_float("internal_EU_buffer", 0)
+		meta:set_float("internal_EU_buffer_size", 5000)
+		meta:set_string("formspec", grinder_formspec)
+		meta:set_float("grind_time", 0)
+		
+		local inv = meta:get_inventory()
+		inv:set_size("src", 1)
+		inv:set_size("dst", 4)
+		
+		end,	
+	can_dig = function(pos,player)
+		local meta = minetest.env:get_meta(pos);
+		local inv = meta:get_inventory()
+		if not inv:is_empty("src") then
+			return false
+		end
+		if not inv:is_empty("dst") then
+			return false
+		end
+
+		return true
+		end,
+
+})
+
+minetest.register_abm({
+	nodenames = {"technic:grinder"},
+	interval = 1,
+	chance = 1,
+	action = function(pos, node, active_object_count, active_object_count_wider)
+
+	local meta = minetest.env:get_meta(pos)
+	local charge= meta:get_float("internal_EU_buffer")
+	local max_charge= meta:get_float("internal_EU_buffer_size")
+	local grind_cost=200
+
+	local load = math.floor((charge/max_charge)*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]"..
+				"label[0,0;Grinder]"..
+				"label[1,3;Power level]"..
+				"list[current_name;src;3,1;1,1;]"..
+				"list[current_name;dst;5,1;2,2;]"..
+				"list[current_player;main;0,5;8,4;]"
+				)
+				
+		
+
+		local inv = meta:get_inventory()
+		
+--		local grinder_on = meta:get_float("grinder_on")
+		
+		
+		local srclist = inv:get_list("src")
+		if inv:is_empty("src") then meta:set_float("grinder_on",0) end 
+	
+		
+		if (meta:get_float("grinder_on") == 1) then
+			if charge>=grind_cost then
+			charge=charge-grind_cost;
+			meta:set_float("internal_EU_buffer",charge)
+			meta:set_float("src_time", meta:get_float("src_time") + 1)
+			if meta:get_float("src_time") >= meta:get_float("grind_time") then
+				-- check if there's room for output in "dst" list
+				grinded = get_grinded_item (inv:get_stack("src", 1))		
+				if inv:room_for_item("dst",grinded) then
+					-- Put result in "dst" list
+					inv:add_item("dst", grinded)
+					-- take stuff from "src" list
+					srcstack = inv:get_stack("src", 1)
+					srcstack:take_item()
+					inv:set_stack("src", 1, srcstack)
+					if inv:is_empty("src") then meta:set_float("grinder_on",0) end 
+
+
+
+				else
+					print("Grinder inventory full!")
+				end
+				meta:set_float("src_time", 0)
+			end
+			end		
+		end
+		
+		if (meta:get_float("grinder_on")==0) then
+		local grinded=nil 
+		if not inv:is_empty("src") then
+		 grinded = get_grinded_item (inv:get_stack("src", 1))
+		 if grinded then meta:set_float("grinder_on",1) end
+		 grind_time=4
+		 meta:set_float("grind_time",grind_time)
+		 meta:set_float("src_time", 0)
+		 return 	
+		end
+		end
+		
+	
+	end
+}) 
+
+function get_grinded_item (items)
+new_item =nil
+src_item=items:to_table()
+item_name=src_item["name"]
+
+local counter=registered_grinder_recipes_count-1
+for i=1, counter,1 do
+if	grinder_recipes[i].src_name==item_name then return ItemStack(grinder_recipes[i].dst_name) end
+end
+return nil
+		
+end
diff --git a/technic/grinder_gloopores.lua b/technic/grinder_gloopores.lua
new file mode 100644
index 0000000..0c58c98
--- /dev/null
+++ b/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/technic/init.lua b/technic/init.lua
new file mode 100644
index 0000000..f1b4683
--- /dev/null
+++ b/technic/init.lua
@@ -0,0 +1,82 @@
+-- Minetest 0.4.4 : technic
+
+modpath=minetest.get_modpath("technic")
+
+--Read technic config file
+dofile(modpath.."/config.lua")
+
+-- world gen
+dofile(modpath.."/ores.lua")
+if enable_rubber_tree_generation==true then dofile(modpath.."/rubber.lua") end
+
+-- chests
+dofile(modpath.."/chest_commons.lua")
+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")
+
+--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.."/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_drill==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
+		return false
+	end
+	return true
+end
+
+
+function hacky_swap_node(pos,name)
+	local node = minetest.env:get_node(pos)
+	local meta = minetest.env:get_meta(pos)
+	local meta0 = meta:to_table()
+	if node.name == name then
+		return nil
+	end
+	node.name = name
+	local meta0 = meta:to_table()
+	minetest.env:set_node(pos,node)
+	meta = minetest.env:get_meta(pos)
+	meta:from_table(meta0)
+	return 1
+end
diff --git a/technic/injector.lua b/technic/injector.lua
new file mode 100644
index 0000000..0a6a19c
--- /dev/null
+++ b/technic/injector.lua
@@ -0,0 +1,325 @@
+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)
+			pos1=pos
+			pos1.y=pos1.y
+			local x=pos1.x+1.5
+			local z=pos1.z
+			item1=tube_item({x=pos1.x,y=pos1.y,z=pos1.z},stack)
+			item1:get_luaentity().start_pos = {x=pos1.x,y=pos1.y,z=pos1.z}
+			item1:setvelocity({x=1, y=0, z=0})
+			item1:setacceleration({x=0, y=0, z=0})
+			return
+			end
+	end
+end,
+})
+
+
+function tube_item(pos, item)
+		local TUBE_nodes = {}
+		local CHEST_nodes = {}
+
+	 	TUBE_nodes[1]={}
+	 	TUBE_nodes[1].x=pos.x
+		TUBE_nodes[1].y=pos.y
+		TUBE_nodes[1].z=pos.z
+
+
+table_index=1
+	repeat
+	check_TUBE_node (TUBE_nodes,CHEST_nodes,table_index)
+	table_index=table_index+1
+	if TUBE_nodes[table_index]==nil then break end
+	until false
+found=table_index-1
+
+
+print("Found "..found.." tubes connected")
+print(dump(CHEST_nodes))
+	-- 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())
+	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={},
+		route={}
+	},
+	
+	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)
+--		print (dump(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 stack = ItemStack(self.itemstring)
+	local drop_pos=nil
+		
+	local velocity=self.object:getvelocity()
+	
+	if velocity==nil then print ("wypadl") 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 
+			if check_next_step (self.start_pos, velocity)==0 then
+				drop_pos=minetest.env:find_node_near({x=self.start_pos.x,y=self.start_pos.y,z=self.start_pos.z+velocity.x}, 1, "air")
+				if drop_pos then minetest.item_drop(stack, "", drop_pos) end
+				self.object:remove()
+				end
+			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
+			if check_next_step (self.start_pos, velocity)==0 then
+				drop_pos=minetest.env:find_node_near({x=self.start_pos.x+velocity.x,y=self.start_pos.y+velocity.y,z=self.start_pos.z+velocity.z}, 1, "air")
+				if drop_pos then minetest.item_drop(stack, "", drop_pos) end
+				self.object:remove()
+				end
+			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
+			if check_next_step (self.start_pos, velocity)==0 then
+				drop_pos=minetest.env:find_node_near({x=self.start_pos.x+velocity.x,y=self.start_pos.y+velocity.y,z=self.start_pos.z+velocity.z}, 1, "air")
+				if drop_pos then minetest.item_drop(stack, "", drop_pos) end
+				self.object:remove()
+				end
+			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 1 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 1 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 1 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 1 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 1 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 1 end
+end
+
+print ("spadl")
+return 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
+
+function add_new_TUBE_node (TUBE_nodes,pos1,parent)
+local i=1
+	repeat
+		if TUBE_nodes[i]==nil then break end
+		if pos1.x==TUBE_nodes[i].x and pos1.y==TUBE_nodes[i].y and pos1.z==TUBE_nodes[i].z then return false end
+		i=i+1
+	until false
+TUBE_nodes[i]={}
+TUBE_nodes[i].x=pos1.x
+TUBE_nodes[i].y=pos1.y
+TUBE_nodes[i].z=pos1.z
+TUBE_nodes[i].parent_x=parent.x
+TUBE_nodes[i].parent_y=parent.y
+TUBE_nodes[i].parent_z=parent.z
+
+return true
+end
+
+function check_TUBE_node (TUBE_nodes,CHEST_nodes,i)
+		local pos1={}
+		local parent={}
+		pos1.x=TUBE_nodes[i].x
+		pos1.y=TUBE_nodes[i].y
+		pos1.z=TUBE_nodes[i].z
+		parent.x=pos1.x
+		parent.y=pos1.y
+		parent.z=pos1.z
+		new_node_added=false
+	
+		pos1.x=pos1.x+1
+		check_TUBE_node_subp (TUBE_nodes,CHEST_nodes,pos1,parent)
+		pos1.x=pos1.x-2
+		check_TUBE_node_subp (TUBE_nodes,CHEST_nodes,pos1,parent)
+		pos1.x=pos1.x+1
+		
+		pos1.y=pos1.y+1
+		check_TUBE_node_subp (TUBE_nodes,CHEST_nodes,pos1,parent)
+		pos1.y=pos1.y-2
+		check_TUBE_node_subp (TUBE_nodes,CHEST_nodes,pos1,parent)
+		pos1.y=pos1.y+1
+
+		pos1.z=pos1.z+1
+		check_TUBE_node_subp (TUBE_nodes,CHEST_nodes,pos1,parent)
+		pos1.z=pos1.z-2
+		check_TUBE_node_subp (TUBE_nodes,CHEST_nodes,pos1,parent)
+		pos1.z=pos1.z+1
+return new_node_added
+end
+
+function check_TUBE_node_subp (TUBE_nodes,CHEST_nodes,pos1,parent)
+meta = minetest.env:get_meta(pos1)
+if meta:get_float("tubelike")==1 then add_new_TUBE_node(TUBE_nodes,pos1,parent) return end
+nctr = minetest.env:get_node(pos1)
+if minetest.get_item_group(nctr.name, "tubedevice_receiver") == 1 then add_new_TUBE_node(CHEST_nodes,pos1,parent) return end
+end
\ No newline at end of file
diff --git a/technic/injector1.lua b/technic/injector1.lua
new file mode 100644
index 0000000..537e478
--- /dev/null
+++ b/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/technic/iron_chest.lua b/technic/iron_chest.lua
new file mode 100644
index 0000000..6f278fe
--- /dev/null
+++ b/technic/iron_chest.lua
@@ -0,0 +1,97 @@
+minetest.register_craft({
+	output = 'technic:iron_chest 1',
+	recipe = {
+		{'default:steel_ingot','default:steel_ingot','default:steel_ingot'},
+		{'default:steel_ingot','default:chest','default:steel_ingot'},
+		{'default:steel_ingot','default:steel_ingot','default:steel_ingot'},
+	}
+})
+
+minetest.register_craft({
+	output = 'technic:iron_locked_chest 1',
+	recipe = {
+		{'default:steel_ingot','default:steel_ingot','default:steel_ingot'},
+		{'default:steel_ingot','default:chest_locked','default:steel_ingot'},
+		{'default:steel_ingot','default:steel_ingot','default:steel_ingot'},
+	}
+})
+
+minetest.register_craft({
+	output = 'technic:iron_locked_chest 1',
+	recipe = {
+		{'default:steel_ingot'},
+		{'technic:iron_chest'},
+	}
+})
+
+
+minetest.register_craftitem("technic:iron_chest", {
+	description = "Iron Chest",
+	stack_max = 99,
+})
+minetest.register_craftitem("technic:iron_locked_chest", {
+	description = "Iron Locked Chest",
+	stack_max = 99,
+})
+
+minetest.register_alias("blabla", "technic:iron_chest")
+
+minetest.register_node("technic:iron_chest", {
+	description = "Iron Chest",
+	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 = chest_groups1,
+	tube = tubes_properties,
+	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,0;9,4;]"..
+				"list[current_player;main;0,5;8,4;]")
+		meta:set_string("infotext", "Iron Chest")
+		local inv = meta:get_inventory()
+		inv:set_size("main", 9*4)
+	end,
+	can_dig = chest_can_dig,
+	on_metadata_inventory_move = def_on_metadata_inventory_move,
+	on_metadata_inventory_put = def_on_metadata_inventory_put,
+	on_metadata_inventory_take = def_on_metadata_inventory_take 
+})
+
+minetest.register_node("technic:iron_locked_chest", {
+	description = "Iron Locked Chest",
+	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_locked.png"},
+	paramtype2 = "facedir",
+	groups = chest_groups1,
+	tube = tubes_properties,
+	legacy_facedir_simple = true,
+	sounds = default.node_sound_wood_defaults(),
+	after_place_node = function(pos, placer)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("owner", placer:get_player_name() or "")
+		meta:set_string("infotext", "Locked Iron Chest (owned by "..
+				meta:get_string("owner")..")")
+	end,
+	on_construct = function(pos)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("formspec",
+				"invsize[9,9;]"..
+				"list[current_name;main;0,0;9,4;]"..
+				"list[current_player;main;0,5;8,4;]")
+		meta:set_string("infotext", "Iron Locked Chest")
+		meta:set_string("owner", "")
+		local inv = meta:get_inventory()
+		inv:set_size("main", 9*4)
+	end,
+	can_dig = chest_can_dig,
+	allow_metadata_inventory_move = def_allow_metadata_inventory_move,
+	allow_metadata_inventory_put = def_allow_metadata_inventory_put,
+	allow_metadata_inventory_take = def_allow_metadata_inventory_take,
+	on_metadata_inventory_move = def_on_metadata_inventory_move,
+	on_metadata_inventory_put = def_on_metadata_inventory_put,
+	on_metadata_inventory_take = def_on_metadata_inventory_take 
+})
diff --git a/technic/item_drop.lua b/technic/item_drop.lua
new file mode 100644
index 0000000..3165e6a
--- /dev/null
+++ b/technic/item_drop.lua
@@ -0,0 +1,100 @@
+-- This part written by PilzAdam (item_drop mod)
+
+minetest.register_globalstep(function(dtime)
+	for _,player in ipairs(minetest.get_connected_players()) do
+		local pos = player:getpos()
+		pos.y = pos.y+0.5
+		local inv = player:get_inventory()
+		
+		for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 1)) do
+			if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
+				if inv and inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
+					inv:add_item("main", ItemStack(object:get_luaentity().itemstring))
+					if object:get_luaentity().itemstring ~= "" then
+						minetest.sound_play("item_drop_pickup", {
+							to_player = player:get_player_name(),
+						})
+					end
+					object:get_luaentity().itemstring = ""
+					object:remove()
+				end
+			end
+		end
+		
+		for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 2)) do
+			if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
+				if object:get_luaentity().collect then
+					if inv and inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
+						local pos1 = pos
+						pos1.y = pos1.y+0.2
+						local pos2 = object:getpos()
+						local vec = {x=pos1.x-pos2.x, y=pos1.y-pos2.y, z=pos1.z-pos2.z}
+						vec.x = vec.x*3
+						vec.y = vec.y*3
+						vec.z = vec.z*3
+						object:setvelocity(vec)
+						
+						minetest.after(1, function(args)
+							local lua = object:get_luaentity()
+							if object == nil or lua == nil or lua.itemstring == nil then
+								return
+							end
+							if inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
+								inv:add_item("main", ItemStack(object:get_luaentity().itemstring))
+								if object:get_luaentity().itemstring ~= "" then
+									minetest.sound_play("item_drop_pickup", {
+										to_player = player:get_player_name(),
+									})
+								end
+								object:get_luaentity().itemstring = ""
+								object:remove()
+							else
+								object:setvelocity({x=0,y=0,z=0})
+							end
+						end, {player, object})
+						
+					end
+				end
+			end
+		end
+	end
+end)
+
+function minetest.handle_node_drops(pos, drops, digger)
+	for _,item in ipairs(drops) do
+		local count, name
+		if type(item) == "string" then
+			count = 1
+			name = item
+		else
+			count = item:get_count()
+			name = item:get_name()
+		end
+		for i=1,count do
+			local obj = minetest.env:add_item(pos, name)
+			if obj ~= nil then
+				obj:get_luaentity().collect = true
+				local x = math.random(1, 5)
+				if math.random(1,2) == 1 then
+					x = -x
+				end
+				local z = math.random(1, 5)
+				if math.random(1,2) == 1 then
+					z = -z
+				end
+				obj:setvelocity({x=1/x, y=obj:getvelocity().y, z=1/z})
+				
+				-- FIXME this doesnt work for deactiveted objects
+				if minetest.setting_get("remove_items") and tonumber(minetest.setting_get("remove_items")) then
+					minetest.after(tonumber(minetest.setting_get("remove_items")), function(obj)
+						obj:remove()
+					end, obj)
+				end
+			end
+		end
+	end
+end
+
+if minetest.setting_get("log_mods") then
+	minetest.log("action", "item_drop loaded")
+end
diff --git a/technic/item_pickup.lua b/technic/item_pickup.lua
new file mode 100644
index 0000000..04ed0f8
--- /dev/null
+++ b/technic/item_pickup.lua
@@ -0,0 +1,63 @@
+minetest.register_globalstep(function(dtime)
+	for _,player in ipairs(minetest.get_connected_players()) do
+		local pos = player:getpos()
+		pos.y = pos.y+0.5
+		local inv = player:get_inventory()
+		
+		for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 1)) do
+			if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
+				if inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
+					inv:add_item("main", ItemStack(object:get_luaentity().itemstring))
+					if object:get_luaentity().itemstring ~= "" then
+						minetest.sound_play("item_drop_pickup", {
+							to_player = player:get_player_name(),
+						})
+					end
+					object:get_luaentity().itemstring = ""
+					object:remove()
+				end
+			end
+		end
+		
+		for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 2)) do
+			if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
+				if object:get_luaentity().collect then
+					if inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
+						local pos1 = pos
+						pos1.y = pos1.y+0.2
+						local pos2 = object:getpos()
+						local vec = {x=pos1.x-pos2.x, y=pos1.y-pos2.y, z=pos1.z-pos2.z}
+						vec.x = vec.x*3
+						vec.y = vec.y*3
+						vec.z = vec.z*3
+						object:setvelocity(vec)
+						
+						minetest.after(1, function(args)
+							local lua = object:get_luaentity()
+							if object == nil or lua == nil or lua.itemstring == nil then
+								return
+							end
+							if inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
+								inv:add_item("main", ItemStack(object:get_luaentity().itemstring))
+								if object:get_luaentity().itemstring ~= "" then
+									minetest.sound_play("item_drop_pickup", {
+										to_player = player:get_player_name(),
+									})
+								end
+								object:get_luaentity().itemstring = ""
+								object:remove()
+							else
+								object:setvelocity({x=0,y=0,z=0})
+							end
+						end, {player, object})
+						
+					end
+				else
+					minetest.after(0.5, function(entity)
+						entity.collect = true
+					end, object:get_luaentity())
+				end
+			end
+		end
+	end
+end)
diff --git a/technic/items.lua b/technic/items.lua
new file mode 100644
index 0000000..c2b596e
--- /dev/null
+++ b/technic/items.lua
@@ -0,0 +1,157 @@
+minetest.register_craftitem( "technic:silicon_wafer", {
+	description = "Silicon Wafer",
+	inventory_image = "technic_silicon_wafer.png",
+	on_place_on_ground = minetest.craftitem_place_item,
+})
+
+minetest.register_craftitem( "technic:doped_silicon_wafer", {
+	description = "Doped Silicon Wafer",
+	inventory_image = "technic_doped_silicon_wafer.png",
+	on_place_on_ground = minetest.craftitem_place_item,
+})
+
+minetest.register_craft({
+	output = 'pipeworks:tube_000000 9',
+	recipe = {
+		{'technic:stainless_steel_ingot', 'default:glass', 'technic:stainless_steel_ingot'},
+		{'technic:stainless_steel_ingot', 'default:glass', 'technic:stainless_steel_ingot'},
+		{'technic:stainless_steel_ingot', 'default:glass', 'technic:stainless_steel_ingot'},
+	}
+})
+
+minetest.register_craftitem( "technic:diamond_drill_head", {
+	description = "Diamond Drill Head",
+	inventory_image = "technic_diamond_drill_head.png",
+	on_place_on_ground = minetest.craftitem_place_item,
+})
+
+minetest.register_craft({
+	output = 'technic:diamond_drill_head',
+	recipe = {
+		{'technic:stainless_steel_ingot', 'technic:diamond', 'technic:stainless_steel_ingot'},
+		{'technic:diamond', '', 'technic:diamond'},
+		{'technic:stainless_steel_ingot', 'technic:diamond', 'technic:stainless_steel_ingot'},
+	}
+})
+
+minetest.register_craft({
+	output = 'technic:diamond_block',
+	recipe = {
+		{'technic:diamond', 'technic:diamond', 'technic:diamond'},
+		{'technic:diamond', 'technic:diamond', 'technic:diamond'},
+		{'technic:diamond', 'technic:diamond', 'technic:diamond'},
+	}
+})
+
+minetest.register_node( "technic:diamond_block", {
+	description = "Diamond Block",
+	tiles = { "technic_diamond_block.png" },
+	is_ground_content = true,
+	groups = {cracky=3},
+	sounds = default.node_sound_stone_defaults(),
+	drop = 'craft "technic:diamond_block" 1',
+}) 
+
+minetest.register_craft({
+	output = 'technic:green_energy_crystal',
+	recipe = {
+		{'moreores:gold_ingot', 'technic:battery', 'dye:green'},
+		{'technic:battery', 'technic:red_energy_crystal', 'technic:battery'},
+		{'dye:green', 'technic:battery', 'moreores:gold_ingot'},
+	}
+})
+
+minetest.register_craft({
+	output = 'technic:blue_energy_crystal',
+	recipe = {
+		{'moreores:gold_ingot', 'technic:battery', 'dye:blue'},
+		{'technic:battery', 'technic:green_energy_crystal', 'technic:battery'},
+		{'dye:blue', 'technic:battery', 'moreores:gold_ingot'},
+	}
+})
+
+minetest.register_craft({
+	output = 'technic:red_energy_crystal',
+	recipe = {
+		{'moreores:gold_ingot', 'technic:battery', 'dye:red'},
+		{'technic:battery', 'technic:diamond_block', 'technic:battery'},
+		{'dye:red', 'technic:battery', 'moreores:gold_ingot'},
+	}
+})
+
+minetest.register_tool("technic:blue_energy_crystal",
+{description = "Blue Energy Crystal",
+inventory_image = minetest.inventorycube("technic_diamond_block_blue.png", "technic_diamond_block_blue.png", "technic_diamond_block_blue.png"),
+tool_capabilities = {load=0,max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}}) 
+
+minetest.register_tool("technic:green_energy_crystal",
+{description = "Green Energy Crystal",
+inventory_image = minetest.inventorycube("technic_diamond_block_green.png", "technic_diamond_block_green.png", "technic_diamond_block_green.png"),
+tool_capabilities = {load=0,max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}}) 
+
+minetest.register_tool("technic:red_energy_crystal",
+{description = "Red Energy Crystal",
+inventory_image = minetest.inventorycube("technic_diamond_block_red.png", "technic_diamond_block_red.png", "technic_diamond_block_red.png"),
+tool_capabilities = {load=0,max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}}) 
+
+
+minetest.register_craftitem( "technic:fine_copper_wire", {
+	description = "Fine Copper Wire",
+	inventory_image = "technic_fine_copper_wire.png",
+	on_place_on_ground = minetest.craftitem_place_item,
+})
+
+minetest.register_craft({
+	output = 'technic:fine_copper_wire 2',
+	recipe = {
+		{'', 'moreores:copper_ingot', ''},
+		{'', 'moreores:copper_ingot', ''},
+		{'', 'moreores:copper_ingot', ''},
+	}
+})
+
+minetest.register_craftitem( "technic:copper_coil", {
+	description = "Copper Coil",
+	inventory_image = "technic_copper_coil.png",
+	on_place_on_ground = minetest.craftitem_place_item,
+})
+
+minetest.register_craft({
+	output = 'technic:copper_coil 1',
+	recipe = {
+		{'technic:fine_copper_wire', 'default:steel_ingot', 'technic:fine_copper_wire'},
+		{'default:steel_ingot', '', 'default:steel_ingot'},
+		{'technic:fine_copper_wire', 'default:steel_ingot', 'technic:fine_copper_wire'},
+	}
+})
+
+minetest.register_craftitem( "technic:motor", {
+	description = "Electric Motor",
+	inventory_image = "technic_motor.png",
+	on_place_on_ground = minetest.craftitem_place_item,
+})
+
+minetest.register_craft({
+	output = 'technic:motor',
+	recipe = {
+		{'default:steel_ingot', 'technic:copper_coil', 'default:steel_ingot'},
+		{'default:steel_ingot', 'technic:copper_coil', 'default:steel_ingot'},
+		{'default:steel_ingot', 'moreores:copper_ingot', 'default:steel_ingot'},
+	}
+})
+
+minetest.register_craftitem( "technic:mv_transformer", {
+	description = "Medium Voltage Transformer",
+	inventory_image = "technic_mv_transformer.png",
+	on_place_on_ground = minetest.craftitem_place_item,
+})
+
+minetest.register_craft({
+	output = 'technic:mv_transformer',
+	recipe = {
+		{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
+		{'technic:copper_coil', 'default:steel_ingot', 'technic:copper_coil'},
+		{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
+	}
+})
+
diff --git a/technic/mining_drill.lua b/technic/mining_drill.lua
new file mode 100644
index 0000000..4ccfc95
--- /dev/null
+++ b/technic/mining_drill.lua
@@ -0,0 +1,49 @@
+mining_drill_max_charge=60000
+
+minetest.register_tool("technic:mining_drill", {
+	description = "Mining Drill",
+	inventory_image = "technic_mining_drill.png",
+	stack_max = 1,
+	on_use = function(itemstack, user, pointed_thing)
+		if pointed_thing.type=="node" then 
+		item=itemstack:to_table()
+		if item["metadata"]=="" or item["metadata"]=="0" then return end --tool not charged 
+		charge=tonumber(item["metadata"]) 
+		if charge-200>0 then
+		 drill_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user)
+		 charge =charge-200;	
+		item["metadata"]=tostring(charge)
+		set_RE_wear(item,charge,mining_drill_max_charge)
+		itemstack:replace(item)
+		end
+		return itemstack
+		end
+	end,
+})
+
+minetest.register_craft({
+	output = 'technic:mining_drill',
+	recipe = {
+		{'technic:stainless_steel_ingot', 'technic:diamond_drill_head', 'technic:stainless_steel_ingot'},
+		{'technic:stainless_steel_ingot', 'technic:motor', 'technic:stainless_steel_ingot'},
+		{'', 'technic:red_energy_crystal', 'moreores:copper_ingot'},
+	}
+})
+
+
+
+
+
+
+function drill_dig_it (pos, player)		
+	local node=minetest.env:get_node(pos)
+	if node.name == "air" or node.name == "ignore" then return end
+	if node.name == "default:lava_source" then return end
+	if node.name == "default:lava_flowing" then return end
+	if node.name == "default:water_source" then minetest.env:remove_node(pos) return end
+	if node.name == "default:water_flowing" then minetest.env:remove_node(pos) return end
+
+	minetest.sound_play("mining_drill", {pos = pos, gain = 1.0, max_hear_distance = 10,})
+	minetest.node_dig(pos,node,player)
+
+end
\ No newline at end of file
diff --git a/technic/mining_laser_mk1.lua b/technic/mining_laser_mk1.lua
new file mode 100644
index 0000000..a206bb4
--- /dev/null
+++ b/technic/mining_laser_mk1.lua
@@ -0,0 +1,174 @@
+laser_mk1_max_charge=40000
+local laser_shoot = function(itemstack, player, pointed_thing)
+				local laser_straight_mode=0
+				local playerpos=player:getpos()
+				local dir=player:get_look_dir()
+				if pointed_thing.type=="node" then  
+					pos=minetest.get_pointed_thing_position(pointed_thing, above)
+					local node = minetest.env:get_node(pos)
+					if node.name~="ignore" then
+					minetest.node_dig(pos,node,player)
+					end
+					laser_straight_mode=1
+					end				
+				
+				direction_y=math.abs(math.floor(dir.y*100))
+				if direction_y>50 then entity_name="technic:laser_beam_entityV"
+					else entity_name="technic:laser_beam_entity" end
+				
+				if laser_straight_mode==1  then
+					pos1=minetest.get_pointed_thing_position(pointed_thing, under)
+					pos1.x=math.floor(pos1.x) 
+					pos1.y=math.floor(pos1.y)
+					pos1.z=math.floor(pos1.z)
+					obj=minetest.env:add_entity(pos1,entity_name)
+				else
+				obj=minetest.env:add_entity({x=playerpos.x,y=playerpos.y+1.6,z=playerpos.z},entity_name)
+				end
+				if obj:get_luaentity().player == nil then
+					obj:get_luaentity().player = player
+				end
+				if laser_straight_mode==1 and direction_y<50 then
+					obj:setvelocity({x=dir.x*8, y=0, z=dir.z*8})
+				else if laser_straight_mode==1 and direction_y>50 then
+					obj:setvelocity({x=0, y=dir.y*8, z=dir.z*8})
+					end
+				end
+				if laser_straight_mode==0 then
+					obj:setvelocity({x=dir.x*8, y=dir.y*8, z=dir.z*8})
+					end
+				obj:setacceleration({x=0, y=0, z=0})
+				obj:setyaw(player:get_look_yaw()+math.pi)
+				if obj:get_luaentity().player == nil then
+					obj:get_luaentity().player = player
+				end
+				--obj:get_luaentity().node = player:get_inventory():get_stack("main", 1):get_name()
+				minetest.sound_play("technic_laser", {pos = playerpos, gain = 1.0, max_hear_distance = 10,})
+				return true
+end
+
+
+minetest.register_tool("technic:laser_mk1", {
+	description = "Mining Laser MK1",
+	inventory_image = "technic_mining_laser_mk1.png",
+	stack_max = 1,
+	on_use = function(itemstack, user, pointed_thing)
+		item=itemstack:to_table()
+		if item["metadata"]=="" or item["metadata"]=="0" then  return end 
+		local charge=tonumber((item["metadata"])) 
+		if charge-400>0 then
+		 laser_shoot(item, user, pointed_thing)
+		 charge =charge-400;	
+		item["metadata"]=tostring(charge)
+		charge=set_RE_wear(item,charge,laser_mk1_max_charge)
+		itemstack:replace(item)
+		end
+		return itemstack
+	end,
+})
+
+minetest.register_craft({
+	output = 'technic:laser_mk1',
+	recipe = {
+		{'technic:diamond', 'default:steel_ingot', 'technic:battery'},
+		{'', 'default:steel_ingot', 'technic:battery'},
+		{'', '', 'moreores:copper_ingot'},
+	}
+})
+
+
+
+minetest.register_node("technic:laser_beam_box", {
+	drawtype = "nodebox",
+	node_box = {
+		type = "fixed",
+		fixed = {
+			{ -0.5 , -0.1, -0.1 ,  0.1 ,  0.1 , 0.1  },
+			{ -0.1 , -0.1 , -0.1 , 0.5, 0.1 , 0.1  },
+		}
+	},
+	tiles = {"technic_laser_beam.png"},
+	groups = {not_in_creative_inventory=1},
+})
+
+minetest.register_node("technic:laser_beam_boxV", {
+	drawtype = "nodebox",
+	node_box = {
+		type = "fixed",
+		fixed = {
+			{ -0.1 , -0.1 , -0.1 , 0.1 , 0.5, 0.1  },
+			{ -0.1 , -0.5, -0.1 ,  0.1 ,  0.1 , 0.1  },
+
+		}
+	},
+	tiles = {"technic_laser_beam.png"},
+	groups = {not_in_creative_inventory=1},
+})
+
+LASER_BEAM_ENTITY={
+	physical = false,
+	timer=0,
+	visual = "wielditem",
+	visual_size = {x=0.2, y=0.2},
+	textures = {"technic:laser_beam_box"},
+	lastpos={},
+	max_range=10,
+	count=0,
+--	digger=nil,
+	collisionbox = {0,0,0,0,0,0},
+}
+
+LASER_BEAM_ENTITY.on_step = function(self, dtime)
+	self.timer=self.timer+dtime
+	local pos = self.object:getpos()
+	if self.player~=nil then if self.lastpos.x~=nil then lazer_it (pos, self.player) end end		
+	if self.lastpos.x ~=nil and self.lastpos.y ~=nil and self.lastpos.y ~=nil then 
+			temp1={x=math.floor(self.lastpos.x),y=math.floor(self.lastpos.y),z=math.floor(self.lastpos.z)}
+			temp2={x=math.floor(pos.x),y=math.floor(pos.y),z=math.floor(pos.z)}
+			if temp1.x==temp2.x and temp1.y==temp2.y and temp1.z==temp2.z then return end
+			end
+	self.lastpos={x=pos.x, y=pos.y, z=pos.z}	
+	self.count=self.count+1
+	if self.count==self.max_range then self.object:remove() end
+end
+
+LASER_BEAM_ENTITYV={
+	physical = false,
+	timer=0,
+	visual = "wielditem",
+	visual_size = {x=0.2, y=0.2},
+	textures = {"technic:laser_beam_boxV"},
+	lastpos={},
+	max_range=15,
+	count=0,
+	collisionbox = {0,0,0,0,0,0},
+}
+
+LASER_BEAM_ENTITYV.on_step = function(self, dtime)
+	self.timer=self.timer+dtime
+	local pos = self.object:getpos()
+	if self.player~=nil then if self.lastpos.x~=nil then lazer_it (pos, self.player) end end		
+	if self.lastpos.x ~=nil and self.lastpos.y ~=nil and self.lastpos.y ~=nil then 
+			temp1={x=math.floor(self.lastpos.x),y=math.floor(self.lastpos.y),z=math.floor(self.lastpos.z)}
+			temp2={x=math.floor(pos.x),y=math.floor(pos.y),z=math.floor(pos.z)}
+			if temp1.x==temp2.x and temp1.y==temp2.y and temp1.z==temp2.z then return end
+			end
+	self.lastpos={x=pos.x, y=pos.y, z=pos.z}	
+	self.count=self.count+1
+	if self.count==self.max_range then self.object:remove() end
+end
+
+
+minetest.register_entity("technic:laser_beam_entity", LASER_BEAM_ENTITY)
+minetest.register_entity("technic:laser_beam_entityV", LASER_BEAM_ENTITYV)
+
+function lazer_it (pos, player)	
+	local pos1={}
+--	pos1.x=math.floor(pos.x)
+--	pos1.y=math.floor(pos.y)
+--	pos1.z=math.floor(pos.z)
+	local node = minetest.env:get_node(pos)
+	if node.name == "air" or node.name == "ignore" or node.name == "default:lava_source" or node.name == "default:lava_flowing" then return end
+	if node.name == "default:water_source" or node.name == "default:water_flowing" then minetest.env:remove_node(pos) return end
+	if player then minetest.node_dig(pos,node,player) end
+end
\ No newline at end of file
diff --git a/technic/mithril_chest.lua b/technic/mithril_chest.lua
new file mode 100644
index 0000000..89683f8
--- /dev/null
+++ b/technic/mithril_chest.lua
@@ -0,0 +1,145 @@
+minetest.register_craft({
+	output = 'technic:mithril_chest 1',
+	recipe = {
+		{'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
+		{'moreores:mithril_ingot','technic:gold_chest','moreores:mithril_ingot'},
+		{'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
+	}
+})
+
+minetest.register_craft({
+	output = 'technic:mithril_locked_chest 1',
+	recipe = {
+		{'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
+		{'moreores:mithril_ingot','technic:gold_locked_chest','moreores:mithril_ingot'},
+		{'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
+	}
+})
+
+minetest.register_craft({
+	output = 'technic:mithril_locked_chest 1',
+	recipe = {
+		{'default:steel_ingot'},
+		{'technic:mithril_chest'},
+	}
+})
+
+minetest.register_node("technic:mithril_chest", {
+	description = "Mithril Chest",
+	tiles = {"technic_mithril_chest_top.png", "technic_mithril_chest_top.png", "technic_mithril_chest_side.png",
+		"technic_mithril_chest_side.png", "technic_mithril_chest_side.png", "technic_mithril_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[13,9;]"..
+				"list[current_name;main;0,0;13,4;]"..
+				"list[current_player;main;0,5;8,4;]")
+		meta:set_string("infotext", "Mithril Chest")
+		local inv = meta:get_inventory()
+		inv:set_size("main", 13*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_metadata_inventory_move = function(pos, from_list, from_index,
+			to_list, to_index, count, player)
+		minetest.log("action", player:get_player_name()..
+				" moves stuff in chest at "..minetest.pos_to_string(pos))
+		return minetest.node_metadata_inventory_move_allow_all(
+				pos, from_list, from_index, to_list, to_index, count, player)
+	end,
+    on_metadata_inventory_offer = function(pos, listname, index, stack, player)
+		minetest.log("action", player:get_player_name()..
+				" moves stuff to chest at "..minetest.pos_to_string(pos))
+		return minetest.node_metadata_inventory_offer_allow_all(
+				pos, listname, index, stack, player)
+	end,
+    on_metadata_inventory_take = function(pos, listname, index, stack, player)
+		minetest.log("action", player:get_player_name()..
+				" takes stuff from chest at "..minetest.pos_to_string(pos))
+	end,
+})
+
+minetest.register_node("technic:mithril_locked_chest", {
+	description = "Mithril Locked Chest",
+	tiles = {"technic_mithril_chest_top.png", "technic_mithril_chest_top.png", "technic_mithril_chest_side.png",
+		"technic_mithril_chest_side.png", "technic_mithril_chest_side.png", "technic_mithril_chest_locked.png"},
+	paramtype2 = "facedir",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+	legacy_facedir_simple = true,
+	sounds = default.node_sound_wood_defaults(),
+	after_place_node = function(pos, placer)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("owner", placer:get_player_name() or "")
+		meta:set_string("infotext", "Mithril Locked Chest (owned by "..
+				meta:get_string("owner")..")")
+	end,
+on_construct = function(pos)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("formspec",
+				"invsize[13,9;]"..
+				"list[current_name;main;0,0;13,4;]"..
+				"list[current_player;main;0,5;8,4;]")
+		meta:set_string("infotext", "Mithril Locked Chest")
+		meta:set_string("owner", "")
+		local inv = meta:get_inventory()
+		inv:set_size("main", 13*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,
+	allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+		local meta = minetest.env:get_meta(pos)
+		if not has_locked_chest_privilege(meta, player) then
+			minetest.log("action", player:get_player_name()..
+					" tried to access a locked chest belonging to "..
+					meta:get_string("owner").." at "..
+					minetest.pos_to_string(pos))
+			return 0
+		end
+		return count
+	end,
+    allow_metadata_inventory_put = function(pos, listname, index, stack, player)
+		local meta = minetest.env:get_meta(pos)
+		if not has_locked_chest_privilege(meta, player) then
+			minetest.log("action", player:get_player_name()..
+					" tried to access a locked chest belonging to "..
+					meta:get_string("owner").." at "..
+					minetest.pos_to_string(pos))
+			return 0
+		end
+		return stack:get_count()
+	end,
+    allow_metadata_inventory_take = function(pos, listname, index, stack, player)
+		local meta = minetest.env:get_meta(pos)
+		if not has_locked_chest_privilege(meta, player) then
+			minetest.log("action", player:get_player_name()..
+					" tried to access a locked chest belonging to "..
+					meta:get_string("owner").." at "..
+					minetest.pos_to_string(pos))
+			return 0
+		end
+		return stack:get_count()
+	end,
+	on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+		minetest.log("action", player:get_player_name()..
+				" moves stuff in locked chest at "..minetest.pos_to_string(pos))
+	end,
+    on_metadata_inventory_put = function(pos, listname, index, stack, player)
+		minetest.log("action", player:get_player_name()..
+				" moves stuff to locked chest at "..minetest.pos_to_string(pos))
+	end,
+    on_metadata_inventory_take = function(pos, listname, index, stack, player)
+		minetest.log("action", player:get_player_name()..
+				" takes stuff from locked chest at "..minetest.pos_to_string(pos))
+	end,
+})
diff --git a/technic/mithril_subspace_chest.lua b/technic/mithril_subspace_chest.lua
new file mode 100644
index 0000000..89683f8
--- /dev/null
+++ b/technic/mithril_subspace_chest.lua
@@ -0,0 +1,145 @@
+minetest.register_craft({
+	output = 'technic:mithril_chest 1',
+	recipe = {
+		{'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
+		{'moreores:mithril_ingot','technic:gold_chest','moreores:mithril_ingot'},
+		{'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
+	}
+})
+
+minetest.register_craft({
+	output = 'technic:mithril_locked_chest 1',
+	recipe = {
+		{'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
+		{'moreores:mithril_ingot','technic:gold_locked_chest','moreores:mithril_ingot'},
+		{'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
+	}
+})
+
+minetest.register_craft({
+	output = 'technic:mithril_locked_chest 1',
+	recipe = {
+		{'default:steel_ingot'},
+		{'technic:mithril_chest'},
+	}
+})
+
+minetest.register_node("technic:mithril_chest", {
+	description = "Mithril Chest",
+	tiles = {"technic_mithril_chest_top.png", "technic_mithril_chest_top.png", "technic_mithril_chest_side.png",
+		"technic_mithril_chest_side.png", "technic_mithril_chest_side.png", "technic_mithril_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[13,9;]"..
+				"list[current_name;main;0,0;13,4;]"..
+				"list[current_player;main;0,5;8,4;]")
+		meta:set_string("infotext", "Mithril Chest")
+		local inv = meta:get_inventory()
+		inv:set_size("main", 13*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_metadata_inventory_move = function(pos, from_list, from_index,
+			to_list, to_index, count, player)
+		minetest.log("action", player:get_player_name()..
+				" moves stuff in chest at "..minetest.pos_to_string(pos))
+		return minetest.node_metadata_inventory_move_allow_all(
+				pos, from_list, from_index, to_list, to_index, count, player)
+	end,
+    on_metadata_inventory_offer = function(pos, listname, index, stack, player)
+		minetest.log("action", player:get_player_name()..
+				" moves stuff to chest at "..minetest.pos_to_string(pos))
+		return minetest.node_metadata_inventory_offer_allow_all(
+				pos, listname, index, stack, player)
+	end,
+    on_metadata_inventory_take = function(pos, listname, index, stack, player)
+		minetest.log("action", player:get_player_name()..
+				" takes stuff from chest at "..minetest.pos_to_string(pos))
+	end,
+})
+
+minetest.register_node("technic:mithril_locked_chest", {
+	description = "Mithril Locked Chest",
+	tiles = {"technic_mithril_chest_top.png", "technic_mithril_chest_top.png", "technic_mithril_chest_side.png",
+		"technic_mithril_chest_side.png", "technic_mithril_chest_side.png", "technic_mithril_chest_locked.png"},
+	paramtype2 = "facedir",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+	legacy_facedir_simple = true,
+	sounds = default.node_sound_wood_defaults(),
+	after_place_node = function(pos, placer)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("owner", placer:get_player_name() or "")
+		meta:set_string("infotext", "Mithril Locked Chest (owned by "..
+				meta:get_string("owner")..")")
+	end,
+on_construct = function(pos)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("formspec",
+				"invsize[13,9;]"..
+				"list[current_name;main;0,0;13,4;]"..
+				"list[current_player;main;0,5;8,4;]")
+		meta:set_string("infotext", "Mithril Locked Chest")
+		meta:set_string("owner", "")
+		local inv = meta:get_inventory()
+		inv:set_size("main", 13*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,
+	allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+		local meta = minetest.env:get_meta(pos)
+		if not has_locked_chest_privilege(meta, player) then
+			minetest.log("action", player:get_player_name()..
+					" tried to access a locked chest belonging to "..
+					meta:get_string("owner").." at "..
+					minetest.pos_to_string(pos))
+			return 0
+		end
+		return count
+	end,
+    allow_metadata_inventory_put = function(pos, listname, index, stack, player)
+		local meta = minetest.env:get_meta(pos)
+		if not has_locked_chest_privilege(meta, player) then
+			minetest.log("action", player:get_player_name()..
+					" tried to access a locked chest belonging to "..
+					meta:get_string("owner").." at "..
+					minetest.pos_to_string(pos))
+			return 0
+		end
+		return stack:get_count()
+	end,
+    allow_metadata_inventory_take = function(pos, listname, index, stack, player)
+		local meta = minetest.env:get_meta(pos)
+		if not has_locked_chest_privilege(meta, player) then
+			minetest.log("action", player:get_player_name()..
+					" tried to access a locked chest belonging to "..
+					meta:get_string("owner").." at "..
+					minetest.pos_to_string(pos))
+			return 0
+		end
+		return stack:get_count()
+	end,
+	on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+		minetest.log("action", player:get_player_name()..
+				" moves stuff in locked chest at "..minetest.pos_to_string(pos))
+	end,
+    on_metadata_inventory_put = function(pos, listname, index, stack, player)
+		minetest.log("action", player:get_player_name()..
+				" moves stuff to locked chest at "..minetest.pos_to_string(pos))
+	end,
+    on_metadata_inventory_take = function(pos, listname, index, stack, player)
+		minetest.log("action", player:get_player_name()..
+				" takes stuff from locked chest at "..minetest.pos_to_string(pos))
+	end,
+})
diff --git a/technic/music_player.lua b/technic/music_player.lua
new file mode 100644
index 0000000..0a6474a
--- /dev/null
+++ b/technic/music_player.lua
@@ -0,0 +1,126 @@
+minetest.register_alias("music_player", "technic:music_player")
+minetest.register_craft({
+	output = 'technic:music_player',
+	recipe = {
+		{'default:wood', 'default:wood', 'default:wood'},
+		{'technic:diamond', 'technic:diamond', 'technic:diamond'},
+		{'default:stone', 'moreores:copper_ingot', 'default:stone'},
+	}
+})
+
+minetest.register_craftitem("technic:music_player", {
+	description = "Music Player",
+	stack_max = 99,
+}) 
+
+music_player_formspec =
+	"invsize[8,9;]"..
+	"image[1,1;1,2;technic_power_meter_bg.png]"..
+	"label[0,0;Music Player]"..
+	"label[1,3;Power level]"..
+	"button[5,2;1,1;track1;1]"..
+	"button[6,2;1,1;track2;2]"
+	
+
+minetest.register_node("technic:music_player", {
+	description = "Music Player",
+	tiles = {"technic_music_player_top.png", "technic_machine_bottom.png", "technic_music_player_side.png",
+		"technic_music_player_side.png", "technic_music_player_side.png", "technic_music_player_side.png"},
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+	sounds = default.node_sound_wood_defaults(),
+	technic_power_machine=1,
+	internal_EU_buffer=0,
+	internal_EU_buffer_size=5000,
+	music_player_on=0,
+	music_playing =0,
+	music_handle = 0,
+	music_player_current_track =1,
+	on_construct = function(pos)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("infotext", "Music Player")
+		meta:set_float("technic_power_machine", 1)
+		meta:set_float("internal_EU_buffer", 1)
+		meta:set_float("internal_EU_buffer_size", 5000)
+		meta:set_string("formspec", music_player_formspec)
+		meta:set_float("music_player_on", 0)
+		meta:set_float("music_player_current_track", 1)
+		end,	
+
+	on_receive_fields = function(pos, formanme, fields, sender)
+	
+	local meta = minetest.env:get_meta(pos)
+	player_on=meta:get_float("music_player_on")
+	music_handle=meta:get_float("music_handle")
+	music_player_current_track=meta:get_float("music_player_current_track")
+	if fields.track1 then music_player_current_track=1 end
+	if fields.track2 then music_player_current_track=2 end
+	if fields.track3 then music_player_current_track=3 end
+	if fields.track4 then music_player_current_track=4 end
+	if fields.track5 then music_player_current_track=5 end
+	if fields.track6 then music_player_current_track=6 end
+	if fields.track7 then music_player_current_track=7 end
+	if fields.track8 then music_player_current_track=8 end
+	if fields.track9 then music_player_current_track=9 end
+	meta:set_float("music_player_current_track",music_player_current_track)
+	if fields.play and player_on==1 then  
+	if music_handle then minetest.sound_stop(music_handle) end
+	music_handle=minetest.sound_play("technic_track"..music_player_current_track, {pos = pos, gain = 1.0,loop = true, max_hear_distance = 72,}) 	
+	meta:set_float("music_playing",1)
+	end
+	if fields.stop then  
+	meta:set_float("music_playing",0)
+	if music_handle then minetest.sound_stop(music_handle) end
+	end
+	meta:set_float("music_handle",music_handle)
+	end,
+})
+
+minetest.register_abm({
+	nodenames = {"technic:music_player"},
+	interval = 1,
+	chance = 1,
+	action = function(pos, node, active_object_count, active_object_count_wider)
+	local meta = minetest.env:get_meta(pos)
+	local charge= meta:get_float("internal_EU_buffer")
+	local max_charge= meta:get_float("internal_EU_buffer_size")
+	player_on=meta:get_float("music_player_on")
+	music_player_current_track=meta:get_float("music_player_current_track")
+	local play_cost=80
+	
+	if charge>play_cost then 
+		if meta:get_float("music_playing")==1 then charge=charge-play_cost end
+			meta:set_float("internal_EU_buffer",charge)
+		meta:set_float("music_player_on",1)
+	else 
+		meta:set_float("music_playing",0)
+		meta:set_float("music_player_on",0)
+		if music_handle then minetest.sound_stop(music_handle) end
+	end
+	local load = math.floor((charge/max_charge)*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]"..
+				"label[0,0;Music Player]"..
+				"label[1,3;Power level]"..
+				"button[4,1;1,1;track1;1]"..
+				"button[5,1;1,1;track2;2]"..
+				"button[6,1;1,1;track3;3]"..
+				"button[4,2;1,1;track4;4]"..
+				"button[5,2;1,1;track5;5]"..
+				"button[6,2;1,1;track6;6]"..	
+				"button[4,3;1,1;track7;7]"..
+				"button[5,3;1,1;track8;8]"..
+				"button[6,3;1,1;track9;9]"..
+				"button[4,4;1,2;play;Play]"..
+				"button[6,4;1,2;stop;Stop]"..
+				"label[4,0;Current track "..tostring(music_player_current_track).."]"
+
+				)
+				
+	
+	
+	
+	end
+}) 
+
diff --git a/technic/node_breaker.lua b/technic/node_breaker.lua
new file mode 100644
index 0000000..06de700
--- /dev/null
+++ b/technic/node_breaker.lua
@@ -0,0 +1,89 @@
+minetest.register_craft({
+	output = 'technic:nodebreaker_off 1',
+	recipe = {
+		{'default:wood', 'default:pick_mese','default:wood'},
+		{'default:stone', 'mesecons:piston','default:stone'},
+		{'default:stone', 'mesecons:mesecon','default:stone'},
+
+	}
+})
+
+node_breaker_on = function(pos, node)
+	if node.name == "technic:nodebreaker_off" then
+		hacky_swap_node(pos,"technic:nodebreaker_on")
+		break_node (pos,node.param2)
+		nodeupdate(pos)
+	end
+end
+
+node_breaker_off = function(pos, node)
+	if node.name == "technic:nodebreaker_on" then
+		hacky_swap_node(pos,"technic:nodebreaker_off")
+		nodeupdate(pos)
+	end
+end
+
+minetest.register_node("technic:nodebreaker_off", {
+	description = "Node Breaker",
+	tile_images = {"technic_nodebreaker_top_off.png","technic_nodebreaker_bottom_off.png","technic_nodebreaker_side2_off.png","technic_nodebreaker_side1_off.png",
+			"technic_nodebreaker_back.png","technic_nodebreaker_front_off.png"},
+	is_ground_content = true,
+	paramtype2 = "facedir",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2,tubedevice=1},
+	mesecons= {effector={action_on=node_breaker_on, action_off=node_breaker_off}},
+	sounds = default.node_sound_stone_defaults(),
+	on_construct = function(pos)
+	local meta = minetest.env:get_meta(pos)
+	end,
+	
+})
+
+minetest.register_node("technic:nodebreaker_on", {
+	description = "Node Breaker",
+	tile_images = {"technic_nodebreaker_top_on.png","technic_nodebreaker_bottom_on.png","technic_nodebreaker_side2_on.png","technic_nodebreaker_side1_on.png",
+			"technic_nodebreaker_back.png","technic_nodebreaker_front_on.png"},
+	mesecons= {effector={action_on=node_breaker_on, action_off=node_breaker_off}},
+	is_ground_content = true,
+	paramtype2 = "facedir",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2,tubedevice=1,not_in_creative_inventory=1},
+	sounds = default.node_sound_stone_defaults(),
+})
+
+
+function break_node (pos,n_param)		
+	local pos1={}
+	local pos2={}
+	pos1.x=pos.x
+	pos1.y=pos.y
+	pos1.z=pos.z
+	pos2.x=pos.x
+	pos2.y=pos.y
+	pos2.z=pos.z
+
+	--param2 3=x+ 1=x- 2=z+ 0=z-
+	local x_velocity=0
+	local z_velocity=0
+
+	if n_param==3 then pos2.x=pos2.x+1 pos1.x=pos1.x-1 x_velocity=-1 end
+	if n_param==2 then pos2.z=pos2.z+1 pos1.z=pos1.z-1 z_velocity=-1 end
+	if n_param==1 then pos2.x=pos2.x-1 pos1.x=pos1.x+1 x_velocity=1 end
+	if n_param==0 then pos2.z=pos2.z-1 pos1.x=pos1.z+1 z_velocity=1 end
+
+	local node=minetest.env:get_node(pos2)
+	if node.name == "air" then return nil end
+	if node.name == "default:lava_source" then return nil end
+	if node.name == "default:lava_flowing" then return nil end
+	if node.name == "default:water_source" then minetest.env:remove_node(pos2) return nil end
+	if node.name == "default:water_flowing" then minetest.env:remove_node(pos2) return nil end
+	if node.name == "ignore" then minetest.env:remove_node(pos2) return nil end
+	local drops = minetest.get_node_drops(node.name, "default:pick_mese")
+		local _, dropped_item
+		for _, dropped_item in ipairs(drops) do
+			local item1=tube_item({x=pos.x,y=pos.y,z=pos.z},dropped_item)
+			item1:get_luaentity().start_pos = {x=pos.x,y=pos.y,z=pos.z}
+			item1:setvelocity({x=x_velocity, y=0, z=z_velocity})
+			item1:setacceleration({x=0, y=0, z=0})
+		end
+	minetest.env:remove_node(pos2)
+end
+
diff --git a/technic/ores.lua b/technic/ores.lua
new file mode 100644
index 0000000..fddfc5e
--- /dev/null
+++ b/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(":stairsplus", "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(":stairsplus", "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(":stairsplus", "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(":stairsplus", "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
diff --git a/technic/project_table.lua b/technic/project_table.lua
new file mode 100644
index 0000000..355295c
--- /dev/null
+++ b/technic/project_table.lua
@@ -0,0 +1,39 @@
+minetest.register_craft({
+	output = 'technic:project_table 1',
+	recipe = {
+		{'default:wood','default:wood','default:wood'},
+		{'default:wood','default:chest','default:wood'},
+		{'default:stone','default:stone','default:stone'},
+	}
+})
+
+
+minetest.register_craftitem("technic:project_table", {
+	description = "Project Table",
+	stack_max = 99,
+})
+
+minetest.register_node("technic:project_table", {
+	description = "Project Table",
+	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", "Iron Chest")
+		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,
+})
\ No newline at end of file
diff --git a/technic/rubber.lua b/technic/rubber.lua
new file mode 100644
index 0000000..0e530ff
--- /dev/null
+++ b/technic/rubber.lua
@@ -0,0 +1,121 @@
+-- Code of rubber tree by PilzAdam
+
+minetest.register_node("technic:rubber_sapling", {
+	description = "Rubber Tree Sapling",
+	drawtype = "plantlike",
+	tiles = {"technic_rubber_sapling.png"},
+	inventory_image = "technic_rubber_sapling.png",
+	wield_image = "technic_rubber_sapling.png",
+	paramtype = "light",
+	walkable = false,
+	groups = {dig_immediate=3,flammable=2},
+	sounds = default.node_sound_defaults(),
+})
+
+minetest.register_node("technic:rubber_tree_full", {
+	description = "Rubber Tree",
+	tiles = {"default_tree_top.png", "default_tree_top.png", "technic_rubber_tree_full.png"},
+	groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
+	drop = "default:tree",
+	sounds = default.node_sound_wood_defaults(),
+	
+	on_dig = function(pos, node, digger)
+		minetest.node_dig(pos, node, digger)
+		minetest.env:remove_node(pos)
+	end,
+	
+	after_destruct = function(pos, oldnode)
+		oldnode.name = "technic:rubber_tree_empty"
+		minetest.env:set_node(pos, oldnode)
+	end
+})
+
+
+minetest.register_node("technic:rubber_tree_empty", {
+	tiles = {"default_tree_top.png", "default_tree_top.png", "technic_rubber_tree_empty.png"},
+	groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2, not_in_creative_inventory=1},
+	drop = "default:tree",
+	sounds = default.node_sound_wood_defaults(),
+})
+
+minetest.register_abm({
+	nodenames = {"technic:rubber_tree_empty"},
+	interval = 60,
+	chance = 15,
+	action = function(pos, node)
+		node.name = "technic:rubber_tree_full"
+		minetest.env:set_node(pos, node)
+	end
+})
+
+minetest.register_node("technic:rubber_leaves", {
+	drawtype = "allfaces_optional",
+	visual_scale = 1.3,
+	tiles = {"technic_rubber_leaves.png"},
+	paramtype = "light",
+	groups = {snappy=3, leafdecay=3, flammable=2, not_in_creative_inventory=1},
+	drop = {
+		max_items = 1,
+		items = {
+			{
+				items = {'technic:rubber_sapling'},
+				rarity = 20,
+			},
+		}
+	},
+	sounds = default.node_sound_leaves_defaults(),
+})
+
+minetest.register_abm({
+	nodenames = {"technic:rubber_sapling"},
+	interval = 60,
+	chance = 20,
+	action = function(pos, node)
+		rubber_tree={
+			axiom="FFFFA",
+			rules_a="[&FFBFA]////[&BFFFA]////[&FBFFA]",
+			rules_b="[&FFA]////[&FFA]////[&FFA]",
+			trunk="technic:rubber_tree_full",
+			leaves="technic:rubber_leaves",
+			angle=35,
+			iterations=3,
+			random_level=1,
+			thin_trunks=false;
+			fruit_tree=false,
+			fruit=""
+			}
+			minetest.env:spawn_tree(pos,rubber_tree)
+	end
+})
+
+minetest.register_on_generated(function(minp, maxp, blockseed)
+	if math.random(1, 100) > 5 then
+		return
+	end
+	local tmp = {x=(maxp.x-minp.x)/2+minp.x, y=(maxp.y-minp.y)/2+minp.y, z=(maxp.z-minp.z)/2+minp.z}
+	local pos = minetest.env:find_node_near(tmp, maxp.x-minp.x, {"default:dirt_with_grass"})
+	if pos ~= nil then
+			rubber_tree={
+			axiom="FFFFA",
+			rules_a="[&FFBFA]////[&BFFFA]////[&FBFFA]",
+			rules_b="[&FFA]////[&FFA]////[&FFA]",
+			trunk="technic:rubber_tree_full",
+			leaves="technic:rubber_leaves",
+			angle=35,
+			iterations=3,
+			random_level=1,
+			thin_trunks=false;
+			fruit_tree=false,
+			fruit=""
+			}
+			minetest.env:spawn_tree({x=pos.x, y=pos.y+1, z=pos.z},rubber_tree)
+	end
+end)
+
+
+-- ========= FUEL =========
+minetest.register_craft({
+	type = "fuel",
+	recipe = "technic:rubber_sapling",
+	burntime = 10
+})
diff --git a/technic/screwdriver.lua b/technic/screwdriver.lua
new file mode 100644
index 0000000..0b81217
--- /dev/null
+++ b/technic/screwdriver.lua
@@ -0,0 +1,47 @@
+ minetest.register_tool("technic:screwdriver", {
+            description = "Screwdriver",
+            inventory_image = "technic_screwdriver.png",
+            on_use = function(itemstack, user, pointed_thing)
+                    -- Must be pointing to facedir applicable node
+                    if pointed_thing.type~="node" then return end
+                    local pos=minetest.get_pointed_thing_position(pointed_thing,above)
+                    local node=minetest.env:get_node(pos)
+                    local node_name=node.name
+                        if minetest.registered_nodes[node_name].paramtype2 == "facedir" or minetest.registered_nodes[node_name].paramtype2 == "wallmounted" then
+                    if node.param2==nil  then return end
+                    -- Get ready to set the param2
+                    local n = node.param2
+                                        if minetest.registered_nodes[node_name].paramtype2 == "facedir" then
+                    n = n+1
+                    if n == 4 then n = 0 end
+                                        else
+                                        n = n+1
+                                        if n == 6 then n = 0 end
+                                        end
+                    -- hacky_swap_node, unforunatly.
+                    local meta = minetest.env:get_meta(pos)
+                    local meta0 = meta:to_table()
+                    node.param2 = n
+                    minetest.env:set_node(pos,node)
+                    meta = minetest.env:get_meta(pos)
+                    meta:from_table(meta0)
+                    local item=itemstack:to_table()
+                    local item_wear=tonumber((item["wear"]))
+                    item_wear=item_wear+819
+                    if item_wear>65535 then itemstack:clear() return itemstack end
+                    item["wear"]=tostring(item_wear)
+                    itemstack:replace(item)
+                    return itemstack
+                        else
+                        return itemstack
+                        end
+            end,
+    })
+    
+    minetest.register_craft({
+            output = "technic:screwdriver",
+            recipe = {
+                    {"technic:stainless_steel_ingot"},
+                    {"default:stick"}
+            }
+    })
diff --git a/technic/silver_chest.lua b/technic/silver_chest.lua
new file mode 100644
index 0000000..81dc47f
--- /dev/null
+++ b/technic/silver_chest.lua
@@ -0,0 +1,131 @@
+minetest.register_craft({
+	output = 'technic:silver_chest 1',
+	recipe = {
+		{'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'},
+		{'moreores:silver_ingot','technic:copper_chest','moreores:silver_ingot'},
+		{'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'},
+	}
+})
+
+minetest.register_craft({
+	output = 'technic:silver_locked_chest 1',
+	recipe = {
+		{'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'},
+		{'moreores:silver_ingot','technic:copper_locked_chest','moreores:silver_ingot'},
+		{'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'},
+	}
+})
+
+minetest.register_craft({
+	output = 'technic:silver_locked_chest 1',
+	recipe = {
+		{'default:steel_ingot'},
+		{'technic:silver_chest'},
+	}
+})
+
+minetest.register_craftitem("technic:silver_chest", {
+	description = "Silver Chest",
+	stack_max = 99,
+})
+minetest.register_craftitem("technic:silver_locked_chest", {
+	description = "Silver Locked Chest",
+	stack_max = 99,
+})
+
+minetest.register_node("technic:silver_chest", {
+	description = "Silver Chest",
+	tiles = {"technic_silver_chest_top.png", "technic_silver_chest_top.png", "technic_silver_chest_side.png",
+		"technic_silver_chest_side.png", "technic_silver_chest_side.png", "technic_silver_chest_front.png"},
+	paramtype2 = "facedir",
+	groups = chest_groups1,
+	tube = tubes_properties,
+	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[11,9;]"..
+				"list[current_name;main;0,0;11,4;]"..
+				"list[current_player;main;0,5;8,4;]")
+		meta:set_string("infotext", "Silver Chest")
+		local inv = meta:get_inventory()
+		inv:set_size("main", 11*4)
+	end,
+	can_dig = chest_can_dig,
+
+	on_punch = function (pos, node, puncher)
+	        local meta = minetest.env:get_meta(pos);
+                meta:set_string("formspec", "hack:sign_text_input")
+	end,
+	
+	on_receive_fields = function(pos, formname, fields, sender)
+        local meta = minetest.env:get_meta(pos);
+      		fields.text = fields.text or ""
+		meta:set_string("text", fields.text)
+		meta:set_string("infotext", '"'..fields.text..'"')
+
+		meta:set_string("formspec",
+				"invsize[11,9;]"..
+				"list[current_name;main;0,0;11,4;]"..
+				"list[current_player;main;0,5;8,4;]")
+	end,
+
+	on_metadata_inventory_move = def_on_metadata_inventory_move,
+	on_metadata_inventory_put = def_on_metadata_inventory_put,
+	on_metadata_inventory_take = def_on_metadata_inventory_take 
+})
+
+minetest.register_node("technic:silver_locked_chest", {
+	description = "Silver Locked Chest",
+	tiles = {"technic_silver_chest_top.png", "technic_silver_chest_top.png", "technic_silver_chest_side.png",
+		"technic_silver_chest_side.png", "technic_silver_chest_side.png", "technic_silver_chest_locked.png"},
+	paramtype2 = "facedir",
+	groups = chest_groups2,
+	tube = tubes_properties,
+	legacy_facedir_simple = true,
+	sounds = default.node_sound_wood_defaults(),
+	after_place_node = function(pos, placer)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("owner", placer:get_player_name() or "")
+		meta:set_string("infotext", "Silver Locked Chest (owned by "..
+			meta:get_string("owner")..")")
+	end,
+	on_construct = function(pos)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("formspec",
+				"invsize[11,9;]"..
+				"list[current_name;main;0,0;11,4;]"..
+				"list[current_player;main;0,5;8,4;]")
+		meta:set_string("infotext", "Silver Locked Chest")
+		meta:set_string("owner", "")
+		local inv = meta:get_inventory()
+		inv:set_size("main", 11*4)
+	end,
+	can_dig = chest_can_dig,
+
+	on_punch = function (pos, node, puncher)
+	        local meta = minetest.env:get_meta(pos);
+                meta:set_string("formspec", "hack:sign_text_input")
+	end,
+	
+	on_receive_fields = function(pos, formname, fields, sender)
+        local meta = minetest.env:get_meta(pos);
+      		fields.text = fields.text or ""
+		meta:set_string("text", fields.text)
+		meta:set_string("infotext", '"'..fields.text..'"')
+
+		meta:set_string("formspec",
+				"invsize[11,9;]"..
+				"list[current_name;main;0,0;11,4;]"..
+				"list[current_player;main;0,5;8,4;]")
+	end,
+
+
+	allow_metadata_inventory_move = def_allow_metadata_inventory_move,
+	allow_metadata_inventory_put = def_allow_metadata_inventory_put,
+	allow_metadata_inventory_take = def_allow_metadata_inventory_take,
+	on_metadata_inventory_move = def_on_metadata_inventory_move,
+	on_metadata_inventory_put = def_on_metadata_inventory_put,
+	on_metadata_inventory_take = def_on_metadata_inventory_take 
+})
diff --git a/technic/solar_panel.lua b/technic/solar_panel.lua
new file mode 100644
index 0000000..02a8f69
--- /dev/null
+++ b/technic/solar_panel.lua
@@ -0,0 +1,76 @@
+minetest.register_node("technic:solar_panel", {
+	tiles = {"technic_solar_panel_top.png", "technic_solar_panel_bottom.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,
+	internal_EU_buffer=0;
+	internal_EU_buffer_size=1000;
+	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_float("internal_EU_buffer", 0)
+		meta:set_float("internal_EU_buffer_size", 1000)
+
+		meta:set_string("infotext", "Solar Panel")
+		meta:set_float("active", false)
+	end,
+})
+
+minetest.register_craft({
+	output = 'technic:solar_panel 1',
+	recipe = {
+		{'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer','technic:doped_silicon_wafer'},
+		{'technic:doped_silicon_wafer', 'moreores:copper_ingot','technic:doped_silicon_wafer'},
+		{'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer','technic:doped_silicon_wafer'},
+
+	}
+})
+
+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)
+			local internal_EU_buffer=meta:get_float("internal_EU_buffer")
+			local internal_EU_buffer_size=meta:get_float("internal_EU_buffer_size")
+			local charge_to_give=40+(pos1.y/250*40) -- make solar energy depending on height
+			if charge_to_give<0 then charge_to_give=0 end
+			if charge_to_give>160 then charge_to_give=160 end
+			if internal_EU_buffer+charge_to_give>internal_EU_buffer_size then
+			charge_to_give=internal_EU_buffer_size-internal_EU_buffer
+			end
+			internal_EU_buffer=internal_EU_buffer+charge_to_give
+			meta:set_float("internal_EU_buffer",internal_EU_buffer)
+			
+		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/technic/solar_panel_mv.lua b/technic/solar_panel_mv.lua
new file mode 100644
index 0000000..93e21e7
--- /dev/null
+++ b/technic/solar_panel_mv.lua
@@ -0,0 +1,76 @@
+minetest.register_node("technic:solar_panel_mv", {
+	tiles = {"technic_mv_solar_panel_top.png", "technic_mv_solar_panel_bottom.png", "technic_mv_solar_panel_side.png",
+		"technic_mv_solar_panel_side.png", "technic_mv_solar_panel_side.png", "technic_mv_solar_panel_side.png"},
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+	sounds = default.node_sound_wood_defaults(),
+    	description="MV Solar Panel",
+	active = false,
+	technic_mv_power_machine=1,
+	internal_EU_buffer=0;
+	internal_EU_buffer_size=10000;
+	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_mv_power_machine", 1)
+		meta:set_float("internal_EU_buffer", 0)
+		meta:set_float("internal_EU_buffer_size", 10000)
+
+		meta:set_string("infotext", "MV Solar Panel")
+		meta:set_float("active", false)
+	end,
+})
+
+minetest.register_craft({
+	output = 'technic:solar_panel_mv 1',
+	recipe = {
+		{'technic:solar_panel', 'technic:solar_panel','technic:solar_panel'},
+		{'technic:solar_panel', 'technic:mv_transformer','technic:solar_panel'},
+		{'', 'technic:mv_cable',''},
+
+	}
+})
+
+minetest.register_abm(
+	{nodenames = {"technic:solar_panel_mv"},
+	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 >= 14 then
+			meta:set_string("infotext", "Solar Panel is active ")
+			meta:set_float("active",1)
+			local internal_EU_buffer=meta:get_float("internal_EU_buffer")
+			local internal_EU_buffer_size=meta:get_float("internal_EU_buffer_size")
+			local charge_to_give=300+(pos1.y/250*300) -- make solar energy depending on height
+			if charge_to_give<0 then charge_to_give=0 end
+			if charge_to_give>600 then charge_to_give=600 end
+			if internal_EU_buffer+charge_to_give>internal_EU_buffer_size then
+			charge_to_give=internal_EU_buffer_size-internal_EU_buffer
+			end
+			internal_EU_buffer=internal_EU_buffer+charge_to_give
+			meta:set_float("internal_EU_buffer",internal_EU_buffer)
+			
+		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/technic/sonic_screwdriver.lua b/technic/sonic_screwdriver.lua
new file mode 100644
index 0000000..d089778
--- /dev/null
+++ b/technic/sonic_screwdriver.lua
@@ -0,0 +1,55 @@
+sonic_screwdriver_max_charge=15000
+      
+       minetest.register_tool("technic:sonic_screwdriver", {
+            description = "Sonic Screwdriver",
+            inventory_image = "technic_sonic_screwdriver.png",
+            on_use = function(itemstack, user, pointed_thing)
+                    -- Must be pointing to facedir applicable node
+                    if pointed_thing.type~="node" then return end
+                    local pos=minetest.get_pointed_thing_position(pointed_thing,above)
+                    local node=minetest.env:get_node(pos)
+                    local node_name=node.name
+                        if minetest.registered_nodes[node_name].paramtype2 == "facedir" or minetest.registered_nodes[node_name].paramtype2 == "wallmounted" then
+                    if node.param2==nil  then return end
+                    item=itemstack:to_table()
+                        if item["metadata"]=="" or item["metadata"]=="0" then  return end 
+			local charge=tonumber((item["metadata"])) 
+                        if charge-100>0 then
+                                minetest.sound_play("technic_sonic_screwdriver", {pos = pos, gain = 0.3, max_hear_distance = 10,})
+                           local n = node.param2
+                           if minetest.registered_nodes[node_name].paramtype2 == "facedir" then
+                           n = n+1
+                   if n == 4 then n = 0 end
+                           else
+                           n = n+1
+                           if n == 6 then n = 0 end
+                           end
+                            -- hacky_swap_node, unforunatly.
+                            local meta = minetest.env:get_meta(pos)
+                            local meta0 = meta:to_table()
+                            node.param2 = n
+                            minetest.env:set_node(pos,node)
+                            meta = minetest.env:get_meta(pos)
+                            meta:from_table(meta0)
+                 
+                          charge =charge-100;  
+                          item["metadata"]=tostring(charge)
+			  set_RE_wear(item,charge,sonic_screwdriver_max_charge)
+                          itemstack:replace(item)
+                          end
+                        return itemstack
+                        else
+                        return itemstack
+                        end
+                        end,
+         
+    })
+     
+    minetest.register_craft({
+            output = "technic:sonic_screwdriver",
+            recipe = {
+		    {"technic:diamond"},
+                    {"technic:battery"},
+                    {"technic:stainless_steel_ingot"}
+            }
+    })
diff --git a/technic/tetris.lua b/technic/tetris.lua
new file mode 100644
index 0000000..3b14c47
--- /dev/null
+++ b/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/technic/textures/power_meter.png b/technic/textures/power_meter.png
new file mode 100644
index 0000000..9f96cac
--- /dev/null
+++ b/technic/textures/power_meter.png
Binary files differ
diff --git a/technic/textures/technic_alloy_furnace_front.png b/technic/textures/technic_alloy_furnace_front.png
new file mode 100644
index 0000000..2d65cda
--- /dev/null
+++ b/technic/textures/technic_alloy_furnace_front.png
Binary files differ
diff --git a/technic/textures/technic_alloy_furnace_front_active.png b/technic/textures/technic_alloy_furnace_front_active.png
new file mode 100644
index 0000000..1ced989
--- /dev/null
+++ b/technic/textures/technic_alloy_furnace_front_active.png
Binary files differ
diff --git a/technic/textures/technic_alloy_furnace_side.png b/technic/textures/technic_alloy_furnace_side.png
new file mode 100644
index 0000000..778ad88
--- /dev/null
+++ b/technic/textures/technic_alloy_furnace_side.png
Binary files differ
diff --git a/technic/textures/technic_alloy_furnace_top.png b/technic/textures/technic_alloy_furnace_top.png
new file mode 100644
index 0000000..706793b
--- /dev/null
+++ b/technic/textures/technic_alloy_furnace_top.png
Binary files differ
diff --git a/technic/textures/technic_battery.png b/technic/textures/technic_battery.png
new file mode 100644
index 0000000..ee83b74
--- /dev/null
+++ b/technic/textures/technic_battery.png
Binary files differ
diff --git a/technic/textures/technic_battery_box_bottom.png b/technic/textures/technic_battery_box_bottom.png
new file mode 100644
index 0000000..a6124e6
--- /dev/null
+++ b/technic/textures/technic_battery_box_bottom.png
Binary files differ
diff --git a/technic/textures/technic_battery_box_side.png b/technic/textures/technic_battery_box_side.png
new file mode 100644
index 0000000..98a22d6
--- /dev/null
+++ b/technic/textures/technic_battery_box_side.png
Binary files differ
diff --git a/technic/textures/technic_battery_box_side0.png b/technic/textures/technic_battery_box_side0.png
new file mode 100644
index 0000000..24d4e4e
--- /dev/null
+++ b/technic/textures/technic_battery_box_side0.png
Binary files differ
diff --git a/technic/textures/technic_battery_box_side8.png b/technic/textures/technic_battery_box_side8.png
new file mode 100644
index 0000000..65806f4
--- /dev/null
+++ b/technic/textures/technic_battery_box_side8.png
Binary files differ
diff --git a/technic/textures/technic_battery_box_side_mv.png b/technic/textures/technic_battery_box_side_mv.png
new file mode 100644
index 0000000..06a4be5
--- /dev/null
+++ b/technic/textures/technic_battery_box_side_mv.png
Binary files differ
diff --git a/technic/textures/technic_battery_box_top.png b/technic/textures/technic_battery_box_top.png
new file mode 100644
index 0000000..b32100f
--- /dev/null
+++ b/technic/textures/technic_battery_box_top.png
Binary files differ
diff --git a/technic/textures/technic_battery_meter_fg.png b/technic/textures/technic_battery_meter_fg.png
new file mode 100644
index 0000000..2f19bc7
--- /dev/null
+++ b/technic/textures/technic_battery_meter_fg.png
Binary files differ
diff --git a/technic/textures/technic_battery_reload.png b/technic/textures/technic_battery_reload.png
new file mode 100644
index 0000000..4ce48d8
--- /dev/null
+++ b/technic/textures/technic_battery_reload.png
Binary files differ
diff --git a/technic/textures/technic_brass_dust.png b/technic/textures/technic_brass_dust.png
new file mode 100644
index 0000000..63d9ba4
--- /dev/null
+++ b/technic/textures/technic_brass_dust.png
Binary files differ
diff --git a/technic/textures/technic_brass_ingot.png b/technic/textures/technic_brass_ingot.png
new file mode 100644
index 0000000..2d8b153
--- /dev/null
+++ b/technic/textures/technic_brass_ingot.png
Binary files differ
diff --git a/technic/textures/technic_bronze_dust.png b/technic/textures/technic_bronze_dust.png
new file mode 100644
index 0000000..a613205
--- /dev/null
+++ b/technic/textures/technic_bronze_dust.png
Binary files differ
diff --git a/technic/textures/technic_chainsaw.png b/technic/textures/technic_chainsaw.png
new file mode 100644
index 0000000..1a69893
--- /dev/null
+++ b/technic/textures/technic_chainsaw.png
Binary files differ
diff --git a/technic/textures/technic_chromium_dust.png b/technic/textures/technic_chromium_dust.png
new file mode 100644
index 0000000..0e48069
--- /dev/null
+++ b/technic/textures/technic_chromium_dust.png
Binary files differ
diff --git a/technic/textures/technic_chromium_ingot.png b/technic/textures/technic_chromium_ingot.png
new file mode 100644
index 0000000..91d5b20
--- /dev/null
+++ b/technic/textures/technic_chromium_ingot.png
Binary files differ
diff --git a/technic/textures/technic_chromium_lump.png b/technic/textures/technic_chromium_lump.png
new file mode 100644
index 0000000..1588f92
--- /dev/null
+++ b/technic/textures/technic_chromium_lump.png
Binary files differ
diff --git a/technic/textures/technic_coal_alloy_furnace_bottom.png b/technic/textures/technic_coal_alloy_furnace_bottom.png
new file mode 100644
index 0000000..077dec5
--- /dev/null
+++ b/technic/textures/technic_coal_alloy_furnace_bottom.png
Binary files differ
diff --git a/technic/textures/technic_coal_alloy_furnace_front.png b/technic/textures/technic_coal_alloy_furnace_front.png
new file mode 100644
index 0000000..d9d93dd
--- /dev/null
+++ b/technic/textures/technic_coal_alloy_furnace_front.png
Binary files differ
diff --git a/technic/textures/technic_coal_alloy_furnace_front_active.png b/technic/textures/technic_coal_alloy_furnace_front_active.png
new file mode 100644
index 0000000..ffc4e0a
--- /dev/null
+++ b/technic/textures/technic_coal_alloy_furnace_front_active.png
Binary files differ
diff --git a/technic/textures/technic_coal_alloy_furnace_side.png b/technic/textures/technic_coal_alloy_furnace_side.png
new file mode 100644
index 0000000..d5c7066
--- /dev/null
+++ b/technic/textures/technic_coal_alloy_furnace_side.png
Binary files differ
diff --git a/technic/textures/technic_coal_alloy_furnace_top.png b/technic/textures/technic_coal_alloy_furnace_top.png
new file mode 100644
index 0000000..6424fc0
--- /dev/null
+++ b/technic/textures/technic_coal_alloy_furnace_top.png
Binary files differ
diff --git a/technic/textures/technic_coal_dust.png b/technic/textures/technic_coal_dust.png
new file mode 100644
index 0000000..a1486c6
--- /dev/null
+++ b/technic/textures/technic_coal_dust.png
Binary files differ
diff --git a/technic/textures/technic_concrete_block.png b/technic/textures/technic_concrete_block.png
new file mode 100644
index 0000000..cd94594
--- /dev/null
+++ b/technic/textures/technic_concrete_block.png
Binary files differ
diff --git a/technic/textures/technic_constructor_back.png b/technic/textures/technic_constructor_back.png
new file mode 100644
index 0000000..f002363
--- /dev/null
+++ b/technic/textures/technic_constructor_back.png
Binary files differ
diff --git a/technic/textures/technic_constructor_front_off.png b/technic/textures/technic_constructor_front_off.png
new file mode 100644
index 0000000..f3f7856
--- /dev/null
+++ b/technic/textures/technic_constructor_front_off.png
Binary files differ
diff --git a/technic/textures/technic_constructor_front_on.png b/technic/textures/technic_constructor_front_on.png
new file mode 100644
index 0000000..d733765
--- /dev/null
+++ b/technic/textures/technic_constructor_front_on.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk1_bottom_off.png b/technic/textures/technic_constructor_mk1_bottom_off.png
new file mode 100644
index 0000000..0c52557
--- /dev/null
+++ b/technic/textures/technic_constructor_mk1_bottom_off.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk1_bottom_on.png b/technic/textures/technic_constructor_mk1_bottom_on.png
new file mode 100644
index 0000000..0c46c57
--- /dev/null
+++ b/technic/textures/technic_constructor_mk1_bottom_on.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk1_side1_off.png b/technic/textures/technic_constructor_mk1_side1_off.png
new file mode 100644
index 0000000..e64ddbe
--- /dev/null
+++ b/technic/textures/technic_constructor_mk1_side1_off.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk1_side1_on.png b/technic/textures/technic_constructor_mk1_side1_on.png
new file mode 100644
index 0000000..eda98d8
--- /dev/null
+++ b/technic/textures/technic_constructor_mk1_side1_on.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk1_side2_off.png b/technic/textures/technic_constructor_mk1_side2_off.png
new file mode 100644
index 0000000..b33fcfb
--- /dev/null
+++ b/technic/textures/technic_constructor_mk1_side2_off.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk1_side2_on.png b/technic/textures/technic_constructor_mk1_side2_on.png
new file mode 100644
index 0000000..17e4786
--- /dev/null
+++ b/technic/textures/technic_constructor_mk1_side2_on.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk1_top_off.png b/technic/textures/technic_constructor_mk1_top_off.png
new file mode 100644
index 0000000..9f3846c
--- /dev/null
+++ b/technic/textures/technic_constructor_mk1_top_off.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk1_top_on.png b/technic/textures/technic_constructor_mk1_top_on.png
new file mode 100644
index 0000000..5c8d6fb
--- /dev/null
+++ b/technic/textures/technic_constructor_mk1_top_on.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk2_bottom_off.png b/technic/textures/technic_constructor_mk2_bottom_off.png
new file mode 100644
index 0000000..e926dda
--- /dev/null
+++ b/technic/textures/technic_constructor_mk2_bottom_off.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk2_bottom_on.png b/technic/textures/technic_constructor_mk2_bottom_on.png
new file mode 100644
index 0000000..52d739b
--- /dev/null
+++ b/technic/textures/technic_constructor_mk2_bottom_on.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk2_side1_off.png b/technic/textures/technic_constructor_mk2_side1_off.png
new file mode 100644
index 0000000..2fd42a2
--- /dev/null
+++ b/technic/textures/technic_constructor_mk2_side1_off.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk2_side1_on.png b/technic/textures/technic_constructor_mk2_side1_on.png
new file mode 100644
index 0000000..4c75c83
--- /dev/null
+++ b/technic/textures/technic_constructor_mk2_side1_on.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk2_side2_off.png b/technic/textures/technic_constructor_mk2_side2_off.png
new file mode 100644
index 0000000..f6407e7
--- /dev/null
+++ b/technic/textures/technic_constructor_mk2_side2_off.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk2_side2_on.png b/technic/textures/technic_constructor_mk2_side2_on.png
new file mode 100644
index 0000000..e40db48
--- /dev/null
+++ b/technic/textures/technic_constructor_mk2_side2_on.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk2_top_off.png b/technic/textures/technic_constructor_mk2_top_off.png
new file mode 100644
index 0000000..e5227d1
--- /dev/null
+++ b/technic/textures/technic_constructor_mk2_top_off.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk2_top_on.png b/technic/textures/technic_constructor_mk2_top_on.png
new file mode 100644
index 0000000..9762bd6
--- /dev/null
+++ b/technic/textures/technic_constructor_mk2_top_on.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk3_bottom_off.png b/technic/textures/technic_constructor_mk3_bottom_off.png
new file mode 100644
index 0000000..606d97e
--- /dev/null
+++ b/technic/textures/technic_constructor_mk3_bottom_off.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk3_bottom_on.png b/technic/textures/technic_constructor_mk3_bottom_on.png
new file mode 100644
index 0000000..878e4ff
--- /dev/null
+++ b/technic/textures/technic_constructor_mk3_bottom_on.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk3_side1_off.png b/technic/textures/technic_constructor_mk3_side1_off.png
new file mode 100644
index 0000000..84dd7eb
--- /dev/null
+++ b/technic/textures/technic_constructor_mk3_side1_off.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk3_side1_on.png b/technic/textures/technic_constructor_mk3_side1_on.png
new file mode 100644
index 0000000..2741d2d
--- /dev/null
+++ b/technic/textures/technic_constructor_mk3_side1_on.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk3_side2_off.png b/technic/textures/technic_constructor_mk3_side2_off.png
new file mode 100644
index 0000000..75a5031
--- /dev/null
+++ b/technic/textures/technic_constructor_mk3_side2_off.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk3_side2_on.png b/technic/textures/technic_constructor_mk3_side2_on.png
new file mode 100644
index 0000000..0a150ed
--- /dev/null
+++ b/technic/textures/technic_constructor_mk3_side2_on.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk3_top_off.png b/technic/textures/technic_constructor_mk3_top_off.png
new file mode 100644
index 0000000..c716752
--- /dev/null
+++ b/technic/textures/technic_constructor_mk3_top_off.png
Binary files differ
diff --git a/technic/textures/technic_constructor_mk3_top_on.png b/technic/textures/technic_constructor_mk3_top_on.png
new file mode 100644
index 0000000..acbe85b
--- /dev/null
+++ b/technic/textures/technic_constructor_mk3_top_on.png
Binary files differ
diff --git a/technic/textures/technic_copper_chest_front.png b/technic/textures/technic_copper_chest_front.png
new file mode 100644
index 0000000..add51e8
--- /dev/null
+++ b/technic/textures/technic_copper_chest_front.png
Binary files differ
diff --git a/technic/textures/technic_copper_chest_locked.png b/technic/textures/technic_copper_chest_locked.png
new file mode 100644
index 0000000..971cd5f
--- /dev/null
+++ b/technic/textures/technic_copper_chest_locked.png
Binary files differ
diff --git a/technic/textures/technic_copper_chest_side.png b/technic/textures/technic_copper_chest_side.png
new file mode 100644
index 0000000..2231cce
--- /dev/null
+++ b/technic/textures/technic_copper_chest_side.png
Binary files differ
diff --git a/technic/textures/technic_copper_chest_top.png b/technic/textures/technic_copper_chest_top.png
new file mode 100644
index 0000000..69f1078
--- /dev/null
+++ b/technic/textures/technic_copper_chest_top.png
Binary files differ
diff --git a/technic/textures/technic_copper_coil.png b/technic/textures/technic_copper_coil.png
new file mode 100644
index 0000000..db6db1a
--- /dev/null
+++ b/technic/textures/technic_copper_coil.png
Binary files differ
diff --git a/technic/textures/technic_copper_dust.png b/technic/textures/technic_copper_dust.png
new file mode 100644
index 0000000..cad33ea
--- /dev/null
+++ b/technic/textures/technic_copper_dust.png
Binary files differ
diff --git a/technic/textures/technic_deployer_back.png b/technic/textures/technic_deployer_back.png
new file mode 100644
index 0000000..12e5a31
--- /dev/null
+++ b/technic/textures/technic_deployer_back.png
Binary files differ
diff --git a/technic/textures/technic_deployer_bottom.png b/technic/textures/technic_deployer_bottom.png
new file mode 100644
index 0000000..febbe18
--- /dev/null
+++ b/technic/textures/technic_deployer_bottom.png
Binary files differ
diff --git a/technic/textures/technic_deployer_front_off.png b/technic/textures/technic_deployer_front_off.png
new file mode 100644
index 0000000..9593112
--- /dev/null
+++ b/technic/textures/technic_deployer_front_off.png
Binary files differ
diff --git a/technic/textures/technic_deployer_front_on.png b/technic/textures/technic_deployer_front_on.png
new file mode 100644
index 0000000..f78de4c
--- /dev/null
+++ b/technic/textures/technic_deployer_front_on.png
Binary files differ
diff --git a/technic/textures/technic_deployer_side.png b/technic/textures/technic_deployer_side.png
new file mode 100644
index 0000000..73af8f8
--- /dev/null
+++ b/technic/textures/technic_deployer_side.png
Binary files differ
diff --git a/technic/textures/technic_deployer_side1.png b/technic/textures/technic_deployer_side1.png
new file mode 100644
index 0000000..8ef28d3
--- /dev/null
+++ b/technic/textures/technic_deployer_side1.png
Binary files differ
diff --git a/technic/textures/technic_deployer_side2.png b/technic/textures/technic_deployer_side2.png
new file mode 100644
index 0000000..ccb2cb9
--- /dev/null
+++ b/technic/textures/technic_deployer_side2.png
Binary files differ
diff --git a/technic/textures/technic_deployer_top.png b/technic/textures/technic_deployer_top.png
new file mode 100644
index 0000000..262c9f6
--- /dev/null
+++ b/technic/textures/technic_deployer_top.png
Binary files differ
diff --git a/technic/textures/technic_diamond.png b/technic/textures/technic_diamond.png
new file mode 100644
index 0000000..23e6126
--- /dev/null
+++ b/technic/textures/technic_diamond.png
Binary files differ
diff --git a/technic/textures/technic_diamond_block.png b/technic/textures/technic_diamond_block.png
new file mode 100644
index 0000000..7b20476
--- /dev/null
+++ b/technic/textures/technic_diamond_block.png
Binary files differ
diff --git a/technic/textures/technic_diamond_block_blue.png b/technic/textures/technic_diamond_block_blue.png
new file mode 100644
index 0000000..9f59fba
--- /dev/null
+++ b/technic/textures/technic_diamond_block_blue.png
Binary files differ
diff --git a/technic/textures/technic_diamond_block_green.png b/technic/textures/technic_diamond_block_green.png
new file mode 100644
index 0000000..585c4b8
--- /dev/null
+++ b/technic/textures/technic_diamond_block_green.png
Binary files differ
diff --git a/technic/textures/technic_diamond_block_red.png b/technic/textures/technic_diamond_block_red.png
new file mode 100644
index 0000000..ed30957
--- /dev/null
+++ b/technic/textures/technic_diamond_block_red.png
Binary files differ
diff --git a/technic/textures/technic_diamond_drill_head.png b/technic/textures/technic_diamond_drill_head.png
new file mode 100644
index 0000000..e3d31e8
--- /dev/null
+++ b/technic/textures/technic_diamond_drill_head.png
Binary files differ
diff --git a/technic/textures/technic_doped_silicon_wafer.png b/technic/textures/technic_doped_silicon_wafer.png
new file mode 100644
index 0000000..6365137
--- /dev/null
+++ b/technic/textures/technic_doped_silicon_wafer.png
Binary files differ
diff --git a/technic/textures/technic_electric_furnace_bottom.png b/technic/textures/technic_electric_furnace_bottom.png
new file mode 100644
index 0000000..15fa6de
--- /dev/null
+++ b/technic/textures/technic_electric_furnace_bottom.png
Binary files differ
diff --git a/technic/textures/technic_electric_furnace_front.png b/technic/textures/technic_electric_furnace_front.png
new file mode 100644
index 0000000..755aadf
--- /dev/null
+++ b/technic/textures/technic_electric_furnace_front.png
Binary files differ
diff --git a/technic/textures/technic_electric_furnace_front_active.png b/technic/textures/technic_electric_furnace_front_active.png
new file mode 100644
index 0000000..de7f1f9
--- /dev/null
+++ b/technic/textures/technic_electric_furnace_front_active.png
Binary files differ
diff --git a/technic/textures/technic_electric_furnace_side.png b/technic/textures/technic_electric_furnace_side.png
new file mode 100644
index 0000000..80cf742
--- /dev/null
+++ b/technic/textures/technic_electric_furnace_side.png
Binary files differ
diff --git a/technic/textures/technic_electric_furnace_top.png b/technic/textures/technic_electric_furnace_top.png
new file mode 100644
index 0000000..fbadd9a
--- /dev/null
+++ b/technic/textures/technic_electric_furnace_top.png
Binary files differ
diff --git a/technic/textures/technic_fine_copper_wire.png b/technic/textures/technic_fine_copper_wire.png
new file mode 100644
index 0000000..3e663bb
--- /dev/null
+++ b/technic/textures/technic_fine_copper_wire.png
Binary files differ
diff --git a/technic/textures/technic_flashlight.png b/technic/textures/technic_flashlight.png
new file mode 100644
index 0000000..8e7b75a
--- /dev/null
+++ b/technic/textures/technic_flashlight.png
Binary files differ
diff --git a/technic/textures/technic_generator_front.png b/technic/textures/technic_generator_front.png
new file mode 100644
index 0000000..2d64844
--- /dev/null
+++ b/technic/textures/technic_generator_front.png
Binary files differ
diff --git a/technic/textures/technic_generator_front_active.png b/technic/textures/technic_generator_front_active.png
new file mode 100644
index 0000000..4e57ca0
--- /dev/null
+++ b/technic/textures/technic_generator_front_active.png
Binary files differ
diff --git a/technic/textures/technic_generator_side.png b/technic/textures/technic_generator_side.png
new file mode 100644
index 0000000..5cbcbef
--- /dev/null
+++ b/technic/textures/technic_generator_side.png
Binary files differ
diff --git a/technic/textures/technic_generator_top.png b/technic/textures/technic_generator_top.png
new file mode 100644
index 0000000..e2f3db3
--- /dev/null
+++ b/technic/textures/technic_generator_top.png
Binary files differ
diff --git a/technic/textures/technic_geothermal_side.png b/technic/textures/technic_geothermal_side.png
new file mode 100644
index 0000000..90fb430
--- /dev/null
+++ b/technic/textures/technic_geothermal_side.png
Binary files differ
diff --git a/technic/textures/technic_geothermal_top.png b/technic/textures/technic_geothermal_top.png
new file mode 100644
index 0000000..601ff15
--- /dev/null
+++ b/technic/textures/technic_geothermal_top.png
Binary files differ
diff --git a/technic/textures/technic_geothermal_top_active.png b/technic/textures/technic_geothermal_top_active.png
new file mode 100644
index 0000000..f02bec6
--- /dev/null
+++ b/technic/textures/technic_geothermal_top_active.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_front.png b/technic/textures/technic_gold_chest_front.png
new file mode 100644
index 0000000..1bfb55b
--- /dev/null
+++ b/technic/textures/technic_gold_chest_front.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_front_black.png b/technic/textures/technic_gold_chest_front_black.png
new file mode 100644
index 0000000..d283830
--- /dev/null
+++ b/technic/textures/technic_gold_chest_front_black.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_front_blue.png b/technic/textures/technic_gold_chest_front_blue.png
new file mode 100644
index 0000000..dc3fdfd
--- /dev/null
+++ b/technic/textures/technic_gold_chest_front_blue.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_front_brown.png b/technic/textures/technic_gold_chest_front_brown.png
new file mode 100644
index 0000000..db2773e
--- /dev/null
+++ b/technic/textures/technic_gold_chest_front_brown.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_front_cyan.png b/technic/textures/technic_gold_chest_front_cyan.png
new file mode 100644
index 0000000..80b5b89
--- /dev/null
+++ b/technic/textures/technic_gold_chest_front_cyan.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_front_dark_green.png b/technic/textures/technic_gold_chest_front_dark_green.png
new file mode 100644
index 0000000..5c8ec63
--- /dev/null
+++ b/technic/textures/technic_gold_chest_front_dark_green.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_front_dark_grey.png b/technic/textures/technic_gold_chest_front_dark_grey.png
new file mode 100644
index 0000000..799cb2d
--- /dev/null
+++ b/technic/textures/technic_gold_chest_front_dark_grey.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_front_green.png b/technic/textures/technic_gold_chest_front_green.png
new file mode 100644
index 0000000..3632e93
--- /dev/null
+++ b/technic/textures/technic_gold_chest_front_green.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_front_grey.png b/technic/textures/technic_gold_chest_front_grey.png
new file mode 100644
index 0000000..35ad8db
--- /dev/null
+++ b/technic/textures/technic_gold_chest_front_grey.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_front_magenta.png b/technic/textures/technic_gold_chest_front_magenta.png
new file mode 100644
index 0000000..5c7a05c
--- /dev/null
+++ b/technic/textures/technic_gold_chest_front_magenta.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_front_orange.png b/technic/textures/technic_gold_chest_front_orange.png
new file mode 100644
index 0000000..bbf01cc
--- /dev/null
+++ b/technic/textures/technic_gold_chest_front_orange.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_front_pink.png b/technic/textures/technic_gold_chest_front_pink.png
new file mode 100644
index 0000000..aeedf35
--- /dev/null
+++ b/technic/textures/technic_gold_chest_front_pink.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_front_red.png b/technic/textures/technic_gold_chest_front_red.png
new file mode 100644
index 0000000..cf7cef6
--- /dev/null
+++ b/technic/textures/technic_gold_chest_front_red.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_front_violet.png b/technic/textures/technic_gold_chest_front_violet.png
new file mode 100644
index 0000000..b5b61c2
--- /dev/null
+++ b/technic/textures/technic_gold_chest_front_violet.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_front_white.png b/technic/textures/technic_gold_chest_front_white.png
new file mode 100644
index 0000000..1b43cfe
--- /dev/null
+++ b/technic/textures/technic_gold_chest_front_white.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_front_yellow.png b/technic/textures/technic_gold_chest_front_yellow.png
new file mode 100644
index 0000000..bf572cf
--- /dev/null
+++ b/technic/textures/technic_gold_chest_front_yellow.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_locked.png b/technic/textures/technic_gold_chest_locked.png
new file mode 100644
index 0000000..15f1fe4
--- /dev/null
+++ b/technic/textures/technic_gold_chest_locked.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_locked_black.png b/technic/textures/technic_gold_chest_locked_black.png
new file mode 100644
index 0000000..a8ce91f
--- /dev/null
+++ b/technic/textures/technic_gold_chest_locked_black.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_locked_blue.png b/technic/textures/technic_gold_chest_locked_blue.png
new file mode 100644
index 0000000..5a9c27e
--- /dev/null
+++ b/technic/textures/technic_gold_chest_locked_blue.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_locked_brown.png b/technic/textures/technic_gold_chest_locked_brown.png
new file mode 100644
index 0000000..a064e32
--- /dev/null
+++ b/technic/textures/technic_gold_chest_locked_brown.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_locked_cyan.png b/technic/textures/technic_gold_chest_locked_cyan.png
new file mode 100644
index 0000000..95afa80
--- /dev/null
+++ b/technic/textures/technic_gold_chest_locked_cyan.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_locked_dark_green.png b/technic/textures/technic_gold_chest_locked_dark_green.png
new file mode 100644
index 0000000..7c9e992
--- /dev/null
+++ b/technic/textures/technic_gold_chest_locked_dark_green.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_locked_dark_grey.png b/technic/textures/technic_gold_chest_locked_dark_grey.png
new file mode 100644
index 0000000..c19e9fd
--- /dev/null
+++ b/technic/textures/technic_gold_chest_locked_dark_grey.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_locked_green.png b/technic/textures/technic_gold_chest_locked_green.png
new file mode 100644
index 0000000..ce10afa
--- /dev/null
+++ b/technic/textures/technic_gold_chest_locked_green.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_locked_grey.png b/technic/textures/technic_gold_chest_locked_grey.png
new file mode 100644
index 0000000..667ea20
--- /dev/null
+++ b/technic/textures/technic_gold_chest_locked_grey.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_locked_magenta.png b/technic/textures/technic_gold_chest_locked_magenta.png
new file mode 100644
index 0000000..fc8573a
--- /dev/null
+++ b/technic/textures/technic_gold_chest_locked_magenta.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_locked_orange.png b/technic/textures/technic_gold_chest_locked_orange.png
new file mode 100644
index 0000000..e1608bf
--- /dev/null
+++ b/technic/textures/technic_gold_chest_locked_orange.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_locked_pink.png b/technic/textures/technic_gold_chest_locked_pink.png
new file mode 100644
index 0000000..4648e0e
--- /dev/null
+++ b/technic/textures/technic_gold_chest_locked_pink.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_locked_red.png b/technic/textures/technic_gold_chest_locked_red.png
new file mode 100644
index 0000000..e505ecb
--- /dev/null
+++ b/technic/textures/technic_gold_chest_locked_red.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_locked_violet.png b/technic/textures/technic_gold_chest_locked_violet.png
new file mode 100644
index 0000000..1077099
--- /dev/null
+++ b/technic/textures/technic_gold_chest_locked_violet.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_locked_white.png b/technic/textures/technic_gold_chest_locked_white.png
new file mode 100644
index 0000000..e5a279d
--- /dev/null
+++ b/technic/textures/technic_gold_chest_locked_white.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_locked_yellow.png b/technic/textures/technic_gold_chest_locked_yellow.png
new file mode 100644
index 0000000..7b817f5
--- /dev/null
+++ b/technic/textures/technic_gold_chest_locked_yellow.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_side.png b/technic/textures/technic_gold_chest_side.png
new file mode 100644
index 0000000..9a0de39
--- /dev/null
+++ b/technic/textures/technic_gold_chest_side.png
Binary files differ
diff --git a/technic/textures/technic_gold_chest_top.png b/technic/textures/technic_gold_chest_top.png
new file mode 100644
index 0000000..abfc081
--- /dev/null
+++ b/technic/textures/technic_gold_chest_top.png
Binary files differ
diff --git a/technic/textures/technic_gold_dust.png b/technic/textures/technic_gold_dust.png
new file mode 100644
index 0000000..48c24ae
--- /dev/null
+++ b/technic/textures/technic_gold_dust.png
Binary files differ
diff --git a/technic/textures/technic_granite.png b/technic/textures/technic_granite.png
new file mode 100644
index 0000000..abb1385
--- /dev/null
+++ b/technic/textures/technic_granite.png
Binary files differ
diff --git a/technic/textures/technic_grinder_front.png b/technic/textures/technic_grinder_front.png
new file mode 100644
index 0000000..a28dbc1
--- /dev/null
+++ b/technic/textures/technic_grinder_front.png
Binary files differ
diff --git a/technic/textures/technic_grinder_side.png b/technic/textures/technic_grinder_side.png
new file mode 100644
index 0000000..af562f2
--- /dev/null
+++ b/technic/textures/technic_grinder_side.png
Binary files differ
diff --git a/technic/textures/technic_grinder_top.png b/technic/textures/technic_grinder_top.png
new file mode 100644
index 0000000..b074e13
--- /dev/null
+++ b/technic/textures/technic_grinder_top.png
Binary files differ
diff --git a/technic/textures/technic_iron_chest_front.png b/technic/textures/technic_iron_chest_front.png
new file mode 100644
index 0000000..8c00473
--- /dev/null
+++ b/technic/textures/technic_iron_chest_front.png
Binary files differ
diff --git a/technic/textures/technic_iron_chest_locked.png b/technic/textures/technic_iron_chest_locked.png
new file mode 100644
index 0000000..74df3fd
--- /dev/null
+++ b/technic/textures/technic_iron_chest_locked.png
Binary files differ
diff --git a/technic/textures/technic_iron_chest_side.png b/technic/textures/technic_iron_chest_side.png
new file mode 100644
index 0000000..7233688
--- /dev/null
+++ b/technic/textures/technic_iron_chest_side.png
Binary files differ
diff --git a/technic/textures/technic_iron_chest_top.png b/technic/textures/technic_iron_chest_top.png
new file mode 100644
index 0000000..48d2437
--- /dev/null
+++ b/technic/textures/technic_iron_chest_top.png
Binary files differ
diff --git a/technic/textures/technic_iron_dust.png b/technic/textures/technic_iron_dust.png
new file mode 100644
index 0000000..ad23c62
--- /dev/null
+++ b/technic/textures/technic_iron_dust.png
Binary files differ
diff --git a/technic/textures/technic_laser_beam.png b/technic/textures/technic_laser_beam.png
new file mode 100644
index 0000000..4814a9b
--- /dev/null
+++ b/technic/textures/technic_laser_beam.png
Binary files differ
diff --git a/technic/textures/technic_lava_can.png b/technic/textures/technic_lava_can.png
new file mode 100644
index 0000000..abe1a8c
--- /dev/null
+++ b/technic/textures/technic_lava_can.png
Binary files differ
diff --git a/technic/textures/technic_light.png b/technic/textures/technic_light.png
new file mode 100644
index 0000000..334cb07
--- /dev/null
+++ b/technic/textures/technic_light.png
Binary files differ
diff --git a/technic/textures/technic_lv_cable.png b/technic/textures/technic_lv_cable.png
new file mode 100644
index 0000000..87076c9
--- /dev/null
+++ b/technic/textures/technic_lv_cable.png
Binary files differ
diff --git a/technic/textures/technic_lv_cable_wield.png b/technic/textures/technic_lv_cable_wield.png
new file mode 100644
index 0000000..c4ada04
--- /dev/null
+++ b/technic/textures/technic_lv_cable_wield.png
Binary files differ
diff --git a/technic/textures/technic_machine_bottom.png b/technic/textures/technic_machine_bottom.png
new file mode 100644
index 0000000..48a47b0
--- /dev/null
+++ b/technic/textures/technic_machine_bottom.png
Binary files differ
diff --git a/technic/textures/technic_marble.png b/technic/textures/technic_marble.png
new file mode 100644
index 0000000..846a170
--- /dev/null
+++ b/technic/textures/technic_marble.png
Binary files differ
diff --git a/technic/textures/technic_marble_bricks.png b/technic/textures/technic_marble_bricks.png
new file mode 100644
index 0000000..2ea1e42
--- /dev/null
+++ b/technic/textures/technic_marble_bricks.png
Binary files differ
diff --git a/technic/textures/technic_mineral_chromium.png b/technic/textures/technic_mineral_chromium.png
new file mode 100644
index 0000000..c66f1c5
--- /dev/null
+++ b/technic/textures/technic_mineral_chromium.png
Binary files differ
diff --git a/technic/textures/technic_mineral_diamond.png b/technic/textures/technic_mineral_diamond.png
new file mode 100644
index 0000000..2d91505
--- /dev/null
+++ b/technic/textures/technic_mineral_diamond.png
Binary files differ
diff --git a/technic/textures/technic_mineral_uranium.png b/technic/textures/technic_mineral_uranium.png
new file mode 100644
index 0000000..aad9c07
--- /dev/null
+++ b/technic/textures/technic_mineral_uranium.png
Binary files differ
diff --git a/technic/textures/technic_mineral_zinc.png b/technic/textures/technic_mineral_zinc.png
new file mode 100644
index 0000000..598efeb
--- /dev/null
+++ b/technic/textures/technic_mineral_zinc.png
Binary files differ
diff --git a/technic/textures/technic_mining_drill.png b/technic/textures/technic_mining_drill.png
new file mode 100644
index 0000000..171888d
--- /dev/null
+++ b/technic/textures/technic_mining_drill.png
Binary files differ
diff --git a/technic/textures/technic_mining_laser_mk1.png b/technic/textures/technic_mining_laser_mk1.png
new file mode 100644
index 0000000..acde392
--- /dev/null
+++ b/technic/textures/technic_mining_laser_mk1.png
Binary files differ
diff --git a/technic/textures/technic_mithril_chest_front.png b/technic/textures/technic_mithril_chest_front.png
new file mode 100644
index 0000000..f0e0c23
--- /dev/null
+++ b/technic/textures/technic_mithril_chest_front.png
Binary files differ
diff --git a/technic/textures/technic_mithril_chest_locked.png b/technic/textures/technic_mithril_chest_locked.png
new file mode 100644
index 0000000..2a48533
--- /dev/null
+++ b/technic/textures/technic_mithril_chest_locked.png
Binary files differ
diff --git a/technic/textures/technic_mithril_chest_side.png b/technic/textures/technic_mithril_chest_side.png
new file mode 100644
index 0000000..1c2c3a7
--- /dev/null
+++ b/technic/textures/technic_mithril_chest_side.png
Binary files differ
diff --git a/technic/textures/technic_mithril_chest_top.png b/technic/textures/technic_mithril_chest_top.png
new file mode 100644
index 0000000..e196baf
--- /dev/null
+++ b/technic/textures/technic_mithril_chest_top.png
Binary files differ
diff --git a/technic/textures/technic_mithril_dust.png b/technic/textures/technic_mithril_dust.png
new file mode 100644
index 0000000..adfbe6c
--- /dev/null
+++ b/technic/textures/technic_mithril_dust.png
Binary files differ
diff --git a/technic/textures/technic_motor.png b/technic/textures/technic_motor.png
new file mode 100644
index 0000000..77d4b91
--- /dev/null
+++ b/technic/textures/technic_motor.png
Binary files differ
diff --git a/technic/textures/technic_music_player_bottom.png b/technic/textures/technic_music_player_bottom.png
new file mode 100644
index 0000000..bd8fd55
--- /dev/null
+++ b/technic/textures/technic_music_player_bottom.png
Binary files differ
diff --git a/technic/textures/technic_music_player_side.png b/technic/textures/technic_music_player_side.png
new file mode 100644
index 0000000..6c34fea
--- /dev/null
+++ b/technic/textures/technic_music_player_side.png
Binary files differ
diff --git a/technic/textures/technic_music_player_top.png b/technic/textures/technic_music_player_top.png
new file mode 100644
index 0000000..0d34563
--- /dev/null
+++ b/technic/textures/technic_music_player_top.png
Binary files differ
diff --git a/technic/textures/technic_mv_battery_box_bottom.png b/technic/textures/technic_mv_battery_box_bottom.png
new file mode 100644
index 0000000..a610660
--- /dev/null
+++ b/technic/textures/technic_mv_battery_box_bottom.png
Binary files differ
diff --git a/technic/textures/technic_mv_battery_box_side0.png b/technic/textures/technic_mv_battery_box_side0.png
new file mode 100644
index 0000000..06a4be5
--- /dev/null
+++ b/technic/textures/technic_mv_battery_box_side0.png
Binary files differ
diff --git a/technic/textures/technic_mv_battery_box_top.png b/technic/textures/technic_mv_battery_box_top.png
new file mode 100644
index 0000000..b32100f
--- /dev/null
+++ b/technic/textures/technic_mv_battery_box_top.png
Binary files differ
diff --git a/technic/textures/technic_mv_cable.png b/technic/textures/technic_mv_cable.png
new file mode 100644
index 0000000..2819d2b
--- /dev/null
+++ b/technic/textures/technic_mv_cable.png
Binary files differ
diff --git a/technic/textures/technic_mv_cable_wield.png b/technic/textures/technic_mv_cable_wield.png
new file mode 100644
index 0000000..aca9fd4
--- /dev/null
+++ b/technic/textures/technic_mv_cable_wield.png
Binary files differ
diff --git a/technic/textures/technic_mv_solar_panel_bottom.png b/technic/textures/technic_mv_solar_panel_bottom.png
new file mode 100644
index 0000000..596e79a
--- /dev/null
+++ b/technic/textures/technic_mv_solar_panel_bottom.png
Binary files differ
diff --git a/technic/textures/technic_mv_solar_panel_side.png b/technic/textures/technic_mv_solar_panel_side.png
new file mode 100644
index 0000000..917b9ed
--- /dev/null
+++ b/technic/textures/technic_mv_solar_panel_side.png
Binary files differ
diff --git a/technic/textures/technic_mv_solar_panel_top.png b/technic/textures/technic_mv_solar_panel_top.png
new file mode 100644
index 0000000..cdb7cf7
--- /dev/null
+++ b/technic/textures/technic_mv_solar_panel_top.png
Binary files differ
diff --git a/technic/textures/technic_mv_solarpanel_bottom.png b/technic/textures/technic_mv_solarpanel_bottom.png
new file mode 100644
index 0000000..596e79a
--- /dev/null
+++ b/technic/textures/technic_mv_solarpanel_bottom.png
Binary files differ
diff --git a/technic/textures/technic_mv_solarpanel_side.png b/technic/textures/technic_mv_solarpanel_side.png
new file mode 100644
index 0000000..917b9ed
--- /dev/null
+++ b/technic/textures/technic_mv_solarpanel_side.png
Binary files differ
diff --git a/technic/textures/technic_mv_solarpanel_top.png b/technic/textures/technic_mv_solarpanel_top.png
new file mode 100644
index 0000000..cdb7cf7
--- /dev/null
+++ b/technic/textures/technic_mv_solarpanel_top.png
Binary files differ
diff --git a/technic/textures/technic_mv_transformer.png b/technic/textures/technic_mv_transformer.png
new file mode 100644
index 0000000..7c4688e
--- /dev/null
+++ b/technic/textures/technic_mv_transformer.png
Binary files differ
diff --git a/technic/textures/technic_nodebreaker_back.png b/technic/textures/technic_nodebreaker_back.png
new file mode 100644
index 0000000..0af7422
--- /dev/null
+++ b/technic/textures/technic_nodebreaker_back.png
Binary files differ
diff --git a/technic/textures/technic_nodebreaker_bottom.png b/technic/textures/technic_nodebreaker_bottom.png
new file mode 100644
index 0000000..ff1a2c6
--- /dev/null
+++ b/technic/textures/technic_nodebreaker_bottom.png
Binary files differ
diff --git a/technic/textures/technic_nodebreaker_bottom_off.png b/technic/textures/technic_nodebreaker_bottom_off.png
new file mode 100644
index 0000000..0f456eb
--- /dev/null
+++ b/technic/textures/technic_nodebreaker_bottom_off.png
Binary files differ
diff --git a/technic/textures/technic_nodebreaker_bottom_on.png b/technic/textures/technic_nodebreaker_bottom_on.png
new file mode 100644
index 0000000..6c4811a
--- /dev/null
+++ b/technic/textures/technic_nodebreaker_bottom_on.png
Binary files differ
diff --git a/technic/textures/technic_nodebreaker_front_off.png b/technic/textures/technic_nodebreaker_front_off.png
new file mode 100644
index 0000000..488fd0a
--- /dev/null
+++ b/technic/textures/technic_nodebreaker_front_off.png
Binary files differ
diff --git a/technic/textures/technic_nodebreaker_front_on.png b/technic/textures/technic_nodebreaker_front_on.png
new file mode 100644
index 0000000..4904e8b
--- /dev/null
+++ b/technic/textures/technic_nodebreaker_front_on.png
Binary files differ
diff --git a/technic/textures/technic_nodebreaker_side.png b/technic/textures/technic_nodebreaker_side.png
new file mode 100644
index 0000000..aefd7c8
--- /dev/null
+++ b/technic/textures/technic_nodebreaker_side.png
Binary files differ
diff --git a/technic/textures/technic_nodebreaker_side1.png b/technic/textures/technic_nodebreaker_side1.png
new file mode 100644
index 0000000..8cb8634
--- /dev/null
+++ b/technic/textures/technic_nodebreaker_side1.png
Binary files differ
diff --git a/technic/textures/technic_nodebreaker_side1_off.png b/technic/textures/technic_nodebreaker_side1_off.png
new file mode 100644
index 0000000..857face
--- /dev/null
+++ b/technic/textures/technic_nodebreaker_side1_off.png
Binary files differ
diff --git a/technic/textures/technic_nodebreaker_side1_on.png b/technic/textures/technic_nodebreaker_side1_on.png
new file mode 100644
index 0000000..c756f09
--- /dev/null
+++ b/technic/textures/technic_nodebreaker_side1_on.png
Binary files differ
diff --git a/technic/textures/technic_nodebreaker_side2.png b/technic/textures/technic_nodebreaker_side2.png
new file mode 100644
index 0000000..c2855d0
--- /dev/null
+++ b/technic/textures/technic_nodebreaker_side2.png
Binary files differ
diff --git a/technic/textures/technic_nodebreaker_side2_off.png b/technic/textures/technic_nodebreaker_side2_off.png
new file mode 100644
index 0000000..4c62f98
--- /dev/null
+++ b/technic/textures/technic_nodebreaker_side2_off.png
Binary files differ
diff --git a/technic/textures/technic_nodebreaker_side2_on.png b/technic/textures/technic_nodebreaker_side2_on.png
new file mode 100644
index 0000000..b9e4823
--- /dev/null
+++ b/technic/textures/technic_nodebreaker_side2_on.png
Binary files differ
diff --git a/technic/textures/technic_nodebreaker_top.png b/technic/textures/technic_nodebreaker_top.png
new file mode 100644
index 0000000..941d333
--- /dev/null
+++ b/technic/textures/technic_nodebreaker_top.png
Binary files differ
diff --git a/technic/textures/technic_nodebreaker_top_off.png b/technic/textures/technic_nodebreaker_top_off.png
new file mode 100644
index 0000000..9139afe
--- /dev/null
+++ b/technic/textures/technic_nodebreaker_top_off.png
Binary files differ
diff --git a/technic/textures/technic_nodebreaker_top_on.png b/technic/textures/technic_nodebreaker_top_on.png
new file mode 100644
index 0000000..4b0a661
--- /dev/null
+++ b/technic/textures/technic_nodebreaker_top_on.png
Binary files differ
diff --git a/technic/textures/technic_obsidian.png b/technic/textures/technic_obsidian.png
new file mode 100644
index 0000000..5feb65c
--- /dev/null
+++ b/technic/textures/technic_obsidian.png
Binary files differ
diff --git a/technic/textures/technic_power_meter.png b/technic/textures/technic_power_meter.png
new file mode 100644
index 0000000..f1e5120
--- /dev/null
+++ b/technic/textures/technic_power_meter.png
Binary files differ
diff --git a/technic/textures/technic_power_meter1.png b/technic/textures/technic_power_meter1.png
new file mode 100644
index 0000000..eb6be3b
--- /dev/null
+++ b/technic/textures/technic_power_meter1.png
Binary files differ
diff --git a/technic/textures/technic_power_meter2.png b/technic/textures/technic_power_meter2.png
new file mode 100644
index 0000000..e3a3772
--- /dev/null
+++ b/technic/textures/technic_power_meter2.png
Binary files differ
diff --git a/technic/textures/technic_power_meter3.png b/technic/textures/technic_power_meter3.png
new file mode 100644
index 0000000..6333035
--- /dev/null
+++ b/technic/textures/technic_power_meter3.png
Binary files differ
diff --git a/technic/textures/technic_power_meter4.png b/technic/textures/technic_power_meter4.png
new file mode 100644
index 0000000..6346dbd
--- /dev/null
+++ b/technic/textures/technic_power_meter4.png
Binary files differ
diff --git a/technic/textures/technic_power_meter5.png b/technic/textures/technic_power_meter5.png
new file mode 100644
index 0000000..80f79c6
--- /dev/null
+++ b/technic/textures/technic_power_meter5.png
Binary files differ
diff --git a/technic/textures/technic_power_meter6.png b/technic/textures/technic_power_meter6.png
new file mode 100644
index 0000000..fe91bf5
--- /dev/null
+++ b/technic/textures/technic_power_meter6.png
Binary files differ
diff --git a/technic/textures/technic_power_meter7.png b/technic/textures/technic_power_meter7.png
new file mode 100644
index 0000000..e02dd6d
--- /dev/null
+++ b/technic/textures/technic_power_meter7.png
Binary files differ
diff --git a/technic/textures/technic_power_meter8.png b/technic/textures/technic_power_meter8.png
new file mode 100644
index 0000000..a12064c
--- /dev/null
+++ b/technic/textures/technic_power_meter8.png
Binary files differ
diff --git a/technic/textures/technic_power_meter_bg.png b/technic/textures/technic_power_meter_bg.png
new file mode 100644
index 0000000..9667cda
--- /dev/null
+++ b/technic/textures/technic_power_meter_bg.png
Binary files differ
diff --git a/technic/textures/technic_power_meter_fg.png b/technic/textures/technic_power_meter_fg.png
new file mode 100644
index 0000000..7f2dde8
--- /dev/null
+++ b/technic/textures/technic_power_meter_fg.png
Binary files differ
diff --git a/technic/textures/technic_raw_latex.png b/technic/textures/technic_raw_latex.png
new file mode 100644
index 0000000..49bb11b
--- /dev/null
+++ b/technic/textures/technic_raw_latex.png
Binary files differ
diff --git a/technic/textures/technic_rebar.png b/technic/textures/technic_rebar.png
new file mode 100644
index 0000000..16d1fc5
--- /dev/null
+++ b/technic/textures/technic_rebar.png
Binary files differ
diff --git a/technic/textures/technic_rubber.png b/technic/textures/technic_rubber.png
new file mode 100644
index 0000000..9ed4a9d
--- /dev/null
+++ b/technic/textures/technic_rubber.png
Binary files differ
diff --git a/technic/textures/technic_rubber_leaves.png b/technic/textures/technic_rubber_leaves.png
new file mode 100644
index 0000000..ae013e0
--- /dev/null
+++ b/technic/textures/technic_rubber_leaves.png
Binary files differ
diff --git a/technic/textures/technic_rubber_sapling.png b/technic/textures/technic_rubber_sapling.png
new file mode 100644
index 0000000..e5c9f5d
--- /dev/null
+++ b/technic/textures/technic_rubber_sapling.png
Binary files differ
diff --git a/technic/textures/technic_rubber_tree_empty.png b/technic/textures/technic_rubber_tree_empty.png
new file mode 100644
index 0000000..1792951
--- /dev/null
+++ b/technic/textures/technic_rubber_tree_empty.png
Binary files differ
diff --git a/technic/textures/technic_rubber_tree_full.png b/technic/textures/technic_rubber_tree_full.png
new file mode 100644
index 0000000..08067ef
--- /dev/null
+++ b/technic/textures/technic_rubber_tree_full.png
Binary files differ
diff --git a/technic/textures/technic_screwdriver.png b/technic/textures/technic_screwdriver.png
new file mode 100644
index 0000000..bd2da22
--- /dev/null
+++ b/technic/textures/technic_screwdriver.png
Binary files differ
diff --git a/technic/textures/technic_silicon_wafer.png b/technic/textures/technic_silicon_wafer.png
new file mode 100644
index 0000000..78aef20
--- /dev/null
+++ b/technic/textures/technic_silicon_wafer.png
Binary files differ
diff --git a/technic/textures/technic_silver_chest_front.png b/technic/textures/technic_silver_chest_front.png
new file mode 100644
index 0000000..5ae5831
--- /dev/null
+++ b/technic/textures/technic_silver_chest_front.png
Binary files differ
diff --git a/technic/textures/technic_silver_chest_locked.png b/technic/textures/technic_silver_chest_locked.png
new file mode 100644
index 0000000..7d3b918
--- /dev/null
+++ b/technic/textures/technic_silver_chest_locked.png
Binary files differ
diff --git a/technic/textures/technic_silver_chest_side.png b/technic/textures/technic_silver_chest_side.png
new file mode 100644
index 0000000..4b4ce54
--- /dev/null
+++ b/technic/textures/technic_silver_chest_side.png
Binary files differ
diff --git a/technic/textures/technic_silver_chest_top.png b/technic/textures/technic_silver_chest_top.png
new file mode 100644
index 0000000..79196d6
--- /dev/null
+++ b/technic/textures/technic_silver_chest_top.png
Binary files differ
diff --git a/technic/textures/technic_silver_dust.png b/technic/textures/technic_silver_dust.png
new file mode 100644
index 0000000..19a5754
--- /dev/null
+++ b/technic/textures/technic_silver_dust.png
Binary files differ
diff --git a/technic/textures/technic_solar_panel_bottom.png b/technic/textures/technic_solar_panel_bottom.png
new file mode 100644
index 0000000..9e888e3
--- /dev/null
+++ b/technic/textures/technic_solar_panel_bottom.png
Binary files differ
diff --git a/technic/textures/technic_solar_panel_side.png b/technic/textures/technic_solar_panel_side.png
new file mode 100644
index 0000000..b22447e
--- /dev/null
+++ b/technic/textures/technic_solar_panel_side.png
Binary files differ
diff --git a/technic/textures/technic_solar_panel_top.png b/technic/textures/technic_solar_panel_top.png
new file mode 100644
index 0000000..492764b
--- /dev/null
+++ b/technic/textures/technic_solar_panel_top.png
Binary files differ
diff --git a/technic/textures/technic_sonic_screwdriver.png b/technic/textures/technic_sonic_screwdriver.png
new file mode 100644
index 0000000..9b26b81
--- /dev/null
+++ b/technic/textures/technic_sonic_screwdriver.png
Binary files differ
diff --git a/technic/textures/technic_stainless_steel_dust.png b/technic/textures/technic_stainless_steel_dust.png
new file mode 100644
index 0000000..6398be8
--- /dev/null
+++ b/technic/textures/technic_stainless_steel_dust.png
Binary files differ
diff --git a/technic/textures/technic_stainless_steel_ingot.png b/technic/textures/technic_stainless_steel_ingot.png
new file mode 100644
index 0000000..46fa296
--- /dev/null
+++ b/technic/textures/technic_stainless_steel_ingot.png
Binary files differ
diff --git a/technic/textures/technic_tin_dust.png b/technic/textures/technic_tin_dust.png
new file mode 100644
index 0000000..4e94e00
--- /dev/null
+++ b/technic/textures/technic_tin_dust.png
Binary files differ
diff --git a/technic/textures/technic_tree_tap.png b/technic/textures/technic_tree_tap.png
new file mode 100644
index 0000000..542f30f
--- /dev/null
+++ b/technic/textures/technic_tree_tap.png
Binary files differ
diff --git a/technic/textures/technic_uranium.png b/technic/textures/technic_uranium.png
new file mode 100644
index 0000000..54225f8
--- /dev/null
+++ b/technic/textures/technic_uranium.png
Binary files differ
diff --git a/technic/textures/technic_water_can.png b/technic/textures/technic_water_can.png
new file mode 100644
index 0000000..eec75db
--- /dev/null
+++ b/technic/textures/technic_water_can.png
Binary files differ
diff --git a/technic/textures/technic_water_mill_side.png b/technic/textures/technic_water_mill_side.png
new file mode 100644
index 0000000..f4bdb16
--- /dev/null
+++ b/technic/textures/technic_water_mill_side.png
Binary files differ
diff --git a/technic/textures/technic_water_mill_top.png b/technic/textures/technic_water_mill_top.png
new file mode 100644
index 0000000..601ff15
--- /dev/null
+++ b/technic/textures/technic_water_mill_top.png
Binary files differ
diff --git a/technic/textures/technic_water_mill_top_active.png b/technic/textures/technic_water_mill_top_active.png
new file mode 100644
index 0000000..f02bec6
--- /dev/null
+++ b/technic/textures/technic_water_mill_top_active.png
Binary files differ
diff --git a/technic/textures/technic_workshop_bottom.png b/technic/textures/technic_workshop_bottom.png
new file mode 100644
index 0000000..bd8fd55
--- /dev/null
+++ b/technic/textures/technic_workshop_bottom.png
Binary files differ
diff --git a/technic/textures/technic_workshop_side.png b/technic/textures/technic_workshop_side.png
new file mode 100644
index 0000000..9e3e7a7
--- /dev/null
+++ b/technic/textures/technic_workshop_side.png
Binary files differ
diff --git a/technic/textures/technic_workshop_top.png b/technic/textures/technic_workshop_top.png
new file mode 100644
index 0000000..feae141
--- /dev/null
+++ b/technic/textures/technic_workshop_top.png
Binary files differ
diff --git a/technic/textures/technic_zinc_dust.png b/technic/textures/technic_zinc_dust.png
new file mode 100644
index 0000000..0d2f75a
--- /dev/null
+++ b/technic/textures/technic_zinc_dust.png
Binary files differ
diff --git a/technic/textures/technic_zinc_ingot.png b/technic/textures/technic_zinc_ingot.png
new file mode 100644
index 0000000..096ff9c
--- /dev/null
+++ b/technic/textures/technic_zinc_ingot.png
Binary files differ
diff --git a/technic/textures/technic_zinc_lump.png b/technic/textures/technic_zinc_lump.png
new file mode 100644
index 0000000..d28a6dc
--- /dev/null
+++ b/technic/textures/technic_zinc_lump.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_alloy_furnace_front.png b/technic/textures/technicx32/technic_alloy_furnace_front.png
new file mode 100644
index 0000000..9123fb6
--- /dev/null
+++ b/technic/textures/technicx32/technic_alloy_furnace_front.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_alloy_furnace_front_active.png b/technic/textures/technicx32/technic_alloy_furnace_front_active.png
new file mode 100644
index 0000000..4dda2e6
--- /dev/null
+++ b/technic/textures/technicx32/technic_alloy_furnace_front_active.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_alloy_furnace_side.png b/technic/textures/technicx32/technic_alloy_furnace_side.png
new file mode 100644
index 0000000..b5bd428
--- /dev/null
+++ b/technic/textures/technicx32/technic_alloy_furnace_side.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_alloy_furnace_top.png b/technic/textures/technicx32/technic_alloy_furnace_top.png
new file mode 100644
index 0000000..67ef4b7
--- /dev/null
+++ b/technic/textures/technicx32/technic_alloy_furnace_top.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_battery.png b/technic/textures/technicx32/technic_battery.png
new file mode 100644
index 0000000..ee83b74
--- /dev/null
+++ b/technic/textures/technicx32/technic_battery.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_battery_box_bottom.png b/technic/textures/technicx32/technic_battery_box_bottom.png
new file mode 100644
index 0000000..03c7ccc
--- /dev/null
+++ b/technic/textures/technicx32/technic_battery_box_bottom.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_battery_box_side0.png b/technic/textures/technicx32/technic_battery_box_side0.png
new file mode 100644
index 0000000..2662ac0
--- /dev/null
+++ b/technic/textures/technicx32/technic_battery_box_side0.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_battery_box_top.png b/technic/textures/technicx32/technic_battery_box_top.png
new file mode 100644
index 0000000..4953a32
--- /dev/null
+++ b/technic/textures/technicx32/technic_battery_box_top.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_battery_reload.png b/technic/textures/technicx32/technic_battery_reload.png
new file mode 100644
index 0000000..164b4ac
--- /dev/null
+++ b/technic/textures/technicx32/technic_battery_reload.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_brass_dust.png b/technic/textures/technicx32/technic_brass_dust.png
new file mode 100644
index 0000000..f86167a
--- /dev/null
+++ b/technic/textures/technicx32/technic_brass_dust.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_brass_ingot.png b/technic/textures/technicx32/technic_brass_ingot.png
new file mode 100644
index 0000000..2d8b153
--- /dev/null
+++ b/technic/textures/technicx32/technic_brass_ingot.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_bronze_dust.png b/technic/textures/technicx32/technic_bronze_dust.png
new file mode 100644
index 0000000..0a2401e
--- /dev/null
+++ b/technic/textures/technicx32/technic_bronze_dust.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_chainsaw.png b/technic/textures/technicx32/technic_chainsaw.png
new file mode 100644
index 0000000..b7ceee6
--- /dev/null
+++ b/technic/textures/technicx32/technic_chainsaw.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_chromium_dust.png b/technic/textures/technicx32/technic_chromium_dust.png
new file mode 100644
index 0000000..a33358b
--- /dev/null
+++ b/technic/textures/technicx32/technic_chromium_dust.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_chromium_ingot.png b/technic/textures/technicx32/technic_chromium_ingot.png
new file mode 100644
index 0000000..91d5b20
--- /dev/null
+++ b/technic/textures/technicx32/technic_chromium_ingot.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_chromium_lump.png b/technic/textures/technicx32/technic_chromium_lump.png
new file mode 100644
index 0000000..1588f92
--- /dev/null
+++ b/technic/textures/technicx32/technic_chromium_lump.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_coal_alloy_furnace_bottom.png b/technic/textures/technicx32/technic_coal_alloy_furnace_bottom.png
new file mode 100644
index 0000000..7a5eed7
--- /dev/null
+++ b/technic/textures/technicx32/technic_coal_alloy_furnace_bottom.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_coal_alloy_furnace_front.png b/technic/textures/technicx32/technic_coal_alloy_furnace_front.png
new file mode 100644
index 0000000..b00bef3
--- /dev/null
+++ b/technic/textures/technicx32/technic_coal_alloy_furnace_front.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_coal_alloy_furnace_front_active.png b/technic/textures/technicx32/technic_coal_alloy_furnace_front_active.png
new file mode 100644
index 0000000..b41f619
--- /dev/null
+++ b/technic/textures/technicx32/technic_coal_alloy_furnace_front_active.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_coal_alloy_furnace_side.png b/technic/textures/technicx32/technic_coal_alloy_furnace_side.png
new file mode 100644
index 0000000..3db8daa
--- /dev/null
+++ b/technic/textures/technicx32/technic_coal_alloy_furnace_side.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_coal_alloy_furnace_top.png b/technic/textures/technicx32/technic_coal_alloy_furnace_top.png
new file mode 100644
index 0000000..c648fe8
--- /dev/null
+++ b/technic/textures/technicx32/technic_coal_alloy_furnace_top.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_coal_dust.png b/technic/textures/technicx32/technic_coal_dust.png
new file mode 100644
index 0000000..4a1da0c
--- /dev/null
+++ b/technic/textures/technicx32/technic_coal_dust.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_concrete_block.png b/technic/textures/technicx32/technic_concrete_block.png
new file mode 100644
index 0000000..91364f3
--- /dev/null
+++ b/technic/textures/technicx32/technic_concrete_block.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_back.png b/technic/textures/technicx32/technic_constructor_back.png
new file mode 100644
index 0000000..6baf788
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_back.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_front_off.png b/technic/textures/technicx32/technic_constructor_front_off.png
new file mode 100644
index 0000000..f878e55
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_front_off.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_front_on.png b/technic/textures/technicx32/technic_constructor_front_on.png
new file mode 100644
index 0000000..89189d6
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_front_on.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk1_bottom_off.png b/technic/textures/technicx32/technic_constructor_mk1_bottom_off.png
new file mode 100644
index 0000000..205dcc4
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk1_bottom_off.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk1_bottom_on.png b/technic/textures/technicx32/technic_constructor_mk1_bottom_on.png
new file mode 100644
index 0000000..9896c52
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk1_bottom_on.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk1_side1_off.png b/technic/textures/technicx32/technic_constructor_mk1_side1_off.png
new file mode 100644
index 0000000..e8a01ff
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk1_side1_off.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk1_side1_on.png b/technic/textures/technicx32/technic_constructor_mk1_side1_on.png
new file mode 100644
index 0000000..c897942
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk1_side1_on.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk1_side2_off.png b/technic/textures/technicx32/technic_constructor_mk1_side2_off.png
new file mode 100644
index 0000000..8da65f6
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk1_side2_off.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk1_side2_on.png b/technic/textures/technicx32/technic_constructor_mk1_side2_on.png
new file mode 100644
index 0000000..da8ed34
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk1_side2_on.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk1_top_off.png b/technic/textures/technicx32/technic_constructor_mk1_top_off.png
new file mode 100644
index 0000000..7d8c7e0
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk1_top_off.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk1_top_on.png b/technic/textures/technicx32/technic_constructor_mk1_top_on.png
new file mode 100644
index 0000000..439caf5
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk1_top_on.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk2_bottom_off.png b/technic/textures/technicx32/technic_constructor_mk2_bottom_off.png
new file mode 100644
index 0000000..83c5b07
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk2_bottom_off.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk2_bottom_on.png b/technic/textures/technicx32/technic_constructor_mk2_bottom_on.png
new file mode 100644
index 0000000..9ad76f4
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk2_bottom_on.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk2_side1_off.png b/technic/textures/technicx32/technic_constructor_mk2_side1_off.png
new file mode 100644
index 0000000..584dfe3
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk2_side1_off.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk2_side1_on.png b/technic/textures/technicx32/technic_constructor_mk2_side1_on.png
new file mode 100644
index 0000000..fe02042
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk2_side1_on.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk2_side2_off.png b/technic/textures/technicx32/technic_constructor_mk2_side2_off.png
new file mode 100644
index 0000000..fd9ad74
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk2_side2_off.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk2_side2_on.png b/technic/textures/technicx32/technic_constructor_mk2_side2_on.png
new file mode 100644
index 0000000..f51411a
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk2_side2_on.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk2_top_off.png b/technic/textures/technicx32/technic_constructor_mk2_top_off.png
new file mode 100644
index 0000000..e3e3292
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk2_top_off.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk2_top_on.png b/technic/textures/technicx32/technic_constructor_mk2_top_on.png
new file mode 100644
index 0000000..83043d4
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk2_top_on.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk3_bottom_off.png b/technic/textures/technicx32/technic_constructor_mk3_bottom_off.png
new file mode 100644
index 0000000..5f46154
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk3_bottom_off.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk3_bottom_on.png b/technic/textures/technicx32/technic_constructor_mk3_bottom_on.png
new file mode 100644
index 0000000..f76f29b
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk3_bottom_on.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk3_side1_off.png b/technic/textures/technicx32/technic_constructor_mk3_side1_off.png
new file mode 100644
index 0000000..0ea1fc0
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk3_side1_off.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk3_side1_on.png b/technic/textures/technicx32/technic_constructor_mk3_side1_on.png
new file mode 100644
index 0000000..ba86332
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk3_side1_on.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk3_side2_off.png b/technic/textures/technicx32/technic_constructor_mk3_side2_off.png
new file mode 100644
index 0000000..8e8dce4
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk3_side2_off.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk3_side2_on.png b/technic/textures/technicx32/technic_constructor_mk3_side2_on.png
new file mode 100644
index 0000000..12dff69
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk3_side2_on.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk3_top_off.png b/technic/textures/technicx32/technic_constructor_mk3_top_off.png
new file mode 100644
index 0000000..705f255
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk3_top_off.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_constructor_mk3_top_on.png b/technic/textures/technicx32/technic_constructor_mk3_top_on.png
new file mode 100644
index 0000000..cef077e
--- /dev/null
+++ b/technic/textures/technicx32/technic_constructor_mk3_top_on.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_copper_chest_front.png b/technic/textures/technicx32/technic_copper_chest_front.png
new file mode 100644
index 0000000..1769435
--- /dev/null
+++ b/technic/textures/technicx32/technic_copper_chest_front.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_copper_chest_locked.png b/technic/textures/technicx32/technic_copper_chest_locked.png
new file mode 100644
index 0000000..6d059e9
--- /dev/null
+++ b/technic/textures/technicx32/technic_copper_chest_locked.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_copper_chest_side.png b/technic/textures/technicx32/technic_copper_chest_side.png
new file mode 100644
index 0000000..2c7943f
--- /dev/null
+++ b/technic/textures/technicx32/technic_copper_chest_side.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_copper_chest_top.png b/technic/textures/technicx32/technic_copper_chest_top.png
new file mode 100644
index 0000000..2ab8104
--- /dev/null
+++ b/technic/textures/technicx32/technic_copper_chest_top.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_copper_coil.png b/technic/textures/technicx32/technic_copper_coil.png
new file mode 100644
index 0000000..db6db1a
--- /dev/null
+++ b/technic/textures/technicx32/technic_copper_coil.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_copper_dust.png b/technic/textures/technicx32/technic_copper_dust.png
new file mode 100644
index 0000000..68678ed
--- /dev/null
+++ b/technic/textures/technicx32/technic_copper_dust.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_deployer_back.png b/technic/textures/technicx32/technic_deployer_back.png
new file mode 100644
index 0000000..0bc8df9
--- /dev/null
+++ b/technic/textures/technicx32/technic_deployer_back.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_deployer_bottom.png b/technic/textures/technicx32/technic_deployer_bottom.png
new file mode 100644
index 0000000..ff1a2c6
--- /dev/null
+++ b/technic/textures/technicx32/technic_deployer_bottom.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_deployer_front_off.png b/technic/textures/technicx32/technic_deployer_front_off.png
new file mode 100644
index 0000000..d0f6f55
--- /dev/null
+++ b/technic/textures/technicx32/technic_deployer_front_off.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_deployer_front_on.png b/technic/textures/technicx32/technic_deployer_front_on.png
new file mode 100644
index 0000000..368ce32
--- /dev/null
+++ b/technic/textures/technicx32/technic_deployer_front_on.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_deployer_side.png b/technic/textures/technicx32/technic_deployer_side.png
new file mode 100644
index 0000000..aefd7c8
--- /dev/null
+++ b/technic/textures/technicx32/technic_deployer_side.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_deployer_side1.png b/technic/textures/technicx32/technic_deployer_side1.png
new file mode 100644
index 0000000..8cb8634
--- /dev/null
+++ b/technic/textures/technicx32/technic_deployer_side1.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_deployer_side2.png b/technic/textures/technicx32/technic_deployer_side2.png
new file mode 100644
index 0000000..c2855d0
--- /dev/null
+++ b/technic/textures/technicx32/technic_deployer_side2.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_deployer_top.png b/technic/textures/technicx32/technic_deployer_top.png
new file mode 100644
index 0000000..941d333
--- /dev/null
+++ b/technic/textures/technicx32/technic_deployer_top.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_diamond.png b/technic/textures/technicx32/technic_diamond.png
new file mode 100644
index 0000000..23e6126
--- /dev/null
+++ b/technic/textures/technicx32/technic_diamond.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_diamond_block.png b/technic/textures/technicx32/technic_diamond_block.png
new file mode 100644
index 0000000..347ed78
--- /dev/null
+++ b/technic/textures/technicx32/technic_diamond_block.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_diamond_block_blue.png b/technic/textures/technicx32/technic_diamond_block_blue.png
new file mode 100644
index 0000000..d89bd6e
--- /dev/null
+++ b/technic/textures/technicx32/technic_diamond_block_blue.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_diamond_block_green.png b/technic/textures/technicx32/technic_diamond_block_green.png
new file mode 100644
index 0000000..996b254
--- /dev/null
+++ b/technic/textures/technicx32/technic_diamond_block_green.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_diamond_block_red.png b/technic/textures/technicx32/technic_diamond_block_red.png
new file mode 100644
index 0000000..52fd893
--- /dev/null
+++ b/technic/textures/technicx32/technic_diamond_block_red.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_diamond_drill_head.png b/technic/textures/technicx32/technic_diamond_drill_head.png
new file mode 100644
index 0000000..e3d31e8
--- /dev/null
+++ b/technic/textures/technicx32/technic_diamond_drill_head.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_doped_silicon_wafer.png b/technic/textures/technicx32/technic_doped_silicon_wafer.png
new file mode 100644
index 0000000..6ff06a6
--- /dev/null
+++ b/technic/textures/technicx32/technic_doped_silicon_wafer.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_electric_furnace_bottom.png b/technic/textures/technicx32/technic_electric_furnace_bottom.png
new file mode 100644
index 0000000..d16ac47
--- /dev/null
+++ b/technic/textures/technicx32/technic_electric_furnace_bottom.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_electric_furnace_front.png b/technic/textures/technicx32/technic_electric_furnace_front.png
new file mode 100644
index 0000000..dfee663
--- /dev/null
+++ b/technic/textures/technicx32/technic_electric_furnace_front.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_electric_furnace_front_active.png b/technic/textures/technicx32/technic_electric_furnace_front_active.png
new file mode 100644
index 0000000..038eec4
--- /dev/null
+++ b/technic/textures/technicx32/technic_electric_furnace_front_active.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_electric_furnace_side.png b/technic/textures/technicx32/technic_electric_furnace_side.png
new file mode 100644
index 0000000..cf345e7
--- /dev/null
+++ b/technic/textures/technicx32/technic_electric_furnace_side.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_electric_furnace_top.png b/technic/textures/technicx32/technic_electric_furnace_top.png
new file mode 100644
index 0000000..d3309ec
--- /dev/null
+++ b/technic/textures/technicx32/technic_electric_furnace_top.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_fine_copper_wire.png b/technic/textures/technicx32/technic_fine_copper_wire.png
new file mode 100644
index 0000000..36e2ed6
--- /dev/null
+++ b/technic/textures/technicx32/technic_fine_copper_wire.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_flashlight.png b/technic/textures/technicx32/technic_flashlight.png
new file mode 100644
index 0000000..01afdbb
--- /dev/null
+++ b/technic/textures/technicx32/technic_flashlight.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_generator_front.png b/technic/textures/technicx32/technic_generator_front.png
new file mode 100644
index 0000000..2d64844
--- /dev/null
+++ b/technic/textures/technicx32/technic_generator_front.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_generator_front_active.png b/technic/textures/technicx32/technic_generator_front_active.png
new file mode 100644
index 0000000..4e57ca0
--- /dev/null
+++ b/technic/textures/technicx32/technic_generator_front_active.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_generator_side.png b/technic/textures/technicx32/technic_generator_side.png
new file mode 100644
index 0000000..5cbcbef
--- /dev/null
+++ b/technic/textures/technicx32/technic_generator_side.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_generator_top.png b/technic/textures/technicx32/technic_generator_top.png
new file mode 100644
index 0000000..e2f3db3
--- /dev/null
+++ b/technic/textures/technicx32/technic_generator_top.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_geothermal_side.png b/technic/textures/technicx32/technic_geothermal_side.png
new file mode 100644
index 0000000..90fb430
--- /dev/null
+++ b/technic/textures/technicx32/technic_geothermal_side.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_geothermal_top.png b/technic/textures/technicx32/technic_geothermal_top.png
new file mode 100644
index 0000000..601ff15
--- /dev/null
+++ b/technic/textures/technicx32/technic_geothermal_top.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_geothermal_top_active.png b/technic/textures/technicx32/technic_geothermal_top_active.png
new file mode 100644
index 0000000..f02bec6
--- /dev/null
+++ b/technic/textures/technicx32/technic_geothermal_top_active.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_front.png b/technic/textures/technicx32/technic_gold_chest_front.png
new file mode 100644
index 0000000..9bc9615
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_front.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_front_black.png b/technic/textures/technicx32/technic_gold_chest_front_black.png
new file mode 100644
index 0000000..6d0fe5e
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_front_black.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_front_blue.png b/technic/textures/technicx32/technic_gold_chest_front_blue.png
new file mode 100644
index 0000000..7efe651
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_front_blue.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_front_brown.png b/technic/textures/technicx32/technic_gold_chest_front_brown.png
new file mode 100644
index 0000000..4f4f34e
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_front_brown.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_front_cyan.png b/technic/textures/technicx32/technic_gold_chest_front_cyan.png
new file mode 100644
index 0000000..e33d76d
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_front_cyan.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_front_dark_green.png b/technic/textures/technicx32/technic_gold_chest_front_dark_green.png
new file mode 100644
index 0000000..3088bbf
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_front_dark_green.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_front_dark_grey.png b/technic/textures/technicx32/technic_gold_chest_front_dark_grey.png
new file mode 100644
index 0000000..0aa03b4
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_front_dark_grey.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_front_green.png b/technic/textures/technicx32/technic_gold_chest_front_green.png
new file mode 100644
index 0000000..30da993
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_front_green.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_front_grey.png b/technic/textures/technicx32/technic_gold_chest_front_grey.png
new file mode 100644
index 0000000..eae7e69
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_front_grey.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_front_magenta.png b/technic/textures/technicx32/technic_gold_chest_front_magenta.png
new file mode 100644
index 0000000..6daed3b
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_front_magenta.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_front_orange.png b/technic/textures/technicx32/technic_gold_chest_front_orange.png
new file mode 100644
index 0000000..085c102
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_front_orange.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_front_pink.png b/technic/textures/technicx32/technic_gold_chest_front_pink.png
new file mode 100644
index 0000000..eada4da
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_front_pink.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_front_red.png b/technic/textures/technicx32/technic_gold_chest_front_red.png
new file mode 100644
index 0000000..b67da7b
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_front_red.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_front_violet.png b/technic/textures/technicx32/technic_gold_chest_front_violet.png
new file mode 100644
index 0000000..b62011c
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_front_violet.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_front_white.png b/technic/textures/technicx32/technic_gold_chest_front_white.png
new file mode 100644
index 0000000..76b5ebf
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_front_white.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_front_yellow.png b/technic/textures/technicx32/technic_gold_chest_front_yellow.png
new file mode 100644
index 0000000..b0ab9f4
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_front_yellow.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_locked.png b/technic/textures/technicx32/technic_gold_chest_locked.png
new file mode 100644
index 0000000..91a8b73
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_locked.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_locked_black.png b/technic/textures/technicx32/technic_gold_chest_locked_black.png
new file mode 100644
index 0000000..5a5a568
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_locked_black.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_locked_blue.png b/technic/textures/technicx32/technic_gold_chest_locked_blue.png
new file mode 100644
index 0000000..f369ebd
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_locked_blue.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_locked_brown.png b/technic/textures/technicx32/technic_gold_chest_locked_brown.png
new file mode 100644
index 0000000..a44a273
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_locked_brown.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_locked_cyan.png b/technic/textures/technicx32/technic_gold_chest_locked_cyan.png
new file mode 100644
index 0000000..f3ce7b6
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_locked_cyan.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_locked_dark_green.png b/technic/textures/technicx32/technic_gold_chest_locked_dark_green.png
new file mode 100644
index 0000000..084dae5
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_locked_dark_green.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_locked_dark_grey.png b/technic/textures/technicx32/technic_gold_chest_locked_dark_grey.png
new file mode 100644
index 0000000..629e33c
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_locked_dark_grey.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_locked_green.png b/technic/textures/technicx32/technic_gold_chest_locked_green.png
new file mode 100644
index 0000000..9ea1818
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_locked_green.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_locked_grey.png b/technic/textures/technicx32/technic_gold_chest_locked_grey.png
new file mode 100644
index 0000000..c936d7c
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_locked_grey.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_locked_magenta.png b/technic/textures/technicx32/technic_gold_chest_locked_magenta.png
new file mode 100644
index 0000000..4c97fa8
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_locked_magenta.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_locked_orange.png b/technic/textures/technicx32/technic_gold_chest_locked_orange.png
new file mode 100644
index 0000000..f6d5e90
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_locked_orange.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_locked_pink.png b/technic/textures/technicx32/technic_gold_chest_locked_pink.png
new file mode 100644
index 0000000..4248c21
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_locked_pink.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_locked_red.png b/technic/textures/technicx32/technic_gold_chest_locked_red.png
new file mode 100644
index 0000000..4bfe5d4
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_locked_red.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_locked_violet.png b/technic/textures/technicx32/technic_gold_chest_locked_violet.png
new file mode 100644
index 0000000..c9abe73
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_locked_violet.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_locked_white.png b/technic/textures/technicx32/technic_gold_chest_locked_white.png
new file mode 100644
index 0000000..810abb9
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_locked_white.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_locked_yellow.png b/technic/textures/technicx32/technic_gold_chest_locked_yellow.png
new file mode 100644
index 0000000..2856165
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_locked_yellow.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_side.png b/technic/textures/technicx32/technic_gold_chest_side.png
new file mode 100644
index 0000000..5d5ad0f
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_side.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_chest_top.png b/technic/textures/technicx32/technic_gold_chest_top.png
new file mode 100644
index 0000000..f9c8fec
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_chest_top.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_gold_dust.png b/technic/textures/technicx32/technic_gold_dust.png
new file mode 100644
index 0000000..e545bb6
--- /dev/null
+++ b/technic/textures/technicx32/technic_gold_dust.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_granite.png b/technic/textures/technicx32/technic_granite.png
new file mode 100644
index 0000000..abb1385
--- /dev/null
+++ b/technic/textures/technicx32/technic_granite.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_grinder_front.png b/technic/textures/technicx32/technic_grinder_front.png
new file mode 100644
index 0000000..a28dbc1
--- /dev/null
+++ b/technic/textures/technicx32/technic_grinder_front.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_grinder_side.png b/technic/textures/technicx32/technic_grinder_side.png
new file mode 100644
index 0000000..af562f2
--- /dev/null
+++ b/technic/textures/technicx32/technic_grinder_side.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_grinder_top.png b/technic/textures/technicx32/technic_grinder_top.png
new file mode 100644
index 0000000..b074e13
--- /dev/null
+++ b/technic/textures/technicx32/technic_grinder_top.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_iron_chest_front.png b/technic/textures/technicx32/technic_iron_chest_front.png
new file mode 100644
index 0000000..79d5b49
--- /dev/null
+++ b/technic/textures/technicx32/technic_iron_chest_front.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_iron_chest_locked.png b/technic/textures/technicx32/technic_iron_chest_locked.png
new file mode 100644
index 0000000..6229487
--- /dev/null
+++ b/technic/textures/technicx32/technic_iron_chest_locked.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_iron_chest_side.png b/technic/textures/technicx32/technic_iron_chest_side.png
new file mode 100644
index 0000000..e12daa5
--- /dev/null
+++ b/technic/textures/technicx32/technic_iron_chest_side.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_iron_chest_top.png b/technic/textures/technicx32/technic_iron_chest_top.png
new file mode 100644
index 0000000..da1ab7b
--- /dev/null
+++ b/technic/textures/technicx32/technic_iron_chest_top.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_iron_dust.png b/technic/textures/technicx32/technic_iron_dust.png
new file mode 100644
index 0000000..aaecd2b
--- /dev/null
+++ b/technic/textures/technicx32/technic_iron_dust.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_laser_beam.png b/technic/textures/technicx32/technic_laser_beam.png
new file mode 100644
index 0000000..4814a9b
--- /dev/null
+++ b/technic/textures/technicx32/technic_laser_beam.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_lava_can.png b/technic/textures/technicx32/technic_lava_can.png
new file mode 100644
index 0000000..80d15a6
--- /dev/null
+++ b/technic/textures/technicx32/technic_lava_can.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_light.png b/technic/textures/technicx32/technic_light.png
new file mode 100644
index 0000000..334cb07
--- /dev/null
+++ b/technic/textures/technicx32/technic_light.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_lv_cable.png b/technic/textures/technicx32/technic_lv_cable.png
new file mode 100644
index 0000000..87076c9
--- /dev/null
+++ b/technic/textures/technicx32/technic_lv_cable.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_lv_cable_wield.png b/technic/textures/technicx32/technic_lv_cable_wield.png
new file mode 100644
index 0000000..c4ada04
--- /dev/null
+++ b/technic/textures/technicx32/technic_lv_cable_wield.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_machine_bottom.png b/technic/textures/technicx32/technic_machine_bottom.png
new file mode 100644
index 0000000..48a47b0
--- /dev/null
+++ b/technic/textures/technicx32/technic_machine_bottom.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_marble.png b/technic/textures/technicx32/technic_marble.png
new file mode 100644
index 0000000..846a170
--- /dev/null
+++ b/technic/textures/technicx32/technic_marble.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_marble_bricks.png b/technic/textures/technicx32/technic_marble_bricks.png
new file mode 100644
index 0000000..2ea1e42
--- /dev/null
+++ b/technic/textures/technicx32/technic_marble_bricks.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_mineral_chromium.png b/technic/textures/technicx32/technic_mineral_chromium.png
new file mode 100644
index 0000000..c66f1c5
--- /dev/null
+++ b/technic/textures/technicx32/technic_mineral_chromium.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_mineral_diamond.png b/technic/textures/technicx32/technic_mineral_diamond.png
new file mode 100644
index 0000000..2d91505
--- /dev/null
+++ b/technic/textures/technicx32/technic_mineral_diamond.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_mineral_uranium.png b/technic/textures/technicx32/technic_mineral_uranium.png
new file mode 100644
index 0000000..aad9c07
--- /dev/null
+++ b/technic/textures/technicx32/technic_mineral_uranium.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_mineral_zinc.png b/technic/textures/technicx32/technic_mineral_zinc.png
new file mode 100644
index 0000000..598efeb
--- /dev/null
+++ b/technic/textures/technicx32/technic_mineral_zinc.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_mining_drill.png b/technic/textures/technicx32/technic_mining_drill.png
new file mode 100644
index 0000000..171888d
--- /dev/null
+++ b/technic/textures/technicx32/technic_mining_drill.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_mining_laser_mk1.png b/technic/textures/technicx32/technic_mining_laser_mk1.png
new file mode 100644
index 0000000..acde392
--- /dev/null
+++ b/technic/textures/technicx32/technic_mining_laser_mk1.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_mithril_chest_front.png b/technic/textures/technicx32/technic_mithril_chest_front.png
new file mode 100644
index 0000000..9f7ca7e
--- /dev/null
+++ b/technic/textures/technicx32/technic_mithril_chest_front.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_mithril_chest_locked.png b/technic/textures/technicx32/technic_mithril_chest_locked.png
new file mode 100644
index 0000000..abff384
--- /dev/null
+++ b/technic/textures/technicx32/technic_mithril_chest_locked.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_mithril_chest_side.png b/technic/textures/technicx32/technic_mithril_chest_side.png
new file mode 100644
index 0000000..0763511
--- /dev/null
+++ b/technic/textures/technicx32/technic_mithril_chest_side.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_mithril_chest_top.png b/technic/textures/technicx32/technic_mithril_chest_top.png
new file mode 100644
index 0000000..2429576
--- /dev/null
+++ b/technic/textures/technicx32/technic_mithril_chest_top.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_mithril_dust.png b/technic/textures/technicx32/technic_mithril_dust.png
new file mode 100644
index 0000000..988e449
--- /dev/null
+++ b/technic/textures/technicx32/technic_mithril_dust.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_motor.png b/technic/textures/technicx32/technic_motor.png
new file mode 100644
index 0000000..77d4b91
--- /dev/null
+++ b/technic/textures/technicx32/technic_motor.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_music_player_bottom.png b/technic/textures/technicx32/technic_music_player_bottom.png
new file mode 100644
index 0000000..bd8fd55
--- /dev/null
+++ b/technic/textures/technicx32/technic_music_player_bottom.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_music_player_side.png b/technic/textures/technicx32/technic_music_player_side.png
new file mode 100644
index 0000000..6c34fea
--- /dev/null
+++ b/technic/textures/technicx32/technic_music_player_side.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_music_player_top.png b/technic/textures/technicx32/technic_music_player_top.png
new file mode 100644
index 0000000..0d34563
--- /dev/null
+++ b/technic/textures/technicx32/technic_music_player_top.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_mv_battery_box_bottom.png b/technic/textures/technicx32/technic_mv_battery_box_bottom.png
new file mode 100644
index 0000000..2a9b292
--- /dev/null
+++ b/technic/textures/technicx32/technic_mv_battery_box_bottom.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_mv_battery_box_side0.png b/technic/textures/technicx32/technic_mv_battery_box_side0.png
new file mode 100644
index 0000000..39d8986
--- /dev/null
+++ b/technic/textures/technicx32/technic_mv_battery_box_side0.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_mv_battery_box_top.png b/technic/textures/technicx32/technic_mv_battery_box_top.png
new file mode 100644
index 0000000..f7f1ea9
--- /dev/null
+++ b/technic/textures/technicx32/technic_mv_battery_box_top.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_mv_cable.png b/technic/textures/technicx32/technic_mv_cable.png
new file mode 100644
index 0000000..2819d2b
--- /dev/null
+++ b/technic/textures/technicx32/technic_mv_cable.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_mv_cable_wield.png b/technic/textures/technicx32/technic_mv_cable_wield.png
new file mode 100644
index 0000000..aca9fd4
--- /dev/null
+++ b/technic/textures/technicx32/technic_mv_cable_wield.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_mv_solar_panel_bottom.png b/technic/textures/technicx32/technic_mv_solar_panel_bottom.png
new file mode 100644
index 0000000..94c8222
--- /dev/null
+++ b/technic/textures/technicx32/technic_mv_solar_panel_bottom.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_mv_solar_panel_side.png b/technic/textures/technicx32/technic_mv_solar_panel_side.png
new file mode 100644
index 0000000..d39d3d8
--- /dev/null
+++ b/technic/textures/technicx32/technic_mv_solar_panel_side.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_mv_solar_panel_top.png b/technic/textures/technicx32/technic_mv_solar_panel_top.png
new file mode 100644
index 0000000..3d8c7ab
--- /dev/null
+++ b/technic/textures/technicx32/technic_mv_solar_panel_top.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_mv_transformer.png b/technic/textures/technicx32/technic_mv_transformer.png
new file mode 100644
index 0000000..7c4688e
--- /dev/null
+++ b/technic/textures/technicx32/technic_mv_transformer.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_nodebreaker_back.png b/technic/textures/technicx32/technic_nodebreaker_back.png
new file mode 100644
index 0000000..b669ef6
--- /dev/null
+++ b/technic/textures/technicx32/technic_nodebreaker_back.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_nodebreaker_bottom.png b/technic/textures/technicx32/technic_nodebreaker_bottom.png
new file mode 100644
index 0000000..ff1a2c6
--- /dev/null
+++ b/technic/textures/technicx32/technic_nodebreaker_bottom.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_nodebreaker_bottom_off.png b/technic/textures/technicx32/technic_nodebreaker_bottom_off.png
new file mode 100644
index 0000000..410617a
--- /dev/null
+++ b/technic/textures/technicx32/technic_nodebreaker_bottom_off.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_nodebreaker_bottom_on.png b/technic/textures/technicx32/technic_nodebreaker_bottom_on.png
new file mode 100644
index 0000000..d6da4d8
--- /dev/null
+++ b/technic/textures/technicx32/technic_nodebreaker_bottom_on.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_nodebreaker_front_off.png b/technic/textures/technicx32/technic_nodebreaker_front_off.png
new file mode 100644
index 0000000..5a25b4c
--- /dev/null
+++ b/technic/textures/technicx32/technic_nodebreaker_front_off.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_nodebreaker_front_on.png b/technic/textures/technicx32/technic_nodebreaker_front_on.png
new file mode 100644
index 0000000..97d22c3
--- /dev/null
+++ b/technic/textures/technicx32/technic_nodebreaker_front_on.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_nodebreaker_side.png b/technic/textures/technicx32/technic_nodebreaker_side.png
new file mode 100644
index 0000000..aefd7c8
--- /dev/null
+++ b/technic/textures/technicx32/technic_nodebreaker_side.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_nodebreaker_side1.png b/technic/textures/technicx32/technic_nodebreaker_side1.png
new file mode 100644
index 0000000..8cb8634
--- /dev/null
+++ b/technic/textures/technicx32/technic_nodebreaker_side1.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_nodebreaker_side1_off.png b/technic/textures/technicx32/technic_nodebreaker_side1_off.png
new file mode 100644
index 0000000..5e36d3a
--- /dev/null
+++ b/technic/textures/technicx32/technic_nodebreaker_side1_off.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_nodebreaker_side1_on.png b/technic/textures/technicx32/technic_nodebreaker_side1_on.png
new file mode 100644
index 0000000..c76ccff
--- /dev/null
+++ b/technic/textures/technicx32/technic_nodebreaker_side1_on.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_nodebreaker_side2.png b/technic/textures/technicx32/technic_nodebreaker_side2.png
new file mode 100644
index 0000000..c2855d0
--- /dev/null
+++ b/technic/textures/technicx32/technic_nodebreaker_side2.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_nodebreaker_side2_off.png b/technic/textures/technicx32/technic_nodebreaker_side2_off.png
new file mode 100644
index 0000000..622ff7c
--- /dev/null
+++ b/technic/textures/technicx32/technic_nodebreaker_side2_off.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_nodebreaker_side2_on.png b/technic/textures/technicx32/technic_nodebreaker_side2_on.png
new file mode 100644
index 0000000..c54e467
--- /dev/null
+++ b/technic/textures/technicx32/technic_nodebreaker_side2_on.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_nodebreaker_top.png b/technic/textures/technicx32/technic_nodebreaker_top.png
new file mode 100644
index 0000000..941d333
--- /dev/null
+++ b/technic/textures/technicx32/technic_nodebreaker_top.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_nodebreaker_top_off.png b/technic/textures/technicx32/technic_nodebreaker_top_off.png
new file mode 100644
index 0000000..1f9b361
--- /dev/null
+++ b/technic/textures/technicx32/technic_nodebreaker_top_off.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_nodebreaker_top_on.png b/technic/textures/technicx32/technic_nodebreaker_top_on.png
new file mode 100644
index 0000000..d02ed10
--- /dev/null
+++ b/technic/textures/technicx32/technic_nodebreaker_top_on.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_power_meter.png b/technic/textures/technicx32/technic_power_meter.png
new file mode 100644
index 0000000..f1e5120
--- /dev/null
+++ b/technic/textures/technicx32/technic_power_meter.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_power_meter1.png b/technic/textures/technicx32/technic_power_meter1.png
new file mode 100644
index 0000000..0542c7b
--- /dev/null
+++ b/technic/textures/technicx32/technic_power_meter1.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_power_meter2.png b/technic/textures/technicx32/technic_power_meter2.png
new file mode 100644
index 0000000..bf5703c
--- /dev/null
+++ b/technic/textures/technicx32/technic_power_meter2.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_power_meter3.png b/technic/textures/technicx32/technic_power_meter3.png
new file mode 100644
index 0000000..4204815
--- /dev/null
+++ b/technic/textures/technicx32/technic_power_meter3.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_power_meter4.png b/technic/textures/technicx32/technic_power_meter4.png
new file mode 100644
index 0000000..82a0148
--- /dev/null
+++ b/technic/textures/technicx32/technic_power_meter4.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_power_meter5.png b/technic/textures/technicx32/technic_power_meter5.png
new file mode 100644
index 0000000..af783ca
--- /dev/null
+++ b/technic/textures/technicx32/technic_power_meter5.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_power_meter6.png b/technic/textures/technicx32/technic_power_meter6.png
new file mode 100644
index 0000000..44feff4
--- /dev/null
+++ b/technic/textures/technicx32/technic_power_meter6.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_power_meter7.png b/technic/textures/technicx32/technic_power_meter7.png
new file mode 100644
index 0000000..554baa2
--- /dev/null
+++ b/technic/textures/technicx32/technic_power_meter7.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_power_meter8.png b/technic/textures/technicx32/technic_power_meter8.png
new file mode 100644
index 0000000..8c4f4a8
--- /dev/null
+++ b/technic/textures/technicx32/technic_power_meter8.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_power_meter_bg.png b/technic/textures/technicx32/technic_power_meter_bg.png
new file mode 100644
index 0000000..9667cda
--- /dev/null
+++ b/technic/textures/technicx32/technic_power_meter_bg.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_power_meter_fg.png b/technic/textures/technicx32/technic_power_meter_fg.png
new file mode 100644
index 0000000..7f2dde8
--- /dev/null
+++ b/technic/textures/technicx32/technic_power_meter_fg.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_raw_latex.png b/technic/textures/technicx32/technic_raw_latex.png
new file mode 100644
index 0000000..7fbbe64
--- /dev/null
+++ b/technic/textures/technicx32/technic_raw_latex.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_rebar.png b/technic/textures/technicx32/technic_rebar.png
new file mode 100644
index 0000000..16d1fc5
--- /dev/null
+++ b/technic/textures/technicx32/technic_rebar.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_rubber.png b/technic/textures/technicx32/technic_rubber.png
new file mode 100644
index 0000000..9ed4a9d
--- /dev/null
+++ b/technic/textures/technicx32/technic_rubber.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_rubber_sapling.png b/technic/textures/technicx32/technic_rubber_sapling.png
new file mode 100644
index 0000000..e5c9f5d
--- /dev/null
+++ b/technic/textures/technicx32/technic_rubber_sapling.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_rubber_tree_empty.png b/technic/textures/technicx32/technic_rubber_tree_empty.png
new file mode 100644
index 0000000..1792951
--- /dev/null
+++ b/technic/textures/technicx32/technic_rubber_tree_empty.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_rubber_tree_full.png b/technic/textures/technicx32/technic_rubber_tree_full.png
new file mode 100644
index 0000000..08067ef
--- /dev/null
+++ b/technic/textures/technicx32/technic_rubber_tree_full.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_screwdriver.png b/technic/textures/technicx32/technic_screwdriver.png
new file mode 100644
index 0000000..bd2da22
--- /dev/null
+++ b/technic/textures/technicx32/technic_screwdriver.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_silicon_wafer.png b/technic/textures/technicx32/technic_silicon_wafer.png
new file mode 100644
index 0000000..78aef20
--- /dev/null
+++ b/technic/textures/technicx32/technic_silicon_wafer.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_silver_chest_front.png b/technic/textures/technicx32/technic_silver_chest_front.png
new file mode 100644
index 0000000..fe5ce2c
--- /dev/null
+++ b/technic/textures/technicx32/technic_silver_chest_front.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_silver_chest_locked.png b/technic/textures/technicx32/technic_silver_chest_locked.png
new file mode 100644
index 0000000..0f8b1f0
--- /dev/null
+++ b/technic/textures/technicx32/technic_silver_chest_locked.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_silver_chest_side.png b/technic/textures/technicx32/technic_silver_chest_side.png
new file mode 100644
index 0000000..3a2ed4a
--- /dev/null
+++ b/technic/textures/technicx32/technic_silver_chest_side.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_silver_chest_top.png b/technic/textures/technicx32/technic_silver_chest_top.png
new file mode 100644
index 0000000..353a11c
--- /dev/null
+++ b/technic/textures/technicx32/technic_silver_chest_top.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_silver_dust.png b/technic/textures/technicx32/technic_silver_dust.png
new file mode 100644
index 0000000..9092c90
--- /dev/null
+++ b/technic/textures/technicx32/technic_silver_dust.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_solar_panel_bottom.png b/technic/textures/technicx32/technic_solar_panel_bottom.png
new file mode 100644
index 0000000..b0ad82f
--- /dev/null
+++ b/technic/textures/technicx32/technic_solar_panel_bottom.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_solar_panel_side.png b/technic/textures/technicx32/technic_solar_panel_side.png
new file mode 100644
index 0000000..b22447e
--- /dev/null
+++ b/technic/textures/technicx32/technic_solar_panel_side.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_solar_panel_top.png b/technic/textures/technicx32/technic_solar_panel_top.png
new file mode 100644
index 0000000..492764b
--- /dev/null
+++ b/technic/textures/technicx32/technic_solar_panel_top.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_sonic_screwdriver.png b/technic/textures/technicx32/technic_sonic_screwdriver.png
new file mode 100644
index 0000000..fb61d96
--- /dev/null
+++ b/technic/textures/technicx32/technic_sonic_screwdriver.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_stainless_steel_dust.png b/technic/textures/technicx32/technic_stainless_steel_dust.png
new file mode 100644
index 0000000..450e2bb
--- /dev/null
+++ b/technic/textures/technicx32/technic_stainless_steel_dust.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_stainless_steel_ingot.png b/technic/textures/technicx32/technic_stainless_steel_ingot.png
new file mode 100644
index 0000000..46fa296
--- /dev/null
+++ b/technic/textures/technicx32/technic_stainless_steel_ingot.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_tin_dust.png b/technic/textures/technicx32/technic_tin_dust.png
new file mode 100644
index 0000000..4e94e00
--- /dev/null
+++ b/technic/textures/technicx32/technic_tin_dust.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_tree_tap.png b/technic/textures/technicx32/technic_tree_tap.png
new file mode 100644
index 0000000..542f30f
--- /dev/null
+++ b/technic/textures/technicx32/technic_tree_tap.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_uranium.png b/technic/textures/technicx32/technic_uranium.png
new file mode 100644
index 0000000..54225f8
--- /dev/null
+++ b/technic/textures/technicx32/technic_uranium.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_water_can.png b/technic/textures/technicx32/technic_water_can.png
new file mode 100644
index 0000000..18e0225
--- /dev/null
+++ b/technic/textures/technicx32/technic_water_can.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_water_mill_side.png b/technic/textures/technicx32/technic_water_mill_side.png
new file mode 100644
index 0000000..f4bdb16
--- /dev/null
+++ b/technic/textures/technicx32/technic_water_mill_side.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_water_mill_top.png b/technic/textures/technicx32/technic_water_mill_top.png
new file mode 100644
index 0000000..601ff15
--- /dev/null
+++ b/technic/textures/technicx32/technic_water_mill_top.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_water_mill_top_active.png b/technic/textures/technicx32/technic_water_mill_top_active.png
new file mode 100644
index 0000000..f02bec6
--- /dev/null
+++ b/technic/textures/technicx32/technic_water_mill_top_active.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_workshop_bottom.png b/technic/textures/technicx32/technic_workshop_bottom.png
new file mode 100644
index 0000000..bd8fd55
--- /dev/null
+++ b/technic/textures/technicx32/technic_workshop_bottom.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_workshop_side.png b/technic/textures/technicx32/technic_workshop_side.png
new file mode 100644
index 0000000..9e3e7a7
--- /dev/null
+++ b/technic/textures/technicx32/technic_workshop_side.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_workshop_top.png b/technic/textures/technicx32/technic_workshop_top.png
new file mode 100644
index 0000000..feae141
--- /dev/null
+++ b/technic/textures/technicx32/technic_workshop_top.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_zinc_dust.png b/technic/textures/technicx32/technic_zinc_dust.png
new file mode 100644
index 0000000..0d2f75a
--- /dev/null
+++ b/technic/textures/technicx32/technic_zinc_dust.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_zinc_ingot.png b/technic/textures/technicx32/technic_zinc_ingot.png
new file mode 100644
index 0000000..096ff9c
--- /dev/null
+++ b/technic/textures/technicx32/technic_zinc_ingot.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_zinc_lump.png b/technic/textures/technicx32/technic_zinc_lump.png
new file mode 100644
index 0000000..d28a6dc
--- /dev/null
+++ b/technic/textures/technicx32/technic_zinc_lump.png
Binary files differ
diff --git a/technic/textures/textures_here.txt b/technic/textures/textures_here.txt
new file mode 100644
index 0000000..3794085
--- /dev/null
+++ b/technic/textures/textures_here.txt
@@ -0,0 +1 @@
+If you haven't modified the texture_path setting, you can copy textures of your texture packs into here. Folders are currently not supported.
diff --git a/technic/tool_workshop.lua b/technic/tool_workshop.lua
new file mode 100644
index 0000000..f47469e
--- /dev/null
+++ b/technic/tool_workshop.lua
@@ -0,0 +1,97 @@
+minetest.register_alias("tool_workshop", "technic:tool_workshop")
+minetest.register_craft({
+	output = 'technic:tool_workshop',
+	recipe = {
+		{'default:wood', 'default:wood', 'default:wood'},
+		{'default:wood', 'technic:diamond', 'default:wood'},
+		{'default:stone', 'moreores:copper_ingot', 'default:stone'},
+	}
+})
+
+minetest.register_craftitem("technic:tool_workshop", {
+	description = "Tool Workshop",
+	stack_max = 99,
+}) 
+
+workshop_formspec =
+	"invsize[8,9;]"..
+	"image[1,1;1,2;technic_power_meter_bg.png]"..
+	"list[current_name;src;3,1;1,1;]"..
+	"label[0,0;Tool Workshop]"..
+	"label[1,3;Power level]"..
+	"list[current_player;main;0,5;8,4;]"
+
+minetest.register_node("technic:tool_workshop", {
+	description = "Tool Workshop",
+	tiles = {"technic_workshop_top.png", "technic_machine_bottom.png", "technic_workshop_side.png",
+		"technic_workshop_side.png", "technic_workshop_side.png", "technic_workshop_side.png"},
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+	sounds = default.node_sound_wood_defaults(),
+	technic_power_machine=1,
+	internal_EU_buffer=0;
+	internal_EU_buffer_size=2000;
+
+	on_construct = function(pos)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("infotext", "Tool Workshop")
+		meta:set_float("technic_power_machine", 1)
+		meta:set_float("internal_EU_buffer", 1)
+		meta:set_float("internal_EU_buffer_size", 2000)
+		meta:set_string("formspec", workshop_formspec)
+		local inv = meta:get_inventory()
+		inv:set_size("src", 1)
+		end,	
+	can_dig = function(pos,player)
+		local meta = minetest.env:get_meta(pos);
+		local inv = meta:get_inventory()
+		if not inv:is_empty("src") then
+			return false
+		end
+		return true
+	end,
+})
+
+minetest.register_abm({
+	nodenames = {"technic:tool_workshop"},
+	interval = 1,
+	chance = 1,
+	action = function(pos, node, active_object_count, active_object_count_wider)
+	local meta = minetest.env:get_meta(pos)
+	local charge= meta:get_float("internal_EU_buffer")
+	local max_charge= meta:get_float("internal_EU_buffer_size")
+	local load_step=2000
+	local load_cost=200
+		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:water_can" or src_item["name"]=="technic:lava_can") then
+				load_step=0
+				load_cost=0
+				end
+			local load1=tonumber((src_item["wear"])) 
+			if charge>load_cost then
+				if load1>1 then 
+					if load1-load_step<0 then load_step=load1 load1=1
+					else load1=load1-load_step end
+					charge=charge-load_cost
+					src_item["wear"]=tostring(load1)
+					inv:set_stack("src", 1, src_item)
+				end
+			end
+		end
+	
+	meta:set_float("internal_EU_buffer",charge)
+	
+	
+	local load = math.floor((charge/max_charge)*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;]"..
+				"label[0,0;Tool Workshop]"..
+				"label[1,3;Power level]"..
+				"list[current_player;main;0,5;8,4;]")
+	end
+}) 
diff --git a/technic/tree_tap.lua b/technic/tree_tap.lua
new file mode 100644
index 0000000..107faed
--- /dev/null
+++ b/technic/tree_tap.lua
@@ -0,0 +1,49 @@
+    minetest.register_tool("technic:treetap", {
+            description = "Tree Tap",
+            inventory_image = "technic_tree_tap.png",
+            on_use = function(itemstack,user,pointed_thing)
+                    if pointed_thing.type~="node" then return end
+                    if user:get_inventory():room_for_item("main",ItemStack("technic:raw_latex")) then
+                            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" 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()
+                                    local item_wear=tonumber((item["wear"]))
+                                    item_wear=item_wear+819
+                                    if item_wear>65535 then itemstack:clear() return itemstack end
+                                    item["wear"]=tostring(item_wear)
+                                    itemstack:replace(item)
+                                    return itemstack
+                                    else
+                                    return itemstack
+                                    end
+                           else return end
+                    end,
+    })
+     
+    minetest.register_craft({
+            output = "technic:treetap",
+            recipe = {
+                    {"pipeworks:tube", "default:wood", "default:stick"},
+                    {"", "default:stick", "default:stick"}
+            },
+    })
+     
+    minetest.register_craftitem("technic:raw_latex", {
+            description = "Raw Latex",
+            inventory_image = "technic_raw_latex.png",
+    })
+     
+    minetest.register_craft({
+            type = "cooking",
+            output = "technic:rubber",
+            recipe = "technic:raw_latex",
+    })
+     
+    minetest.register_craftitem("technic:rubber", {
+            description = "Rubber Fiber",
+            inventory_image = "technic_rubber.png",
+    })
diff --git a/technic/water.lua b/technic/water.lua
new file mode 100644
index 0000000..6ddaa46
--- /dev/null
+++ b/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/technic/water_mill.lua b/technic/water_mill.lua
new file mode 100644
index 0000000..6e0120d
--- /dev/null
+++ b/technic/water_mill.lua
@@ -0,0 +1,128 @@
+minetest.register_alias("water_mill", "technic:water_mill")
+
+minetest.register_craft({
+	output = 'technic:water_mill',
+	recipe = {
+		{'default:stone', 'default:stone', 'default:stone'},
+		{'default:wood', 'technic:diamond', 'default:wood'},
+		{'default:stone', 'moreores:copper_ingot', 'default:stone'},
+	}
+})
+
+minetest.register_craftitem("technic:water_mill", {
+	description = "Water Mill",
+	stack_max = 99,
+}) 
+
+water_mill_formspec =
+	"invsize[8,4;]"..
+	"image[1,1;1,2;technic_power_meter_bg.png]"..
+	"label[0,0;Water Mill]"..
+	"label[1,3;Power level]"..
+	"list[current_player;main;0,5;8,4;]"
+	
+
+minetest.register_node("technic:water_mill", {
+	description = "Water Mill",
+	tiles = {"technic_water_mill_top.png", "technic_machine_bottom.png", "technic_water_mill_side.png",
+		"technic_water_mill_side.png", "technic_water_mill_side.png", "technic_water_mill_side.png"},
+	paramtype2 = "facedir",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+	legacy_facedir_simple = true,
+	sounds = default.node_sound_wood_defaults(),
+	technic_power_machine=1,
+	internal_EU_buffer=0;
+	internal_EU_buffer_size=5000;
+	burn_time=0;
+	on_construct = function(pos)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("infotext", "Water Mill")
+		meta:set_float("technic_power_machine", 1)
+		meta:set_float("internal_EU_buffer", 0)
+		meta:set_float("internal_EU_buffer_size", 3000)
+		meta:set_string("formspec", water_mill_formspec)	
+		end,	
+
+})
+
+minetest.register_node("technic:water_mill_active", {
+	description = "Water Mill",
+	tiles = {"technic_water_mill_top_active.png", "technic_machine_bottom.png", "technic_water_mill_side.png",
+		"technic_water_mill_side.png", "technic_water_mill_side.png", "technic_water_mill_side.png"},
+	paramtype2 = "facedir",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
+	legacy_facedir_simple = true,
+	sounds = default.node_sound_wood_defaults(),
+	drop="technic:water_mill",
+	technic_power_machine=1,
+	internal_EU_buffer=0;
+	internal_EU_buffer_size=0;
+})
+
+minetest.register_abm({
+	nodenames = {"technic:water_mill","technic:water_mill_active"},
+	interval = 1,
+	chance = 1,
+	action = function(pos, node, active_object_count, active_object_count_wider)
+
+	local meta = minetest.env:get_meta(pos)
+	local charge= meta:get_float("internal_EU_buffer")
+	local max_charge= meta:get_float("internal_EU_buffer_size")
+	local water_nodes = 0
+	local lava_nodes = 0
+	local production_level=0
+	local load_step=0
+
+	pos.x=pos.x+1
+	local check=check_node_around_mill (pos)
+	if check==1 then water_nodes=water_nodes+1 end
+	pos.x=pos.x-2
+	check=check_node_around_mill (pos)
+	if check==1 then water_nodes=water_nodes+1 end
+	pos.x=pos.x+1
+	pos.z=pos.z+1
+	check=check_node_around_mill (pos)
+	if check==1 then water_nodes=water_nodes+1 end
+	pos.z=pos.z-2
+	check=check_node_around_mill (pos)
+	if check==1 then water_nodes=water_nodes+1 end
+	pos.z=pos.z+1
+	
+	if water_nodes==1 then production_level=25 load_step=30 end
+	if water_nodes==2 then production_level=50 load_step=60 end
+	if water_nodes==3 then production_level=75 load_step=90 end
+	if water_nodes==4 then production_level=100 load_step=120 end
+
+        if production_level>0 then
+		if charge+load_step>max_charge then
+		load_step=max_charge-charge
+		end
+		if load_step>0 then 
+		charge=charge+load_step
+		meta:set_float("internal_EU_buffer",charge)
+		end
+	end
+
+	local load = math.floor((charge/max_charge)*100)
+	meta:set_string("formspec",
+				"invsize[8,4;]"..
+				"image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
+						(load)..":technic_power_meter_fg.png]"..
+				"label[0,0;Water Mill]"..
+				"label[1,3;Power level]"..
+				"label[4,0;Production at "..tostring(production_level).."%]"
+				)
+				
+	if production_level>0 and minetest.env:get_node(pos).name=="technic:water_mill" then
+		hacky_swap_node (pos,"technic:water_mill_active")
+		return
+	end
+	if production_level==0 then hacky_swap_node (pos,"technic:water_mill") end
+end
+}) 
+
+function check_node_around_mill (pos)
+local node=minetest.env:get_node(pos)
+if node.name=="default:water_flowing"  then return 1 end
+return 0
+end
\ No newline at end of file
diff --git a/technic/wires.lua b/technic/wires.lua
new file mode 100644
index 0000000..e09fc2a
--- /dev/null
+++ b/technic/wires.lua
@@ -0,0 +1,401 @@
+--LV cable node boxes
+
+
+minetest.register_alias("lv_cable", "technic:lv_cable")
+
+minetest.register_craft({
+	output = 'technic:lv_cable 6',
+	recipe = {
+		{'moreores:copper_ingot', 'moreores:copper_ingot', 'moreores:copper_ingot'},
+	}
+}) 
+
+minetest.register_craftitem("technic:lv_cable", {
+	description = "Low Voltage Copper Cable",
+	stack_max = 99,
+}) 
+
+minetest.register_node("technic:lv_cable", {
+	description = "Low Voltage Copper Cable",
+	tiles = {"technic_lv_cable.png"},
+	inventory_image = "technic_lv_cable_wield.png",
+	wield_image = "technic_lv_cable_wield.png",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+	sounds = default.node_sound_wood_defaults(),
+	drop = "technic:lv_cable",
+	cablelike=1,
+	rules_x1=0,
+	rules_x2=0,
+	rules_y1=0,
+	rules_y2=0,
+	rules_z1=0,
+	rules_z2=0,
+	paramtype = "light",
+        drawtype = "nodebox", 
+	selection_box = {
+		type = "fixed",
+                fixed = {
+		{ -0.1 , -0.1 , -0.1 , 0.1 ,  0.1 , 0.1  },
+		}},
+	node_box = {
+		type = "fixed",
+                fixed = {
+		{ -0.1 , -0.1 , -0.1 , 0.1 ,  0.1 , 0.1  },
+		}},
+	on_construct = function(pos)
+	meta=minetest.env:get_meta(pos)
+	meta:set_float("cablelike",1)
+	meta:set_float("x1",0)
+	meta:set_float("x2",0)
+	meta:set_float("y1",0)
+	meta:set_float("y2",0)
+	meta:set_float("z1",0)
+	meta:set_float("z2",0)
+	check_connections (pos)
+	end,
+
+	after_dig_node = function (pos, oldnode, oldmetadata, digger)
+	check_connections_on_destroy (pos)
+	end,
+
+})
+
+
+str_y1=		{ -0.1 , -0.1 , -0.1 , 0.1 , 0.5, 0.1  }    --0 y+
+str_x1=		{ -0.1 , -0.1 , -0.1 , 0.5, 0.1 , 0.1  }    --0 x+
+str_z1=		{ -0.1 , -0.1 ,  0.1 ,  0.1 , 0.1 , 0.5 }   --0 z+
+str_z2=		{ -0.1 , -0.1, -0.5 ,  0.1 ,  0.1 , 0.1  }  --0 z-
+str_y2=		{ -0.1 , -0.5, -0.1 ,  0.1 ,  0.1 , 0.1  }  --0 y-
+str_x2=		{ -0.5 , -0.1, -0.1 ,  0.1 ,  0.1 , 0.1  }  --0 x-
+
+
+
+local x1,x2,y1,y2,z1,z2
+local count=0
+
+for x1 = 0, 1, 1 do	--x-
+for x2 = 0, 1, 1 do	--x+
+for y1 = 0, 1, 1 do	--y-
+for y2 = 0, 1, 1 do	--y-	
+for z1 = 0, 1, 1 do	--z-
+for z2 = 0, 1, 1 do	--z+
+     
+temp_x1={} temp_x2={} temp_y1={} temp_y2={} temp_z1={} temp_z2={}
+
+if x1==1 then 	temp_x1=str_x1  end 
+if x2==1 then 	temp_x2=str_x2  end 
+if y1==1 then 	temp_y1=str_y1  end 
+if y2==1 then 	temp_y2=str_y2  end 
+if z1==1 then 	temp_z1=str_z1  end 
+if z2==1 then 	temp_z2=str_z2  end 
+
+
+minetest.register_node("technic:lv_cable"..count, {
+	description = "Low Voltage Copper Cable",
+	tiles = {"technic_lv_cable.png"},
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
+	sounds = default.node_sound_wood_defaults(),
+	drop = "technic:lv_cable",
+	rules_x1=0,
+	rules_x2=0,
+	rules_y1=0,
+	rules_y2=0,
+	rules_z1=0,
+	rules_z2=0,
+	cablelike=1,
+	paramtype = "light",
+        drawtype = "nodebox", 
+	selection_box = {
+		type = "fixed",
+           fixed = {
+		temp_x1,temp_x2,temp_y1,temp_y2,temp_z1,temp_z2,
+		}},
+
+	node_box = {
+		type = "fixed",
+           fixed = {
+		temp_x1,temp_x2,temp_y1,temp_y2,temp_z1,temp_z2,
+		}},
+
+	after_dig_node = function (pos, oldnode, oldmetadata, digger)
+	check_connections_on_destroy (pos)
+	end,
+	
+})
+
+count=count+1 end end end end end end
+
+check_connections = function(pos)
+		local pos1={}
+		pos1.x=pos.x
+		pos1.y=pos.y
+		pos1.z=pos.z
+		
+		pos1.x=pos1.x+1
+		if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+		x2=1
+		x1=minetest.env:get_meta(pos1):get_float("x1")
+		y1=minetest.env:get_meta(pos1):get_float("y1")
+		y2=minetest.env:get_meta(pos1):get_float("y2")
+		z1=minetest.env:get_meta(pos1):get_float("z1")
+		z2=minetest.env:get_meta(pos1):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos1,"technic:lv_cable"..rule)
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("x2",x2)
+		meta=minetest.env:get_meta(pos)
+		x1=1
+		x2=minetest.env:get_meta(pos):get_float("x2")
+		y1=minetest.env:get_meta(pos):get_float("y1")
+		y2=minetest.env:get_meta(pos):get_float("y2")
+		z1=minetest.env:get_meta(pos):get_float("z1")
+		z2=minetest.env:get_meta(pos):get_float("z2")
+		meta:set_float("x1",x1)
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos,"technic:lv_cable"..rule)
+		end
+
+		pos1.x=pos1.x-2
+		if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+		x1=1
+		x2=minetest.env:get_meta(pos1):get_float("x2")
+		y1=minetest.env:get_meta(pos1):get_float("y1")
+		y2=minetest.env:get_meta(pos1):get_float("y2")
+		z1=minetest.env:get_meta(pos1):get_float("z1")
+		z2=minetest.env:get_meta(pos1):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos1,"technic:lv_cable"..rule)
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("x1",x1)
+		meta=minetest.env:get_meta(pos)
+		x2=1
+		x1=minetest.env:get_meta(pos):get_float("x1")
+		y1=minetest.env:get_meta(pos):get_float("y1")
+		y2=minetest.env:get_meta(pos):get_float("y2")
+		z1=minetest.env:get_meta(pos):get_float("z1")
+		z2=minetest.env:get_meta(pos):get_float("z2")
+		meta:set_float("x2",x2)
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos,"technic:lv_cable"..rule)
+		end
+
+		pos1.x=pos1.x+1
+		
+		pos1.y=pos1.y+1
+		if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+		y2=1
+		x1=minetest.env:get_meta(pos1):get_float("x1")
+		x2=minetest.env:get_meta(pos1):get_float("x2")
+		y1=minetest.env:get_meta(pos1):get_float("y1")
+		z1=minetest.env:get_meta(pos1):get_float("z1")
+		z2=minetest.env:get_meta(pos1):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos1,"technic:lv_cable"..rule)
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("y2",y2)
+		meta=minetest.env:get_meta(pos)
+		y1=1
+		x1=minetest.env:get_meta(pos):get_float("x1")
+		x2=minetest.env:get_meta(pos):get_float("x2")
+		y2=minetest.env:get_meta(pos):get_float("y2")
+		z1=minetest.env:get_meta(pos):get_float("z1")
+		z2=minetest.env:get_meta(pos):get_float("z2")
+		meta:set_float("y1",y1)
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos,"technic:lv_cable"..rule)
+		end
+		
+		if minetest.env:get_meta(pos1):get_float("technic_power_machine")==1 then
+		y1=1
+		x1=minetest.env:get_meta(pos):get_float("x1")
+		x2=minetest.env:get_meta(pos):get_float("x2")
+		y2=minetest.env:get_meta(pos):get_float("y2")
+		z1=minetest.env:get_meta(pos):get_float("z1")
+		z2=minetest.env:get_meta(pos):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos,"technic:lv_cable"..rule)
+		meta=minetest.env:get_meta(pos)
+		meta:set_float("y1",y1)
+		end
+
+
+		pos1.y=pos1.y-2
+		if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+		y1=1
+		x1=minetest.env:get_meta(pos1):get_float("x1")
+		x2=minetest.env:get_meta(pos1):get_float("x2")
+		y2=minetest.env:get_meta(pos1):get_float("y2")
+		z1=minetest.env:get_meta(pos1):get_float("z1")
+		z2=minetest.env:get_meta(pos1):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos1,"technic:lv_cable"..rule)
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("y1",y1)
+		meta=minetest.env:get_meta(pos)
+		y2=1
+		x1=minetest.env:get_meta(pos):get_float("x1")
+		x2=minetest.env:get_meta(pos):get_float("x2")
+		y1=minetest.env:get_meta(pos):get_float("y1")
+		z1=minetest.env:get_meta(pos):get_float("z1")
+		z2=minetest.env:get_meta(pos):get_float("z2")
+		meta:set_float("y2",y2)
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos,"technic:lv_cable"..rule)
+		end
+		pos1.y=pos1.y+1
+
+		pos1.z=pos1.z+1
+		if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+		z2=1
+		x1=minetest.env:get_meta(pos1):get_float("x1")
+		x2=minetest.env:get_meta(pos1):get_float("x2")
+		y1=minetest.env:get_meta(pos1):get_float("y1")
+		y2=minetest.env:get_meta(pos1):get_float("y2")
+		z1=minetest.env:get_meta(pos1):get_float("z1")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos1,"technic:lv_cable"..rule)
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("z2",z2)
+		meta=minetest.env:get_meta(pos)
+		z1=1
+		x1=minetest.env:get_meta(pos):get_float("x1")
+		x2=minetest.env:get_meta(pos):get_float("x2")
+		y1=minetest.env:get_meta(pos):get_float("y1")
+		y2=minetest.env:get_meta(pos):get_float("y2")
+		z2=minetest.env:get_meta(pos):get_float("z2")
+		meta:set_float("z1",z1)
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos,"technic:lv_cable"..rule)
+		end
+		pos1.z=pos1.z-2
+		if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+		z1=1
+		x1=minetest.env:get_meta(pos1):get_float("x1")
+		x2=minetest.env:get_meta(pos1):get_float("x2")
+		y1=minetest.env:get_meta(pos1):get_float("y1")
+		y2=minetest.env:get_meta(pos1):get_float("y2")
+		z2=minetest.env:get_meta(pos1):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos1,"technic:lv_cable"..rule)
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("z1",z1)
+		meta=minetest.env:get_meta(pos)
+		z2=1
+		x1=minetest.env:get_meta(pos):get_float("x1")
+		x2=minetest.env:get_meta(pos):get_float("x2")
+		y1=minetest.env:get_meta(pos):get_float("y1")
+		y2=minetest.env:get_meta(pos):get_float("y2")
+		z1=minetest.env:get_meta(pos):get_float("z1")
+		meta:set_float("z2",z2)
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos,"technic:lv_cable"..rule)
+		end
+		pos1.z=pos1.z+1
+end	
+
+function make_rule_number (x1,x2,y1,y2,z1,z2)
+local temp= z2+z1*2+y2*4+y1*8+x2*16+x1*32
+return temp
+end
+
+check_connections_on_destroy = function(pos)
+		local pos1={}
+		pos1.x=pos.x
+		pos1.y=pos.y
+		pos1.z=pos.z
+		
+		pos1.x=pos1.x+1
+		if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+		x2=0
+		x1=minetest.env:get_meta(pos1):get_float("x1")
+		y1=minetest.env:get_meta(pos1):get_float("y1")
+		y2=minetest.env:get_meta(pos1):get_float("y2")
+		z1=minetest.env:get_meta(pos1):get_float("z1")
+		z2=minetest.env:get_meta(pos1):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
+		if rule>0  then	hacky_swap_node(pos1,"technic:lv_cable"..rule) end
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("x2",x2)
+		end
+		
+		pos1.x=pos1.x-2
+		if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+		x1=0
+		x2=minetest.env:get_meta(pos1):get_float("x2")
+		y1=minetest.env:get_meta(pos1):get_float("y1")
+		y2=minetest.env:get_meta(pos1):get_float("y2")
+		z1=minetest.env:get_meta(pos1):get_float("z1")
+		z2=minetest.env:get_meta(pos1):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
+		if rule>0  then	hacky_swap_node(pos1,"technic:lv_cable"..rule) end
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("x1",x1)
+		end
+		pos1.x=pos1.x+1
+
+		pos1.y=pos1.y+1
+		if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+		y2=0
+		x1=minetest.env:get_meta(pos1):get_float("x1")
+		x2=minetest.env:get_meta(pos1):get_float("x2")
+		y1=minetest.env:get_meta(pos1):get_float("y1")
+		z1=minetest.env:get_meta(pos1):get_float("z1")
+		z2=minetest.env:get_meta(pos1):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
+		if rule>0  then	hacky_swap_node(pos1,"technic:lv_cable"..rule) end
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("y2",y2)
+		end
+		
+		pos1.y=pos1.y-2
+		if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+		y1=0
+		x1=minetest.env:get_meta(pos1):get_float("x1")
+		x2=minetest.env:get_meta(pos1):get_float("x2")
+		y2=minetest.env:get_meta(pos1):get_float("y2")
+		z1=minetest.env:get_meta(pos1):get_float("z1")
+		z2=minetest.env:get_meta(pos1):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
+		if rule>0  then	hacky_swap_node(pos1,"technic:lv_cable"..rule) end
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("y1",y1)
+		end
+		pos1.y=pos1.y+1
+
+		pos1.z=pos1.z+1
+		if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+		z2=0
+		x1=minetest.env:get_meta(pos1):get_float("x1")
+		x2=minetest.env:get_meta(pos1):get_float("x2")
+		y1=minetest.env:get_meta(pos1):get_float("y1")
+		y2=minetest.env:get_meta(pos1):get_float("y2")
+		z1=minetest.env:get_meta(pos1):get_float("z1")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
+		if rule>0  then	hacky_swap_node(pos1,"technic:lv_cable"..rule) end
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("z2",z2)
+		end
+		
+		pos1.z=pos1.z-2
+		if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+		z1=0
+		x1=minetest.env:get_meta(pos1):get_float("x1")
+		x2=minetest.env:get_meta(pos1):get_float("x2")
+		y1=minetest.env:get_meta(pos1):get_float("y1")
+		y2=minetest.env:get_meta(pos1):get_float("y2")
+		z2=minetest.env:get_meta(pos1):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
+		if rule>0  then	hacky_swap_node(pos1,"technic:lv_cable"..rule) end
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("z1",z1)
+		end
+		pos1.y=pos1.y+1
+		
+end	
+
diff --git a/technic/wires_mv.lua b/technic/wires_mv.lua
new file mode 100644
index 0000000..7924956
--- /dev/null
+++ b/technic/wires_mv.lua
@@ -0,0 +1,400 @@
+--MV cable node boxes
+
+
+minetest.register_alias("mv_cable", "technic:mv_cable")
+
+minetest.register_craft({
+	output = 'technic:mv_cable 3',
+	recipe ={
+		{'technic:rubber','technic:rubber','technic:rubber'},
+		{'technic:lv_cable','technic:lv_cable','technic:lv_cable'},
+		{'technic:rubber','technic:rubber','technic:rubber'},
+		}
+}) 
+
+
+minetest.register_craftitem("technic:mv_cable", {
+	description = "Medium Voltage Copper Cable",
+	stack_max = 99,
+}) 
+
+minetest.register_node("technic:mv_cable", {
+	description = "Medium Voltage Copper Cable",
+	tiles = {"technic_mv_cable.png"},
+	inventory_image = "technic_mv_cable_wield.png",
+	wield_image = "technic_mv_cable_wield.png",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+	sounds = default.node_sound_wood_defaults(),
+	drop = "technic:mv_cable",
+	mv_cablelike=1,
+	rules_x1=0,
+	rules_x2=0,
+	rules_y1=0,
+	rules_y2=0,
+	rules_z1=0,
+	rules_z2=0,
+	paramtype = "light",
+        drawtype = "nodebox", 
+	selection_box = {
+		type = "fixed",
+                fixed = {
+		{ -0.1 , -0.1 , -0.1 , 0.1 ,  0.1 , 0.1  },
+		}},
+	node_box = {
+		type = "fixed",
+                fixed = {
+		{ -0.1 , -0.1 , -0.1 , 0.1 ,  0.1 , 0.1  },
+		}},
+	on_construct = function(pos)
+	meta=minetest.env:get_meta(pos)
+	meta:set_float("mv_cablelike",1)
+	meta:set_float("x1",0)
+	meta:set_float("x2",0)
+	meta:set_float("y1",0)
+	meta:set_float("y2",0)
+	meta:set_float("z1",0)
+	meta:set_float("z2",0)
+	MV_check_connections (pos)
+	end,
+
+	after_dig_node = function (pos, oldnode, oldmetadata, digger)
+	MV_check_connections_on_destroy (pos)
+	end,
+
+})
+
+
+str_y1=		{ -0.1 , -0.1 , -0.1 , 0.1 , 0.5, 0.1  }    --0 y+
+str_x1=		{ -0.1 , -0.1 , -0.1 , 0.5, 0.1 , 0.1  }    --0 x+
+str_z1=		{ -0.1 , -0.1 ,  0.1 ,  0.1 , 0.1 , 0.5 }   --0 z+
+str_z2=		{ -0.1 , -0.1, -0.5 ,  0.1 ,  0.1 , 0.1  }  --0 z-
+str_y2=		{ -0.1 , -0.5, -0.1 ,  0.1 ,  0.1 , 0.1  }  --0 y-
+str_x2=		{ -0.5 , -0.1, -0.1 ,  0.1 ,  0.1 , 0.1  }  --0 x-
+
+
+
+local x1,x2,y1,y2,z1,z2
+local count=0
+
+for x1 = 0, 1, 1 do	--x-
+for x2 = 0, 1, 1 do	--x+
+for y1 = 0, 1, 1 do	--y-
+for y2 = 0, 1, 1 do	--y-	
+for z1 = 0, 1, 1 do	--z-
+for z2 = 0, 1, 1 do	--z+
+     
+temp_x1={} temp_x2={} temp_y1={} temp_y2={} temp_z1={} temp_z2={}
+
+if x1==1 then 	temp_x1=str_x1  end 
+if x2==1 then 	temp_x2=str_x2  end 
+if y1==1 then 	temp_y1=str_y1  end 
+if y2==1 then 	temp_y2=str_y2  end 
+if z1==1 then 	temp_z1=str_z1  end 
+if z2==1 then 	temp_z2=str_z2  end 
+
+
+minetest.register_node("technic:mv_cable"..count, {
+	description = "Medium Voltage Copper Cable",
+	tiles = {"technic_mv_cable.png"},
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
+	sounds = default.node_sound_wood_defaults(),
+	drop = "technic:mv_cable",
+	rules_x1=0,
+	rules_x2=0,
+	rules_y1=0,
+	rules_y2=0,
+	rules_z1=0,
+	rules_z2=0,
+	cablelike=1,
+	paramtype = "light",
+        drawtype = "nodebox", 
+	selection_box = {
+		type = "fixed",
+           fixed = {
+		temp_x1,temp_x2,temp_y1,temp_y2,temp_z1,temp_z2,
+		}},
+
+	node_box = {
+		type = "fixed",
+           fixed = {
+		temp_x1,temp_x2,temp_y1,temp_y2,temp_z1,temp_z2,
+		}},
+
+	after_dig_node = function (pos, oldnode, oldmetadata, digger)
+	MV_check_connections_on_destroy (pos)
+	end,
+	
+})
+
+count=count+1 end end end end end end
+
+MV_check_connections = function(pos)
+		local pos1={}
+		pos1.x=pos.x
+		pos1.y=pos.y
+		pos1.z=pos.z
+		
+		pos1.x=pos1.x+1
+		if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+		x2=1
+		x1=minetest.env:get_meta(pos1):get_float("x1")
+		y1=minetest.env:get_meta(pos1):get_float("y1")
+		y2=minetest.env:get_meta(pos1):get_float("y2")
+		z1=minetest.env:get_meta(pos1):get_float("z1")
+		z2=minetest.env:get_meta(pos1):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos1,"technic:mv_cable"..rule)
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("x2",x2)
+		meta=minetest.env:get_meta(pos)
+		x1=1
+		x2=minetest.env:get_meta(pos):get_float("x2")
+		y1=minetest.env:get_meta(pos):get_float("y1")
+		y2=minetest.env:get_meta(pos):get_float("y2")
+		z1=minetest.env:get_meta(pos):get_float("z1")
+		z2=minetest.env:get_meta(pos):get_float("z2")
+		meta:set_float("x1",x1)
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos,"technic:mv_cable"..rule)
+		end
+
+		pos1.x=pos1.x-2
+		if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+		x1=1
+		x2=minetest.env:get_meta(pos1):get_float("x2")
+		y1=minetest.env:get_meta(pos1):get_float("y1")
+		y2=minetest.env:get_meta(pos1):get_float("y2")
+		z1=minetest.env:get_meta(pos1):get_float("z1")
+		z2=minetest.env:get_meta(pos1):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos1,"technic:mv_cable"..rule)
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("x1",x1)
+		meta=minetest.env:get_meta(pos)
+		x2=1
+		x1=minetest.env:get_meta(pos):get_float("x1")
+		y1=minetest.env:get_meta(pos):get_float("y1")
+		y2=minetest.env:get_meta(pos):get_float("y2")
+		z1=minetest.env:get_meta(pos):get_float("z1")
+		z2=minetest.env:get_meta(pos):get_float("z2")
+		meta:set_float("x2",x2)
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos,"technic:mv_cable"..rule)
+		end
+
+		pos1.x=pos1.x+1
+		
+		pos1.y=pos1.y+1
+		if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+		y2=1
+		x1=minetest.env:get_meta(pos1):get_float("x1")
+		x2=minetest.env:get_meta(pos1):get_float("x2")
+		y1=minetest.env:get_meta(pos1):get_float("y1")
+		z1=minetest.env:get_meta(pos1):get_float("z1")
+		z2=minetest.env:get_meta(pos1):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos1,"technic:mv_cable"..rule)
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("y2",y2)
+		meta=minetest.env:get_meta(pos)
+		y1=1
+		x1=minetest.env:get_meta(pos):get_float("x1")
+		x2=minetest.env:get_meta(pos):get_float("x2")
+		y2=minetest.env:get_meta(pos):get_float("y2")
+		z1=minetest.env:get_meta(pos):get_float("z1")
+		z2=minetest.env:get_meta(pos):get_float("z2")
+		meta:set_float("y1",y1)
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos,"technic:mv_cable"..rule)
+		end
+		
+		if minetest.env:get_meta(pos1):get_float("technic_mv_power_machine")==1 then
+		y1=1
+		x1=minetest.env:get_meta(pos):get_float("x1")
+		x2=minetest.env:get_meta(pos):get_float("x2")
+		y2=minetest.env:get_meta(pos):get_float("y2")
+		z1=minetest.env:get_meta(pos):get_float("z1")
+		z2=minetest.env:get_meta(pos):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos,"technic:mv_cable"..rule)
+		meta=minetest.env:get_meta(pos)
+		meta:set_float("y1",y1)
+		end
+
+
+		pos1.y=pos1.y-2
+		if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+		y1=1
+		x1=minetest.env:get_meta(pos1):get_float("x1")
+		x2=minetest.env:get_meta(pos1):get_float("x2")
+		y2=minetest.env:get_meta(pos1):get_float("y2")
+		z1=minetest.env:get_meta(pos1):get_float("z1")
+		z2=minetest.env:get_meta(pos1):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos1,"technic:mv_cable"..rule)
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("y1",y1)
+		meta=minetest.env:get_meta(pos)
+		y2=1
+		x1=minetest.env:get_meta(pos):get_float("x1")
+		x2=minetest.env:get_meta(pos):get_float("x2")
+		y1=minetest.env:get_meta(pos):get_float("y1")
+		z1=minetest.env:get_meta(pos):get_float("z1")
+		z2=minetest.env:get_meta(pos):get_float("z2")
+		meta:set_float("y2",y2)
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos,"technic:mv_cable"..rule)
+		end
+		pos1.y=pos1.y+1
+
+		pos1.z=pos1.z+1
+		if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+		z2=1
+		x1=minetest.env:get_meta(pos1):get_float("x1")
+		x2=minetest.env:get_meta(pos1):get_float("x2")
+		y1=minetest.env:get_meta(pos1):get_float("y1")
+		y2=minetest.env:get_meta(pos1):get_float("y2")
+		z1=minetest.env:get_meta(pos1):get_float("z1")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos1,"technic:mv_cable"..rule)
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("z2",z2)
+		meta=minetest.env:get_meta(pos)
+		z1=1
+		x1=minetest.env:get_meta(pos):get_float("x1")
+		x2=minetest.env:get_meta(pos):get_float("x2")
+		y1=minetest.env:get_meta(pos):get_float("y1")
+		y2=minetest.env:get_meta(pos):get_float("y2")
+		z2=minetest.env:get_meta(pos):get_float("z2")
+		meta:set_float("z1",z1)
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos,"technic:mv_cable"..rule)
+		end
+		pos1.z=pos1.z-2
+		if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+		z1=1
+		x1=minetest.env:get_meta(pos1):get_float("x1")
+		x2=minetest.env:get_meta(pos1):get_float("x2")
+		y1=minetest.env:get_meta(pos1):get_float("y1")
+		y2=minetest.env:get_meta(pos1):get_float("y2")
+		z2=minetest.env:get_meta(pos1):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos1,"technic:mv_cable"..rule)
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("z1",z1)
+		meta=minetest.env:get_meta(pos)
+		z2=1
+		x1=minetest.env:get_meta(pos):get_float("x1")
+		x2=minetest.env:get_meta(pos):get_float("x2")
+		y1=minetest.env:get_meta(pos):get_float("y1")
+		y2=minetest.env:get_meta(pos):get_float("y2")
+		z1=minetest.env:get_meta(pos):get_float("z1")
+		meta:set_float("z2",z2)
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		hacky_swap_node(pos,"technic:mv_cable"..rule)
+		end
+		pos1.z=pos1.z+1
+end	
+
+
+MV_check_connections_on_destroy = function(pos)
+		local pos1={}
+		pos1.x=pos.x
+		pos1.y=pos.y
+		pos1.z=pos.z
+		
+		pos1.x=pos1.x+1
+		if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+		x2=0
+		x1=minetest.env:get_meta(pos1):get_float("x1")
+		y1=minetest.env:get_meta(pos1):get_float("y1")
+		y2=minetest.env:get_meta(pos1):get_float("y2")
+		z1=minetest.env:get_meta(pos1):get_float("z1")
+		z2=minetest.env:get_meta(pos1):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		if rule==0 then hacky_swap_node(pos1,"technic:mv_cable") end
+		if rule>0  then	hacky_swap_node(pos1,"technic:mv_cable"..rule) end
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("x2",x2)
+		end
+		
+		pos1.x=pos1.x-2
+		if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+		x1=0
+		x2=minetest.env:get_meta(pos1):get_float("x2")
+		y1=minetest.env:get_meta(pos1):get_float("y1")
+		y2=minetest.env:get_meta(pos1):get_float("y2")
+		z1=minetest.env:get_meta(pos1):get_float("z1")
+		z2=minetest.env:get_meta(pos1):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		if rule==0 then hacky_swap_node(pos1,"technic:mv_cable") end
+		if rule>0  then	hacky_swap_node(pos1,"technic:mv_cable"..rule) end
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("x1",x1)
+		end
+		pos1.x=pos1.x+1
+
+		pos1.y=pos1.y+1
+		if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+		y2=0
+		x1=minetest.env:get_meta(pos1):get_float("x1")
+		x2=minetest.env:get_meta(pos1):get_float("x2")
+		y1=minetest.env:get_meta(pos1):get_float("y1")
+		z1=minetest.env:get_meta(pos1):get_float("z1")
+		z2=minetest.env:get_meta(pos1):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		if rule==0 then hacky_swap_node(pos1,"technic:mv_cable") end
+		if rule>0  then	hacky_swap_node(pos1,"technic:mv_cable"..rule) end
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("y2",y2)
+		end
+		
+		pos1.y=pos1.y-2
+		if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+		y1=0
+		x1=minetest.env:get_meta(pos1):get_float("x1")
+		x2=minetest.env:get_meta(pos1):get_float("x2")
+		y2=minetest.env:get_meta(pos1):get_float("y2")
+		z1=minetest.env:get_meta(pos1):get_float("z1")
+		z2=minetest.env:get_meta(pos1):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		if rule==0 then hacky_swap_node(pos1,"technic:mv_cable") end
+		if rule>0  then	hacky_swap_node(pos1,"technic:mv_cable"..rule) end
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("y1",y1)
+		end
+		pos1.y=pos1.y+1
+
+		pos1.z=pos1.z+1
+		if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+		z2=0
+		x1=minetest.env:get_meta(pos1):get_float("x1")
+		x2=minetest.env:get_meta(pos1):get_float("x2")
+		y1=minetest.env:get_meta(pos1):get_float("y1")
+		y2=minetest.env:get_meta(pos1):get_float("y2")
+		z1=minetest.env:get_meta(pos1):get_float("z1")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		if rule==0 then hacky_swap_node(pos1,"technic:mv_cable") end
+		if rule>0  then	hacky_swap_node(pos1,"technic:mv_cable"..rule) end
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("z2",z2)
+		end
+		
+		pos1.z=pos1.z-2
+		if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+		z1=0
+		x1=minetest.env:get_meta(pos1):get_float("x1")
+		x2=minetest.env:get_meta(pos1):get_float("x2")
+		y1=minetest.env:get_meta(pos1):get_float("y1")
+		y2=minetest.env:get_meta(pos1):get_float("y2")
+		z2=minetest.env:get_meta(pos1):get_float("z2")
+		rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+		if rule==0 then hacky_swap_node(pos1,"technic:mv_cable") end
+		if rule>0  then	hacky_swap_node(pos1,"technic:mv_cable"..rule) end
+		meta=minetest.env:get_meta(pos1)
+		meta:set_float("z1",z1)
+		end
+		pos1.y=pos1.y+1
+		
+end	
+

--
Gitblit v1.8.0