<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://modded.wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AAdvancement</id>
	<title>Module:Advancement - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://modded.wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AAdvancement"/>
	<link rel="alternate" type="text/html" href="https://modded.wiki/index.php?title=Module:Advancement&amp;action=history"/>
	<updated>2026-06-02T15:54:57Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://modded.wiki/index.php?title=Module:Advancement&amp;diff=13604&amp;oldid=prev</id>
		<title>Deadlydiamond98 at 20:53, 29 January 2026</title>
		<link rel="alternate" type="text/html" href="https://modded.wiki/index.php?title=Module:Advancement&amp;diff=13604&amp;oldid=prev"/>
		<updated>2026-01-29T20:53:37Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:53, 29 January 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l62&quot;&gt;Line 62:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 62:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	line.game_description = mw.text.unstrip(line.game_description)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	line.game_description = mw.text.unstrip(line.game_description)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	bucket(&#039;advancement&#039;).put({&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-- &lt;/ins&gt;bucket(&#039;advancement&#039;).put({&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		&lt;/del&gt;title = sanitized_title,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- 	&lt;/ins&gt;title = sanitized_title,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		&lt;/del&gt;json = mw.text.jsonEncode(line) -- serializes all data into a json blob&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- 	&lt;/ins&gt;json = mw.text.jsonEncode(line) -- serializes all data into a json blob&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	})&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-- &lt;/ins&gt;})&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key modded_wiki:diff:1.41:old-13603:rev-13604:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Deadlydiamond98</name></author>
	</entry>
	<entry>
		<id>https://modded.wiki/index.php?title=Module:Advancement&amp;diff=13603&amp;oldid=prev</id>
		<title>Deadlydiamond98 at 20:53, 29 January 2026</title>
		<link rel="alternate" type="text/html" href="https://modded.wiki/index.php?title=Module:Advancement&amp;diff=13603&amp;oldid=prev"/>
		<updated>2026-01-29T20:53:05Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:53, 29 January 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l27&quot;&gt;Line 27:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 27:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	local title_extra = &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	local title_extra = &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- if line.upcoming_ver then&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- 	title_extra = title_extra .. frame:expandTemplate{title = &#039;Upcoming&#039;, args = {ver = line.upcoming_ver}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if line.until_ver then&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-- &lt;/ins&gt;if line.until_ver then&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		&lt;/del&gt;title_extra = title_extra .. frame:expandTemplate{title = &#039;Until&#039;, args = {ver = line.until_ver}}	&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- 	&lt;/ins&gt;title_extra = title_extra .. frame:expandTemplate{title = &#039;Until&#039;, args = {ver = line.until_ver}}	&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-- &lt;/ins&gt;end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	tr:tag(&amp;#039;td&amp;#039;):wikitext(&amp;#039;[[&amp;#039;..(link or full_title)..&amp;#039;|&amp;#039;..line.title..&amp;#039;]]&amp;#039;, title_extra)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	tr:tag(&amp;#039;td&amp;#039;):wikitext(&amp;#039;[[&amp;#039;..(link or full_title)..&amp;#039;|&amp;#039;..line.title..&amp;#039;]]&amp;#039;, title_extra)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key modded_wiki:diff:1.41:old-13602:rev-13603:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Deadlydiamond98</name></author>
	</entry>
	<entry>
		<id>https://modded.wiki/index.php?title=Module:Advancement&amp;diff=13602&amp;oldid=prev</id>
		<title>Deadlydiamond98 at 20:52, 29 January 2026</title>
		<link rel="alternate" type="text/html" href="https://modded.wiki/index.php?title=Module:Advancement&amp;diff=13602&amp;oldid=prev"/>
		<updated>2026-01-29T20:52:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:52, 29 January 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l27&quot;&gt;Line 27:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 27:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	local title_extra = &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	local title_extra = &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	if line.upcoming_ver then&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		title_extra = title_extra .. frame:expandTemplate{title = &#039;Upcoming&#039;, args = {ver = line.upcoming_ver}}&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	end&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if line.until_ver then&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if line.until_ver then&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key modded_wiki:diff:1.41:old-13598:rev-13602:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Deadlydiamond98</name></author>
	</entry>
	<entry>
		<id>https://modded.wiki/index.php?title=Module:Advancement&amp;diff=13598&amp;oldid=prev</id>
		<title>Deadlydiamond98: Created page with &quot;local advancement_page = &#039;Advancement&#039;  local p = {} local namespace = mw.title.getCurrentTitle().nsText local page_title = mw.title.getCurrentTitle().text local full_title = mw.title.getCurrentTitle().fullText local html local frame  local function sanitize(str) 	-- remove anything between &lt; and &gt; (simple way to remove span tag) 	-- return lower case alpha numeric characters and spaces 	return mw.text.trim(str:gsub(&#039;&lt;.-&gt;&#039;,&#039;&#039;):gsub(&#039;[^%w%s]*&#039;, &#039;&#039;):lower()) end  -- Adds o...&quot;</title>
		<link rel="alternate" type="text/html" href="https://modded.wiki/index.php?title=Module:Advancement&amp;diff=13598&amp;oldid=prev"/>
		<updated>2026-01-29T20:47:29Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local advancement_page = &amp;#039;Advancement&amp;#039;  local p = {} local namespace = mw.title.getCurrentTitle().nsText local page_title = mw.title.getCurrentTitle().text local full_title = mw.title.getCurrentTitle().fullText local html local frame  local function sanitize(str) 	-- remove anything between &amp;lt; and &amp;gt; (simple way to remove span tag) 	-- return lower case alpha numeric characters and spaces 	return mw.text.trim(str:gsub(&amp;#039;&amp;lt;.-&amp;gt;&amp;#039;,&amp;#039;&amp;#039;):gsub(&amp;#039;[^%w%s]*&amp;#039;, &amp;#039;&amp;#039;):lower()) end  -- Adds o...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local advancement_page = &amp;#039;Advancement&amp;#039;&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local namespace = mw.title.getCurrentTitle().nsText&lt;br /&gt;
local page_title = mw.title.getCurrentTitle().text&lt;br /&gt;
local full_title = mw.title.getCurrentTitle().fullText&lt;br /&gt;
local html&lt;br /&gt;
local frame&lt;br /&gt;
&lt;br /&gt;
local function sanitize(str)&lt;br /&gt;
	-- remove anything between &amp;lt; and &amp;gt; (simple way to remove span tag)&lt;br /&gt;
	-- return lower case alpha numeric characters and spaces&lt;br /&gt;
	return mw.text.trim(str:gsub(&amp;#039;&amp;lt;.-&amp;gt;&amp;#039;,&amp;#039;&amp;#039;):gsub(&amp;#039;[^%w%s]*&amp;#039;, &amp;#039;&amp;#039;):lower())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Adds one row of advancement data to html object&lt;br /&gt;
local function printLine(line, is_input)&lt;br /&gt;
	local tr = html:tag(&amp;#039;tr&amp;#039;):attr(&amp;#039;id&amp;#039;, line.title):cssText(&amp;#039;text-align:left&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	local link = nil&lt;br /&gt;
	if not is_input then&lt;br /&gt;
		link = advancement_page..&amp;#039;#&amp;#039;..line.title&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local image = require(&amp;#039;Module:Aicon&amp;#039;).aIcon( line.image, line.background, &amp;#039;raw&amp;#039;, (link or &amp;#039;&amp;#039;) )&lt;br /&gt;
	tr:tag(&amp;#039;td&amp;#039;):wikitext(image)&lt;br /&gt;
	&lt;br /&gt;
	local title_extra = &amp;#039;&amp;#039;&lt;br /&gt;
	if line.upcoming_ver then&lt;br /&gt;
		title_extra = title_extra .. frame:expandTemplate{title = &amp;#039;Upcoming&amp;#039;, args = {ver = line.upcoming_ver}}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if line.until_ver then&lt;br /&gt;
		title_extra = title_extra .. frame:expandTemplate{title = &amp;#039;Until&amp;#039;, args = {ver = line.until_ver}}	&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	tr:tag(&amp;#039;td&amp;#039;):wikitext(&amp;#039;[[&amp;#039;..(link or full_title)..&amp;#039;|&amp;#039;..line.title..&amp;#039;]]&amp;#039;, title_extra)&lt;br /&gt;
	tr:tag(&amp;#039;td&amp;#039;):wikitext(line.game_description)&lt;br /&gt;
	if is_input then -- These are only displayed on the input page, not on individual content pages&lt;br /&gt;
		tr:tag(&amp;#039;td&amp;#039;):wikitext(line.parent)&lt;br /&gt;
	end&lt;br /&gt;
	tr:tag(&amp;#039;td&amp;#039;):wikitext(line.wiki_description)&lt;br /&gt;
	if is_input then -- These are only displayed on the input page, not on individual content pages&lt;br /&gt;
        tr:tag(&amp;#039;td&amp;#039;):attr(&amp;#039;id&amp;#039;, line.internal_id):wikitext(&amp;#039;&amp;lt;code&amp;gt;&amp;#039;, line.internal_id, &amp;#039;&amp;lt;/code&amp;gt;&amp;#039;)&lt;br /&gt;
		tr:tag(&amp;#039;td&amp;#039;):wikitext(line.reward)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Puts one line of data into Bucket for later querying&lt;br /&gt;
local function storeLine(line)&lt;br /&gt;
	-- Put data into Bucket&lt;br /&gt;
	-- The only top level params that are needed is stuff that would be used as selectors&lt;br /&gt;
	-- everything else is put into a json blob for flexibility&lt;br /&gt;
	if not (namespace == &amp;#039;&amp;#039; or namespace ==  &amp;#039;Minecraft_Wiki&amp;#039;) then&lt;br /&gt;
		 return -- only store data if we are in main or Minecraft_Wiki namespaces&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local sanitized_title = sanitize(line.title)&lt;br /&gt;
	&lt;br /&gt;
	-- mw.text.unstrip gets rid of parser artifacts that are put there when a &amp;lt;ref&amp;gt; tag is used.&lt;br /&gt;
	line.wiki_description = mw.text.unstrip(line.wiki_description)&lt;br /&gt;
	line.game_description = mw.text.unstrip(line.game_description)&lt;br /&gt;
	&lt;br /&gt;
	bucket(&amp;#039;advancement&amp;#039;).put({&lt;br /&gt;
		title = sanitized_title,&lt;br /&gt;
		json = mw.text.jsonEncode(line) -- serializes all data into a json blob&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Public function - Called by {{AdvancementRow}}&lt;br /&gt;
function p.inputLine(_frame)&lt;br /&gt;
	frame = _frame -- store frame for later use by expandTemplate&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	&lt;br /&gt;
	-- Normalize inputs and set defaults&lt;br /&gt;
	local line = {&lt;br /&gt;
		title = args[&amp;#039;title&amp;#039;], -- name&lt;br /&gt;
		background = args[&amp;#039;bg&amp;#039;] or &amp;#039;plain&amp;#039;, -- background for icon&lt;br /&gt;
		upcoming_ver = args[&amp;#039;upcoming&amp;#039;], -- version where advancement will be introduced&lt;br /&gt;
		until_ver = args[&amp;#039;until&amp;#039;], -- version where advancement will be removed&lt;br /&gt;
		image = mw.text.trim(args[1]),&lt;br /&gt;
		game_description = mw.text.trim(args[2]),&lt;br /&gt;
		parent = mw.text.trim(args[3]),&lt;br /&gt;
		wiki_description = mw.text.trim(args[4]),&lt;br /&gt;
		internal_id = mw.text.trim(args[5] or &amp;#039;—&amp;#039;),&lt;br /&gt;
		reward = mw.text.trim(args[6] or &amp;#039;—&amp;#039;)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html = mw.html.create()&lt;br /&gt;
	&lt;br /&gt;
	printLine(line, true)&lt;br /&gt;
	storeLine(line)&lt;br /&gt;
		&lt;br /&gt;
	return html&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function printHeader(header_text, short_header, collapsed)&lt;br /&gt;
	if collapsed then&lt;br /&gt;
		collapsed = &amp;#039; collapsed&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		collapsed = &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	-- Can&amp;#039;t use table tag because it will close itself, but we need to close it with footer&lt;br /&gt;
	html = mw.html.create():wikitext(&amp;#039;&amp;lt;div style=&amp;quot;overflow: auto;&amp;quot;&amp;gt;&amp;lt;table class=&amp;quot;wikitable collapsible&amp;#039;, collapsed, &amp;#039;&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	if header_text and header_text ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		html:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;colspan&amp;#039;, 7)&lt;br /&gt;
			:attr(&amp;#039;data-description&amp;#039;, header_text)&lt;br /&gt;
			:wikitext(header_text)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local tr = html:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
	tr:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Icon&amp;#039;)&lt;br /&gt;
	tr:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Advancement&amp;#039;)	&lt;br /&gt;
	tr:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;In-game description&amp;#039;)&lt;br /&gt;
	if not short_header then&lt;br /&gt;
		tr:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Parent&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	tr:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Actual requirements (if different)&amp;#039;)&lt;br /&gt;
	if not short_header then&lt;br /&gt;
		tr:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;[[Resource location]]&amp;#039;)&lt;br /&gt;
		tr:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Rewards&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return html&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function printFooter()&lt;br /&gt;
	return &amp;#039;&amp;lt;/table&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Public function - called by {{AdvancementTable}}&lt;br /&gt;
function p.table(frame)&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	if args[1] == &amp;#039;foot&amp;#039; then&lt;br /&gt;
		return printFooter()&lt;br /&gt;
	else&lt;br /&gt;
		return printHeader(args[1], false, args[&amp;#039;collapsed&amp;#039;])&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Public function - called by {{Load advancements}}&lt;br /&gt;
function p.load(frame_)&lt;br /&gt;
	frame = frame_ -- store frame for later use by expandTemplate&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	&lt;br /&gt;
	advancement_page = args.page or advancement_page&lt;br /&gt;
	&lt;br /&gt;
	printHeader(&amp;#039;&amp;#039;, true, false)&lt;br /&gt;
	&lt;br /&gt;
	local conditions = {}&lt;br /&gt;
	for name in string.gmatch(args[1], &amp;quot;[^;]+&amp;quot;) do&lt;br /&gt;
		conditions[#conditions + 1] = {&amp;#039;title&amp;#039;, sanitize(name)}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local query = bucket(&amp;#039;advancement&amp;#039;)&lt;br /&gt;
					.select(&amp;#039;title&amp;#039;, &amp;#039;json&amp;#039;)&lt;br /&gt;
					.where(&amp;#039;page_name&amp;#039;, advancement_page)&lt;br /&gt;
					.where(bucket.Or(unpack(conditions)))&lt;br /&gt;
					.run()&lt;br /&gt;
	&lt;br /&gt;
	if query then&lt;br /&gt;
		for i, v in ipairs(query) do&lt;br /&gt;
				local line = mw.text.jsonDecode(v[&amp;#039;json&amp;#039;] or &amp;#039;{}&amp;#039;)&lt;br /&gt;
				printLine(line, false)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if #conditions ~= #query then&lt;br /&gt;
		html:wikitext(&amp;#039;[[Category:Missing advancement]]&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	html:wikitext(printFooter())&lt;br /&gt;
&lt;br /&gt;
	return html&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Deadlydiamond98</name></author>
	</entry>
</feed>