Module:Metallurgic Infuser: Difference between revisions

(Created page with "local p = {} function p.table( f ) local args = f if f == mw.getCurrentFrame() then args = require( 'Module:ProcessArgs' ).merge() else f = mw.getCurrentFrame() end l...")
 
No edit summary
(8 intermediate revisions by 2 users not shown)
Line 41: Line 41:
if args.showname == '1' or multirow and args.showname ~= '0' then
if args.showname == '1' or multirow and args.showname ~= '0' then
name = 'Name !! '
name = 'Name !! '
f:callParserFunction( '#dplvar:set', 'craftingname', '1' )
f:callParserFunction( '#dplvar:set', 'infusingname', '1' )
end
end
if args.showdescription == '1' then
if args.showdescription == '1' then
description = ' !! class="unsortable" | Description'
description = ' !! class="unsortable" | Description'
f:callParserFunction( '#dplvar:set', 'craftingdescription', '1' )
f:callParserFunction( '#dplvar:set', 'infusingdescription', '1' )
end
end
local class = args.class or ''
local class = args.class or ''
Line 55: Line 55:
header = table.concat( {
header = table.concat( {
' {| class="wikitable ' .. class .. '"',
' {| class="wikitable ' .. class .. '"',
'! ' .. name .. 'Ingredients !! ' .. recipeClass .. ' [[Crafting]] recipe' .. description,
'! ' .. name .. 'Ingredients !! ' .. recipeClass .. ' [[Metallurgic Infuser]] recipe' .. description,
'|-'
'|-'
}, '\n' )
}, '\n' )
Line 62: Line 62:
-- Name cell
-- Name cell
local nameCell
local nameCell
if f:callParserFunction( '#dplvar', 'craftingname' ) == '1' then
if f:callParserFunction( '#dplvar', 'infusingname' ) == '1' then
if args.name or '' ~= '' then
if args.name or '' ~= '' then
nameCell = args.name
nameCell = args.name
Line 89: Line 89:
end
end
end
end
 
if nameCell and args.upcoming then
-- Infusion materials
nameCell = nameCell .. '<br>([[' .. args.upcoming .. ']])'
local infusionMaterial = {
end
['Diamond'] = 'Diamond Dust; Compressed Diamond',
['Obsidian'] = 'Refined Obsidian Dust; Compressed Obsidian',
['Tin'] = 'Tin Dust',
['Bio Fuel'] = 'Bio Fuel',
['Redstone'] = 'Redstone; Block of Redstone; Compressed Redstone',
['Carbon'] = 'Coal; Charcoal; Block of Coal; Charcoal Block; Compressed Carbon',
['Mushroom'] = 'Any Mushroom'
}
 
-- Create ingredient list
-- Create ingredient list
local ingredients = {}
local ingredients = {}
Line 101: Line 108:
for k, v in pairs( args ) do
for k, v in pairs( args ) do
v = mw.text.trim( v )
v = mw.text.trim( v )
if v ~= '' and tostring( k ):find( '^%u?%d%d?$' ) then
if v ~= '' then
if v:find( ';' ) then
if tostring( k ):find( '^Input$' ) then
table.insert( animatedKeys, v )
if v:find( ';' ) then
else
table.insert( animatedKeys, v )
local parts = grid.getParts( v, args.Mod )
else
parts.mod = parts.mod or ''
local parts = grid.getParts( v, args.Mod )
local fullName = parts.mod .. ':' .. parts.name
parts.mod = parts.mod or ''
if not ingredients[fullName] then
local fullName = parts.mod .. ':' .. parts.name
table.insert( ingredientKeys, fullName )
if not ingredients[fullName] then
ingredients[fullName] = { mod = parts.mod, name = parts.name }
table.insert( ingredientKeys, fullName )
ingredients[fullName] = { mod = parts.mod, name = parts.name }
end
end
elseif tostring( k ):find( '^Infuse$' ) then
args.InfuseBar = args.Infuse
local infuse = infusionMaterial[v]
if infuse then
table.insert( animatedKeys, infuse )
args.Infuse = infuse
end
end
end
end
Line 158: Line 174:
ingredientsCell = table.concat( ingredientsCell, '<br>\n' )
ingredientsCell = table.concat( ingredientsCell, '<br>\n' )
end
end
 
-- Automatic shapeless positioning
local newArgs = {}
if args[1] then
newArgs.shapeless = 1
if args[7] then
newArgs.A1 = args[1]
newArgs.B1 = args[2]
newArgs.C1 = args[3]
newArgs.A2 = args[4]
newArgs.B2 = args[5]
newArgs.C2 = args[6]
if args[8] then
-- ◼◼◼      ◼◼◼
-- ◼◼◼  OR  ◼◼◼
-- ◼◼◼      ◼◼◻
newArgs.A3 = args[7]
newArgs.B3 = args[8]
newArgs.C3 = args[9]
if args[9] then
local identical = true
for i = 1, 8 do
if args[i] ~= args[i + 1] then
identical = false
end
end
if identical then
newArgs.shapeless = nil
end
end
else
-- ◼◼◼
-- ◼◼◼
-- ◻◼◻
newArgs.B3 = args[7]
end
elseif args[2] then
newArgs.A2 = args[1]
newArgs.B2 = args[2]
if args[5] then
-- ◻◻◻      ◻◻◻
-- ◼◼◼  OR  ◼◼◼
-- ◼◼◼      ◼◼◻
newArgs.C2 = args[3]
newArgs.A3 = args[4]
newArgs.B3 = args[5]
newArgs.C3 = args[6]
elseif args[4] then
-- ◻◻◻
-- ◼◼◻
-- ◼◼◻
newArgs.A3 = args[3]
newArgs.B3 = args[4]
else
-- ◻◻◻      ◻◻◻
-- ◼◼◻  OR  ◼◼◻
-- ◻◼◻      ◻◻◻
newArgs.B3 = args[3]
end
else
-- ◻◻◻
-- ◻◼◻
-- ◻◻◻
newArgs.B2 = args[1]
newArgs.shapeless = nil
end
else
newArgs.A1 = args.A1
newArgs.B1 = args.B1
newArgs.C1 = args.C1
newArgs.A2 = args.A2
newArgs.B2 = args.B2
newArgs.C2 = args.C2
newArgs.A3 = args.A3
newArgs.B3 = args.B3
newArgs.C3 = args.C3
newArgs.fixed = args.fixed
newArgs.notfixed = args.notfixed
end
-- Any other args we want to pass along
newArgs.Mod = args.Mod
newArgs.Output = args.Output
newArgs.Otitle = args.Otitle
newArgs.Olink = args.Olink
-- Recipe cell
-- Recipe cell
local recipeCell = grid.craftingTable( newArgs )
local recipeCell = grid.metallurgicInfuser( args )
local row = { ingredientsCell, recipeCell }
local row = { ingredientsCell, recipeCell }
Line 251: Line 182:
table.insert( row, 1, nameCell )
table.insert( row, 1, nameCell )
end
end
if f:callParserFunction( '#dplvar', 'craftingdescription' ) == '1' then
if f:callParserFunction( '#dplvar', 'infusingdescription' ) == '1' then
table.insert( row, args.description or '' )
table.insert( row, args.description or '' )
end
end
Line 265: Line 196:
if foot ~= '' then
if foot ~= '' then
footer = '|}'
footer = '|}'
f:callParserFunction( '#dplvar:set', 'craftingname', '0', 'craftingdescription', '0' )
f:callParserFunction( '#dplvar:set', 'infusingname', '0', 'infusingdescription', '0' )
end
end
-- Create ingredient categories for DPL
-- Create ingredient categories for DPL
local title = mw.title.getCurrentTitle()
local title = mw.title.getCurrentTitle()
local categories = ''
local category = ''
if args.nocat ~= '1' and title.namespace == 0 and not title.isSubpage then
if args.nocat ~= '1' and title.namespace == 0 and not title.isSubpage and args.InfuseBar ~= null then
categories = {}
category = '[[Category:Recipe using ' .. args.InfuseBar .. ' Infusion]]'
if args.upcoming then
table.insert( categories, '[[Category:Upcoming]]' )
end
if args.type then
table.insert( categories, '[[Category:' .. args.type .. ' recipe]]' )
end
if args.ignoreusage ~= '1' then
for k, v in ipairs( ingredientKeys ) do
v = v:sub( 2 )
if not v:find( ':' ) then
if v == 'Any Dye' or v == 'Any Colored Dye' then
local dyes = {
'Orange Dye', 'Magenta Dye', 'Light Blue Dye', 'Dandelion Yellow', 'Lime Dye',
'Pink Dye', 'Gray Dye', 'Light Gray Dye', 'Cyan Dye', 'Purple Dye',
'Lapis Lazuli', 'Cocoa Beans', 'Cactus Green', 'Rose Red', 'Ink Sac'
}
if v == 'Any Dye' then
table.insert( dyes, 1, 'Bone Meal' )
end
for _, dye in ipairs( dyes ) do
table.insert( categories, '[[Category:Recipe using ' .. dye .. ']]' )
end
else
if v == 'Sticky Piston' then v = 'Piston'
elseif v== 'Any Mushroom' or v == 'Red Mushroom' or v == 'Brown Mushroom' then v = 'Mushroom'
elseif v == 'Red Sand' then v = 'Sand'
elseif v == 'Charcoal' then v = 'Coal'
elseif v:find( ' Wood$' ) then v = 'Wood'
elseif v:find( ' Wood Planks$' ) then v = 'Wood Planks'
elseif v:find( ' Stained Glass$' ) then v = 'Stained Glass'
elseif v:find( ' Stained Glass Pane$' ) then v = 'Stained Glass Pane'
elseif v:find( ' Wool$' ) then v = 'Wool'
elseif v:find( 'Red Sandstone$' ) then v = 'Red Sandstone'
elseif v:find( ' Sandstone$' ) then v = 'Sandstone'
elseif v:find( ' Stairs$' ) then v = 'Stairs'
elseif v:find( ' Slab$' ) then v = 'Slab'
elseif v:find( ' Pressure Plate$' ) then v = 'Pressure Plate'
elseif v:find( ' Firework Star$' ) then v = 'Firework Star'
elseif v:find( ' Stone Bricks$' ) then v = 'Stone Bricks'
elseif v:find( ' Quartz Block$' ) then v = 'Block of Quartz'
elseif v:find( ' Andesite$' ) then v = 'Andesite'
elseif v:find( ' Diorite$' ) then v = 'Diorite'
elseif v:find( ' Granite$' ) then v = 'Granite'
end
table.insert( categories, '[[Category:Recipe using ' .. v .. ']]' )
end
end
end
end
categories = table.concat( categories, '' )
end
if args.debug == '1' then
return '<pre>' .. header .. '\n' .. row .. '\n|-\n' .. footer .. categories .. '</pre>'
else
return header .. '\n' .. row .. '\n|-\n' .. footer .. categories
end
end
return header .. '\n' .. row .. '\n|-\n' .. footer .. category
end
end
return p
return p

Revision as of 19:30, 16 May 2018

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

local p = {}
function p.table( f )
	local args = f
	if f == mw.getCurrentFrame() then
		args = require( 'Module:ProcessArgs' ).merge()
	else
		f = mw.getCurrentFrame()
	end
	local grid = require( 'Module:Grid' )
	
	-- Start table when appropriate
	local multirow = f:callParserFunction( '#dplvar', 'multirow' )
	if multirow ~= '1' then
		multirow = nil
	end
	local head = args.head or ''
	if multirow then
		head = ''
	elseif head ~= '' then
		multirow = 1
		f:callParserFunction( '#dplvar:set', 'multirow', '1' )
	else
		head = 1
	end
	
	-- End table when appropriate
	local foot = args.foot or ''
	if multirow then
		if foot ~= '' then
			multirow = nil
			f:callParserFunction( '#dplvar:set', 'multirow', '0' )
		end
	else
		foot = 1
	end
	
	local header = ''
	if head ~= '' then
		local name = ''
		local description = ''
		if args.showname == '1' or multirow and args.showname ~= '0' then
			name = 'Name !! '
			f:callParserFunction( '#dplvar:set', 'infusingname', '1' )
		end
		if args.showdescription == '1' then
			description = ' !! class="unsortable" | Description'
			f:callParserFunction( '#dplvar:set', 'infusingdescription', '1' )
		end
		local class = args.class or ''
		local recipeClass = ''
		if multirow then
			class = 'sortable collapsible ' .. class
			recipeClass = 'class="unsortable collapse-button" |'
		end
		header = table.concat( {
			' {| class="wikitable ' .. class .. '"',
			'! ' .. name .. 'Ingredients !! ' .. recipeClass .. ' [[Metallurgic Infuser]] recipe' .. description,
			'|-'
		}, '\n' )
	end
	
	-- Name cell
	local nameCell
	if f:callParserFunction( '#dplvar', 'infusingname' ) == '1' then
		if args.name or '' ~= '' then
			nameCell = args.name
		else
			local names = {}
			local links = {}
			for v in mw.text.gsplit( args.Output or '', '%s*;%s*' ) do
				parts = grid.getParts( v, args.Mod )
				parts.mod = parts.mod or ''
				if not names[parts.mod .. ':' .. parts.name] then
					local link = ''
					if parts.mod ~= '' then
						link = 'Mods/' .. parts.mod .. '/' .. parts.name .. '|'
					end
					
					if parts.name:find( '^Any ' ) then
						table.insert( links, 'Any [[' .. link .. parts.name:sub( 4 ) .. ']]' )
					else
						table.insert( links, '[[' .. link .. parts.name .. ']]' )
					end
					names[parts.mod .. ':' .. parts.name] = 1
				end
			end
			
			nameCell = table.concat( links, '&nbsp;or<br>' )
		end
	end

	-- Infusion materials
	local infusionMaterial = {
		['Diamond'] = 'Diamond Dust; Compressed Diamond',
		['Obsidian'] = 'Refined Obsidian Dust; Compressed Obsidian',
		['Tin'] = 'Tin Dust',
		['Bio Fuel'] = 'Bio Fuel',
		['Redstone'] = 'Redstone; Block of Redstone; Compressed Redstone',
		['Carbon'] = 'Coal; Charcoal; Block of Coal; Charcoal Block; Compressed Carbon',
		['Mushroom'] = 'Any Mushroom'
	}

	-- Create ingredient list
	local ingredients = {}
	local ingredientKeys = {}
	local animatedIngredients = {}
	local animatedKeys = {}
	for k, v in pairs( args ) do
		v = mw.text.trim( v )
		if v ~= '' then
			if tostring( k ):find( '^Input$' ) then
				if v:find( ';' ) then
					table.insert( animatedKeys, v )
				else
					local parts = grid.getParts( v, args.Mod )
					parts.mod = parts.mod or ''
					local fullName = parts.mod .. ':' .. parts.name
					if not ingredients[fullName] then
						table.insert( ingredientKeys, fullName )
						ingredients[fullName] = { mod = parts.mod, name = parts.name }
					end
				end
			elseif tostring( k ):find( '^Infuse$' ) then
				args.InfuseBar = args.Infuse
				local infuse = infusionMaterial[v]
				if infuse then
					table.insert( animatedKeys, infuse )
					args.Infuse = infuse
				end
			end
		end
	end
	for k, v in ipairs( animatedKeys ) do
		local frames = mw.text.split( v, '%s*;%s*' )
		local length = #frames
		for k2, v2 in ipairs( frames ) do
			local parts = grid.getParts( v2, args.Mod )
			parts.mod = parts.mod or ''
			local fullName = parts.mod .. ':' .. parts.name
			if v2 ~= '' and not ingredients[fullName] and not animatedIngredients[fullName] then
				table.insert( ingredientKeys, fullName )
				animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }
			end
		end
	end
	
	-- Ingredients cell
	local ingredientsCell
	if args.ingredients or '' ~= '' then
		ingredientsCell = args.ingredients
	else
		ingredientsCell = {}
		for k, v in ipairs( ingredientKeys ) do
			local link = ''
			local separator = '&nbsp;+'
			if k == #ingredientKeys then
				separator = ''
			elseif animatedIngredients[v] and not animatedIngredients[v].final then
				separator = '&nbsp;or'
			end
			local mod = ( ingredients[v] or animatedIngredients[v] ).mod
			local name = ( ingredients[v] or animatedIngredients[v] ).name
			if mod ~= '' then
				link = 'Mods/'.. mod .. '/' .. name .. '|'
			end
			
			if name:find( '^Any ' ) then
				table.insert( ingredientsCell, 'Any [[' .. link .. name:sub( 5 ) .. ']]' .. separator )
			else
				table.insert( ingredientsCell, '[[' .. link .. name .. ']]' .. separator )
			end
		end
		
		ingredientsCell = table.concat( ingredientsCell, '<br>\n' )
	end

	-- Recipe cell
	local recipeCell = grid.metallurgicInfuser( args )
	
	local row = { ingredientsCell, recipeCell }
	if nameCell then
		table.insert( row, 1, nameCell )
	end
	if f:callParserFunction( '#dplvar', 'infusingdescription' ) == '1' then
		table.insert( row, args.description or '' )
	end
	row = table.concat( row, '\n|\n' )
	
	if nameCell then
		row = '!\n' .. row
	else
		row = '|\n' .. row
	end
	
	local footer = ''
	if foot ~= '' then
		footer = '|}'
		f:callParserFunction( '#dplvar:set', 'infusingname', '0', 'infusingdescription', '0' )
	end
	
	-- Create ingredient categories for DPL
	local title = mw.title.getCurrentTitle()
	local category = ''
	if args.nocat ~= '1' and title.namespace == 0 and not title.isSubpage and args.InfuseBar ~= null then
		category = '[[Category:Recipe using ' .. args.InfuseBar .. ' Infusion]]'
	end

	return header .. '\n' .. row .. '\n|-\n' .. footer .. category
end
return p
Cookies help us deliver our services. By using our services, you agree to our use of cookies.

Need wiki hosting?

Do you need a wiki for your Minecraft mod/gaming wiki? We'll host it for free! Contact us.

Other wikis

Indie-game wikis
Powered by Indie Wikis