![]() |
VOOZH | about |
This module implements {{Protocol version}}, {{Data version}}, {{Resource pack version}}, {{Data pack version}}, and {{Protocol version/Table}}.
The actual data used by this module is stored in Module:Protocol version/Versions.
{{Protocol version}}{{Data version}}{{Resource pack version}}{{Data pack version}}{{Protocol version/Table}}localp={} localfunctiongetVersion(version,dataType,nocat) ifnotversionornotdataTypethen returnnil end dataType=dataType:lower() localtypeDatas={ protocol={ template='Template:Protocol version#Unknown version', category='Category:Unknown protocol version' }, data={ template='Template:Data version#Unknown version', category='Category:Unknown data version' }, res={ template='Template:Resource pack version#Unknown version', category='Category:Unknown resource pack version' }, dat={ template='Template:Data pack version#Unknown version', category='Category:Unknown data pack version' } } -- load the values from the submodule localdataSource=mw.loadData('Module:Protocol version/Versions') localversionData=dataSource.versions[version] localdefinedTypes=dataSource.types ifversionDatathen typeDatas.protocol.data=versionData.protocol typeDatas.data.data=versionData.data typeDatas.res.data=versionData.res typeDatas.dat.data=versionData.dat end localresult=nil locallinkText=nil ifversionDatathen iftypeDatas[dataType].datathen iftypeDatas[dataType].data==definedTypes.unknownthen linkText=definedTypes.unknown else iftype(typeDatas[dataType].data)=='number'andtypeDatas[dataType].data>=0x40000000then result=string.format('%#x',typeDatas[dataType].data) elseif(dataType=='res'ordataType=='dat')andtype(typeDatas[dataType].data)=='table'then result=string.format('%s.%s',typeDatas[dataType].data.majorortypeDatas[dataType].data[1]or'0',typeDatas[dataType].data.minorortypeDatas[dataType].data[2]or'0') else result=typeDatas[dataType].data end end else result=definedTypes.none end else linkText=definedTypes.pending end iflinkTextandnotresultthen result=string.format('[[%s|%s]]',typeDatas[dataType].template,linkText) ifnotnocatandmw.title.getCurrentTitle().namespace==0andnotmw.title.getCurrentTitle().isSubpagethen result=result..string.format('[[%s]]',typeDatas[dataType].category) end end returnresult end -- {{Protocol version}} functionp.protocol(f) localargs=f iff==mw.getCurrentFrame()then args=require('Module:ProcessArgs').merge(true) end returngetVersion(mw.text.trim(args[1]or''),'protocol',args.nocat) end -- {{Data version}} functionp.data(f) localargs=f iff==mw.getCurrentFrame()then args=require('Module:ProcessArgs').merge(true) end returngetVersion(mw.text.trim(args[1]or''),'data',args.nocat) end -- {{Resource pack version}} functionp.resourcePack(f) localargs=f iff==mw.getCurrentFrame()then args=require('Module:ProcessArgs').merge(true) end returngetVersion(mw.text.trim(args[1]or''),'res',args.nocat) end -- {{Data pack version}} functionp.dataPack(f) localargs=f iff==mw.getCurrentFrame()then args=require('Module:ProcessArgs').merge(true) end returngetVersion(mw.text.trim(args[1]or''),'dat',args.nocat) end -- Version table ({{Protocol version/table}}) functionp.table(f) localargs=f iff==mw.getCurrentFrame()then args=require('Module:ProcessArgs').merge(true) end locallastVers={} forvinmw.text.gsplit(mw.text.trim(args.lastversor''),',',true)do v=mw.text.trim(v) ifv~=''then table.insert(lastVers,v) end end localresult={} localdataSource=mw.loadData('Module:Protocol version/Versions') localdefinedTypes=dataSource.types for_,groupinipairs(dataSource.groups)do localinclude=true if#args~=0then include=false for_,nameinipairs(args)do ifname==group.namethen include=true break end end end ifincludethen localdisplayControl={ protocol=notargs.hideprotocol, data=group.optional.dataandnotargs.hidedata, resPack=group.optional.resPackandnotargs.hiderespack, datPack=group.optional.datPackandnotargs.hidedatpack, } ifnotdisplayControl.protocolandnotdisplayControl.dataandnotdisplayControl.resPackandnotdisplayControl.datPackthen break end ifnotargs.notitlethen table.insert(result,string.format('<h3>[[%s|%s]]</h3>',group.link,group.name)) end ifgroup.desc~=nilthen table.insert(result,group.desc) end localhtmlTable=mw.html.create('table'):addClass('wikitable sortable jquery-tablesorter') localhtmlTableHeader=mw.html.create('tr') htmlTableHeader:tag('th'):wikitext('Client version'):done() ifdisplayControl.protocolthen htmlTableHeader:tag('th'):wikitext('[[Protocol version]]'):done() end ifdisplayControl.datathen htmlTableHeader:tag('th'):wikitext('[[Data version]]'):done() end ifdisplayControl.resPackthen htmlTableHeader:tag('th'):wikitext('[[Resource pack format]]'):done() end ifdisplayControl.datPackthen htmlTableHeader:tag('th'):wikitext('[[Data pack format]]'):done() end htmlTable:node(htmlTableHeader) localrows={} localrowFirst='<td style="text-align:center">%s</td>' localrowMerged='<td style="text-align:center" rowspan="%s">%s</td>' localctrl={ pv={prev=-1}, dv={prev=-1}, rp={prev=-1}, dp={prev=-1}, } localdisplayedProtocol='' for_,versioninipairs(group.values)do table.insert(rows,'<tr>') table.insert(rows,string.format('<td>[[%s]]</td>',version.name)) displayedProtocol=version.protocol iftype(displayedProtocol)=='number'anddisplayedProtocol>=0x40000000then displayedProtocol='0x'..string.format('%X',displayedProtocol)..'<br>('..displayedProtocol..')' end ifdisplayControl.protocolthen ifversion.protocol~=ctrl.pv.prevorversion.forceSplitProtocolthen ctrl.pv.prev=version.protocol ctrl.pv.rowspan=1 table.insert(rows,rowFirst:format(displayedProtocol)) ctrl.pv.idx=#rows else ctrl.pv.rowspan=ctrl.pv.rowspan+1 rows[ctrl.pv.idx]=rowMerged:format(ctrl.pv.rowspan,displayedProtocol) end end ifdisplayControl.datathen ifversion.datathen ifversion.data~=ctrl.dv.prevthen ctrl.dv.prev=version.data ctrl.dv.rowspan=1 table.insert(rows,rowFirst:format(version.data)) ctrl.dv.idx=#rows else ctrl.dv.rowspan=ctrl.dv.rowspan+1 rows[ctrl.dv.idx]=rowMerged:format(ctrl.dv.rowspan,version.data) end else ifctrl.dv.prev~=definedTypes.nonethen ctrl.dv.prev=definedTypes.none ctrl.dv.rowspan=1 table.insert(rows,rowFirst:format(definedTypes.none)) ctrl.dv.idx=#rows else ctrl.dv.rowspan=ctrl.dv.rowspan+1 rows[ctrl.dv.idx]=rowMerged:format(ctrl.dv.rowspan,definedTypes.none) end end end ifdisplayControl.resPackthen ifversion.resthen localversionRes=version.res iftype(versionRes)=='table'then versionRes=string.format('%s.%s',versionRes.majororversionRes[1]or'0',versionRes.minororversionRes[2]or'0') end ifversionRes~=ctrl.rp.prevthen ctrl.rp.prev=versionRes ctrl.rp.rowspan=1 table.insert(rows,rowFirst:format(versionRes)) ctrl.rp.idx=#rows else ctrl.rp.rowspan=ctrl.rp.rowspan+1 rows[ctrl.rp.idx]=rowMerged:format(ctrl.rp.rowspan,versionRes) end else ifctrl.rp.prev~=definedTypes.nonethen ctrl.rp.prev=definedTypes.none ctrl.rp.rowspan=1 table.insert(rows,rowFirst:format(definedTypes.none)) ctrl.rp.idx=#rows else ctrl.rp.rowspan=ctrl.rp.rowspan+1 rows[ctrl.rp.idx]=rowMerged:format(ctrl.rp.rowspan,definedTypes.none) end end end ifdisplayControl.datPackthen ifversion.datthen localversionDat=version.dat iftype(versionDat)=='table'then versionDat=string.format('%s.%s',versionDat.majororversionDat[1]or'0',versionDat.minororversionDat[2]or'0') end ifversionDat~=ctrl.dp.prevthen ctrl.dp.prev=versionDat ctrl.dp.rowspan=1 table.insert(rows,rowFirst:format(versionDat)) ctrl.dp.idx=#rows else ctrl.dp.rowspan=ctrl.dp.rowspan+1 rows[ctrl.dp.idx]=rowMerged:format(ctrl.dp.rowspan,versionDat) end else ifctrl.dp.prev~=definedTypes.nonethen ctrl.dp.prev=definedTypes.none ctrl.dp.rowspan=1 table.insert(rows,rowFirst:format(definedTypes.none)) ctrl.dp.idx=#rows else ctrl.dp.rowspan=ctrl.dp.rowspan+1 rows[ctrl.dp.idx]=rowMerged:format(ctrl.dp.rowspan,definedTypes.none) end end end table.insert(rows,'</tr>') localisLast=false for_,vinpairs(lastVers)do ifversion.name==vthen isLast=true break end end ifisLast==truethen break end end htmlTable:wikitext(table.concat(rows)) table.insert(result,tostring(htmlTable)) end end returntable.concat(result) end returnp