[minetest-mod-3d-armor] 01/03: New upstream version 0.4.5

Julien Puydt julien.puydt at laposte.net
Wed Jan 11 09:55:41 UTC 2017


This is an automated email from the git hooks/post-receive script.

jpuydt-guest pushed a commit to branch master
in repository minetest-mod-3d-armor.

commit 8ac0ae2acb2b374cd2775796599cb27ef40ff73a
Author: Julien Puydt <julien.puydt at laposte.net>
Date:   Sun Dec 25 23:13:48 2016 +0100

    New upstream version 0.4.5
---
 .gitignore                                         |   8 +
 3d_armor/README.txt                                |  24 +
 3d_armor/admin.lua                                 |  45 ++
 3d_armor/armor.conf.example                        |  61 ++
 3d_armor/armor.lua                                 | 635 +++++++++++++++++++++
 3d_armor/crafting_guide.txt                        |  79 +++
 3d_armor/depends.txt                               |   6 +
 3d_armor/description.txt                           |   1 +
 3d_armor/init.lua                                  | 254 +++++++++
 3d_armor/models/3d_armor_character.b3d             | Bin 0 -> 141046 bytes
 3d_armor/models/3d_armor_character.blend           | Bin 0 -> 991996 bytes
 3d_armor/textures/3d_armor_boots_admin.png         | Bin 0 -> 291 bytes
 3d_armor/textures/3d_armor_boots_admin_preview.png | Bin 0 -> 1413 bytes
 3d_armor/textures/3d_armor_boots_bronze.png        | Bin 0 -> 321 bytes
 .../textures/3d_armor_boots_bronze_preview.png     | Bin 0 -> 1446 bytes
 3d_armor/textures/3d_armor_boots_cactus.png        | Bin 0 -> 308 bytes
 .../textures/3d_armor_boots_cactus_preview.png     | Bin 0 -> 1413 bytes
 3d_armor/textures/3d_armor_boots_crystal.png       | Bin 0 -> 494 bytes
 .../textures/3d_armor_boots_crystal_preview.png    | Bin 0 -> 2009 bytes
 3d_armor/textures/3d_armor_boots_diamond.png       | Bin 0 -> 295 bytes
 .../textures/3d_armor_boots_diamond_preview.png    | Bin 0 -> 1460 bytes
 3d_armor/textures/3d_armor_boots_gold.png          | Bin 0 -> 287 bytes
 3d_armor/textures/3d_armor_boots_gold_preview.png  | Bin 0 -> 1413 bytes
 3d_armor/textures/3d_armor_boots_mithril.png       | Bin 0 -> 216 bytes
 .../textures/3d_armor_boots_mithril_preview.png    | Bin 0 -> 1387 bytes
 3d_armor/textures/3d_armor_boots_steel.png         | Bin 0 -> 316 bytes
 3d_armor/textures/3d_armor_boots_steel_preview.png | Bin 0 -> 1460 bytes
 3d_armor/textures/3d_armor_boots_wood.png          | Bin 0 -> 274 bytes
 3d_armor/textures/3d_armor_boots_wood_preview.png  | Bin 0 -> 1424 bytes
 3d_armor/textures/3d_armor_chestplate_admin.png    | Bin 0 -> 782 bytes
 .../textures/3d_armor_chestplate_admin_preview.png | Bin 0 -> 1269 bytes
 3d_armor/textures/3d_armor_chestplate_bronze.png   | Bin 0 -> 556 bytes
 .../3d_armor_chestplate_bronze_preview.png         | Bin 0 -> 1296 bytes
 3d_armor/textures/3d_armor_chestplate_cactus.png   | Bin 0 -> 712 bytes
 .../3d_armor_chestplate_cactus_preview.png         | Bin 0 -> 1269 bytes
 3d_armor/textures/3d_armor_chestplate_crystal.png  | Bin 0 -> 1313 bytes
 .../3d_armor_chestplate_crystal_preview.png        | Bin 0 -> 1738 bytes
 3d_armor/textures/3d_armor_chestplate_diamond.png  | Bin 0 -> 475 bytes
 .../3d_armor_chestplate_diamond_preview.png        | Bin 0 -> 1221 bytes
 3d_armor/textures/3d_armor_chestplate_gold.png     | Bin 0 -> 430 bytes
 .../textures/3d_armor_chestplate_gold_preview.png  | Bin 0 -> 1187 bytes
 3d_armor/textures/3d_armor_chestplate_mithril.png  | Bin 0 -> 669 bytes
 .../3d_armor_chestplate_mithril_preview.png        | Bin 0 -> 1425 bytes
 3d_armor/textures/3d_armor_chestplate_steel.png    | Bin 0 -> 537 bytes
 .../textures/3d_armor_chestplate_steel_preview.png | Bin 0 -> 1296 bytes
 3d_armor/textures/3d_armor_chestplate_wood.png     | Bin 0 -> 453 bytes
 .../textures/3d_armor_chestplate_wood_preview.png  | Bin 0 -> 1192 bytes
 3d_armor/textures/3d_armor_helmet_admin.png        | Bin 0 -> 463 bytes
 .../textures/3d_armor_helmet_admin_preview.png     | Bin 0 -> 883 bytes
 3d_armor/textures/3d_armor_helmet_bronze.png       | Bin 0 -> 583 bytes
 .../textures/3d_armor_helmet_bronze_preview.png    | Bin 0 -> 891 bytes
 3d_armor/textures/3d_armor_helmet_cactus.png       | Bin 0 -> 533 bytes
 .../textures/3d_armor_helmet_cactus_preview.png    | Bin 0 -> 883 bytes
 3d_armor/textures/3d_armor_helmet_crystal.png      | Bin 0 -> 1176 bytes
 .../textures/3d_armor_helmet_crystal_preview.png   | Bin 0 -> 1243 bytes
 3d_armor/textures/3d_armor_helmet_diamond.png      | Bin 0 -> 508 bytes
 .../textures/3d_armor_helmet_diamond_preview.png   | Bin 0 -> 902 bytes
 3d_armor/textures/3d_armor_helmet_gold.png         | Bin 0 -> 475 bytes
 3d_armor/textures/3d_armor_helmet_gold_preview.png | Bin 0 -> 893 bytes
 3d_armor/textures/3d_armor_helmet_mithril.png      | Bin 0 -> 511 bytes
 .../textures/3d_armor_helmet_mithril_preview.png   | Bin 0 -> 853 bytes
 3d_armor/textures/3d_armor_helmet_steel.png        | Bin 0 -> 549 bytes
 .../textures/3d_armor_helmet_steel_preview.png     | Bin 0 -> 887 bytes
 3d_armor/textures/3d_armor_helmet_wood.png         | Bin 0 -> 472 bytes
 3d_armor/textures/3d_armor_helmet_wood_preview.png | Bin 0 -> 878 bytes
 3d_armor/textures/3d_armor_inv_boots_admin.png     | Bin 0 -> 129 bytes
 3d_armor/textures/3d_armor_inv_boots_bronze.png    | Bin 0 -> 129 bytes
 3d_armor/textures/3d_armor_inv_boots_cactus.png    | Bin 0 -> 129 bytes
 3d_armor/textures/3d_armor_inv_boots_crystal.png   | Bin 0 -> 200 bytes
 3d_armor/textures/3d_armor_inv_boots_diamond.png   | Bin 0 -> 129 bytes
 3d_armor/textures/3d_armor_inv_boots_gold.png      | Bin 0 -> 129 bytes
 3d_armor/textures/3d_armor_inv_boots_mithril.png   | Bin 0 -> 129 bytes
 3d_armor/textures/3d_armor_inv_boots_steel.png     | Bin 0 -> 129 bytes
 3d_armor/textures/3d_armor_inv_boots_wood.png      | Bin 0 -> 129 bytes
 .../textures/3d_armor_inv_chestplate_admin.png     | Bin 0 -> 142 bytes
 .../textures/3d_armor_inv_chestplate_bronze.png    | Bin 0 -> 142 bytes
 .../textures/3d_armor_inv_chestplate_cactus.png    | Bin 0 -> 142 bytes
 .../textures/3d_armor_inv_chestplate_crystal.png   | Bin 0 -> 236 bytes
 .../textures/3d_armor_inv_chestplate_diamond.png   | Bin 0 -> 142 bytes
 3d_armor/textures/3d_armor_inv_chestplate_gold.png | Bin 0 -> 142 bytes
 .../textures/3d_armor_inv_chestplate_mithril.png   | Bin 0 -> 142 bytes
 .../textures/3d_armor_inv_chestplate_steel.png     | Bin 0 -> 142 bytes
 3d_armor/textures/3d_armor_inv_chestplate_wood.png | Bin 0 -> 142 bytes
 3d_armor/textures/3d_armor_inv_helmet_admin.png    | Bin 0 -> 140 bytes
 3d_armor/textures/3d_armor_inv_helmet_bronze.png   | Bin 0 -> 140 bytes
 3d_armor/textures/3d_armor_inv_helmet_cactus.png   | Bin 0 -> 140 bytes
 3d_armor/textures/3d_armor_inv_helmet_crystal.png  | Bin 0 -> 219 bytes
 3d_armor/textures/3d_armor_inv_helmet_diamond.png  | Bin 0 -> 140 bytes
 3d_armor/textures/3d_armor_inv_helmet_gold.png     | Bin 0 -> 140 bytes
 3d_armor/textures/3d_armor_inv_helmet_mithril.png  | Bin 0 -> 140 bytes
 3d_armor/textures/3d_armor_inv_helmet_steel.png    | Bin 0 -> 140 bytes
 3d_armor/textures/3d_armor_inv_helmet_wood.png     | Bin 0 -> 140 bytes
 3d_armor/textures/3d_armor_inv_leggings_admin.png  | Bin 0 -> 140 bytes
 3d_armor/textures/3d_armor_inv_leggings_bronze.png | Bin 0 -> 155 bytes
 3d_armor/textures/3d_armor_inv_leggings_cactus.png | Bin 0 -> 184 bytes
 .../textures/3d_armor_inv_leggings_crystal.png     | Bin 0 -> 233 bytes
 .../textures/3d_armor_inv_leggings_diamond.png     | Bin 0 -> 155 bytes
 3d_armor/textures/3d_armor_inv_leggings_gold.png   | Bin 0 -> 155 bytes
 .../textures/3d_armor_inv_leggings_mithril.png     | Bin 0 -> 155 bytes
 3d_armor/textures/3d_armor_inv_leggings_steel.png  | Bin 0 -> 155 bytes
 3d_armor/textures/3d_armor_inv_leggings_wood.png   | Bin 0 -> 155 bytes
 3d_armor/textures/3d_armor_leggings_admin.png      | Bin 0 -> 351 bytes
 .../textures/3d_armor_leggings_admin_preview.png   | Bin 0 -> 1340 bytes
 3d_armor/textures/3d_armor_leggings_bronze.png     | Bin 0 -> 335 bytes
 .../textures/3d_armor_leggings_bronze_preview.png  | Bin 0 -> 1389 bytes
 3d_armor/textures/3d_armor_leggings_cactus.png     | Bin 0 -> 424 bytes
 .../textures/3d_armor_leggings_cactus_preview.png  | Bin 0 -> 1340 bytes
 3d_armor/textures/3d_armor_leggings_crystal.png    | Bin 0 -> 835 bytes
 .../textures/3d_armor_leggings_crystal_preview.png | Bin 0 -> 1917 bytes
 3d_armor/textures/3d_armor_leggings_diamond.png    | Bin 0 -> 306 bytes
 .../textures/3d_armor_leggings_diamond_preview.png | Bin 0 -> 1388 bytes
 3d_armor/textures/3d_armor_leggings_gold.png       | Bin 0 -> 298 bytes
 .../textures/3d_armor_leggings_gold_preview.png    | Bin 0 -> 1341 bytes
 3d_armor/textures/3d_armor_leggings_mithril.png    | Bin 0 -> 497 bytes
 .../textures/3d_armor_leggings_mithril_preview.png | Bin 0 -> 1380 bytes
 3d_armor/textures/3d_armor_leggings_steel.png      | Bin 0 -> 331 bytes
 .../textures/3d_armor_leggings_steel_preview.png   | Bin 0 -> 1387 bytes
 3d_armor/textures/3d_armor_leggings_wood.png       | Bin 0 -> 285 bytes
 .../textures/3d_armor_leggings_wood_preview.png    | Bin 0 -> 1399 bytes
 3d_armor/textures/3d_armor_trans.png               | Bin 0 -> 75 bytes
 3d_armor/textures/3d_armor_ui_form.png             | Bin 0 -> 8332 bytes
 3d_armor/textures/character_preview.png            | Bin 0 -> 907 bytes
 3d_armor/textures/inventory_plus_armor.png         | Bin 0 -> 544 bytes
 3d_armor_stand/LICENSE.txt                         |   7 +
 3d_armor_stand/README.txt                          |  21 +
 3d_armor_stand/depends.txt                         |   2 +
 3d_armor_stand/init.lua                            | 301 ++++++++++
 3d_armor_stand/models/3d_armor_entity.obj          | 193 +++++++
 3d_armor_stand/models/3d_armor_stand.obj           | 191 +++++++
 3d_armor_stand/textures/3d_armor_stand_feet.png    | Bin 0 -> 243 bytes
 3d_armor_stand/textures/3d_armor_stand_head.png    | Bin 0 -> 262 bytes
 3d_armor_stand/textures/3d_armor_stand_legs.png    | Bin 0 -> 249 bytes
 3d_armor_stand/textures/3d_armor_stand_torso.png   | Bin 0 -> 274 bytes
 LICENSE.md                                         |  11 +
 README.md                                          |  83 +++
 description.txt                                    |   1 +
 hazmat_suit/README.txt                             |  10 +
 hazmat_suit/depends.txt                            |   2 +
 hazmat_suit/description.txt                        |   1 +
 hazmat_suit/init.lua                               | 126 ++++
 .../textures/hazmat_suit_inv_boots_hazmat.png      | Bin 0 -> 198 bytes
 .../textures/hazmat_suit_inv_chestplate_hazmat.png | Bin 0 -> 160 bytes
 .../textures/hazmat_suit_inv_helmet_hazmat.png     | Bin 0 -> 248 bytes
 .../textures/hazmat_suit_inv_leggings_hazmat.png   | Bin 0 -> 189 bytes
 .../textures/hazmat_suit_inv_sleeve_hazmat.png     | Bin 0 -> 189 bytes
 .../textures/hazmat_suit_inv_suit_hazmat.png       | Bin 0 -> 302 bytes
 hazmat_suit/textures/hazmat_suit_suit_hazmat.png   | Bin 0 -> 792 bytes
 .../textures/hazmat_suit_suit_hazmat_preview.png   | Bin 0 -> 1005 bytes
 modpack.txt                                        |   0
 screenshot.png                                     | Bin 0 -> 148905 bytes
 shields/README.txt                                 |   6 +
 shields/crafting_guide.txt                         |  36 ++
 shields/depends.txt                                |   2 +
 shields/description.txt                            |   1 +
 shields/init.lua                                   | 126 ++++
 shields/textures/shields_inv_shield_admin.png      | Bin 0 -> 461 bytes
 shields/textures/shields_inv_shield_bronze.png     | Bin 0 -> 490 bytes
 shields/textures/shields_inv_shield_cactus.png     | Bin 0 -> 318 bytes
 shields/textures/shields_inv_shield_crystal.png    | Bin 0 -> 662 bytes
 shields/textures/shields_inv_shield_diamond.png    | Bin 0 -> 477 bytes
 .../shields_inv_shield_enhanced_cactus.png         | Bin 0 -> 322 bytes
 .../textures/shields_inv_shield_enhanced_wood.png  | Bin 0 -> 583 bytes
 shields/textures/shields_inv_shield_gold.png       | Bin 0 -> 449 bytes
 shields/textures/shields_inv_shield_mithril.png    | Bin 0 -> 526 bytes
 shields/textures/shields_inv_shield_steel.png      | Bin 0 -> 546 bytes
 shields/textures/shields_inv_shield_wood.png       | Bin 0 -> 529 bytes
 shields/textures/shields_shield_admin.png          | Bin 0 -> 423 bytes
 shields/textures/shields_shield_admin_preview.png  | Bin 0 -> 609 bytes
 shields/textures/shields_shield_bronze.png         | Bin 0 -> 502 bytes
 shields/textures/shields_shield_bronze_preview.png | Bin 0 -> 1494 bytes
 shields/textures/shields_shield_cactus.png         | Bin 0 -> 325 bytes
 shields/textures/shields_shield_cactus_preview.png | Bin 0 -> 536 bytes
 shields/textures/shields_shield_crystal.png        | Bin 0 -> 622 bytes
 .../textures/shields_shield_crystal_preview.png    | Bin 0 -> 1791 bytes
 shields/textures/shields_shield_diamond.png        | Bin 0 -> 489 bytes
 .../textures/shields_shield_diamond_preview.png    | Bin 0 -> 1480 bytes
 .../textures/shields_shield_enhanced_cactus.png    | Bin 0 -> 330 bytes
 .../shields_shield_enhanced_cactus_preview.png     | Bin 0 -> 530 bytes
 shields/textures/shields_shield_enhanced_wood.png  | Bin 0 -> 597 bytes
 .../shields_shield_enhanced_wood_preview.png       | Bin 0 -> 787 bytes
 shields/textures/shields_shield_gold.png           | Bin 0 -> 462 bytes
 shields/textures/shields_shield_gold_preview.png   | Bin 0 -> 1454 bytes
 shields/textures/shields_shield_mithril.png        | Bin 0 -> 489 bytes
 .../textures/shields_shield_mithril_preview.png    | Bin 0 -> 1480 bytes
 shields/textures/shields_shield_steel.png          | Bin 0 -> 561 bytes
 shields/textures/shields_shield_steel_preview.png  | Bin 0 -> 1545 bytes
 shields/textures/shields_shield_wood.png           | Bin 0 -> 555 bytes
 shields/textures/shields_shield_wood_preview.png   | Bin 0 -> 2055 bytes
 technic_armor/README.txt                           |   9 +
 technic_armor/depends.txt                          |   3 +
 technic_armor/description.txt                      |   1 +
 technic_armor/init.lua                             |  56 ++
 .../textures/technic_armor_boots_brass.png         | Bin 0 -> 366 bytes
 .../textures/technic_armor_boots_brass_preview.png | Bin 0 -> 309 bytes
 .../textures/technic_armor_boots_carbon.png        | Bin 0 -> 271 bytes
 .../technic_armor_boots_carbon_preview.png         | Bin 0 -> 239 bytes
 .../textures/technic_armor_boots_cast.png          | Bin 0 -> 366 bytes
 .../textures/technic_armor_boots_cast_preview.png  | Bin 0 -> 309 bytes
 .../textures/technic_armor_boots_lead.png          | Bin 0 -> 499 bytes
 .../textures/technic_armor_boots_lead_preview.png  | Bin 0 -> 423 bytes
 .../textures/technic_armor_boots_silver.png        | Bin 0 -> 339 bytes
 .../technic_armor_boots_silver_preview.png         | Bin 0 -> 304 bytes
 .../textures/technic_armor_boots_stainless.png     | Bin 0 -> 503 bytes
 .../technic_armor_boots_stainless_preview.png      | Bin 0 -> 2608 bytes
 technic_armor/textures/technic_armor_boots_tin.png | Bin 0 -> 358 bytes
 .../textures/technic_armor_boots_tin_preview.png   | Bin 0 -> 304 bytes
 .../textures/technic_armor_chestplate_brass.png    | Bin 0 -> 559 bytes
 .../technic_armor_chestplate_brass_preview.png     | Bin 0 -> 528 bytes
 .../textures/technic_armor_chestplate_carbon.png   | Bin 0 -> 534 bytes
 .../technic_armor_chestplate_carbon_preview.png    | Bin 0 -> 526 bytes
 .../textures/technic_armor_chestplate_cast.png     | Bin 0 -> 559 bytes
 .../technic_armor_chestplate_cast_preview.png      | Bin 0 -> 528 bytes
 .../textures/technic_armor_chestplate_lead.png     | Bin 0 -> 1419 bytes
 .../technic_armor_chestplate_lead_preview.png      | Bin 0 -> 936 bytes
 .../textures/technic_armor_chestplate_silver.png   | Bin 0 -> 547 bytes
 .../technic_armor_chestplate_silver_preview.png    | Bin 0 -> 521 bytes
 .../technic_armor_chestplate_stainless.png         | Bin 0 -> 966 bytes
 .../technic_armor_chestplate_stainless_preview.png | Bin 0 -> 4394 bytes
 .../textures/technic_armor_chestplate_tin.png      | Bin 0 -> 546 bytes
 .../technic_armor_chestplate_tin_preview.png       | Bin 0 -> 512 bytes
 .../textures/technic_armor_helmet_brass.png        | Bin 0 -> 533 bytes
 .../technic_armor_helmet_brass_preview.png         | Bin 0 -> 347 bytes
 .../textures/technic_armor_helmet_carbon.png       | Bin 0 -> 436 bytes
 .../technic_armor_helmet_carbon_preview.png        | Bin 0 -> 280 bytes
 .../textures/technic_armor_helmet_cast.png         | Bin 0 -> 533 bytes
 .../textures/technic_armor_helmet_cast_preview.png | Bin 0 -> 347 bytes
 .../textures/technic_armor_helmet_lead.png         | Bin 0 -> 893 bytes
 .../textures/technic_armor_helmet_lead_preview.png | Bin 0 -> 430 bytes
 .../textures/technic_armor_helmet_silver.png       | Bin 0 -> 506 bytes
 .../technic_armor_helmet_silver_preview.png        | Bin 0 -> 346 bytes
 .../textures/technic_armor_helmet_stainless.png    | Bin 0 -> 696 bytes
 .../technic_armor_helmet_stainless_preview.png     | Bin 0 -> 2109 bytes
 .../textures/technic_armor_helmet_tin.png          | Bin 0 -> 506 bytes
 .../textures/technic_armor_helmet_tin_preview.png  | Bin 0 -> 347 bytes
 .../textures/technic_armor_inv_boots_brass.png     | Bin 0 -> 196 bytes
 .../textures/technic_armor_inv_boots_carbon.png    | Bin 0 -> 192 bytes
 .../textures/technic_armor_inv_boots_cast.png      | Bin 0 -> 192 bytes
 .../textures/technic_armor_inv_boots_lead.png      | Bin 0 -> 268 bytes
 .../textures/technic_armor_inv_boots_silver.png    | Bin 0 -> 196 bytes
 .../textures/technic_armor_inv_boots_stainless.png | Bin 0 -> 216 bytes
 .../textures/technic_armor_inv_boots_tin.png       | Bin 0 -> 196 bytes
 .../technic_armor_inv_chestplate_brass.png         | Bin 0 -> 204 bytes
 .../technic_armor_inv_chestplate_carbon.png        | Bin 0 -> 205 bytes
 .../textures/technic_armor_inv_chestplate_cast.png | Bin 0 -> 205 bytes
 .../textures/technic_armor_inv_chestplate_lead.png | Bin 0 -> 361 bytes
 .../technic_armor_inv_chestplate_silver.png        | Bin 0 -> 204 bytes
 .../technic_armor_inv_chestplate_stainless.png     | Bin 0 -> 234 bytes
 .../textures/technic_armor_inv_chestplate_tin.png  | Bin 0 -> 204 bytes
 .../textures/technic_armor_inv_helmet_brass.png    | Bin 0 -> 194 bytes
 .../textures/technic_armor_inv_helmet_carbon.png   | Bin 0 -> 198 bytes
 .../textures/technic_armor_inv_helmet_cast.png     | Bin 0 -> 198 bytes
 .../textures/technic_armor_inv_helmet_lead.png     | Bin 0 -> 293 bytes
 .../textures/technic_armor_inv_helmet_silver.png   | Bin 0 -> 194 bytes
 .../technic_armor_inv_helmet_stainless.png         | Bin 0 -> 214 bytes
 .../textures/technic_armor_inv_helmet_tin.png      | Bin 0 -> 194 bytes
 .../textures/technic_armor_inv_leggings_brass.png  | Bin 0 -> 190 bytes
 .../textures/technic_armor_inv_leggings_carbon.png | Bin 0 -> 194 bytes
 .../textures/technic_armor_inv_leggings_cast.png   | Bin 0 -> 194 bytes
 .../textures/technic_armor_inv_leggings_lead.png   | Bin 0 -> 287 bytes
 .../textures/technic_armor_inv_leggings_silver.png | Bin 0 -> 190 bytes
 .../technic_armor_inv_leggings_stainless.png       | Bin 0 -> 216 bytes
 .../textures/technic_armor_inv_leggings_tin.png    | Bin 0 -> 190 bytes
 .../textures/technic_armor_inv_shield_brass.png    | Bin 0 -> 532 bytes
 .../textures/technic_armor_inv_shield_carbon.png   | Bin 0 -> 575 bytes
 .../textures/technic_armor_inv_shield_cast.png     | Bin 0 -> 546 bytes
 .../textures/technic_armor_inv_shield_lead.png     | Bin 0 -> 707 bytes
 .../textures/technic_armor_inv_shield_silver.png   | Bin 0 -> 582 bytes
 .../technic_armor_inv_shield_stainless.png         | Bin 0 -> 591 bytes
 .../textures/technic_armor_inv_shield_tin.png      | Bin 0 -> 524 bytes
 .../textures/technic_armor_leggings_brass.png      | Bin 0 -> 379 bytes
 .../technic_armor_leggings_brass_preview.png       | Bin 0 -> 359 bytes
 .../textures/technic_armor_leggings_carbon.png     | Bin 0 -> 279 bytes
 .../technic_armor_leggings_carbon_preview.png      | Bin 0 -> 265 bytes
 .../textures/technic_armor_leggings_cast.png       | Bin 0 -> 379 bytes
 .../technic_armor_leggings_cast_preview.png        | Bin 0 -> 359 bytes
 .../textures/technic_armor_leggings_lead.png       | Bin 0 -> 586 bytes
 .../technic_armor_leggings_lead_preview.png        | Bin 0 -> 535 bytes
 .../textures/technic_armor_leggings_silver.png     | Bin 0 -> 354 bytes
 .../technic_armor_leggings_silver_preview.png      | Bin 0 -> 323 bytes
 .../textures/technic_armor_leggings_stainless.png  | Bin 0 -> 501 bytes
 .../technic_armor_leggings_stainless_preview.png   | Bin 0 -> 2945 bytes
 .../textures/technic_armor_leggings_tin.png        | Bin 0 -> 371 bytes
 .../technic_armor_leggings_tin_preview.png         | Bin 0 -> 359 bytes
 .../textures/technic_armor_shield_brass.png        | Bin 0 -> 544 bytes
 .../technic_armor_shield_brass_preview.png         | Bin 0 -> 735 bytes
 .../textures/technic_armor_shield_carbon.png       | Bin 0 -> 587 bytes
 .../technic_armor_shield_carbon_preview.png        | Bin 0 -> 773 bytes
 .../textures/technic_armor_shield_cast.png         | Bin 0 -> 559 bytes
 .../textures/technic_armor_shield_cast_preview.png | Bin 0 -> 751 bytes
 .../textures/technic_armor_shield_lead.png         | Bin 0 -> 740 bytes
 .../textures/technic_armor_shield_lead_preview.png | Bin 0 -> 1146 bytes
 .../textures/technic_armor_shield_silver.png       | Bin 0 -> 596 bytes
 .../technic_armor_shield_silver_preview.png        | Bin 0 -> 784 bytes
 .../textures/technic_armor_shield_stainless.png    | Bin 0 -> 605 bytes
 .../technic_armor_shield_stainless_preview.png     | Bin 0 -> 787 bytes
 .../textures/technic_armor_shield_tin.png          | Bin 0 -> 537 bytes
 .../textures/technic_armor_shield_tin_preview.png  | Bin 0 -> 729 bytes
 wieldview/README.txt                               |  15 +
 wieldview/depends.txt                              |   2 +
 wieldview/description.txt                          |   1 +
 wieldview/init.lua                                 |  76 +++
 wieldview/transform.lua                            |  24 +
 302 files changed, 2420 insertions(+)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..6e4e459
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,8 @@
+## Generic ignorable patterns and files
+*~
+.*.swp
+*bak*
+tags
+*.vim
+armor.conf
+
diff --git a/3d_armor/README.txt b/3d_armor/README.txt
new file mode 100644
index 0000000..224f81c
--- /dev/null
+++ b/3d_armor/README.txt
@@ -0,0 +1,24 @@
+[mod] Visible Player Armor [3d_armor]
+=====================================
+
+Depends: default
+
+Recommends: inventory_plus or unified_inventory (use only one)
+
+Adds craftable armor that is visible to other players. Each armor item worn contributes to
+a player's armor group level making them less vulnerable to weapons.
+
+Armor takes damage when a player is hurt but also offers a percentage chance of healing.
+Overall level is boosted by 10% when wearing a full matching set.
+
+Fire protection added by TenPlus1 when using crystal armor if Ethereal mod active, level 1
+protects against torches, level 2 for crystal spike, level 3 for fire, level 5 for lava.
+
+Configuration
+-------------
+
+Armor can be configured by adding a file called armor.conf in 3d_armor mod and/or world directory.
+see armor.conf.example for all available options.
+
+Note: worldpath config settings override any settings made in the mod's directory.
+
diff --git a/3d_armor/admin.lua b/3d_armor/admin.lua
new file mode 100644
index 0000000..f499987
--- /dev/null
+++ b/3d_armor/admin.lua
@@ -0,0 +1,45 @@
+minetest.register_alias("adminboots","3d_armor:boots_admin")
+minetest.register_alias("adminhelmet","3d_armor:helmet_admin")
+minetest.register_alias("adminchestplate","3d_armor:chestplate_admin")
+minetest.register_alias("adminleggings","3d_armor:leggings_admin")
+
+minetest.register_tool("3d_armor:helmet_admin", {
+	description = "Admin Helmet",
+	inventory_image = "3d_armor_inv_helmet_admin.png",
+	groups = {armor_head=1000, armor_heal=1000, armor_use=0, armor_water=1, not_in_creative_inventory=1},
+	wear = 0,
+	on_drop = function(itemstack, dropper, pos)
+		return
+	end,
+})
+
+minetest.register_tool("3d_armor:chestplate_admin", {
+	description = "Admin Chestplate",
+	inventory_image = "3d_armor_inv_chestplate_admin.png",
+	groups = {armor_torso=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1},
+	wear = 0,
+	on_drop = function(itemstack, dropper, pos)
+		return
+	end,
+})
+
+minetest.register_tool("3d_armor:leggings_admin", {
+	description = "Admin Leggings",
+	inventory_image = "3d_armor_inv_leggings_admin.png",
+	groups = {armor_legs=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1},
+	wear = 0,
+	on_drop = function(itemstack, dropper, pos)
+		return
+	end,
+})
+
+minetest.register_tool("3d_armor:boots_admin", {
+	description = "Admin Boots",
+	inventory_image = "3d_armor_inv_boots_admin.png",
+	groups = {armor_feet=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1},
+	wear = 0,
+	on_drop = function(itemstack, dropper, pos)
+		return
+	end,
+})
+
diff --git a/3d_armor/armor.conf.example b/3d_armor/armor.conf.example
new file mode 100644
index 0000000..75e072d
--- /dev/null
+++ b/3d_armor/armor.conf.example
@@ -0,0 +1,61 @@
+-- Armor Configuration (defaults)
+
+-- You can remove any unwanted armor materials from this table.
+-- Note that existing armor that is removed will show up as an unknown item.
+ARMOR_MATERIALS = {
+	wood = "group:wood",
+	cactus = "default:cactus",
+	steel = "default:steel_ingot",
+	bronze = "default:bronze_ingot",
+	diamond = "default:diamond",
+	gold = "default:gold_ingot",
+	mithril = "moreores:mithril_ingot",
+	crystal = "ethereal:crystal_ingot",
+}
+
+-- Enable fire protection (defaults true if using ethereal mod)
+ARMOR_FIRE_PROTECT = false
+
+-- Fire protection nodes, (name, protection level, damage)
+ARMOR_FIRE_NODES = {
+	{"default:lava_source",     5, 4},
+	{"default:lava_flowing",    5, 4},
+	{"fire:basic_flame",        3, 4},
+	{"fire:permanent_flame",    3, 4},
+	{"ethereal:crystal_spike",  2, 1},
+	{"ethereal:fire_flower",    2, 1},
+	{"default:torch",           1, 1},
+}
+
+-- Increase this if you get initialization glitches when a player first joins.
+ARMOR_INIT_DELAY = 1
+
+-- Number of initialization attempts.
+-- Use in conjunction with ARMOR_INIT_DELAY if initialization problems persist.
+ARMOR_INIT_TIMES = 1
+
+-- Increase this if armor is not getting into bones due to server lag.
+ARMOR_BONES_DELAY = 1
+
+-- How often player armor/wield items are updated.
+ARMOR_UPDATE_TIME = 1
+
+-- Drop armor when a player dies.
+-- Uses bones mod if present, otherwise items are dropped around the player.
+ARMOR_DROP = true
+
+-- Pulverise armor when a player dies, overrides ARMOR_DROP.
+ARMOR_DESTROY = false
+
+-- You can use this to increase or decrease overall armor effectiveness,
+-- eg: ARMOR_LEVEL_MULTIPLIER = 0.5 will reduce armor level by half.
+ARMOR_LEVEL_MULTIPLIER = 1
+
+-- You can use this to increase or decrease overall armor healing,
+-- eg: ARMOR_HEAL_MULTIPLIER = 0 will disable healing altogether.
+ARMOR_HEAL_MULTIPLIER = 1
+
+-- You can use this to increase or decrease overall armor radiation protection,
+-- eg: ARMOR_RADIATION_MULTIPLIER = 0 will completely disable radiation protection.
+-- Note: patched technic mod is required
+ARMOR_RADIATION_MULTIPLIER = 1
diff --git a/3d_armor/armor.lua b/3d_armor/armor.lua
new file mode 100644
index 0000000..2bd865d
--- /dev/null
+++ b/3d_armor/armor.lua
@@ -0,0 +1,635 @@
+ARMOR_INIT_DELAY = 1
+ARMOR_INIT_TIMES = 1
+ARMOR_BONES_DELAY = 1
+ARMOR_UPDATE_TIME = 1
+ARMOR_DROP = minetest.get_modpath("bones") ~= nil
+ARMOR_DESTROY = false
+ARMOR_LEVEL_MULTIPLIER = 1
+ARMOR_HEAL_MULTIPLIER = 1
+ARMOR_RADIATION_MULTIPLIER = 1
+ARMOR_MATERIALS = {
+	wood = "group:wood",
+	cactus = "default:cactus",
+	steel = "default:steel_ingot",
+	bronze = "default:bronze_ingot",
+	diamond = "default:diamond",
+	gold = "default:gold_ingot",
+	mithril = "moreores:mithril_ingot",
+	crystal = "ethereal:crystal_ingot",
+}
+ARMOR_FIRE_PROTECT = minetest.get_modpath("ethereal") ~= nil
+ARMOR_FIRE_NODES = {
+	{"default:lava_source",     5, 8},
+	{"default:lava_flowing",    5, 8},
+	{"fire:basic_flame",        3, 4},
+	{"fire:permanent_flame",    3, 4},
+	{"ethereal:crystal_spike",  2, 1},
+	{"ethereal:fire_flower",    2, 1},
+	{"default:torch",           1, 1},
+}
+
+local skin_mod = nil
+local inv_mod = nil
+
+local modpath = minetest.get_modpath(ARMOR_MOD_NAME)
+local worldpath = minetest.get_worldpath()
+local input = io.open(modpath.."/armor.conf", "r")
+if input then
+	dofile(modpath.."/armor.conf")
+	input:close()
+	input = nil
+end
+input = io.open(worldpath.."/armor.conf", "r")
+if input then
+	dofile(worldpath.."/armor.conf")
+	input:close()
+	input = nil
+end
+if not minetest.get_modpath("moreores") then
+	ARMOR_MATERIALS.mithril = nil
+end
+if not minetest.get_modpath("ethereal") then
+	ARMOR_MATERIALS.crystal = nil
+end
+
+armor = {
+	timer = 0,
+	elements = {"head", "torso", "legs", "feet"},
+	physics = {"jump","speed","gravity"},
+	formspec = "size[8,8.5]image[2,0.75;2,4;armor_preview]"
+		.."list[current_player;main;0,4.5;8,4;]"
+		.."list[current_player;craft;4,1;3,3;]"
+		.."list[current_player;craftpreview;7,2;1,1;]"
+		.."listring[current_player;main]"
+		.."listring[current_player;craft]",
+	textures = {},
+	default_skin = "character",
+	version = "0.4.5",
+}
+
+if minetest.get_modpath("inventory_plus") then
+	inv_mod = "inventory_plus"
+	armor.formspec = "size[8,8.5]button[0,0;2,0.5;main;Back]"
+		.."image[2.5,0.75;2,4;armor_preview]"
+		.."label[5,1;Level: armor_level]"
+		.."label[5,1.5;Heal:  armor_heal]"
+		.."label[5,2;Fire:  armor_fire]"
+		.."label[5,2.5;Radiation:  armor_radiation]"
+		.."list[current_player;main;0,4.5;8,4;]"
+	if minetest.get_modpath("crafting") then
+		inventory_plus.get_formspec = function(player, page)
+		end
+	end
+elseif minetest.get_modpath("unified_inventory") then
+	inv_mod = "unified_inventory"
+	unified_inventory.register_button("armor", {
+		type = "image",
+		image = "inventory_plus_armor.png",
+	})
+	unified_inventory.register_page("armor", {
+		get_formspec = function(player, perplayer_formspec)
+			local fy = perplayer_formspec.formspec_y
+			local name = player:get_player_name()
+			local formspec = "background[0.06,"..fy..";7.92,7.52;3d_armor_ui_form.png]"
+				.."label[0,0;Armor]"
+				.."list[detached:"..name.."_armor;armor;0,"..fy..";2,3;]"
+				.."image[2.5,"..(fy - 0.25)..";2,4;"..armor.textures[name].preview.."]"
+				.."label[5.0,"..(fy + 0.0)..";Level: "..armor.def[name].level.."]"
+				.."label[5.0,"..(fy + 0.5)..";Heal:  "..armor.def[name].heal.."]"
+				.."label[5.0,"..(fy + 1.0)..";Fire:  "..armor.def[name].fire.."]"
+				.."label[5.0,"..(fy + 1.5)..";Radiation:  "..armor.def[name].radiation.."]"
+				.."listring[current_player;main]"
+				.."listring[detached:"..name.."_armor;armor]"
+			return {formspec=formspec}
+		end,
+	})
+elseif minetest.get_modpath("inventory_enhanced") then
+	inv_mod = "inventory_enhanced"
+end
+
+if minetest.get_modpath("skins") then
+	skin_mod = "skins"
+elseif minetest.get_modpath("simple_skins") then
+	skin_mod = "simple_skins"
+elseif minetest.get_modpath("u_skins") then
+	skin_mod = "u_skins"
+elseif minetest.get_modpath("wardrobe") then
+	skin_mod = "wardrobe"
+end
+
+armor.def = {
+	state = 0,
+	count = 0,
+}
+
+armor.update_player_visuals = function(self, player)
+	if not player then
+		return
+	end
+	local name = player:get_player_name()
+	if self.textures[name] then
+		default.player_set_textures(player, {
+			self.textures[name].skin,
+			self.textures[name].armor,
+			self.textures[name].wielditem,
+		})
+	end
+end
+
+armor.set_player_armor = function(self, player)
+	local name, player_inv = armor:get_valid_player(player, "[set_player_armor]")
+	if not name then
+		return
+	end
+	local armor_texture = "3d_armor_trans.png"
+	local armor_level = 0
+	local armor_heal = 0
+	local armor_fire = 0
+	local armor_water = 0
+	local armor_radiation = 0
+	local state = 0
+	local items = 0
+	local elements = {}
+	local textures = {}
+	local physics_o = {speed=1,gravity=1,jump=1}
+	local material = {type=nil, count=1}
+	local preview = armor:get_preview(name) or "character_preview.png"
+	for _,v in ipairs(self.elements) do
+		elements[v] = false
+	end
+	for i=1, 6 do
+		local stack = player_inv:get_stack("armor", i)
+		local item = stack:get_name()
+		if stack:get_count() == 1 then
+			local def = stack:get_definition()
+			for k, v in pairs(elements) do
+				if v == false then
+					local level = def.groups["armor_"..k]
+					if level then
+						local texture = def.texture or item:gsub("%:", "_")
+						table.insert(textures, texture..".png")
+						preview = preview.."^"..texture.."_preview.png"
+						armor_level = armor_level + level
+						state = state + stack:get_wear()
+						items = items + 1
+						armor_heal = armor_heal + (def.groups["armor_heal"] or 0)
+						armor_fire = armor_fire + (def.groups["armor_fire"] or 0)
+						armor_water = armor_water + (def.groups["armor_water"] or 0)
+						armor_radiation = armor_radiation + (def.groups["armor_radiation"] or 0)
+						for kk,vv in ipairs(self.physics) do
+							local o_value = def.groups["physics_"..vv]
+							if o_value then
+								physics_o[vv] = physics_o[vv] + o_value
+							end
+						end
+						local mat = string.match(item, "%:.+_(.+)$")
+						if material.type then
+							if material.type == mat then
+								material.count = material.count + 1
+							end
+						else
+							material.type = mat
+						end
+						elements[k] = true
+					end
+				end
+			end
+		end
+	end
+	if minetest.get_modpath("shields") then
+		armor_level = armor_level * 0.9
+	end
+	if material.type and material.count == #self.elements then
+		armor_level = armor_level * 1.1
+	end
+	armor_level = armor_level * ARMOR_LEVEL_MULTIPLIER
+	armor_heal = armor_heal * ARMOR_HEAL_MULTIPLIER
+	armor_radiation = armor_radiation * ARMOR_RADIATION_MULTIPLIER
+	if #textures > 0 then
+		armor_texture = table.concat(textures, "^")
+	end
+	local armor_groups = {fleshy=100}
+	if armor_level > 0 then
+		armor_groups.level = math.floor(armor_level / 20)
+		armor_groups.fleshy = 100 - armor_level
+		armor_groups.radiation = 100 - armor_radiation
+	end
+	player:set_armor_groups(armor_groups)
+	player:set_physics_override(physics_o)
+	self.textures[name].armor = armor_texture
+	self.textures[name].preview = preview
+	self.def[name].state = state
+	self.def[name].count = items
+	self.def[name].level = armor_level
+	self.def[name].heal = armor_heal
+	self.def[name].jump = physics_o.jump
+	self.def[name].speed = physics_o.speed
+	self.def[name].gravity = physics_o.gravity
+	self.def[name].fire = armor_fire
+	self.def[name].water = armor_water
+	self.def[name].radiation = armor_radiation
+	self:update_player_visuals(player)
+end
+
+armor.update_armor = function(self, player)
+	-- Legacy support: Called when armor levels are changed
+	-- Other mods can hook on to this function, see hud mod for example 
+end
+
+armor.get_player_skin = function(self, name)
+	local skin = nil
+	if skin_mod == "skins" or skin_mod == "simple_skins" then
+		skin = skins.skins[name]
+	elseif skin_mod == "u_skins" then
+		skin = u_skins.u_skins[name]
+	elseif skin_mod == "wardrobe" then
+		skin = string.gsub(wardrobe.playerSkins[name], "%.png$","")
+	end
+	return skin or armor.default_skin
+end
+
+armor.get_preview = function(self, name)
+	if skin_mod == "skins" then
+		return armor:get_player_skin(name).."_preview.png"
+	end
+end
+
+armor.get_armor_formspec = function(self, name)
+	if not armor.textures[name] then
+		minetest.log("error", "3d_armor: Player texture["..name.."] is nil [get_armor_formspec]")
+		return ""
+	end
+	if not armor.def[name] then
+		minetest.log("error", "3d_armor: Armor def["..name.."] is nil [get_armor_formspec]")
+		return ""
+	end
+	local formspec = armor.formspec.."list[detached:"..name.."_armor;armor;0,1;2,3;]"
+	formspec = formspec:gsub("armor_preview", armor.textures[name].preview)
+	formspec = formspec:gsub("armor_level", armor.def[name].level)
+	formspec = formspec:gsub("armor_heal", armor.def[name].heal)
+	formspec = formspec:gsub("armor_fire", armor.def[name].fire)
+	formspec = formspec:gsub("armor_radiation", armor.def[name].radiation)
+	return formspec
+end
+
+armor.update_inventory = function(self, player)
+	local name = armor:get_valid_player(player, "[set_player_armor]")
+	if not name or inv_mod == "inventory_enhanced" then
+		return
+	end
+	if inv_mod == "unified_inventory" then
+		if unified_inventory.current_page[name] == "armor" then
+			unified_inventory.set_inventory_formspec(player, "armor")
+		end
+	else
+		local formspec = armor:get_armor_formspec(name)
+		if inv_mod == "inventory_plus" then
+			formspec = formspec.."listring[current_player;main]"
+				.."listring[detached:"..name.."_armor;armor]"
+			local page = player:get_inventory_formspec()
+			if page:find("detached:"..name.."_armor") then
+				inventory_plus.set_inventory_formspec(player, formspec)
+			end
+		elseif not core.setting_getbool("creative_mode") then
+			player:set_inventory_formspec(formspec)
+		end
+	end
+end
+
+armor.get_valid_player = function(self, player, msg)
+	msg = msg or ""
+	if not player then
+		minetest.log("error", "3d_armor: Player reference is nil "..msg)
+		return
+	end
+	local name = player:get_player_name()
+	if not name then
+		minetest.log("error", "3d_armor: Player name is nil "..msg)
+		return
+	end
+	local pos = player:getpos()
+	local player_inv = player:get_inventory()
+	local armor_inv = minetest.get_inventory({type="detached", name=name.."_armor"})
+	if not pos then
+		minetest.log("error", "3d_armor: Player position is nil "..msg)
+		return
+	elseif not player_inv then
+		minetest.log("error", "3d_armor: Player inventory is nil "..msg)
+		return
+	elseif not armor_inv then
+		minetest.log("error", "3d_armor: Detached armor inventory is nil "..msg)
+		return
+	end
+	return name, player_inv, armor_inv, pos
+end
+
+-- Register Player Model
+
+default.player_register_model("3d_armor_character.b3d", {
+	animation_speed = 30,
+	textures = {
+		armor.default_skin..".png",
+		"3d_armor_trans.png",
+		"3d_armor_trans.png",
+	},
+	animations = {
+		stand = {x=0, y=79},
+		lay = {x=162, y=166},
+		walk = {x=168, y=187},
+		mine = {x=189, y=198},
+		walk_mine = {x=200, y=219},
+		sit = {x=81, y=160},
+	},
+})
+
+-- Register Callbacks
+
+minetest.register_on_player_receive_fields(function(player, formname, fields)
+	local name = armor:get_valid_player(player, "[on_player_receive_fields]")
+	if not name or inv_mod == "inventory_enhanced" then
+		return
+	end
+	if inv_mod == "inventory_plus" and fields.armor then
+		local formspec = armor:get_armor_formspec(name)
+		inventory_plus.set_inventory_formspec(player, formspec)
+		return
+	end
+	for field, _ in pairs(fields) do
+		if string.find(field, "skins_set") then
+			minetest.after(0, function(player)
+				local skin = armor:get_player_skin(name)
+				armor.textures[name].skin = skin..".png"
+				armor:set_player_armor(player)
+			end, player)
+		end
+	end
+end)
+
+minetest.register_on_joinplayer(function(player)
+	default.player_set_model(player, "3d_armor_character.b3d")
+	local name = player:get_player_name()
+	local player_inv = player:get_inventory()
+	local armor_inv = minetest.create_detached_inventory(name.."_armor", {
+		on_put = function(inv, listname, index, stack, player)
+			player:get_inventory():set_stack(listname, index, stack)
+			armor:set_player_armor(player)
+			armor:update_inventory(player)
+		end,
+		on_take = function(inv, listname, index, stack, player)
+			player:get_inventory():set_stack(listname, index, nil)
+			armor:set_player_armor(player)
+			armor:update_inventory(player)
+		end,
+		on_move = function(inv, from_list, from_index, to_list, to_index, count, player)
+			local plaver_inv = player:get_inventory()
+			local stack = inv:get_stack(to_list, to_index)
+			player_inv:set_stack(to_list, to_index, stack)
+			player_inv:set_stack(from_list, from_index, nil)
+			armor:set_player_armor(player)
+			armor:update_inventory(player)
+		end,
+		allow_put = function(inv, listname, index, stack, player)
+			return 1
+		end,
+		allow_take = function(inv, listname, index, stack, player)
+			return stack:get_count()
+		end,
+		allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
+			return count
+		end,
+	})
+	if inv_mod == "inventory_plus" then
+		inventory_plus.register_button(player,"armor", "Armor")
+	end
+	armor_inv:set_size("armor", 6)
+	player_inv:set_size("armor", 6)
+	for i=1, 6 do
+		local stack = player_inv:get_stack("armor", i)
+		armor_inv:set_stack("armor", i, stack)
+	end	
+	armor.def[name] = {
+		state = 0,
+		count = 0,
+		level = 0,
+		heal = 0,
+		jump = 1,
+		speed = 1,
+		gravity = 1,
+		fire = 0,
+		water = 0,
+		radiation = 0,
+	}
+	armor.textures[name] = {
+		skin = armor.default_skin..".png",
+		armor = "3d_armor_trans.png",
+		wielditem = "3d_armor_trans.png",
+		preview = armor.default_skin.."_preview.png",
+	}
+	if skin_mod == "skins" then
+		local skin = skins.skins[name]
+		if skin and skins.get_type(skin) == skins.type.MODEL then
+			armor.textures[name].skin = skin..".png"
+		end
+	elseif skin_mod == "simple_skins" then
+		local skin = skins.skins[name]
+		if skin then
+			armor.textures[name].skin = skin..".png"
+		end
+	elseif skin_mod == "u_skins" then
+		local skin = u_skins.u_skins[name]
+		if skin and u_skins.get_type(skin) == u_skins.type.MODEL then
+			armor.textures[name].skin = skin..".png"
+		end
+	elseif skin_mod == "wardrobe" then
+		local skin = wardrobe.playerSkins[name]
+		if skin then
+			armor.textures[name].skin = skin
+		end
+	end
+	if minetest.get_modpath("player_textures") then
+		local filename = minetest.get_modpath("player_textures").."/textures/player_"..name
+		local f = io.open(filename..".png")
+		if f then
+			f:close()
+			armor.textures[name].skin = "player_"..name..".png"
+		end
+	end
+	for i=1, ARMOR_INIT_TIMES do
+		minetest.after(ARMOR_INIT_DELAY * i, function(player)
+			armor:set_player_armor(player)
+			if not inv_mod then
+				armor:update_inventory(player)
+			end
+		end, player)
+	end
+end)
+
+if ARMOR_DROP == true or ARMOR_DESTROY == true then
+	armor.drop_armor = function(pos, stack)
+		local obj = minetest.add_item(pos, stack)
+		if obj then
+			obj:setvelocity({x=math.random(-1, 1), y=5, z=math.random(-1, 1)})
+		end
+	end
+	minetest.register_on_dieplayer(function(player)
+		local name, player_inv, armor_inv, pos = armor:get_valid_player(player, "[on_dieplayer]")
+		if not name then
+			return
+		end
+		local drop = {}
+		for i=1, player_inv:get_size("armor") do
+			local stack = armor_inv:get_stack("armor", i)
+			if stack:get_count() > 0 then
+				table.insert(drop, stack)
+				armor_inv:set_stack("armor", i, nil)
+				player_inv:set_stack("armor", i, nil)
+			end
+		end
+		armor:set_player_armor(player)
+		if inv_mod == "unified_inventory" then
+			unified_inventory.set_inventory_formspec(player, "craft")
+		elseif inv_mod == "inventory_plus" then
+			local formspec = inventory_plus.get_formspec(player,"main")
+			inventory_plus.set_inventory_formspec(player, formspec)
+		else
+			armor:update_inventory(player)
+		end
+		if ARMOR_DESTROY == false then
+			minetest.after(ARMOR_BONES_DELAY, function()
+				local node = minetest.get_node(vector.round(pos))
+				if node then
+					if node.name ~= "bones:bones" then
+						pos.y = pos.y+1
+						node = minetest.get_node(vector.round(pos))
+						if node.name ~= "bones:bones" then
+							minetest.log("warning", "Failed to add armor to bones node.")
+							return
+						end
+					end
+					local meta = minetest.get_meta(vector.round(pos))
+					local owner = meta:get_string("owner")
+					local inv = meta:get_inventory()
+					for _,stack in ipairs(drop) do
+						if name == owner and inv:room_for_item("main", stack) then
+							inv:add_item("main", stack)
+						else
+							armor.drop_armor(pos, stack)
+						end
+					end
+				else
+					for _,stack in ipairs(drop) do
+						armor.drop_armor(pos, stack)
+					end
+				end
+			end)
+		end
+	end)
+end
+
+minetest.register_on_player_hpchange(function(player, hp_change)
+	local name, player_inv, armor_inv = armor:get_valid_player(player, "[on_hpchange]")
+	if name and hp_change < 0 then
+
+		-- used for insta kill tools/commands like /kill (doesnt damage armor)
+		if hp_change < -100 then
+			return hp_change
+		end
+
+		local heal_max = 0
+		local state = 0
+		local items = 0
+		for i=1, 6 do
+			local stack = player_inv:get_stack("armor", i)
+			if stack:get_count() > 0 then
+				local use = stack:get_definition().groups["armor_use"] or 0
+				local heal = stack:get_definition().groups["armor_heal"] or 0
+				local item = stack:get_name()
+				stack:add_wear(use)
+				armor_inv:set_stack("armor", i, stack)
+				player_inv:set_stack("armor", i, stack)
+				state = state + stack:get_wear()
+				items = items + 1
+				if stack:get_count() == 0 then
+					local desc = minetest.registered_items[item].description
+					if desc then
+						minetest.chat_send_player(name, "Your "..desc.." got destroyed!")
+					end
+					armor:set_player_armor(player)
+					armor:update_inventory(player)
+				end
+				heal_max = heal_max + heal
+			end
+		end
+		armor.def[name].state = state
+		armor.def[name].count = items
+		heal_max = heal_max * ARMOR_HEAL_MULTIPLIER
+		if heal_max > math.random(100) then
+			hp_change = 0
+		end
+		armor:update_armor(player)
+	end
+	return hp_change
+end, true)
+
+-- Fire Protection and water breating, added by TenPlus1
+
+if ARMOR_FIRE_PROTECT == true then
+	-- override hot nodes so they do not hurt player anywhere but mod
+	for _, row in pairs(ARMOR_FIRE_NODES) do
+		if minetest.registered_nodes[row[1]] then
+			minetest.override_item(row[1], {damage_per_second = 0})
+		end
+	end
+else
+	print ("[3d_armor] Fire Nodes disabled")
+end
+
+minetest.register_globalstep(function(dtime)
+	armor.timer = armor.timer + dtime
+	if armor.timer < ARMOR_UPDATE_TIME then
+		return
+	end
+	for _,player in pairs(minetest.get_connected_players()) do
+		local name = player:get_player_name()
+		local pos = player:getpos()
+		local hp = player:get_hp()
+		-- water breathing
+		if name and armor.def[name].water > 0 then
+			if player:get_breath() < 10 then
+				player:set_breath(10)
+			end
+		end
+		-- fire protection
+		if ARMOR_FIRE_PROTECT == true
+		and name and pos and hp then
+			pos.y = pos.y + 1.4 -- head level
+			local node_head = minetest.get_node(pos).name
+			pos.y = pos.y - 1.2 -- feet level
+			local node_feet = minetest.get_node(pos).name
+			-- is player inside a hot node?
+			for _, row in pairs(ARMOR_FIRE_NODES) do
+				-- check fire protection, if not enough then get hurt
+				if row[1] == node_head or row[1] == node_feet then
+					if hp > 0 and armor.def[name].fire < row[2] then
+						hp = hp - row[3] * ARMOR_UPDATE_TIME
+						player:set_hp(hp)
+						break
+					end
+				end
+			end
+		end
+	end
+	armor.timer = 0
+end)
+
+-- kill player when command issued
+minetest.register_chatcommand("kill", {
+	params = "<name>",
+	description = "Kills player instantly",
+	func = function(name, param)
+		local player = minetest.get_player_by_name(name)
+		if player then
+			player:set_hp(-1001)
+		end
+	end,
+})
diff --git a/3d_armor/crafting_guide.txt b/3d_armor/crafting_guide.txt
new file mode 100644
index 0000000..abd1519
--- /dev/null
+++ b/3d_armor/crafting_guide.txt
@@ -0,0 +1,79 @@
+3d_armor -- Crafting Guide
+--------------------------
+
+Helmets:
+
++---+---+---+
+| X | X | X |
++---+---+---+
+| X |   | X |
++---+---+---+
+|   |   |   |
++---+---+---+
+
+[3d_armor:helmet_wood] X = [default:wood]
+[3d_armor:helmet_cactus] X = [default:cactus]
+[3d_armor:helmet_steel] X = [default:steel_ingot]
+[3d_armor:helmet_bronze] X = [default:bronze_ingot]
+[3d_armor:helmet_diamond] X = [default:diamond]
+[3d_armor:helmet_gold] X = [default:gold_ingot]
+[3d_armor:helmet_mithril] X = [moreores:mithril_ingot] *
+[3d_armor:helmet_crystal] X = [ethereal:crystal_ingot] **
+
+Chestplates:
+
++---+---+---+
+| X |   | X |
++---+---+---+
+| X | X | X |
++---+---+---+
+| X | X | X |
++---+---+---+
+
+[3d_armor:chestplate_wood] X = [default:wood]
+[3d_armor:chestplate_cactus] X = [default:cactus]
+[3d_armor:chestplate_steel] X = [default:steel_ingot]
+[3d_armor:chestplate_bronze] X = [default:bronze_ingot]
+[3d_armor:chestplate_diamond] X = [default:diamond]
+[3d_armor:chestplate_gold] X = [default:gold_ingot]
+[3d_armor:chestplate_mithril] X = [moreores:mithril_ingot] *
+[3d_armor:chestplate_crystal] X = [ethereal:crystal_ingot] **
+
+Leggings:
+
++---+---+---+
+| X | X | X |
++---+---+---+
+| X |   | X |
++---+---+---+
+| X |   | X |
++---+---+---+
+
+[3d_armor:leggings_wood] X = [default:wood]
+[3d_armor:leggings_cactus] X = [default:cactus]
+[3d_armor:leggings_steel] X = [default:steel_ingot]
+[3d_armor:leggings_bronze] X = [default:bronze_ingot]
+[3d_armor:leggings_diamond] X = [default:diamond]
+[3d_armor:leggings_gold] X = [default:gold_ingot]
+[3d_armor:leggings_mithril] X = [moreores:mithril_ingot] *
+[3d_armor:leggings_crystal] X = [ethereal:crystal_ingot] **
+
+Boots:
+
++---+---+---+
+| X |   | X |
++---+---+---+
+| X |   | X |
++---+---+---+
+
+[3d_armor:boots_wood] X = [default:wood]
+[3d_armor:boots_cactus] X = [default:cactus]
+[3d_armor:boots_steel] X = [default:steel_ingot]
+[3d_armor:boots_bronze] X = [default:bronze_ingot
+[3d_armor:boots_diamond] X = [default:diamond]
+[3d_armor:boots_gold] X = [default:gold_ingot]
+[3d_armor:boots_mithril] X = [moreores:mithril_ingot] *
+[3d_armor:boots_crystal] X = [ethereal:crystal_ingot] **
+
+ * Requires moreores mod by Calinou - https://forum.minetest.net/viewtopic.php?id=549
+** Requires ethereal mod by Chinchow & TenPlus1 - https://github.com/tenplus1/ethereal
diff --git a/3d_armor/depends.txt b/3d_armor/depends.txt
new file mode 100644
index 0000000..3acf737
--- /dev/null
+++ b/3d_armor/depends.txt
@@ -0,0 +1,6 @@
+default
+inventory_plus?
+unified_inventory?
+fire?
+ethereal?
+bakedclay?
diff --git a/3d_armor/description.txt b/3d_armor/description.txt
new file mode 100644
index 0000000..b0a9b0a
--- /dev/null
+++ b/3d_armor/description.txt
@@ -0,0 +1 @@
+Adds craftable armor that is visible to other players.
diff --git a/3d_armor/init.lua b/3d_armor/init.lua
new file mode 100644
index 0000000..4a2116f
--- /dev/null
+++ b/3d_armor/init.lua
@@ -0,0 +1,254 @@
+ARMOR_MOD_NAME = minetest.get_current_modname()
+dofile(minetest.get_modpath(ARMOR_MOD_NAME).."/armor.lua")
+dofile(minetest.get_modpath(ARMOR_MOD_NAME).."/admin.lua")
+
+if ARMOR_MATERIALS.wood then
+	minetest.register_tool("3d_armor:helmet_wood", {
+		description = "Wood Helmet",
+		inventory_image = "3d_armor_inv_helmet_wood.png",
+		groups = {armor_head=5, armor_heal=0, armor_use=2000},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:chestplate_wood", {
+		description = "Wood Chestplate",
+		inventory_image = "3d_armor_inv_chestplate_wood.png",
+		groups = {armor_torso=10, armor_heal=0, armor_use=2000},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:leggings_wood", {
+		description = "Wood Leggings",
+		inventory_image = "3d_armor_inv_leggings_wood.png",
+		groups = {armor_legs=5, armor_heal=0, armor_use=2000},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:boots_wood", {
+		description = "Wood Boots",
+		inventory_image = "3d_armor_inv_boots_wood.png",
+		groups = {armor_feet=5, armor_heal=0, armor_use=2000},
+		wear = 0,
+	})
+end
+
+if ARMOR_MATERIALS.cactus then
+	minetest.register_tool("3d_armor:helmet_cactus", {
+		description = "Cactuc Helmet",
+		inventory_image = "3d_armor_inv_helmet_cactus.png",
+		groups = {armor_head=5, armor_heal=0, armor_use=1000},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:chestplate_cactus", {
+		description = "Cactus Chestplate",
+		inventory_image = "3d_armor_inv_chestplate_cactus.png",
+		groups = {armor_torso=10, armor_heal=0, armor_use=1000},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:leggings_cactus", {
+		description = "Cactus Leggings",
+		inventory_image = "3d_armor_inv_leggings_cactus.png",
+		groups = {armor_legs=5, armor_heal=0, armor_use=1000},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:boots_cactus", {
+		description = "Cactus Boots",
+		inventory_image = "3d_armor_inv_boots_cactus.png",
+		groups = {armor_feet=5, armor_heal=0, armor_use=2000},
+		wear = 0,
+	})
+end
+
+if ARMOR_MATERIALS.steel then
+	minetest.register_tool("3d_armor:helmet_steel", {
+		description = "Steel Helmet",
+		inventory_image = "3d_armor_inv_helmet_steel.png",
+		groups = {armor_head=10, armor_heal=0, armor_use=500},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:chestplate_steel", {
+		description = "Steel Chestplate",
+		inventory_image = "3d_armor_inv_chestplate_steel.png",
+		groups = {armor_torso=15, armor_heal=0, armor_use=500},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:leggings_steel", {
+		description = "Steel Leggings",
+		inventory_image = "3d_armor_inv_leggings_steel.png",
+		groups = {armor_legs=15, armor_heal=0, armor_use=500},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:boots_steel", {
+		description = "Steel Boots",
+		inventory_image = "3d_armor_inv_boots_steel.png",
+		groups = {armor_feet=10, armor_heal=0, armor_use=500},
+		wear = 0,
+	})
+end
+
+if ARMOR_MATERIALS.bronze then
+	minetest.register_tool("3d_armor:helmet_bronze", {
+		description = "Bronze Helmet",
+		inventory_image = "3d_armor_inv_helmet_bronze.png",
+		groups = {armor_head=10, armor_heal=6, armor_use=250},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:chestplate_bronze", {
+		description = "Bronze Chestplate",
+		inventory_image = "3d_armor_inv_chestplate_bronze.png",
+		groups = {armor_torso=15, armor_heal=6, armor_use=250},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:leggings_bronze", {
+		description = "Bronze Leggings",
+		inventory_image = "3d_armor_inv_leggings_bronze.png",
+		groups = {armor_legs=15, armor_heal=6, armor_use=250},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:boots_bronze", {
+		description = "Bronze Boots",
+		inventory_image = "3d_armor_inv_boots_bronze.png",
+		groups = {armor_feet=10, armor_heal=6, armor_use=250},
+		wear = 0,
+	})
+end
+
+if ARMOR_MATERIALS.diamond then
+	minetest.register_tool("3d_armor:helmet_diamond", {
+		description = "Diamond Helmet",
+		inventory_image = "3d_armor_inv_helmet_diamond.png",
+		groups = {armor_head=15, armor_heal=12, armor_use=100},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:chestplate_diamond", {
+		description = "Diamond Chestplate",
+		inventory_image = "3d_armor_inv_chestplate_diamond.png",
+		groups = {armor_torso=20, armor_heal=12, armor_use=100},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:leggings_diamond", {
+		description = "Diamond Leggings",
+		inventory_image = "3d_armor_inv_leggings_diamond.png",
+		groups = {armor_legs=20, armor_heal=12, armor_use=100},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:boots_diamond", {
+		description = "Diamond Boots",
+		inventory_image = "3d_armor_inv_boots_diamond.png",
+		groups = {armor_feet=15, armor_heal=12, armor_use=100},
+		wear = 0,
+	})
+end
+
+if ARMOR_MATERIALS.gold then
+	minetest.register_tool("3d_armor:helmet_gold", {
+		description = "Gold Helmet",
+		inventory_image = "3d_armor_inv_helmet_gold.png",
+		groups = {armor_head=10, armor_heal=6, armor_use=250},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:chestplate_gold", {
+		description = "Gold Chestplate",
+		inventory_image = "3d_armor_inv_chestplate_gold.png",
+		groups = {armor_torso=15, armor_heal=6, armor_use=250},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:leggings_gold", {
+		description = "Gold Leggings",
+		inventory_image = "3d_armor_inv_leggings_gold.png",
+		groups = {armor_legs=15, armor_heal=6, armor_use=250},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:boots_gold", {
+		description = "Gold Boots",
+		inventory_image = "3d_armor_inv_boots_gold.png",
+		groups = {armor_feet=10, armor_heal=6, armor_use=250},
+		wear = 0,
+	})
+end
+
+if ARMOR_MATERIALS.mithril then
+	minetest.register_tool("3d_armor:helmet_mithril", {
+		description = "Mithril Helmet",
+		inventory_image = "3d_armor_inv_helmet_mithril.png",
+		groups = {armor_head=15, armor_heal=12, armor_use=50},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:chestplate_mithril", {
+		description = "Mithril Chestplate",
+		inventory_image = "3d_armor_inv_chestplate_mithril.png",
+		groups = {armor_torso=20, armor_heal=12, armor_use=50},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:leggings_mithril", {
+		description = "Mithril Leggings",
+		inventory_image = "3d_armor_inv_leggings_mithril.png",
+		groups = {armor_legs=20, armor_heal=12, armor_use=50},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:boots_mithril", {
+		description = "Mithril Boots",
+		inventory_image = "3d_armor_inv_boots_mithril.png",
+		groups = {armor_feet=15, armor_heal=12, armor_use=50},
+		wear = 0,
+	})
+end
+
+if ARMOR_MATERIALS.crystal then
+	minetest.register_tool("3d_armor:helmet_crystal", {
+		description = "Crystal Helmet",
+		inventory_image = "3d_armor_inv_helmet_crystal.png",
+		groups = {armor_head=15, armor_heal=12, armor_use=50, armor_fire=1},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:chestplate_crystal", {
+		description = "Crystal Chestplate",
+		inventory_image = "3d_armor_inv_chestplate_crystal.png",
+		groups = {armor_torso=20, armor_heal=12, armor_use=50, armor_fire=1},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:leggings_crystal", {
+		description = "Crystal Leggings",
+		inventory_image = "3d_armor_inv_leggings_crystal.png",
+		groups = {armor_legs=20, armor_heal=12, armor_use=50, armor_fire=1},
+		wear = 0,
+	})
+	minetest.register_tool("3d_armor:boots_crystal", {
+		description = "Crystal Boots",
+		inventory_image = "3d_armor_inv_boots_crystal.png",
+		groups = {armor_feet=15, armor_heal=12, armor_use=50, physics_speed=1, physics_jump=0.5, armor_fire=1},
+		wear = 0,
+	})
+end
+
+for k, v in pairs(ARMOR_MATERIALS) do
+	minetest.register_craft({
+		output = "3d_armor:helmet_"..k,
+		recipe = {
+			{v, v, v},
+			{v, "", v},
+			{"", "", ""},
+		},
+	})
+	minetest.register_craft({
+		output = "3d_armor:chestplate_"..k,
+		recipe = {
+			{v, "", v},
+			{v, v, v},
+			{v, v, v},
+		},
+	})
+	minetest.register_craft({
+		output = "3d_armor:leggings_"..k,
+		recipe = {
+			{v, v, v},
+			{v, "", v},
+			{v, "", v},
+		},
+	})
+	minetest.register_craft({
+		output = "3d_armor:boots_"..k,
+		recipe = {
+			{v, "", v},
+			{v, "", v},
+		},
+	})
+end
+
diff --git a/3d_armor/models/3d_armor_character.b3d b/3d_armor/models/3d_armor_character.b3d
new file mode 100644
index 0000000..a24cb65
Binary files /dev/null and b/3d_armor/models/3d_armor_character.b3d differ
diff --git a/3d_armor/models/3d_armor_character.blend b/3d_armor/models/3d_armor_character.blend
new file mode 100644
index 0000000..d2031ce
Binary files /dev/null and b/3d_armor/models/3d_armor_character.blend differ
diff --git a/3d_armor/textures/3d_armor_boots_admin.png b/3d_armor/textures/3d_armor_boots_admin.png
new file mode 100644
index 0000000..a05e4c5
Binary files /dev/null and b/3d_armor/textures/3d_armor_boots_admin.png differ
diff --git a/3d_armor/textures/3d_armor_boots_admin_preview.png b/3d_armor/textures/3d_armor_boots_admin_preview.png
new file mode 100644
index 0000000..d61ab25
Binary files /dev/null and b/3d_armor/textures/3d_armor_boots_admin_preview.png differ
diff --git a/3d_armor/textures/3d_armor_boots_bronze.png b/3d_armor/textures/3d_armor_boots_bronze.png
new file mode 100644
index 0000000..7cfe378
Binary files /dev/null and b/3d_armor/textures/3d_armor_boots_bronze.png differ
diff --git a/3d_armor/textures/3d_armor_boots_bronze_preview.png b/3d_armor/textures/3d_armor_boots_bronze_preview.png
new file mode 100644
index 0000000..6da8019
Binary files /dev/null and b/3d_armor/textures/3d_armor_boots_bronze_preview.png differ
diff --git a/3d_armor/textures/3d_armor_boots_cactus.png b/3d_armor/textures/3d_armor_boots_cactus.png
new file mode 100644
index 0000000..7dc43e3
Binary files /dev/null and b/3d_armor/textures/3d_armor_boots_cactus.png differ
diff --git a/3d_armor/textures/3d_armor_boots_cactus_preview.png b/3d_armor/textures/3d_armor_boots_cactus_preview.png
new file mode 100644
index 0000000..33f9221
Binary files /dev/null and b/3d_armor/textures/3d_armor_boots_cactus_preview.png differ
diff --git a/3d_armor/textures/3d_armor_boots_crystal.png b/3d_armor/textures/3d_armor_boots_crystal.png
new file mode 100644
index 0000000..50bbf20
Binary files /dev/null and b/3d_armor/textures/3d_armor_boots_crystal.png differ
diff --git a/3d_armor/textures/3d_armor_boots_crystal_preview.png b/3d_armor/textures/3d_armor_boots_crystal_preview.png
new file mode 100644
index 0000000..a3ab7d1
Binary files /dev/null and b/3d_armor/textures/3d_armor_boots_crystal_preview.png differ
diff --git a/3d_armor/textures/3d_armor_boots_diamond.png b/3d_armor/textures/3d_armor_boots_diamond.png
new file mode 100644
index 0000000..6678b16
Binary files /dev/null and b/3d_armor/textures/3d_armor_boots_diamond.png differ
diff --git a/3d_armor/textures/3d_armor_boots_diamond_preview.png b/3d_armor/textures/3d_armor_boots_diamond_preview.png
new file mode 100644
index 0000000..eb99c4e
Binary files /dev/null and b/3d_armor/textures/3d_armor_boots_diamond_preview.png differ
diff --git a/3d_armor/textures/3d_armor_boots_gold.png b/3d_armor/textures/3d_armor_boots_gold.png
new file mode 100644
index 0000000..2de3966
Binary files /dev/null and b/3d_armor/textures/3d_armor_boots_gold.png differ
diff --git a/3d_armor/textures/3d_armor_boots_gold_preview.png b/3d_armor/textures/3d_armor_boots_gold_preview.png
new file mode 100644
index 0000000..5ca40ac
Binary files /dev/null and b/3d_armor/textures/3d_armor_boots_gold_preview.png differ
diff --git a/3d_armor/textures/3d_armor_boots_mithril.png b/3d_armor/textures/3d_armor_boots_mithril.png
new file mode 100644
index 0000000..3e4173b
Binary files /dev/null and b/3d_armor/textures/3d_armor_boots_mithril.png differ
diff --git a/3d_armor/textures/3d_armor_boots_mithril_preview.png b/3d_armor/textures/3d_armor_boots_mithril_preview.png
new file mode 100644
index 0000000..b0c4684
Binary files /dev/null and b/3d_armor/textures/3d_armor_boots_mithril_preview.png differ
diff --git a/3d_armor/textures/3d_armor_boots_steel.png b/3d_armor/textures/3d_armor_boots_steel.png
new file mode 100644
index 0000000..4664be5
Binary files /dev/null and b/3d_armor/textures/3d_armor_boots_steel.png differ
diff --git a/3d_armor/textures/3d_armor_boots_steel_preview.png b/3d_armor/textures/3d_armor_boots_steel_preview.png
new file mode 100644
index 0000000..25fc47a
Binary files /dev/null and b/3d_armor/textures/3d_armor_boots_steel_preview.png differ
diff --git a/3d_armor/textures/3d_armor_boots_wood.png b/3d_armor/textures/3d_armor_boots_wood.png
new file mode 100644
index 0000000..0ec5d6c
Binary files /dev/null and b/3d_armor/textures/3d_armor_boots_wood.png differ
diff --git a/3d_armor/textures/3d_armor_boots_wood_preview.png b/3d_armor/textures/3d_armor_boots_wood_preview.png
new file mode 100644
index 0000000..53d6d15
Binary files /dev/null and b/3d_armor/textures/3d_armor_boots_wood_preview.png differ
diff --git a/3d_armor/textures/3d_armor_chestplate_admin.png b/3d_armor/textures/3d_armor_chestplate_admin.png
new file mode 100644
index 0000000..404d6e8
Binary files /dev/null and b/3d_armor/textures/3d_armor_chestplate_admin.png differ
diff --git a/3d_armor/textures/3d_armor_chestplate_admin_preview.png b/3d_armor/textures/3d_armor_chestplate_admin_preview.png
new file mode 100644
index 0000000..09325a5
Binary files /dev/null and b/3d_armor/textures/3d_armor_chestplate_admin_preview.png differ
diff --git a/3d_armor/textures/3d_armor_chestplate_bronze.png b/3d_armor/textures/3d_armor_chestplate_bronze.png
new file mode 100644
index 0000000..d9c7267
Binary files /dev/null and b/3d_armor/textures/3d_armor_chestplate_bronze.png differ
diff --git a/3d_armor/textures/3d_armor_chestplate_bronze_preview.png b/3d_armor/textures/3d_armor_chestplate_bronze_preview.png
new file mode 100644
index 0000000..90d887a
Binary files /dev/null and b/3d_armor/textures/3d_armor_chestplate_bronze_preview.png differ
diff --git a/3d_armor/textures/3d_armor_chestplate_cactus.png b/3d_armor/textures/3d_armor_chestplate_cactus.png
new file mode 100644
index 0000000..ee433de
Binary files /dev/null and b/3d_armor/textures/3d_armor_chestplate_cactus.png differ
diff --git a/3d_armor/textures/3d_armor_chestplate_cactus_preview.png b/3d_armor/textures/3d_armor_chestplate_cactus_preview.png
new file mode 100644
index 0000000..32bf6f6
Binary files /dev/null and b/3d_armor/textures/3d_armor_chestplate_cactus_preview.png differ
diff --git a/3d_armor/textures/3d_armor_chestplate_crystal.png b/3d_armor/textures/3d_armor_chestplate_crystal.png
new file mode 100644
index 0000000..e36aa49
Binary files /dev/null and b/3d_armor/textures/3d_armor_chestplate_crystal.png differ
diff --git a/3d_armor/textures/3d_armor_chestplate_crystal_preview.png b/3d_armor/textures/3d_armor_chestplate_crystal_preview.png
new file mode 100644
index 0000000..c43015c
Binary files /dev/null and b/3d_armor/textures/3d_armor_chestplate_crystal_preview.png differ
diff --git a/3d_armor/textures/3d_armor_chestplate_diamond.png b/3d_armor/textures/3d_armor_chestplate_diamond.png
new file mode 100644
index 0000000..81a7b21
Binary files /dev/null and b/3d_armor/textures/3d_armor_chestplate_diamond.png differ
diff --git a/3d_armor/textures/3d_armor_chestplate_diamond_preview.png b/3d_armor/textures/3d_armor_chestplate_diamond_preview.png
new file mode 100644
index 0000000..17e2eb8
Binary files /dev/null and b/3d_armor/textures/3d_armor_chestplate_diamond_preview.png differ
diff --git a/3d_armor/textures/3d_armor_chestplate_gold.png b/3d_armor/textures/3d_armor_chestplate_gold.png
new file mode 100644
index 0000000..91b1631
Binary files /dev/null and b/3d_armor/textures/3d_armor_chestplate_gold.png differ
diff --git a/3d_armor/textures/3d_armor_chestplate_gold_preview.png b/3d_armor/textures/3d_armor_chestplate_gold_preview.png
new file mode 100644
index 0000000..cb11321
Binary files /dev/null and b/3d_armor/textures/3d_armor_chestplate_gold_preview.png differ
diff --git a/3d_armor/textures/3d_armor_chestplate_mithril.png b/3d_armor/textures/3d_armor_chestplate_mithril.png
new file mode 100644
index 0000000..2bbeab8
Binary files /dev/null and b/3d_armor/textures/3d_armor_chestplate_mithril.png differ
diff --git a/3d_armor/textures/3d_armor_chestplate_mithril_preview.png b/3d_armor/textures/3d_armor_chestplate_mithril_preview.png
new file mode 100644
index 0000000..eca051c
Binary files /dev/null and b/3d_armor/textures/3d_armor_chestplate_mithril_preview.png differ
diff --git a/3d_armor/textures/3d_armor_chestplate_steel.png b/3d_armor/textures/3d_armor_chestplate_steel.png
new file mode 100644
index 0000000..23cdbda
Binary files /dev/null and b/3d_armor/textures/3d_armor_chestplate_steel.png differ
diff --git a/3d_armor/textures/3d_armor_chestplate_steel_preview.png b/3d_armor/textures/3d_armor_chestplate_steel_preview.png
new file mode 100644
index 0000000..0e45907
Binary files /dev/null and b/3d_armor/textures/3d_armor_chestplate_steel_preview.png differ
diff --git a/3d_armor/textures/3d_armor_chestplate_wood.png b/3d_armor/textures/3d_armor_chestplate_wood.png
new file mode 100644
index 0000000..ea7a1d7
Binary files /dev/null and b/3d_armor/textures/3d_armor_chestplate_wood.png differ
diff --git a/3d_armor/textures/3d_armor_chestplate_wood_preview.png b/3d_armor/textures/3d_armor_chestplate_wood_preview.png
new file mode 100644
index 0000000..cdca575
Binary files /dev/null and b/3d_armor/textures/3d_armor_chestplate_wood_preview.png differ
diff --git a/3d_armor/textures/3d_armor_helmet_admin.png b/3d_armor/textures/3d_armor_helmet_admin.png
new file mode 100644
index 0000000..3a75a85
Binary files /dev/null and b/3d_armor/textures/3d_armor_helmet_admin.png differ
diff --git a/3d_armor/textures/3d_armor_helmet_admin_preview.png b/3d_armor/textures/3d_armor_helmet_admin_preview.png
new file mode 100644
index 0000000..51ecb9b
Binary files /dev/null and b/3d_armor/textures/3d_armor_helmet_admin_preview.png differ
diff --git a/3d_armor/textures/3d_armor_helmet_bronze.png b/3d_armor/textures/3d_armor_helmet_bronze.png
new file mode 100644
index 0000000..91d15d7
Binary files /dev/null and b/3d_armor/textures/3d_armor_helmet_bronze.png differ
diff --git a/3d_armor/textures/3d_armor_helmet_bronze_preview.png b/3d_armor/textures/3d_armor_helmet_bronze_preview.png
new file mode 100644
index 0000000..61fa1af
Binary files /dev/null and b/3d_armor/textures/3d_armor_helmet_bronze_preview.png differ
diff --git a/3d_armor/textures/3d_armor_helmet_cactus.png b/3d_armor/textures/3d_armor_helmet_cactus.png
new file mode 100644
index 0000000..3021f20
Binary files /dev/null and b/3d_armor/textures/3d_armor_helmet_cactus.png differ
diff --git a/3d_armor/textures/3d_armor_helmet_cactus_preview.png b/3d_armor/textures/3d_armor_helmet_cactus_preview.png
new file mode 100644
index 0000000..4e3bfe2
Binary files /dev/null and b/3d_armor/textures/3d_armor_helmet_cactus_preview.png differ
diff --git a/3d_armor/textures/3d_armor_helmet_crystal.png b/3d_armor/textures/3d_armor_helmet_crystal.png
new file mode 100644
index 0000000..7a2c774
Binary files /dev/null and b/3d_armor/textures/3d_armor_helmet_crystal.png differ
diff --git a/3d_armor/textures/3d_armor_helmet_crystal_preview.png b/3d_armor/textures/3d_armor_helmet_crystal_preview.png
new file mode 100644
index 0000000..451a15d
Binary files /dev/null and b/3d_armor/textures/3d_armor_helmet_crystal_preview.png differ
diff --git a/3d_armor/textures/3d_armor_helmet_diamond.png b/3d_armor/textures/3d_armor_helmet_diamond.png
new file mode 100644
index 0000000..e1768b3
Binary files /dev/null and b/3d_armor/textures/3d_armor_helmet_diamond.png differ
diff --git a/3d_armor/textures/3d_armor_helmet_diamond_preview.png b/3d_armor/textures/3d_armor_helmet_diamond_preview.png
new file mode 100644
index 0000000..33a273a
Binary files /dev/null and b/3d_armor/textures/3d_armor_helmet_diamond_preview.png differ
diff --git a/3d_armor/textures/3d_armor_helmet_gold.png b/3d_armor/textures/3d_armor_helmet_gold.png
new file mode 100644
index 0000000..4d701b4
Binary files /dev/null and b/3d_armor/textures/3d_armor_helmet_gold.png differ
diff --git a/3d_armor/textures/3d_armor_helmet_gold_preview.png b/3d_armor/textures/3d_armor_helmet_gold_preview.png
new file mode 100644
index 0000000..d2e7ac8
Binary files /dev/null and b/3d_armor/textures/3d_armor_helmet_gold_preview.png differ
diff --git a/3d_armor/textures/3d_armor_helmet_mithril.png b/3d_armor/textures/3d_armor_helmet_mithril.png
new file mode 100644
index 0000000..916e69d
Binary files /dev/null and b/3d_armor/textures/3d_armor_helmet_mithril.png differ
diff --git a/3d_armor/textures/3d_armor_helmet_mithril_preview.png b/3d_armor/textures/3d_armor_helmet_mithril_preview.png
new file mode 100644
index 0000000..a331f6a
Binary files /dev/null and b/3d_armor/textures/3d_armor_helmet_mithril_preview.png differ
diff --git a/3d_armor/textures/3d_armor_helmet_steel.png b/3d_armor/textures/3d_armor_helmet_steel.png
new file mode 100644
index 0000000..e0a5afd
Binary files /dev/null and b/3d_armor/textures/3d_armor_helmet_steel.png differ
diff --git a/3d_armor/textures/3d_armor_helmet_steel_preview.png b/3d_armor/textures/3d_armor_helmet_steel_preview.png
new file mode 100644
index 0000000..2c8721c
Binary files /dev/null and b/3d_armor/textures/3d_armor_helmet_steel_preview.png differ
diff --git a/3d_armor/textures/3d_armor_helmet_wood.png b/3d_armor/textures/3d_armor_helmet_wood.png
new file mode 100644
index 0000000..fd5f712
Binary files /dev/null and b/3d_armor/textures/3d_armor_helmet_wood.png differ
diff --git a/3d_armor/textures/3d_armor_helmet_wood_preview.png b/3d_armor/textures/3d_armor_helmet_wood_preview.png
new file mode 100644
index 0000000..fe1cead
Binary files /dev/null and b/3d_armor/textures/3d_armor_helmet_wood_preview.png differ
diff --git a/3d_armor/textures/3d_armor_inv_boots_admin.png b/3d_armor/textures/3d_armor_inv_boots_admin.png
new file mode 100644
index 0000000..f94c844
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_boots_admin.png differ
diff --git a/3d_armor/textures/3d_armor_inv_boots_bronze.png b/3d_armor/textures/3d_armor_inv_boots_bronze.png
new file mode 100644
index 0000000..7f5f968
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_boots_bronze.png differ
diff --git a/3d_armor/textures/3d_armor_inv_boots_cactus.png b/3d_armor/textures/3d_armor_inv_boots_cactus.png
new file mode 100644
index 0000000..b665eb8
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_boots_cactus.png differ
diff --git a/3d_armor/textures/3d_armor_inv_boots_crystal.png b/3d_armor/textures/3d_armor_inv_boots_crystal.png
new file mode 100644
index 0000000..5709a17
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_boots_crystal.png differ
diff --git a/3d_armor/textures/3d_armor_inv_boots_diamond.png b/3d_armor/textures/3d_armor_inv_boots_diamond.png
new file mode 100644
index 0000000..6bcd620
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_boots_diamond.png differ
diff --git a/3d_armor/textures/3d_armor_inv_boots_gold.png b/3d_armor/textures/3d_armor_inv_boots_gold.png
new file mode 100644
index 0000000..8598cf9
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_boots_gold.png differ
diff --git a/3d_armor/textures/3d_armor_inv_boots_mithril.png b/3d_armor/textures/3d_armor_inv_boots_mithril.png
new file mode 100644
index 0000000..a4c180d
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_boots_mithril.png differ
diff --git a/3d_armor/textures/3d_armor_inv_boots_steel.png b/3d_armor/textures/3d_armor_inv_boots_steel.png
new file mode 100644
index 0000000..77286b5
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_boots_steel.png differ
diff --git a/3d_armor/textures/3d_armor_inv_boots_wood.png b/3d_armor/textures/3d_armor_inv_boots_wood.png
new file mode 100644
index 0000000..66993a1
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_boots_wood.png differ
diff --git a/3d_armor/textures/3d_armor_inv_chestplate_admin.png b/3d_armor/textures/3d_armor_inv_chestplate_admin.png
new file mode 100644
index 0000000..29f3897
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_chestplate_admin.png differ
diff --git a/3d_armor/textures/3d_armor_inv_chestplate_bronze.png b/3d_armor/textures/3d_armor_inv_chestplate_bronze.png
new file mode 100644
index 0000000..da2f3e0
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_chestplate_bronze.png differ
diff --git a/3d_armor/textures/3d_armor_inv_chestplate_cactus.png b/3d_armor/textures/3d_armor_inv_chestplate_cactus.png
new file mode 100644
index 0000000..a695e78
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_chestplate_cactus.png differ
diff --git a/3d_armor/textures/3d_armor_inv_chestplate_crystal.png b/3d_armor/textures/3d_armor_inv_chestplate_crystal.png
new file mode 100644
index 0000000..4d23066
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_chestplate_crystal.png differ
diff --git a/3d_armor/textures/3d_armor_inv_chestplate_diamond.png b/3d_armor/textures/3d_armor_inv_chestplate_diamond.png
new file mode 100644
index 0000000..eee800b
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_chestplate_diamond.png differ
diff --git a/3d_armor/textures/3d_armor_inv_chestplate_gold.png b/3d_armor/textures/3d_armor_inv_chestplate_gold.png
new file mode 100644
index 0000000..1dddc3d
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_chestplate_gold.png differ
diff --git a/3d_armor/textures/3d_armor_inv_chestplate_mithril.png b/3d_armor/textures/3d_armor_inv_chestplate_mithril.png
new file mode 100644
index 0000000..e4c50a7
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_chestplate_mithril.png differ
diff --git a/3d_armor/textures/3d_armor_inv_chestplate_steel.png b/3d_armor/textures/3d_armor_inv_chestplate_steel.png
new file mode 100644
index 0000000..421b3e3
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_chestplate_steel.png differ
diff --git a/3d_armor/textures/3d_armor_inv_chestplate_wood.png b/3d_armor/textures/3d_armor_inv_chestplate_wood.png
new file mode 100644
index 0000000..434374f
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_chestplate_wood.png differ
diff --git a/3d_armor/textures/3d_armor_inv_helmet_admin.png b/3d_armor/textures/3d_armor_inv_helmet_admin.png
new file mode 100644
index 0000000..e019702
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_helmet_admin.png differ
diff --git a/3d_armor/textures/3d_armor_inv_helmet_bronze.png b/3d_armor/textures/3d_armor_inv_helmet_bronze.png
new file mode 100644
index 0000000..53cdaf1
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_helmet_bronze.png differ
diff --git a/3d_armor/textures/3d_armor_inv_helmet_cactus.png b/3d_armor/textures/3d_armor_inv_helmet_cactus.png
new file mode 100644
index 0000000..746c264
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_helmet_cactus.png differ
diff --git a/3d_armor/textures/3d_armor_inv_helmet_crystal.png b/3d_armor/textures/3d_armor_inv_helmet_crystal.png
new file mode 100644
index 0000000..8a29eec
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_helmet_crystal.png differ
diff --git a/3d_armor/textures/3d_armor_inv_helmet_diamond.png b/3d_armor/textures/3d_armor_inv_helmet_diamond.png
new file mode 100644
index 0000000..2eb3a5c
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_helmet_diamond.png differ
diff --git a/3d_armor/textures/3d_armor_inv_helmet_gold.png b/3d_armor/textures/3d_armor_inv_helmet_gold.png
new file mode 100644
index 0000000..e8f83d8
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_helmet_gold.png differ
diff --git a/3d_armor/textures/3d_armor_inv_helmet_mithril.png b/3d_armor/textures/3d_armor_inv_helmet_mithril.png
new file mode 100644
index 0000000..abdd0ca
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_helmet_mithril.png differ
diff --git a/3d_armor/textures/3d_armor_inv_helmet_steel.png b/3d_armor/textures/3d_armor_inv_helmet_steel.png
new file mode 100644
index 0000000..4c636f2
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_helmet_steel.png differ
diff --git a/3d_armor/textures/3d_armor_inv_helmet_wood.png b/3d_armor/textures/3d_armor_inv_helmet_wood.png
new file mode 100644
index 0000000..e8ee2fe
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_helmet_wood.png differ
diff --git a/3d_armor/textures/3d_armor_inv_leggings_admin.png b/3d_armor/textures/3d_armor_inv_leggings_admin.png
new file mode 100644
index 0000000..04b64c0
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_leggings_admin.png differ
diff --git a/3d_armor/textures/3d_armor_inv_leggings_bronze.png b/3d_armor/textures/3d_armor_inv_leggings_bronze.png
new file mode 100644
index 0000000..b574108
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_leggings_bronze.png differ
diff --git a/3d_armor/textures/3d_armor_inv_leggings_cactus.png b/3d_armor/textures/3d_armor_inv_leggings_cactus.png
new file mode 100644
index 0000000..c011db8
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_leggings_cactus.png differ
diff --git a/3d_armor/textures/3d_armor_inv_leggings_crystal.png b/3d_armor/textures/3d_armor_inv_leggings_crystal.png
new file mode 100644
index 0000000..5b3f703
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_leggings_crystal.png differ
diff --git a/3d_armor/textures/3d_armor_inv_leggings_diamond.png b/3d_armor/textures/3d_armor_inv_leggings_diamond.png
new file mode 100644
index 0000000..2ab1c8e
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_leggings_diamond.png differ
diff --git a/3d_armor/textures/3d_armor_inv_leggings_gold.png b/3d_armor/textures/3d_armor_inv_leggings_gold.png
new file mode 100644
index 0000000..7424833
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_leggings_gold.png differ
diff --git a/3d_armor/textures/3d_armor_inv_leggings_mithril.png b/3d_armor/textures/3d_armor_inv_leggings_mithril.png
new file mode 100644
index 0000000..b9b1b3c
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_leggings_mithril.png differ
diff --git a/3d_armor/textures/3d_armor_inv_leggings_steel.png b/3d_armor/textures/3d_armor_inv_leggings_steel.png
new file mode 100644
index 0000000..77ee17e
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_leggings_steel.png differ
diff --git a/3d_armor/textures/3d_armor_inv_leggings_wood.png b/3d_armor/textures/3d_armor_inv_leggings_wood.png
new file mode 100644
index 0000000..f162e51
Binary files /dev/null and b/3d_armor/textures/3d_armor_inv_leggings_wood.png differ
diff --git a/3d_armor/textures/3d_armor_leggings_admin.png b/3d_armor/textures/3d_armor_leggings_admin.png
new file mode 100644
index 0000000..6752256
Binary files /dev/null and b/3d_armor/textures/3d_armor_leggings_admin.png differ
diff --git a/3d_armor/textures/3d_armor_leggings_admin_preview.png b/3d_armor/textures/3d_armor_leggings_admin_preview.png
new file mode 100644
index 0000000..fe47999
Binary files /dev/null and b/3d_armor/textures/3d_armor_leggings_admin_preview.png differ
diff --git a/3d_armor/textures/3d_armor_leggings_bronze.png b/3d_armor/textures/3d_armor_leggings_bronze.png
new file mode 100644
index 0000000..3394288
Binary files /dev/null and b/3d_armor/textures/3d_armor_leggings_bronze.png differ
diff --git a/3d_armor/textures/3d_armor_leggings_bronze_preview.png b/3d_armor/textures/3d_armor_leggings_bronze_preview.png
new file mode 100644
index 0000000..c4aa7b9
Binary files /dev/null and b/3d_armor/textures/3d_armor_leggings_bronze_preview.png differ
diff --git a/3d_armor/textures/3d_armor_leggings_cactus.png b/3d_armor/textures/3d_armor_leggings_cactus.png
new file mode 100644
index 0000000..7d22404
Binary files /dev/null and b/3d_armor/textures/3d_armor_leggings_cactus.png differ
diff --git a/3d_armor/textures/3d_armor_leggings_cactus_preview.png b/3d_armor/textures/3d_armor_leggings_cactus_preview.png
new file mode 100644
index 0000000..1a24863
Binary files /dev/null and b/3d_armor/textures/3d_armor_leggings_cactus_preview.png differ
diff --git a/3d_armor/textures/3d_armor_leggings_crystal.png b/3d_armor/textures/3d_armor_leggings_crystal.png
new file mode 100644
index 0000000..cc61390
Binary files /dev/null and b/3d_armor/textures/3d_armor_leggings_crystal.png differ
diff --git a/3d_armor/textures/3d_armor_leggings_crystal_preview.png b/3d_armor/textures/3d_armor_leggings_crystal_preview.png
new file mode 100644
index 0000000..559d008
Binary files /dev/null and b/3d_armor/textures/3d_armor_leggings_crystal_preview.png differ
diff --git a/3d_armor/textures/3d_armor_leggings_diamond.png b/3d_armor/textures/3d_armor_leggings_diamond.png
new file mode 100644
index 0000000..a646ba2
Binary files /dev/null and b/3d_armor/textures/3d_armor_leggings_diamond.png differ
diff --git a/3d_armor/textures/3d_armor_leggings_diamond_preview.png b/3d_armor/textures/3d_armor_leggings_diamond_preview.png
new file mode 100644
index 0000000..a6ac2e2
Binary files /dev/null and b/3d_armor/textures/3d_armor_leggings_diamond_preview.png differ
diff --git a/3d_armor/textures/3d_armor_leggings_gold.png b/3d_armor/textures/3d_armor_leggings_gold.png
new file mode 100644
index 0000000..d207dff
Binary files /dev/null and b/3d_armor/textures/3d_armor_leggings_gold.png differ
diff --git a/3d_armor/textures/3d_armor_leggings_gold_preview.png b/3d_armor/textures/3d_armor_leggings_gold_preview.png
new file mode 100644
index 0000000..75e6ca4
Binary files /dev/null and b/3d_armor/textures/3d_armor_leggings_gold_preview.png differ
diff --git a/3d_armor/textures/3d_armor_leggings_mithril.png b/3d_armor/textures/3d_armor_leggings_mithril.png
new file mode 100644
index 0000000..ffff3ee
Binary files /dev/null and b/3d_armor/textures/3d_armor_leggings_mithril.png differ
diff --git a/3d_armor/textures/3d_armor_leggings_mithril_preview.png b/3d_armor/textures/3d_armor_leggings_mithril_preview.png
new file mode 100644
index 0000000..ee99178
Binary files /dev/null and b/3d_armor/textures/3d_armor_leggings_mithril_preview.png differ
diff --git a/3d_armor/textures/3d_armor_leggings_steel.png b/3d_armor/textures/3d_armor_leggings_steel.png
new file mode 100644
index 0000000..78d5874
Binary files /dev/null and b/3d_armor/textures/3d_armor_leggings_steel.png differ
diff --git a/3d_armor/textures/3d_armor_leggings_steel_preview.png b/3d_armor/textures/3d_armor_leggings_steel_preview.png
new file mode 100644
index 0000000..3e3ec85
Binary files /dev/null and b/3d_armor/textures/3d_armor_leggings_steel_preview.png differ
diff --git a/3d_armor/textures/3d_armor_leggings_wood.png b/3d_armor/textures/3d_armor_leggings_wood.png
new file mode 100644
index 0000000..3880fc0
Binary files /dev/null and b/3d_armor/textures/3d_armor_leggings_wood.png differ
diff --git a/3d_armor/textures/3d_armor_leggings_wood_preview.png b/3d_armor/textures/3d_armor_leggings_wood_preview.png
new file mode 100644
index 0000000..f8ee8e8
Binary files /dev/null and b/3d_armor/textures/3d_armor_leggings_wood_preview.png differ
diff --git a/3d_armor/textures/3d_armor_trans.png b/3d_armor/textures/3d_armor_trans.png
new file mode 100644
index 0000000..4d7beb8
Binary files /dev/null and b/3d_armor/textures/3d_armor_trans.png differ
diff --git a/3d_armor/textures/3d_armor_ui_form.png b/3d_armor/textures/3d_armor_ui_form.png
new file mode 100644
index 0000000..6e5cfee
Binary files /dev/null and b/3d_armor/textures/3d_armor_ui_form.png differ
diff --git a/3d_armor/textures/character_preview.png b/3d_armor/textures/character_preview.png
new file mode 100644
index 0000000..4ac4602
Binary files /dev/null and b/3d_armor/textures/character_preview.png differ
diff --git a/3d_armor/textures/inventory_plus_armor.png b/3d_armor/textures/inventory_plus_armor.png
new file mode 100644
index 0000000..6cde640
Binary files /dev/null and b/3d_armor/textures/inventory_plus_armor.png differ
diff --git a/3d_armor_stand/LICENSE.txt b/3d_armor_stand/LICENSE.txt
new file mode 100644
index 0000000..5c8246a
--- /dev/null
+++ b/3d_armor_stand/LICENSE.txt
@@ -0,0 +1,7 @@
+[mod] 3d Armor Stand [3d_armor_stand]
+=====================================
+
+License Source Code: LGPL v2.1
+
+Lecense Media: CC BY-SA 3.0
+
diff --git a/3d_armor_stand/README.txt b/3d_armor_stand/README.txt
new file mode 100644
index 0000000..6a98ab9
--- /dev/null
+++ b/3d_armor_stand/README.txt
@@ -0,0 +1,21 @@
+[mod] 3d Armor Stand [3d_armor_stand]
+=====================================
+
+Depends: 3d_armor
+
+Adds a chest-like armor stand for armor storage and display.
+
+Crafting
+--------
+
+F = Wooden Fence [default:fence_wood]
+S = Steel Ingot [default:steel_ingot]
+
++---+---+---+
+|   | F |   |
++---+---+---+
+|   | F |   |
++---+---+---+
+| S | S | S |
++---+---+---+
+
diff --git a/3d_armor_stand/depends.txt b/3d_armor_stand/depends.txt
new file mode 100644
index 0000000..fdbb290
--- /dev/null
+++ b/3d_armor_stand/depends.txt
@@ -0,0 +1,2 @@
+3d_armor
+
diff --git a/3d_armor_stand/init.lua b/3d_armor_stand/init.lua
new file mode 100644
index 0000000..0a4e91c
--- /dev/null
+++ b/3d_armor_stand/init.lua
@@ -0,0 +1,301 @@
+local armor_stand_formspec = "size[8,7]" ..
+	default.gui_bg ..
+	default.gui_bg_img ..
+	default.gui_slots ..
+	default.get_hotbar_bg(0,3) ..
+	"list[current_name;armor_head;3,0.5;1,1;]" ..
+	"list[current_name;armor_torso;4,0.5;1,1;]" ..
+	"list[current_name;armor_legs;3,1.5;1,1;]" ..
+	"list[current_name;armor_feet;4,1.5;1,1;]" ..
+	"image[3,0.5;1,1;3d_armor_stand_head.png]" ..
+	"image[4,0.5;1,1;3d_armor_stand_torso.png]" ..
+	"image[3,1.5;1,1;3d_armor_stand_legs.png]" ..
+	"image[4,1.5;1,1;3d_armor_stand_feet.png]" ..
+	"list[current_player;main;0,3;8,1;]" ..
+	"list[current_player;main;0,4.25;8,3;8]"
+
+local elements = {"head", "torso", "legs", "feet"}
+
+local function get_stand_object(pos)
+	local object = nil
+	local objects = minetest.get_objects_inside_radius(pos, 0.5) or {}
+	for _, obj in pairs(objects) do
+		local ent = obj:get_luaentity()
+		if ent then
+			if ent.name == "3d_armor_stand:armor_entity" then
+				-- Remove duplicates
+				if object then
+					obj:remove()
+				else
+					object = obj
+				end
+			end
+		end
+	end
+	return object
+end
+
+local function update_entity(pos)
+	local node = minetest.get_node(pos)
+	local object = get_stand_object(pos)
+	if object then
+		if not string.find(node.name, "3d_armor_stand:") then
+			object:remove()
+			return
+		end
+	else
+		object = minetest.add_entity(pos, "3d_armor_stand:armor_entity")
+	end
+	if object then
+		local texture = "3d_armor_trans.png"
+		local textures = {}
+		local meta = minetest.get_meta(pos)
+		local inv = meta:get_inventory()
+		local yaw = 0
+		if inv then
+			for _, element in pairs(elements) do
+				local stack = inv:get_stack("armor_"..element, 1)
+				if stack:get_count() == 1 then
+					local item = stack:get_name() or ""
+					local def = stack:get_definition() or {}
+					local groups = def.groups or {}
+					if groups["armor_"..element] then
+						local texture = def.texture or item:gsub("%:", "_")
+						table.insert(textures, texture..".png")
+					end
+				end
+			end
+		end
+		if #textures > 0 then
+			texture = table.concat(textures, "^")
+		end
+		if node.param2 then
+			local rot = node.param2 % 4
+			if rot == 1 then
+				yaw = 3 * math.pi / 2
+			elseif rot == 2 then
+				yaw = math.pi
+			elseif rot == 3 then
+				yaw = math.pi / 2
+			end
+		end
+		object:setyaw(yaw)
+		object:set_properties({textures={texture}})
+	end
+end
+
+local function has_locked_armor_stand_privilege(meta, player)
+	local name = ""
+	if player then
+		if minetest.check_player_privs(player, "protection_bypass") then
+			return true
+		end
+		name = player:get_player_name()
+	end
+	if name ~= meta:get_string("owner") then
+		return false
+	end
+	return true
+end
+
+minetest.register_node("3d_armor_stand:armor_stand", {
+	description = "Armor stand",
+	drawtype = "mesh",
+	mesh = "3d_armor_stand.obj",
+	tiles = {"default_wood.png", "default_steel_block.png"},
+	paramtype = "light",
+	paramtype2 = "facedir",
+	walkable = false,
+	selection_box = {
+		type = "fixed",
+		fixed = {-0.5,-0.5,-0.5, 0.5,1.4,0.5}
+	},
+	groups = {choppy=2, oddly_breakable_by_hand=2},
+	sounds = default.node_sound_wood_defaults(),
+	on_construct = function(pos)
+		local meta = minetest.get_meta(pos)
+		meta:set_string("formspec", armor_stand_formspec)
+		meta:set_string("infotext", "Armor Stand")
+		local inv = meta:get_inventory()
+		for _, element in pairs(elements) do
+			inv:set_size("armor_"..element, 1)
+		end
+	end,
+	can_dig = function(pos, player)
+		local meta = minetest.get_meta(pos)
+		local inv = meta:get_inventory()
+		for _, element in pairs(elements) do
+			if not inv:is_empty("armor_"..element) then
+				return false
+			end
+		end
+		return true
+	end,
+	after_place_node = function(pos)
+		minetest.add_entity(pos, "3d_armor_stand:armor_entity")
+	end,
+	allow_metadata_inventory_put = function(pos, listname, index, stack)
+		local def = stack:get_definition() or {}
+		local groups = def.groups or {}
+		if groups[listname] then
+			return 1
+		end
+		return 0
+	end,
+	allow_metadata_inventory_move = function(pos)
+		return 0
+	end,
+	on_metadata_inventory_put = function(pos)
+		update_entity(pos)
+	end,
+	on_metadata_inventory_take = function(pos)
+		update_entity(pos)
+	end,
+	after_destruct = function(pos)
+		update_entity(pos)
+	end,
+	on_blast = function(pos)
+		local object = get_stand_object(pos)
+		if object then
+			object:remove()
+		end
+		minetest.after(1, function(pos)
+			update_entity(pos)
+		end, pos)
+	end,
+})
+
+minetest.register_node("3d_armor_stand:locked_armor_stand", {
+	description = "Locked Armor stand",
+	drawtype = "mesh",
+	mesh = "3d_armor_stand.obj",
+	tiles = {"default_wood.png", "default_steel_block.png"},
+	paramtype = "light",
+	paramtype2 = "facedir",
+	walkable = false,
+	selection_box = {
+		type = "fixed",
+		fixed = {-0.5,-0.5,-0.5, 0.5,1.4,0.5}
+	},
+	groups = {choppy=2, oddly_breakable_by_hand=2},
+	sounds = default.node_sound_wood_defaults(),
+	on_construct = function(pos)
+		local meta = minetest.get_meta(pos)
+		meta:set_string("formspec", armor_stand_formspec)
+		meta:set_string("infotext", "Armor Stand")
+		meta:set_string("owner", "")
+		local inv = meta:get_inventory()
+		for _, element in pairs(elements) do
+			inv:set_size("armor_"..element, 1)
+		end
+	end,
+	can_dig = function(pos, player)
+		local meta = minetest.get_meta(pos)
+		local inv = meta:get_inventory()
+		for _, element in pairs(elements) do
+			if not inv:is_empty("armor_"..element) then
+				return false
+			end
+		end
+		return true
+	end,
+	after_place_node = function(pos, placer)
+		minetest.add_entity(pos, "3d_armor_stand:armor_entity")
+		local meta = minetest.get_meta(pos)
+		meta:set_string("owner", placer:get_player_name() or "")
+		meta:set_string("infotext", "Armor Stand (owned by " ..
+		meta:get_string("owner") .. ")")
+	end,
+	allow_metadata_inventory_put = function(pos, listname, index, stack, player)
+		local meta = minetest.get_meta(pos)
+		if not has_locked_armor_stand_privilege(meta, player) then
+			return 0
+		end
+		local def = stack:get_definition() or {}
+		local groups = def.groups or {}
+		if groups[listname] then
+			return 1
+		end
+		return 0
+	end,
+	allow_metadata_inventory_take = function(pos, listname, index, stack, player)
+		local meta = minetest.get_meta(pos)
+		if not has_locked_armor_stand_privilege(meta, player) then
+			return 0
+		end
+		return stack:get_count()
+	end,
+	allow_metadata_inventory_move = function(pos)
+		return 0
+	end,
+	on_metadata_inventory_put = function(pos)
+		update_entity(pos)
+	end,
+	on_metadata_inventory_take = function(pos)
+		update_entity(pos)
+	end,
+	after_destruct = function(pos)
+		update_entity(pos)
+	end,
+	on_blast = function(pos)
+		local object = get_stand_object(pos)
+		if object then
+			object:remove()
+		end
+		minetest.after(1, function(pos)
+			update_entity(pos)
+		end, pos)
+	end,
+})
+
+minetest.register_entity("3d_armor_stand:armor_entity", {
+	physical = true,
+	visual = "mesh",
+	mesh = "3d_armor_entity.obj",
+	visual_size = {x=1, y=1},
+	collisionbox = {-0.1,-0.4,-0.1, 0.1,1.3,0.1},
+	textures = {"3d_armor_trans.png"},
+	pos = nil,
+	timer = 0,
+	on_activate = function(self)
+		local pos = self.object:getpos()
+		if pos then
+			self.pos = vector.round(pos)
+			update_entity(pos)
+		end
+	end,
+	on_step = function(self, dtime)
+		if not self.pos then
+			return
+		end
+		self.timer = self.timer + dtime
+		if self.timer > 1 then
+			self.timer = 0
+			local pos = self.object:getpos()
+			if pos then
+				if vector.equals(vector.round(pos), self.pos) then
+					return
+				end
+			end
+			update_entity(self.pos)
+			self.object:remove()
+		end
+	end,
+})
+
+minetest.register_craft({
+	output = "3d_armor_stand:armor_stand",
+	recipe = {
+		{"", "default:fence_wood", ""},
+		{"", "default:fence_wood", ""},
+		{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
+	}
+})
+
+minetest.register_craft({
+	output = "3d_armor_stand:locked_armor_stand",
+	recipe = {
+		{"3d_armor_stand:armor_stand", "default:steel_ingot"},
+	}
+})
+
diff --git a/3d_armor_stand/models/3d_armor_entity.obj b/3d_armor_stand/models/3d_armor_entity.obj
new file mode 100644
index 0000000..052f692
--- /dev/null
+++ b/3d_armor_stand/models/3d_armor_entity.obj
@@ -0,0 +1,193 @@
+# Blender v2.73 (sub 0) OBJ File: '3d_armor_entity_3.blend'
+# www.blender.org
+mtllib 3d_armor_entity.mtl
+o Player_Cube
+v 2.200000 9.763893 1.200000
+v 2.200000 9.763893 -1.200000
+v 2.200000 2.663871 1.200000
+v 2.200000 2.663871 -1.200000
+v -2.200000 9.763893 -1.200000
+v -2.200000 9.763893 1.200000
+v -2.200000 2.663871 -1.200000
+v -2.200000 2.663871 1.200000
+v 2.300000 13.863962 2.300000
+v 2.300000 13.863962 -2.300000
+v 2.300000 9.263885 2.300000
+v 2.300000 9.263885 -2.300000
+v -2.300000 13.863962 -2.300000
+v -2.300000 13.863962 2.300000
+v -2.300000 9.263885 -2.300000
+v -2.300000 9.263885 2.300000
+v -2.322686 2.473175 -1.300000
+v -2.322686 2.473175 1.300000
+v -4.713554 2.682348 1.300000
+v -4.713554 2.682348 -1.300000
+v -1.686446 9.745432 -1.300000
+v -1.686446 9.745432 1.300000
+v -4.077313 9.954605 1.300000
+v -4.077313 9.954605 -1.300000
+v 4.077313 9.954605 -1.300000
+v 4.077313 9.954605 1.300000
+v 1.686446 9.745432 1.300000
+v 1.686446 9.745432 -1.300000
+v 4.713554 2.682348 -1.300000
+v 4.713554 2.682348 1.300000
+v 2.322686 2.473175 1.300000
+v 2.322686 2.473175 -1.300000
+v 0.139099 2.938947 -1.200000
+v 0.139099 2.938947 1.200000
+v 0.261266 -4.059988 1.200000
+v 0.261266 -4.059988 -1.200000
+v 2.660901 -4.018101 1.190000
+v 2.660901 -4.018101 -1.210000
+v 2.538733 2.980834 1.190000
+v 2.538733 2.980834 -1.210000
+v -0.139099 2.938947 -1.200000
+v -0.139099 2.938947 1.200000
+v -0.261266 -4.059988 1.200000
+v -0.261266 -4.059988 -1.200000
+v -2.538734 2.980834 -1.210000
+v -2.538734 2.980834 1.190000
+v -2.660901 -4.018101 -1.210000
+v -2.660901 -4.018101 1.190000
+v -2.799999 -4.387500 1.390000
+v -2.799999 -4.387500 -1.410000
+v -2.800000 -0.812499 1.390000
+v -2.800000 -0.812499 -1.410000
+v -0.000000 -4.387500 -1.400000
+v -0.000000 -4.387500 1.400000
+v -0.000000 -0.812499 1.400000
+v -0.000000 -0.812499 -1.400000
+v 2.800000 -0.812499 -1.410000
+v 2.800000 -0.812499 1.390000
+v 2.799999 -4.387500 -1.410000
+v 2.799999 -4.387500 1.390000
+v 0.000000 -4.387500 -1.400000
+v 0.000000 -4.387500 1.400000
+v 0.000000 -0.812499 1.400000
+v 0.000000 -0.812499 -1.400000
+v 2.267006 13.830965 2.267006
+v 2.267006 13.830965 -2.267006
+v 2.267006 9.296881 2.267006
+v 2.267006 9.296881 -2.267006
+v -2.267006 13.830965 -2.267006
+v -2.267006 13.830965 2.267006
+v -2.267006 9.296881 -2.267006
+v -2.267006 9.296881 2.267006
+vt 0.250000 0.375000
+vt 0.250000 0.000000
+vt 0.312500 0.000000
+vt 0.312500 0.375000
+vt 0.437500 0.375000
+vt 0.437500 0.500000
+vt 0.312500 0.500000
+vt 0.562500 0.375000
+vt 0.562500 0.500000
+vt 0.437500 0.000000
+vt 0.500000 0.000000
+vt 0.500000 0.375000
+vt 0.625000 0.000000
+vt 0.625000 0.375000
+vt 0.500000 0.750000
+vt 0.500000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.750000
+vt 0.750000 0.750000
+vt 0.750000 1.000000
+vt 0.625000 1.000000
+vt 0.875000 0.750000
+vt 0.875000 1.000000
+vt 0.750000 0.500000
+vt 0.875000 0.500000
+vt 1.000000 0.750000
+vt 1.000000 0.500000
+vt 0.750000 0.375000
+vt 0.812500 0.500000
+vt 0.812500 0.375000
+vt 0.687500 0.375000
+vt 0.687500 0.500000
+vt 0.687500 0.000000
+vt 0.750000 0.000000
+vt 0.812500 0.000000
+vt 0.875000 0.375000
+vt 0.875000 0.000000
+vt 0.125000 0.375000
+vt 0.062500 0.375000
+vt 0.062500 0.500000
+vt 0.125000 0.500000
+vt 0.187500 0.375000
+vt 0.187500 0.500000
+vt 0.000000 0.375000
+vt 0.000000 0.000000
+vt 0.062500 0.000000
+vt 0.187500 0.000000
+vt 0.125000 0.000000
+vt 0.437500 0.875000
+vt 0.437500 1.000000
+vt 0.375000 1.000000
+vt 0.375000 0.875000
+vt 0.250000 0.875000
+vt 0.312500 0.875000
+vt 0.312500 0.656250
+vt 0.250000 0.656250
+vt 0.500000 0.875000
+vt 0.437500 0.656250
+vt 0.500000 0.656250
+vt 0.375000 0.656250
+vt 0.312500 1.000000
+usemtl Armor
+s off
+f 1/1 3/2 4/3 2/4
+f 5/5 6/6 1/7 2/4
+f 8/6 7/5 4/8 3/9
+f 5/5 2/4 4/3 7/10
+f 7/10 8/11 6/12 5/5
+f 8/11 3/13 1/14 6/12
+f 9/15 11/16 12/17 10/18
+f 13/19 14/20 9/21 10/18
+f 12/22 11/23 16/20 15/19
+f 13/19 10/18 12/17 15/24
+f 14/22 13/19 15/24 16/25
+f 9/26 14/22 16/25 11/27
+f 17/28 18/24 19/29 20/30
+f 24/31 23/32 22/24 21/28
+f 23/31 24/14 20/13 19/33
+f 24/31 21/28 17/34 20/33
+f 21/28 22/30 18/35 17/34
+f 22/30 23/36 19/37 18/35
+f 27/30 31/35 30/37 26/36
+f 28/28 32/34 31/35 27/30
+f 25/31 29/33 32/34 28/28
+f 26/31 30/33 29/13 25/14
+f 25/31 28/28 27/24 26/32
+f 32/28 29/30 30/29 31/24
+f 40/38 33/39 34/40 39/41
+f 36/42 38/38 37/41 35/43
+f 39/44 37/45 38/46 40/39
+f 34/1 35/2 37/47 39/42
+f 40/38 38/48 36/46 33/39
+f 33/42 36/47 35/48 34/38
+f 45/38 46/41 42/40 41/39
+f 41/42 42/38 43/48 44/47
+f 45/38 41/39 44/46 47/48
+f 42/1 46/42 48/47 43/2
+f 46/44 45/39 47/46 48/45
+f 44/42 43/43 48/41 47/38
+f 53/49 54/50 49/51 50/52
+f 51/53 52/54 50/55 49/56
+f 55/57 51/49 49/58 54/59
+f 52/52 56/54 53/55 50/60
+f 56/49 55/52 54/60 53/58
+f 52/52 51/51 55/61 56/54
+f 64/49 61/58 62/60 63/52
+f 57/52 59/60 61/55 64/54
+f 63/57 62/59 60/58 58/49
+f 58/53 60/56 59/55 57/54
+f 61/49 59/52 60/51 62/50
+f 57/52 64/54 63/61 58/51
+f 65/15 66/18 68/17 67/16
+f 69/19 66/18 65/21 70/20
+f 68/22 71/19 72/20 67/23
+f 69/19 71/24 68/17 66/18
+f 70/22 72/25 71/24 69/19
+f 65/26 67/27 72/25 70/22
diff --git a/3d_armor_stand/models/3d_armor_stand.obj b/3d_armor_stand/models/3d_armor_stand.obj
new file mode 100644
index 0000000..89f3793
--- /dev/null
+++ b/3d_armor_stand/models/3d_armor_stand.obj
@@ -0,0 +1,191 @@
+# Blender v2.73 (sub 0) OBJ File: '3d_armor_stand.blend'
+# www.blender.org
+mtllib 3d_armor_stand.mtl
+o Player_Cube
+v 0.062500 1.312500 -0.062500
+v 0.062500 1.312500 0.062500
+v -0.062500 1.312500 -0.062500
+v -0.062500 1.312500 0.062500
+v -0.187500 -0.437504 0.062500
+v -0.187500 -0.437504 -0.062500
+v -0.187500 0.937500 0.062500
+v -0.187500 0.937500 -0.062500
+v -0.250000 0.250000 0.062500
+v -0.250000 0.250000 -0.062500
+v -0.250000 0.125003 0.062500
+v -0.250000 0.125003 -0.062500
+v 0.250000 0.250000 0.062500
+v 0.250000 0.250000 -0.062500
+v 0.250000 0.125003 0.062500
+v 0.250000 0.125003 -0.062500
+v -0.062500 -0.437504 -0.062500
+v -0.062500 -0.437504 0.062500
+v -0.062500 0.937500 0.062500
+v -0.062500 0.937500 -0.062500
+v 0.062500 0.250000 0.062500
+v 0.062500 0.250000 -0.062500
+v 0.187500 0.250000 -0.062500
+v 0.187500 0.250000 0.062500
+v 0.187500 0.937500 -0.062500
+v 0.187500 0.937500 0.062500
+v 0.187500 -0.437504 -0.062500
+v 0.187500 -0.437504 0.062500
+v 0.062500 -0.437504 -0.062500
+v 0.062500 -0.437504 0.062500
+v 0.062500 0.937500 0.062500
+v 0.062500 0.937500 -0.062500
+v -0.062500 0.812500 -0.062500
+v -0.187500 0.812500 -0.062500
+v -0.062500 0.812500 0.062500
+v -0.187500 0.812500 0.062500
+v 0.062500 0.812500 -0.062500
+v 0.187500 0.812500 -0.062500
+v 0.187500 0.812500 0.062500
+v 0.062500 0.812500 0.062500
+v 0.375000 0.812500 0.062500
+v 0.375000 0.812500 -0.062500
+v 0.375000 0.937500 0.062500
+v 0.375000 0.937500 -0.062500
+v 0.500000 -0.437500 -0.500000
+v 0.500000 -0.437500 0.500000
+v -0.500000 -0.437500 -0.500000
+v -0.500000 -0.437500 0.500000
+v -0.062500 0.250000 -0.062500
+v -0.187500 0.250000 -0.062500
+v -0.062500 0.250000 0.062500
+v -0.187500 0.250000 0.062500
+v -0.375000 0.937500 0.062500
+v -0.375000 0.937500 -0.062500
+v -0.375000 0.812500 -0.062500
+v -0.375000 0.812500 0.062500
+v 0.500000 -0.500000 -0.500000
+v 0.500000 -0.500000 0.500000
+v -0.500000 -0.500000 -0.500000
+v -0.500000 -0.500000 0.500000
+v 0.187500 0.124998 0.062500
+v 0.187500 0.124998 -0.062500
+v 0.062500 0.124998 0.062500
+v 0.062500 0.124998 -0.062500
+v -0.062500 0.124998 -0.062500
+v -0.187500 0.124998 -0.062500
+v -0.062500 0.124998 0.062500
+v -0.187500 0.124998 0.062500
+vt 0.000000 0.000000
+vt 0.875000 0.000000
+vt 0.875000 0.250000
+vt 0.000000 0.250000
+vt 0.125000 0.500000
+vt 0.125000 0.750000
+vt -0.000000 0.750000
+vt -0.000000 0.500000
+vt 0.750000 0.000000
+vt 1.000000 0.000000
+vt 1.000000 0.250000
+vt 0.750000 0.250000
+vt 0.375000 0.500000
+vt 0.375000 0.750000
+vt 0.875000 0.750000
+vt 0.875000 1.000000
+vt 0.000000 1.000000
+vt 0.875000 0.500000
+vt 0.750000 0.500000
+vt 1.000000 0.500000
+vt 1.000000 0.750000
+vt 0.750000 0.750000
+vt 0.625000 1.000000
+vt 0.375000 1.000000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.250000 0.500000
+vt 0.250000 0.750000
+vt 0.625000 0.250000
+vt 0.625000 -0.000000
+vt 0.250000 0.250000
+vt 0.250000 0.000000
+vt 0.375000 0.250000
+vt 0.250000 1.000000
+vt 1.000000 1.000000
+vt 0.750000 1.000000
+vt 0.375000 -0.000000
+vt 0.125000 0.250000
+vt 0.125000 1.000000
+vt 0.125000 0.000000
+vt -0.000000 0.937500
+vt 1.000000 0.937500
+vt 0.937500 0.000000
+vt 0.937500 1.000000
+vt 1.000000 0.062500
+vt 0.000000 0.062500
+vt 0.062500 0.000000
+vt 0.062500 1.000000
+g Player_Cube_Stand
+usemtl Stand
+s off
+f 64/1 29/2 30/3 63/4
+f 52/5 50/6 10/7 9/8
+f 17/9 18/10 5/11 6/12
+f 68/3 66/2 6/1 5/4
+f 7/13 8/14 54/7 53/8
+f 67/15 68/16 5/17 18/7
+f 62/4 27/3 29/18 64/8
+f 66/3 65/18 17/8 6/4
+f 9/19 10/20 12/21 11/22
+f 63/7 30/15 28/16 61/17
+f 65/18 67/15 18/7 17/8
+f 61/8 28/18 27/15 62/7
+f 19/23 7/24 36/14 35/25
+f 8/14 7/13 19/26 20/25
+f 23/15 24/18 13/20 14/21
+f 13/8 15/27 16/28 14/7
+f 39/29 38/30 42/10 41/11
+f 29/31 27/4 28/1 30/32
+f 25/28 26/27 43/26 44/25
+f 38/12 25/19 44/13 42/33
+f 25/28 32/7 31/8 26/27
+f 8/26 20/13 33/33 34/29
+f 25/19 38/12 37/11 32/20
+f 31/17 40/7 39/28 26/34
+f 26/34 39/28 41/25 43/23
+f 43/7 41/28 42/34 44/17
+f 53/22 54/21 55/35 56/36
+f 36/14 7/24 53/17 56/7
+f 8/26 34/29 55/11 54/20
+f 34/37 36/33 56/4 55/1
+f 51/13 21/26 22/25 49/14
+f 20/4 3/12 1/19 32/8
+f 40/15 31/16 19/23 35/25
+f 35/29 33/30 37/2 40/3
+f 33/33 20/13 32/5 37/38
+f 3/14 4/24 2/23 1/25
+f 19/12 4/4 3/1 20/9
+f 31/36 2/17 4/7 19/22
+f 32/22 1/7 2/8 31/19
+f 23/5 62/38 64/33 22/13
+f 21/14 63/24 61/39 24/6
+f 61/3 62/2 16/10 15/11
+f 62/38 23/5 14/8 16/4
+f 24/6 61/39 15/17 13/7
+f 50/18 66/3 12/11 10/20
+f 66/40 68/38 11/4 12/1
+f 50/18 49/26 65/29 66/3
+f 51/25 52/15 68/16 67/23
+f 68/16 52/15 9/21 11/35
+f 49/26 22/13 64/33 65/29
+f 51/25 67/23 63/24 21/14
+f 67/33 65/37 64/30 63/29
+f 37/1 22/2 21/3 40/4
+f 38/4 23/3 22/18 37/8
+f 40/7 21/15 24/16 39/17
+f 39/8 24/18 23/15 38/7
+f 36/2 34/3 50/4 52/1
+f 35/15 36/16 52/17 51/7
+f 34/3 33/18 49/8 50/4
+f 33/18 35/15 51/7 49/8
+g Player_Cube_Base
+usemtl Base
+f 47/17 48/1 46/10 45/35
+f 59/1 57/10 58/35 60/17
+f 48/17 60/41 58/42 46/35
+f 46/43 58/10 57/35 45/44
+f 47/1 45/10 57/45 59/46
+f 48/47 47/48 59/17 60/1
diff --git a/3d_armor_stand/textures/3d_armor_stand_feet.png b/3d_armor_stand/textures/3d_armor_stand_feet.png
new file mode 100644
index 0000000..d04f9e3
Binary files /dev/null and b/3d_armor_stand/textures/3d_armor_stand_feet.png differ
diff --git a/3d_armor_stand/textures/3d_armor_stand_head.png b/3d_armor_stand/textures/3d_armor_stand_head.png
new file mode 100644
index 0000000..228c08e
Binary files /dev/null and b/3d_armor_stand/textures/3d_armor_stand_head.png differ
diff --git a/3d_armor_stand/textures/3d_armor_stand_legs.png b/3d_armor_stand/textures/3d_armor_stand_legs.png
new file mode 100644
index 0000000..66ec357
Binary files /dev/null and b/3d_armor_stand/textures/3d_armor_stand_legs.png differ
diff --git a/3d_armor_stand/textures/3d_armor_stand_torso.png b/3d_armor_stand/textures/3d_armor_stand_torso.png
new file mode 100644
index 0000000..af95ec7
Binary files /dev/null and b/3d_armor_stand/textures/3d_armor_stand_torso.png differ
diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000..d383270
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,11 @@
+3D Armor - Visible Player Armor
+===============================
+
+Default Item Textures (C) Cisoun - WTFPL
+
+Armor Textures: Copyright (C) 2013 Ryan Jones - CC-BY-SA
+
+Source Code: Copyright (C) 2013 Stuart Jones - LGPL
+
+Special credit to Jordach and MirceaKitsune for providing the default 3d character model.
+
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..f74ce04
--- /dev/null
+++ b/README.md
@@ -0,0 +1,83 @@
+Modpack - 3d Armor [0.4.5]
+==========================
+
+### Table of Contents
+<!-- START doctoc generated TOC please keep comment here to allow auto update -->
+<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
+<!-- END doctoc generated TOC please keep comment here to allow auto update -->
+
+- [[mod] Visible Player Armor [3d_armor]](#mod-visible-player-armor-3d_armor)
+- [[mod] Visible Wielded Items [wieldview]](#mod-visible-wielded-items-wieldview)
+- [[mod] Shields [shields]](#mod-shields-shields)
+- [[mod] Technic Armor [technic_armor]](#mod-technic-armor-technic_armor)
+- [[mod] Hazmat Suit [hazmat_suit]](#mod-hazmat-suit-hazmat_suit)
+- [[mod] 3d Armor Stand [3d_armor_stand]](#mod-3d-armor-stand-3d_armor_stand)
+
+<!-- END doctoc generated TOC please keep comment here to allow auto update -->
+
+
+[mod] Visible Player Armor [3d_armor]
+-------------------------------------
+
+Minetest Version: 0.4.13
+
+Game: minetest_game and many derivatives
+
+Depends: default
+
+Recommends: inventory_plus or unified_inventory (use only one)
+
+Adds craftable armor that is visible to other players. Each armor item worn contributes to
+a player's armor group level making them less vulnerable to attack.
+
+Armor takes damage when a player is hurt, however, many armor items offer a 'stackable'
+percentage chance of restoring the lost health points. Overall armor level is boosted by 10%
+when wearing a full matching set (helmet, chestplate, leggings and boots of the same material)
+
+Fire protection has been added by TenPlus1 and in use when ethereal mod is found and crystal
+armor has been enabled.  each piece of armor offers 1 fire protection, level 1 protects
+against torches, level 2 against crystal spikes, 3 for fire and 5 protects when in lava.
+
+Compatible with player skins [skins] by Zeg9 and Player Textures [player_textures] by PilzAdam
+and [simple_skins] by TenPlus1.
+
+Armor can be configured by adding a file called armor.conf in 3d_armor mod or world directory.
+see armor.conf.example for all available options.
+
+[mod] Visible Wielded Items [wieldview]
+---------------------------------------
+
+Depends: 3d_armor
+
+Makes hand wielded items visible to other players.
+
+[mod] Shields [shields]
+-----------------------
+
+Depends: 3d_armor
+
+Originally a part of 3d_armor, shields have been re-included as an optional extra.
+If you do not want shields then simply remove the shields folder from the modpack.
+
+[mod] Technic Armor [technic_armor]
+-----------------------------------
+
+Depends: 3d_armor, technic_worldgen
+
+Adds tin, silver and technic materials to 3d_armor.
+Requires technic (technic_worldgen at least) mod.
+
+[mod] Hazmat Suit [hazmat_suit]
+-------------------------------
+
+Depends: 3d_armor, technic
+
+Adds hazmat suit to 3d_armor. It protects rather well from fire (if enabled in configuration) and radiation, and it has built-in oxygen supply.
+Requires technic mod.
+
+[mod] 3d Armor Stand [3d_armor_stand]
+-------------------------------------
+
+Depends: 3d_armor
+
+Adds a chest-like armor stand for armor storage and display.
diff --git a/description.txt b/description.txt
new file mode 100644
index 0000000..2da5ba4
--- /dev/null
+++ b/description.txt
@@ -0,0 +1 @@
+Visible player armor & wielded items.
diff --git a/hazmat_suit/README.txt b/hazmat_suit/README.txt
new file mode 100644
index 0000000..eb61e26
--- /dev/null
+++ b/hazmat_suit/README.txt
@@ -0,0 +1,10 @@
+[mod] Hazmat Suit [hazmat_suit]
+===================================
+
+Adds hazmat suit to 3d_armor. It protects rather well from fire (if enabled in configuration) and radiation, and it has built-in oxygen supply.
+Requires technic mod.
+
+Depends: 3d_armor, technic
+
+Source code by numZero
+Textures by HybridDog and numZero
diff --git a/hazmat_suit/depends.txt b/hazmat_suit/depends.txt
new file mode 100644
index 0000000..c83abc0
--- /dev/null
+++ b/hazmat_suit/depends.txt
@@ -0,0 +1,2 @@
+3d_armor
+technic
diff --git a/hazmat_suit/description.txt b/hazmat_suit/description.txt
new file mode 100644
index 0000000..bba80d0
--- /dev/null
+++ b/hazmat_suit/description.txt
@@ -0,0 +1 @@
+Adds hazmat suit (protects from water, fire and radiation) to 3d_armor.
diff --git a/hazmat_suit/init.lua b/hazmat_suit/init.lua
new file mode 100644
index 0000000..9e84aef
--- /dev/null
+++ b/hazmat_suit/init.lua
@@ -0,0 +1,126 @@
+local part_count = 4
+
+local level = 35
+local heal = 20
+local use = 1000
+local fire = 4
+local water = 1
+local radiation = 50
+
+if minetest.get_modpath("shields") then
+	level = level / 0.9
+end
+
+if part_count == #armor.elements then
+	level = level / 1.1
+end
+
+level = math.floor(level / part_count)
+heal = math.floor(heal / part_count)
+fire = math.floor(fire / part_count)
+radiation = math.floor(radiation / part_count)
+
+minetest.register_craftitem("hazmat_suit:helmet_hazmat", {
+		description = "Hazmat Helmet",
+		inventory_image = "hazmat_suit_inv_helmet_hazmat.png",
+		stack_max = 1,
+})
+
+minetest.register_craftitem("hazmat_suit:chestplate_hazmat", {
+		description = "Hazmat Chestplate",
+		inventory_image = "hazmat_suit_inv_chestplate_hazmat.png",
+		stack_max = 1,
+})
+
+minetest.register_craftitem("hazmat_suit:sleeve_hazmat", {
+		description = "Hazmat Sleeve",
+		inventory_image = "hazmat_suit_inv_sleeve_hazmat.png",
+		stack_max = 1,
+})
+
+minetest.register_craftitem("hazmat_suit:leggings_hazmat", {
+		description = "Hazmat Leggins",
+		inventory_image = "hazmat_suit_inv_leggings_hazmat.png",
+		stack_max = 1,
+})
+
+minetest.register_craftitem("hazmat_suit:boots_hazmat", {
+		description = "Hazmat Boots",
+		inventory_image = "hazmat_suit_inv_boots_hazmat.png",
+		stack_max = 1,
+})
+
+minetest.register_tool("hazmat_suit:suit_hazmat", {
+	description = "Hazmat Suit",
+	inventory_image = "hazmat_suit_inv_suit_hazmat.png",
+	groups = {
+		armor_head = level,
+		armor_torso = level,
+		armor_legs = level,
+		armor_feet = level,
+		armor_heal = heal,
+		armor_use = use,
+		armor_fire = fire,
+		armor_water = water,
+		armor_radiation = radiation,
+	},
+	wear = 0,
+})
+
+minetest.register_craft({
+	output = "hazmat_suit:helmet_hazmat",
+	recipe = {
+		{"", "technic:stainless_steel_ingot", ""},
+		{"technic:stainless_steel_ingot", "default:glass", "technic:stainless_steel_ingot"},
+		{"technic:rubber", "technic:rubber", "technic:rubber"},
+	},
+})
+
+minetest.register_craft({
+	output = "hazmat_suit:chestplate_hazmat",
+	recipe = {
+		{"technic:lead_ingot", "dye:yellow", "technic:lead_ingot"},
+		{"technic:stainless_steel_ingot", "technic:lead_ingot", "technic:stainless_steel_ingot"},
+		{"technic:lead_ingot", "technic:stainless_steel_ingot", "technic:lead_ingot"},
+	},
+})
+
+minetest.register_craft({
+	output = "hazmat_suit:sleeve_hazmat",
+	recipe = {
+		{"technic:rubber", "dye:yellow"},
+		{"", "technic:stainless_steel_ingot"},
+		{"", "technic:rubber"},
+	},
+})
+
+minetest.register_craft({
+	output = "hazmat_suit:leggings_hazmat",
+	recipe = {
+		{"technic:rubber", "technic:lead_ingot", "technic:rubber"},
+		{"technic:stainless_steel_ingot", "technic:rubber", "technic:stainless_steel_ingot"},
+		{"technic:lead_ingot", "", "technic:lead_ingot"},
+	},
+})
+
+minetest.register_craft({
+	output = "hazmat_suit:boots_hazmat",
+	recipe = {
+		{"", "", ""},
+		{"technic:rubber", "", "technic:rubber"},
+		{"technic:stainless_steel_ingot", "", "technic:stainless_steel_ingot"},
+	},
+})
+
+minetest.register_craft({
+	output = "hazmat_suit:suit_hazmat",
+	type = "shapeless",
+	recipe = {
+		"hazmat_suit:helmet_hazmat",
+		"hazmat_suit:chestplate_hazmat",
+		"hazmat_suit:leggings_hazmat",
+		"hazmat_suit:boots_hazmat",
+		"hazmat_suit:sleeve_hazmat",
+		"hazmat_suit:sleeve_hazmat",
+	},
+})
diff --git a/hazmat_suit/textures/hazmat_suit_inv_boots_hazmat.png b/hazmat_suit/textures/hazmat_suit_inv_boots_hazmat.png
new file mode 100644
index 0000000..5f737e7
Binary files /dev/null and b/hazmat_suit/textures/hazmat_suit_inv_boots_hazmat.png differ
diff --git a/hazmat_suit/textures/hazmat_suit_inv_chestplate_hazmat.png b/hazmat_suit/textures/hazmat_suit_inv_chestplate_hazmat.png
new file mode 100644
index 0000000..2421d54
Binary files /dev/null and b/hazmat_suit/textures/hazmat_suit_inv_chestplate_hazmat.png differ
diff --git a/hazmat_suit/textures/hazmat_suit_inv_helmet_hazmat.png b/hazmat_suit/textures/hazmat_suit_inv_helmet_hazmat.png
new file mode 100644
index 0000000..39a39ea
Binary files /dev/null and b/hazmat_suit/textures/hazmat_suit_inv_helmet_hazmat.png differ
diff --git a/hazmat_suit/textures/hazmat_suit_inv_leggings_hazmat.png b/hazmat_suit/textures/hazmat_suit_inv_leggings_hazmat.png
new file mode 100644
index 0000000..1ca9d25
Binary files /dev/null and b/hazmat_suit/textures/hazmat_suit_inv_leggings_hazmat.png differ
diff --git a/hazmat_suit/textures/hazmat_suit_inv_sleeve_hazmat.png b/hazmat_suit/textures/hazmat_suit_inv_sleeve_hazmat.png
new file mode 100644
index 0000000..0503bb0
Binary files /dev/null and b/hazmat_suit/textures/hazmat_suit_inv_sleeve_hazmat.png differ
diff --git a/hazmat_suit/textures/hazmat_suit_inv_suit_hazmat.png b/hazmat_suit/textures/hazmat_suit_inv_suit_hazmat.png
new file mode 100644
index 0000000..57ccd6d
Binary files /dev/null and b/hazmat_suit/textures/hazmat_suit_inv_suit_hazmat.png differ
diff --git a/hazmat_suit/textures/hazmat_suit_suit_hazmat.png b/hazmat_suit/textures/hazmat_suit_suit_hazmat.png
new file mode 100644
index 0000000..97311fe
Binary files /dev/null and b/hazmat_suit/textures/hazmat_suit_suit_hazmat.png differ
diff --git a/hazmat_suit/textures/hazmat_suit_suit_hazmat_preview.png b/hazmat_suit/textures/hazmat_suit_suit_hazmat_preview.png
new file mode 100644
index 0000000..4c0ba18
Binary files /dev/null and b/hazmat_suit/textures/hazmat_suit_suit_hazmat_preview.png differ
diff --git a/modpack.txt b/modpack.txt
new file mode 100644
index 0000000..e69de29
diff --git a/screenshot.png b/screenshot.png
new file mode 100644
index 0000000..f568cea
Binary files /dev/null and b/screenshot.png differ
diff --git a/shields/README.txt b/shields/README.txt
new file mode 100644
index 0000000..3146bcb
--- /dev/null
+++ b/shields/README.txt
@@ -0,0 +1,6 @@
+Adds shields to 3d_armor
+
+Depends: 3d_armor
+
+Originally a part of 3d_armor, shields have been re-included as an optional extra.
+If you do not what shields then simply remove the shields folder from the modpack.
diff --git a/shields/crafting_guide.txt b/shields/crafting_guide.txt
new file mode 100644
index 0000000..9b61dde
--- /dev/null
+++ b/shields/crafting_guide.txt
@@ -0,0 +1,36 @@
+Shields -- Crafting Guide
+--------------------------
+
++---+---+---+
+| X | X | X |
++---+---+---+
+| X | X | X |
++---+---+---+
+|   | X |   |
++---+---+---+
+
+[shields:shield_wood] X = [default:wood]
+[shields:shield_cactus] X = [default:cactus]
+[shields:shield_steel] X = [default:steel_ingot]
+[shields:shield_bronze] X = [default:bronze_ingot]
+[shields:shield_diamond] X = [default:diamond]
+[shields:shield_gold] X = [default:gold_ingot]
+[shields:shield_mithril] X = [moreores:mithril_ingot]
+[shields:shield_crystal] X = [ethereal:crystal_ingot]
+
+Enhanced Shields
+----------------
+
++---+
+| S |
++---+
+| X |
++---+
+| S |
++---+
+
+[shields:shield_enhanced_wood] X = [shields:shield_wood]
+[shields:shield_enhanced_cactus] X = [shields:shield_cactus]
+
+S = [default:steel_ingot]
+
diff --git a/shields/depends.txt b/shields/depends.txt
new file mode 100644
index 0000000..585cc7a
--- /dev/null
+++ b/shields/depends.txt
@@ -0,0 +1,2 @@
+default
+3d_armor
diff --git a/shields/description.txt b/shields/description.txt
new file mode 100644
index 0000000..cb378bb
--- /dev/null
+++ b/shields/description.txt
@@ -0,0 +1 @@
+Adds visible shields to 3d armor.
diff --git a/shields/init.lua b/shields/init.lua
new file mode 100644
index 0000000..2234fa4
--- /dev/null
+++ b/shields/init.lua
@@ -0,0 +1,126 @@
+local use_moreores = minetest.get_modpath("moreores")
+
+-- Regisiter Shields
+
+minetest.register_tool("shields:shield_admin", {
+	description = "Admin Shield",
+	inventory_image = "shields_inv_shield_admin.png",
+	groups = {armor_shield=1000, armor_heal=100, armor_use=0, not_in_creative_inventory=1},
+	wear = 0,
+})
+
+if ARMOR_MATERIALS.wood then
+	minetest.register_tool("shields:shield_wood", {
+		description = "Wooden Shield",
+		inventory_image = "shields_inv_shield_wood.png",
+		groups = {armor_shield=5, armor_heal=0, armor_use=2000},
+		wear = 0,
+	})
+	minetest.register_tool("shields:shield_enhanced_wood", {
+		description = "Enhanced Wood Shield",
+		inventory_image = "shields_inv_shield_enhanced_wood.png",
+		groups = {armor_shield=8, armor_heal=0, armor_use=1000},
+		wear = 0,
+	})
+	minetest.register_craft({
+		output = "shields:shield_enhanced_wood",
+		recipe = {
+			{"default:steel_ingot"},
+			{"shields:shield_wood"},
+			{"default:steel_ingot"},
+		},
+	})
+end
+
+if ARMOR_MATERIALS.cactus then
+	minetest.register_tool("shields:shield_cactus", {
+		description = "Cactus Shield",
+		inventory_image = "shields_inv_shield_cactus.png",
+		groups = {armor_shield=5, armor_heal=0, armor_use=2000},
+		wear = 0,
+	})
+	minetest.register_tool("shields:shield_enhanced_cactus", {
+		description = "Enhanced Cactus Shield",
+		inventory_image = "shields_inv_shield_enhanced_cactus.png",
+		groups = {armor_shield=8, armor_heal=0, armor_use=1000},
+		wear = 0,
+	})
+	minetest.register_craft({
+		output = "shields:shield_enhanced_cactus",
+		recipe = {
+			{"default:steel_ingot"},
+			{"shields:shield_cactus"},
+			{"default:steel_ingot"},
+		},
+	})
+end
+
+if ARMOR_MATERIALS.steel then
+	minetest.register_tool("shields:shield_steel", {
+		description = "Steel Shield",
+		inventory_image = "shields_inv_shield_steel.png",
+		groups = {armor_shield=10, armor_heal=0, armor_use=500},
+		wear = 0,
+	})
+end
+
+if ARMOR_MATERIALS.bronze then
+	minetest.register_tool("shields:shield_bronze", {
+		description = "Bronze Shield",
+		inventory_image = "shields_inv_shield_bronze.png",
+		groups = {armor_shield=10, armor_heal=6, armor_use=250},
+		wear = 0,
+	})
+end
+
+if ARMOR_MATERIALS.diamond then
+	minetest.register_tool("shields:shield_diamond", {
+		description = "Diamond Shield",
+		inventory_image = "shields_inv_shield_diamond.png",
+		groups = {armor_shield=15, armor_heal=12, armor_use=100},
+		wear = 0,
+	})
+end
+
+if ARMOR_MATERIALS.gold then
+	minetest.register_tool("shields:shield_gold", {
+		description = "Gold Shield",
+		inventory_image = "shields_inv_shield_gold.png",
+		groups = {armor_shield=10, armor_heal=6, armor_use=250},
+		wear = 0,
+	})
+end
+
+if ARMOR_MATERIALS.mithril then
+	minetest.register_tool("shields:shield_mithril", {
+		description = "Mithril Shield",
+		inventory_image = "shields_inv_shield_mithril.png",
+		groups = {armor_shield=15, armor_heal=12, armor_use=50},
+		wear = 0,
+	})
+end
+
+if ARMOR_MATERIALS.crystal then
+	minetest.register_tool("shields:shield_crystal", {
+		description = "Crystal Shield",
+		inventory_image = "shields_inv_shield_crystal.png",
+		groups = {armor_shield=15, armor_heal=12, armor_use=50, armor_fire=1},
+		wear = 0,
+	})
+end
+
+for k, v in pairs(ARMOR_MATERIALS) do
+	minetest.register_craft({
+		output = "shields:shield_"..k,
+		recipe = {
+			{v, v, v},
+			{v, v, v},
+			{"", v, ""},
+		},
+	})
+end
+
+minetest.after(0, function()
+	table.insert(armor.elements, "shield")
+end)
+
diff --git a/shields/textures/shields_inv_shield_admin.png b/shields/textures/shields_inv_shield_admin.png
new file mode 100644
index 0000000..ae5ab7d
Binary files /dev/null and b/shields/textures/shields_inv_shield_admin.png differ
diff --git a/shields/textures/shields_inv_shield_bronze.png b/shields/textures/shields_inv_shield_bronze.png
new file mode 100644
index 0000000..67bac0f
Binary files /dev/null and b/shields/textures/shields_inv_shield_bronze.png differ
diff --git a/shields/textures/shields_inv_shield_cactus.png b/shields/textures/shields_inv_shield_cactus.png
new file mode 100644
index 0000000..00d1d58
Binary files /dev/null and b/shields/textures/shields_inv_shield_cactus.png differ
diff --git a/shields/textures/shields_inv_shield_crystal.png b/shields/textures/shields_inv_shield_crystal.png
new file mode 100644
index 0000000..1ec1981
Binary files /dev/null and b/shields/textures/shields_inv_shield_crystal.png differ
diff --git a/shields/textures/shields_inv_shield_diamond.png b/shields/textures/shields_inv_shield_diamond.png
new file mode 100644
index 0000000..ea7c567
Binary files /dev/null and b/shields/textures/shields_inv_shield_diamond.png differ
diff --git a/shields/textures/shields_inv_shield_enhanced_cactus.png b/shields/textures/shields_inv_shield_enhanced_cactus.png
new file mode 100644
index 0000000..39436cd
Binary files /dev/null and b/shields/textures/shields_inv_shield_enhanced_cactus.png differ
diff --git a/shields/textures/shields_inv_shield_enhanced_wood.png b/shields/textures/shields_inv_shield_enhanced_wood.png
new file mode 100644
index 0000000..058e042
Binary files /dev/null and b/shields/textures/shields_inv_shield_enhanced_wood.png differ
diff --git a/shields/textures/shields_inv_shield_gold.png b/shields/textures/shields_inv_shield_gold.png
new file mode 100644
index 0000000..8995834
Binary files /dev/null and b/shields/textures/shields_inv_shield_gold.png differ
diff --git a/shields/textures/shields_inv_shield_mithril.png b/shields/textures/shields_inv_shield_mithril.png
new file mode 100644
index 0000000..d32665a
Binary files /dev/null and b/shields/textures/shields_inv_shield_mithril.png differ
diff --git a/shields/textures/shields_inv_shield_steel.png b/shields/textures/shields_inv_shield_steel.png
new file mode 100644
index 0000000..178b507
Binary files /dev/null and b/shields/textures/shields_inv_shield_steel.png differ
diff --git a/shields/textures/shields_inv_shield_wood.png b/shields/textures/shields_inv_shield_wood.png
new file mode 100644
index 0000000..dcbe933
Binary files /dev/null and b/shields/textures/shields_inv_shield_wood.png differ
diff --git a/shields/textures/shields_shield_admin.png b/shields/textures/shields_shield_admin.png
new file mode 100644
index 0000000..430c3e3
Binary files /dev/null and b/shields/textures/shields_shield_admin.png differ
diff --git a/shields/textures/shields_shield_admin_preview.png b/shields/textures/shields_shield_admin_preview.png
new file mode 100644
index 0000000..762c2d2
Binary files /dev/null and b/shields/textures/shields_shield_admin_preview.png differ
diff --git a/shields/textures/shields_shield_bronze.png b/shields/textures/shields_shield_bronze.png
new file mode 100644
index 0000000..89d6799
Binary files /dev/null and b/shields/textures/shields_shield_bronze.png differ
diff --git a/shields/textures/shields_shield_bronze_preview.png b/shields/textures/shields_shield_bronze_preview.png
new file mode 100644
index 0000000..5f9ca7b
Binary files /dev/null and b/shields/textures/shields_shield_bronze_preview.png differ
diff --git a/shields/textures/shields_shield_cactus.png b/shields/textures/shields_shield_cactus.png
new file mode 100644
index 0000000..8679aa5
Binary files /dev/null and b/shields/textures/shields_shield_cactus.png differ
diff --git a/shields/textures/shields_shield_cactus_preview.png b/shields/textures/shields_shield_cactus_preview.png
new file mode 100644
index 0000000..ae83661
Binary files /dev/null and b/shields/textures/shields_shield_cactus_preview.png differ
diff --git a/shields/textures/shields_shield_crystal.png b/shields/textures/shields_shield_crystal.png
new file mode 100644
index 0000000..888bc5a
Binary files /dev/null and b/shields/textures/shields_shield_crystal.png differ
diff --git a/shields/textures/shields_shield_crystal_preview.png b/shields/textures/shields_shield_crystal_preview.png
new file mode 100644
index 0000000..299776f
Binary files /dev/null and b/shields/textures/shields_shield_crystal_preview.png differ
diff --git a/shields/textures/shields_shield_diamond.png b/shields/textures/shields_shield_diamond.png
new file mode 100644
index 0000000..e4938f9
Binary files /dev/null and b/shields/textures/shields_shield_diamond.png differ
diff --git a/shields/textures/shields_shield_diamond_preview.png b/shields/textures/shields_shield_diamond_preview.png
new file mode 100644
index 0000000..afd004e
Binary files /dev/null and b/shields/textures/shields_shield_diamond_preview.png differ
diff --git a/shields/textures/shields_shield_enhanced_cactus.png b/shields/textures/shields_shield_enhanced_cactus.png
new file mode 100644
index 0000000..50d7673
Binary files /dev/null and b/shields/textures/shields_shield_enhanced_cactus.png differ
diff --git a/shields/textures/shields_shield_enhanced_cactus_preview.png b/shields/textures/shields_shield_enhanced_cactus_preview.png
new file mode 100644
index 0000000..b15df06
Binary files /dev/null and b/shields/textures/shields_shield_enhanced_cactus_preview.png differ
diff --git a/shields/textures/shields_shield_enhanced_wood.png b/shields/textures/shields_shield_enhanced_wood.png
new file mode 100644
index 0000000..14bd057
Binary files /dev/null and b/shields/textures/shields_shield_enhanced_wood.png differ
diff --git a/shields/textures/shields_shield_enhanced_wood_preview.png b/shields/textures/shields_shield_enhanced_wood_preview.png
new file mode 100644
index 0000000..9298383
Binary files /dev/null and b/shields/textures/shields_shield_enhanced_wood_preview.png differ
diff --git a/shields/textures/shields_shield_gold.png b/shields/textures/shields_shield_gold.png
new file mode 100644
index 0000000..b198d18
Binary files /dev/null and b/shields/textures/shields_shield_gold.png differ
diff --git a/shields/textures/shields_shield_gold_preview.png b/shields/textures/shields_shield_gold_preview.png
new file mode 100644
index 0000000..66d8f2e
Binary files /dev/null and b/shields/textures/shields_shield_gold_preview.png differ
diff --git a/shields/textures/shields_shield_mithril.png b/shields/textures/shields_shield_mithril.png
new file mode 100644
index 0000000..2fb622e
Binary files /dev/null and b/shields/textures/shields_shield_mithril.png differ
diff --git a/shields/textures/shields_shield_mithril_preview.png b/shields/textures/shields_shield_mithril_preview.png
new file mode 100644
index 0000000..45306e3
Binary files /dev/null and b/shields/textures/shields_shield_mithril_preview.png differ
diff --git a/shields/textures/shields_shield_steel.png b/shields/textures/shields_shield_steel.png
new file mode 100644
index 0000000..cfe58a1
Binary files /dev/null and b/shields/textures/shields_shield_steel.png differ
diff --git a/shields/textures/shields_shield_steel_preview.png b/shields/textures/shields_shield_steel_preview.png
new file mode 100644
index 0000000..0a3d36a
Binary files /dev/null and b/shields/textures/shields_shield_steel_preview.png differ
diff --git a/shields/textures/shields_shield_wood.png b/shields/textures/shields_shield_wood.png
new file mode 100644
index 0000000..baf092d
Binary files /dev/null and b/shields/textures/shields_shield_wood.png differ
diff --git a/shields/textures/shields_shield_wood_preview.png b/shields/textures/shields_shield_wood_preview.png
new file mode 100644
index 0000000..b446e4e
Binary files /dev/null and b/shields/textures/shields_shield_wood_preview.png differ
diff --git a/technic_armor/README.txt b/technic_armor/README.txt
new file mode 100644
index 0000000..93038e9
--- /dev/null
+++ b/technic_armor/README.txt
@@ -0,0 +1,9 @@
+[mod] Technic Armor [technic_armor]
+===================================
+
+Adds tin, silver and technic materials to 3d_armor.
+Requires technic (technic_worldgen at least) mod.
+
+Depends: 3d_armor, technic_worldgen
+
+Source code and textures by poet.nohit and numzero
diff --git a/technic_armor/depends.txt b/technic_armor/depends.txt
new file mode 100644
index 0000000..2546a84
--- /dev/null
+++ b/technic_armor/depends.txt
@@ -0,0 +1,3 @@
+3d_armor
+technic_worldgen
+moreores?
diff --git a/technic_armor/description.txt b/technic_armor/description.txt
new file mode 100644
index 0000000..5738c4f
--- /dev/null
+++ b/technic_armor/description.txt
@@ -0,0 +1 @@
+Adds tin, silver and technic materials to 3d_armor.
diff --git a/technic_armor/init.lua b/technic_armor/init.lua
new file mode 100644
index 0000000..e1a663d
--- /dev/null
+++ b/technic_armor/init.lua
@@ -0,0 +1,56 @@
+local stats = {
+	lead = { name="Lead", material="technic:lead_ingot", armor=1.6, heal=0, use=500, radiation=80*1.1 },
+	brass = { name="Brass", material="technic:brass_ingot", armor=1.8, heal=0, use=650, radiation=43 },
+	cast = { name="Cast Iron", material="technic:cast_iron_ingot", armor=2.5, heal=8, use=200, radiation=40 },
+	carbon = { name="Carbon Steel", material="technic:carbon_steel_ingot", armor=2.7, heal=10, use=100, radiation=40 },
+	stainless = { name="Stainless Steel", material="technic:stainless_steel_ingot", armor=2.7, heal=10, use=75, radiation=40 },
+}
+if minetest.get_modpath("moreores") then
+	stats.tin = { name="Tin", material="moreores:tin_ingot", armor=1.6, heal=0, use=750, radiation=37 }
+	stats.silver = { name="Silver", material="moreores:silver_ingot", armor=1.8, heal=6, use=650, radiation=53 }
+end
+
+local parts = {
+	helmet = { place="head", name="Helmet", level=5, radlevel = 0.10, craft={{1,1,1},{1,0,1}} },
+	chestplate = { place="torso", name="Chestplate", level=8, radlevel = 0.35, craft={{1,0,1},{1,1,1},{1,1,1}} },
+	leggings = { place="legs", name="Leggings", level=7, radlevel = 0.15, craft={{1,1,1},{1,0,1},{1,0,1}} },
+	boots = { place="feet", name="Boots", level=4, radlevel = 0.10, craft={{1,0,1},{1,0,1}} },
+}
+if minetest.get_modpath("shields") then
+	parts.shield = { place="shield", name="Shield", level=5, radlevel=0.00, craft={{1,1,1},{1,1,1},{0,1,0}} }
+end
+
+-- Makes a craft recipe based on a template
+-- template is a recipe-like table but indices are used instead of actual item names:
+-- 0 means nothing, everything else is treated as an index in the materials table
+local function make_recipe(template, materials)
+	local recipe = {}
+	for j, trow in ipairs(template) do
+		local rrow = {}
+		for i, tcell in ipairs(trow) do
+			if tcell == 0 then
+				rrow[i] = ""
+			else
+				rrow[i] = materials[tcell]
+			end
+		end
+		recipe[j] = rrow
+	end
+	return recipe
+end
+
+for key, armor in pairs(stats) do
+	for partkey, part in pairs(parts) do
+		local partname = "technic_armor:"..partkey.."_"..key
+		minetest.register_tool(partname, {
+			description = armor.name.." "..part.name,
+			inventory_image = "technic_armor_inv_"..partkey.."_"..key..".png",
+			groups = {["armor_"..part.place]=math.floor(part.level*armor.armor), armor_heal=armor.heal, armor_use=armor.use, armor_radiation=math.floor(part.radlevel*armor.radiation)},
+			wear = 0,
+		})
+		minetest.register_craft({
+			output = partname,
+			recipe = make_recipe(part.craft, {armor.material}),
+		})
+	end
+end
diff --git a/technic_armor/textures/technic_armor_boots_brass.png b/technic_armor/textures/technic_armor_boots_brass.png
new file mode 100644
index 0000000..a54b970
Binary files /dev/null and b/technic_armor/textures/technic_armor_boots_brass.png differ
diff --git a/technic_armor/textures/technic_armor_boots_brass_preview.png b/technic_armor/textures/technic_armor_boots_brass_preview.png
new file mode 100644
index 0000000..b054d4f
Binary files /dev/null and b/technic_armor/textures/technic_armor_boots_brass_preview.png differ
diff --git a/technic_armor/textures/technic_armor_boots_carbon.png b/technic_armor/textures/technic_armor_boots_carbon.png
new file mode 100644
index 0000000..379cc8e
Binary files /dev/null and b/technic_armor/textures/technic_armor_boots_carbon.png differ
diff --git a/technic_armor/textures/technic_armor_boots_carbon_preview.png b/technic_armor/textures/technic_armor_boots_carbon_preview.png
new file mode 100644
index 0000000..8d7e480
Binary files /dev/null and b/technic_armor/textures/technic_armor_boots_carbon_preview.png differ
diff --git a/technic_armor/textures/technic_armor_boots_cast.png b/technic_armor/textures/technic_armor_boots_cast.png
new file mode 100644
index 0000000..5aa0aaa
Binary files /dev/null and b/technic_armor/textures/technic_armor_boots_cast.png differ
diff --git a/technic_armor/textures/technic_armor_boots_cast_preview.png b/technic_armor/textures/technic_armor_boots_cast_preview.png
new file mode 100644
index 0000000..22699f2
Binary files /dev/null and b/technic_armor/textures/technic_armor_boots_cast_preview.png differ
diff --git a/technic_armor/textures/technic_armor_boots_lead.png b/technic_armor/textures/technic_armor_boots_lead.png
new file mode 100644
index 0000000..a809e62
Binary files /dev/null and b/technic_armor/textures/technic_armor_boots_lead.png differ
diff --git a/technic_armor/textures/technic_armor_boots_lead_preview.png b/technic_armor/textures/technic_armor_boots_lead_preview.png
new file mode 100644
index 0000000..a6e7690
Binary files /dev/null and b/technic_armor/textures/technic_armor_boots_lead_preview.png differ
diff --git a/technic_armor/textures/technic_armor_boots_silver.png b/technic_armor/textures/technic_armor_boots_silver.png
new file mode 100644
index 0000000..1af5ccc
Binary files /dev/null and b/technic_armor/textures/technic_armor_boots_silver.png differ
diff --git a/technic_armor/textures/technic_armor_boots_silver_preview.png b/technic_armor/textures/technic_armor_boots_silver_preview.png
new file mode 100644
index 0000000..01e0caf
Binary files /dev/null and b/technic_armor/textures/technic_armor_boots_silver_preview.png differ
diff --git a/technic_armor/textures/technic_armor_boots_stainless.png b/technic_armor/textures/technic_armor_boots_stainless.png
new file mode 100644
index 0000000..eaa86c4
Binary files /dev/null and b/technic_armor/textures/technic_armor_boots_stainless.png differ
diff --git a/technic_armor/textures/technic_armor_boots_stainless_preview.png b/technic_armor/textures/technic_armor_boots_stainless_preview.png
new file mode 100644
index 0000000..53cc9e7
Binary files /dev/null and b/technic_armor/textures/technic_armor_boots_stainless_preview.png differ
diff --git a/technic_armor/textures/technic_armor_boots_tin.png b/technic_armor/textures/technic_armor_boots_tin.png
new file mode 100644
index 0000000..11c740a
Binary files /dev/null and b/technic_armor/textures/technic_armor_boots_tin.png differ
diff --git a/technic_armor/textures/technic_armor_boots_tin_preview.png b/technic_armor/textures/technic_armor_boots_tin_preview.png
new file mode 100644
index 0000000..b1085af
Binary files /dev/null and b/technic_armor/textures/technic_armor_boots_tin_preview.png differ
diff --git a/technic_armor/textures/technic_armor_chestplate_brass.png b/technic_armor/textures/technic_armor_chestplate_brass.png
new file mode 100644
index 0000000..d123aff
Binary files /dev/null and b/technic_armor/textures/technic_armor_chestplate_brass.png differ
diff --git a/technic_armor/textures/technic_armor_chestplate_brass_preview.png b/technic_armor/textures/technic_armor_chestplate_brass_preview.png
new file mode 100644
index 0000000..94c2a47
Binary files /dev/null and b/technic_armor/textures/technic_armor_chestplate_brass_preview.png differ
diff --git a/technic_armor/textures/technic_armor_chestplate_carbon.png b/technic_armor/textures/technic_armor_chestplate_carbon.png
new file mode 100644
index 0000000..7f2b9f1
Binary files /dev/null and b/technic_armor/textures/technic_armor_chestplate_carbon.png differ
diff --git a/technic_armor/textures/technic_armor_chestplate_carbon_preview.png b/technic_armor/textures/technic_armor_chestplate_carbon_preview.png
new file mode 100644
index 0000000..da747e5
Binary files /dev/null and b/technic_armor/textures/technic_armor_chestplate_carbon_preview.png differ
diff --git a/technic_armor/textures/technic_armor_chestplate_cast.png b/technic_armor/textures/technic_armor_chestplate_cast.png
new file mode 100644
index 0000000..6fa0628
Binary files /dev/null and b/technic_armor/textures/technic_armor_chestplate_cast.png differ
diff --git a/technic_armor/textures/technic_armor_chestplate_cast_preview.png b/technic_armor/textures/technic_armor_chestplate_cast_preview.png
new file mode 100644
index 0000000..bfbd4ec
Binary files /dev/null and b/technic_armor/textures/technic_armor_chestplate_cast_preview.png differ
diff --git a/technic_armor/textures/technic_armor_chestplate_lead.png b/technic_armor/textures/technic_armor_chestplate_lead.png
new file mode 100644
index 0000000..8b91c7e
Binary files /dev/null and b/technic_armor/textures/technic_armor_chestplate_lead.png differ
diff --git a/technic_armor/textures/technic_armor_chestplate_lead_preview.png b/technic_armor/textures/technic_armor_chestplate_lead_preview.png
new file mode 100644
index 0000000..8429cbc
Binary files /dev/null and b/technic_armor/textures/technic_armor_chestplate_lead_preview.png differ
diff --git a/technic_armor/textures/technic_armor_chestplate_silver.png b/technic_armor/textures/technic_armor_chestplate_silver.png
new file mode 100644
index 0000000..6790049
Binary files /dev/null and b/technic_armor/textures/technic_armor_chestplate_silver.png differ
diff --git a/technic_armor/textures/technic_armor_chestplate_silver_preview.png b/technic_armor/textures/technic_armor_chestplate_silver_preview.png
new file mode 100644
index 0000000..abf63b6
Binary files /dev/null and b/technic_armor/textures/technic_armor_chestplate_silver_preview.png differ
diff --git a/technic_armor/textures/technic_armor_chestplate_stainless.png b/technic_armor/textures/technic_armor_chestplate_stainless.png
new file mode 100644
index 0000000..c2db5f6
Binary files /dev/null and b/technic_armor/textures/technic_armor_chestplate_stainless.png differ
diff --git a/technic_armor/textures/technic_armor_chestplate_stainless_preview.png b/technic_armor/textures/technic_armor_chestplate_stainless_preview.png
new file mode 100644
index 0000000..1266e6e
Binary files /dev/null and b/technic_armor/textures/technic_armor_chestplate_stainless_preview.png differ
diff --git a/technic_armor/textures/technic_armor_chestplate_tin.png b/technic_armor/textures/technic_armor_chestplate_tin.png
new file mode 100644
index 0000000..562354e
Binary files /dev/null and b/technic_armor/textures/technic_armor_chestplate_tin.png differ
diff --git a/technic_armor/textures/technic_armor_chestplate_tin_preview.png b/technic_armor/textures/technic_armor_chestplate_tin_preview.png
new file mode 100644
index 0000000..362a4ad
Binary files /dev/null and b/technic_armor/textures/technic_armor_chestplate_tin_preview.png differ
diff --git a/technic_armor/textures/technic_armor_helmet_brass.png b/technic_armor/textures/technic_armor_helmet_brass.png
new file mode 100644
index 0000000..9107a10
Binary files /dev/null and b/technic_armor/textures/technic_armor_helmet_brass.png differ
diff --git a/technic_armor/textures/technic_armor_helmet_brass_preview.png b/technic_armor/textures/technic_armor_helmet_brass_preview.png
new file mode 100644
index 0000000..cd625f4
Binary files /dev/null and b/technic_armor/textures/technic_armor_helmet_brass_preview.png differ
diff --git a/technic_armor/textures/technic_armor_helmet_carbon.png b/technic_armor/textures/technic_armor_helmet_carbon.png
new file mode 100644
index 0000000..2a6eb6f
Binary files /dev/null and b/technic_armor/textures/technic_armor_helmet_carbon.png differ
diff --git a/technic_armor/textures/technic_armor_helmet_carbon_preview.png b/technic_armor/textures/technic_armor_helmet_carbon_preview.png
new file mode 100644
index 0000000..02a67b8
Binary files /dev/null and b/technic_armor/textures/technic_armor_helmet_carbon_preview.png differ
diff --git a/technic_armor/textures/technic_armor_helmet_cast.png b/technic_armor/textures/technic_armor_helmet_cast.png
new file mode 100644
index 0000000..87ec50b
Binary files /dev/null and b/technic_armor/textures/technic_armor_helmet_cast.png differ
diff --git a/technic_armor/textures/technic_armor_helmet_cast_preview.png b/technic_armor/textures/technic_armor_helmet_cast_preview.png
new file mode 100644
index 0000000..c8d30c5
Binary files /dev/null and b/technic_armor/textures/technic_armor_helmet_cast_preview.png differ
diff --git a/technic_armor/textures/technic_armor_helmet_lead.png b/technic_armor/textures/technic_armor_helmet_lead.png
new file mode 100644
index 0000000..251a95e
Binary files /dev/null and b/technic_armor/textures/technic_armor_helmet_lead.png differ
diff --git a/technic_armor/textures/technic_armor_helmet_lead_preview.png b/technic_armor/textures/technic_armor_helmet_lead_preview.png
new file mode 100644
index 0000000..ebc6454
Binary files /dev/null and b/technic_armor/textures/technic_armor_helmet_lead_preview.png differ
diff --git a/technic_armor/textures/technic_armor_helmet_silver.png b/technic_armor/textures/technic_armor_helmet_silver.png
new file mode 100644
index 0000000..413625e
Binary files /dev/null and b/technic_armor/textures/technic_armor_helmet_silver.png differ
diff --git a/technic_armor/textures/technic_armor_helmet_silver_preview.png b/technic_armor/textures/technic_armor_helmet_silver_preview.png
new file mode 100644
index 0000000..a1d33d7
Binary files /dev/null and b/technic_armor/textures/technic_armor_helmet_silver_preview.png differ
diff --git a/technic_armor/textures/technic_armor_helmet_stainless.png b/technic_armor/textures/technic_armor_helmet_stainless.png
new file mode 100644
index 0000000..b37bfcb
Binary files /dev/null and b/technic_armor/textures/technic_armor_helmet_stainless.png differ
diff --git a/technic_armor/textures/technic_armor_helmet_stainless_preview.png b/technic_armor/textures/technic_armor_helmet_stainless_preview.png
new file mode 100644
index 0000000..d08cc69
Binary files /dev/null and b/technic_armor/textures/technic_armor_helmet_stainless_preview.png differ
diff --git a/technic_armor/textures/technic_armor_helmet_tin.png b/technic_armor/textures/technic_armor_helmet_tin.png
new file mode 100644
index 0000000..4e0dae2
Binary files /dev/null and b/technic_armor/textures/technic_armor_helmet_tin.png differ
diff --git a/technic_armor/textures/technic_armor_helmet_tin_preview.png b/technic_armor/textures/technic_armor_helmet_tin_preview.png
new file mode 100644
index 0000000..efb95be
Binary files /dev/null and b/technic_armor/textures/technic_armor_helmet_tin_preview.png differ
diff --git a/technic_armor/textures/technic_armor_inv_boots_brass.png b/technic_armor/textures/technic_armor_inv_boots_brass.png
new file mode 100644
index 0000000..145d6c3
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_boots_brass.png differ
diff --git a/technic_armor/textures/technic_armor_inv_boots_carbon.png b/technic_armor/textures/technic_armor_inv_boots_carbon.png
new file mode 100644
index 0000000..dbf043f
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_boots_carbon.png differ
diff --git a/technic_armor/textures/technic_armor_inv_boots_cast.png b/technic_armor/textures/technic_armor_inv_boots_cast.png
new file mode 100644
index 0000000..ba33d07
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_boots_cast.png differ
diff --git a/technic_armor/textures/technic_armor_inv_boots_lead.png b/technic_armor/textures/technic_armor_inv_boots_lead.png
new file mode 100644
index 0000000..5fb7067
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_boots_lead.png differ
diff --git a/technic_armor/textures/technic_armor_inv_boots_silver.png b/technic_armor/textures/technic_armor_inv_boots_silver.png
new file mode 100644
index 0000000..7af9003
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_boots_silver.png differ
diff --git a/technic_armor/textures/technic_armor_inv_boots_stainless.png b/technic_armor/textures/technic_armor_inv_boots_stainless.png
new file mode 100644
index 0000000..6d114e7
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_boots_stainless.png differ
diff --git a/technic_armor/textures/technic_armor_inv_boots_tin.png b/technic_armor/textures/technic_armor_inv_boots_tin.png
new file mode 100644
index 0000000..6fbc5b3
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_boots_tin.png differ
diff --git a/technic_armor/textures/technic_armor_inv_chestplate_brass.png b/technic_armor/textures/technic_armor_inv_chestplate_brass.png
new file mode 100644
index 0000000..4984954
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_chestplate_brass.png differ
diff --git a/technic_armor/textures/technic_armor_inv_chestplate_carbon.png b/technic_armor/textures/technic_armor_inv_chestplate_carbon.png
new file mode 100644
index 0000000..b921799
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_chestplate_carbon.png differ
diff --git a/technic_armor/textures/technic_armor_inv_chestplate_cast.png b/technic_armor/textures/technic_armor_inv_chestplate_cast.png
new file mode 100644
index 0000000..5e6749e
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_chestplate_cast.png differ
diff --git a/technic_armor/textures/technic_armor_inv_chestplate_lead.png b/technic_armor/textures/technic_armor_inv_chestplate_lead.png
new file mode 100644
index 0000000..b2ca61d
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_chestplate_lead.png differ
diff --git a/technic_armor/textures/technic_armor_inv_chestplate_silver.png b/technic_armor/textures/technic_armor_inv_chestplate_silver.png
new file mode 100644
index 0000000..442caa2
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_chestplate_silver.png differ
diff --git a/technic_armor/textures/technic_armor_inv_chestplate_stainless.png b/technic_armor/textures/technic_armor_inv_chestplate_stainless.png
new file mode 100644
index 0000000..5462100
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_chestplate_stainless.png differ
diff --git a/technic_armor/textures/technic_armor_inv_chestplate_tin.png b/technic_armor/textures/technic_armor_inv_chestplate_tin.png
new file mode 100644
index 0000000..eeb7328
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_chestplate_tin.png differ
diff --git a/technic_armor/textures/technic_armor_inv_helmet_brass.png b/technic_armor/textures/technic_armor_inv_helmet_brass.png
new file mode 100644
index 0000000..e56ec30
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_helmet_brass.png differ
diff --git a/technic_armor/textures/technic_armor_inv_helmet_carbon.png b/technic_armor/textures/technic_armor_inv_helmet_carbon.png
new file mode 100644
index 0000000..fc2a592
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_helmet_carbon.png differ
diff --git a/technic_armor/textures/technic_armor_inv_helmet_cast.png b/technic_armor/textures/technic_armor_inv_helmet_cast.png
new file mode 100644
index 0000000..15092c1
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_helmet_cast.png differ
diff --git a/technic_armor/textures/technic_armor_inv_helmet_lead.png b/technic_armor/textures/technic_armor_inv_helmet_lead.png
new file mode 100644
index 0000000..5e54cd6
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_helmet_lead.png differ
diff --git a/technic_armor/textures/technic_armor_inv_helmet_silver.png b/technic_armor/textures/technic_armor_inv_helmet_silver.png
new file mode 100644
index 0000000..4a17003
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_helmet_silver.png differ
diff --git a/technic_armor/textures/technic_armor_inv_helmet_stainless.png b/technic_armor/textures/technic_armor_inv_helmet_stainless.png
new file mode 100644
index 0000000..1cc480e
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_helmet_stainless.png differ
diff --git a/technic_armor/textures/technic_armor_inv_helmet_tin.png b/technic_armor/textures/technic_armor_inv_helmet_tin.png
new file mode 100644
index 0000000..c37cb75
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_helmet_tin.png differ
diff --git a/technic_armor/textures/technic_armor_inv_leggings_brass.png b/technic_armor/textures/technic_armor_inv_leggings_brass.png
new file mode 100644
index 0000000..876bf7c
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_leggings_brass.png differ
diff --git a/technic_armor/textures/technic_armor_inv_leggings_carbon.png b/technic_armor/textures/technic_armor_inv_leggings_carbon.png
new file mode 100644
index 0000000..e4673a9
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_leggings_carbon.png differ
diff --git a/technic_armor/textures/technic_armor_inv_leggings_cast.png b/technic_armor/textures/technic_armor_inv_leggings_cast.png
new file mode 100644
index 0000000..df61ca6
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_leggings_cast.png differ
diff --git a/technic_armor/textures/technic_armor_inv_leggings_lead.png b/technic_armor/textures/technic_armor_inv_leggings_lead.png
new file mode 100644
index 0000000..6e456a3
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_leggings_lead.png differ
diff --git a/technic_armor/textures/technic_armor_inv_leggings_silver.png b/technic_armor/textures/technic_armor_inv_leggings_silver.png
new file mode 100644
index 0000000..ad8c91b
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_leggings_silver.png differ
diff --git a/technic_armor/textures/technic_armor_inv_leggings_stainless.png b/technic_armor/textures/technic_armor_inv_leggings_stainless.png
new file mode 100644
index 0000000..7e4feaf
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_leggings_stainless.png differ
diff --git a/technic_armor/textures/technic_armor_inv_leggings_tin.png b/technic_armor/textures/technic_armor_inv_leggings_tin.png
new file mode 100644
index 0000000..bbaeb6a
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_leggings_tin.png differ
diff --git a/technic_armor/textures/technic_armor_inv_shield_brass.png b/technic_armor/textures/technic_armor_inv_shield_brass.png
new file mode 100644
index 0000000..dbb63cd
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_shield_brass.png differ
diff --git a/technic_armor/textures/technic_armor_inv_shield_carbon.png b/technic_armor/textures/technic_armor_inv_shield_carbon.png
new file mode 100644
index 0000000..c6ae42a
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_shield_carbon.png differ
diff --git a/technic_armor/textures/technic_armor_inv_shield_cast.png b/technic_armor/textures/technic_armor_inv_shield_cast.png
new file mode 100644
index 0000000..f1bcfb9
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_shield_cast.png differ
diff --git a/technic_armor/textures/technic_armor_inv_shield_lead.png b/technic_armor/textures/technic_armor_inv_shield_lead.png
new file mode 100644
index 0000000..751e050
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_shield_lead.png differ
diff --git a/technic_armor/textures/technic_armor_inv_shield_silver.png b/technic_armor/textures/technic_armor_inv_shield_silver.png
new file mode 100644
index 0000000..39dd7f4
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_shield_silver.png differ
diff --git a/technic_armor/textures/technic_armor_inv_shield_stainless.png b/technic_armor/textures/technic_armor_inv_shield_stainless.png
new file mode 100644
index 0000000..2455726
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_shield_stainless.png differ
diff --git a/technic_armor/textures/technic_armor_inv_shield_tin.png b/technic_armor/textures/technic_armor_inv_shield_tin.png
new file mode 100644
index 0000000..e6fb9d8
Binary files /dev/null and b/technic_armor/textures/technic_armor_inv_shield_tin.png differ
diff --git a/technic_armor/textures/technic_armor_leggings_brass.png b/technic_armor/textures/technic_armor_leggings_brass.png
new file mode 100644
index 0000000..f9c84fd
Binary files /dev/null and b/technic_armor/textures/technic_armor_leggings_brass.png differ
diff --git a/technic_armor/textures/technic_armor_leggings_brass_preview.png b/technic_armor/textures/technic_armor_leggings_brass_preview.png
new file mode 100644
index 0000000..05048e3
Binary files /dev/null and b/technic_armor/textures/technic_armor_leggings_brass_preview.png differ
diff --git a/technic_armor/textures/technic_armor_leggings_carbon.png b/technic_armor/textures/technic_armor_leggings_carbon.png
new file mode 100644
index 0000000..2c83e23
Binary files /dev/null and b/technic_armor/textures/technic_armor_leggings_carbon.png differ
diff --git a/technic_armor/textures/technic_armor_leggings_carbon_preview.png b/technic_armor/textures/technic_armor_leggings_carbon_preview.png
new file mode 100644
index 0000000..9fb6391
Binary files /dev/null and b/technic_armor/textures/technic_armor_leggings_carbon_preview.png differ
diff --git a/technic_armor/textures/technic_armor_leggings_cast.png b/technic_armor/textures/technic_armor_leggings_cast.png
new file mode 100644
index 0000000..e7ca67f
Binary files /dev/null and b/technic_armor/textures/technic_armor_leggings_cast.png differ
diff --git a/technic_armor/textures/technic_armor_leggings_cast_preview.png b/technic_armor/textures/technic_armor_leggings_cast_preview.png
new file mode 100644
index 0000000..67dd933
Binary files /dev/null and b/technic_armor/textures/technic_armor_leggings_cast_preview.png differ
diff --git a/technic_armor/textures/technic_armor_leggings_lead.png b/technic_armor/textures/technic_armor_leggings_lead.png
new file mode 100644
index 0000000..75be6c9
Binary files /dev/null and b/technic_armor/textures/technic_armor_leggings_lead.png differ
diff --git a/technic_armor/textures/technic_armor_leggings_lead_preview.png b/technic_armor/textures/technic_armor_leggings_lead_preview.png
new file mode 100644
index 0000000..2777c6d
Binary files /dev/null and b/technic_armor/textures/technic_armor_leggings_lead_preview.png differ
diff --git a/technic_armor/textures/technic_armor_leggings_silver.png b/technic_armor/textures/technic_armor_leggings_silver.png
new file mode 100644
index 0000000..6ae30f3
Binary files /dev/null and b/technic_armor/textures/technic_armor_leggings_silver.png differ
diff --git a/technic_armor/textures/technic_armor_leggings_silver_preview.png b/technic_armor/textures/technic_armor_leggings_silver_preview.png
new file mode 100644
index 0000000..0f6ecd2
Binary files /dev/null and b/technic_armor/textures/technic_armor_leggings_silver_preview.png differ
diff --git a/technic_armor/textures/technic_armor_leggings_stainless.png b/technic_armor/textures/technic_armor_leggings_stainless.png
new file mode 100644
index 0000000..5eab543
Binary files /dev/null and b/technic_armor/textures/technic_armor_leggings_stainless.png differ
diff --git a/technic_armor/textures/technic_armor_leggings_stainless_preview.png b/technic_armor/textures/technic_armor_leggings_stainless_preview.png
new file mode 100644
index 0000000..6504d9d
Binary files /dev/null and b/technic_armor/textures/technic_armor_leggings_stainless_preview.png differ
diff --git a/technic_armor/textures/technic_armor_leggings_tin.png b/technic_armor/textures/technic_armor_leggings_tin.png
new file mode 100644
index 0000000..5973135
Binary files /dev/null and b/technic_armor/textures/technic_armor_leggings_tin.png differ
diff --git a/technic_armor/textures/technic_armor_leggings_tin_preview.png b/technic_armor/textures/technic_armor_leggings_tin_preview.png
new file mode 100644
index 0000000..a6d105f
Binary files /dev/null and b/technic_armor/textures/technic_armor_leggings_tin_preview.png differ
diff --git a/technic_armor/textures/technic_armor_shield_brass.png b/technic_armor/textures/technic_armor_shield_brass.png
new file mode 100644
index 0000000..7ffdb63
Binary files /dev/null and b/technic_armor/textures/technic_armor_shield_brass.png differ
diff --git a/technic_armor/textures/technic_armor_shield_brass_preview.png b/technic_armor/textures/technic_armor_shield_brass_preview.png
new file mode 100644
index 0000000..83d65c4
Binary files /dev/null and b/technic_armor/textures/technic_armor_shield_brass_preview.png differ
diff --git a/technic_armor/textures/technic_armor_shield_carbon.png b/technic_armor/textures/technic_armor_shield_carbon.png
new file mode 100644
index 0000000..f78e1a9
Binary files /dev/null and b/technic_armor/textures/technic_armor_shield_carbon.png differ
diff --git a/technic_armor/textures/technic_armor_shield_carbon_preview.png b/technic_armor/textures/technic_armor_shield_carbon_preview.png
new file mode 100644
index 0000000..2b275cf
Binary files /dev/null and b/technic_armor/textures/technic_armor_shield_carbon_preview.png differ
diff --git a/technic_armor/textures/technic_armor_shield_cast.png b/technic_armor/textures/technic_armor_shield_cast.png
new file mode 100644
index 0000000..0911277
Binary files /dev/null and b/technic_armor/textures/technic_armor_shield_cast.png differ
diff --git a/technic_armor/textures/technic_armor_shield_cast_preview.png b/technic_armor/textures/technic_armor_shield_cast_preview.png
new file mode 100644
index 0000000..2d0aea6
Binary files /dev/null and b/technic_armor/textures/technic_armor_shield_cast_preview.png differ
diff --git a/technic_armor/textures/technic_armor_shield_lead.png b/technic_armor/textures/technic_armor_shield_lead.png
new file mode 100644
index 0000000..96a82b5
Binary files /dev/null and b/technic_armor/textures/technic_armor_shield_lead.png differ
diff --git a/technic_armor/textures/technic_armor_shield_lead_preview.png b/technic_armor/textures/technic_armor_shield_lead_preview.png
new file mode 100644
index 0000000..8f29f6b
Binary files /dev/null and b/technic_armor/textures/technic_armor_shield_lead_preview.png differ
diff --git a/technic_armor/textures/technic_armor_shield_silver.png b/technic_armor/textures/technic_armor_shield_silver.png
new file mode 100644
index 0000000..8573eec
Binary files /dev/null and b/technic_armor/textures/technic_armor_shield_silver.png differ
diff --git a/technic_armor/textures/technic_armor_shield_silver_preview.png b/technic_armor/textures/technic_armor_shield_silver_preview.png
new file mode 100644
index 0000000..1b04681
Binary files /dev/null and b/technic_armor/textures/technic_armor_shield_silver_preview.png differ
diff --git a/technic_armor/textures/technic_armor_shield_stainless.png b/technic_armor/textures/technic_armor_shield_stainless.png
new file mode 100644
index 0000000..6d6adb3
Binary files /dev/null and b/technic_armor/textures/technic_armor_shield_stainless.png differ
diff --git a/technic_armor/textures/technic_armor_shield_stainless_preview.png b/technic_armor/textures/technic_armor_shield_stainless_preview.png
new file mode 100644
index 0000000..8bdcbb4
Binary files /dev/null and b/technic_armor/textures/technic_armor_shield_stainless_preview.png differ
diff --git a/technic_armor/textures/technic_armor_shield_tin.png b/technic_armor/textures/technic_armor_shield_tin.png
new file mode 100644
index 0000000..048927c
Binary files /dev/null and b/technic_armor/textures/technic_armor_shield_tin.png differ
diff --git a/technic_armor/textures/technic_armor_shield_tin_preview.png b/technic_armor/textures/technic_armor_shield_tin_preview.png
new file mode 100644
index 0000000..25fa7a0
Binary files /dev/null and b/technic_armor/textures/technic_armor_shield_tin_preview.png differ
diff --git a/wieldview/README.txt b/wieldview/README.txt
new file mode 100644
index 0000000..cffae46
--- /dev/null
+++ b/wieldview/README.txt
@@ -0,0 +1,15 @@
+[mod] visible wielded items [wieldview]
+=======================================
+
+depends: default, 3d_armor
+
+Makes hand wielded items visible to other players.
+
+default settings: [minetest.conf]
+
+# Set number of seconds between visible wielded item updates.
+wieldview_update_time = 2
+
+# Show nodes as tiles, disabled by default
+wieldview_node_tiles = false
+
diff --git a/wieldview/depends.txt b/wieldview/depends.txt
new file mode 100644
index 0000000..585cc7a
--- /dev/null
+++ b/wieldview/depends.txt
@@ -0,0 +1,2 @@
+default
+3d_armor
diff --git a/wieldview/description.txt b/wieldview/description.txt
new file mode 100644
index 0000000..0d51ad9
--- /dev/null
+++ b/wieldview/description.txt
@@ -0,0 +1 @@
+Makes hand wielded items visible to other players.
diff --git a/wieldview/init.lua b/wieldview/init.lua
new file mode 100644
index 0000000..7a5a619
--- /dev/null
+++ b/wieldview/init.lua
@@ -0,0 +1,76 @@
+local time = 0
+local update_time = tonumber(minetest.setting_get("wieldview_update_time"))
+if not update_time then
+	update_time = 2
+	minetest.setting_set("wieldview_update_time", tostring(update_time))
+end
+local node_tiles = minetest.setting_getbool("wieldview_node_tiles")
+if not node_tiles then
+	node_tiles = false
+	minetest.setting_set("wieldview_node_tiles", "false")
+end
+
+wieldview = {
+	wielded_item = {},
+	transform = {},
+}
+
+dofile(minetest.get_modpath(minetest.get_current_modname()).."/transform.lua")
+
+wieldview.get_item_texture = function(self, item)
+	local texture = "3d_armor_trans.png"
+	if item ~= "" then
+		if minetest.registered_items[item] then
+			if minetest.registered_items[item].inventory_image ~= "" then
+				texture = minetest.registered_items[item].inventory_image
+			elseif node_tiles == true and minetest.registered_items[item].tiles
+					and type(minetest.registered_items[item].tiles[1]) == "string"
+					and minetest.registered_items[item].tiles[1] ~= "" then
+				texture = minetest.inventorycube(minetest.registered_items[item].tiles[1])
+			end
+		end
+		if wieldview.transform[item] then
+			texture = texture.."^[transform"..wieldview.transform[item]
+		end
+	end
+	return texture
+end
+
+wieldview.update_wielded_item = function(self, player)
+	if not player then
+		return
+	end
+	local name = player:get_player_name()
+	local stack = player:get_wielded_item()
+	local item = stack:get_name()
+	if not item then
+		return
+	end
+	if self.wielded_item[name] then
+		if self.wielded_item[name] == item then
+			return
+		end
+		armor.textures[name].wielditem = self:get_item_texture(item)
+		armor:update_player_visuals(player)
+	end
+	self.wielded_item[name] = item
+end
+
+minetest.register_on_joinplayer(function(player)
+	local name = player:get_player_name()
+	wieldview.wielded_item[name] = ""
+	minetest.after(0, function(player)
+		wieldview:update_wielded_item(player)
+	end, player)
+end)
+
+minetest.register_globalstep(function(dtime)
+	time = time + dtime
+	if time > update_time then
+		for _,player in ipairs(minetest.get_connected_players()) do
+			wieldview:update_wielded_item(player)
+		end
+		time = 0
+	end
+end)
+
diff --git a/wieldview/transform.lua b/wieldview/transform.lua
new file mode 100644
index 0000000..4d5133e
--- /dev/null
+++ b/wieldview/transform.lua
@@ -0,0 +1,24 @@
+-- Wielded Item Transformations - http://dev.minetest.net/texture
+
+wieldview.transform = {
+	["default:torch"]="R270",
+	["default:sapling"]="R270",
+	["flowers:dandelion_white"]="R270",
+	["flowers:dandelion_yellow"]="R270",
+	["flowers:geranium"]="R270",
+	["flowers:rose"]="R270",
+	["flowers:tulip"]="R270",
+	["flowers:viola"]="R270",
+	["bucket:bucket_empty"]="R270",
+	["bucket:bucket_water"]="R270",
+	["bucket:bucket_lava"]="R270",
+	["screwdriver:screwdriver"]="R270",
+	["screwdriver:screwdriver1"]="R270",
+	["screwdriver:screwdriver2"]="R270",
+	["screwdriver:screwdriver3"]="R270",
+	["screwdriver:screwdriver4"]="R270",
+	["vessels:glass_bottle"]="R270",
+	["vessels:drinking_glass"]="R270",
+	["vessels:steel_bottle"]="R270",
+}
+

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/minetest-mod-3d-armor.git



More information about the Pkg-games-commits mailing list