Module:Crafting

From JCraft Wiki
Revision as of 00:55, 26 April 2026 by KasaneTetoLover (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Documentation for this module may be created at Module:Crafting/doc

local p = {}

local i18n = {
	moduleArgs = [[Module:ProcessArgs]],
	moduleRecipe = [[Module:Recipe table]],
	moduleSlot = [[Module:Inventory slot]],
	type = 'Crafting'
}
p.i18n = i18n

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

local function arrangeShapelessRecipe(args)
	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
				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
				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
				args.B3 = args[3]
			end
		else
			args.B2 = args[1]
			args.shapeless = nil
		end
		
		for i = 1, 9 do
			args[i] = nil
		end
	end
end

function p.table( f )
	local args = f
	if f == mw.getCurrentFrame() then
		args = require( i18n.moduleArgs ).merge( true )
	else
		f = mw.getCurrentFrame()
	end
	
	arrangeShapelessRecipe(args)
	
	local container = mw.html.create('div'):addClass('mc-crafting-wrapper')
	local grid = container:tag('div'):addClass('mc-grid')
	
	for _, slotName in ipairs(cArgVals) do
		local cell = grid:tag('div'):addClass('mc-cell')
		if args[slotName] and args[slotName] ~= "" then
			cell:wikitext(slot.slot{args[slotName]})
		end
	end
	
	container:tag('div'):addClass('mc-arrow'):wikitext('→')
	
	local result = container:tag('div'):addClass('mc-result')
	if args['Output'] and args['Output'] ~= "" then
		result:wikitext(slot.slot{args['Output']})
	end
	
	return tostring(container)
end

return p