Minecraft Wiki
mNessun oggetto della modifica
mNessun oggetto della modifica
(19 versioni intermedie di 4 utenti non mostrate)
Riga 2: Riga 2:
   
 
local i18n = {
 
local i18n = {
colored = 'Colored',
+
colored = 'Colorato',
 
coloredDyes = {
 
coloredDyes = {
'Orange Dye', 'Magenta Dye', 'Light Blue Dye', 'Dandelion Yellow', 'Lime Dye',
+
'Colorante arancione', 'Colorante magenta', 'Colorante azzurro', 'Colorante giallo', 'Colorante lime',
'Pink Dye', 'Gray Dye', 'Light Gray Dye', 'Cyan Dye', 'Purple Dye',
+
'Colorante rosa', 'Colorante grigio', 'Colorante grigio chiaro', 'Colorante ciano', 'Colorante viola',
  +
'Colorante blu', 'Colorante marrone', 'Colorante verde',
'Lapis Lazuli', 'Cocoa Beans', 'Cactus Green', 'Rose Red', 'Ink Sac',
 
  +
'Colorante rosso', 'Colorante nero',
 
},
 
},
 
categoryIngredientUsage = 'Categoria:Ricetta che usa $1',
 
categoryIngredientUsage = 'Categoria:Ricetta che usa $1',
Riga 12: Riga 13:
 
categoryUpcoming = 'Categoria:In arrivo',
 
categoryUpcoming = 'Categoria:In arrivo',
 
itemBlockOfQuartz = 'Blocco di quarzo',
 
itemBlockOfQuartz = 'Blocco di quarzo',
itemBoneMeal = "Farina d'ossa",
 
 
itemBrownMushroom = 'Fungo marrone',
 
itemBrownMushroom = 'Fungo marrone',
 
itemCharcoal = 'Carbonella',
 
itemCharcoal = 'Carbonella',
 
itemCoal = 'Carbone',
 
itemCoal = 'Carbone',
itemColoredDye = 'Colored Dye',
+
itemColoredDye = 'Colorante',
itemDye = 'Dye',
+
itemDye = 'Colorante',
 
itemMushroom = 'Fungo',
 
itemMushroom = 'Fungo',
itemQuartzBlock = 'Quartz Block',
+
itemQuartzBlock = 'Blocco di quarzo',
 
itemRedMushroom = 'Fungo rosso',
 
itemRedMushroom = 'Fungo rosso',
  +
itemStone = 'Pietra',
  +
itemWhiteDye = 'Colorante bianco',
 
moduleArgs = [[Modulo:ProcessArgs]],
 
moduleArgs = [[Modulo:ProcessArgs]],
 
moduleRecipe = [[Modulo:Recipe table]],
 
moduleRecipe = [[Modulo:Recipe table]],
 
moduleSlot = [[Modulo:Inventory slot]],
 
moduleSlot = [[Modulo:Inventory slot]],
  +
stoneVariants = { 'Pietra', 'Andesite', 'Granito', 'Diorite' },
type = 'fabbricazione',
+
type = 'Fabbricazione',
 
variantPages = {
 
variantPages = {
'Andesite', 'Banner', 'Diorite', 'Firework Star', 'Granite',
+
'Andesite', 'Stendardo', 'Letto', 'Diorite', 'Stella pirotecnica', 'Granito',
'Pressure Plate', 'Sabbia', 'Sandstone', 'Shield', 'Slab', 'Stained Glass Pane',
+
'Pedana a pressione', 'Sabbia', 'Arenaria', 'Scudo', 'Lastra', 'Pannello di vetro',
'Stained Glass', 'Stairs', 'Stone Bricks', 'Assi di legno', 'Legno', 'Wool',
+
'Vetro', 'Scalini', 'Mattoni di pietra', 'Assi di legno', 'Legno', 'Lana',
 
},
 
},
 
}
 
}
Riga 137: Riga 140:
 
end
 
end
 
 
if args.type then
+
if args.type and args.ignoreusage ~= '1' then
 
categories[cI] = '[[' .. i18n.categoryRecipeType:gsub( '%$1', args.type ) .. ']]'
 
categories[cI] = '[[' .. i18n.categoryRecipeType:gsub( '%$1', args.type ) .. ']]'
 
cI = cI + 1
 
cI = cI + 1
Riga 145: Riga 148:
 
-- Create ingredient categories for DPL
 
-- Create ingredient categories for DPL
 
local usedNames = {}
 
local usedNames = {}
  +
  +
local function addName(name)
  +
if not usedNames[name] then -- redundant with most current code, but not with all, and might prevent other issues
 
categories[cI] = '[[' .. i18n.categoryIngredientUsage:gsub( '%$1', name ) .. ']]'
 
cI = cI + 1
 
usedNames[name] = true
  +
end
  +
end
  +
 
for _, ingredientSet in pairs( ingredientSets ) do
 
for _, ingredientSet in pairs( ingredientSets ) do
 
for _, ingredient in pairs( ingredientSet ) do
 
for _, ingredient in pairs( ingredientSet ) do
Riga 152: Riga 164:
 
if
 
if
 
name == slot.i18n.prefixes.any .. ' ' .. i18n.itemDye or
 
name == slot.i18n.prefixes.any .. ' ' .. i18n.itemDye or
name == slot.i18n.prefixes.any .. ' ' .. i18n.itemColoredDye
+
name == slot.i18n.suffixes.matching .. ' ' .. i18n.itemDye or
  +
name == slot.i18n.prefixes.any .. ' ' .. i18n.itemColoredDye or
  +
name == slot.i18n.suffixes.matching .. ' ' .. i18n.itemColoredDye
 
then
 
then
 
if not name:find( i18n.colored ) then
 
if not name:find( i18n.colored ) then
  +
addName( i18n.itemWhiteDye )
categories[cI] = '[[' .. i18n.categoryIngredientUsage:gsub( '%$1', i18n.itemBoneMeal ) .. ']]'
 
cI = cI + 1
 
usedNames[i18n.itemBoneMeal] = true
 
 
end
 
end
 
 
for _, dye in ipairs( i18n.coloredDyes ) do
+
for _, dye in pairs( i18n.coloredDyes ) do
  +
addName( dye )
categories[cI] = '[[' .. i18n.categoryIngredientUsage:gsub( '%$1', dye ) .. ']]'
 
cI = cI + 1
+
end
  +
-- List stone variants individually as they have their own pages
usedNames[dye] = true
 
  +
elseif
  +
name == slot.i18n.prefixes.any .. ' ' .. i18n.itemStone or
  +
name == slot.i18n.suffixes.matching .. ' ' .. i18n.itemStone
  +
then
  +
for _, stone in pairs( i18n.stoneVariants ) do
  +
addName( stone )
 
end
 
end
 
else
 
else
Riga 169: Riga 187:
 
if
 
if
 
name == slot.i18n.prefixes.any .. ' ' .. i18n.itemMushroom or
 
name == slot.i18n.prefixes.any .. ' ' .. i18n.itemMushroom or
  +
name == slot.i18n.suffixes.matching .. ' ' .. i18n.itemMushroom or
 
name == i18n.itemRedMushroom or
 
name == i18n.itemRedMushroom or
 
name == i18n.itemBrownMushroom
 
name == i18n.itemBrownMushroom
Riga 189: Riga 208:
 
end
 
end
 
end
 
end
  +
 
 
-- Remove suffixes
 
-- Remove suffixes
 
for _, suffixSet in pairs( slot.i18n.suffixes ) do
 
for _, suffixSet in pairs( slot.i18n.suffixes ) do
 
local found
 
local found
  +
if type( suffixSet ) ~= 'table' then
  +
suffixSet = { suffixSet }
  +
end
 
for _, suffix in pairs( suffixSet ) do
 
for _, suffix in pairs( suffixSet ) do
 
if name:find( ' ' .. suffix .. '$' ) then
 
if name:find( ' ' .. suffix .. '$' ) then
Riga 206: Riga 228:
 
end
 
end
 
 
if not usedNames[name] then
+
-- handle "A or B" names
  +
local orA, orB = name:match("(.-) or (.+)")
categories[cI] = '[[' .. i18n.categoryIngredientUsage:gsub( '%$1', name ) .. ']]'
 
cI = cI + 1
+
if orA then
usedNames[name] = true
+
addName( orA )
  +
addName( orB )
  +
else
  +
addName( name )
 
end
 
end
 
end
 
end

Versione delle 10:22, 28 ott 2020

La documentazione per questo modulo può essere creata in Modulo:Fabbricazione/doc

local p = {}

local i18n = {
	colored = 'Colorato',
	coloredDyes = {
		'Colorante arancione', 'Colorante magenta', 'Colorante azzurro', 'Colorante giallo', 'Colorante lime',
		'Colorante rosa', 'Colorante grigio', 'Colorante grigio chiaro', 'Colorante ciano', 'Colorante viola',
		'Colorante blu', 'Colorante marrone', 'Colorante verde',
		'Colorante rosso', 'Colorante nero',
	},
	categoryIngredientUsage = 'Categoria:Ricetta che usa $1',
	categoryRecipeType = 'Categoria:Ricetta di $1',
	categoryUpcoming = 'Categoria:In arrivo',
	itemBlockOfQuartz = 'Blocco di quarzo',
	itemBrownMushroom = 'Fungo marrone',
	itemCharcoal = 'Carbonella',
	itemCoal = 'Carbone',
	itemColoredDye = 'Colorante',
	itemDye = 'Colorante',
	itemMushroom = 'Fungo',
	itemQuartzBlock = 'Blocco di quarzo',
	itemRedMushroom = 'Fungo rosso',
	itemStone = 'Pietra',
	itemWhiteDye = 'Colorante bianco',
	moduleArgs = [[Modulo:ProcessArgs]],
	moduleRecipe = [[Modulo:Recipe table]],
	moduleSlot = [[Modulo:Inventory slot]],
	stoneVariants = { 'Pietra', 'Andesite', 'Granito', 'Diorite' },
	type = 'Fabbricazione',
	variantPages = {
		'Andesite', 'Stendardo', 'Letto', 'Diorite', 'Stella pirotecnica', 'Granito', 
		'Pedana a pressione', 'Sabbia', 'Arenaria', 'Scudo', 'Lastra', 'Pannello di vetro', 
		'Vetro', 'Scalini', 'Mattoni di pietra', 'Assi di legno', 'Legno', 'Lana',
	},
}
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 and args.ignoreusage ~= '1' 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 = {}
		
		local function addName(name)
			if not usedNames[name] then -- redundant with most current code, but not with all, and might prevent other issues
				categories[cI] = '[[' .. i18n.categoryIngredientUsage:gsub( '%$1', name ) .. ']]'
				cI = cI + 1
				usedNames[name] = true
			end
		end

		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 == slot.i18n.prefixes.any .. ' ' .. i18n.itemDye or
						name == slot.i18n.suffixes.matching .. ' ' .. i18n.itemDye or
						name == slot.i18n.prefixes.any .. ' ' .. i18n.itemColoredDye or
						name == slot.i18n.suffixes.matching .. ' ' .. i18n.itemColoredDye
					then
						if not name:find( i18n.colored ) then
							addName( i18n.itemWhiteDye )
						end
						
						for _, dye in pairs( i18n.coloredDyes ) do
							addName( dye )
						end
					-- List stone variants individually as they have their own pages
					elseif
						name == slot.i18n.prefixes.any .. ' ' .. i18n.itemStone or
						name == slot.i18n.suffixes.matching .. ' ' .. i18n.itemStone
					then
						for _, stone in pairs( i18n.stoneVariants ) do
							addName( stone )
						end
					else
						-- Merge item variants which use a single page
						if
							name == slot.i18n.prefixes.any .. ' ' .. i18n.itemMushroom or
							name == slot.i18n.suffixes.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
							
							-- Remove suffixes
							for _, suffixSet in pairs( slot.i18n.suffixes ) do
								local found
								if type( suffixSet ) ~= 'table' then
									suffixSet = { suffixSet }
								end
								for _, suffix in pairs( suffixSet ) do
									if name:find( ' ' .. suffix .. '$' ) then
										found = true
										name = name:gsub( ' ' .. suffix .. '$', '' )
										break
									end
								end
								if found then
									break
								end
							end
						end
						
						-- handle "A or B" names
						local orA, orB = name:match("(.-) or (.+)")
						if orA then
							addName( orA )
							addName( orB )
						else
							addName( name )
						end
					end
				end
			end
		end
	end
	
	return out, table.concat( categories, '' )
end

return p