Compare commits
	
		
			70 Commits
		
	
	
		
			2d280a5a1e
			...
			master
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 3ae2529c9f | |||
| a6779e7911 | |||
| 
						 | 
					a586aeee0c | ||
| 
						 | 
					082e866274 | ||
| 
						 | 
					c224a73df7 | ||
| 
						 | 
					280165fada | ||
| 357cc3aada | |||
| 
						 | 
					ab1bec3be8 | ||
| 
						 | 
					22955b413a | ||
| 
						 | 
					1fcbf64d53 | ||
| 
						 | 
					fb86c02e43 | ||
| 
						 | 
					20917da061 | ||
| 
						 | 
					7bd77a7b80 | ||
| 
						 | 
					25369e5165 | ||
| 
						 | 
					7fc313f911 | ||
| 
						 | 
					4bac73fc9e | ||
| 
						 | 
					f430395b64 | ||
| 
						 | 
					467709c935 | ||
| 
						 | 
					e0b6112320 | ||
| 6b2f83e8e3 | |||
| 
						 | 
					f3e66701aa | ||
| babb15262d | |||
| 
						 | 
					7a0c456638 | ||
| 
						 | 
					9a687fbb51 | ||
| 
						 | 
					1e2760a6cf | ||
| 
						 | 
					1da9d94e7c | ||
| 
						 | 
					3660e50312 | ||
| 
						 | 
					c894ba4b0c | ||
| 
						 | 
					aef125a0ca | ||
| 
						 | 
					7d251784e7 | ||
| 
						 | 
					6eb492b09c | ||
| 
						 | 
					dfa19cce98 | ||
| 19b8ea4028 | |||
| 
						 | 
					1d8509e75b | ||
| 
						 | 
					053c30b8b1 | ||
| 
						 | 
					dc7fbce09a | ||
| 
						 | 
					72970b3da1 | ||
| 
						 | 
					52f0e6a0ed | ||
| 
						 | 
					400745dd0c | ||
| 
						 | 
					68d724176e | ||
| 
						 | 
					2ef66d3132 | ||
| 
						 | 
					e75c0bedcc | ||
| 
						 | 
					92d036c5a7 | ||
| 
						 | 
					7f20e5dcb7 | ||
| 
						 | 
					04b45deec8 | ||
| 
						 | 
					bfa3a2b6d1 | ||
| 
						 | 
					41301a4663 | ||
| 
						 | 
					eebee34fa0 | ||
| 
						 | 
					c7ee559a4c | ||
| 
						 | 
					9444afd722 | ||
| 1869d4b0c3 | |||
| 
						 | 
					e1a262ba20 | ||
| 
						 | 
					ac445a6cd0 | ||
| c95eb77a4e | |||
| 
						 | 
					a9b8bc4ddd | ||
| 6757013da2 | |||
| 
						 | 
					b6651fd396 | ||
| 
						 | 
					16e2648416 | ||
| 
						 | 
					44778d7861 | ||
| 5845d3682d | |||
| 
						 | 
					8dcbc42525 | ||
| 
						 | 
					c0f303abc1 | ||
| 
						 | 
					46c599333e | ||
| 
						 | 
					da78601a77 | ||
| 
						 | 
					c790b20169 | ||
| 
						 | 
					a897f7e72f | ||
| e8f938bd2c | |||
| 
						 | 
					ac7615212b | ||
| 3bc7ed06e2 | |||
| 
						 | 
					38fc2cff2b | 
							
								
								
									
										5
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
.* export-ignore
 | 
			
		||||
gendoc.sh export-ignore
 | 
			
		||||
integration-test.sh export-ignore
 | 
			
		||||
preview_gen.py export-ignore
 | 
			
		||||
screenshot.xcf export-ignore
 | 
			
		||||
							
								
								
									
										31
									
								
								.github/workflows/reference.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,31 @@
 | 
			
		||||
name: Build Reference
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
    - master
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  build:
 | 
			
		||||
    name: Build
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
    - name: Checkout
 | 
			
		||||
      uses: actions/checkout@v3
 | 
			
		||||
    - name: Setup Lua
 | 
			
		||||
      uses: leafo/gh-actions-lua@v10.0.0
 | 
			
		||||
      with:
 | 
			
		||||
        luaVersion: 5.4
 | 
			
		||||
    - name: Setup Lua Rocks
 | 
			
		||||
      uses: leafo/gh-actions-luarocks@v4
 | 
			
		||||
    - name: Setup LDoc dependencies
 | 
			
		||||
      run: luarocks install --only-deps https://raw.githubusercontent.com/lunarmodules/ldoc/master/rockspecs/ldoc-1.5.0-1.rockspec
 | 
			
		||||
    - name: Setup LDoc
 | 
			
		||||
      run: git clone --single-branch --branch=custom https://github.com/AntumDeluge/ldoc.git .ldoc/ldoc && chmod +x .ldoc/ldoc/ldoc.lua
 | 
			
		||||
    - name: Generate docs
 | 
			
		||||
      run: chmod +x .ldoc/gendoc.sh && ./.ldoc/gendoc.sh
 | 
			
		||||
    - name: Deploy
 | 
			
		||||
      uses: peaceiris/actions-gh-pages@v3
 | 
			
		||||
      with:
 | 
			
		||||
        github_token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
        publish_dir: ./3d_armor/docs
 | 
			
		||||
							
								
								
									
										335
									
								
								.ldoc/config.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,335 @@
 | 
			
		||||
 | 
			
		||||
-- place this file in mod ".ldoc" directory
 | 
			
		||||
 | 
			
		||||
local print, type, string, table, tostring, tonumber, error, pairs, ipairs
 | 
			
		||||
if import then
 | 
			
		||||
	print = import("print")
 | 
			
		||||
	type = import("type")
 | 
			
		||||
	string = import("string")
 | 
			
		||||
	table = import("table")
 | 
			
		||||
	tostring = import("tostring")
 | 
			
		||||
	tonumber = import("tonumber")
 | 
			
		||||
	error = import("error")
 | 
			
		||||
	pairs = import("pairs")
 | 
			
		||||
	ipairs = import("ipairs")
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
project = "3d_armor"
 | 
			
		||||
title = "3D Armor"
 | 
			
		||||
format = "markdown"
 | 
			
		||||
not_luadoc = true
 | 
			
		||||
boilerplate = false
 | 
			
		||||
wrap = false
 | 
			
		||||
style = true
 | 
			
		||||
favicon = "https://www.minetest.net/media/icon.svg"
 | 
			
		||||
 | 
			
		||||
file = {
 | 
			
		||||
	"3d_armor/api.lua",
 | 
			
		||||
	".ldoc/settings.luadoc",
 | 
			
		||||
	--".ldoc/armors.luadoc",
 | 
			
		||||
	".ldoc/helmets.luadoc",
 | 
			
		||||
	".ldoc/chestplates.luadoc",
 | 
			
		||||
	".ldoc/leggings.luadoc",
 | 
			
		||||
	".ldoc/boots.luadoc",
 | 
			
		||||
	--".ldoc/shields.luadoc",
 | 
			
		||||
	"shields/init.lua",
 | 
			
		||||
	".ldoc/crafting.luadoc",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
new_type("setting", "Settings")
 | 
			
		||||
new_type("armor", "Armors")
 | 
			
		||||
new_type("craft", "Craft Recipes")
 | 
			
		||||
 | 
			
		||||
alias("helmet", "armor")
 | 
			
		||||
alias("chestplate", "armor")
 | 
			
		||||
alias("leggings", "armor")
 | 
			
		||||
alias("boots", "armor")
 | 
			
		||||
alias("shield", "armor")
 | 
			
		||||
alias("grp", "group")
 | 
			
		||||
 | 
			
		||||
-- function declarations
 | 
			
		||||
local format_text
 | 
			
		||||
local format_group
 | 
			
		||||
 | 
			
		||||
custom_tags = {
 | 
			
		||||
	-- settings
 | 
			
		||||
	{
 | 
			
		||||
		"settype",
 | 
			
		||||
		title = "Type",
 | 
			
		||||
		hidden = true,
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		"min",
 | 
			
		||||
		title = "Minimum Value",
 | 
			
		||||
		hidden = true,
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		"max",
 | 
			
		||||
		title = "Maximum Value",
 | 
			
		||||
		hidden = true,
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		"default",
 | 
			
		||||
		title = "Default Value",
 | 
			
		||||
		hidden = true,
 | 
			
		||||
	},
 | 
			
		||||
	-- craft items/tools
 | 
			
		||||
	{
 | 
			
		||||
		-- specify image basename only
 | 
			
		||||
		"img",
 | 
			
		||||
		title = "Inventory Image",
 | 
			
		||||
		format = function(value)
 | 
			
		||||
			return "<img src=\"../data/" .. value .. "\" style=\"width:32px; height:32px;\" />"
 | 
			
		||||
		end,
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		-- specify full (relative or absolute) image path
 | 
			
		||||
		"image",
 | 
			
		||||
		title = "Image",
 | 
			
		||||
		format = function(value)
 | 
			
		||||
			return "<img src=\"" .. value .. "\" style=\"width:32px; height:32px;\" />"
 | 
			
		||||
		end,
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		"group",
 | 
			
		||||
		title = "Groups",
 | 
			
		||||
		format = function(value)
 | 
			
		||||
			return format_group(value)
 | 
			
		||||
		end,
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		"armorgrp",
 | 
			
		||||
		title = "Armor Groups",
 | 
			
		||||
		format = function(value)
 | 
			
		||||
			return format_group(value)
 | 
			
		||||
		end,
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		"damagegrp",
 | 
			
		||||
		title = "Damage Groups",
 | 
			
		||||
		format = function(value)
 | 
			
		||||
			return format_group(value)
 | 
			
		||||
		end,
 | 
			
		||||
	},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if string then
 | 
			
		||||
	string.trim = function(st, delim)
 | 
			
		||||
		if not delim then
 | 
			
		||||
			delim = " "
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		while string.find(st, delim) == 1 do
 | 
			
		||||
			st = st:sub(2)
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		while string.sub(st, string.len(st)) == delim do
 | 
			
		||||
			st = st:sub(1, string.len(st)-1)
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		return st
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	string.split = function(st, delim)
 | 
			
		||||
		local list = {}
 | 
			
		||||
 | 
			
		||||
		local idx = string.find(st, delim)
 | 
			
		||||
		while idx do
 | 
			
		||||
			table.insert(list, st:sub(1, idx-1))
 | 
			
		||||
			st = st:sub(idx+1)
 | 
			
		||||
			idx = string.find(st, delim)
 | 
			
		||||
		end
 | 
			
		||||
		-- add remaining item
 | 
			
		||||
		table.insert(list, st)
 | 
			
		||||
 | 
			
		||||
		return list
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
if table then
 | 
			
		||||
	if not table.copy then
 | 
			
		||||
		table.copy = function(orig_table)
 | 
			
		||||
			local new_table = {}
 | 
			
		||||
			for k, v in pairs(orig_table) do
 | 
			
		||||
				new_table[k] = v
 | 
			
		||||
			end
 | 
			
		||||
 | 
			
		||||
			return new_table
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
format_text = function(text, flags)
 | 
			
		||||
	local ret = "<"
 | 
			
		||||
	local ttype = "span"
 | 
			
		||||
	if flags.code then
 | 
			
		||||
		ttype = "code"
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	ret = ret .. ttype .. " style=\""
 | 
			
		||||
 | 
			
		||||
	if flags.size then
 | 
			
		||||
		ret = ret .. "font-size:" .. flags.size .. ";"
 | 
			
		||||
	end
 | 
			
		||||
	if flags.mono then
 | 
			
		||||
		ret = ret .. "font-family:monospace;"
 | 
			
		||||
	end
 | 
			
		||||
	if flags.italic then
 | 
			
		||||
		ret = ret .. "font-style:italic;"
 | 
			
		||||
	end
 | 
			
		||||
	if flags.bold then
 | 
			
		||||
		ret = ret .. "font-weight:bold;"
 | 
			
		||||
	end
 | 
			
		||||
	if flags.color then
 | 
			
		||||
		ret = ret .. "color:" .. flags.color .. ";"
 | 
			
		||||
	end
 | 
			
		||||
	if flags.bgcolor then
 | 
			
		||||
		ret = ret .. "background-color:" .. flags.bgcolor .. ";"
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	ret = ret .. "\">" .. text .. "</" .. ttype .. ">"
 | 
			
		||||
 | 
			
		||||
	return ret
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
format_group = function(text)
 | 
			
		||||
	if string then
 | 
			
		||||
		local idx, k, v = string.find(text, " ")
 | 
			
		||||
		if idx then
 | 
			
		||||
			text = format_text(string.sub(text, 1, idx-1) .. ": ", {mono=true, color="darkgreen"})
 | 
			
		||||
				.. string.sub(text, idx)
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	return text
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
local function format_setting_tag(desc, value)
 | 
			
		||||
	return "\n- <span style=\"font-size:80%;\">`" .. desc .. ":`</span> `" .. value .. "`"
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
local registered = {
 | 
			
		||||
	settings = {},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local function setting_handler(item)
 | 
			
		||||
	-- avoid parsing again
 | 
			
		||||
	if registered.settings[item.name] then
 | 
			
		||||
		return item
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	if not ipairs or not type then
 | 
			
		||||
		return item
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	local tags = {
 | 
			
		||||
		{"settype", "type"},
 | 
			
		||||
		{"default"},
 | 
			
		||||
		{"min", "minimum value"},
 | 
			
		||||
		{"max", "maximum value"},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	local def = {
 | 
			
		||||
		["settype"] = format_setting_tag("type", "string"),
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, t in ipairs(tags) do
 | 
			
		||||
		local name = t[1]
 | 
			
		||||
		local desc = t[2]
 | 
			
		||||
		if not desc then desc = name end
 | 
			
		||||
 | 
			
		||||
		local value = item.tags[name]
 | 
			
		||||
		if type(value) == "table" then
 | 
			
		||||
			if #value > 1 then
 | 
			
		||||
				local msg = item.file.filename .. " (line " .. item.lineno
 | 
			
		||||
					.. "): multiple instances of tag \"" .. name .. "\" found"
 | 
			
		||||
				if error then
 | 
			
		||||
					error(msg)
 | 
			
		||||
				elseif print then
 | 
			
		||||
					print("WARNING: " .. msg)
 | 
			
		||||
				end
 | 
			
		||||
			end
 | 
			
		||||
 | 
			
		||||
			if value[1] then
 | 
			
		||||
				def[name] = format_setting_tag(desc, value[1])
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	item.description = item.description .. "\n\n**Definition:**\n" .. def.settype
 | 
			
		||||
	for _, t in ipairs({def.default, def.min, def.max}) do
 | 
			
		||||
		if t then
 | 
			
		||||
			item.description = item.description .. t
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	registered.settings[item.name] = true
 | 
			
		||||
 | 
			
		||||
	return item
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function custom_display_name_handler(item, default_handler)
 | 
			
		||||
	if item.type == "setting" then
 | 
			
		||||
		item = setting_handler(item)
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	if item then
 | 
			
		||||
		return default_handler(item)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
local custom_see_links = {
 | 
			
		||||
	["ObjectRef"] = "https://minetest.gitlab.io/minetest/class-reference/#objectref",
 | 
			
		||||
	["PlayerMetaRef"] = "https://minetest.gitlab.io/minetest/class-reference/#playermetaref",
 | 
			
		||||
	["ItemDef"] = "https://minetest.gitlab.io/minetest/definition-tables/#item-definition",
 | 
			
		||||
	["ItemStack"] = "https://minetest.gitlab.io/minetest/class-reference/#itemstack",
 | 
			
		||||
	["groups"] = "https://minetest.gitlab.io/minetest/groups/",
 | 
			
		||||
	["entity_damage_mechanism"] = "https://minetest.gitlab.io/minetest/entity-damage-mechanism/",
 | 
			
		||||
	["vector"] = "https://minetest.gitlab.io/minetest/representations-of-simple-things/#positionvector",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local function format_custom_see(name, section)
 | 
			
		||||
	local url = custom_see_links[name]
 | 
			
		||||
	if not url then
 | 
			
		||||
		url = ""
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	if not name then
 | 
			
		||||
		name = ""
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	return name, url
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
custom_see_handler("^(ObjectRef)$", function(name, section)
 | 
			
		||||
	return format_custom_see(name, section)
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
custom_see_handler("^(PlayerMetaRef)$", function(name, section)
 | 
			
		||||
	return format_custom_see(name, section)
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
custom_see_handler("^(ItemDef)$", function(name, section)
 | 
			
		||||
	return format_custom_see(name, section)
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
custom_see_handler("^(groups)$", function(name, section)
 | 
			
		||||
	return format_custom_see(name, section)
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
custom_see_handler("^(entity_damage_mechanism)$", function(name, section)
 | 
			
		||||
	return format_custom_see(name, section)
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
custom_see_handler("^(ItemStack)$", function(name, section)
 | 
			
		||||
	return format_custom_see(name, section)
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
custom_see_handler("^(vector)$", function(name, section)
 | 
			
		||||
	return name, "https://minetest.gitlab.io/minetest/representations-of-simple-things/#positionvector"
 | 
			
		||||
end)
 | 
			
		||||
							
								
								
									
										39
									
								
								.ldoc/crafting.luadoc
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,39 @@
 | 
			
		||||
 | 
			
		||||
--- 3D Armor Crafting
 | 
			
		||||
--
 | 
			
		||||
--  @topic crafting
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--- Craft recipes for helmets, chestplates, leggings, boots, & shields.
 | 
			
		||||
--
 | 
			
		||||
--  @craft armor
 | 
			
		||||
--  @usage
 | 
			
		||||
--  Key:
 | 
			
		||||
--  - m: material
 | 
			
		||||
--    - 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
 | 
			
		||||
--    - nether:  nether:nether_ingot
 | 
			
		||||
--
 | 
			
		||||
--  helmet:        chestplate:    leggings:
 | 
			
		||||
--  ┌───┬───┬───┐  ┌───┬───┬───┐  ┌───┬───┬───┐
 | 
			
		||||
--  │ m │ m │ m │  │ m │   │ m │  │ m │ m │ m │
 | 
			
		||||
--  ├───┼───┼───┤  ├───┼───┼───┤  ├───┼───┼───┤
 | 
			
		||||
--  │ m │   │ m │  │ m │ m │ m │  │ m │   │ m │
 | 
			
		||||
--  ├───┼───┼───┤  ├───┼───┼───┤  ├───┼───┼───┤
 | 
			
		||||
--  │   │   │   │  │ m │ m │ m │  │ m │   │ m │
 | 
			
		||||
--  └───┴───┴───┘  └───┴───┴───┘  └───┴───┴───┘
 | 
			
		||||
--
 | 
			
		||||
--  boots:         shield:
 | 
			
		||||
--  ┌───┬───┬───┐  ┌───┬───┬───┐
 | 
			
		||||
--  │   │   │   │  │ m │ m │ m │
 | 
			
		||||
--  ├───┼───┼───┤  ├───┼───┼───┤
 | 
			
		||||
--  │ m │   │ m │  │ m │ m │ m │
 | 
			
		||||
--  ├───┼───┼───┤  ├───┼───┼───┤
 | 
			
		||||
--  │ m │   │ m │  │   │ m │   │
 | 
			
		||||
--  └───┴───┴───┘  └───┴───┴───┘
 | 
			
		||||
							
								
								
									
										88
									
								
								.ldoc/gendoc.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						@@ -0,0 +1,88 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Place this file in mod ".ldoc" directory.
 | 
			
		||||
#
 | 
			
		||||
# To change output directory set the `d_export` environment variable.
 | 
			
		||||
# Example:
 | 
			
		||||
#   $ d_export=/custom/path ./gendoc.sh
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
d_ldoc="$(dirname $(readlink -f $0))"
 | 
			
		||||
f_config="${d_ldoc}/config.ld"
 | 
			
		||||
 | 
			
		||||
cd "${d_ldoc}/.."
 | 
			
		||||
 | 
			
		||||
d_root="$(pwd)"
 | 
			
		||||
d_export="${d_export:-${d_root}/3d_armor/docs/reference}"
 | 
			
		||||
d_data="${d_export}/data"
 | 
			
		||||
 | 
			
		||||
cmd_ldoc="${d_ldoc}/ldoc/ldoc.lua"
 | 
			
		||||
if test -f "${cmd_ldoc}"; then
 | 
			
		||||
	if test ! -x "${cmd_ldoc}"; then
 | 
			
		||||
		chmod +x "${cmd_ldoc}"
 | 
			
		||||
	fi
 | 
			
		||||
else
 | 
			
		||||
	cmd_ldoc="ldoc"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# clean old files
 | 
			
		||||
rm -rf "${d_export}"
 | 
			
		||||
 | 
			
		||||
# generate items, settings, & crafts topics temp files
 | 
			
		||||
echo -e "\ngenerating temp files ..."
 | 
			
		||||
for script in src settings; do
 | 
			
		||||
	script="${d_ldoc}/parse_${script}.py"
 | 
			
		||||
	if test ! -f "${script}"; then
 | 
			
		||||
		echo "ERROR: script doesn't exist: ${script}"
 | 
			
		||||
	else
 | 
			
		||||
		# check script's executable bit
 | 
			
		||||
		if test ! -x "${script}"; then
 | 
			
		||||
			chmod +x "${script}"
 | 
			
		||||
		fi
 | 
			
		||||
		# execute script
 | 
			
		||||
		"${script}"
 | 
			
		||||
	fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
echo
 | 
			
		||||
 | 
			
		||||
# generate new doc files
 | 
			
		||||
"${cmd_ldoc}" --unsafe_no_sandbox -c "${f_config}" -d "${d_export}" "${d_root}"; retval=$?
 | 
			
		||||
 | 
			
		||||
# check exit status
 | 
			
		||||
if test ${retval} -ne 0; then
 | 
			
		||||
	echo -e "\nan error occurred (ldoc return code: ${retval})"
 | 
			
		||||
	exit ${retval}
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo -e "\ncleaning temp files ..."
 | 
			
		||||
find "${d_ldoc}" -type f -name "*.luadoc" ! -name "crafting.luadoc" -exec rm -vf {} +
 | 
			
		||||
 | 
			
		||||
# HACK: ldoc does not seem to like the "shields:" prefix
 | 
			
		||||
echo -e "\ncompensating for LDoc's issue with \"shields:\" prefix ..."
 | 
			
		||||
sed -i \
 | 
			
		||||
	-e 's/<strong>shield_/<strong>shields:shield_/' \
 | 
			
		||||
	-e 's/<td class="name\(.*\)>shield_/<td class="name\1>shields:shield_/' \
 | 
			
		||||
	-e 's/<a href="#shield_/<a href="#shields:shield_/' \
 | 
			
		||||
	-e 's/<a name.*"shield_/<a name="shields:shield_/' \
 | 
			
		||||
	"${d_export}/topics/shields.html"
 | 
			
		||||
 | 
			
		||||
# copy textures to data directory
 | 
			
		||||
printf "\ncopying textures ..."
 | 
			
		||||
mkdir -p "${d_data}"
 | 
			
		||||
texture_count=0
 | 
			
		||||
for d_mod in armor_* shields; do
 | 
			
		||||
	printf "\rcopying textures from ${d_mod} ...\n"
 | 
			
		||||
	for png in $(find "${d_root}/${d_mod}/textures" -maxdepth 1 -type f -name "*.png"); do
 | 
			
		||||
		if test -f "${d_data}/$(basename ${png})"; then
 | 
			
		||||
			echo "WARNING: not overwriting existing file: ${png}"
 | 
			
		||||
		else
 | 
			
		||||
			cp "${png}" "${d_data}"
 | 
			
		||||
			texture_count=$((texture_count + 1))
 | 
			
		||||
			printf "\rcopied ${texture_count} textures"
 | 
			
		||||
		fi
 | 
			
		||||
	done
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
echo -e "\n\nDone!"
 | 
			
		||||
							
								
								
									
										305
									
								
								.ldoc/ldoc.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,305 @@
 | 
			
		||||
/* BEGIN RESET
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2010, Yahoo! Inc. All rights reserved.
 | 
			
		||||
Code licensed under the BSD License:
 | 
			
		||||
http://developer.yahoo.com/yui/license.html
 | 
			
		||||
version: 2.8.2r1
 | 
			
		||||
*/
 | 
			
		||||
html {
 | 
			
		||||
    color: #000;
 | 
			
		||||
    background: #FFF;
 | 
			
		||||
}
 | 
			
		||||
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td {
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
}
 | 
			
		||||
table {
 | 
			
		||||
    border-collapse: collapse;
 | 
			
		||||
    border-spacing: 0;
 | 
			
		||||
}
 | 
			
		||||
fieldset,img {
 | 
			
		||||
    border: 0;
 | 
			
		||||
}
 | 
			
		||||
address,caption,cite,code,dfn,em,strong,th,var,optgroup {
 | 
			
		||||
    font-style: inherit;
 | 
			
		||||
    font-weight: inherit;
 | 
			
		||||
}
 | 
			
		||||
del,ins {
 | 
			
		||||
    text-decoration: none;
 | 
			
		||||
}
 | 
			
		||||
li {
 | 
			
		||||
    margin-left: 20px;
 | 
			
		||||
}
 | 
			
		||||
caption,th {
 | 
			
		||||
    text-align: left;
 | 
			
		||||
}
 | 
			
		||||
h1,h2,h3,h4,h5,h6 {
 | 
			
		||||
    font-size: 100%;
 | 
			
		||||
    font-weight: bold;
 | 
			
		||||
}
 | 
			
		||||
q:before,q:after {
 | 
			
		||||
    content: '';
 | 
			
		||||
}
 | 
			
		||||
abbr,acronym {
 | 
			
		||||
    border: 0;
 | 
			
		||||
    font-variant: normal;
 | 
			
		||||
}
 | 
			
		||||
sup {
 | 
			
		||||
    vertical-align: baseline;
 | 
			
		||||
}
 | 
			
		||||
sub {
 | 
			
		||||
    vertical-align: baseline;
 | 
			
		||||
}
 | 
			
		||||
legend {
 | 
			
		||||
    color: #000;
 | 
			
		||||
}
 | 
			
		||||
input,button,textarea,select,optgroup,option {
 | 
			
		||||
    font-family: inherit;
 | 
			
		||||
    font-size: inherit;
 | 
			
		||||
    font-style: inherit;
 | 
			
		||||
    font-weight: inherit;
 | 
			
		||||
}
 | 
			
		||||
input,button,textarea,select {*font-size:100%;
 | 
			
		||||
}
 | 
			
		||||
/* END RESET */
 | 
			
		||||
 | 
			
		||||
body {
 | 
			
		||||
    margin-left: 1em;
 | 
			
		||||
    margin-right: 1em;
 | 
			
		||||
    font-family: arial, helvetica, geneva, sans-serif;
 | 
			
		||||
    background-color: #ffffff; margin: 0px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
code, tt { font-family: monospace; font-size: 1.1em; }
 | 
			
		||||
span.parameter { font-family:monospace; }
 | 
			
		||||
span.parameter:after { content:":"; }
 | 
			
		||||
span.types:before { content:"("; }
 | 
			
		||||
span.types:after { content:")"; }
 | 
			
		||||
.type { font-weight: bold; font-style:italic }
 | 
			
		||||
 | 
			
		||||
body, p, td, th { font-size: .95em; line-height: 1.2em;}
 | 
			
		||||
 | 
			
		||||
p, ul { margin: 10px 0 0 0px;}
 | 
			
		||||
 | 
			
		||||
strong { font-weight: bold;}
 | 
			
		||||
 | 
			
		||||
em { font-style: italic;}
 | 
			
		||||
 | 
			
		||||
h1 {
 | 
			
		||||
    font-size: 1.5em;
 | 
			
		||||
    margin: 20px 0 20px 0;
 | 
			
		||||
}
 | 
			
		||||
h2, h3, h4 { margin: 15px 0 10px 0; }
 | 
			
		||||
h2 { font-size: 1.25em; }
 | 
			
		||||
h3 { font-size: 1.15em; }
 | 
			
		||||
h4 { font-size: 1.06em; }
 | 
			
		||||
 | 
			
		||||
a:link { font-weight: bold; color: #004080; text-decoration: none; }
 | 
			
		||||
a:visited { font-weight: bold; color: #006699; text-decoration: none; }
 | 
			
		||||
a:link:hover { text-decoration: underline; }
 | 
			
		||||
 | 
			
		||||
hr {
 | 
			
		||||
    color:#cccccc;
 | 
			
		||||
    background: #00007f;
 | 
			
		||||
    height: 1px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
blockquote { margin-left: 3em; }
 | 
			
		||||
 | 
			
		||||
ul { list-style-type: disc; }
 | 
			
		||||
 | 
			
		||||
p.name {
 | 
			
		||||
    font-family: "Andale Mono", monospace;
 | 
			
		||||
    padding-top: 1em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pre {
 | 
			
		||||
    background-color: rgb(245, 245, 245);
 | 
			
		||||
    border: 1px solid #C0C0C0; /* silver */
 | 
			
		||||
    padding: 10px;
 | 
			
		||||
    margin: 10px 0 10px 0;
 | 
			
		||||
    overflow: auto;
 | 
			
		||||
    font-family: "Andale Mono", monospace;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pre.example {
 | 
			
		||||
    font-size: .85em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.index { border: 1px #00007f; }
 | 
			
		||||
table.index td { text-align: left; vertical-align: top; }
 | 
			
		||||
 | 
			
		||||
#container {
 | 
			
		||||
    margin-left: 1em;
 | 
			
		||||
    margin-right: 1em;
 | 
			
		||||
    background-color: #f0f0f0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#product {
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    border-bottom: 1px solid #cccccc;
 | 
			
		||||
    background-color: #ffffff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#product big {
 | 
			
		||||
    font-size: 2em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#main {
 | 
			
		||||
    background-color: #f0f0f0;
 | 
			
		||||
    border-left: 2px solid #cccccc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#navigation {
 | 
			
		||||
    float: left;
 | 
			
		||||
    width: 14em;
 | 
			
		||||
    vertical-align: top;
 | 
			
		||||
    background-color: #f0f0f0;
 | 
			
		||||
    overflow: visible;
 | 
			
		||||
    position: fixed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#navigation h2 {
 | 
			
		||||
    background-color:#e7e7e7;
 | 
			
		||||
    font-size:1.1em;
 | 
			
		||||
    color:#000000;
 | 
			
		||||
    text-align: left;
 | 
			
		||||
    padding:0.2em;
 | 
			
		||||
    border-top:1px solid #dddddd;
 | 
			
		||||
    border-bottom:1px solid #dddddd;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#navigation ul
 | 
			
		||||
{
 | 
			
		||||
    font-size:1em;
 | 
			
		||||
    list-style-type: none;
 | 
			
		||||
    margin: 1px 1px 10px 1px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#navigation li {
 | 
			
		||||
    text-indent: -1em;
 | 
			
		||||
    display: block;
 | 
			
		||||
    margin: 3px 0px 0px 22px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#navigation li li a {
 | 
			
		||||
    margin: 0px 3px 0px -1em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#content {
 | 
			
		||||
    margin-left: 14em;
 | 
			
		||||
    padding: 1em;
 | 
			
		||||
    width: 700px;
 | 
			
		||||
    border-left: 2px solid #cccccc;
 | 
			
		||||
    border-right: 2px solid #cccccc;
 | 
			
		||||
    background-color: #ffffff;
 | 
			
		||||
    min-height: 425px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#about {
 | 
			
		||||
    clear: both;
 | 
			
		||||
    padding: 5px;
 | 
			
		||||
    border-top: 2px solid #cccccc;
 | 
			
		||||
    background-color: #ffffff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media print {
 | 
			
		||||
    body {
 | 
			
		||||
        font: 12pt "Times New Roman", "TimeNR", Times, serif;
 | 
			
		||||
    }
 | 
			
		||||
    a { font-weight: bold; color: #004080; text-decoration: underline; }
 | 
			
		||||
 | 
			
		||||
    #main {
 | 
			
		||||
        background-color: #ffffff;
 | 
			
		||||
        border-left: 0px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #container {
 | 
			
		||||
        margin-left: 2%;
 | 
			
		||||
        margin-right: 2%;
 | 
			
		||||
        background-color: #ffffff;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #content {
 | 
			
		||||
        padding: 1em;
 | 
			
		||||
        background-color: #ffffff;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #navigation {
 | 
			
		||||
        display: none;
 | 
			
		||||
    }
 | 
			
		||||
    pre.example {
 | 
			
		||||
        font-family: "Andale Mono", monospace;
 | 
			
		||||
        font-size: 10pt;
 | 
			
		||||
        page-break-inside: avoid;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.module_list {
 | 
			
		||||
    border-width: 1px;
 | 
			
		||||
    border-style: solid;
 | 
			
		||||
    border-color: #cccccc;
 | 
			
		||||
    border-collapse: collapse;
 | 
			
		||||
}
 | 
			
		||||
table.module_list td {
 | 
			
		||||
    border-width: 1px;
 | 
			
		||||
    padding: 3px;
 | 
			
		||||
    border-style: solid;
 | 
			
		||||
    border-color: #cccccc;
 | 
			
		||||
}
 | 
			
		||||
table.module_list td.name { background-color: #f0f0f0; min-width: 200px; }
 | 
			
		||||
table.module_list td.summary { width: 100%; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
table.function_list {
 | 
			
		||||
    border-width: 1px;
 | 
			
		||||
    border-style: solid;
 | 
			
		||||
    border-color: #cccccc;
 | 
			
		||||
    border-collapse: collapse;
 | 
			
		||||
}
 | 
			
		||||
table.function_list td {
 | 
			
		||||
    border-width: 1px;
 | 
			
		||||
    padding: 3px;
 | 
			
		||||
    border-style: solid;
 | 
			
		||||
    border-color: #cccccc;
 | 
			
		||||
}
 | 
			
		||||
table.function_list td.name { background-color: #f0f0f0; min-width: 200px; }
 | 
			
		||||
table.function_list td.summary { width: 100%; }
 | 
			
		||||
 | 
			
		||||
ul.nowrap {
 | 
			
		||||
    overflow:auto;
 | 
			
		||||
    white-space:nowrap;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dl.table dt, dl.function dt {border-top: 1px solid #ccc; padding-top: 1em;}
 | 
			
		||||
dl.table dd, dl.function dd {padding-bottom: 1em; margin: 10px 0 0 20px;}
 | 
			
		||||
dl.table h3, dl.function h3 {font-size: .95em;}
 | 
			
		||||
 | 
			
		||||
/* stop sublists from having initial vertical space */
 | 
			
		||||
ul ul { margin-top: 0px; }
 | 
			
		||||
ol ul { margin-top: 0px; }
 | 
			
		||||
ol ol { margin-top: 0px; }
 | 
			
		||||
ul ol { margin-top: 0px; }
 | 
			
		||||
 | 
			
		||||
/* make the target distinct; helps when we're navigating to a function */
 | 
			
		||||
a:target + * {
 | 
			
		||||
  background-color: #FF9;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* styles for prettification of source */
 | 
			
		||||
pre .comment { color: #558817; }
 | 
			
		||||
pre .constant { color: #a8660d; }
 | 
			
		||||
pre .escape { color: #844631; }
 | 
			
		||||
pre .keyword { color: #aa5050; font-weight: bold; }
 | 
			
		||||
pre .library { color: #0e7c6b; }
 | 
			
		||||
pre .marker { color: #512b1e; background: #fedc56; font-weight: bold; }
 | 
			
		||||
pre .string { color: #8080ff; }
 | 
			
		||||
pre .number { color: #f8660d; }
 | 
			
		||||
pre .operator { color: #2239a8; font-weight: bold; }
 | 
			
		||||
pre .preprocessor, pre .prepro { color: #a33243; }
 | 
			
		||||
pre .global { color: #800080; }
 | 
			
		||||
pre .user-keyword { color: #800080; }
 | 
			
		||||
pre .prompt { color: #558817; }
 | 
			
		||||
pre .url { color: #272fc2; text-decoration: underline; }
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										118
									
								
								.ldoc/parse_settings.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						@@ -0,0 +1,118 @@
 | 
			
		||||
#!/usr/bin/env python
 | 
			
		||||
 | 
			
		||||
# This script will format "settingtypes.txt" file found at the root
 | 
			
		||||
# of 3d_armor modpack into a format readable by LDoc.
 | 
			
		||||
 | 
			
		||||
import sys, os, errno, codecs
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
path = os.path.realpath(__file__)
 | 
			
		||||
script = os.path.basename(path)
 | 
			
		||||
d_root = os.path.dirname(os.path.dirname(path))
 | 
			
		||||
d_ldoc = os.path.join(d_root, ".ldoc")
 | 
			
		||||
f_settings = os.path.join(d_root, "settingtypes.txt")
 | 
			
		||||
 | 
			
		||||
if not os.path.isfile(f_settings):
 | 
			
		||||
	print("settingtypes.txt does not exist")
 | 
			
		||||
	sys.exit(errno.ENOENT)
 | 
			
		||||
 | 
			
		||||
i_stream = codecs.open(f_settings, "r", "utf-8")
 | 
			
		||||
data_in = i_stream.read()
 | 
			
		||||
i_stream.close()
 | 
			
		||||
 | 
			
		||||
data_in = data_in.replace("\r", "")
 | 
			
		||||
 | 
			
		||||
sets = data_in.split("\n\n")
 | 
			
		||||
 | 
			
		||||
for idx in reversed(range(len(sets))):
 | 
			
		||||
	set = sets[idx]
 | 
			
		||||
	lines = set.split("\n")
 | 
			
		||||
	for idx2 in reversed(range(len(lines))):
 | 
			
		||||
		li = lines[idx2].strip(" \t")
 | 
			
		||||
		if li == "" or li[0] == "[":
 | 
			
		||||
			lines.pop(idx2)
 | 
			
		||||
 | 
			
		||||
	if len(lines) == 0:
 | 
			
		||||
		sets.pop(idx)
 | 
			
		||||
	else:
 | 
			
		||||
		sets[idx] = "\n".join(lines)
 | 
			
		||||
 | 
			
		||||
filtered = []
 | 
			
		||||
 | 
			
		||||
for set in sets:
 | 
			
		||||
	comment = False
 | 
			
		||||
	lines = set.split("\n")
 | 
			
		||||
	new_lines = []
 | 
			
		||||
	for li in lines:
 | 
			
		||||
		if li[0] == "#":
 | 
			
		||||
			new_lines.append(li)
 | 
			
		||||
		else:
 | 
			
		||||
			new_lines.append(li)
 | 
			
		||||
			filtered.append("\n".join(new_lines))
 | 
			
		||||
			new_lines = []
 | 
			
		||||
 | 
			
		||||
settings = []
 | 
			
		||||
 | 
			
		||||
def parse_setting(set):
 | 
			
		||||
	desc = []
 | 
			
		||||
	setting = summary = stype = sdefault = soptions = None
 | 
			
		||||
 | 
			
		||||
	for li in set.split("\n"):
 | 
			
		||||
		if li[0] == "#":
 | 
			
		||||
			desc.append("--  {}".format(li.lstrip(" #")))
 | 
			
		||||
		else:
 | 
			
		||||
			setting = li.split(" ")[0]
 | 
			
		||||
			summary = li.split(")")[0].split("(")[-1]
 | 
			
		||||
			li = li.split(")")[-1].strip()
 | 
			
		||||
			rem = li.split(" ")
 | 
			
		||||
			stype = rem[0]
 | 
			
		||||
			rem.pop(0)
 | 
			
		||||
 | 
			
		||||
			if len(rem) > 0:
 | 
			
		||||
				sdefault = rem[0]
 | 
			
		||||
				rem.pop(0)
 | 
			
		||||
 | 
			
		||||
			if len(rem) > 0:
 | 
			
		||||
				soptions = " ".join(rem)
 | 
			
		||||
 | 
			
		||||
	if not setting:
 | 
			
		||||
		return
 | 
			
		||||
 | 
			
		||||
	st = "---"
 | 
			
		||||
	if summary:
 | 
			
		||||
		if summary[-1] != ".":
 | 
			
		||||
			summary = "{}.".format(summary)
 | 
			
		||||
		st = "{} {}".format(st, summary)
 | 
			
		||||
 | 
			
		||||
	st = "{}\n--".format(st)
 | 
			
		||||
 | 
			
		||||
	if len(desc) > 0:
 | 
			
		||||
		st = "{}\n{}\n--".format(st, "\n".join(desc))
 | 
			
		||||
 | 
			
		||||
	st = "{}\n--  @setting {}".format(st, setting)
 | 
			
		||||
 | 
			
		||||
	if stype:
 | 
			
		||||
		st = "{}\n--  @settype {}".format(st, stype)
 | 
			
		||||
 | 
			
		||||
	if sdefault:
 | 
			
		||||
		st = "{}\n--  @default {}".format(st, sdefault)
 | 
			
		||||
 | 
			
		||||
	# TODO: add options
 | 
			
		||||
 | 
			
		||||
	settings.append(st)
 | 
			
		||||
 | 
			
		||||
for f in filtered:
 | 
			
		||||
	parse_setting(f)
 | 
			
		||||
 | 
			
		||||
outfile = os.path.join(d_ldoc, "settings.luadoc")
 | 
			
		||||
data_out = "\n--- 3D Armor Settings\n--\n--  @topic settings\n\n\n{}\n".format("\n\n".join(settings))
 | 
			
		||||
 | 
			
		||||
o_stream = codecs.open(outfile, "w", "utf-8")
 | 
			
		||||
if not o_stream:
 | 
			
		||||
	print("ERROR: could not open file for writing: {}".format(outfile))
 | 
			
		||||
	sys.exit(errno.EIO)
 | 
			
		||||
 | 
			
		||||
o_stream.write(data_out)
 | 
			
		||||
o_stream.close()
 | 
			
		||||
 | 
			
		||||
print("settings exported to\t{}".format(outfile))
 | 
			
		||||
							
								
								
									
										90
									
								
								.ldoc/parse_src.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						@@ -0,0 +1,90 @@
 | 
			
		||||
#!/usr/bin/env python
 | 
			
		||||
 | 
			
		||||
# This script will parse source files for docstring.
 | 
			
		||||
 | 
			
		||||
import os, codecs
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
path = os.path.realpath(__file__)
 | 
			
		||||
script = os.path.basename(path)
 | 
			
		||||
d_root = os.path.dirname(os.path.dirname(path))
 | 
			
		||||
d_ldoc = os.path.join(d_root, ".ldoc")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
armor_types = {
 | 
			
		||||
	"armor": {"topic": "Armors", "values": []},
 | 
			
		||||
	"helmet": {"topic": "Helmets", "values": []},
 | 
			
		||||
	"chestplate": {"topic": "Chestplates", "values": []},
 | 
			
		||||
	"leggings": {"topic": "Leggings", "values": []},
 | 
			
		||||
	"boots": {"topic": "Boots", "values": []},
 | 
			
		||||
	#"shield": {"topic": "Shields", "values": []},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
def parse_file(f):
 | 
			
		||||
	buffer = codecs.open(f, "r", "utf-8")
 | 
			
		||||
	if not buffer:
 | 
			
		||||
		print("ERROR: could not open file for reading: {}".format(f))
 | 
			
		||||
		return
 | 
			
		||||
 | 
			
		||||
	data_in = buffer.read()
 | 
			
		||||
	buffer.close()
 | 
			
		||||
 | 
			
		||||
	# format to LF (Unix)
 | 
			
		||||
	data_in = data_in.replace("\r\n", "\n").replace("\r", "\n")
 | 
			
		||||
 | 
			
		||||
	current_item = []
 | 
			
		||||
	item_type = None
 | 
			
		||||
	new_item = False
 | 
			
		||||
	for li in data_in.split("\n"):
 | 
			
		||||
		li = li.strip()
 | 
			
		||||
		if li.startswith("---"):
 | 
			
		||||
			new_item = True
 | 
			
		||||
		elif not li.startswith("--"):
 | 
			
		||||
			new_item = False
 | 
			
		||||
 | 
			
		||||
		if new_item:
 | 
			
		||||
			current_item.append(li)
 | 
			
		||||
			if not item_type:
 | 
			
		||||
				for a_type in armor_types:
 | 
			
		||||
					if "@{} ".format(a_type) in li:
 | 
			
		||||
						item_type = a_type
 | 
			
		||||
						break
 | 
			
		||||
		elif item_type and len(current_item):
 | 
			
		||||
			armor_types[item_type]["values"].append("\n".join(current_item))
 | 
			
		||||
			item_type = None
 | 
			
		||||
			current_item = []
 | 
			
		||||
		else:
 | 
			
		||||
			current_item = []
 | 
			
		||||
 | 
			
		||||
to_parse = []
 | 
			
		||||
 | 
			
		||||
for obj in os.listdir(d_root):
 | 
			
		||||
	fullpath = os.path.join(d_root, obj)
 | 
			
		||||
	if not obj.startswith(".") and os.path.isdir(fullpath):
 | 
			
		||||
		for root, dirs, files in os.walk(fullpath):
 | 
			
		||||
			for f in files:
 | 
			
		||||
				if f.endswith(".lua"):
 | 
			
		||||
					to_parse.append(os.path.join(root, f))
 | 
			
		||||
 | 
			
		||||
for p in to_parse:
 | 
			
		||||
	if not os.path.isfile(p):
 | 
			
		||||
		print("ERROR: {} is not a file".format(p))
 | 
			
		||||
	else:
 | 
			
		||||
		parse_file(p)
 | 
			
		||||
 | 
			
		||||
for t in armor_types:
 | 
			
		||||
	topic = armor_types[t]["topic"]
 | 
			
		||||
	items = armor_types[t]["values"]
 | 
			
		||||
 | 
			
		||||
	if len(items):
 | 
			
		||||
		outfile = os.path.join(d_ldoc, "{}.luadoc".format(topic.lower()))
 | 
			
		||||
 | 
			
		||||
		buffer = codecs.open(outfile, "w", "utf-8")
 | 
			
		||||
		if not buffer:
 | 
			
		||||
			print("ERROR: could not open file for writing: {}".format(outfile))
 | 
			
		||||
			continue
 | 
			
		||||
 | 
			
		||||
		buffer.write("\n--- 3D Armor {}\n--\n--  @topic {}\n\n\n{}\n".format(topic, topic.lower(), "\n\n".join(items)))
 | 
			
		||||
		buffer.close()
 | 
			
		||||
 | 
			
		||||
		print("{} exported to\t{}".format(topic.lower(), outfile))
 | 
			
		||||
@@ -18,6 +18,7 @@ read_globals = {
 | 
			
		||||
 | 
			
		||||
	-- deps
 | 
			
		||||
	"default",
 | 
			
		||||
	"player_api",
 | 
			
		||||
	"minetest",
 | 
			
		||||
	"unified_inventory",
 | 
			
		||||
	"wardrobe",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,26 +0,0 @@
 | 
			
		||||
[mod] 3d Armor [3d_armor]
 | 
			
		||||
=========================
 | 
			
		||||
 | 
			
		||||
License Source Code
 | 
			
		||||
-------------------
 | 
			
		||||
 | 
			
		||||
Copyright (C) 2012-2019 stujones11, Stuart Jones <stujones111@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software; you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU Lesser General Public License as published by
 | 
			
		||||
the Free Software Foundation; either version 2.1 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU Lesser General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU Lesser General Public License along
 | 
			
		||||
with this program; if not, write to the Free Software Foundation, Inc.,
 | 
			
		||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 | 
			
		||||
 | 
			
		||||
License Textures
 | 
			
		||||
----------------
 | 
			
		||||
 | 
			
		||||
Copyright (C) 2017-2019 davidthecreator - CC-BY-SA 3.0
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
|-[Armor Configuration](#armor-configuration)                               |||- - [3d_Armor Item Storage](#3d_armor-item-storage)
 | 
			
		||||
|- - [disable_specific_materials](#to-disable-individual-armor-materials)   |||- - [Armor Registration](#armor-registration)
 | 
			
		||||
|- - [armor_init_delay](#initialization-glitches-when-a-player-first-joins) |||- - [Registering Armor Groups](#registering-armor-groups)
 | 
			
		||||
|- - [armor_init_times](#number-of-initialization-attempts)                 |||- - [Groups used by 3d_Armor](#groups-used-by-3d_armor)
 | 
			
		||||
|- - [wieldview_update_time](#how-often-player-wield-items-are-updated)     |||- - [Groups used by 3d_Armor](#groups-used-by-3d_armor)
 | 
			
		||||
|- - [armor_bones_delay](#armor-not-in-bones-due-to-server-lag)             |||- - - [Elements](#elements)
 | 
			
		||||
|- - [armor_update_time](#how-often-player-armor-items-are-updated)         |||- - - [Attributes](#attributes)
 | 
			
		||||
|- - [armor_drop](#drop-armor-when-a-player-dies)                           |||- - - [Physics](#physics)
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
|- - [armor_fire_protect](#enable-fire-protection)                          |||- - - [armor:remove_all](#armor-remove_all)
 | 
			
		||||
|- - [armor_punch_damage](#enable-punch-damage-effects)                     |||- - - [armor:equip](#armor-equip)
 | 
			
		||||
|- - [armor_migrate_old_inventory](#migration-of-old-armor-inventories)     |||- - - [armor:unequip](#armor-unequip)
 | 
			
		||||
|- - [wieldview_update_time](#how-often-player-wield-items-are-updated)     |||- - - [armor:update_skin](#armor-update_skin)
 | 
			
		||||
|                                                                           |||- - - [armor:update_skin](#armor-update_skin)
 | 
			
		||||
|-[Credits](#credits)                                                       |||- - [Callbacks](#Callbacks)
 | 
			
		||||
|                                                                           |||- - - [Item callbacks](#item-callbacks)
 | 
			
		||||
|                                                                           |||- - - [Global callbacks](#global-callbacks)
 | 
			
		||||
@@ -53,17 +53,13 @@ Change the following default settings by going to Main Menu>>Settings(Tab)>>All
 | 
			
		||||
    armor_material_gold = true
 | 
			
		||||
    armor_material_mithril = true
 | 
			
		||||
    armor_material_crystal = true
 | 
			
		||||
    armor_material_nether = true
 | 
			
		||||
 | 
			
		||||
### Initialization glitches when a player first joins
 | 
			
		||||
 **Increase to prevent glitches**
 | 
			
		||||
 
 | 
			
		||||
    armor_init_delay = 2
 | 
			
		||||
 | 
			
		||||
### Number of initialization attempts
 | 
			
		||||
 **Increase to prevent glitches - Use in conjunction with armor_init_delay if initialization problems persist.**
 | 
			
		||||
 | 
			
		||||
    armor_init_times = 10
 | 
			
		||||
 | 
			
		||||
### Armor not in bones due to server lag
 | 
			
		||||
 **Increase to help resolve**
 | 
			
		||||
 
 | 
			
		||||
@@ -253,7 +249,7 @@ The above allows armor to block/prevent new damage types but you also need to as
 | 
			
		||||
## Groups used by 3d_Armor
 | 
			
		||||
3d_armor has many default groups already registered, these are categorized under 4 main headings
 | 
			
		||||
 - **Elements:** armor_head, armor_torso, armor_legs, armor_feet
 | 
			
		||||
 - **Attributes:** armor_heal, armor_fire, armor_water
 | 
			
		||||
 - **Attributes:** armor_heal, armor_fire, armor_water, armor_feather
 | 
			
		||||
 - **Physics:** physics_jump, physics_speed, physics_gravity
 | 
			
		||||
 - **Durability:** armor_use, flammable
 | 
			
		||||
 
 | 
			
		||||
@@ -333,6 +329,9 @@ The below Diamond chestplate has a 12% chance to completely block all damage (ar
 | 
			
		||||
		damage_groups = {cracky=2, snappy=1, choppy=1, level=3},
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
#### Armor_feather
 | 
			
		||||
***"Armor_feather"*** will slow a player when falling. This only has one level or state, which is armor_feather=1
 | 
			
		||||
 | 
			
		||||
### Physics
 | 
			
		||||
The physics attributes supported by 3d_armor are ***physics_jump, physics_speed and physics_gravity***. Although 3d_armor supports the use of this with no other mods it is recommended that the mod [player_monoids](https://forum.minetest.net/viewtopic.php?t=14895) is used to help with intermod compatability. 
 | 
			
		||||
 | 
			
		||||
@@ -396,6 +395,8 @@ If all of the above were made of material "wood" the player would recieve an ***
 | 
			
		||||
 | 
			
		||||
## Armor Functions
 | 
			
		||||
 | 
			
		||||
See also: [API Reference](https://minetest-mods.github.io/3d_armor/reference/)
 | 
			
		||||
 | 
			
		||||
### armor set_player_armor
 | 
			
		||||
 | 
			
		||||
	armor:set_player_armor(player)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										370
									
								
								3d_armor/api.lua
									
									
									
									
									
								
							
							
						
						@@ -1,3 +1,82 @@
 | 
			
		||||
 | 
			
		||||
--- 3D Armor API
 | 
			
		||||
--
 | 
			
		||||
--  @topic api
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
local transparent_armor = minetest.settings:get_bool("armor_transparent", false)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--- Tables
 | 
			
		||||
--
 | 
			
		||||
--  @section tables
 | 
			
		||||
 | 
			
		||||
--- Armor definition table used for registering armor.
 | 
			
		||||
--
 | 
			
		||||
--  @table ArmorDef
 | 
			
		||||
--  @tfield string description Human-readable name/description.
 | 
			
		||||
--  @tfield string inventory_image Image filename used for icon.
 | 
			
		||||
--  @tfield table groups See: `ArmorDef.groups`
 | 
			
		||||
--  @tfield table armor_groups See: `ArmorDef.armor_groups`
 | 
			
		||||
--  @tfield table damage_groups See: `ArmorDef.damage_groups`
 | 
			
		||||
--  @see ItemDef
 | 
			
		||||
--  @usage local def = {
 | 
			
		||||
--    description = "Wood Helmet",
 | 
			
		||||
--    inventory_image = "3d_armor_inv_helmet_wood.png",
 | 
			
		||||
--    groups = {armor_head=1, armor_heal=0, armor_use=2000, flammable=1},
 | 
			
		||||
--    armor_groups = {fleshy=5},
 | 
			
		||||
--    damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1},
 | 
			
		||||
--  }
 | 
			
		||||
 | 
			
		||||
--- Groups table.
 | 
			
		||||
--
 | 
			
		||||
--  General groups defining item behavior.
 | 
			
		||||
--
 | 
			
		||||
--  Some commonly used groups: ***armor\_<type>***, ***armor\_heal***, ***armor\_use***
 | 
			
		||||
--
 | 
			
		||||
--  @table ArmorDef.groups
 | 
			
		||||
--  @tfield int armor_type The armor type. "head", "torso", "hands", "shield", etc.
 | 
			
		||||
--  (**Note:** replace "type" with actual type).
 | 
			
		||||
--  @tfield int armor_heal Healing value of armor when equipped.
 | 
			
		||||
--  @tfield int armor_use Amount of uses/damage before armor "breaks".
 | 
			
		||||
--  @see groups
 | 
			
		||||
--  @usage groups = {
 | 
			
		||||
--    armor_head = 1,
 | 
			
		||||
--    armor_heal = 5,
 | 
			
		||||
--    armor_use = 2000,
 | 
			
		||||
--    flammable = 1,
 | 
			
		||||
--  }
 | 
			
		||||
 | 
			
		||||
--- Armor groups table.
 | 
			
		||||
--
 | 
			
		||||
--  Groups that this item is effective against when taking damage.
 | 
			
		||||
--
 | 
			
		||||
--  Some commonly used groups: ***fleshy***
 | 
			
		||||
--
 | 
			
		||||
--  @table ArmorDef.armor_groups
 | 
			
		||||
--  @usage armor_groups = {
 | 
			
		||||
--    fleshy = 5,
 | 
			
		||||
--  }
 | 
			
		||||
 | 
			
		||||
--- Damage groups table.
 | 
			
		||||
--
 | 
			
		||||
--  Groups that this item is effective on when used as a weapon/tool.
 | 
			
		||||
--
 | 
			
		||||
--  Some commonly used groups: ***cracky***, ***snappy***, ***choppy***, ***crumbly***, ***level***
 | 
			
		||||
--
 | 
			
		||||
--  @table ArmorDef.damage_groups
 | 
			
		||||
--  @see entity_damage_mechanism
 | 
			
		||||
--  @usage damage_groups = {
 | 
			
		||||
--    cracky = 3,
 | 
			
		||||
--    snappy = 2,
 | 
			
		||||
--    choppy = 3,
 | 
			
		||||
--    crumbly = 2,
 | 
			
		||||
--    level = 1,
 | 
			
		||||
--  }
 | 
			
		||||
 | 
			
		||||
--- @section end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- support for i18n
 | 
			
		||||
local S = minetest.get_translator(minetest.get_current_modname())
 | 
			
		||||
 | 
			
		||||
@@ -33,7 +112,7 @@ armor = {
 | 
			
		||||
	timer = 0,
 | 
			
		||||
	elements = {"head", "torso", "legs", "feet"},
 | 
			
		||||
	physics = {"jump", "speed", "gravity"},
 | 
			
		||||
	attributes = {"heal", "fire", "water"},
 | 
			
		||||
	attributes = {"heal", "fire", "water", "feather"},
 | 
			
		||||
	formspec = "image[2.5,0;2,4;armor_preview]"..
 | 
			
		||||
		default.gui_bg..
 | 
			
		||||
		default.gui_bg_img..
 | 
			
		||||
@@ -53,6 +132,7 @@ armor = {
 | 
			
		||||
		gold = "default:gold_ingot",
 | 
			
		||||
		mithril = "moreores:mithril_ingot",
 | 
			
		||||
		crystal = "ethereal:crystal_ingot",
 | 
			
		||||
		nether = "nether:nether_ingot",
 | 
			
		||||
	},
 | 
			
		||||
	fire_nodes = {
 | 
			
		||||
		{"nether:lava_source",      5, 8},
 | 
			
		||||
@@ -82,7 +162,6 @@ armor = {
 | 
			
		||||
 | 
			
		||||
armor.config = {
 | 
			
		||||
	init_delay = 2,
 | 
			
		||||
	init_times = 10,
 | 
			
		||||
	bones_delay = 1,
 | 
			
		||||
	update_time = 1,
 | 
			
		||||
	drop = minetest.get_modpath("bones") ~= nil,
 | 
			
		||||
@@ -97,16 +176,33 @@ armor.config = {
 | 
			
		||||
	material_gold = true,
 | 
			
		||||
	material_mithril = true,
 | 
			
		||||
	material_crystal = true,
 | 
			
		||||
	material_nether = true,
 | 
			
		||||
	set_elements = "head torso legs feet shield",
 | 
			
		||||
	set_multiplier = 1.1,
 | 
			
		||||
	water_protect = true,
 | 
			
		||||
	fire_protect = minetest.get_modpath("ethereal") ~= nil,
 | 
			
		||||
	fire_protect_torch = minetest.get_modpath("ethereal") ~= nil,
 | 
			
		||||
	feather_fall = true,
 | 
			
		||||
	punch_damage = true,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
-- Armor Registration
 | 
			
		||||
 | 
			
		||||
--- Methods
 | 
			
		||||
--
 | 
			
		||||
--  @section methods
 | 
			
		||||
 | 
			
		||||
--- Registers a new armor item.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:register_armor
 | 
			
		||||
--  @tparam string name Armor item technical name (ex: "3d\_armor:helmet\_gold").
 | 
			
		||||
--  @tparam ArmorDef def Armor definition table.
 | 
			
		||||
--  @usage armor:register_armor("3d_armor:helmet_wood", {
 | 
			
		||||
--    description = "Wood Helmet",
 | 
			
		||||
--    inventory_image = "3d_armor_inv_helmet_wood.png",
 | 
			
		||||
--    groups = {armor_head=1, armor_heal=0, armor_use=2000, flammable=1},
 | 
			
		||||
--    armor_groups = {fleshy=5},
 | 
			
		||||
--    damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1},
 | 
			
		||||
--  })
 | 
			
		||||
armor.register_armor = function(self, name, def)
 | 
			
		||||
	def.on_secondary_use = function(itemstack, player)
 | 
			
		||||
		return armor:equip(player, itemstack)
 | 
			
		||||
@@ -132,6 +228,11 @@ armor.register_armor = function(self, name, def)
 | 
			
		||||
	minetest.register_tool(name, def)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Registers a new armor group.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:register_armor_group
 | 
			
		||||
--  @tparam string group Group ID.
 | 
			
		||||
--  @tparam int base Base armor value.
 | 
			
		||||
armor.register_armor_group = function(self, group, base)
 | 
			
		||||
	base = base or 100
 | 
			
		||||
	self.registered_groups[group] = base
 | 
			
		||||
@@ -140,38 +241,92 @@ armor.register_armor_group = function(self, group, base)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Armor callbacks
 | 
			
		||||
--- Armor Callbacks Registration
 | 
			
		||||
--
 | 
			
		||||
--  @section callbacks
 | 
			
		||||
 | 
			
		||||
--- Registers a callback for when player visuals are update.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:register_on_update
 | 
			
		||||
--  @tparam function func Function to be executed.
 | 
			
		||||
--  @see armor:update_player_visuals
 | 
			
		||||
--  @usage armor:register_on_update(function(player, index, stack)
 | 
			
		||||
--    -- code to execute
 | 
			
		||||
--  end)
 | 
			
		||||
armor.register_on_update = function(self, func)
 | 
			
		||||
	if type(func) == "function" then
 | 
			
		||||
		table.insert(self.registered_callbacks.on_update, func)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Registers a callback for when armor is equipped.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:register_on_equip
 | 
			
		||||
--  @tparam function func Function to be executed.
 | 
			
		||||
--  @usage armor:register_on_equip(function(player, index, stack)
 | 
			
		||||
--    -- code to execute
 | 
			
		||||
--  end)
 | 
			
		||||
armor.register_on_equip = function(self, func)
 | 
			
		||||
	if type(func) == "function" then
 | 
			
		||||
		table.insert(self.registered_callbacks.on_equip, func)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Registers a callback for when armor is unequipped.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:register_on_unequip
 | 
			
		||||
--  @tparam function func Function to be executed.
 | 
			
		||||
--  @usage armor:register_on_unequip(function(player, index, stack)
 | 
			
		||||
--    -- code to execute
 | 
			
		||||
--  end)
 | 
			
		||||
armor.register_on_unequip = function(self, func)
 | 
			
		||||
	if type(func) == "function" then
 | 
			
		||||
		table.insert(self.registered_callbacks.on_unequip, func)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Registers a callback for when armor is damaged.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:register_on_damage
 | 
			
		||||
--  @tparam function func Function to be executed.
 | 
			
		||||
--  @see armor:damage
 | 
			
		||||
--  @usage armor:register_on_damage(function(player, index, stack)
 | 
			
		||||
--    -- code to execute
 | 
			
		||||
--  end)
 | 
			
		||||
armor.register_on_damage = function(self, func)
 | 
			
		||||
	if type(func) == "function" then
 | 
			
		||||
		table.insert(self.registered_callbacks.on_damage, func)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Registers a callback for when armor is destroyed.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:register_on_destroy
 | 
			
		||||
--  @tparam function func Function to be executed.
 | 
			
		||||
--  @see armor:damage
 | 
			
		||||
--  @usage armor:register_on_destroy(function(player, index, stack)
 | 
			
		||||
--    -- code to execute
 | 
			
		||||
--  end)
 | 
			
		||||
armor.register_on_destroy = function(self, func)
 | 
			
		||||
	if type(func) == "function" then
 | 
			
		||||
		table.insert(self.registered_callbacks.on_destroy, func)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- @section end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--- Methods
 | 
			
		||||
--
 | 
			
		||||
--  @section methods
 | 
			
		||||
 | 
			
		||||
--- Runs callbacks.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:run_callbacks
 | 
			
		||||
--  @tparam function callback Function to execute.
 | 
			
		||||
--  @tparam ObjectRef player First parameter passed to callback.
 | 
			
		||||
--  @tparam int index Second parameter passed to callback.
 | 
			
		||||
--  @tparam ItemStack stack Callback owner.
 | 
			
		||||
armor.run_callbacks = function(self, callback, player, index, stack)
 | 
			
		||||
	if stack then
 | 
			
		||||
		local def = stack:get_definition() or {}
 | 
			
		||||
@@ -187,13 +342,17 @@ armor.run_callbacks = function(self, callback, player, index, stack)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Updates visuals.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:update_player_visuals
 | 
			
		||||
--  @tparam ObjectRef player
 | 
			
		||||
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, {
 | 
			
		||||
		player_api.set_textures(player, {
 | 
			
		||||
			self.textures[name].skin,
 | 
			
		||||
			self.textures[name].armor,
 | 
			
		||||
			self.textures[name].wielditem,
 | 
			
		||||
@@ -202,10 +361,10 @@ armor.update_player_visuals = function(self, player)
 | 
			
		||||
	self:run_callbacks("on_update", player)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- armor is not visible on player model if enabled
 | 
			
		||||
local transparent_armor = minetest.settings:get_bool("armor_transparent", false)
 | 
			
		||||
 | 
			
		||||
--- Sets player's armor attributes.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:set_player_armor
 | 
			
		||||
--  @tparam ObjectRef player
 | 
			
		||||
armor.set_player_armor = function(self, player)
 | 
			
		||||
	local name, armor_inv = self:get_valid_player(player, "[set_player_armor]")
 | 
			
		||||
	if not name then
 | 
			
		||||
@@ -214,7 +373,7 @@ armor.set_player_armor = function(self, player)
 | 
			
		||||
	local state = 0
 | 
			
		||||
	local count = 0
 | 
			
		||||
	local preview = armor:get_preview(name)
 | 
			
		||||
	local texture = "3d_armor_trans.png"
 | 
			
		||||
	local texture = "blank.png"
 | 
			
		||||
	local physics = {}
 | 
			
		||||
	local attributes = {}
 | 
			
		||||
	local levels = {}
 | 
			
		||||
@@ -256,7 +415,7 @@ armor.set_player_armor = function(self, player)
 | 
			
		||||
				end
 | 
			
		||||
				-- DEPRECATED, use armor_groups instead
 | 
			
		||||
				if def.groups["armor_radiation"] and levels["radiation"] then
 | 
			
		||||
					levels["radiation"] = def.groups["armor_radiation"]
 | 
			
		||||
					levels["radiation"] = levels["radiation"] + def.groups["armor_radiation"]
 | 
			
		||||
				end
 | 
			
		||||
			end
 | 
			
		||||
			local item = stack:get_name()
 | 
			
		||||
@@ -331,10 +490,13 @@ armor.set_player_armor = function(self, player)
 | 
			
		||||
		armor_monoid.monoid:add_change(player, change, "3d_armor:armor")
 | 
			
		||||
	else
 | 
			
		||||
		-- Preserve immortal group (damage disabled for player)
 | 
			
		||||
		local immortal = player:get_armor_groups().immortal
 | 
			
		||||
		local player_groups = player:get_armor_groups()
 | 
			
		||||
		local immortal = player_groups.immortal
 | 
			
		||||
		if immortal and immortal ~= 0 then
 | 
			
		||||
			groups.immortal = 1
 | 
			
		||||
		end
 | 
			
		||||
		-- Preserve fall_damage_add_percent group (fall damage modifier)
 | 
			
		||||
		groups.fall_damage_add_percent = player_groups.fall_damage_add_percent
 | 
			
		||||
		player:set_armor_groups(groups)
 | 
			
		||||
	end
 | 
			
		||||
	if use_player_monoids then
 | 
			
		||||
@@ -366,6 +528,13 @@ armor.set_player_armor = function(self, player)
 | 
			
		||||
	self:update_player_visuals(player)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Action when armor is punched.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:punch
 | 
			
		||||
--  @tparam ObjectRef player Player wearing the armor.
 | 
			
		||||
--  @tparam ObjectRef hitter Entity attacking player.
 | 
			
		||||
--  @tparam[opt] int time_from_last_punch Time in seconds since last punch action.
 | 
			
		||||
--  @tparam[opt] table tool_capabilities See `entity_damage_mechanism`.
 | 
			
		||||
armor.punch = function(self, player, hitter, time_from_last_punch, tool_capabilities)
 | 
			
		||||
	local name, armor_inv = self:get_valid_player(player, "[punch]")
 | 
			
		||||
	if not name then
 | 
			
		||||
@@ -451,9 +620,19 @@ armor.punch = function(self, player, hitter, time_from_last_punch, tool_capabili
 | 
			
		||||
	self.def[name].count = count
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Action when armor is damaged.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:damage
 | 
			
		||||
--  @tparam ObjectRef player
 | 
			
		||||
--  @tparam int index Inventory index where armor is equipped.
 | 
			
		||||
--  @tparam ItemStack stack Armor item receiving damaged.
 | 
			
		||||
--  @tparam int use Amount of wear to add to armor item.
 | 
			
		||||
armor.damage = function(self, player, index, stack, use)
 | 
			
		||||
	local old_stack = ItemStack(stack)
 | 
			
		||||
	local worn_armor = armor:get_weared_armor_elements(player)
 | 
			
		||||
	if not worn_armor then
 | 
			
		||||
		return
 | 
			
		||||
	end
 | 
			
		||||
	local armor_worn_cnt = 0
 | 
			
		||||
	for k,v in pairs(worn_armor) do
 | 
			
		||||
		armor_worn_cnt = armor_worn_cnt + 1
 | 
			
		||||
@@ -469,6 +648,11 @@ armor.damage = function(self, player, index, stack, use)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Get elements of equipped armor.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:get_weared_armor_elements
 | 
			
		||||
--  @tparam ObjectRef player
 | 
			
		||||
--  @treturn table List of equipped armors.
 | 
			
		||||
armor.get_weared_armor_elements = function(self, player)
 | 
			
		||||
    local name, inv = self:get_valid_player(player, "[get_weared_armor]")
 | 
			
		||||
	local weared_armor = {}
 | 
			
		||||
@@ -485,40 +669,78 @@ armor.get_weared_armor_elements = function(self, player)
 | 
			
		||||
	return weared_armor
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Equips a piece of armor to a player.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:equip
 | 
			
		||||
--  @tparam ObjectRef player Player to whom item is equipped.
 | 
			
		||||
--  @tparam ItemStack itemstack Armor item to be equipped.
 | 
			
		||||
--  @treturn ItemStack Leftover item stack.
 | 
			
		||||
armor.equip = function(self, player, itemstack)
 | 
			
		||||
    local name, armor_inv = self:get_valid_player(player, "[equip]")
 | 
			
		||||
    local weared_armor = self:get_weared_armor_elements(player)
 | 
			
		||||
    local armor_element = self:get_element(itemstack:get_name())
 | 
			
		||||
	if name and armor_element then
 | 
			
		||||
		if weared_armor[armor_element] ~= nil then
 | 
			
		||||
			self:unequip(player, armor_element)
 | 
			
		||||
		local index
 | 
			
		||||
		for i=1, armor_inv:get_size("armor") do
 | 
			
		||||
			local stack = armor_inv:get_stack("armor", i)
 | 
			
		||||
			if self:get_element(stack:get_name()) == armor_element then
 | 
			
		||||
				--prevents equiping an armor that would unequip a cursed armor.
 | 
			
		||||
				if minetest.get_item_group(stack:get_name(), "cursed") ~= 0 then
 | 
			
		||||
					return itemstack
 | 
			
		||||
				end
 | 
			
		||||
				index = i
 | 
			
		||||
				self:unequip(player, armor_element)
 | 
			
		||||
				break
 | 
			
		||||
			elseif not index and stack:is_empty() then
 | 
			
		||||
				index = i
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
		armor_inv:add_item("armor", itemstack:take_item())
 | 
			
		||||
		local stack = itemstack:take_item()
 | 
			
		||||
		armor_inv:set_stack("armor", index, stack)
 | 
			
		||||
		self:run_callbacks("on_equip", player, index, stack)
 | 
			
		||||
		self:set_player_armor(player)
 | 
			
		||||
		self:save_armor_inventory(player)
 | 
			
		||||
	end
 | 
			
		||||
	return itemstack
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Unequips a piece of armor from a player.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:unequip
 | 
			
		||||
--  @tparam ObjectRef player Player from whom item is removed.
 | 
			
		||||
--  @tparam string armor_element Armor type identifier associated with the item
 | 
			
		||||
--  to be removed ("head", "torso", "hands", "shield", "legs", "feet", etc.).
 | 
			
		||||
armor.unequip = function(self, player, armor_element)
 | 
			
		||||
    local name, armor_inv = self:get_valid_player(player, "[unequip]")
 | 
			
		||||
	local weared_armor = self:get_weared_armor_elements(player)
 | 
			
		||||
	if not name or not weared_armor[armor_element] then
 | 
			
		||||
	if not name then
 | 
			
		||||
		return
 | 
			
		||||
	end
 | 
			
		||||
	local itemstack = armor_inv:remove_item("armor", ItemStack(weared_armor[armor_element]))
 | 
			
		||||
	minetest.after(0, function()
 | 
			
		||||
		local inv = player:get_inventory()
 | 
			
		||||
		if inv:room_for_item("main", itemstack) then
 | 
			
		||||
			inv:add_item("main", itemstack)
 | 
			
		||||
		else
 | 
			
		||||
			minetest.add_item(player:get_pos(), itemstack)
 | 
			
		||||
	for i=1, armor_inv:get_size("armor") do
 | 
			
		||||
		local stack = armor_inv:get_stack("armor", i)
 | 
			
		||||
		if self:get_element(stack:get_name()) == armor_element then
 | 
			
		||||
			armor_inv:set_stack("armor", i, "")
 | 
			
		||||
			minetest.after(0, function()
 | 
			
		||||
				local pplayer = minetest.get_player_by_name(name)
 | 
			
		||||
				if pplayer then -- player is still online
 | 
			
		||||
					local inv = pplayer:get_inventory()
 | 
			
		||||
					if inv:room_for_item("main", stack) then
 | 
			
		||||
						inv:add_item("main", stack)
 | 
			
		||||
					else
 | 
			
		||||
						minetest.add_item(pplayer:get_pos(), stack)
 | 
			
		||||
					end
 | 
			
		||||
				end
 | 
			
		||||
			end)
 | 
			
		||||
			self:run_callbacks("on_unequip", player, i, stack)
 | 
			
		||||
			self:set_player_armor(player)
 | 
			
		||||
			self:save_armor_inventory(player)
 | 
			
		||||
			return
 | 
			
		||||
		end
 | 
			
		||||
	end)
 | 
			
		||||
    self:set_player_armor(player)
 | 
			
		||||
	self:save_armor_inventory(player)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Removes all armor worn by player.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:remove_all
 | 
			
		||||
--  @tparam ObjectRef player
 | 
			
		||||
armor.remove_all = function(self, player)
 | 
			
		||||
    local name, inv = self:get_valid_player(player, "[remove_all]")
 | 
			
		||||
	if not name then
 | 
			
		||||
@@ -529,17 +751,28 @@ armor.remove_all = function(self, player)
 | 
			
		||||
	self:save_armor_inventory(player)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local skin_mod
 | 
			
		||||
 | 
			
		||||
--- Retrieves player's current skin.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:get_player_skin
 | 
			
		||||
--  @tparam string name Player name.
 | 
			
		||||
--  @treturn string Skin filename.
 | 
			
		||||
armor.get_player_skin = function(self, name)
 | 
			
		||||
	if (self.skin_mod == "skins" or self.skin_mod == "simple_skins") and skins.skins[name] then
 | 
			
		||||
	if (skin_mod == "skins" or skin_mod == "simple_skins") and skins.skins[name] then
 | 
			
		||||
		return skins.skins[name]..".png"
 | 
			
		||||
	elseif self.skin_mod == "u_skins" and u_skins.u_skins[name] then
 | 
			
		||||
	elseif skin_mod == "u_skins" and u_skins.u_skins[name] then
 | 
			
		||||
		return u_skins.u_skins[name]..".png"
 | 
			
		||||
	elseif self.skin_mod == "wardrobe" and wardrobe.playerSkins and wardrobe.playerSkins[name] then
 | 
			
		||||
	elseif skin_mod == "wardrobe" and wardrobe.playerSkins and wardrobe.playerSkins[name] then
 | 
			
		||||
		return wardrobe.playerSkins[name]
 | 
			
		||||
	end
 | 
			
		||||
	return armor.default_skin..".png"
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Updates skin.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:update_skin
 | 
			
		||||
--  @tparam string name Player name.
 | 
			
		||||
armor.update_skin = function(self, name)
 | 
			
		||||
	minetest.after(0, function()
 | 
			
		||||
		local pplayer = minetest.get_player_by_name(name)
 | 
			
		||||
@@ -550,10 +783,19 @@ armor.update_skin = function(self, name)
 | 
			
		||||
	end)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Adds preview for armor inventory.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:add_preview
 | 
			
		||||
--  @tparam string preview Preview image filename.
 | 
			
		||||
armor.add_preview = function(self, preview)
 | 
			
		||||
	skin_previews[preview] = true
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Retrieves preview for armor inventory.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:get_preview
 | 
			
		||||
--  @tparam string name Player name.
 | 
			
		||||
--  @treturn string Preview image filename.
 | 
			
		||||
armor.get_preview = function(self, name)
 | 
			
		||||
	local preview = string.gsub(armor:get_player_skin(name), ".png", "_preview.png")
 | 
			
		||||
	if skin_previews[preview] then
 | 
			
		||||
@@ -562,10 +804,13 @@ armor.get_preview = function(self, name)
 | 
			
		||||
	return "character_preview.png"
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Retrieves armor formspec.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:get_armor_formspec
 | 
			
		||||
--  @tparam string name Player name.
 | 
			
		||||
--  @tparam[opt] bool listring Use `listring` formspec element (default: `false`).
 | 
			
		||||
--  @treturn string Formspec formatted string.
 | 
			
		||||
armor.get_armor_formspec = function(self, name, listring)
 | 
			
		||||
	if armor.def[name].init_time == 0 then
 | 
			
		||||
		return "label[0,0;Armor not initialized!]"
 | 
			
		||||
	end
 | 
			
		||||
	local formspec = armor.formspec..
 | 
			
		||||
		"list[detached:"..name.."_armor;armor;0,0.5;2,3;]"
 | 
			
		||||
	if listring == true then
 | 
			
		||||
@@ -584,6 +829,11 @@ armor.get_armor_formspec = function(self, name, listring)
 | 
			
		||||
	return formspec
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Retrieves element.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:get_element
 | 
			
		||||
--  @tparam string item_name
 | 
			
		||||
--  @return Armor element.
 | 
			
		||||
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
 | 
			
		||||
@@ -592,6 +842,11 @@ armor.get_element = function(self, item_name)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Serializes armor inventory.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:serialize_inventory_list
 | 
			
		||||
--  @tparam table list Inventory contents.
 | 
			
		||||
--  @treturn string
 | 
			
		||||
armor.serialize_inventory_list = function(self, list)
 | 
			
		||||
	local list_table = {}
 | 
			
		||||
	for _, stack in ipairs(list) do
 | 
			
		||||
@@ -600,6 +855,11 @@ armor.serialize_inventory_list = function(self, list)
 | 
			
		||||
	return minetest.serialize(list_table)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Deserializes armor inventory.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:deserialize_inventory_list
 | 
			
		||||
--  @tparam string list_string Serialized inventory contents.
 | 
			
		||||
--  @treturn table
 | 
			
		||||
armor.deserialize_inventory_list = function(self, list_string)
 | 
			
		||||
	local list_table = minetest.deserialize(list_string)
 | 
			
		||||
	local list = {}
 | 
			
		||||
@@ -609,6 +869,11 @@ armor.deserialize_inventory_list = function(self, list_string)
 | 
			
		||||
	return list
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Loads armor inventory.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:load_armor_inventory
 | 
			
		||||
--  @tparam ObjectRef player
 | 
			
		||||
--  @treturn bool
 | 
			
		||||
armor.load_armor_inventory = function(self, player)
 | 
			
		||||
	local _, inv = self:get_valid_player(player, "[load_armor_inventory]")
 | 
			
		||||
	if inv then
 | 
			
		||||
@@ -622,6 +887,12 @@ armor.load_armor_inventory = function(self, player)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Saves armor inventory.
 | 
			
		||||
--
 | 
			
		||||
--  Inventory is stored in `PlayerMetaRef` string "3d\_armor\_inventory".
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:save_armor_inventory
 | 
			
		||||
--  @tparam ObjectRef player
 | 
			
		||||
armor.save_armor_inventory = function(self, player)
 | 
			
		||||
	local _, inv = self:get_valid_player(player, "[save_armor_inventory]")
 | 
			
		||||
	if inv then
 | 
			
		||||
@@ -631,10 +902,22 @@ armor.save_armor_inventory = function(self, player)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Updates inventory.
 | 
			
		||||
--
 | 
			
		||||
--  DEPRECATED: Legacy inventory support.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:update_inventory
 | 
			
		||||
--  @param player
 | 
			
		||||
armor.update_inventory = function(self, player)
 | 
			
		||||
	-- DEPRECATED: Legacy inventory support
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Sets inventory stack.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:set_inventory_stack
 | 
			
		||||
--  @tparam ObjectRef player
 | 
			
		||||
--  @tparam int i Armor inventory index.
 | 
			
		||||
--  @tparam ItemStack stack Armor item.
 | 
			
		||||
armor.set_inventory_stack = function(self, player, i, stack)
 | 
			
		||||
	local _, inv = self:get_valid_player(player, "[set_inventory_stack]")
 | 
			
		||||
	if inv then
 | 
			
		||||
@@ -643,12 +926,23 @@ armor.set_inventory_stack = function(self, player, i, stack)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Checks for a player that can use armor.
 | 
			
		||||
--
 | 
			
		||||
--  @function armor:get_valid_player
 | 
			
		||||
--  @tparam ObjectRef player
 | 
			
		||||
--  @tparam string msg Additional info for log messages.
 | 
			
		||||
--  @treturn list Player name & armor inventory.
 | 
			
		||||
--  @usage local name, inv = armor:get_valid_player(player, "[equip]")
 | 
			
		||||
armor.get_valid_player = function(self, player, msg)
 | 
			
		||||
	msg = msg or ""
 | 
			
		||||
	if not player then
 | 
			
		||||
		minetest.log("warning", ("3d_armor%s: Player reference is nil"):format(msg))
 | 
			
		||||
		return
 | 
			
		||||
	end
 | 
			
		||||
	if type(player) ~= "userdata" then
 | 
			
		||||
		-- Fake player, fail silently
 | 
			
		||||
		return
 | 
			
		||||
	end
 | 
			
		||||
	local name = player:get_player_name()
 | 
			
		||||
	if not name then
 | 
			
		||||
		minetest.log("warning", ("3d_armor%s: Player name is nil"):format(msg))
 | 
			
		||||
@@ -664,6 +958,10 @@ armor.get_valid_player = function(self, player, msg)
 | 
			
		||||
	return name, inv
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Drops armor item at given position.
 | 
			
		||||
--
 | 
			
		||||
--  @tparam vector pos
 | 
			
		||||
--  @tparam ItemStack stack Armor item to be dropped.
 | 
			
		||||
armor.drop_armor = function(pos, stack)
 | 
			
		||||
	local node = minetest.get_node_or_nil(pos)
 | 
			
		||||
	if node then
 | 
			
		||||
@@ -677,6 +975,8 @@ end
 | 
			
		||||
--- Allows skin mod to be set manually.
 | 
			
		||||
--
 | 
			
		||||
--  Useful for skin mod forks that do not use the same name.
 | 
			
		||||
--
 | 
			
		||||
--  @tparam string mod Name of skin mod. Recognized names are "simple\_skins", "u\_skins", & "wardrobe".
 | 
			
		||||
armor.set_skin_mod = function(mod)
 | 
			
		||||
	armor.skin_mod = mod
 | 
			
		||||
	skin_mod = mod
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,7 @@ ARMOR_MATERIALS = {
 | 
			
		||||
	gold = "default:gold_ingot",
 | 
			
		||||
	mithril = "moreores:mithril_ingot",
 | 
			
		||||
	crystal = "ethereal:crystal_ingot",
 | 
			
		||||
	nether = "nether:nether_ingot",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
-- Enable fire protection (defaults true if using ethereal mod)
 | 
			
		||||
@@ -34,10 +35,6 @@ ARMOR_FIRE_NODES = {
 | 
			
		||||
-- 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
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,372 +0,0 @@
 | 
			
		||||
-- support for i18n
 | 
			
		||||
local S = armor.get_translator
 | 
			
		||||
 | 
			
		||||
armor:register_armor("3d_armor:helmet_admin", {
 | 
			
		||||
	description = S("Admin Helmet"),
 | 
			
		||||
	inventory_image = "3d_armor_inv_helmet_admin.png",
 | 
			
		||||
	armor_groups = {fleshy=100},
 | 
			
		||||
	groups = {armor_head=1, armor_heal=100, armor_use=0, armor_water=1,
 | 
			
		||||
			not_in_creative_inventory=1},
 | 
			
		||||
	on_drop = function(itemstack, dropper, pos)
 | 
			
		||||
		return
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
armor:register_armor("3d_armor:chestplate_admin", {
 | 
			
		||||
	description = S("Admin Chestplate"),
 | 
			
		||||
	inventory_image = "3d_armor_inv_chestplate_admin.png",
 | 
			
		||||
	armor_groups = {fleshy=100},
 | 
			
		||||
	groups = {armor_torso=1, armor_heal=100, armor_use=0,
 | 
			
		||||
			not_in_creative_inventory=1},
 | 
			
		||||
	on_drop = function(itemstack, dropper, pos)
 | 
			
		||||
		return
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
armor:register_armor("3d_armor:leggings_admin", {
 | 
			
		||||
	description = S("Admin Leggings"),
 | 
			
		||||
	inventory_image = "3d_armor_inv_leggings_admin.png",
 | 
			
		||||
	armor_groups = {fleshy=100},
 | 
			
		||||
	groups = {armor_legs=1, armor_heal=100, armor_use=0,
 | 
			
		||||
			not_in_creative_inventory=1},
 | 
			
		||||
	on_drop = function(itemstack, dropper, pos)
 | 
			
		||||
		return
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
armor:register_armor("3d_armor:boots_admin", {
 | 
			
		||||
	description = S("Admin Boots"),
 | 
			
		||||
	inventory_image = "3d_armor_inv_boots_admin.png",
 | 
			
		||||
	armor_groups = {fleshy=100},
 | 
			
		||||
	groups = {armor_feet=1, armor_heal=100, armor_use=0,
 | 
			
		||||
			not_in_creative_inventory=1},
 | 
			
		||||
	on_drop = function(itemstack, dropper, pos)
 | 
			
		||||
		return
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
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")
 | 
			
		||||
 | 
			
		||||
if armor.materials.wood then
 | 
			
		||||
	armor:register_armor("3d_armor:helmet_wood", {
 | 
			
		||||
		description = S("Wood Helmet"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_helmet_wood.png",
 | 
			
		||||
		groups = {armor_head=1, armor_heal=0, armor_use=2000, flammable=1},
 | 
			
		||||
		armor_groups = {fleshy=5},
 | 
			
		||||
		damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:chestplate_wood", {
 | 
			
		||||
		description = S("Wood Chestplate"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_chestplate_wood.png",
 | 
			
		||||
		groups = {armor_torso=1, armor_heal=0, armor_use=2000, flammable=1},
 | 
			
		||||
		armor_groups = {fleshy=10},
 | 
			
		||||
		damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:leggings_wood", {
 | 
			
		||||
		description = S("Wood Leggings"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_leggings_wood.png",
 | 
			
		||||
		groups = {armor_legs=1, armor_heal=0, armor_use=2000, flammable=1},
 | 
			
		||||
		armor_groups = {fleshy=10},
 | 
			
		||||
		damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:boots_wood", {
 | 
			
		||||
		description = S("Wood Boots"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_boots_wood.png",
 | 
			
		||||
		armor_groups = {fleshy=5},
 | 
			
		||||
		damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1},
 | 
			
		||||
		groups = {armor_feet=1, armor_heal=0, armor_use=2000, flammable=1},
 | 
			
		||||
	})
 | 
			
		||||
	local wood_armor_fuel = {
 | 
			
		||||
		helmet = 6,
 | 
			
		||||
		chestplate = 8,
 | 
			
		||||
		leggings = 7,
 | 
			
		||||
		boots = 5
 | 
			
		||||
	}
 | 
			
		||||
	for armor, burn in pairs(wood_armor_fuel) do
 | 
			
		||||
		minetest.register_craft({
 | 
			
		||||
			type = "fuel",
 | 
			
		||||
			recipe = "3d_armor:" .. armor .. "_wood",
 | 
			
		||||
			burntime = burn,
 | 
			
		||||
		})
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
if armor.materials.cactus then
 | 
			
		||||
	armor:register_armor("3d_armor:helmet_cactus", {
 | 
			
		||||
		description = S("Cactus Helmet"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_helmet_cactus.png",
 | 
			
		||||
		groups = {armor_head=1, armor_heal=0, armor_use=1000},
 | 
			
		||||
		armor_groups = {fleshy=5},
 | 
			
		||||
		damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:chestplate_cactus", {
 | 
			
		||||
		description = S("Cactus Chestplate"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_chestplate_cactus.png",
 | 
			
		||||
		groups = {armor_torso=1, armor_heal=0, armor_use=1000},
 | 
			
		||||
		armor_groups = {fleshy=10},
 | 
			
		||||
		damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:leggings_cactus", {
 | 
			
		||||
		description = S("Cactus Leggings"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_leggings_cactus.png",
 | 
			
		||||
		groups = {armor_legs=1, armor_heal=0, armor_use=1000},
 | 
			
		||||
		armor_groups = {fleshy=10},
 | 
			
		||||
		damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:boots_cactus", {
 | 
			
		||||
		description = S("Cactus Boots"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_boots_cactus.png",
 | 
			
		||||
		groups = {armor_feet=1, armor_heal=0, armor_use=1000},
 | 
			
		||||
		armor_groups = {fleshy=5},
 | 
			
		||||
		damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1},
 | 
			
		||||
	})
 | 
			
		||||
	local cactus_armor_fuel = {
 | 
			
		||||
		helmet = 14,
 | 
			
		||||
		chestplate = 16,
 | 
			
		||||
		leggings = 15,
 | 
			
		||||
		boots = 13
 | 
			
		||||
	}
 | 
			
		||||
	for armor, burn in pairs(cactus_armor_fuel) do
 | 
			
		||||
		minetest.register_craft({
 | 
			
		||||
			type = "fuel",
 | 
			
		||||
			recipe = "3d_armor:" .. armor .. "_cactus",
 | 
			
		||||
			burntime = burn,
 | 
			
		||||
		})
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
if armor.materials.steel then
 | 
			
		||||
	armor:register_armor("3d_armor:helmet_steel", {
 | 
			
		||||
		description = S("Steel Helmet"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_helmet_steel.png",
 | 
			
		||||
		groups = {armor_head=1, armor_heal=0, armor_use=800,
 | 
			
		||||
			physics_speed=-0.01, physics_gravity=0.01},
 | 
			
		||||
		armor_groups = {fleshy=10},
 | 
			
		||||
		damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:chestplate_steel", {
 | 
			
		||||
		description = S("Steel Chestplate"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_chestplate_steel.png",
 | 
			
		||||
		groups = {armor_torso=1, armor_heal=0, armor_use=800,
 | 
			
		||||
			physics_speed=-0.04, physics_gravity=0.04},
 | 
			
		||||
		armor_groups = {fleshy=15},
 | 
			
		||||
		damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:leggings_steel", {
 | 
			
		||||
		description = S("Steel Leggings"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_leggings_steel.png",
 | 
			
		||||
		groups = {armor_legs=1, armor_heal=0, armor_use=800,
 | 
			
		||||
			physics_speed=-0.03, physics_gravity=0.03},
 | 
			
		||||
		armor_groups = {fleshy=15},
 | 
			
		||||
		damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:boots_steel", {
 | 
			
		||||
		description = S("Steel Boots"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_boots_steel.png",
 | 
			
		||||
		groups = {armor_feet=1, armor_heal=0, armor_use=800,
 | 
			
		||||
			physics_speed=-0.01, physics_gravity=0.01},
 | 
			
		||||
		armor_groups = {fleshy=10},
 | 
			
		||||
		damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
 | 
			
		||||
	})
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
if armor.materials.bronze then
 | 
			
		||||
	armor:register_armor("3d_armor:helmet_bronze", {
 | 
			
		||||
		description = S("Bronze Helmet"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_helmet_bronze.png",
 | 
			
		||||
		groups = {armor_head=1, armor_heal=6, armor_use=400,
 | 
			
		||||
			physics_speed=-0.01, physics_gravity=0.01},
 | 
			
		||||
		armor_groups = {fleshy=10},
 | 
			
		||||
		damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:chestplate_bronze", {
 | 
			
		||||
		description = S("Bronze Chestplate"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_chestplate_bronze.png",
 | 
			
		||||
		groups = {armor_torso=1, armor_heal=6, armor_use=400,
 | 
			
		||||
			physics_speed=-0.04, physics_gravity=0.04},
 | 
			
		||||
		armor_groups = {fleshy=15},
 | 
			
		||||
		damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:leggings_bronze", {
 | 
			
		||||
		description = S("Bronze Leggings"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_leggings_bronze.png",
 | 
			
		||||
		groups = {armor_legs=1, armor_heal=6, armor_use=400,
 | 
			
		||||
			physics_speed=-0.03, physics_gravity=0.03},
 | 
			
		||||
		armor_groups = {fleshy=15},
 | 
			
		||||
		damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:boots_bronze", {
 | 
			
		||||
		description = S("Bronze Boots"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_boots_bronze.png",
 | 
			
		||||
		groups = {armor_feet=1, armor_heal=6, armor_use=400,
 | 
			
		||||
			physics_speed=-0.01, physics_gravity=0.01},
 | 
			
		||||
		armor_groups = {fleshy=10},
 | 
			
		||||
		damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2},
 | 
			
		||||
	})
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
if armor.materials.diamond then
 | 
			
		||||
	armor:register_armor("3d_armor:helmet_diamond", {
 | 
			
		||||
		description = S("Diamond Helmet"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_helmet_diamond.png",
 | 
			
		||||
		groups = {armor_head=1, armor_heal=12, armor_use=200},
 | 
			
		||||
		armor_groups = {fleshy=15},
 | 
			
		||||
		damage_groups = {cracky=2, snappy=1, choppy=1, level=3},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:chestplate_diamond", {
 | 
			
		||||
		description = S("Diamond Chestplate"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_chestplate_diamond.png",
 | 
			
		||||
		groups = {armor_torso=1, armor_heal=12, armor_use=200},
 | 
			
		||||
		armor_groups = {fleshy=20},
 | 
			
		||||
		damage_groups = {cracky=2, snappy=1, choppy=1, level=3},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:leggings_diamond", {
 | 
			
		||||
		description = S("Diamond Leggings"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_leggings_diamond.png",
 | 
			
		||||
		groups = {armor_legs=1, armor_heal=12, armor_use=200},
 | 
			
		||||
		armor_groups = {fleshy=20},
 | 
			
		||||
		damage_groups = {cracky=2, snappy=1, choppy=1, level=3},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:boots_diamond", {
 | 
			
		||||
		description = S("Diamond Boots"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_boots_diamond.png",
 | 
			
		||||
		groups = {armor_feet=1, armor_heal=12, armor_use=200},
 | 
			
		||||
		armor_groups = {fleshy=15},
 | 
			
		||||
		damage_groups = {cracky=2, snappy=1, choppy=1, level=3},
 | 
			
		||||
	})
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
if armor.materials.gold then
 | 
			
		||||
	armor:register_armor("3d_armor:helmet_gold", {
 | 
			
		||||
		description = S("Gold Helmet"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_helmet_gold.png",
 | 
			
		||||
		groups = {armor_head=1, armor_heal=6, armor_use=300,
 | 
			
		||||
			physics_speed=-0.02, physics_gravity=0.02},
 | 
			
		||||
		armor_groups = {fleshy=10},
 | 
			
		||||
		damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:chestplate_gold", {
 | 
			
		||||
		description = S("Gold Chestplate"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_chestplate_gold.png",
 | 
			
		||||
		groups = {armor_torso=1, armor_heal=6, armor_use=300,
 | 
			
		||||
			physics_speed=-0.05, physics_gravity=0.05},
 | 
			
		||||
		armor_groups = {fleshy=15},
 | 
			
		||||
		damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:leggings_gold", {
 | 
			
		||||
		description = S("Gold Leggings"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_leggings_gold.png",
 | 
			
		||||
		groups = {armor_legs=1, armor_heal=6, armor_use=300,
 | 
			
		||||
			physics_speed=-0.04, physics_gravity=0.04},
 | 
			
		||||
		armor_groups = {fleshy=15},
 | 
			
		||||
		damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:boots_gold", {
 | 
			
		||||
		description = S("Gold Boots"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_boots_gold.png",
 | 
			
		||||
		groups = {armor_feet=1, armor_heal=6, armor_use=300,
 | 
			
		||||
			physics_speed=-0.02, physics_gravity=0.02},
 | 
			
		||||
		armor_groups = {fleshy=10},
 | 
			
		||||
		damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2},
 | 
			
		||||
	})
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
if armor.materials.mithril then
 | 
			
		||||
	armor:register_armor("3d_armor:helmet_mithril", {
 | 
			
		||||
		description = S("Mithril Helmet"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_helmet_mithril.png",
 | 
			
		||||
		groups = {armor_head=1, armor_heal=12, armor_use=100},
 | 
			
		||||
		armor_groups = {fleshy=15},
 | 
			
		||||
		damage_groups = {cracky=2, snappy=1, level=3},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:chestplate_mithril", {
 | 
			
		||||
		description = S("Mithril Chestplate"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_chestplate_mithril.png",
 | 
			
		||||
		groups = {armor_torso=1, armor_heal=12, armor_use=100},
 | 
			
		||||
		armor_groups = {fleshy=20},
 | 
			
		||||
		damage_groups = {cracky=2, snappy=1, level=3},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:leggings_mithril", {
 | 
			
		||||
		description = S("Mithril Leggings"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_leggings_mithril.png",
 | 
			
		||||
		groups = {armor_legs=1, armor_heal=12, armor_use=100},
 | 
			
		||||
		armor_groups = {fleshy=20},
 | 
			
		||||
		damage_groups = {cracky=2, snappy=1, level=3},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:boots_mithril", {
 | 
			
		||||
		description = S("Mithril Boots"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_boots_mithril.png",
 | 
			
		||||
		groups = {armor_feet=1, armor_heal=12, armor_use=100},
 | 
			
		||||
		armor_groups = {fleshy=15},
 | 
			
		||||
		damage_groups = {cracky=2, snappy=1, level=3},
 | 
			
		||||
	})
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
if armor.materials.crystal then
 | 
			
		||||
	armor:register_armor("3d_armor:helmet_crystal", {
 | 
			
		||||
		description = S("Crystal Helmet"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_helmet_crystal.png",
 | 
			
		||||
		groups = {armor_head=1, armor_heal=12, armor_use=100, armor_fire=1},
 | 
			
		||||
		armor_groups = {fleshy=15},
 | 
			
		||||
		damage_groups = {cracky=2, snappy=1, level=3},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:chestplate_crystal", {
 | 
			
		||||
		description = S("Crystal Chestplate"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_chestplate_crystal.png",
 | 
			
		||||
		groups = {armor_torso=1, armor_heal=12, armor_use=100, armor_fire=1},
 | 
			
		||||
		armor_groups = {fleshy=20},
 | 
			
		||||
		damage_groups = {cracky=2, snappy=1, level=3},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:leggings_crystal", {
 | 
			
		||||
		description = S("Crystal Leggings"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_leggings_crystal.png",
 | 
			
		||||
		groups = {armor_legs=1, armor_heal=12, armor_use=100, armor_fire=1},
 | 
			
		||||
		armor_groups = {fleshy=20},
 | 
			
		||||
		damage_groups = {cracky=2, snappy=1, level=3},
 | 
			
		||||
	})
 | 
			
		||||
	armor:register_armor("3d_armor:boots_crystal", {
 | 
			
		||||
		description = S("Crystal Boots"),
 | 
			
		||||
		inventory_image = "3d_armor_inv_boots_crystal.png",
 | 
			
		||||
		groups = {armor_feet=1, armor_heal=12, armor_use=100, physics_speed=1,
 | 
			
		||||
				physics_jump=0.5, armor_fire=1},
 | 
			
		||||
		armor_groups = {fleshy=15},
 | 
			
		||||
		damage_groups = {cracky=2, snappy=1, level=3},
 | 
			
		||||
	})
 | 
			
		||||
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
 | 
			
		||||
@@ -19,6 +19,7 @@ Helmets:
 | 
			
		||||
[3d_armor:helmet_gold] X = [default:gold_ingot]
 | 
			
		||||
[3d_armor:helmet_mithril] X = [moreores:mithril_ingot] *
 | 
			
		||||
[3d_armor:helmet_crystal] X = [ethereal:crystal_ingot] **
 | 
			
		||||
[3d_armor:helmet_nether] X = [ethereal:nether_ingot] **
 | 
			
		||||
 | 
			
		||||
Chestplates:
 | 
			
		||||
 | 
			
		||||
@@ -38,6 +39,7 @@ Chestplates:
 | 
			
		||||
[3d_armor:chestplate_gold] X = [default:gold_ingot]
 | 
			
		||||
[3d_armor:chestplate_mithril] X = [moreores:mithril_ingot] *
 | 
			
		||||
[3d_armor:chestplate_crystal] X = [ethereal:crystal_ingot] **
 | 
			
		||||
[3d_armor:chestplate_nether] X = [ethereal:nether_ingot] **
 | 
			
		||||
 | 
			
		||||
Leggings:
 | 
			
		||||
 | 
			
		||||
@@ -57,6 +59,7 @@ Leggings:
 | 
			
		||||
[3d_armor:leggings_gold] X = [default:gold_ingot]
 | 
			
		||||
[3d_armor:leggings_mithril] X = [moreores:mithril_ingot] *
 | 
			
		||||
[3d_armor:leggings_crystal] X = [ethereal:crystal_ingot] **
 | 
			
		||||
[3d_armor:leggings_nether] X = [ethereal:nether_ingot] **
 | 
			
		||||
 | 
			
		||||
Boots:
 | 
			
		||||
 | 
			
		||||
@@ -74,6 +77,8 @@ Boots:
 | 
			
		||||
[3d_armor:boots_gold] X = [default:gold_ingot]
 | 
			
		||||
[3d_armor:boots_mithril] X = [moreores:mithril_ingot] *
 | 
			
		||||
[3d_armor:boots_crystal] X = [ethereal:crystal_ingot] **
 | 
			
		||||
[3d_armor:boots_nether] X = [ethereal:nether_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
 | 
			
		||||
** Requires nether mod - https://github.com/minetest-mods/nether.git
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
default
 | 
			
		||||
player_monoids?
 | 
			
		||||
armor_monoid?
 | 
			
		||||
pova?
 | 
			
		||||
fire?
 | 
			
		||||
ethereal?
 | 
			
		||||
bakedclay?
 | 
			
		||||
moreores?
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
Adds craftable armor that is visible to other players.
 | 
			
		||||
@@ -2,7 +2,6 @@ local modname = minetest.get_current_modname()
 | 
			
		||||
local modpath = minetest.get_modpath(modname)
 | 
			
		||||
local worldpath = minetest.get_worldpath()
 | 
			
		||||
local last_punch_time = {}
 | 
			
		||||
local pending_players = {}
 | 
			
		||||
local timer = 0
 | 
			
		||||
 | 
			
		||||
dofile(modpath.."/api.lua")
 | 
			
		||||
@@ -96,17 +95,10 @@ for _, mod in pairs(skin_mods) do
 | 
			
		||||
				armor:add_preview(fn)
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
		armor.skin_mod = mod
 | 
			
		||||
		armor.set_skin_mod(mod)
 | 
			
		||||
	end
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
dofile(modpath.."/armor.lua")
 | 
			
		||||
 | 
			
		||||
-- Armor Initialization
 | 
			
		||||
 | 
			
		||||
@@ -188,11 +180,7 @@ local function validate_armor_inventory(player)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function init_player_armor(initplayer)
 | 
			
		||||
	local name = initplayer:get_player_name()
 | 
			
		||||
	local pos = initplayer:get_pos()
 | 
			
		||||
	if not name or not pos then
 | 
			
		||||
		return false
 | 
			
		||||
	end
 | 
			
		||||
	local name = assert(initplayer:get_player_name())
 | 
			
		||||
	local armor_inv = minetest.create_detached_inventory(name.."_armor", {
 | 
			
		||||
		on_put = function(inv, listname, index, stack, player)
 | 
			
		||||
			validate_armor_inventory(player)
 | 
			
		||||
@@ -231,6 +219,11 @@ local function init_player_armor(initplayer)
 | 
			
		||||
			if player:get_player_name() ~= name then
 | 
			
		||||
				return 0
 | 
			
		||||
			end
 | 
			
		||||
			--cursed items cannot be unequiped by the player
 | 
			
		||||
			local is_cursed = minetest.get_item_group(stack:get_name(), "cursed") ~= 0
 | 
			
		||||
			if not minetest.is_creative_enabled(player) and is_cursed then
 | 
			
		||||
				return 0
 | 
			
		||||
			end
 | 
			
		||||
			return stack:get_count()
 | 
			
		||||
		end,
 | 
			
		||||
		allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
 | 
			
		||||
@@ -258,7 +251,6 @@ local function init_player_armor(initplayer)
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
	armor.def[name] = {
 | 
			
		||||
		init_time = minetest.get_gametime(),
 | 
			
		||||
		level = 0,
 | 
			
		||||
		state = 0,
 | 
			
		||||
		count = 0,
 | 
			
		||||
@@ -276,8 +268,8 @@ local function init_player_armor(initplayer)
 | 
			
		||||
	local skin = armor:get_player_skin(name)
 | 
			
		||||
	armor.textures[name] = {
 | 
			
		||||
		skin = skin,
 | 
			
		||||
		armor = "3d_armor_trans.png",
 | 
			
		||||
		wielditem = "3d_armor_trans.png",
 | 
			
		||||
		armor = "blank.png",
 | 
			
		||||
		wielditem = "blank.png",
 | 
			
		||||
		preview = armor.default_skin.."_preview.png",
 | 
			
		||||
	}
 | 
			
		||||
	local texture_path = minetest.get_modpath("player_textures")
 | 
			
		||||
@@ -291,26 +283,34 @@ local function init_player_armor(initplayer)
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
	armor:set_player_armor(initplayer)
 | 
			
		||||
	return true
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Armor Player Model
 | 
			
		||||
 | 
			
		||||
default.player_register_model("3d_armor_character.b3d", {
 | 
			
		||||
player_api.register_model("3d_armor_character.b3d", {
 | 
			
		||||
	animation_speed = 30,
 | 
			
		||||
	textures = {
 | 
			
		||||
		armor.default_skin..".png",
 | 
			
		||||
		"3d_armor_trans.png",
 | 
			
		||||
		"3d_armor_trans.png",
 | 
			
		||||
		"blank.png",
 | 
			
		||||
		"blank.png",
 | 
			
		||||
	},
 | 
			
		||||
	animations = {
 | 
			
		||||
		stand = {x=0, y=79},
 | 
			
		||||
		lay = {x=162, y=166},
 | 
			
		||||
		lay = {x=162, y=166, eye_height = 0.3, override_local = true,
 | 
			
		||||
			collisionbox = {-0.6, 0.0, -0.6, 0.6, 0.3, 0.6}},
 | 
			
		||||
		walk = {x=168, y=187},
 | 
			
		||||
		mine = {x=189, y=198},
 | 
			
		||||
		walk_mine = {x=200, y=219},
 | 
			
		||||
		sit = {x=81, y=160},
 | 
			
		||||
		sit = {x=81, y=160, eye_height = 0.8, override_local = true,
 | 
			
		||||
			collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.0, 0.3}},
 | 
			
		||||
		-- compatibility w/ the emote mod
 | 
			
		||||
		wave = {x = 192, y = 196, override_local = true},
 | 
			
		||||
		point = {x = 196, y = 196, override_local = true},
 | 
			
		||||
		freeze = {x = 205, y = 205, override_local = true},
 | 
			
		||||
	},
 | 
			
		||||
	collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3},
 | 
			
		||||
	-- stepheight: use default
 | 
			
		||||
	eye_height = 1.47,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
 | 
			
		||||
@@ -327,16 +327,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
minetest.register_on_joinplayer(function(player)
 | 
			
		||||
	default.player_set_model(player, "3d_armor_character.b3d")
 | 
			
		||||
	local player_name = player:get_player_name()
 | 
			
		||||
 | 
			
		||||
	minetest.after(0, function()
 | 
			
		||||
		-- TODO: Added in 7566ecc - What's the prupose?
 | 
			
		||||
		local pplayer = minetest.get_player_by_name(player_name)
 | 
			
		||||
		if pplayer and init_player_armor(pplayer) == false then
 | 
			
		||||
			pending_players[pplayer] = 0
 | 
			
		||||
		end
 | 
			
		||||
	end)
 | 
			
		||||
	player_api.set_model(player, "3d_armor_character.b3d")
 | 
			
		||||
	init_player_armor(player)
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
minetest.register_on_leaveplayer(function(player)
 | 
			
		||||
@@ -345,7 +337,6 @@ minetest.register_on_leaveplayer(function(player)
 | 
			
		||||
		armor.def[name] = nil
 | 
			
		||||
		armor.textures[name] = nil
 | 
			
		||||
	end
 | 
			
		||||
	pending_players[player] = nil
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
if armor.config.drop == true or armor.config.destroy == true then
 | 
			
		||||
@@ -358,9 +349,12 @@ if armor.config.drop == true or armor.config.destroy == true then
 | 
			
		||||
		for i=1, armor_inv:get_size("armor") do
 | 
			
		||||
			local stack = armor_inv:get_stack("armor", i)
 | 
			
		||||
			if stack:get_count() > 0 then
 | 
			
		||||
				table.insert(drop, stack)
 | 
			
		||||
				armor:run_callbacks("on_unequip", player, i, stack)
 | 
			
		||||
				armor_inv:set_stack("armor", i, nil)
 | 
			
		||||
				--soulbound armors remain equipped after death
 | 
			
		||||
				if minetest.get_item_group(stack:get_name(), "soulbound") == 0 then
 | 
			
		||||
					table.insert(drop, stack)
 | 
			
		||||
					armor:run_callbacks("on_unequip", player, i, stack)
 | 
			
		||||
					armor_inv:set_stack("armor", i, nil)
 | 
			
		||||
				end
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
		armor:save_armor_inventory(player)
 | 
			
		||||
@@ -396,8 +390,8 @@ if armor.config.drop == true or armor.config.destroy == true then
 | 
			
		||||
			end)
 | 
			
		||||
		end
 | 
			
		||||
	end)
 | 
			
		||||
else -- reset un-dropped armor and it's effects
 | 
			
		||||
	minetest.register_on_respawnplayer(function(player)
 | 
			
		||||
		-- reset un-dropped armor and it's effects
 | 
			
		||||
		armor:set_player_armor(player)
 | 
			
		||||
	end)
 | 
			
		||||
end
 | 
			
		||||
@@ -406,10 +400,14 @@ if armor.config.punch_damage == true then
 | 
			
		||||
	minetest.register_on_punchplayer(function(player, hitter,
 | 
			
		||||
			time_from_last_punch, tool_capabilities)
 | 
			
		||||
		local name = player:get_player_name()
 | 
			
		||||
		local hit_ip = hitter:is_player()
 | 
			
		||||
		if name and hit_ip and minetest.is_protected(player:get_pos(), "") then
 | 
			
		||||
			return
 | 
			
		||||
		elseif name then
 | 
			
		||||
		if hitter then
 | 
			
		||||
			local hit_ip = hitter:is_player()
 | 
			
		||||
			if name and hit_ip and minetest.is_protected(player:get_pos(), "") then
 | 
			
		||||
				return
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		if name then
 | 
			
		||||
			armor:punch(player, hitter, time_from_last_punch, tool_capabilities)
 | 
			
		||||
			last_punch_time[name] = minetest.get_gametime()
 | 
			
		||||
		end
 | 
			
		||||
@@ -417,43 +415,53 @@ if armor.config.punch_damage == true then
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
minetest.register_on_player_hpchange(function(player, hp_change, reason)
 | 
			
		||||
	if player and reason.type ~= "drown" and reason.hunger == nil
 | 
			
		||||
			and hp_change < 0 then
 | 
			
		||||
		local name = player:get_player_name()
 | 
			
		||||
		if name then
 | 
			
		||||
			local heal = armor.def[name].heal
 | 
			
		||||
			if heal >= math.random(100) then
 | 
			
		||||
				hp_change = 0
 | 
			
		||||
			end
 | 
			
		||||
			-- check if armor damage was handled by fire or on_punchplayer
 | 
			
		||||
			local time = last_punch_time[name] or 0
 | 
			
		||||
			if time == 0 or time + 1 < minetest.get_gametime() then
 | 
			
		||||
				armor:punch(player)
 | 
			
		||||
			end
 | 
			
		||||
	if not minetest.is_player(player) then
 | 
			
		||||
		return hp_change
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	if reason.type == "drown" or reason.hunger or hp_change >= 0 then
 | 
			
		||||
		return hp_change
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	local name = player:get_player_name()
 | 
			
		||||
	local properties = player:get_properties()
 | 
			
		||||
	local hp = player:get_hp()
 | 
			
		||||
	if hp + hp_change < properties.hp_max then
 | 
			
		||||
		local heal = armor.def[name].heal
 | 
			
		||||
		if heal >= math.random(100) then
 | 
			
		||||
			hp_change = 0
 | 
			
		||||
		end
 | 
			
		||||
		-- check if armor damage was handled by fire or on_punchplayer
 | 
			
		||||
		local time = last_punch_time[name] or 0
 | 
			
		||||
		if time == 0 or time + 1 < minetest.get_gametime() then
 | 
			
		||||
			armor:punch(player)
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	return hp_change
 | 
			
		||||
end, true)
 | 
			
		||||
 | 
			
		||||
minetest.register_globalstep(function(dtime)
 | 
			
		||||
	timer = timer + dtime
 | 
			
		||||
 | 
			
		||||
	if armor.config.feather_fall == true then
 | 
			
		||||
		for _,player in pairs(minetest.get_connected_players()) do
 | 
			
		||||
			local name = player:get_player_name()
 | 
			
		||||
			if armor.def[name].feather > 0 then
 | 
			
		||||
				local vel_y = player:get_velocity().y
 | 
			
		||||
				if vel_y < -0.5 then
 | 
			
		||||
					vel_y = -(vel_y * 0.05)
 | 
			
		||||
					player:add_velocity({x = 0, y = vel_y, z = 0})
 | 
			
		||||
				end
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	if timer <= armor.config.init_delay then
 | 
			
		||||
		return
 | 
			
		||||
	end
 | 
			
		||||
	timer = 0
 | 
			
		||||
 | 
			
		||||
	for player, count in pairs(pending_players) do
 | 
			
		||||
		local remove = init_player_armor(player) == true
 | 
			
		||||
		pending_players[player] = count + 1
 | 
			
		||||
		if remove == false and count > armor.config.init_times then
 | 
			
		||||
			minetest.log("warning", S("3d_armor: Failed to initialize player"))
 | 
			
		||||
			remove = true
 | 
			
		||||
		end
 | 
			
		||||
		if remove == true then
 | 
			
		||||
			pending_players[player] = nil
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	-- water breathing protection, added by TenPlus1
 | 
			
		||||
	if armor.config.water_protect == true then
 | 
			
		||||
		for _,player in pairs(minetest.get_connected_players()) do
 | 
			
		||||
@@ -466,22 +474,14 @@ minetest.register_globalstep(function(dtime)
 | 
			
		||||
	end
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
-- Fire Protection, added by TenPlus1.
 | 
			
		||||
if armor.config.fire_protect == true then
 | 
			
		||||
	-- override any hot nodes that do not already deal damage
 | 
			
		||||
	for _, row in pairs(armor.fire_nodes) do
 | 
			
		||||
		if minetest.registered_nodes[row[1]] then
 | 
			
		||||
			local damage = minetest.registered_nodes[row[1]].damage_per_second
 | 
			
		||||
			if not damage or damage == 0 then
 | 
			
		||||
				minetest.override_item(row[1], {damage_per_second = row[3]})
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
else
 | 
			
		||||
	print ("[3d_armor] Fire Nodes disabled")
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
if armor.config.fire_protect == true then
 | 
			
		||||
	-- make torches hurt
 | 
			
		||||
	minetest.override_item("default:torch", {damage_per_second = 1})
 | 
			
		||||
	minetest.override_item("default:torch_wall", {damage_per_second = 1})
 | 
			
		||||
	minetest.override_item("default:torch_ceiling", {damage_per_second = 1})
 | 
			
		||||
 | 
			
		||||
	-- check player damage for any hot nodes we may be protected against
 | 
			
		||||
	minetest.register_on_player_hpchange(function(player, hp_change, reason)
 | 
			
		||||
 | 
			
		||||
		if reason.type == "node_damage" and reason.node then
 | 
			
		||||
@@ -490,9 +490,7 @@ if armor.config.fire_protect == true then
 | 
			
		||||
				local name = player:get_player_name()
 | 
			
		||||
				for _,igniter in pairs(armor.fire_nodes) do
 | 
			
		||||
					if reason.node == igniter[1] then
 | 
			
		||||
						if armor.def[name].fire < igniter[2] then
 | 
			
		||||
							armor:punch(player, "fire")
 | 
			
		||||
						else
 | 
			
		||||
						if armor.def[name].fire >= igniter[2] then
 | 
			
		||||
							hp_change = 0
 | 
			
		||||
						end
 | 
			
		||||
					end
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								3d_armor/locale/3d_armor.de.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,7 @@
 | 
			
		||||
# textdomain: 3d_armor
 | 
			
		||||
Radiation=Strahlung
 | 
			
		||||
Level=Stufe
 | 
			
		||||
Heal=Heilung
 | 
			
		||||
Fire=Feuer
 | 
			
		||||
Your @1 is almost broken!=@1 ist fast kaputt!
 | 
			
		||||
Your @1 got destroyed!=@1 wurde zerstört!
 | 
			
		||||
							
								
								
									
										7
									
								
								3d_armor/locale/3d_armor.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,7 @@
 | 
			
		||||
# textdomain: 3d_armor
 | 
			
		||||
Radiation=Radiado
 | 
			
		||||
Level=Nivelo
 | 
			
		||||
Heal=Blokŝanco
 | 
			
		||||
Fire=Fajro
 | 
			
		||||
Your @1 is almost broken!=Via @1 estas preskaŭ rompita!
 | 
			
		||||
Your @1 got destroyed!=Via @1 detruiĝis!
 | 
			
		||||
@@ -1,58 +1,7 @@
 | 
			
		||||
# textdomain: 3d_armor
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### api.lua ###
 | 
			
		||||
 | 
			
		||||
3d_armor: Detached armor inventory is nil @1=3d_armor: La armadura desconectada es nula @1
 | 
			
		||||
3d_armor: Player name is nil @1=3d_armor: El nombre del jugador es nulo @1
 | 
			
		||||
3d_armor: Player reference is nil @1=3d_armor: La referencia del jugador es nula @1
 | 
			
		||||
 | 
			
		||||
### armor.lua ###
 | 
			
		||||
 | 
			
		||||
Admin Boots=Botas de admin
 | 
			
		||||
Admin Chestplate=Peto de admin
 | 
			
		||||
Admin Helmet=Casco de admin
 | 
			
		||||
Admin Leggings=Grebas de admin
 | 
			
		||||
Bronze Boots=Botas de bronce
 | 
			
		||||
Bronze Chestplate=Peto de bronce
 | 
			
		||||
Bronze Helmet=Casco de bronce
 | 
			
		||||
Bronze Leggings=Grebas de bronce
 | 
			
		||||
Cactus Boots=Botas de cactus
 | 
			
		||||
Cactus Chestplate=Peto de cactus
 | 
			
		||||
Cactus Helmet=Casco de cactus
 | 
			
		||||
Cactus Leggings=Grebas de cactus
 | 
			
		||||
Crystal Boots=Botas de cristal
 | 
			
		||||
Crystal Chestplate=Peto de cristal
 | 
			
		||||
Crystal Helmet=Casco de cristal
 | 
			
		||||
Crystal Leggings=Grebas de cristal
 | 
			
		||||
Diamond Boots=Botas de diamante
 | 
			
		||||
Diamond Chestplate=Peto de diamante
 | 
			
		||||
Diamond Helmet=Casco de diamante
 | 
			
		||||
Diamond Leggings=Grebas de diamante
 | 
			
		||||
Gold Boots=Botas de oro
 | 
			
		||||
Gold Chestplate=Peto de oro
 | 
			
		||||
Gold Helmet=Casco de oro
 | 
			
		||||
Gold Leggings=Grebas de oro
 | 
			
		||||
Mithril Boots=Botas de mitrilo
 | 
			
		||||
Mithril Chestplate=Peto de mitrilo
 | 
			
		||||
Mithril Helmet=Casco de mitrilo
 | 
			
		||||
Mithril Leggings=Grebas de mitrilo
 | 
			
		||||
Steel Boots=Botas de acero
 | 
			
		||||
Steel Chestplate=Peto de acero
 | 
			
		||||
Steel Helmet=Casco de acero
 | 
			
		||||
Steel Leggings=Grebas de acero
 | 
			
		||||
Wood Boots=Botas de madera
 | 
			
		||||
Wood Chestplate=Peto de madera
 | 
			
		||||
Wood Helmet=Casco de madera
 | 
			
		||||
Wood Leggings=Grebas de madera
 | 
			
		||||
 | 
			
		||||
### init.lua ###
 | 
			
		||||
 | 
			
		||||
3d_armor: Failed to initialize player=3d_armor: Fallo en la inicialización del jugador
 | 
			
		||||
Fire=Fuego
 | 
			
		||||
Heal=Salud
 | 
			
		||||
Level=Nivel
 | 
			
		||||
Radiation=Radiación
 | 
			
		||||
Your @1 got destroyed!=¡Tu @1 fue destruído!
 | 
			
		||||
Level=Nivel
 | 
			
		||||
Heal=Salud
 | 
			
		||||
Fire=Fuego
 | 
			
		||||
Your @1 is almost broken!=¡Tu @1 esta a punto de romperse!
 | 
			
		||||
[3d_armor] Fire Nodes disabled=[3d_armor] Nodos de fuego desabilitados
 | 
			
		||||
Your @1 got destroyed!=¡Tu @1 fue destruído!
 | 
			
		||||
 
 | 
			
		||||
@@ -1,58 +1,7 @@
 | 
			
		||||
# textdomain: 3d_armor
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### api.lua ###
 | 
			
		||||
 | 
			
		||||
3d_armor: Detached armor inventory is nil @1=3d_armor : Inventaire détaché pour l'armure non trouvé @1
 | 
			
		||||
3d_armor: Player name is nil @1=3d_armor : Nom du joueur non trouvé @1
 | 
			
		||||
3d_armor: Player reference is nil @1=3d_armor : Référence au joueur non trouvée @1
 | 
			
		||||
 | 
			
		||||
### armor.lua ###
 | 
			
		||||
 | 
			
		||||
Admin Boots=Bottes d'admin
 | 
			
		||||
Admin Chestplate=Cuirasse d'admin
 | 
			
		||||
Admin Helmet=Casque d'admin
 | 
			
		||||
Admin Leggings=Jambières d'admin
 | 
			
		||||
Bronze Boots=Bottes en bronze
 | 
			
		||||
Bronze Chestplate=Cuirasse en bronze
 | 
			
		||||
Bronze Helmet=Casque en bronze
 | 
			
		||||
Bronze Leggings=Jambières en bronze
 | 
			
		||||
Cactus Boots=Bottes en cactus
 | 
			
		||||
Cactus Chestplate=Cuirasse en cactus
 | 
			
		||||
Cactus Helmet=Casque en cactus
 | 
			
		||||
Cactus Leggings=Jambières en cactus
 | 
			
		||||
Crystal Boots=Bottes en cristal
 | 
			
		||||
Crystal Chestplate=Cuirasse en cristal
 | 
			
		||||
Crystal Helmet=Casque en cristal
 | 
			
		||||
Crystal Leggings=Jambières en cristal
 | 
			
		||||
Diamond Boots=Bottes en diamant
 | 
			
		||||
Diamond Chestplate=Cuirasse en diamant
 | 
			
		||||
Diamond Helmet=Casque en diamant
 | 
			
		||||
Diamond Leggings=Jambières en diamant
 | 
			
		||||
Gold Boots=Bottes en or
 | 
			
		||||
Gold Chestplate=Cuirasse en or
 | 
			
		||||
Gold Helmet=Casque en or
 | 
			
		||||
Gold Leggings=Jambières en or
 | 
			
		||||
Mithril Boots=Bottes en mithril
 | 
			
		||||
Mithril Chestplate=Cuirasse en mithril
 | 
			
		||||
Mithril Helmet=Casque en mithril
 | 
			
		||||
Mithril Leggings=Jambières en mithril
 | 
			
		||||
Steel Boots=Bottes en acier
 | 
			
		||||
Steel Chestplate=Cuirasse en acier
 | 
			
		||||
Steel Helmet=Casque en acier
 | 
			
		||||
Steel Leggings=Jambières en acier
 | 
			
		||||
Wood Boots=Bottes en bois
 | 
			
		||||
Wood Chestplate=Cuirasse en bois
 | 
			
		||||
Wood Helmet=Casque en bois
 | 
			
		||||
Wood Leggings=Jambières en bois
 | 
			
		||||
 | 
			
		||||
### init.lua ###
 | 
			
		||||
 | 
			
		||||
3d_armor: Failed to initialize player=3d_armor : Impossible d'initialiser le joueur
 | 
			
		||||
Fire=Fire
 | 
			
		||||
Heal=Soins
 | 
			
		||||
Level=Niveau
 | 
			
		||||
Radiation=Radiation
 | 
			
		||||
Your @1 got destroyed!=Une partie de votre armure a été détruite : @1 !
 | 
			
		||||
Level=Niveau
 | 
			
		||||
Heal=Soins
 | 
			
		||||
Fire=Fire
 | 
			
		||||
Your @1 is almost broken!=Une partie de votre armure est presque détruite : @1 !
 | 
			
		||||
[3d_armor] Fire Nodes disabled=[3d_armor] Nœuds de type feu désactivés
 | 
			
		||||
Your @1 got destroyed!=Une partie de votre armure a été détruite : @1 !
 | 
			
		||||
 
 | 
			
		||||
@@ -1,85 +1,7 @@
 | 
			
		||||
# textdomain: 3d_armor
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### api.lua ###
 | 
			
		||||
 | 
			
		||||
3d_armor: Detached armor inventory is nil @1=3d_armor: L'inventario separato dell'armatura è nullo @1
 | 
			
		||||
3d_armor: Player name is nil @1=3d_armor: Il nome dell'utente è nullo @1
 | 
			
		||||
3d_armor: Player reference is nil @1=3d_armor: Il riferimento all'utente è nullo @1
 | 
			
		||||
 | 
			
		||||
### armor.lua ###
 | 
			
		||||
 | 
			
		||||
Admin Boots=Stivali dell'amministratrice/tore
 | 
			
		||||
Admin Chestplate=Corazza dell'amministratrice/tore
 | 
			
		||||
Admin Helmet=Elmo dell'amministratrice/tore
 | 
			
		||||
Admin Leggings=Gambali dell'amministratrice/tore
 | 
			
		||||
Bronze Boots=Stivali di bronzo
 | 
			
		||||
Bronze Chestplate=Corazza di bronzo
 | 
			
		||||
Bronze Helmet=Elmo di bronzo
 | 
			
		||||
Bronze Leggings=Gambali di bronzo
 | 
			
		||||
Cactus Boots=Stivali di cactus
 | 
			
		||||
Cactus Chestplate=Corazza di cactus
 | 
			
		||||
Cactus Helmet=Elmo di cactus
 | 
			
		||||
Cactus Leggings=Gambali di cactus
 | 
			
		||||
Crystal Boots=Stivali di cristallo
 | 
			
		||||
Crystal Chestplate=Corazza di cristallo
 | 
			
		||||
Crystal Helmet=Elmo di cristallo
 | 
			
		||||
Crystal Leggings=Gambali di cristallo
 | 
			
		||||
Diamond Boots=Stivali di diamante
 | 
			
		||||
Diamond Chestplate=Corazza di diamante
 | 
			
		||||
Diamond Helmet=Elmo di diamante
 | 
			
		||||
Diamond Leggings=Gambali di diamante
 | 
			
		||||
Gold Boots=Stivali d'oro
 | 
			
		||||
Gold Chestplate=Corazza d'oro
 | 
			
		||||
Gold Helmet=Elmo d'oro
 | 
			
		||||
Gold Leggings=Gambali d'oro
 | 
			
		||||
Mithril Boots=Stivali di mithril
 | 
			
		||||
Mithril Chestplate=Corazza di mithril
 | 
			
		||||
Mithril Helmet=Elmo di mithril
 | 
			
		||||
Mithril Leggings=Gambali di mithril
 | 
			
		||||
Steel Boots=Stivali d'acciaio
 | 
			
		||||
Steel Chestplate=Corazza d'acciaio
 | 
			
		||||
Steel Helmet=Elmo d'acciaio
 | 
			
		||||
Steel Leggings=Gambali d'acciaio
 | 
			
		||||
Wood Boots=Stivali di legno
 | 
			
		||||
Wood Chestplate=Corazza di legno
 | 
			
		||||
Wood Helmet=Elmo di legno
 | 
			
		||||
Wood Leggings=Gambali di legno
 | 
			
		||||
 | 
			
		||||
### init.lua ###
 | 
			
		||||
 | 
			
		||||
3d_armor: Failed to initialize player=3d_armor: Inizializzazione dell'utente fallita
 | 
			
		||||
Fire=Fuoco
 | 
			
		||||
Heal=Guarigione
 | 
			
		||||
Level=Livello
 | 
			
		||||
Radiation=Radiazione
 | 
			
		||||
Your @1 got destroyed!=@1 in frantumi!
 | 
			
		||||
Level=Livello
 | 
			
		||||
Heal=Guarigione
 | 
			
		||||
Fire=Fuoco
 | 
			
		||||
Your @1 is almost broken!=@1 quasi in frantumi!
 | 
			
		||||
[3d_armor] Fire Nodes disabled=[3d_armor] Nodi fuoco disabilitati
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
##### not used anymore #####
 | 
			
		||||
 | 
			
		||||
3d_armor_ip: Mod loaded but unused.=3d_armor_ip: Mod caricata ma inutilizzata.
 | 
			
		||||
Back=Indietro
 | 
			
		||||
Armor=Armatura
 | 
			
		||||
3d_armor_sfinv: Mod loaded but unused.=3d_armor_sfinv: Mod caricata ma inutilizzata.
 | 
			
		||||
Armor stand top=Parte superiore del supporto per armatura
 | 
			
		||||
Armor stand=Supporto per armatura
 | 
			
		||||
Armor Stand=Supporto per armatura
 | 
			
		||||
Locked Armor stand=Supporto per armatura chiuso a chiave
 | 
			
		||||
Armor Stand (owned by @1)=Supporto per armatura (di proprietà di @1)
 | 
			
		||||
3d_armor_ui: Mod loaded but unused.=3d_armor_ui: Mod caricata ma inutilizzata.
 | 
			
		||||
3d Armor=Armatura 3D
 | 
			
		||||
Armor not initialized!=Armatura non inizializzata!
 | 
			
		||||
Admin Shield=Scudo dell'amministratrice/tore
 | 
			
		||||
Wooden Shield=Scudo di legno
 | 
			
		||||
Enhanced Wood Shield=Scudo di legno migliorato
 | 
			
		||||
Cactus Shield=Scudo di cactus
 | 
			
		||||
Enhanced Cactus Shield=Scudo di cactus migliorato
 | 
			
		||||
Steel Shield=Scudo d'acciaio
 | 
			
		||||
Bronze Shield=Scudo di bronzo
 | 
			
		||||
Diamond Shield=Scudo di diamante
 | 
			
		||||
Gold Shield=Scudo d'oro
 | 
			
		||||
Mithril Shield=Scudo di mithril
 | 
			
		||||
Crystal Shield=Scudo di cristallo
 | 
			
		||||
Your @1 got destroyed!=@1 in frantumi!
 | 
			
		||||
 
 | 
			
		||||
@@ -1,85 +1,7 @@
 | 
			
		||||
# textdomain: 3d_armor
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### api.lua ###
 | 
			
		||||
 | 
			
		||||
3d_armor: Detached armor inventory is nil @1=3d_armor: Inventori perisai terpisah tiada nilai @1
 | 
			
		||||
3d_armor: Player name is nil @1=3d_armor: Nama pemain tiada nilai @1
 | 
			
		||||
3d_armor: Player reference is nil @1=3d_armor: Rujukan pemain tiada nilai @1
 | 
			
		||||
 | 
			
		||||
### armor.lua ###
 | 
			
		||||
 | 
			
		||||
Admin Boots=But Pentadbir
 | 
			
		||||
Admin Chestplate=Perisai Dada Pentadbir
 | 
			
		||||
Admin Helmet=Helmet Pentadbir
 | 
			
		||||
Admin Leggings=Perisai Kaki Pentadbir
 | 
			
		||||
Bronze Boots=But Gangsa
 | 
			
		||||
Bronze Chestplate=Perisai Dada Gangsa
 | 
			
		||||
Bronze Helmet=Helmet Gangsa
 | 
			
		||||
Bronze Leggings=Perisai Kaki Gangsa
 | 
			
		||||
Cactus Boots=But Kaktus
 | 
			
		||||
Cactus Chestplate=Perisai Dada Kaktus
 | 
			
		||||
Cactus Helmet=Helmet Kaktus
 | 
			
		||||
Cactus Leggings=Perisai Kaki Kaktus
 | 
			
		||||
Crystal Boots=But Kristal
 | 
			
		||||
Crystal Chestplate=Perisai Dada Kristal
 | 
			
		||||
Crystal Helmet=Helmet Kristal
 | 
			
		||||
Crystal Leggings=Perisai Kaki Kristal
 | 
			
		||||
Diamond Boots=But Intan
 | 
			
		||||
Diamond Chestplate=Perisai Dada Intan
 | 
			
		||||
Diamond Helmet=Helmet Intan
 | 
			
		||||
Diamond Leggings=Perisai Kaki Intan
 | 
			
		||||
Gold Boots=But Emas
 | 
			
		||||
Gold Chestplate=Perisai Dada Emas
 | 
			
		||||
Gold Helmet=Helmet Emas
 | 
			
		||||
Gold Leggings=Perisai Kaki Emas
 | 
			
		||||
Mithril Boots=But Mithril
 | 
			
		||||
Mithril Chestplate=Perisai Dada Mithril
 | 
			
		||||
Mithril Helmet=Helmet Mithril
 | 
			
		||||
Mithril Leggings=Perisai Kaki Mithril
 | 
			
		||||
Steel Boots=But Keluli
 | 
			
		||||
Steel Chestplate=Perisai Dada Keluli
 | 
			
		||||
Steel Helmet=Helmet Keluli
 | 
			
		||||
Steel Leggings=Perisai Kaki Keluli
 | 
			
		||||
Wood Boots=But Kayu
 | 
			
		||||
Wood Chestplate=Perisai Dada Kayu
 | 
			
		||||
Wood Helmet=Helmet Kayu
 | 
			
		||||
Wood Leggings=Perisai Kaki Kayu
 | 
			
		||||
 | 
			
		||||
### init.lua ###
 | 
			
		||||
 | 
			
		||||
3d_armor: Failed to initialize player=3d_armor: Gagal mengasalkan pemain
 | 
			
		||||
Fire=Api
 | 
			
		||||
Heal=Pulih
 | 
			
		||||
Level=Tahap
 | 
			
		||||
Radiation=Radiasi
 | 
			
		||||
Your @1 got destroyed!=@1 anda telah musnah!
 | 
			
		||||
Level=Tahap
 | 
			
		||||
Heal=Pulih
 | 
			
		||||
Fire=Api
 | 
			
		||||
Your @1 is almost broken!=
 | 
			
		||||
[3d_armor] Fire Nodes disabled=[3d_armor] Nod-nod Api dilumpuhkan
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
##### not used anymore #####
 | 
			
		||||
 | 
			
		||||
3d_armor_ip: Mod loaded but unused.=3d_armor_ip: Mods dimuatkan tetapi tidak digunakan.
 | 
			
		||||
Back=Kembali
 | 
			
		||||
Armor=Perisai
 | 
			
		||||
3d_armor_sfinv: Mod loaded but unused.=3d_armor_sfinv: Mods dimuatkan tetapi tidak digunakan.
 | 
			
		||||
Armor stand top=Bhg atas dirian perisai
 | 
			
		||||
Armor stand=Dirian perisai
 | 
			
		||||
Armor Stand=Dirian Perisai
 | 
			
		||||
Locked Armor stand=Dirian perisai Berkunci
 | 
			
		||||
Armor Stand (owned by @1)=Dirian Perisai (milik @1)
 | 
			
		||||
3d_armor_ui: Mod loaded but unused.=3d_armor_ui: Mods dimuatkan tetapi tidak digunakan.
 | 
			
		||||
3d Armor=Perisai 3d
 | 
			
		||||
Armor not initialized!=Perisai tidak diasalkan!
 | 
			
		||||
Admin Shield=Perisai Pegang Pentadbir
 | 
			
		||||
Wooden Shield=Perisai Pegang Kayu
 | 
			
		||||
Enhanced Wood Shield=Perisai Pegang Kayu Kukuh
 | 
			
		||||
Cactus Shield=Perisai Pegang Kaktus
 | 
			
		||||
Enhanced Cactus Shield=Perisai Pegang Kaktus Kukuh
 | 
			
		||||
Steel Shield=Perisai Pegang Keluli
 | 
			
		||||
Bronze Shield=Perisai Pegang Gangsa
 | 
			
		||||
Diamond Shield=Perisai Pegang Intan
 | 
			
		||||
Gold Shield=Perisai Pegang Emas
 | 
			
		||||
Mithril Shield=Perisai Pegang Mithril
 | 
			
		||||
Crystal Shield=Perisai Pegang Kristal
 | 
			
		||||
Your @1 got destroyed!=@1 anda telah musnah!
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								3d_armor/locale/3d_armor.pl.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,7 @@
 | 
			
		||||
# textdomain: 3d_armor
 | 
			
		||||
Radiation=Promieniowanie
 | 
			
		||||
Level=Poziom
 | 
			
		||||
Heal=Uzdrawianie
 | 
			
		||||
Fire=Ogień
 | 
			
		||||
Your @1 is almost broken!=Twój @1 jest prawie zepsuty!
 | 
			
		||||
Your @1 got destroyed!=Twój @1 został zniszczony!
 | 
			
		||||
@@ -1,85 +1,7 @@
 | 
			
		||||
# textdomain: 3d_armor
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### api.lua ###
 | 
			
		||||
 | 
			
		||||
3d_armor: Detached armor inventory is nil @1=3d_armor: Inventario avulso de armadura é nulo @1
 | 
			
		||||
3d_armor: Player name is nil @1=3d_armor: Nome de jogador é nulo @1
 | 
			
		||||
3d_armor: Player reference is nil @1=3d_armor: Referência Jogador é nula @1
 | 
			
		||||
 | 
			
		||||
### armor.lua ###
 | 
			
		||||
 | 
			
		||||
Admin Boots=Botas de Administrador
 | 
			
		||||
Admin Chestplate=Peitoral de Administrador
 | 
			
		||||
Admin Helmet=Capacete de Administrador
 | 
			
		||||
Admin Leggings=Calças de Administrador
 | 
			
		||||
Bronze Boots=Botas de Bronze
 | 
			
		||||
Bronze Chestplate=Peitoral de Bronze
 | 
			
		||||
Bronze Helmet=Capacete de Bronze
 | 
			
		||||
Bronze Leggings=Calças de Bronze
 | 
			
		||||
Cactus Boots=Botas de Madeira
 | 
			
		||||
Cactus Chestplate=Peitoral de Cacto
 | 
			
		||||
Cactus Helmet=Capacete de Cacto
 | 
			
		||||
Cactus Leggings=Calças de Cacto
 | 
			
		||||
Crystal Boots=Botas de Cristal
 | 
			
		||||
Crystal Chestplate=Peitoral de Cristal
 | 
			
		||||
Crystal Helmet=Capacete de Cristal
 | 
			
		||||
Crystal Leggings=Calças de Cristal
 | 
			
		||||
Diamond Boots=Botas de Diamante
 | 
			
		||||
Diamond Chestplate=Peitoral de Diamante
 | 
			
		||||
Diamond Helmet=Capacete de Diamante
 | 
			
		||||
Diamond Leggings=Calças de Diamante
 | 
			
		||||
Gold Boots=Botas de Ouro
 | 
			
		||||
Gold Chestplate=Peitoral de Ouro
 | 
			
		||||
Gold Helmet=Capacete de Ouro
 | 
			
		||||
Gold Leggings=Calças de Ouro
 | 
			
		||||
Mithril Boots=Botas de Mithril
 | 
			
		||||
Mithril Chestplate=Peitoral de Mithril
 | 
			
		||||
Mithril Helmet=Capacete de Mithril
 | 
			
		||||
Mithril Leggings=Calças de Mithril
 | 
			
		||||
Steel Boots=Botas de Aço
 | 
			
		||||
Steel Chestplate=Peitoral de Aço
 | 
			
		||||
Steel Helmet=Capacete de Aço
 | 
			
		||||
Steel Leggings=Calças de Aço
 | 
			
		||||
Wood Boots=Botas de Madeira
 | 
			
		||||
Wood Chestplate=Peitoral de Madeira
 | 
			
		||||
Wood Helmet=Capacete de Madeira
 | 
			
		||||
Wood Leggings=Calças de Madeira
 | 
			
		||||
 | 
			
		||||
### init.lua ###
 | 
			
		||||
 | 
			
		||||
3d_armor: Failed to initialize player=3d_armor: Falha ao inicializar jogador
 | 
			
		||||
Fire=Fogo
 | 
			
		||||
Heal=Saúde
 | 
			
		||||
Level=Nível
 | 
			
		||||
Radiation=Radiação
 | 
			
		||||
Your @1 got destroyed!=@1 foi destruído(a)!
 | 
			
		||||
Level=Nível
 | 
			
		||||
Heal=Saúde
 | 
			
		||||
Fire=Fogo
 | 
			
		||||
Your @1 is almost broken!=
 | 
			
		||||
[3d_armor] Fire Nodes disabled=[3d_armor] Nodes de gofo desabilitados
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
##### not used anymore #####
 | 
			
		||||
 | 
			
		||||
3d_armor_ip: Mod loaded but unused.=3d_armor_ip: Mod carregado mas inoperante.
 | 
			
		||||
Back=Voltar
 | 
			
		||||
Armor=Armadura
 | 
			
		||||
3d_armor_sfinv: Mod loaded but unused.=3d_armor_sfinv: Mod carregado mas inoperante.
 | 
			
		||||
Armor stand top=Topo de estande de armadura
 | 
			
		||||
Armor stand=Estande de armadura
 | 
			
		||||
Armor Stand=Estande de Armadura
 | 
			
		||||
Locked Armor stand=Estande de Armadura Trancada
 | 
			
		||||
Armor Stand (owned by @1)=Estande de Armadura (pertente a @1)
 | 
			
		||||
3d_armor_ui: Mod loaded but unused.=3d_armor_ui: Mod carregado mas inoperante.
 | 
			
		||||
3d Armor=3d Armor
 | 
			
		||||
Armor not initialized!=Armadura não inicializada!
 | 
			
		||||
Admin Shield=Escudo de Administrador
 | 
			
		||||
Wooden Shield=Escudo de Madeira
 | 
			
		||||
Enhanced Wood Shield=Escudo de Madeira Melhorado
 | 
			
		||||
Cactus Shield=Escudo de Cacto
 | 
			
		||||
Enhanced Cactus Shield=Escudo de Cacto Melhorado
 | 
			
		||||
Steel Shield=Escudo de Aço
 | 
			
		||||
Bronze Shield=Escudo de Bronze
 | 
			
		||||
Diamond Shield=Escudo de Diamante
 | 
			
		||||
Gold Shield=Escudo de Ouro
 | 
			
		||||
Mithril Shield=Escudo de Mithril
 | 
			
		||||
Crystal Shield=Escudo de Cristal
 | 
			
		||||
Your @1 got destroyed!=@1 foi destruído(a)!
 | 
			
		||||
 
 | 
			
		||||
@@ -1,85 +1,7 @@
 | 
			
		||||
# textdomain: 3d_armor
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### api.lua ###
 | 
			
		||||
 | 
			
		||||
3d_armor: Detached armor inventory is nil @1=3d_armor: Inventario avulso de armadura é nulo @1
 | 
			
		||||
3d_armor: Player name is nil @1=3d_armor: Nome de jogador é nulo @1
 | 
			
		||||
3d_armor: Player reference is nil @1=3d_armor: Referência Jogador é nula @1
 | 
			
		||||
 | 
			
		||||
### armor.lua ###
 | 
			
		||||
 | 
			
		||||
Admin Boots=Botas de Administrador
 | 
			
		||||
Admin Chestplate=Peitoral de Administrador
 | 
			
		||||
Admin Helmet=Capacete de Administrador
 | 
			
		||||
Admin Leggings=Calças de Administrador
 | 
			
		||||
Bronze Boots=Botas de Bronze
 | 
			
		||||
Bronze Chestplate=Peitoral de Bronze
 | 
			
		||||
Bronze Helmet=Capacete de Bronze
 | 
			
		||||
Bronze Leggings=Calças de Bronze
 | 
			
		||||
Cactus Boots=Botas de Madeira
 | 
			
		||||
Cactus Chestplate=Peitoral de Cacto
 | 
			
		||||
Cactus Helmet=Capacete de Cacto
 | 
			
		||||
Cactus Leggings=Calças de Cacto
 | 
			
		||||
Crystal Boots=Botas de Cristal
 | 
			
		||||
Crystal Chestplate=Peitoral de Cristal
 | 
			
		||||
Crystal Helmet=Capacete de Cristal
 | 
			
		||||
Crystal Leggings=Calças de Cristal
 | 
			
		||||
Diamond Boots=Botas de Diamante
 | 
			
		||||
Diamond Chestplate=Peitoral de Diamante
 | 
			
		||||
Diamond Helmet=Capacete de Diamante
 | 
			
		||||
Diamond Leggings=Calças de Diamante
 | 
			
		||||
Gold Boots=Botas de Ouro
 | 
			
		||||
Gold Chestplate=Peitoral de Ouro
 | 
			
		||||
Gold Helmet=Capacete de Ouro
 | 
			
		||||
Gold Leggings=Calças de Ouro
 | 
			
		||||
Mithril Boots=Botas de Mithril
 | 
			
		||||
Mithril Chestplate=Peitoral de Mithril
 | 
			
		||||
Mithril Helmet=Capacete de Mithril
 | 
			
		||||
Mithril Leggings=Calças de Mithril
 | 
			
		||||
Steel Boots=Botas de Aço
 | 
			
		||||
Steel Chestplate=Peitoral de Aço
 | 
			
		||||
Steel Helmet=Capacete de Aço
 | 
			
		||||
Steel Leggings=Calças de Aço
 | 
			
		||||
Wood Boots=Botas de Madeira
 | 
			
		||||
Wood Chestplate=Peitoral de Madeira
 | 
			
		||||
Wood Helmet=Capacete de Madeira
 | 
			
		||||
Wood Leggings=Calças de Madeira
 | 
			
		||||
 | 
			
		||||
### init.lua ###
 | 
			
		||||
 | 
			
		||||
3d_armor: Failed to initialize player=3d_armor: Falha ao inicializar jogador
 | 
			
		||||
Fire=Fogo
 | 
			
		||||
Heal=Saúde
 | 
			
		||||
Level=Nível
 | 
			
		||||
Radiation=Radiação
 | 
			
		||||
Your @1 got destroyed!=@1 foi destruído(a)!
 | 
			
		||||
Level=Nível
 | 
			
		||||
Heal=Saúde
 | 
			
		||||
Fire=Fogo
 | 
			
		||||
Your @1 is almost broken!=
 | 
			
		||||
[3d_armor] Fire Nodes disabled=[3d_armor] Nodes de gofo desabilitados
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
##### not used anymore #####
 | 
			
		||||
 | 
			
		||||
3d_armor_ip: Mod loaded but unused.=3d_armor_ip: Mod carregado mas inoperante.
 | 
			
		||||
Back=Voltar
 | 
			
		||||
Armor=Armadura
 | 
			
		||||
3d_armor_sfinv: Mod loaded but unused.=3d_armor_sfinv: Mod carregado mas inoperante.
 | 
			
		||||
Armor stand top=Topo de estande de armadura
 | 
			
		||||
Armor stand=Estande de armadura
 | 
			
		||||
Armor Stand=Estande de Armadura
 | 
			
		||||
Locked Armor stand=Estande de Armadura Trancada
 | 
			
		||||
Armor Stand (owned by @1)=Estande de Armadura (pertente a @1)
 | 
			
		||||
3d_armor_ui: Mod loaded but unused.=3d_armor_ui: Mod carregado mas inoperante.
 | 
			
		||||
3d Armor=3d Armor
 | 
			
		||||
Armor not initialized!=Armadura não inicializada!
 | 
			
		||||
Admin Shield=Escudo de Administrador
 | 
			
		||||
Wooden Shield=Escudo de Madeira
 | 
			
		||||
Enhanced Wood Shield=Escudo de Madeira Melhorado
 | 
			
		||||
Cactus Shield=Escudo de Cacto
 | 
			
		||||
Enhanced Cactus Shield=Escudo de Cacto Melhorado
 | 
			
		||||
Steel Shield=Escudo de Aço
 | 
			
		||||
Bronze Shield=Escudo de Bronze
 | 
			
		||||
Diamond Shield=Escudo de Diamante
 | 
			
		||||
Gold Shield=Escudo de Ouro
 | 
			
		||||
Mithril Shield=Escudo de Mithril
 | 
			
		||||
Crystal Shield=Escudo de Cristal
 | 
			
		||||
Your @1 got destroyed!=@1 foi destruído(a)!
 | 
			
		||||
 
 | 
			
		||||
@@ -1,85 +1,7 @@
 | 
			
		||||
# textdomain: 3d_armor
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### api.lua ###
 | 
			
		||||
 | 
			
		||||
3d_armor: Detached armor inventory is nil @1=3d_armor: Отдельный инвентарь брони является nil @1
 | 
			
		||||
3d_armor: Player name is nil @1=3d_armor: Имя игрока является nil @1
 | 
			
		||||
3d_armor: Player reference is nil @1=3d_armor: Ссылка игрока является nil @1
 | 
			
		||||
 | 
			
		||||
### armor.lua ###
 | 
			
		||||
 | 
			
		||||
Admin Boots=ботинки админа
 | 
			
		||||
Admin Chestplate=бронежилет админа
 | 
			
		||||
Admin Helmet=шлем админа
 | 
			
		||||
Admin Leggings=гамаши админа
 | 
			
		||||
Bronze Boots=бронзовые ботинки
 | 
			
		||||
Bronze Chestplate=бронзовый бронежилет
 | 
			
		||||
Bronze Helmet=бронзовый шлем
 | 
			
		||||
Bronze Leggings=бронзовые гамаши
 | 
			
		||||
Cactus Boots=кактусовые ботинки
 | 
			
		||||
Cactus Chestplate=кактусовый бронежилет
 | 
			
		||||
Cactus Helmet=кактусовый шлем
 | 
			
		||||
Cactus Leggings=кактусовые гамаши
 | 
			
		||||
Crystal Boots=кристалловые ботинки
 | 
			
		||||
Crystal Chestplate=кристалловый бронежилет
 | 
			
		||||
Crystal Helmet=кристалловый шлем
 | 
			
		||||
Crystal Leggings=кристалловые гамаши
 | 
			
		||||
Diamond Boots=алмазные ботинки
 | 
			
		||||
Diamond Chestplate=алмазный бронежилет
 | 
			
		||||
Diamond Helmet=алмазный шлем
 | 
			
		||||
Diamond Leggings=алмазные гамаши
 | 
			
		||||
Gold Boots=золотые ботинки
 | 
			
		||||
Gold Chestplate=золотой бронежилет
 | 
			
		||||
Gold Helmet=золотой шлем
 | 
			
		||||
Gold Leggings=золотые гамаши
 | 
			
		||||
Mithril Boots=мифриловые ботинки
 | 
			
		||||
Mithril Chestplate=мифриловый бронежилет
 | 
			
		||||
Mithril Helmet=мифриловый шлем
 | 
			
		||||
Mithril Leggings=мифриловые гамаши
 | 
			
		||||
Steel Boots=стальные ботинки
 | 
			
		||||
Steel Chestplate=стальной бронежилет
 | 
			
		||||
Steel Helmet=стальной шлем
 | 
			
		||||
Steel Leggings=стальные гамаши
 | 
			
		||||
Wood Boots=деревянные ботинки
 | 
			
		||||
Wood Chestplate=деревянный бронежилет
 | 
			
		||||
Wood Helmet=деревянный шлем
 | 
			
		||||
Wood Leggings=деревянные гамаши
 | 
			
		||||
 | 
			
		||||
### init.lua ###
 | 
			
		||||
 | 
			
		||||
3d_armor: Failed to initialize player=3d_armor: не смог подготовить игрока
 | 
			
		||||
Fire=огонь
 | 
			
		||||
Heal=исцеление
 | 
			
		||||
Level=уровень
 | 
			
		||||
Radiation=излучение
 | 
			
		||||
Your @1 got destroyed!=твой(и) @1 был(и) разрушен(ы)!
 | 
			
		||||
Level=уровень
 | 
			
		||||
Heal=исцеление
 | 
			
		||||
Fire=огонь
 | 
			
		||||
Your @1 is almost broken!=
 | 
			
		||||
[3d_armor] Fire Nodes disabled=[3d_armor] блоки огня отключены
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
##### not used anymore #####
 | 
			
		||||
 | 
			
		||||
3d_armor_ip: Mod loaded but unused.=3d_armor_ip: мод загружен но не используется.
 | 
			
		||||
Back=назад
 | 
			
		||||
Armor=бронь
 | 
			
		||||
3d_armor_sfinv: Mod loaded but unused.=3d_armor_sfinv: мод загружен но не используется.
 | 
			
		||||
Armor stand top=стойка для брони (верх)
 | 
			
		||||
Armor stand=стойка для брони
 | 
			
		||||
Armor Stand=стойка для брони
 | 
			
		||||
Locked Armor stand=защищенная стойка для брони
 | 
			
		||||
Armor Stand (owned by @1)=стойка для брони (принадлежит @1)
 | 
			
		||||
3d_armor_ui: Mod loaded but unused.=3d_armor_ui: мод загружен но не используется.
 | 
			
		||||
3d Armor=3D бронь
 | 
			
		||||
Armor not initialized!=бронь не подготовлена!
 | 
			
		||||
Admin Shield=щит админа
 | 
			
		||||
Wooden Shield=деревянный щит
 | 
			
		||||
Enhanced Wood Shield=улучшенный деревянный щит
 | 
			
		||||
Cactus Shield=кактусный щит
 | 
			
		||||
Enhanced Cactus Shield=улучшенный кактусный щит
 | 
			
		||||
Steel Shield=стальной щит
 | 
			
		||||
Bronze Shield=бронзовый щит
 | 
			
		||||
Diamond Shield=алмазный щит
 | 
			
		||||
Gold Shield=золотой щит
 | 
			
		||||
Mithril Shield=мифриловый щит
 | 
			
		||||
Crystal Shield=кристалловый щит
 | 
			
		||||
Your @1 got destroyed!=твой(и) @1 был(и) разрушен(ы)!
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								3d_armor/locale/3d_armor.sv.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,7 @@
 | 
			
		||||
# textdomain: 3d_armor
 | 
			
		||||
Radiation=Strålning
 | 
			
		||||
Level=Nivå
 | 
			
		||||
Heal=Läkning
 | 
			
		||||
Fire=Eld
 | 
			
		||||
Your @1 is almost broken!=Din @1 är nästan förstörd!
 | 
			
		||||
Your @1 got destroyed!=Din @1 blev förstörd!
 | 
			
		||||
@@ -1,58 +1,7 @@
 | 
			
		||||
# textdomain: 3d_armor
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### api.lua ###
 | 
			
		||||
 | 
			
		||||
3d_armor: Detached armor inventory is nil @1=
 | 
			
		||||
3d_armor: Player name is nil @1=
 | 
			
		||||
3d_armor: Player reference is nil @1=
 | 
			
		||||
 | 
			
		||||
### armor.lua ###
 | 
			
		||||
 | 
			
		||||
Admin Boots=
 | 
			
		||||
Admin Chestplate=
 | 
			
		||||
Admin Helmet=
 | 
			
		||||
Admin Leggings=
 | 
			
		||||
Bronze Boots=
 | 
			
		||||
Bronze Chestplate=
 | 
			
		||||
Bronze Helmet=
 | 
			
		||||
Bronze Leggings=
 | 
			
		||||
Cactus Boots=
 | 
			
		||||
Cactus Chestplate=
 | 
			
		||||
Cactus Helmet=
 | 
			
		||||
Cactus Leggings=
 | 
			
		||||
Crystal Boots=
 | 
			
		||||
Crystal Chestplate=
 | 
			
		||||
Crystal Helmet=
 | 
			
		||||
Crystal Leggings=
 | 
			
		||||
Diamond Boots=
 | 
			
		||||
Diamond Chestplate=
 | 
			
		||||
Diamond Helmet=
 | 
			
		||||
Diamond Leggings=
 | 
			
		||||
Gold Boots=
 | 
			
		||||
Gold Chestplate=
 | 
			
		||||
Gold Helmet=
 | 
			
		||||
Gold Leggings=
 | 
			
		||||
Mithril Boots=
 | 
			
		||||
Mithril Chestplate=
 | 
			
		||||
Mithril Helmet=
 | 
			
		||||
Mithril Leggings=
 | 
			
		||||
Steel Boots=
 | 
			
		||||
Steel Chestplate=
 | 
			
		||||
Steel Helmet=
 | 
			
		||||
Steel Leggings=
 | 
			
		||||
Wood Boots=
 | 
			
		||||
Wood Chestplate=
 | 
			
		||||
Wood Helmet=
 | 
			
		||||
Wood Leggings=
 | 
			
		||||
 | 
			
		||||
### init.lua ###
 | 
			
		||||
 | 
			
		||||
3d_armor: Failed to initialize player=
 | 
			
		||||
Fire=
 | 
			
		||||
Heal=
 | 
			
		||||
Level=
 | 
			
		||||
Radiation=
 | 
			
		||||
Your @1 got destroyed!=
 | 
			
		||||
Level=
 | 
			
		||||
Heal=
 | 
			
		||||
Fire=
 | 
			
		||||
Your @1 is almost broken!=
 | 
			
		||||
[3d_armor] Fire Nodes disabled=
 | 
			
		||||
Your @1 got destroyed!=
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,5 @@
 | 
			
		||||
name = 3d_armor
 | 
			
		||||
depends = default
 | 
			
		||||
optional_depends = player_monoids, armor_monoid, pova, fire, ethereal, bakedclay, moreores
 | 
			
		||||
depends = default, player_api
 | 
			
		||||
optional_depends = player_monoids, armor_monoid, pova, moreores
 | 
			
		||||
description = Adds craftable armor that is visible to other players.
 | 
			
		||||
min_minetest_version = 5.0
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 273 B  | 
@@ -1,44 +0,0 @@
 | 
			
		||||
3d_armor/textures/3d_armor_helmet_wood.png:head
 | 
			
		||||
3d_armor/textures/3d_armor_chestplate_wood.png:torso
 | 
			
		||||
3d_armor/textures/3d_armor_leggings_wood.png:legs
 | 
			
		||||
3d_armor/textures/3d_armor_boots_wood.png:feet
 | 
			
		||||
 | 
			
		||||
3d_armor/textures/3d_armor_helmet_cactus.png:head
 | 
			
		||||
3d_armor/textures/3d_armor_chestplate_cactus.png:torso
 | 
			
		||||
3d_armor/textures/3d_armor_leggings_cactus.png:legs
 | 
			
		||||
3d_armor/textures/3d_armor_boots_cactus.png:feet
 | 
			
		||||
 | 
			
		||||
3d_armor/textures/3d_armor_helmet_steel.png:head
 | 
			
		||||
3d_armor/textures/3d_armor_chestplate_steel.png:torso
 | 
			
		||||
3d_armor/textures/3d_armor_leggings_steel.png:legs
 | 
			
		||||
3d_armor/textures/3d_armor_boots_steel.png:feet
 | 
			
		||||
 | 
			
		||||
3d_armor/textures/3d_armor_helmet_bronze.png:head
 | 
			
		||||
3d_armor/textures/3d_armor_chestplate_bronze.png:torso
 | 
			
		||||
3d_armor/textures/3d_armor_leggings_bronze.png:legs
 | 
			
		||||
3d_armor/textures/3d_armor_boots_bronze.png:feet
 | 
			
		||||
 | 
			
		||||
3d_armor/textures/3d_armor_helmet_gold.png:head
 | 
			
		||||
3d_armor/textures/3d_armor_chestplate_gold.png:torso
 | 
			
		||||
3d_armor/textures/3d_armor_leggings_gold.png:legs
 | 
			
		||||
3d_armor/textures/3d_armor_boots_gold.png:feet
 | 
			
		||||
 | 
			
		||||
3d_armor/textures/3d_armor_helmet_diamond.png:head
 | 
			
		||||
3d_armor/textures/3d_armor_chestplate_diamond.png:torso
 | 
			
		||||
3d_armor/textures/3d_armor_leggings_diamond.png:legs
 | 
			
		||||
3d_armor/textures/3d_armor_boots_diamond.png:feet
 | 
			
		||||
 | 
			
		||||
3d_armor/textures/3d_armor_helmet_mithril.png:head
 | 
			
		||||
3d_armor/textures/3d_armor_chestplate_mithril.png:torso
 | 
			
		||||
3d_armor/textures/3d_armor_leggings_mithril.png:legs
 | 
			
		||||
3d_armor/textures/3d_armor_boots_mithril.png:feet
 | 
			
		||||
 | 
			
		||||
3d_armor/textures/3d_armor_helmet_crystal.png:head
 | 
			
		||||
3d_armor/textures/3d_armor_chestplate_crystal.png:torso
 | 
			
		||||
3d_armor/textures/3d_armor_leggings_crystal.png:legs
 | 
			
		||||
3d_armor/textures/3d_armor_boots_crystal.png:feet
 | 
			
		||||
 | 
			
		||||
3d_armor/textures/3d_armor_helmet_admin.png:head
 | 
			
		||||
3d_armor/textures/3d_armor_chestplate_admin.png:torso
 | 
			
		||||
3d_armor/textures/3d_armor_leggings_admin.png:legs
 | 
			
		||||
3d_armor/textures/3d_armor_boots_admin.png:feet
 | 
			
		||||
@@ -1,18 +0,0 @@
 | 
			
		||||
[mod] 3d Armor integration to inventory plus [3d_armor_ip]
 | 
			
		||||
==========================================================
 | 
			
		||||
 | 
			
		||||
Copyright (C) 2012-2019 stujones11, Stuart Jones <stujones111@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software; you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU Lesser General Public License as published by
 | 
			
		||||
the Free Software Foundation; either version 2.1 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU Lesser General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU Lesser General Public License along
 | 
			
		||||
with this program; if not, write to the Free Software Foundation, Inc.,
 | 
			
		||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 | 
			
		||||
@@ -1,2 +0,0 @@
 | 
			
		||||
3d_armor
 | 
			
		||||
inventory_plus?
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
Adds 3d_armor page to the inventory plus.
 | 
			
		||||
@@ -3,7 +3,7 @@ local S = minetest.get_translator(minetest.get_current_modname())
 | 
			
		||||
local F = minetest.formspec_escape
 | 
			
		||||
 | 
			
		||||
if not minetest.global_exists("inventory_plus") then
 | 
			
		||||
	minetest.log("warning", S("3d_armor_ip: Mod loaded but unused."))
 | 
			
		||||
	minetest.log("warning", "3d_armor_ip: Mod loaded but unused.")
 | 
			
		||||
	return
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								3d_armor_ip/locale/3d_armor_ip.de.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,3 @@
 | 
			
		||||
# textdomain: 3d_armor_ip
 | 
			
		||||
Back=Zurück
 | 
			
		||||
Armor=Rüstung
 | 
			
		||||
							
								
								
									
										3
									
								
								3d_armor_ip/locale/3d_armor_ip.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,3 @@
 | 
			
		||||
# textdomain: 3d_armor_ip
 | 
			
		||||
Back=Dorso
 | 
			
		||||
Armor=Armaĵo
 | 
			
		||||
@@ -1,8 +1,3 @@
 | 
			
		||||
# textdomain: 3d_armor_ip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### init.lua ###
 | 
			
		||||
 | 
			
		||||
3d_armor_ip: Mod loaded but unused.=3d_armor_ip : Mod chargé mais inutilisé.
 | 
			
		||||
Armor=Armure
 | 
			
		||||
Back=Retour
 | 
			
		||||
Armor=Armure
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								3d_armor_ip/locale/3d_armor_ip.pt_BR.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,3 @@
 | 
			
		||||
# textdomain: 3d_armor_ip
 | 
			
		||||
Back=Voltar
 | 
			
		||||
Armor=Armadura
 | 
			
		||||
							
								
								
									
										3
									
								
								3d_armor_ip/locale/3d_armor_ip.sv.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,3 @@
 | 
			
		||||
# textdomain: 3d_armor_ip
 | 
			
		||||
Back=Tillbaka
 | 
			
		||||
Armor=Rustning
 | 
			
		||||
@@ -1,8 +1,3 @@
 | 
			
		||||
# textdomain: 3d_armor_ip
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### init.lua ###
 | 
			
		||||
 | 
			
		||||
3d_armor_ip: Mod loaded but unused.=
 | 
			
		||||
Armor=
 | 
			
		||||
Back=
 | 
			
		||||
Armor=
 | 
			
		||||
 
 | 
			
		||||
@@ -1,18 +0,0 @@
 | 
			
		||||
[mod] 3d Armor sfinv integration [3d_armor_sfinv]
 | 
			
		||||
=================================================
 | 
			
		||||
 | 
			
		||||
Copyright (C) 2012-2019 stujones11, Stuart Jones <stujones111@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software; you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU Lesser General Public License as published by
 | 
			
		||||
the Free Software Foundation; either version 2.1 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU Lesser General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU Lesser General Public License along
 | 
			
		||||
with this program; if not, write to the Free Software Foundation, Inc.,
 | 
			
		||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 | 
			
		||||
@@ -1,2 +0,0 @@
 | 
			
		||||
3d_armor
 | 
			
		||||
sfinv?
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
Adds 3d_armor page to the sfinv inventory.
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
local S = minetest.get_translator(minetest.get_current_modname())
 | 
			
		||||
 | 
			
		||||
if not minetest.global_exists("sfinv") then
 | 
			
		||||
	minetest.log("warning", S("3d_armor_sfinv: Mod loaded but unused."))
 | 
			
		||||
	minetest.log("warning", "3d_armor_sfinv: Mod loaded but unused.")
 | 
			
		||||
	return
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								3d_armor_sfinv/locale/3d_armor_sfinv.de.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,2 @@
 | 
			
		||||
# textdomain: 3d_armor_sfinv
 | 
			
		||||
Armor=Rüstung
 | 
			
		||||
							
								
								
									
										2
									
								
								3d_armor_sfinv/locale/3d_armor_sfinv.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,2 @@
 | 
			
		||||
# textdomain: 3d_armor_sfinv
 | 
			
		||||
Armor=Armaĵoj
 | 
			
		||||
@@ -1,7 +1,2 @@
 | 
			
		||||
# textdomain: 3d_armor_sfinv
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### init.lua ###
 | 
			
		||||
 | 
			
		||||
3d_armor_sfinv: Mod loaded but unused.=3d_armor_sfinv : Mod cargado pero no activado.
 | 
			
		||||
Armor=Armadura
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,2 @@
 | 
			
		||||
# textdomain: 3d_armor_sfinv
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### init.lua ###
 | 
			
		||||
 | 
			
		||||
3d_armor_sfinv: Mod loaded but unused.=3d_armor_sfinv : Mod chargé mais inutilisé.
 | 
			
		||||
Armor=Armure
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								3d_armor_sfinv/locale/3d_armor_sfinv.pt_BR.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,2 @@
 | 
			
		||||
# textdomain: 3d_armor_sfinv
 | 
			
		||||
Armor=Armadura
 | 
			
		||||
							
								
								
									
										2
									
								
								3d_armor_sfinv/locale/3d_armor_sfinv.sv.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,2 @@
 | 
			
		||||
# textdomain: 3d_armor_sfinv
 | 
			
		||||
Armor=Rustning
 | 
			
		||||
@@ -1,7 +1,2 @@
 | 
			
		||||
# textdomain: 3d_armor_sfinv
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### init.lua ###
 | 
			
		||||
 | 
			
		||||
3d_armor_sfinv: Mod loaded but unused.=
 | 
			
		||||
Armor=
 | 
			
		||||
 
 | 
			
		||||
@@ -1,43 +0,0 @@
 | 
			
		||||
[mod] 3d Armor Stand [3d_armor_stand]
 | 
			
		||||
=====================================
 | 
			
		||||
 | 
			
		||||
License Source Code
 | 
			
		||||
-------------------
 | 
			
		||||
 | 
			
		||||
Copyright (C) 2012-2019 stujones11, Stuart Jones <stujones111@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software; you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU Lesser General Public License as published by
 | 
			
		||||
the Free Software Foundation; either version 2.1 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU Lesser General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU Lesser General Public License along
 | 
			
		||||
with this program; if not, write to the Free Software Foundation, Inc.,
 | 
			
		||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 | 
			
		||||
 | 
			
		||||
Lecense Models
 | 
			
		||||
--------------
 | 
			
		||||
 | 
			
		||||
Copyright (C) 2016-2019 Stuart Jones - CC BY-SA 3.0
 | 
			
		||||
 | 
			
		||||
UV model mapping by tobyplowy(aka toby109tt)
 | 
			
		||||
 | 
			
		||||
License Textures
 | 
			
		||||
----------------
 | 
			
		||||
 | 
			
		||||
3d_armor_stand.png
 | 
			
		||||
3d_armor_stand_locked.png
 | 
			
		||||
 | 
			
		||||
Copyright (C) 2017-2019 tobyplowy - CC BY-SA 3.0
 | 
			
		||||
 | 
			
		||||
3d_armor_stand_feet.png
 | 
			
		||||
3d_armor_stand_head.png
 | 
			
		||||
3d_armor_stand_legs.png
 | 
			
		||||
3d_armor_stand_torso.png
 | 
			
		||||
 | 
			
		||||
Copyright (C) 2016-2019 Stuart Jones - CC BY-SA 3.0
 | 
			
		||||
@@ -1,2 +0,0 @@
 | 
			
		||||
3d_armor
 | 
			
		||||
 | 
			
		||||
@@ -62,7 +62,7 @@ local function update_entity(pos)
 | 
			
		||||
		object = minetest.add_entity(pos, "3d_armor_stand:armor_entity")
 | 
			
		||||
	end
 | 
			
		||||
	if object then
 | 
			
		||||
		local texture = "3d_armor_trans.png"
 | 
			
		||||
		local texture = "blank.png"
 | 
			
		||||
		local textures = {}
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		local inv = meta:get_inventory()
 | 
			
		||||
@@ -134,7 +134,7 @@ local function remove_hidden_node(pos)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
minetest.register_node("3d_armor_stand:top", {
 | 
			
		||||
	description = S("Armor stand top"),
 | 
			
		||||
	description = S("Armor Stand Top"),
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	drawtype = "plantlike",
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
@@ -144,12 +144,13 @@ minetest.register_node("3d_armor_stand:top", {
 | 
			
		||||
	buildable_to = false,
 | 
			
		||||
	drop = "",
 | 
			
		||||
	groups = {not_in_creative_inventory = 1},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	on_blast = function() end,
 | 
			
		||||
	tiles = {"3d_armor_trans.png"},
 | 
			
		||||
	tiles = {"blank.png"},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("3d_armor_stand:armor_stand", {
 | 
			
		||||
	description = S("Armor stand"),
 | 
			
		||||
	description = S("Armor Stand"),
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "3d_armor_stand.obj",
 | 
			
		||||
	tiles = {"3d_armor_stand.png"},
 | 
			
		||||
@@ -165,6 +166,7 @@ minetest.register_node("3d_armor_stand:armor_stand", {
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	groups = {choppy=2, oddly_breakable_by_hand=2},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	on_construct = function(pos)
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
@@ -218,7 +220,7 @@ minetest.register_node("3d_armor_stand:armor_stand", {
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("3d_armor_stand:locked_armor_stand", {
 | 
			
		||||
	description = S("Locked Armor stand"),
 | 
			
		||||
	description = S("Locked Armor Stand"),
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "3d_armor_stand.obj",
 | 
			
		||||
	tiles = {"3d_armor_stand_locked.png"},
 | 
			
		||||
@@ -234,6 +236,7 @@ minetest.register_node("3d_armor_stand:locked_armor_stand", {
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	groups = {choppy=2, oddly_breakable_by_hand=2},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	on_construct = function(pos)
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
@@ -299,27 +302,107 @@ minetest.register_node("3d_armor_stand:locked_armor_stand", {
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("3d_armor_stand:shared_armor_stand", {
 | 
			
		||||
	description = S("Shared Armor Stand"),
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "3d_armor_stand.obj",
 | 
			
		||||
	tiles = {"3d_armor_stand_shared.png"},
 | 
			
		||||
	use_texture_alpha = "clip",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "facedir",
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {
 | 
			
		||||
			{-0.25, -0.4375, -0.25, 0.25, 1.4, 0.25},
 | 
			
		||||
			{-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	groups = {choppy=2, oddly_breakable_by_hand=2},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	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", S("Shared 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, placer)
 | 
			
		||||
		minetest.add_entity(pos, "3d_armor_stand:armor_entity")
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		meta:set_string("infotext", S("Shared Armor Stand"))
 | 
			
		||||
		add_hidden_node(pos, placer)
 | 
			
		||||
	end,
 | 
			
		||||
	allow_metadata_inventory_put = function(pos, listname, index, stack, player)
 | 
			
		||||
		if not minetest.is_player(player) or minetest.is_protected(pos, player:get_player_name()) 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)
 | 
			
		||||
		if not minetest.is_player(player) or minetest.is_protected(pos, player:get_player_name()) 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)
 | 
			
		||||
		remove_hidden_node(pos)
 | 
			
		||||
	end,
 | 
			
		||||
	on_blast = function(pos)
 | 
			
		||||
		-- Not affected by TNT
 | 
			
		||||
	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,0,0,0,0,0},
 | 
			
		||||
	textures = {"3d_armor_trans.png"},
 | 
			
		||||
	pos = nil,
 | 
			
		||||
	timer = 0,
 | 
			
		||||
	initial_properties = {
 | 
			
		||||
		physical = true,
 | 
			
		||||
		visual = "mesh",
 | 
			
		||||
		mesh = "3d_armor_entity.obj",
 | 
			
		||||
		visual_size = {x=1, y=1},
 | 
			
		||||
		collisionbox = {0,0,0,0,0,0},
 | 
			
		||||
		textures = {"blank.png"},
 | 
			
		||||
	},
 | 
			
		||||
	_pos = nil,
 | 
			
		||||
	on_activate = function(self)
 | 
			
		||||
		local pos = self.object:get_pos()
 | 
			
		||||
		if pos then
 | 
			
		||||
			self.pos = vector.round(pos)
 | 
			
		||||
			self._pos = vector.round(pos)
 | 
			
		||||
			update_entity(pos)
 | 
			
		||||
		end
 | 
			
		||||
	end,
 | 
			
		||||
	on_blast = function(self, damage)
 | 
			
		||||
		local drops = {}
 | 
			
		||||
		local node = minetest.get_node(self.pos)
 | 
			
		||||
		local node = minetest.get_node(self._pos)
 | 
			
		||||
		if node.name == "3d_armor_stand:armor_stand" then
 | 
			
		||||
			drop_armor(self.pos)
 | 
			
		||||
			drop_armor(self._pos)
 | 
			
		||||
			self.object:remove()
 | 
			
		||||
		end
 | 
			
		||||
		return false, false, drops
 | 
			
		||||
@@ -327,7 +410,7 @@ minetest.register_entity("3d_armor_stand:armor_entity", {
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_abm({
 | 
			
		||||
	nodenames = {"3d_armor_stand:locked_armor_stand", "3d_armor_stand:armor_stand"},
 | 
			
		||||
	nodenames = {"3d_armor_stand:locked_armor_stand", "3d_armor_stand:shared_armor_stand", "3d_armor_stand:armor_stand"},
 | 
			
		||||
	interval = 15,
 | 
			
		||||
	chance = 1,
 | 
			
		||||
	action = function(pos, node, active_object_count, active_object_count_wider)
 | 
			
		||||
@@ -354,4 +437,11 @@ minetest.register_craft({
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "3d_armor_stand:shared_armor_stand",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"3d_armor_stand:armor_stand", "default:copper_ingot"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.log("action", "[3d_armor_stand] loaded.")
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								3d_armor_stand/locale/3d_armor_stand.de.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: 3d_armor_stand
 | 
			
		||||
Armor Stand Top=Rüstungsständeroberseite
 | 
			
		||||
Armor Stand=Rüstungsständer
 | 
			
		||||
Locked Armor Stand=Abgeschlossener Rüstungsständer
 | 
			
		||||
Armor Stand (owned by @1)=Rüstungsständer (Eigentum von @1)
 | 
			
		||||
							
								
								
									
										5
									
								
								3d_armor_stand/locale/3d_armor_stand.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: 3d_armor_stand
 | 
			
		||||
Armor Stand Top=Armaĵtenila Supro
 | 
			
		||||
Armor Stand=Armaĵtenilo
 | 
			
		||||
Locked Armor Stand=Ŝlosita Armaĵtenilo
 | 
			
		||||
Armor Stand (owned by @1)=Ŝlosita Armaĵtenilo (posedata de @1)
 | 
			
		||||
							
								
								
									
										6
									
								
								3d_armor_stand/locale/3d_armor_stand.es.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,6 @@
 | 
			
		||||
# textdomain: 3d_armor_stand
 | 
			
		||||
Armor Stand Top=
 | 
			
		||||
Armor Stand=Soporte de armadura
 | 
			
		||||
Locked Armor Stand=Soporte de armadura privado
 | 
			
		||||
Shared Armor Stand=Soporte de armadura compartido
 | 
			
		||||
Armor Stand (owned by @1)=Soporte de armadura (de @1)
 | 
			
		||||
@@ -1,10 +1,5 @@
 | 
			
		||||
# textdomain: 3d_armor_stand
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### init.lua ###
 | 
			
		||||
 | 
			
		||||
Armor Stand Top=Haut de support d'armure
 | 
			
		||||
Armor Stand=Support d'armure
 | 
			
		||||
Locked Armor Stand=Support d'armure verrouillé
 | 
			
		||||
Armor Stand (owned by @1)=Support d'armure (propriété de @1)
 | 
			
		||||
Armor stand=Support d'armure
 | 
			
		||||
Armor stand top=Haut de support d'armure
 | 
			
		||||
Locked Armor stand=Support d'armure verrouillé
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								3d_armor_stand/locale/3d_armor_stand.pt_BR.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: 3d_armor_stand
 | 
			
		||||
Armor Stand Top=Topo do suporte de armadura
 | 
			
		||||
Armor Stand=Suporte de Armadura
 | 
			
		||||
Locked Armor Stand=Suporte de armadura trancado
 | 
			
		||||
Armor Stand (owned by @1)=Suporte de Armadura (dono: @1)
 | 
			
		||||
							
								
								
									
										5
									
								
								3d_armor_stand/locale/3d_armor_stand.ru.tr
									
									
									
									
									
										Executable file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: 3d_armor_stand
 | 
			
		||||
Armor Stand Top=верх стойки для брони
 | 
			
		||||
Armor Stand=стойка для брони
 | 
			
		||||
Locked Armor Stand=стойка для брони с замком
 | 
			
		||||
Armor Stand (owned by @1)=стойка для бони (владелец @1)
 | 
			
		||||
							
								
								
									
										5
									
								
								3d_armor_stand/locale/3d_armor_stand.sv.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: 3d_armor_stand
 | 
			
		||||
Armor Stand Top=Rustningställstopp
 | 
			
		||||
Armor Stand=Rustningställ
 | 
			
		||||
Locked Armor Stand=Låst rustningställ
 | 
			
		||||
Armor Stand (owned by @1)=Rustningställ (ägd av @1)
 | 
			
		||||
@@ -1,10 +1,6 @@
 | 
			
		||||
# textdomain: 3d_armor_stand
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### init.lua ###
 | 
			
		||||
 | 
			
		||||
Armor Stand Top=
 | 
			
		||||
Armor Stand=
 | 
			
		||||
Locked Armor Stand=
 | 
			
		||||
Shared Armor Stand=
 | 
			
		||||
Armor Stand (owned by @1)=
 | 
			
		||||
Armor stand=
 | 
			
		||||
Armor stand top=
 | 
			
		||||
Locked Armor stand=
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								3d_armor_stand/models/3d_armor_stand_shared.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1011 B  | 
@@ -1,18 +0,0 @@
 | 
			
		||||
[mod] 3d Armor integration to unified inventory [3d_armor_ui]
 | 
			
		||||
=============================================================
 | 
			
		||||
 | 
			
		||||
Copyright (C) 2012-2019 stujones11, Stuart Jones <stujones111@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software; you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU Lesser General Public License as published by
 | 
			
		||||
the Free Software Foundation; either version 2.1 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU Lesser General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU Lesser General Public License along
 | 
			
		||||
with this program; if not, write to the Free Software Foundation, Inc.,
 | 
			
		||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 | 
			
		||||
@@ -1,2 +0,0 @@
 | 
			
		||||
3d_armor
 | 
			
		||||
unified_inventory?
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
Adds 3d_armor page to the unified inventory.
 | 
			
		||||
@@ -23,7 +23,7 @@ end)
 | 
			
		||||
unified_inventory.register_button("armor", {
 | 
			
		||||
	type = "image",
 | 
			
		||||
	image = "inventory_plus_armor.png",
 | 
			
		||||
	tooltip = S("3d Armor")
 | 
			
		||||
	tooltip = S("3D Armor")
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unified_inventory.register_page("armor", {
 | 
			
		||||
@@ -33,9 +33,6 @@ unified_inventory.register_page("armor", {
 | 
			
		||||
		local gridy = 0.6
 | 
			
		||||
 | 
			
		||||
		local name = player:get_player_name()
 | 
			
		||||
		if armor.def[name].init_time == 0 then
 | 
			
		||||
			return {formspec="label[0,0;"..F(S("Armor not initialized!")).."]"}
 | 
			
		||||
		end
 | 
			
		||||
		local formspec = perplayer_formspec.standard_inv_bg..
 | 
			
		||||
			perplayer_formspec.standard_inv..
 | 
			
		||||
			ui.make_inv_img_grid(gridx, gridy, 2, 3)..
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								3d_armor_ui/locale/3d_armor_ui.de.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,8 @@
 | 
			
		||||
# textdomain: 3d_armor_ui
 | 
			
		||||
3D Armor=3D-Rüstung
 | 
			
		||||
Armor not initialized!=Rüstung ist nicht initialisiert!
 | 
			
		||||
Armor=Rüstung
 | 
			
		||||
Level=Stufe
 | 
			
		||||
Heal=Heilung
 | 
			
		||||
Fire=Feuer
 | 
			
		||||
Radiation=Strahlung
 | 
			
		||||
							
								
								
									
										8
									
								
								3d_armor_ui/locale/3d_armor_ui.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,8 @@
 | 
			
		||||
# textdomain: 3d_armor_ui
 | 
			
		||||
3D Armor=3D Armaĵoj
 | 
			
		||||
Armor not initialized!=Armaĵoj ne pretigitaj!
 | 
			
		||||
Armor=Armaĵo
 | 
			
		||||
Level=Nivelo
 | 
			
		||||
Heal=Sanigi
 | 
			
		||||
Fire=Fajro
 | 
			
		||||
Radiation=Radiado
 | 
			
		||||
@@ -1,12 +1,8 @@
 | 
			
		||||
# textdomain: 3d_armor_ui
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### init.lua ###
 | 
			
		||||
 | 
			
		||||
3d Armor=Armure 3d
 | 
			
		||||
Armor=Armure
 | 
			
		||||
3D Armor=Armure 3D
 | 
			
		||||
Armor not initialized!=Armure non initialisée !
 | 
			
		||||
Fire=Feu
 | 
			
		||||
Heal=Soins
 | 
			
		||||
Armor=Armure
 | 
			
		||||
Level=Niveau
 | 
			
		||||
Heal=Soins
 | 
			
		||||
Fire=Feu
 | 
			
		||||
Radiation=Radiation
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								3d_armor_ui/locale/3d_armor_ui.pt_BR.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,8 @@
 | 
			
		||||
# textdomain: 3d_armor_ui
 | 
			
		||||
3D Armor=3D Armor
 | 
			
		||||
Armor not initialized!=Armadura não inicializada!
 | 
			
		||||
Armor=Armadura
 | 
			
		||||
Level=Nível
 | 
			
		||||
Heal=Vida
 | 
			
		||||
Fire=Fogo
 | 
			
		||||
Radiation=Radiação
 | 
			
		||||
							
								
								
									
										8
									
								
								3d_armor_ui/locale/3d_armor_ui.sv.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,8 @@
 | 
			
		||||
# textdomain: 3d_armor_ui
 | 
			
		||||
3D Armor=
 | 
			
		||||
Armor not initialized!=Rustning har inte initialiserats
 | 
			
		||||
Armor=Rustning
 | 
			
		||||
Level=Nivå
 | 
			
		||||
Heal=Läkning
 | 
			
		||||
Fire=Eld
 | 
			
		||||
Radiation=Strålning
 | 
			
		||||
@@ -1,12 +1,8 @@
 | 
			
		||||
# textdomain: 3d_armor_ui
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### init.lua ###
 | 
			
		||||
 | 
			
		||||
3d Armor=
 | 
			
		||||
Armor=
 | 
			
		||||
3D Armor=
 | 
			
		||||
Armor not initialized!=
 | 
			
		||||
Fire=
 | 
			
		||||
Heal=
 | 
			
		||||
Armor=
 | 
			
		||||
Level=
 | 
			
		||||
Heal=
 | 
			
		||||
Fire=
 | 
			
		||||
Radiation=
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
3D Armor - Visible Player Armor
 | 
			
		||||
===============================
 | 
			
		||||
 | 
			
		||||
License Source Code: Copyright (C) 2013-2018 Stuart Jones - LGPL v2.1
 | 
			
		||||
License Source Code: Copyright (C) 2013-2023 Stuart Jones - LGPL v2.1
 | 
			
		||||
 | 
			
		||||
Armor Textures: Copyright (C) 2017-2018 davidthecreator - CC-BY-SA 3.0
 | 
			
		||||
Armor Textures: Copyright (C) 2017-2023 davidthecreator - CC-BY-SA 3.0
 | 
			
		||||
 | 
			
		||||
Special credit to Jordach and MirceaKitsune for providing the default 3d character model.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										27
									
								
								README.md
									
									
									
									
									
								
							
							
						
						@@ -1,5 +1,5 @@
 | 
			
		||||
Modpack - 3d Armor [0.4.13]
 | 
			
		||||
===========================
 | 
			
		||||
Modpack - 3d Armor
 | 
			
		||||
==================
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -22,7 +22,7 @@ Modpack - 3d Armor [0.4.13]
 | 
			
		||||
[mod] Visible Player Armor [3d_armor]
 | 
			
		||||
-------------------------------------
 | 
			
		||||
 | 
			
		||||
Minetest Version: 5.0.0
 | 
			
		||||
Minetest Version: 5.0.0 and newer
 | 
			
		||||
 | 
			
		||||
Game: minetest_game and many derivatives
 | 
			
		||||
 | 
			
		||||
@@ -49,7 +49,26 @@ 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.
 | 
			
		||||
 | 
			
		||||
For mod installation instructions, please visit: http://wiki.minetest.com/wiki/Installing_Mods
 | 
			
		||||
For **mod installation** instructions, please visit: http://wiki.minetest.com/wiki/Installing_Mods
 | 
			
		||||
 | 
			
		||||
The specific "armors as modpack" refactorization allows anyone to enable/disable any armors they want as mods rather than obscure settings of the past. (See [#78](https://github.com/minetest-mods/3d_armor/commit/9444afd7222a71fc17d40c9793506812d715dcc3) for further explanation.)
 | 
			
		||||
 | 
			
		||||
Currently, the modpack includes:
 | 
			
		||||
 | 
			
		||||
- armor_admin
 | 
			
		||||
- armor_bronze
 | 
			
		||||
- armor_cactus
 | 
			
		||||
- armor_crystal
 | 
			
		||||
- armor_diamond
 | 
			
		||||
- armor_gold
 | 
			
		||||
- armor_mithril
 | 
			
		||||
- armor_nether
 | 
			
		||||
- armor_steel
 | 
			
		||||
- armor_wood
 | 
			
		||||
 | 
			
		||||
as separate armor mods intentionally. All these mods depend on 3d_armor.
 | 
			
		||||
 | 
			
		||||
[API Reference](https://minetest-mods.github.io/3d_armor/reference/)
 | 
			
		||||
 | 
			
		||||
[mod] Visible Wielded Items [wieldview]
 | 
			
		||||
---------------------------------------
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										94
									
								
								armor_admin/init.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,94 @@
 | 
			
		||||
 | 
			
		||||
--- Registered armors.
 | 
			
		||||
--
 | 
			
		||||
--  @topic armor
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- support for i18n
 | 
			
		||||
local S = minetest.get_translator(minetest.get_current_modname())
 | 
			
		||||
 | 
			
		||||
--- Admin Helmet
 | 
			
		||||
--
 | 
			
		||||
--  @helmet 3d_armor:helmet_admin
 | 
			
		||||
--  @img 3d_armor_inv_helmet_admin.png
 | 
			
		||||
--  @grp armor_head 1
 | 
			
		||||
--  @grp armor_heal 100
 | 
			
		||||
--  @grp armor_use 0
 | 
			
		||||
--  @grp armor_water 1
 | 
			
		||||
--  @grp not_in_creative_inventory 1
 | 
			
		||||
--  @armorgrp fleshy 100
 | 
			
		||||
armor:register_armor(":3d_armor:helmet_admin", {
 | 
			
		||||
	description = S("Admin Helmet"),
 | 
			
		||||
	inventory_image = "3d_armor_inv_helmet_admin.png",
 | 
			
		||||
	armor_groups = {fleshy=100},
 | 
			
		||||
	groups = {armor_head=1, armor_heal=100, armor_use=0, armor_water=1,
 | 
			
		||||
			not_in_creative_inventory=1},
 | 
			
		||||
	on_drop = function(itemstack, dropper, pos)
 | 
			
		||||
		return
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
--- Admin Chestplate
 | 
			
		||||
--
 | 
			
		||||
--  @chestplate 3d_armor:chestplate_admin
 | 
			
		||||
--  @img 3d_armor_inv_chestplate_admin.png
 | 
			
		||||
--  @grp armor_torso 1
 | 
			
		||||
--  @grp armor_heal 100
 | 
			
		||||
--  @grp armor_use 0
 | 
			
		||||
--  @grp not_in_creative_inventory 1
 | 
			
		||||
--  @armorgrp fleshy 100
 | 
			
		||||
armor:register_armor(":3d_armor:chestplate_admin", {
 | 
			
		||||
	description = S("Admin Chestplate"),
 | 
			
		||||
	inventory_image = "3d_armor_inv_chestplate_admin.png",
 | 
			
		||||
	armor_groups = {fleshy=100},
 | 
			
		||||
	groups = {armor_torso=1, armor_heal=100, armor_use=0, armor_water=1,
 | 
			
		||||
			not_in_creative_inventory=1},
 | 
			
		||||
	on_drop = function(itemstack, dropper, pos)
 | 
			
		||||
		return
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
--- Admin Leggings
 | 
			
		||||
--
 | 
			
		||||
--  @leggings 3d_armor:leggings_admin
 | 
			
		||||
--  @img 3d_armor_inv_leggings_admin.png
 | 
			
		||||
--  @grp armor_legs 1
 | 
			
		||||
--  @grp armor_heal 100
 | 
			
		||||
--  @grp armor_use 0
 | 
			
		||||
--  @grp not_in_creative_inventory 1
 | 
			
		||||
--  @armorgrp fleshy 100
 | 
			
		||||
armor:register_armor(":3d_armor:leggings_admin", {
 | 
			
		||||
	description = S("Admin Leggings"),
 | 
			
		||||
	inventory_image = "3d_armor_inv_leggings_admin.png",
 | 
			
		||||
	armor_groups = {fleshy=100},
 | 
			
		||||
	groups = {armor_legs=1, armor_heal=100, armor_use=0, armor_water=1,
 | 
			
		||||
			not_in_creative_inventory=1},
 | 
			
		||||
	on_drop = function(itemstack, dropper, pos)
 | 
			
		||||
		return
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
--- Admin Boots
 | 
			
		||||
--
 | 
			
		||||
--  @boots 3d_armor:boots_admin
 | 
			
		||||
--  @img 3d_armor_inv_boots_admin.png
 | 
			
		||||
--  @grp armor_feet 1
 | 
			
		||||
--  @grp armor_heal 100
 | 
			
		||||
--  @grp armor_use 0
 | 
			
		||||
--  @grp not_in_creative_inventory 1
 | 
			
		||||
--  @armorgrp fleshy 100
 | 
			
		||||
armor:register_armor(":3d_armor:boots_admin", {
 | 
			
		||||
	description = S("Admin Boots"),
 | 
			
		||||
	inventory_image = "3d_armor_inv_boots_admin.png",
 | 
			
		||||
	armor_groups = {fleshy=100},
 | 
			
		||||
	groups = {armor_feet=1, armor_heal=100, armor_use=0, physics_speed=1,
 | 
			
		||||
			armor_water=1, not_in_creative_inventory=1},
 | 
			
		||||
	on_drop = function(itemstack, dropper, pos)
 | 
			
		||||
		return
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
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")
 | 
			
		||||
							
								
								
									
										5
									
								
								armor_admin/locale/armor_admin.de.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: armor_admin
 | 
			
		||||
Admin Helmet=Adminhelm
 | 
			
		||||
Admin Chestplate=Adminbrustplatte
 | 
			
		||||
Admin Leggings=Adminhose
 | 
			
		||||
Admin Boots=Adminstiefel
 | 
			
		||||
							
								
								
									
										5
									
								
								armor_admin/locale/armor_admin.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: armor_admin
 | 
			
		||||
Admin Helmet=Administra Kasko
 | 
			
		||||
Admin Chestplate=Administra Kiraso
 | 
			
		||||
Admin Leggings=Administra Pantalono
 | 
			
		||||
Admin Boots=Administraj Botoj
 | 
			
		||||
							
								
								
									
										5
									
								
								armor_admin/locale/armor_admin.es.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: armor_admin
 | 
			
		||||
Admin Helmet=Casco de admin
 | 
			
		||||
Admin Chestplate=Peto de admin
 | 
			
		||||
Admin Leggings=Grebas de admin
 | 
			
		||||
Admin Boots=Botas de admin
 | 
			
		||||
							
								
								
									
										5
									
								
								armor_admin/locale/armor_admin.fr.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: armor_admin
 | 
			
		||||
Admin Helmet=Casque d'admin
 | 
			
		||||
Admin Chestplate=Cuirasse d'admin
 | 
			
		||||
Admin Leggings=Jambières d'admin
 | 
			
		||||
Admin Boots=Bottes d'admin
 | 
			
		||||
							
								
								
									
										5
									
								
								armor_admin/locale/armor_admin.it.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: armor_admin
 | 
			
		||||
Admin Helmet=Elmo dell'amministratrice/tore
 | 
			
		||||
Admin Chestplate=Corazza dell'amministratrice/tore
 | 
			
		||||
Admin Leggings=Gambali dell'amministratrice/tore
 | 
			
		||||
Admin Boots=Stivali dell'amministratrice/tore
 | 
			
		||||
							
								
								
									
										5
									
								
								armor_admin/locale/armor_admin.ms.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: armor_admin
 | 
			
		||||
Admin Helmet=Helmet Pentadbir
 | 
			
		||||
Admin Chestplate=Perisai Dada Pentadbir
 | 
			
		||||
Admin Leggings=Perisai Kaki Pentadbir
 | 
			
		||||
Admin Boots=But Pentadbir
 | 
			
		||||
							
								
								
									
										5
									
								
								armor_admin/locale/armor_admin.pt.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: armor_admin
 | 
			
		||||
Admin Helmet=
 | 
			
		||||
Admin Chestplate=
 | 
			
		||||
Admin Leggings=
 | 
			
		||||
Admin Boots=
 | 
			
		||||
							
								
								
									
										5
									
								
								armor_admin/locale/armor_admin.pt_BR.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: armor_admin
 | 
			
		||||
Admin Helmet=Capacete de Administrador
 | 
			
		||||
Admin Chestplate=Peitoral de Administrador
 | 
			
		||||
Admin Leggings=Calças de Administrador
 | 
			
		||||
Admin Boots=Botas de Administrador
 | 
			
		||||
							
								
								
									
										5
									
								
								armor_admin/locale/armor_admin.ru.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: armor_admin
 | 
			
		||||
Admin Helmet=шлем админа
 | 
			
		||||
Admin Chestplate=нагрудник админа
 | 
			
		||||
Admin Leggings=штаны админа
 | 
			
		||||
Admin Boots=ботинки админа
 | 
			
		||||
							
								
								
									
										5
									
								
								armor_admin/locale/armor_admin.sv.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: armor_admin
 | 
			
		||||
Admin Helmet=Adminhjälm
 | 
			
		||||
Admin Chestplate=Adminbröstplåt
 | 
			
		||||
Admin Leggings=Adminbyxor
 | 
			
		||||
Admin Boots=Adminstövlar
 | 
			
		||||
							
								
								
									
										5
									
								
								armor_admin/locale/template.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# textdomain: armor_admin
 | 
			
		||||
Admin Helmet=
 | 
			
		||||
Admin Chestplate=
 | 
			
		||||
Admin Leggings=
 | 
			
		||||
Admin Boots=
 | 
			
		||||
							
								
								
									
										3
									
								
								armor_admin/mod.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,3 @@
 | 
			
		||||
name = armor_admin
 | 
			
		||||
depends = 3d_armor
 | 
			
		||||
description = Adds admin armor.
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB  | 
| 
		 Before Width: | Height: | Size: 548 B After Width: | Height: | Size: 548 B  | 
| 
		 Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB  | 
| 
		 Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB  | 
| 
		 Before Width: | Height: | Size: 869 B After Width: | Height: | Size: 869 B  | 
| 
		 Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB  | 
| 
		 Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB  | 
| 
		 Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB  |