![]() |
VOOZH | about |
Called by:
{{HistoryTable}}{{HistoryLine}}localp={} localtableHead localmode=nil localcurrentVersion=nil localcurrentExpVersion=nil localcurrentConsoleVersions={ xbox360=nil, xbone=nil, ps3=nil, ps4=nil, psvita=nil, wiiu=nil, switch=nil } localconsoleRowspanIndexes localconsoleRowspans localrowspanIndex localrowspans localversionLink=require('Module:Version link').main localeditionAlias={ ['java pre-classic']="java pre-Classic", ['java classic']="java Classic", ['java indev']="java Indev", ['java infdev']="java Infdev", ['java alpha']="java Alpha",['java edition alpha']="java Alpha", ['java beta']="java Beta",['java edition beta']="java Beta", ['java combat']="java Combat Test",['combat java']="java Combat Test",['java edition combat']="java Combat Test", je="java",java="java",['java edition']="java", ['java edition upcoming']="java upcoming",['java upcoming']="java upcoming",['upcoming java']="java upcoming",['upcoming java edition']="java upcoming", ['pe alpha']="pocket Alpha",['pocket alpha']="pocket Alpha",['pocket edition alpha']="pocket Alpha", pe="pocket",pocket="pocket",['pocket edition']="pocket", ce="console",lce="console",console="console",['legacy console']="console",['console edition']="console",['legacy console edition']="console", be="bedrock",bedrock="bedrock",['bedrock edition']="bedrock", ['be upcoming']="bedrock upcoming",['bedrock upcoming']="bedrock upcoming",['bedrock edition upcoming']="bedrock upcoming",['upcoming bedrock']="bedrock upcoming",['upcoming bedrock edition']="bedrock upcoming", ['3ds']="new3ds",new3ds="new3ds",['new 3ds']="new3ds",['new nintendo 3ds edition']="new3ds", realms="realms", pi="pi",['pi edition']="pi",['raspberry pi']="pi", edu="minecraftedu",minecraftedu="minecraftedu", education="education",['education edition']="education", ['education upcoming']="education upcoming",['education edition upcoming']="education upcoming",['upcoming education']="education upcoming",['upcoming education edition']="education upcoming", xbox360="xbox360",['xbox 360']="xbox360",['xbox 360 edition']="xbox360", xbone="xbone",xboxone="xbone",['xbox one']="xbone",['xbox one edition']="xbone", ps3="ps3",playstation3="ps3",['playstation 3']="ps3",['playstation 3 edition']="ps3", ps4="ps4",playstation4="ps4",['playstation 4']="ps4",['playstation 4 edition']="ps4", psvita="psvita",psv="psvita",playstationvita="psvita",['playstation vita']="psvita",['playstation vita edition']="psvita", wiiu="wiiu",['wii u']="wiiu",['wii u edition']="wiiu", switch="switch",nsw="switch",nintendoswitch="switch",['nintendo switch']="switch",['nintendo switch edition']="switch", earth="earth",['minecraft earth']="earth", dungeons="dungeons",['minecraft dungeons']="dungeons", ['dungeons arcade']="dungeons arcade",['minecraft dungeons arcade']="dungeons arcade", legends="legends",['minecraft legends']="legends", blast="blast",['minecraft blast']="blast", china="china",['china edition']="china", bs="bedrock server",bds="bedrock server",['bedrock server']="bedrock server",['bedrock dedicated server']="bedrock server", ['?']="unknown",unknown="unknown" } localheaderText={ ['java pre-Classic']='[[Java Edition pre-Classic]]', ['java Classic']='[[Java Edition Classic]]', ['java Indev']='[[Java Edition Indev]]', ['java Infdev']='[[Java Edition Infdev]]', ['java Alpha']='[[Java Edition Alpha]]', ['java Beta']='[[Java Edition Beta]]', ['java']="[[Java Edition version history|''Java Edition'']]", ['java Combat Test']="[[Java Edition Combat Tests]]", ['java upcoming']="[[Planned versions#Java Edition|Upcoming ''Java Edition'']]", ['pocket Alpha']='[[Pocket Edition Alpha]]', ['pocket']="''[[Pocket Edition]]''", ['bedrock']="[[Bedrock Edition version history|''Bedrock Edition'']]", ['bedrock upcoming']="[[Planned versions#Bedrock Edition|Upcoming ''Bedrock Edition'']]", ['minecraftedu']="[[MinecraftEdu#Versions|''MinecraftEdu'']]", ['education']="[[Minecraft Education version history|''Minecraft Education'']]", ['education upcoming']="[[Planned versions#Minecraft Education|Upcoming ''Minecraft Education'']]", ['china']="[[China Edition#History|''China Edition'']]", ['bedrock server']='[[Bedrock Dedicated Server#History|Realms Plus & Bedrock Dedicated Server]]', ['console']='[[Legacy Console Edition version history|Legacy Console Edition]]', ['realms']='[[Realms#History|Realms]]', ['new3ds']="[[New Nintendo 3DS Edition version history|''New Nintendo 3DS Edition'']]", ['pi']="[[Pi Edition#Release|''Pi Edition'']]", ['xbox360']="[[Legacy Console Edition version history|''Xbox 360 Edition'']]", ['xbone']="[[Legacy Console Edition version history|''Xbox One Edition'']]", ['ps3']="[[Legacy Console Edition version history|''PlayStation 3 Edition'']]", ['ps4']="[[Legacy Console Edition version history|''PlayStation 4 Edition'']]", ['psvita']="[[Legacy Console Edition version history|''PlayStation Vita Edition'']]", ['wiiu']="[[Legacy Console Edition version history|''Wii U Edition'']]", ['switch']="[[Legacy Console Edition version history|''Nintendo Switch Edition'']]", ['earth']="[[Earth:Version history|''Minecraft Earth'']]", ['dungeons']="[[Dungeons:Version history|''Minecraft Dungeons'']]", ['dungeons arcade']="[[Dungeons:Arcade|''Minecraft Dungeons Arcade'']]", ['legends']="[[Legends:Version history|''Minecraft Legends'']]", ['blast']="[[Minecraft Blast#Version history|''Minecraft Blast'']]", ['launcher']="[[Launcher version history|''Minecraft Launcher'']]", ['unknown']="Unknown" } localheaderCategories={ ['java upcoming']="[[Category:Java Edition upcoming]]", ['bedrock upcoming']="[[Category:Bedrock Edition upcoming]]", ['education upcoming']="[[Category:Minecraft Education upcoming]]", ['unknown']="[[Category:Unknown version history]]" } localversionLinks={ ['java upcoming']='java', ['bedrock upcoming']='bedrock', ['education upcoming']='education', ['bedrock server']='Bedrock Dedicated Server', ['dungeons arcade']='Dungeons:'-- This is needed or else version link module doesn't correctly link to the arcade } localexperimentLinks={ ['Minecart Improvements']='[[Minecart Improvements]]', ['Redstone Experiments']='[[Redstone Experiments]]', ['Villager Trade Rebalance']='[[Villager Trade Rebalance]]', ['Villager Trade Rebalancing']='[[Villager Trade Rebalance|Villager Trade Rebalancing]]', ['Drop 1 of 2026']='[[Tiny Takeover|Drop 1 of 2026]]', ['Beta APIs']='[[Experiments#Add-on creators|Beta APIs]]', ['Experimental Creator Camera Features']='[[Experiments#Add-on creators|Experimental Creator Camera Features]]', ['Render Dragon Features for Creators']='[[Vibrant Visuals#Deferred Technical Preview|Render Dragon Features for Creators]]', ['Upcoming Creator Features']='[[Experiments#Add-on creators|Upcoming Creator Features]]', ['Experimental Voxel Shape Features']='[[Experiments#Add-on creators|Experimental Voxel Shape Features]]', ['Bundles']='[[Bundle]]s', ['Locator Bar']='[[Locator Bar]]', ['Update 1.20']='[[Trails & Tales|Update 1.20]]', ['Update 1.21']='[[Tricky Trials|Update 1.21]]', ['Winter Drop']='[[The Garden Awakens|Winter Drop]]', ['Additional Modding Capabilities']='[[Bedrock Edition 1.16.100|Additional Modding Capabilities]]', ['Aim Assist']='[[Commands/aimassist|Aim Assist]]', ['Armadillo and Wolf Armor']='[[Armored Paws|Armadillo and Wolf Armor]]', ['Caves and Cliffs']='[[Bedrock Edition 1.18.0|Caves and Cliffs]]', ['Creator Cameras: Focus Target Camera']='[[Experiments#Add-on creators|Creator Cameras: Focus Target Camera]]', ['Creation of Custom Biomes']='[[Bedrock Edition 1.16.100|Creation of Custom Biomes]]', ['Creator Cameras: New Third-Person Presets']='[[Experiments#Add-on creators|Creator Cameras: New Third-Person Presets]]', ['Custom biomes']='[[Experiments#Add-on creators|Custom biomes]]', ['Custom Components V2']='[[Experiments#Add-on creators|Custom Components V2]]', ['Data-Driven Jigsaw Structures']='[[Experiments#Add-on creators|Data-Driven Jigsaw Structures]]', ['Drop 1 2025']='[[Spring to Life|Drop 1 2025]]', ['Drop 2 2025']='[[Chase the Skies|Drop 2 2025]]', ['Drop 3 2025']='[[The Copper Age|Drop 3 2025]]', ['Experimental Cameras']='[[Bedrock Edition 1.20.0|Experimental Cameras]]', ['Holiday Creator Features']='[[Bedrock Edition 1.16.100|Holiday Creator Features]]', ['Next Major Update']='[[Trails & Tales|Next Major Update]]', ['Recipe Unlocking']='[[Recipe book#Unlocking|Recipe Unlocking]]', ['Short Sneaking and Crawling']='[[Sneaking|Short Sneaking]] and [[Crawling]]', ['Sniffer']='[[Sniffer]]', ['Spectator Mode']='[[Spectator|Spectator Mode]]', ['Vanilla Experiments']='[[Bedrock Edition 1.18.0|Vanilla Experiments]]', ['Vibrant Visuals']='[[Vibrant Visuals]]', ['Wild Update']='[[The Wild Update|Wild Update]]', ['Furnace Recipe Book']='[[Recipe book#Smelting|Furnace Recipe Book]]', ['Drop 2 of 2026']='[[Chaos Cubed|Drop 2 of 2026]]', ['Drop 3 of 2026']='[[Third Drop 2026|Drop 3 of 2026]]' } localsortKeys={ -- is this still needed? why is it not updated since 2020/1.16 then? ['java 1.0.0']="A", ['java 1.1']="B", ['java 1.2.1']="C", ['java 1.3.1']="D", ['java 1.4.2']="E", ['java 1.5']="F", ['java 1.6.1']="G", ['java 1.7.2']="F", ['java 1.8']="G", ['java 1.9']="H", ['java 1.10']="I", ['java 1.11']="J", ['java 1.12']="K", ['java 1.13']="L", ['java 1.14']="M", ['java 1.15']="N", ['java 1.16']="O", ['java texture update']="_", ['java indev 0.31']="0", ['java alpha v1.2.0']="2", ['java beta 1.6']="6", ['java beta 1.8']="8", ['pocket alpha v0.8.0']="A", ['pocket alpha 0.8.0']="A", ['pocket alpha v0.9.0']="B", ['pocket alpha 0.9.0']="B", ['pocket alpha v0.10.0']="C", ['pocket alpha 0.10.0']="C", ['pocket alpha v0.11.0']="D", ['pocket alpha 0.11.0']="D", ['pocket alpha v0.12.1']="E", ['pocket alpha 0.12.1']="E", ['pocket alpha v0.13.0']="F", ['pocket alpha 0.13.0']="F", ['pocket alpha v0.14.0']="G", ['pocket alpha 0.14.0']="G", ['pocket alpha v0.15.0']="H", ['pocket alpha 0.15.0']="H", ['pocket alpha v0.16.0']="I", ['pocket alpha 0.16.0']="I", ['pocket 1.0.0']="X", ['pocket 1.1.0']="Y", ['pocket 1.1.3']="Z", ['bedrock 1.2.0']="A", ['bedrock 1.2.13']="B", ['bedrock 1.4.0']="C", ['bedrock 1.5.0']="D", ['bedrock 1.6.0']="E", ['bedrock 1.7.0']="F", ['bedrock 1.8.0']="G", ['bedrock 1.9.0']="H", ['bedrock 1.10.0']="I", ['bedrock 1.11.0']="J", ['bedrock 1.12.0']="K", ['bedrock 1.13.0']="L", ['bedrock 1.14.0']="M", ['bedrock 1.14.60']="M", ['bedrock 1.16.0']="N", ['bedrock 1.16.100']="N" } localfunctionisInMainspace() returnmw.title.getCurrentTitle().namespace==0 end localfunctiongetUnknownCat() if(mode==nilormode=='unknown')thenreturn''end if(mode=='xbox360'ormode=='xbone'ormode=='ps3'ormode=='ps4'ormode=='psvita'ormode=='wiiu'ormode=='switch')thenmode='console'end localsortKey=sortKeys[mode..(currentVersionor'')]or"*" ifisInMainspace()then return'[[Category:Unknown '..string.gsub(mode,'^%l',string.upper)..' version history|'..sortKey..']]' end return'' end localfunctionresetConsole() currentConsoleVersions.xbox360=nil currentConsoleVersions.xbone=nil currentConsoleVersions.ps3=nil currentConsoleVersions.ps4=nil currentConsoleVersions.psvita=nil currentConsoleVersions.wiiu=nil currentConsoleVersions.switch=nil end localfunctionreset() currentVersion=nil currentExpVersion=nil resetConsole() end localfunctionfootReset() mode=nil reset() end localfunctiongetVersionLink(link,text,isDev) if(link=='none')then if(text=='unknown'ortext=='?')thenreturn'?'..getUnknownCat()end if(isDevandtext=='java')thenreturn''end returntext end if(link=='ver')then if(text=='unknown'ortext=='?')then return'[[:Category:Unknown version history|?]]'..(isInMainspace()andgetUnknownCat()or'') end if(isDevandtext=='java')then return'' end if((notisDev)and(mode=='realms'))then returntext end localc if(notisDev)then if(text=='Pre-release'andmode=='pocket Alpha')thenc='pocket Pre-release' elsec=(versionLinks[mode]ormode)..' '..text end else c=text:lower() if(c:match('^test build')orc:match('^pre%-release')orc:match('^build')orc:match('^20[01]')orc:match('^release candidate')orc:match('^experimental snapshot'))thenc=currentVersion..' '..text elseif(c:match('^preview [0-9]'))thenc=text-- Bedrock edition previews elseif(c:match('^pre'))thenc=currentVersion..'-'..text elseif(c:match('^snapshot'))thenc=currentVersion..' Snapshot '..text:gsub('^snapshot','') elseif(c:match('^snap'))thenc=currentVersion..' Snapshot '..text:gsub('^snap','') elseif(c:match('^rc'))thenc=currentVersion..'-'..text elseif(c:match('^release'))thenc=currentVersion elsec=text end c=(versionLinks[mode]ormode)..' '..c end returnversionLink({c,text:gsub('^%((.*)%)$','%1')}) end localcat='' if(text=='unknown'ortext=='?')then cat=getUnknownCat() end if(link:find('//',1,true))then return'['..link..' '..text..']'..(isInMainspace()andcator'') else return'[['..link..'|'..text..']]'..cat end end localfunctionconsoleVersionLink(platform,version,link) if(version=='none')thenreturn' 'end if(version=='unknown'orversion=='?')then return'?'..(isInMainspace()andgetUnknownCat()or'') end if(link)then if(link=='none')thenreturnversionend if(link:find('//',1,true))thenreturn'['..link..' '..version..']'elsereturn'[['..link..'|'..version..']]'end end localr=platform..' '..version returnversionLink({r,version}) end localfunctionaddConsoleVersions(platform,version,link,prnt) if(((version~=nilandversion~='')andversion==currentConsoleVersions[platform])or((version==nilorversion=='')andcurrentConsoleVersions[platform]~=nil)) then return end prnt('<th class="nowrap vertical-header" style="max-height: min-content;" rowspan="') currentConsoleVersions[platform]=versionor"none" consoleRowspanIndexes[platform]=consoleRowspanIndexes[platform]+1 prnt(consoleRowspans[platform][consoleRowspanIndexes[platform]]..'">') prnt(consoleVersionLink(platform,versionor'none',link)) prnt('</th>') end localfunctionconsoleSubHeader(content,prnt) prnt('<th class="vertical-header" style="border-style: none dashed; max-height: min-content;">'..content..'</th>') end localfunctionprocessLine(args,prnt) localsnapRows=1 fori,_inipairs(args)doif(i>3)thensnapRows=snapRows+1endend --Header or Foot if(args[1]~=nilandargs[1]~='')then localtemp=(args[1]):lower() if(temp=='foot')then prnt('</table>') footReset() tableHead=0 return end mode=editionAlias[temp]orargs[1] reset() prnt('<tr class="collapsible collapsible-rows"><th class="historytable-subheader" colspan="8" style="border-bottom: none">') prnt(headerText[mode]ormode) ifmw.title.getCurrentTitle().namespace==0then prnt(headerCategories[mode]or'') end prnt('</th></tr>') ifmode=='console'then prnt('<tr style="font-size: smaller">') consoleSubHeader("[[Xbox 360 Edition|Xbox 360]]",prnt) consoleSubHeader("[[Xbox One Edition|Xbox One]]",prnt) consoleSubHeader("[[PlayStation 3 Edition|PS3]]",prnt) consoleSubHeader("[[PlayStation 4 Edition|PS4]]",prnt) consoleSubHeader("[[PlayStation Vita Edition|PS Vita]]",prnt) consoleSubHeader("[[Wii U Edition|Wii U]]",prnt) consoleSubHeader("[[Nintendo Switch Edition|Switch]]",prnt) consoleSubHeader("",prnt) prnt("</tr>") end return end --Content rows prnt('<tr>') if((mode=='console')and(args.xboxorargs.xboneorargs.ps3orargs.ps4orargs.psvitaorargs.wiiuorargs.switch))then currentVersion=nil if(args[3]~=nilandargs[3]~='')then snapRows=snapRows+1 end addConsoleVersions("xbox360",args.xbox,args.xboxlink,prnt) addConsoleVersions("xbone",args.xbone,args.xbonelink,prnt) addConsoleVersions("ps3",args.ps3,args.ps3link,prnt) addConsoleVersions("ps4",args.ps4,args.ps4link,prnt) addConsoleVersions("psvita",args.psvita,args.psvitalink,prnt) addConsoleVersions("wiiu",args.wiiu,args.wiiulink,prnt) addConsoleVersions("switch",args.switch,args.switchlink,prnt) prnt('<td>'..args[2]..'</td></tr>') fork,vinipairs(args)doif(k>2)thenprnt('<tr><td>'..v..'</td></tr>')endend return end --Other versions: resetConsole() if((args.dev==nil)or(args[2]andargs[2]~='')or(args.expandargs.exp~=''andargs.exp~=currentExpVersion))then currentVersion=nil currentExpVersion=nil prnt('<th ') if(not(args.linkorargs[2]:find('(',1,true)))thenprnt('class="nowrap"')end prnt(' rowspan="') if(args.exp~=nil)then currentExpVersion=args.exp end if(args.dev~=nil)then currentVersion=args[2] rowspanIndex=rowspanIndex+1 prnt(rowspans[rowspanIndex]..'" colspan="3">') else prnt(snapRows..'" colspan="7">') end prnt(getVersionLink(args.linkor'ver',args[2],false)) if(args.exp~=nilorargs.experiment~=nil)then localexperiment=(args.exporargs.experiment) prnt("<div class=\"historytable-experiment\"><div>Experiment</div></div><span>"..(experimentLinks[experiment]orexperiment).."</span>") end prnt('</th>') end if(args.dev~=nil)then prnt('<th colspan="4" rowspan="'..snapRows..'">') prnt(getVersionLink(args.slinkor'ver',args.dev,true)) prnt('</th>') end ifargs[3]then prnt('<td>'..args[3]..'</td></tr>') end fork,vinipairs(args)doif(k>3)thenprnt('<tr><td>'..v..'</td></tr>')endend return end -- Takes all args and puts them into a json string functionp.printArgs(frame) returnmw.text.jsonEncode(frame:getParent().args) end -- Undo the serialization for parsing localfunctiondeserialize(args) locale localout={} fork,vinpairs(args)do e,out[k]=pcall(mw.text.jsonDecode,v) ifnotethen localerrorCat='' localerrorMsg=mw.message.new('scribunto-common-error-category') ifnoterrorMsg:isDisabled()then errorCat='[[Category:'..errorMsg:plain()..']]' end out[k]={'','unknown',v..' <strong class="error">Lua error: '..out[k]..errorCat..' Input:'..v..'</strong>'} end end returnout end localfunctioncountConsoleRowspans(platform,version,snapRows) if(((version~=nilandversion~='')andversion==currentConsoleVersions[platform])or((version==nilorversion=='')andcurrentConsoleVersions[platform]~=nil)) then consoleRowspans[platform][consoleRowspanIndexes[platform]]=consoleRowspans[platform][consoleRowspanIndexes[platform]]+snapRows return end currentConsoleVersions[platform]=versionor"none" consoleRowspanIndexes[platform]=consoleRowspanIndexes[platform]+1 consoleRowspans[platform][consoleRowspanIndexes[platform]]=(consoleRowspans[platform][consoleRowspanIndexes[platform]]or0)+snapRows end localfunctioncountRowspan(args) localsnapRows=1 fori,_inipairs(args)doif(i>3)thensnapRows=snapRows+1endend --Header or Foot if(args[1]~=nilandargs[1]~='')then localtemp=(args[1]):lower() if(temp=='foot')then footReset() return end mode=editionAlias[temp]orargs[1] reset() return end --Content rows if((mode=='console')and(args.xboxorargs.xboneorargs.ps3orargs.ps4orargs.psvitaorargs.wiiuorargs.switch))then currentVersion=nil if(args[3]~=nilandargs[3]~='')then snapRows=snapRows+1 end countConsoleRowspans("xbox360",args.xbox,snapRows) countConsoleRowspans("xbone",args.xbone,snapRows) countConsoleRowspans("ps3",args.ps3,snapRows) countConsoleRowspans("ps4",args.ps4,snapRows) countConsoleRowspans("psvita",args.psvita,snapRows) countConsoleRowspans("wiiu",args.wiiu,snapRows) countConsoleRowspans("switch",args.switch,snapRows) return end --Other versions: resetConsole() if((args.dev==nil)or(args[2]andargs[2]~='')or(args.expandargs.exp~=''andargs.exp~=currentExpVersion))then currentVersion=nil currentExpVersion=nil if(args.dev~=nil)then currentVersion=args[2] rowspanIndex=rowspanIndex+1 end end if(args.dev~=nil)then rowspans[rowspanIndex]=(rowspans[rowspanIndex]or0)+snapRows end return end localfunctioninitRowspans() rowspans={} consoleRowspans={ xbox360={}, xbone={}, ps3={}, ps4={}, psvita={}, wiiu={}, switch={} } end localfunctionresetRowspanIndexes() rowspanIndex=0 consoleRowspanIndexes={ xbox360=0, xbone=0, ps3=0, ps4=0, psvita=0, wiiu=0, switch=0 } end functionp.main(frame) returnp._main(frame:getParent().args) end functionp._main(args) locallines=deserialize(args) initRowspans() resetRowspanIndexes() for_,vinipairs(lines)do countRowspan(v) end resetRowspanIndexes() tableHead=0 localresult={} for_,vinipairs(lines)do if(tableHead~=1)then table.insert(result,'<table class="wikitable pixel-image" data-description="History">') tableHead=1 end processLine(v,function(a)table.insert(result,a)end) end iftableHead~=0then table.insert(result,'</table>') footReset() tableHead=0 end returntable.concat(result) end returnp