1
0
mirror of https://github.com/minetest-mods/3d_armor.git synced 2025-06-28 22:36:39 +02:00

26 Commits

Author SHA1 Message Date
656bcf30bc Bump version to 0.4.12 2018-06-10 19:39:38 +01:00
579e64a5e7 Code tidy 2018-06-02 22:13:41 +01:00
6f99803d2d Return invalid items in singleplayer mode 2018-06-02 20:46:44 +01:00
f960fc1a41 Only validate armor inventory after user changes 2018-06-02 18:59:32 +01:00
af4a381433 Update screenshot image 2018-05-24 19:25:34 +01:00
1f11a28ad4 More armor callback fixes 2018-05-24 19:06:27 +01:00
a5ddc3e60a Move comment :) 2018-05-23 21:40:06 +01:00
83f3e01efa Run callbacks based on validated inventory 2018-05-23 20:15:09 +01:00
7d30bc25a3 Allow replacing similar armor in the same slot 2018-05-22 18:40:24 +01:00
e4b12558d4 Ammendment to 21b5c68505 2018-05-19 21:35:15 +01:00
21b5c68505 Validate and clean armor inventory before saving 2018-05-19 20:25:27 +01:00
21716ffd31 Display correct heal attribute level, fixes #137 2018-05-13 16:52:29 +01:00
cc6fff2b04 Shields: Fix positional sound effects 2018-05-13 16:31:51 +01:00
4210cafff3 add POVA support (#138)
* add POVA support

Add support for POVA player overrides.

* add POVA support

Add support for POVA player overrides.
2018-05-07 14:41:40 +01:00
579d245a00 Fix crash with UI but no technic 2018-02-23 18:00:43 +00:00
c812e0ac56 Shields: Add option to disable sound effects 2018-02-18 20:35:49 +00:00
4baed2ca22 Remove on_punch effects from admin armor, closes #131 2018-02-18 20:24:35 +00:00
b9c8681e14 Bump version to 0.4.11 2018-02-11 17:13:25 +00:00
2fc92880fd Move technic_armor and hazmat_suit to separate repos 2018-02-11 17:11:51 +00:00
b4cfdac6f5 Update licenses to current year 2018-02-11 16:57:27 +00:00
59b26b37f9 Fix item duplication vulnerability 2018-02-11 16:12:22 +00:00
7226dd6174 Add Malay translation 2018-02-07 17:39:38 +00:00
4fc51971d1 Fix registered group level display 2018-01-10 19:16:23 +00:00
291b34bfc6 Auto-refresh armor stands after clearobjects.
Currently armor stands appear empty after a clearobjects, in order to refresh them the armor must be removed and put back on again, this code automatically refreshes armor stands periodically to avoid these issues.
2017-12-05 18:28:27 +00:00
da7df11ce4 Change armor stand recipe to use any item from the fence group. 2017-11-10 17:41:59 +00:00
4ff61da39a Correct minetest version in README.md 2017-10-24 20:53:06 +01:00
143 changed files with 590 additions and 360 deletions

View File

@ -68,6 +68,9 @@ armor_fire_protect = false
-- Enable punch damage effects. -- Enable punch damage effects.
armor_punch_damage = true armor_punch_damage = true
-- Enable migration of old armor inventories
armor_migrate_old_inventory = true
API API
--- ---

View File

@ -4,6 +4,7 @@ local S = armor_i18n.gettext
local skin_previews = {} local skin_previews = {}
local use_player_monoids = minetest.global_exists("player_monoids") local use_player_monoids = minetest.global_exists("player_monoids")
local use_armor_monoid = minetest.global_exists("armor_monoid") local use_armor_monoid = minetest.global_exists("armor_monoid")
local use_pova_mod = minetest.get_modpath("pova")
local armor_def = setmetatable({}, { local armor_def = setmetatable({}, {
__index = function() __index = function()
return setmetatable({ return setmetatable({
@ -72,7 +73,8 @@ armor = {
on_damage = {}, on_damage = {},
on_destroy = {}, on_destroy = {},
}, },
version = "0.4.10", migrate_old_inventory = true,
version = "0.4.12",
} }
armor.config = { armor.config = {
@ -174,7 +176,7 @@ armor.update_player_visuals = function(self, player)
end end
armor.set_player_armor = function(self, player) armor.set_player_armor = function(self, player)
local name, player_inv = self:get_valid_player(player, "[set_player_armor]") local name, armor_inv = self:get_valid_player(player, "[set_player_armor]")
if not name then if not name then
return return
end end
@ -199,7 +201,7 @@ armor.set_player_armor = function(self, player)
change[group] = 1 change[group] = 1
levels[group] = 0 levels[group] = 0
end end
local list = player_inv:get_list("armor") local list = armor_inv:get_list("armor")
if type(list) ~= "table" then if type(list) ~= "table" then
return return
end end
@ -218,6 +220,7 @@ armor.set_player_armor = function(self, player)
local level = def.groups["armor_"..element] local level = def.groups["armor_"..element]
levels["fleshy"] = levels["fleshy"] + level levels["fleshy"] = levels["fleshy"] + level
end end
break
end end
-- DEPRECATED, use armor_groups instead -- DEPRECATED, use armor_groups instead
if def.groups["armor_radiation"] and levels["radiation"] then if def.groups["armor_radiation"] and levels["radiation"] then
@ -267,7 +270,8 @@ armor.set_player_armor = function(self, player)
change[group] = groups[group] / base change[group] = groups[group] / base
end end
for _, attr in pairs(self.attributes) do for _, attr in pairs(self.attributes) do
self.def[name][attr] = attributes[attr] local mult = attr == "heal" and self.config.heal_multiplier or 1
self.def[name][attr] = attributes[attr] * mult
end end
for _, phys in pairs(self.physics) do for _, phys in pairs(self.physics) do
self.def[name][phys] = physics[phys] self.def[name][phys] = physics[phys]
@ -284,6 +288,14 @@ armor.set_player_armor = function(self, player)
"3d_armor:physics") "3d_armor:physics")
player_monoids.gravity:add_change(player, physics.gravity, player_monoids.gravity:add_change(player, physics.gravity,
"3d_armor:physics") "3d_armor:physics")
elseif use_pova_mod then
-- only add the changes, not the default 1.0 for each physics setting
pova.add_override(name, "3d_armor", {
speed = physics.speed - 1,
jump = physics.jump - 1,
gravity = physics.gravity - 1,
})
pova.do_override(player)
else else
player:set_physics_override(physics) player:set_physics_override(physics)
end end
@ -296,7 +308,7 @@ armor.set_player_armor = function(self, player)
end end
armor.punch = function(self, player, hitter, time_from_last_punch, tool_capabilities) armor.punch = function(self, player, hitter, time_from_last_punch, tool_capabilities)
local name, player_inv = self:get_valid_player(player, "[punch]") local name, armor_inv = self:get_valid_player(player, "[punch]")
if not name then if not name then
return return
end end
@ -304,7 +316,7 @@ armor.punch = function(self, player, hitter, time_from_last_punch, tool_capabili
local count = 0 local count = 0
local recip = true local recip = true
local default_groups = {cracky=3, snappy=3, choppy=3, crumbly=3, level=1} local default_groups = {cracky=3, snappy=3, choppy=3, crumbly=3, level=1}
local list = player_inv:get_list("armor") local list = armor_inv:get_list("armor")
for i, stack in pairs(list) do for i, stack in pairs(list) do
if stack:get_count() == 1 then if stack:get_count() == 1 then
local name = stack:get_name() local name = stack:get_name()
@ -419,34 +431,68 @@ armor.get_armor_formspec = function(self, name, listring)
for _, attr in pairs(self.attributes) do for _, attr in pairs(self.attributes) do
formspec = formspec:gsub("armor_attr_"..attr, armor.def[name][attr]) formspec = formspec:gsub("armor_attr_"..attr, armor.def[name][attr])
end end
for _, group in pairs(self.attributes) do for group, _ in pairs(self.registered_groups) do
formspec = formspec:gsub("armor_group_"..group, armor.def[name][group]) formspec = formspec:gsub("armor_group_"..group,
armor.def[name].groups[group])
end end
return formspec return formspec
end end
armor.get_element = function(self, item_name)
for _, element in pairs(armor.elements) do
if minetest.get_item_group(item_name, "armor_"..element) > 0 then
return element
end
end
end
armor.serialize_inventory_list = function(self, list)
local list_table = {}
for _, stack in ipairs(list) do
table.insert(list_table, stack:to_string())
end
return minetest.serialize(list_table)
end
armor.deserialize_inventory_list = function(self, list_string)
local list_table = minetest.deserialize(list_string)
local list = {}
for _, stack in ipairs(list_table or {}) do
table.insert(list, ItemStack(stack))
end
return list
end
armor.load_armor_inventory = function(self, player)
local _, inv = self:get_valid_player(player, "[load_armor_inventory]")
if inv then
local armor_list_string = player:get_attribute("3d_armor_inventory")
if armor_list_string then
inv:set_list("armor",
self:deserialize_inventory_list(armor_list_string))
return true
end
end
end
armor.save_armor_inventory = function(self, player)
local _, inv = self:get_valid_player(player, "[save_armor_inventory]")
if inv then
player:set_attribute("3d_armor_inventory",
self:serialize_inventory_list(inv:get_list("armor")))
end
end
armor.update_inventory = function(self, player) armor.update_inventory = function(self, player)
-- DEPRECATED: Legacy inventory support -- DEPRECATED: Legacy inventory support
end end
armor.set_inventory_stack = function(self, player, i, stack) armor.set_inventory_stack = function(self, player, i, stack)
local msg = "[set_inventory_stack]" local _, inv = self:get_valid_player(player, "[set_inventory_stack]")
local name = player:get_player_name() if inv then
if not name then inv:set_stack("armor", i, stack)
minetest.log("warning", S("3d_armor: Player name is nil @1", msg)) self:save_armor_inventory(player)
return
end end
local player_inv = player:get_inventory()
local armor_inv = minetest.get_inventory({type="detached", name=name.."_armor"})
if not player_inv then
minetest.log("warning", S("3d_armor: Player inventory is nil @1", msg))
return
elseif not armor_inv then
minetest.log("warning", S("3d_armor: Detached armor inventory is nil @1", msg))
return
end
player_inv:set_stack("armor", i, stack)
armor_inv:set_stack("armor", i, stack)
end end
armor.get_valid_player = function(self, player, msg) armor.get_valid_player = function(self, player, msg)
@ -460,9 +506,9 @@ armor.get_valid_player = function(self, player, msg)
minetest.log("warning", S("3d_armor: Player name is nil @1", msg)) minetest.log("warning", S("3d_armor: Player name is nil @1", msg))
return return
end end
local inv = player:get_inventory() local inv = minetest.get_inventory({type="detached", name=name.."_armor"})
if not inv then if not inv then
minetest.log("warning", S("3d_armor: Player inventory is nil @1", msg)) minetest.log("warning", S("3d_armor: Detached armor inventory is nil @1", msg))
return return
end end
return name, inv return name, inv

View File

@ -1,6 +1,7 @@
default default
player_monoids? player_monoids?
armor_monoid? armor_monoid?
pova?
fire? fire?
ethereal? ethereal?
bakedclay? bakedclay?

View File

@ -109,46 +109,93 @@ armor:register_on_destroy(function(player, index, stack)
end end
end) end)
local function validate_armor_inventory(player)
-- Workaround for detached inventory swap exploit
local _, inv = armor:get_valid_player(player, "[validate_armor_inventory]")
if not inv then
return
end
local armor_prev = {}
local armor_list_string = player:get_attribute("3d_armor_inventory")
if armor_list_string then
local armor_list = armor:deserialize_inventory_list(armor_list_string)
for i, stack in ipairs(armor_list) do
if stack:get_count() > 0 then
armor_prev[stack:get_name()] = i
end
end
end
local elements = {}
local player_inv = player:get_inventory()
for i = 1, 6 do
local stack = inv:get_stack("armor", i)
if stack:get_count() > 0 then
local item = stack:get_name()
local element = armor:get_element(item)
if element and not elements[element] then
if armor_prev[item] then
armor_prev[item] = nil
else
-- Item was not in previous inventory
armor:run_callbacks("on_equip", player, i, stack)
end
elements[element] = true;
else
inv:remove_item("armor", stack)
-- The following code returns invalid items to the player's main
-- inventory but could open up the possibity for a hacked client
-- to receive items back they never really had. I am not certain
-- so remove the is_singleplayer check at your own risk :]
if minetest.is_singleplayer() and player_inv and
player_inv:room_for_item("main", stack) then
player_inv:add_item("main", stack)
end
end
end
end
for item, i in pairs(armor_prev) do
local stack = ItemStack(item)
-- Previous item is not in current inventory
armor:run_callbacks("on_unequip", player, i, stack)
end
end
local function init_player_armor(player) local function init_player_armor(player)
local name = player:get_player_name() local name = player:get_player_name()
local player_inv = player:get_inventory()
local pos = player:getpos() local pos = player:getpos()
if not name or not player_inv or not pos then if not name or not pos then
return false return false
end end
local armor_inv = minetest.create_detached_inventory(name.."_armor", { local armor_inv = minetest.create_detached_inventory(name.."_armor", {
on_put = function(inv, listname, index, stack, player) on_put = function(inv, listname, index, stack, player)
player:get_inventory():set_stack(listname, index, stack) validate_armor_inventory(player)
armor:run_callbacks("on_equip", player, index, stack) armor:save_armor_inventory(player)
armor:set_player_armor(player) armor:set_player_armor(player)
end, end,
on_take = function(inv, listname, index, stack, player) on_take = function(inv, listname, index, stack, player)
player:get_inventory():set_stack(listname, index, nil) validate_armor_inventory(player)
armor:run_callbacks("on_unequip", player, index, stack) armor:save_armor_inventory(player)
armor:set_player_armor(player) armor:set_player_armor(player)
end, end,
on_move = function(inv, from_list, from_index, to_list, to_index, count, player) on_move = function(inv, from_list, from_index, to_list, to_index, count, player)
local plaver_inv = player:get_inventory() validate_armor_inventory(player)
local stack = inv:get_stack(to_list, to_index) armor:save_armor_inventory(player)
player_inv:set_stack(to_list, to_index, stack)
player_inv:set_stack(from_list, from_index, nil)
armor:set_player_armor(player) armor:set_player_armor(player)
end, end,
allow_put = function(inv, listname, index, stack, player) allow_put = function(inv, listname, index, put_stack, player)
local def = stack:get_definition() or {} local element = armor:get_element(put_stack:get_name())
local allowed = 0 if not element then
for _, element in pairs(armor.elements) do return 0
if def.groups["armor_"..element] then end
allowed = 1 for i = 1, 6 do
for i = 1, 6 do local stack = inv:get_stack("armor", i)
local item = inv:get_stack("armor", i):get_name() local def = stack:get_definition() or {}
if minetest.get_item_group(item, "armor_"..element) > 0 then if def.groups and def.groups["armor_"..element]
return 0 and i ~= index then
end return 0
end
end end
end end
return allowed return 1
end, end,
allow_take = function(inv, listname, index, stack, player) allow_take = function(inv, listname, index, stack, player)
return stack:get_count() return stack:get_count()
@ -158,11 +205,21 @@ local function init_player_armor(player)
end, end,
}, name) }, name)
armor_inv:set_size("armor", 6) armor_inv:set_size("armor", 6)
player_inv:set_size("armor", 6) if not armor:load_armor_inventory(player) and armor.migrate_old_inventory then
local player_inv = player:get_inventory()
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:save_armor_inventory(player)
player_inv:set_size("armor", 0)
end
for i=1, 6 do for i=1, 6 do
local stack = player_inv:get_stack("armor", i) local stack = armor_inv:get_stack("armor", i)
armor_inv:set_stack("armor", i, stack) if stack:get_count() > 0 then
armor:run_callbacks("on_equip", player, i, stack) armor:run_callbacks("on_equip", player, i, stack)
end
end end
armor.def[name] = { armor.def[name] = {
init_time = minetest.get_gametime(), init_time = minetest.get_gametime(),
@ -256,19 +313,20 @@ end)
if armor.config.drop == true or armor.config.destroy == true then if armor.config.drop == true or armor.config.destroy == true then
minetest.register_on_dieplayer(function(player) minetest.register_on_dieplayer(function(player)
local name, player_inv = armor:get_valid_player(player, "[on_dieplayer]") local name, armor_inv = armor:get_valid_player(player, "[on_dieplayer]")
if not name then if not name then
return return
end end
local drop = {} local drop = {}
for i=1, player_inv:get_size("armor") do for i=1, armor_inv:get_size("armor") do
local stack = player_inv:get_stack("armor", i) local stack = armor_inv:get_stack("armor", i)
if stack:get_count() > 0 then if stack:get_count() > 0 then
table.insert(drop, stack) table.insert(drop, stack)
armor:set_inventory_stack(player, i, nil)
armor:run_callbacks("on_unequip", player, i, stack) armor:run_callbacks("on_unequip", player, i, stack)
armor_inv:set_stack("armor", i, nil)
end end
end end
armor:save_armor_inventory(player)
armor:set_player_armor(player) armor:set_player_armor(player)
local pos = player:getpos() local pos = player:getpos()
if pos and armor.config.destroy == false then if pos and armor.config.destroy == false then
@ -319,7 +377,6 @@ minetest.register_on_player_hpchange(function(player, hp_change)
local name = player:get_player_name() local name = player:get_player_name()
if name then if name then
local heal = armor.def[name].heal local heal = armor.def[name].heal
heal = heal * armor.config.heal_multiplier
if heal >= math.random(100) then if heal >= math.random(100) then
hp_change = 0 hp_change = 0
end end

386
3d_armor/locale/ms.po Normal file
View File

@ -0,0 +1,386 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-06 18:20+0200\n"
"PO-Revision-Date: 2018-02-07 13:25+0800\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.6\n"
"Last-Translator: MuhdNurHidayat (MNH48) <mnh48mail@gmail.com>\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"Language: ms\n"
#: ../3d_armor/api.lua
msgid "3d_armor: Player name is nil @1"
msgstr "3d_armor: Nama pemain tiada nilai @1"
#: ../3d_armor/api.lua
msgid "3d_armor: Player inventory is nil @1"
msgstr "3d_armor: Inventori pemain tiada nilai @1"
#: ../3d_armor/api.lua
msgid "3d_armor: Detached armor inventory is nil @1"
msgstr "3d_armor: Inventori perisai terpisah tiada nilai @1"
#: ../3d_armor/api.lua
msgid "3d_armor: Player reference is nil @1"
msgstr "3d_armor: Rujukan pemain tiada nilai @1"
#: ../3d_armor/armor.lua
msgid "Admin Helmet"
msgstr "Helmet Pentadbir"
#: ../3d_armor/armor.lua
msgid "Admin Chestplate"
msgstr "Perisai Dada Pentadbir"
#: ../3d_armor/armor.lua
msgid "Admin Leggings"
msgstr "Perisai Kaki Pentadbir"
#: ../3d_armor/armor.lua
msgid "Admin Boots"
msgstr "But Pentadbir"
#: ../3d_armor/armor.lua
msgid "Wood Helmet"
msgstr "Helmet Kayu"
#: ../3d_armor/armor.lua
msgid "Wood Chestplate"
msgstr "Perisai Dada Kayu"
#: ../3d_armor/armor.lua
msgid "Wood Leggings"
msgstr "Perisai Kaki Kayu"
#: ../3d_armor/armor.lua
msgid "Wood Boots"
msgstr "But Kayu"
#: ../3d_armor/armor.lua
msgid "Cactus Helmet"
msgstr "Helmet Kaktus"
#: ../3d_armor/armor.lua
msgid "Cactus Chestplate"
msgstr "Perisai Dada Kaktus"
#: ../3d_armor/armor.lua
msgid "Cactus Leggings"
msgstr "Perisai Kaki Kaktus"
#: ../3d_armor/armor.lua
msgid "Cactus Boots"
msgstr "But Kaktus"
#: ../3d_armor/armor.lua
msgid "Steel Helmet"
msgstr "Helmet Keluli"
#: ../3d_armor/armor.lua
msgid "Steel Chestplate"
msgstr "Perisai Dada Keluli"
#: ../3d_armor/armor.lua
msgid "Steel Leggings"
msgstr "Perisai Kaki Keluli"
#: ../3d_armor/armor.lua
msgid "Steel Boots"
msgstr "But Keluli"
#: ../3d_armor/armor.lua
msgid "Bronze Helmet"
msgstr "Helmet Gangsa"
#: ../3d_armor/armor.lua
msgid "Bronze Chestplate"
msgstr "Perisai Dada Gangsa"
#: ../3d_armor/armor.lua
msgid "Bronze Leggings"
msgstr "Perisai Kaki Gangsa"
#: ../3d_armor/armor.lua
msgid "Bronze Boots"
msgstr "But Gangsa"
# 'Diamond' should be translated as 'intan' because the more common word 'berlian' is only specifically used for the gemstone diamond.
#: ../3d_armor/armor.lua
msgid "Diamond Helmet"
msgstr "Helmet Intan"
#: ../3d_armor/armor.lua
msgid "Diamond Chestplate"
msgstr "Perisai Dada Intan"
#: ../3d_armor/armor.lua
msgid "Diamond Leggings"
msgstr "Perisai Kaki Intan"
#: ../3d_armor/armor.lua
msgid "Diamond Boots"
msgstr "But Intan"
#: ../3d_armor/armor.lua
msgid "Gold Helmet"
msgstr "Helmet Emas"
#: ../3d_armor/armor.lua
msgid "Gold Chestplate"
msgstr "Perisai Dada Emas"
#: ../3d_armor/armor.lua
msgid "Gold Leggings"
msgstr "Perisai Kaki Emas"
#: ../3d_armor/armor.lua
msgid "Gold Boots"
msgstr "But Emas"
#: ../3d_armor/armor.lua
msgid "Mithril Helmet"
msgstr "Helmet Mithril"
#: ../3d_armor/armor.lua
msgid "Mithril Chestplate"
msgstr "Perisai Dada Mithril"
#: ../3d_armor/armor.lua
msgid "Mithril Leggings"
msgstr "Perisai Kaki Mithril"
#: ../3d_armor/armor.lua
msgid "Mithril Boots"
msgstr "But Mithril"
#: ../3d_armor/armor.lua
msgid "Crystal Helmet"
msgstr "Helmet Kristal"
#: ../3d_armor/armor.lua
msgid "Crystal Chestplate"
msgstr "Perisai Dada Kristal"
#: ../3d_armor/armor.lua
msgid "Crystal Leggings"
msgstr "Perisai Kaki Kristal"
#: ../3d_armor/armor.lua
msgid "Crystal Boots"
msgstr "But Kristal"
#: ../3d_armor/init.lua ../3d_armor_ui/init.lua
msgid "Radiation"
msgstr "Radiasi"
#: ../3d_armor/init.lua ../3d_armor_ui/init.lua
msgid "Level"
msgstr "Tahap"
#: ../3d_armor/init.lua ../3d_armor_ui/init.lua
msgid "Heal"
msgstr "Pulih"
#: ../3d_armor/init.lua ../3d_armor_ui/init.lua
msgid "Fire"
msgstr "Api"
#: ../3d_armor/init.lua
msgid "Your @1 got destroyed!"
msgstr "@1 anda telah musnah!"
#: ../3d_armor/init.lua
msgid "3d_armor: Failed to initialize player"
msgstr "3d_armor: Gagal mengasalkan pemain"
#: ../3d_armor/init.lua
msgid "[3d_armor] Fire Nodes disabled"
msgstr "[3d_armor] Nod-nod Api dilumpuhkan"
#: ../3d_armor_ip/init.lua
msgid "3d_armor_ip: Mod loaded but unused."
msgstr "3d_armor_ip: Mods dimuatkan tetapi tidak digunakan."
#: ../3d_armor_ip/init.lua
msgid "Back"
msgstr "Kembali"
#: ../3d_armor_ip/init.lua ../3d_armor_sfinv/init.lua ../3d_armor_ui/init.lua
msgid "Armor"
msgstr "Perisai"
#: ../3d_armor_sfinv/init.lua
msgid "3d_armor_sfinv: Mod loaded but unused."
msgstr "3d_armor_sfinv: Mods dimuatkan tetapi tidak digunakan."
#: ../3d_armor_stand/init.lua
msgid "Armor stand top"
msgstr "Bhg atas dirian perisai"
#: ../3d_armor_stand/init.lua
msgid "Armor stand"
msgstr "Dirian perisai"
#: ../3d_armor_stand/init.lua
msgid "Armor Stand"
msgstr "Dirian Perisai"
#: ../3d_armor_stand/init.lua
msgid "Locked Armor stand"
msgstr "Dirian perisai Berkunci"
#: ../3d_armor_stand/init.lua
msgid "Armor Stand (owned by @1)"
msgstr "Dirian Perisai (milik @1)"
#: ../3d_armor_ui/init.lua
msgid "3d_armor_ui: Mod loaded but unused."
msgstr "3d_armor_ui: Mods dimuatkan tetapi tidak digunakan."
#: ../3d_armor_ui/init.lua
msgid "3d Armor"
msgstr "Perisai 3d"
#: ../3d_armor_ui/init.lua
msgid "Armor not initialized!"
msgstr "Perisai tidak diasalkan!"
#: ../hazmat_suit/init.lua
msgid "hazmat_suit: Mod loaded but unused."
msgstr "hazmat_suit: Mods dimuatkan tetapi tidak digunakan."
#: ../hazmat_suit/init.lua
msgid "Hazmat Helmet"
msgstr "Helmet Keselamatan"
#: ../hazmat_suit/init.lua
msgid "Hazmat Chestplate"
msgstr "Perisai Dada Keselamatan"
#: ../hazmat_suit/init.lua
msgid "Hazmat Sleeve"
msgstr "Perisai Tangan Keselamatan"
#: ../hazmat_suit/init.lua
msgid "Hazmat Leggins"
msgstr "Perisai Kaki Keselamatan"
#: ../hazmat_suit/init.lua
msgid "Hazmat Boots"
msgstr "But Keselamatan"
#: ../hazmat_suit/init.lua
msgid "Hazmat Suit"
msgstr "Pakaian Keselamatan"
#: ../shields/init.lua
msgid "Admin Shield"
msgstr "Perisai Pegang Pentadbir"
#: ../shields/init.lua
msgid "Wooden Shield"
msgstr "Perisai Pegang Kayu"
#: ../shields/init.lua
msgid "Enhanced Wood Shield"
msgstr "Perisai Pegang Kayu Kukuh"
#: ../shields/init.lua
msgid "Cactus Shield"
msgstr "Perisai Pegang Kaktus"
#: ../shields/init.lua
msgid "Enhanced Cactus Shield"
msgstr "Perisai Pegang Kaktus Kukuh"
#: ../shields/init.lua
msgid "Steel Shield"
msgstr "Perisai Pegang Keluli"
#: ../shields/init.lua
msgid "Bronze Shield"
msgstr "Perisai Pegang Gangsa"
#: ../shields/init.lua
msgid "Diamond Shield"
msgstr "Perisai Pegang Intan"
#: ../shields/init.lua
msgid "Gold Shield"
msgstr "Perisai Pegang Emas"
#: ../shields/init.lua
msgid "Mithril Shield"
msgstr "Perisai Pegang Mithril"
#: ../shields/init.lua
msgid "Crystal Shield"
msgstr "Perisai Pegang Kristal"
#: ../technic_armor/init.lua
msgid "technic_armor: Mod loaded but unused."
msgstr "technic_armor: Mods dimuatkan tetapi tidak digunakan."
# 'Lead' here is the chemical compound so the translation is 'plumbum', not 'pimpin' (act of leading).
#: ../technic_armor/init.lua
msgid "Lead"
msgstr "Plumbum"
#: ../technic_armor/init.lua
msgid "Brass"
msgstr "Loyang"
#: ../technic_armor/init.lua
msgid "Cast Iron"
msgstr "Besi Tuang"
#: ../technic_armor/init.lua
msgid "Carbon Steel"
msgstr "Keluli Karbon"
#: ../technic_armor/init.lua
msgid "Stainless Steel"
msgstr "Keluli Tahan Karat"
#: ../technic_armor/init.lua
msgid "Tin"
msgstr "Timah"
#: ../technic_armor/init.lua
msgid "Silver"
msgstr "Perak"
#: ../technic_armor/init.lua
msgid "Helmet"
msgstr "Helmet"
#: ../technic_armor/init.lua
msgid "Chestplate"
msgstr "Perisai Dada"
#: ../technic_armor/init.lua
msgid "Leggings"
msgstr "Perisai Kaki"
#: ../technic_armor/init.lua
msgid "Boots"
msgstr "But"
#: ../technic_armor/init.lua
msgid "Shield"
msgstr "Perisai Pegang"
#. Translators: @1 stands for material and @2 for part of the armor, so that you could use a conjunction if in your language part name comes first then material (e.g. in french 'Silver Boots' is translated in 'Bottes en argent' by using '@2 en @1' as translated string)
#: ../technic_armor/init.lua
msgid "@1 @2"
msgstr "@2 @1"

View File

@ -1,5 +1,5 @@
[mod] 3d Armor integration to inventory plus [3d_armor_ip] [mod] 3d Armor integration to inventory plus [3d_armor_ip]
========================================================== ==========================================================
License Source Code: (C) 2012-2017 Stuart Jones - LGPL v2.1 License Source Code: (C) 2012-2018 Stuart Jones - LGPL v2.1

View File

@ -1,5 +1,5 @@
[mod] 3d Armor sfinv integration [3d_armor_sfinv] [mod] 3d Armor sfinv integration [3d_armor_sfinv]
================================================= =================================================
License Source Code: (C) 2012-2017 Stuart Jones - LGPL v2.1 License Source Code: (C) 2012-2018 Stuart Jones - LGPL v2.1

View File

@ -1,9 +1,9 @@
[mod] 3d Armor Stand [3d_armor_stand] [mod] 3d Armor Stand [3d_armor_stand]
===================================== =====================================
License Source Code: (C) 2016-2017 Stuart Jones - LGPL v2.1 License Source Code: (C) 2016-2018 Stuart Jones - LGPL v2.1
Lecense Models: (C) 2016-2017 Stuart Jones - CC BY-SA 3.0 Lecense Models: (C) 2016-2018 Stuart Jones - CC BY-SA 3.0
UV model mapping by tobyplowy(aka toby109tt) UV model mapping by tobyplowy(aka toby109tt)

View File

@ -321,11 +321,23 @@ minetest.register_entity("3d_armor_stand:armor_entity", {
end, end,
}) })
minetest.register_abm({
nodenames = {"3d_armor_stand:locked_armor_stand", "3d_armor_stand:armor_stand"},
interval = 15,
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
local num
num = #minetest.get_objects_inside_radius(pos, 0.5)
if num > 0 then return end
update_entity(pos)
end
})
minetest.register_craft({ minetest.register_craft({
output = "3d_armor_stand:armor_stand", output = "3d_armor_stand:armor_stand",
recipe = { recipe = {
{"", "default:fence_wood", ""}, {"", "group:fence", ""},
{"", "default:fence_wood", ""}, {"", "group:fence", ""},
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
} }
}) })

View File

@ -1,5 +1,5 @@
[mod] 3d Armor integration to unified inventory [3d_armor_ui] [mod] 3d Armor integration to unified inventory [3d_armor_ui]
============================================================= =============================================================
License Source Code: (C) 2012-2017 Stuart Jones - LGPL v2.1 License Source Code: (C) 2012-2018 Stuart Jones - LGPL v2.1

View File

@ -1,6 +1,7 @@
-- support for i18n -- support for i18n
local S = armor_i18n.gettext local S = armor_i18n.gettext
local F = armor_i18n.fgettext local F = armor_i18n.fgettext
local has_technic = minetest.get_modpath("technic") ~= nil
if not minetest.global_exists("unified_inventory") then if not minetest.global_exists("unified_inventory") then
minetest.log("warning", S("3d_armor_ui: Mod loaded but unused.")) minetest.log("warning", S("3d_armor_ui: Mod loaded but unused."))
@ -43,7 +44,7 @@ unified_inventory.register_page("armor", {
formspec = formspec.."label[5.0,"..(fy + 1.0)..";".. formspec = formspec.."label[5.0,"..(fy + 1.0)..";"..
F("Fire")..": "..armor.def[name].fire.."]" F("Fire")..": "..armor.def[name].fire.."]"
end end
if minetest.global_exists("technic") then if has_technic then
formspec = formspec.."label[5.0,"..(fy + 1.5)..";".. formspec = formspec.."label[5.0,"..(fy + 1.5)..";"..
F("Radiation")..": "..armor.def[name].groups["radiation"].."]" F("Radiation")..": "..armor.def[name].groups["radiation"].."]"
end end

View File

@ -1,9 +1,9 @@
3D Armor - Visible Player Armor 3D Armor - Visible Player Armor
=============================== ===============================
License Source Code: Copyright (C) 2013-2017 Stuart Jones - LGPL v2.1 License Source Code: Copyright (C) 2013-2018 Stuart Jones - LGPL v2.1
Armor Textures: Copyright (C) 2017 davidthecreator - CC-BY-SA 3.0 Armor Textures: Copyright (C) 2017-2018 davidthecreator - CC-BY-SA 3.0
Special credit to Jordach and MirceaKitsune for providing the default 3d character model. Special credit to Jordach and MirceaKitsune for providing the default 3d character model.

View File

@ -1,5 +1,5 @@
Modpack - 3d Armor [0.4.10] Modpack - 3d Armor [0.4.12]
========================== ===========================
### Table of Contents ### Table of Contents
<!-- START doctoc generated TOC please keep comment here to allow auto update --> <!-- START doctoc generated TOC please keep comment here to allow auto update -->
@ -9,8 +9,6 @@ Modpack - 3d Armor [0.4.10]
- [[mod] Visible Player Armor [3d_armor]](#mod-visible-player-armor-3d_armor) - [[mod] Visible Player Armor [3d_armor]](#mod-visible-player-armor-3d_armor)
- [[mod] Visible Wielded Items [wieldview]](#mod-visible-wielded-items-wieldview) - [[mod] Visible Wielded Items [wieldview]](#mod-visible-wielded-items-wieldview)
- [[mod] Shields [shields]](#mod-shields-shields) - [[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) - [[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 --> <!-- END doctoc generated TOC please keep comment here to allow auto update -->
@ -19,7 +17,7 @@ Modpack - 3d Armor [0.4.10]
[mod] Visible Player Armor [3d_armor] [mod] Visible Player Armor [3d_armor]
------------------------------------- -------------------------------------
Minetest Version: 0.4.15 Minetest Version: 0.4.16 - 0.4.17.1
Game: minetest_game and many derivatives Game: minetest_game and many derivatives
@ -63,23 +61,6 @@ Depends: 3d_armor
Originally a part of 3d_armor, shields have been re-included as an optional extra. 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. 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] [mod] 3d Armor Stand [3d_armor_stand]
------------------------------------- -------------------------------------

View File

@ -1,7 +0,0 @@
[mod] Hazmat Suit [hazmat_suit]
===============================
License Source Code: Copyright (C) 2015-2017 Stuart Jones - LGPL v2.1
License Textures: HybridDog and numberZero - 2015-2017 WTFPL

View File

@ -1,12 +0,0 @@
[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.
*Requires patched version of technic mod - https://github.com/minetest-technic/technic/pull/275
Depends: 3d_armor, technic
Textures by HybridDog and numberZero

View File

@ -1,2 +0,0 @@
3d_armor
technic?

View File

@ -1 +0,0 @@
Adds hazmat suit (protects from water, fire and radiation) to 3d_armor.

View File

@ -1,105 +0,0 @@
-- support for i18n
local S = armor_i18n.gettext
if not minetest.get_modpath("technic") then
minetest.log("warning", S("hazmat_suit: Mod loaded but unused."))
return
end
minetest.register_craftitem("hazmat_suit:helmet_hazmat", {
description = S("Hazmat Helmet"),
inventory_image = "hazmat_suit_inv_helmet_hazmat.png",
stack_max = 1,
})
minetest.register_craftitem("hazmat_suit:chestplate_hazmat", {
description = S("Hazmat Chestplate"),
inventory_image = "hazmat_suit_inv_chestplate_hazmat.png",
stack_max = 1,
})
minetest.register_craftitem("hazmat_suit:sleeve_hazmat", {
description = S("Hazmat Sleeve"),
inventory_image = "hazmat_suit_inv_sleeve_hazmat.png",
stack_max = 1,
})
minetest.register_craftitem("hazmat_suit:leggings_hazmat", {
description = S("Hazmat Leggins"),
inventory_image = "hazmat_suit_inv_leggings_hazmat.png",
stack_max = 1,
})
minetest.register_craftitem("hazmat_suit:boots_hazmat", {
description = S("Hazmat Boots"),
inventory_image = "hazmat_suit_inv_boots_hazmat.png",
stack_max = 1,
})
armor:register_armor("hazmat_suit:suit_hazmat", {
description = S("Hazmat Suit"),
inventory_image = "hazmat_suit_inv_suit_hazmat.png",
groups = {armor_head=1, armor_torso=1, armor_legs=1, armor_feet=1,
armor_heal=20, armor_fire=4, armor_water=1, armor_use=1000,
physics_jump=-0.1, physics_speed=-0.2, physics_gravity=0.1},
armor_groups = {fleshy=35, radiation=50},
damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1},
})
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",
},
})

Binary file not shown.

Before

Width:  |  Height:  |  Size: 359 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 409 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 355 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 383 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 614 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 492 B

View File

@ -1 +0,0 @@
hazmat_suit/textures/hazmat_suit_suit_hazmat.png:all

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 65 KiB

View File

@ -1,8 +1,8 @@
[mod] Shields [shields] [mod] Shields [shields]
======================= =======================
License Source Code: Copyright (C) 2013-2017 Stuart Jones - LGPL v2.1 License Source Code: Copyright (C) 2013-2018 Stuart Jones - LGPL v2.1
License Textures: Copyright (C) 2017 davidthecreator - CC-BY-SA 3.0 License Textures: Copyright (C) 2017-2018 davidthecreator - CC-BY-SA 3.0
https://github.com/daviddoesminetest/3d-armors-new-textures https://github.com/daviddoesminetest/3d-armors-new-textures

View File

@ -7,3 +7,10 @@ Depends: 3d_armor
Originally a part of 3d_armor, shields have been re-included as an optional extra. 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. If you do not what shields then simply remove the shields folder from the modpack.
Shields Configuration
---------------------
Override the following default settings by adding them to your minetest.conf file.
shields_disable_sounds = false

View File

@ -1,14 +1,14 @@
-- support for i18n -- support for i18n
local S = armor_i18n.gettext local S = armor_i18n.gettext
local disable_sounds = minetest.settings:get_bool("shields_disable_sounds")
local use_moreores = minetest.get_modpath("moreores") local use_moreores = minetest.get_modpath("moreores")
local function play_sound_effect(player, name) local function play_sound_effect(player, name)
if player then if not disable_sounds and player then
local pos = player:getpos() local pos = player:getpos()
if pos then if pos then
minetest.sound_play({ minetest.sound_play(name, {
pos = pos, pos = pos,
name = name,
max_hear_distance = 10, max_hear_distance = 10,
gain = 0.5, gain = 0.5,
}) })
@ -28,15 +28,6 @@ armor:register_armor("shields:shield_admin", {
description = S("Admin Shield"), description = S("Admin Shield"),
inventory_image = "shields_inv_shield_admin.png", inventory_image = "shields_inv_shield_admin.png",
groups = {armor_shield=1000, armor_heal=100, armor_use=0, not_in_creative_inventory=1}, groups = {armor_shield=1000, armor_heal=100, armor_use=0, not_in_creative_inventory=1},
on_punched = function(player, hitter, time_from_last_punch, tool_capabilities)
if type(hitter) == "userdata" then
if hitter:is_player() then
hitter:set_wielded_item("")
end
play_sound_effect(player, "default_dig_metal")
end
return false
end,
}) })
minetest.register_alias("adminshield", "shields:shield_admin") minetest.register_alias("adminshield", "shields:shield_admin")

View File

@ -1,7 +0,0 @@
[mod] Technic Armor [technic_armor]
===================================
License Source Code: Copyright (C) 2013-2017 Stuart Jones - LGPL v2.1
License Textures: poet.nohit and numberZero - 2015-2017 WTFPL

View File

@ -1,9 +0,0 @@
[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
Textures by poet.nohit and numberZero

View File

@ -1,3 +0,0 @@
3d_armor
technic_worldgen?
moreores?

View File

@ -1 +0,0 @@
Adds tin, silver and technic materials to 3d_armor.

View File

@ -1,66 +0,0 @@
-- support for i18n
local S = armor_i18n.gettext
local F = armor_i18n.fgettext
if not minetest.get_modpath("technic_worldgen") then
minetest.log("warning", S("technic_armor: Mod loaded but unused."))
return
end
local stats = {
lead = { name=S("Lead"), material="technic:lead_ingot", armor=1.6, heal=0, use=500, radiation=80*1.1 },
brass = { name=S("Brass"), material="technic:brass_ingot", armor=1.8, heal=0, use=650, radiation=43 },
cast = { name=S("Cast Iron"), material="technic:cast_iron_ingot", armor=2.5, heal=8, use=200, radiation=40 },
carbon = { name=S("Carbon Steel"), material="technic:carbon_steel_ingot", armor=2.7, heal=10, use=100, radiation=40 },
stainless = { name=S("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=S("Tin"), material="moreores:tin_ingot", armor=1.6, heal=0, use=750, radiation=37 }
stats.silver = { name=S("Silver"), material="moreores:silver_ingot", armor=1.8, heal=6, use=650, radiation=53 }
end
local parts = {
helmet = { place="head", name=S("Helmet"), level=5, radlevel = 0.10, craft={{1,1,1},{1,0,1}} },
chestplate = { place="torso", name=S("Chestplate"), level=8, radlevel = 0.35, craft={{1,0,1},{1,1,1},{1,1,1}} },
leggings = { place="legs", name=S("Leggings"), level=7, radlevel = 0.15, craft={{1,1,1},{1,0,1},{1,0,1}} },
boots = { place="feet", name=S("Boots"), level=4, radlevel = 0.10, craft={{1,0,1},{1,0,1}} },
}
if minetest.get_modpath("shields") then
parts.shield = { place="shield", name=S("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, {
-- Translators: @1 stands for material and @2 for part of the armor, so that you could use a conjunction if in your language part name comes first then material (e.g. in french 'Silver Boots' is translated in 'Bottes en argent' by using '@2 en @1' as translated string)
description = S("@1 @2", 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

View File

@ -1,41 +0,0 @@
technic_armor/textures/technic_armor_helmet_brass.png:head
technic_armor/textures/technic_armor_chestplate_brass.png:torso
technic_armor/textures/technic_armor_leggings_brass.png:legs
technic_armor/textures/technic_armor_boots_brass.png:feet
technic_armor/textures/technic_armor_shield_brass.png:shield
technic_armor/textures/technic_armor_helmet_cast.png:head
technic_armor/textures/technic_armor_chestplate_cast.png:torso
technic_armor/textures/technic_armor_leggings_cast.png:legs
technic_armor/textures/technic_armor_boots_cast.png:feet
technic_armor/textures/technic_armor_shield_cast.png:shield
technic_armor/textures/technic_armor_helmet_stainless.png:head
technic_armor/textures/technic_armor_chestplate_stainless.png:torso
technic_armor/textures/technic_armor_leggings_stainless.png:legs
technic_armor/textures/technic_armor_boots_stainless.png:feet
technic_armor/textures/technic_armor_shield_stainless.png:shield
technic_armor/textures/technic_armor_helmet_tin.png:head
technic_armor/textures/technic_armor_chestplate_tin.png:torso
technic_armor/textures/technic_armor_leggings_tin.png:legs
technic_armor/textures/technic_armor_boots_tin.png:feet
technic_armor/textures/technic_armor_shield_tin.png:shield
technic_armor/textures/technic_armor_helmet_lead.png:head
technic_armor/textures/technic_armor_chestplate_lead.png:torso
technic_armor/textures/technic_armor_leggings_lead.png:legs
technic_armor/textures/technic_armor_boots_lead.png:feet
technic_armor/textures/technic_armor_shield_lead.png:shield
technic_armor/textures/technic_armor_helmet_carbon.png:head
technic_armor/textures/technic_armor_chestplate_carbon.png:torso
technic_armor/textures/technic_armor_leggings_carbon.png:legs
technic_armor/textures/technic_armor_boots_carbon.png:feet
technic_armor/textures/technic_armor_shield_carbon.png:shield
technic_armor/textures/technic_armor_helmet_silver.png:head
technic_armor/textures/technic_armor_chestplate_silver.png:torso
technic_armor/textures/technic_armor_leggings_silver.png:legs
technic_armor/textures/technic_armor_boots_silver.png:feet
technic_armor/textures/technic_armor_shield_silver.png:shield

Binary file not shown.

Before

Width:  |  Height:  |  Size: 528 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 436 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 432 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 362 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 528 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 436 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 506 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 405 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 501 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 386 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 661 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 399 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 520 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 436 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 723 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 553 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 698 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 522 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 723 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 553 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 918 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 549 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 709 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 465 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 867 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 496 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 710 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 537 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 693 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 405 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 617 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 335 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 693 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 405 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 701 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 343 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 647 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 343 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 680 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 350 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 665 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 401 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 358 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 360 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 360 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 385 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 358 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 377 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 358 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 374 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 375 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 375 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 432 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 374 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 395 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 374 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 361 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 363 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 363 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 395 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 361 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 375 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 361 B

Some files were not shown because too many files have changed in this diff Show More