Advertisement
[view | edit | history | purge]DocumentationJump to code ↴

This module implements {{Sound table}}.

Usage

This module should not be invoked; {{Sound table}} should be called. See template documentation for more information.

[view | edit | history | purge]The above documentation is transcluded from Module:Sound table/doc.
local p = {}
local emptyevent = [=[''None''<ref group="sound" name="emptyevent">Empty events do not have this parameter set.</ref>]=]
local nosubtitle = [=[''None''<ref group="sound" name="nosubtitle">[https://bugs.mojang.com/issues/?jql=project%20%3D%20MC%20AND%20resolution%20%3D%20Unresolved%20AND%20text%20~%20%22sound%20missing%22 Reports on Mojira].</ref>]=]

local function vardefine( f, name, value )
	f:callParserFunction( '#vardefine', name, value )
end

local function var( f, name, defaultvalue )
	local result = f:callParserFunction( '#var', name, defaultvalue )
	if result == '' then
		return nil
	end
	return result
end

local function addCategory( nocat, value, categoryName )
	if not nocat then
		local category = [=[[[Category:Pages missing ]=] .. categoryName .. [=[]]]=]
		
		value = value .. category
	end
	
	return value
end

function p.table( f )
	local args = f
	if f == mw.getCurrentFrame() then
		args = require( 'Module:ProcessArgs' ).norm()
	else
		f = mw.getCurrentFrame()
	end
	local parent = f:getParent() or f
	local result = ''
	
	if not var( parent, 'soundstable' ) then
		vardefine( parent, 'soundstable', 1 )
		if args.nocat then
			vardefine( parent, 'nocat', 1 )
		end
		local bedrockordungeons = false
		local bedrock = false
		local dungeons = false
		if args.bedrock or args.type=='bedrock' then
			vardefine( parent, 'bedrock', 1 )
			bedrockordungeons = true
			bedrock = true
			vardefine( parent, 'bedrockordungeons', 1 )
		end
		if args.dungeons or args.type=='dungeons' then
			vardefine( parent, 'dungeons', 1 )
			bedrockordungeons = true
			dungeons = true
			vardefine( parent, 'bedrockordungeons', 1 )
		end
		result = result .. [=[<table class="wikitable">]=]
		local headerrow = mw.html.create( 'tr' )
		local headings = { 'Sound' }
		
		if not bedrockordungeons then
			table.insert( headings, '[[Subtitles]]' )
		end
		if not dungeons then
			local sourceheading = parent:expandTemplate{ title = 'abbr', args = { 'Source', 'The category this sound falls into; what volume slider controls this sound in the Music and Sounds menu.' } }
			table.insert( headings, sourceheading )
		end
		local descriptionheading = parent:expandTemplate{ title = 'abbr', args = { 'Description', 'When the game calls this sound event.' } }
		table.insert( headings, descriptionheading )
		if not dungeons then
            table.insert( headings, '[[Resource location]]')
        end
		if not bedrockordungeons then
			table.insert( headings, 'Translation key' )
		end
		if not dungeons then
			table.insert( headings, 'Volume' )
			table.insert( headings, 'Pitch' )
		end
		if not bedrockordungeons then
			table.insert( headings, 'Attenuation<br>distance' )
		end
		
		for i, header in ipairs( headings ) do
			headerrow
				:tag( 'th' )
				:wikitext( header ) 
		end
		
		result = result .. tostring( headerrow )
	end
	
	-- Header variables
	local nocat = var( parent, 'nocat' )
	local bedrockordungeons = var( parent, 'bedrockordungeons' )
	local bedrock = var( parent, 'bedrock' )
	local dungeons = var( parent, 'dungeons' )
	
	local cells = {}
	
	local sound = ''
	if args.sound == '-' then
		sound = [=[''None'']=]
	elseif args.sound == nil then
		sound = addCategory( nocat, '?', 'sounds' )
	else
		-- First parameter is empty because we don't want a sound name
		local sounds = { '', args.sound }
		for count = 2, 20 do
			local index = 'sound' .. count
			if args[index] then
				table.insert( sounds, args[index] )
			end
		end
		
		sound = parent:expandTemplate{ title = 'Sound', args = sounds }
	end
	table.insert( cells, sound )
	
	if not bedrockordungeons then
		local subtitle = args.subtitle
		if args.subtitle == '-' then
			subtitle = parent:preprocess( nosubtitle )
		elseif args.sound == '-' then
			subtitle = parent:preprocess( emptyevent )
		elseif args.translationkey == '-' then
			local content = parent:expandTemplate{ title = 'bug', args = { args.subtitle } }
			subtitle = [=[''None'']=] .. parent:extensionTag( 'ref', content, { group = 'sound', name = 'bug' .. args.subtitle } )
		elseif args.subtitle ~= nil then
			subtitle = args.subtitle
		else
			subtitle = addCategory( nocat, '?', 'subtitles' )
		end
		table.insert( cells, subtitle )
	end
	
	if not dungeons then
		local source = addCategory( nocat, '?', 'sound source' )
		if args.source == 'Master Volume' or args.source == 'master' then
			source = 'Master Volume'
		elseif args.source == 'Music' or args.source == 'music' then
			source = 'Music'
		elseif args.source == 'Jukebox/Note Blocks' or args.source == 'record' then
			source = 'Jukebox/Note Blocks'
		elseif args.source == 'Weather' or args.source == 'weather' then
			source = 'Weather'
		elseif args.source == 'Hostile Creatures' or args.source == 'hostile' then
			source = 'Hostile Creatures'
		elseif args.source == 'Friendly Creatures' or args.source == 'neutral' then
			source = 'Friendly Creatures'
		elseif args.source == 'Players' or args.source == 'player' then
			source = 'Players'
		elseif args.source == 'Blocks' or args.source == 'block' then
			source = 'Blocks'
		elseif args.source == 'Ambient/Environment' or args.source == 'ambient' then
			source = 'Ambient/Environment'
		elseif args.source == 'Voice/Speech' or args.source == 'voice' then
			source = 'Voice/Speech'
		elseif args.source == 'Sound' or args.source == 'sound' then
			source = 'Sound'
		end
        table.insert( cells, source )
	end

	local desc = args.description or addCategory( nocat, '?', 'sound description' )
	table.insert( cells, desc )
	
    if not dungeons then
	    local id
	    if args.id then
	    	id = [=[<code style="white-space: nowrap">]=] .. args.id .. [=[</code>]=]
	    else
	    	id = addCategory( nocat, '?', 'sound ID' )
	    end
	    table.insert( cells, id )
    end
	
	if not bedrockordungeons then
		local translationkey
		if args.sound == '-' then
			translationkey = parent:preprocess( emptyevent )
		elseif args.subtitle == '-' then
			translationkey = parent:preprocess( nosubtitle )
		elseif args.translationkey == '-' then
			local content = parent:expandTemplate{ title = 'bug', args = { args.subtitle } }
			translationkey = [=[''None'']=] .. parent:extensionTag( 'ref', content, { group = 'sound', name = 'bug' .. args.subtitle } )
		elseif args.translationkey ~= nil then
			translationkey = [=[<code style="white-space: nowrap">]=] .. args.translationkey .. [=[</code>]=]
		else
			translationkey = addCategory( nocat, '?', 'subtitle key' )
		end
		table.insert( cells, translationkey )
	end
	
	if not dungeons then
		table.insert( cells, args.volume or addCategory( nocat, '?', 'sound volume' ) )
		table.insert( cells, args.pitch or addCategory( nocat, '?', 'sound pitch' ) )
	end
	if not bedrockordungeons then
		table.insert( cells, args.distance or addCategory( nocat, '?', 'sound attenuation distance' ) )
	end
	
	local row = mw.html.create( 'tr' )
	for i, cell in ipairs( cells ) do
		row
			:tag( 'td' )
			:wikitext( cell ) 
	end
	result = result .. tostring( row )
	
	if args.foot then
		-- Reset the variables we used
		vardefine(parent, 'soundstable', '')
		vardefine(parent, 'nocat', '')
		vardefine(parent, 'bedrock', '')
		vardefine(parent, 'dungeons', '')
		vardefine(parent, 'bedrockordungeons', '')
		
		-- Add table ending
		result = result .. [=[</table>]=] .. parent:expandTemplate{ title = 'notelist', args = { 'sound' } }
	end
	
	return tostring( result )
end
return p

The Minecraft Wiki is no longer considered as official by Microsoft and therefore several changes are required to be made, including to the wiki's logo. Please read this announcement for more information.

READ MORE