Module:GameTag

来自Minecraft基岩版开发Wiki
[创建 | 历史 | 清除缓存]文档页面
此模块没有文档页面。如果你知道如何使用模块,请创建它。
local p = {}
local IDInfo = require('Module:IDInfo')
local getSprite = require('Module:Sprite').link

function p.getTagContent(tag, link, mode)
	local data = mw.text.jsonDecode(mw.title.makeTitle('Data', 'GameTag/TagContent'):getContent() or '{}')
	if not (tag and data[tag]) then
		return nil
	end
	local result = {}
	if mode == 'list:id' or mode == 'table' or mode == nil then
		for _, object in pairs(data[tag]) do
			for ID in pairs(object) do
				table.insert(result, ID)
			end
		end
		table.sort(result)
		if mode == 'list:id' then
			return '* <code>' .. table.concat(result, '</code>\n* <code>') .. '</code>'
		else
			return result
		end
	elseif mode == 'list:sprite' then
		for objectType, object in pairs(data[tag]) do
			for _, name in pairs(object) do
				if type(name) == 'table' then
					for _, _name in ipairs(name) do
						table.insert(
							result,
							(getSprite { [1] = _name, data = objectType .. 'Sprite', text = _name, link = link })
						)
					end
				elseif type(name) == 'string' then
					table.insert(
						result,
						(getSprite { [1] = name, data = objectType .. 'Sprite', text = name, link = link })
					)
				end
			end
		end
		table.sort(
			result,
			function(a, b)
				return (string.match(a, '<span class="sprite%-text">(.-)</span>') or '') <
						(string.match(b, '<span class="sprite%-text">(.-)</span>') or '')
			end
		)
		return '* ' .. table.concat(result, '\n* ')
	end
end

function p.main(f)
	local args = require('Module:Arguments').getArgs(f)
	local mode = mw.ustring.lower(args.mode)
	if mode == 'tags' then
		local objectType = IDInfo.getObjectType(args.type)
		if objectType == 'Block' or objectType == 'Item' then
			local identifier, data = IDInfo.getIdentifier(args.id, true)
			return mw.title.makeTitle('Data', objectType .. '/' .. identifier).exists
				and ('* <code>' .. table.concat(IDInfo.getTags(objectType, identifier, args.datavalue or data), '</code>\n* <code>') .. '</code>')
				or mw.ustring.format('[[Category:缺失标识符信息的页面]]Error: Page [[Data:%s/%s]] does not exist.', objectType, identifier)
		end
	elseif mode == 'list:id' or mode == 'list:sprite' then
		return p.getTagContent(args.tag, args.link, mode)
	end
	return nil
end

return p