<本站文本内容除另有声明外,转载时均必须注明出处。(详情…本站文本内容除另有声明外,转载时均必须注明出处。(详情…中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!Minecraft中文Wiki微博正在更新!或许有兴趣去看看Minecraft中文Wiki微博正在更新!或许有兴趣去看看想与其他用户进行编辑上的沟通?社区专页正是为此创建的。想与其他用户进行编辑上的沟通?社区专页正是为此创建的。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。需要管理员的协助?在管理员告示板留言也许可以帮到您。需要管理员的协助?在管理员告示板留言也许可以帮到您。>

模块:Crafting

来自Minecraft Wiki
跳转至: 导航搜索
[创建 | 历史 | 清除缓存]文档页面
此模块没有文档页面。如果你知道如何使用模块,请创建它。
local p = {}

local i18n = {
	colored = 'Colored',
	coloredDyes = {
		'Orange Dye', 'Magenta Dye', 'Light Blue Dye', 'Yellow Dye', 'Lime Dye',
		'Pink Dye', 'Gray Dye', 'Light Gray Dye', 'Cyan Dye', 'Purple Dye',
		'Blue Dye', 'Brown Dye', 'Green Dye',
		'Red Dye', 'Black Dye',
	},
	categoryIngredientUsage = 'Category:Recipe using $1',
	categoryRecipeType = 'Category:$1 recipe',
	categoryUpcoming = 'Category:即将到来',
	itemBlockOfQuartz = 'Block of Quartz',
	itemBoneMeal = 'Bone Meal',
	itemBrownMushroom = 'Brown Mushroom',
	itemCharcoal = 'Charcoal',
	itemCoal = 'Coal',
	itemColoredDye = 'Colored Dye',
	itemDye = 'Dye',
	itemMushroom = 'Mushroom',
	itemQuartzBlock = 'Quartz Block',
	itemRedMushroom = 'Red Mushroom',
	itemStone = 'Stone',
	itemWhiteDye = 'White Dye',
	moduleArgs = [[Module:ProcessArgs]],
	moduleRecipe = [[Module:Recipe table]],
	moduleSlot = [[Module:Inventory slot]],
	stoneVariants = { 'Stone', 'Andesite', 'Granite', 'Diorite' },
	type = '合成',
	variantPages = {
		'Andesite', 'Banner', 'Bed', 'Diorite', 'Firework Star', 'Granite', 'Log',
		'Pressure Plate', 'Sand', 'Sandstone', 'Shield', 'Slab', 'Stained Glass Pane', 
		'Stained Glass', 'Stairs', 'Stone Bricks', 'Planks', 'Wood', 'Wool',
	},
}
p.i18n = i18n

local slot = require( i18n.moduleSlot )
local recipeTable = require( i18n.moduleRecipe ).table
local cArgVals = { 'A1', 'B1', 'C1', 'A2', 'B2', 'C2', 'A3', 'B3', 'C3' }
p.cArgVals = cArgVals

function p.table( f )
	local args = f
	if f == mw.getCurrentFrame() then
		args = require( i18n.moduleArgs ).merge( true )
	else
		f = mw.getCurrentFrame()
	end
	
	-- Automatic shapeless positioning
	if args[1] then
		args.shapeless = 1
		if args[7] then
			args.A1 = args[1]
			args.B1 = args[2]
			args.C1 = args[3]
			args.A2 = args[4]
			args.B2 = args[5]
			args.C2 = args[6]
			if args[8] then
				-- ◼◼◼      ◼◼◼
				-- ◼◼◼  OR  ◼◼◼
				-- ◼◼◼      ◼◼◻
				args.A3 = args[7]
				args.B3 = args[8]
				args.C3 = args[9]
				if args[9] then
					local identical = true
					for i = 1, 8 do
						if args[i] ~= args[i + 1] then
							identical = false
							break
						end
					end
					if identical then
						args.shapeless = nil
					end
				end
			else
				-- ◼◼◼
				-- ◼◼◼
				-- ◻◼◻
				args.B3 = args[7]
			end
		elseif args[2] then
			args.A2 = args[1]
			args.B2 = args[2]
			if args[5] then
				-- ◻◻◻      ◻◻◻
				-- ◼◼◼  OR  ◼◼◼
				-- ◼◼◼      ◼◼◻
				args.C2 = args[3]
				args.A3 = args[4]
				args.B3 = args[5]
				args.C3 = args[6]
			elseif args[4] then
				-- ◻◻◻
				-- ◼◼◻
				-- ◼◼◻
				args.A3 = args[3]
				args.B3 = args[4]
			else
				-- ◻◻◻      ◻◻◻
				-- ◼◼◻  OR  ◼◼◻
				-- ◻◼◻      ◻◻◻
				args.B3 = args[3]
			end
		else
			-- ◻◻◻
			-- ◻◼◻
			-- ◻◻◻
			args.B2 = args[1]
			args.shapeless = nil
		end
		
		for i = 1, 9 do
			args[i] = nil
		end
	end
	
	-- Create recipe table, and list of ingredients
	local out, ingredientSets = recipeTable( args, {
		uiFunc = 'craftingTable',
		type = i18n.type,
		ingredientArgs = cArgVals,
		outputArgs = { 'Output' },
	} )
	
	local title = mw.title.getCurrentTitle()
	if args.nocat == '1' or title.namespace ~= 0 or title.isSubpage then
		return out
	end
	
	local categories = {}
	local cI = 1
	if args.upcoming then
		categories[cI] = '[[' .. i18n.categoryUpcoming .. ']]'
		cI = cI + 1
	end
	
	if args.type then
		categories[cI] = '[[' .. i18n.categoryRecipeType:gsub( '%$1', args.type ) .. ']]'
		cI = cI + 1
	end
	
	if args.ignoreusage ~= '1' then
		-- Create ingredient categories for DPL
		local usedNames = {}
		for _, ingredientSet in pairs( ingredientSets ) do
			for _, ingredient in pairs( ingredientSet ) do
				local name = ingredient.name
				if not ingredient.mod and not usedNames[name] and name ~= title.text then
					-- List each dye individually as they have their own pages
					if
						name == 'Any ' .. i18n.itemDye or
						name == 'Matching ' .. i18n.itemDye or
						name == 'Any ' .. i18n.itemColoredDye or
						name == 'Matching ' .. i18n.itemColoredDye
					then
						if not name:find( i18n.colored ) then
							categories[cI] = '[[' .. i18n.categoryIngredientUsage:gsub( '%$1', i18n.itemWhiteDye ) .. ']]'
							cI = cI + 1
							usedNames[i18n.itemWhiteDye] = true
						end
						
						for _, dye in pairs( i18n.coloredDyes ) do
							categories[cI] = '[[' .. i18n.categoryIngredientUsage:gsub( '%$1', dye ) .. ']]'
							cI = cI + 1
							usedNames[dye] = true
						end
					-- List stone variants individually as they have their own pages
					elseif
						name == slot.i18n.prefixes.any .. ' ' .. i18n.itemStone or
						name == slot.i18n.prefixes.matching .. ' ' .. i18n.itemStone
					then
						for _, stone in pairs( i18n.stoneVariants ) do
							categories[cI] = '[[' .. i18n.categoryIngredientUsage:gsub( '%$1', stone ) .. ']]'
							cI = cI + 1
							usedNames[stone] = true
						end
					else
						-- Merge item variants which use a single page
						if
							name == slot.i18n.prefixes.any .. ' ' .. i18n.itemMushroom or
							name == slot.i18n.prefixes.matching .. ' ' .. i18n.itemMushroom or
							name == i18n.itemRedMushroom or
							name == i18n.itemBrownMushroom
						then name = i18n.itemMushroom
						elseif name == i18n.itemCharcoal then name = i18n.itemCoal
						elseif name:find( ' ' .. i18n.itemQuartzBlock .. '$' ) then name = i18n.itemBlockOfQuartz
						else
							for _, variant in pairs( i18n.variantPages ) do
								if name:find( ' ' .. variant .. '$' ) then
									name = variant
									break
								end
							end
							
							-- Remove prefixes
							for _, prefix in pairs( slot.i18n.prefixes ) do
								if name:find( '^' .. prefix .. ' ' ) then
									name = name:gsub( '^' .. prefix .. ' ', '' )
									break
								end
							end
						end
						
						if not usedNames[name] then
							categories[cI] = '[[' .. i18n.categoryIngredientUsage:gsub( '%$1', name ) .. ']]'
							cI = cI + 1
							usedNames[name] = true
						end
					end
				end
			end
		end
	end
	
	return out, table.concat( categories, '' )
end

return p