<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.cobblemon.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AUI</id>
	<title>Module:UI - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.cobblemon.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AUI"/>
	<link rel="alternate" type="text/html" href="https://wiki.cobblemon.com/index.php?title=Module:UI&amp;action=history"/>
	<updated>2026-04-12T15:49:44Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://wiki.cobblemon.com/index.php?title=Module:UI&amp;diff=3385&amp;oldid=prev</id>
		<title>Blob at 01:01, 28 October 2023</title>
		<link rel="alternate" type="text/html" href="https://wiki.cobblemon.com/index.php?title=Module:UI&amp;diff=3385&amp;oldid=prev"/>
		<updated>2023-10-28T01:01: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 01:01, 28 October 2023&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-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&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;local slot = require( [[Module:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Silot&lt;/del&gt;]] ).slot&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;local slot = require( [[Module:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Slot&lt;/ins&gt;]] ).slot&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 addSlot = function( args, item, prefix, class, default )&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 addSlot = function( args, item, prefix, class, default )&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 none, nostacksize&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 none, nostacksize&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Blob</name></author>
	</entry>
	<entry>
		<id>https://wiki.cobblemon.com/index.php?title=Module:UI&amp;diff=3384&amp;oldid=prev</id>
		<title>Blob at 01:00, 28 October 2023</title>
		<link rel="alternate" type="text/html" href="https://wiki.cobblemon.com/index.php?title=Module:UI&amp;diff=3384&amp;oldid=prev"/>
		<updated>2023-10-28T01:00:33Z</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 01:00, 28 October 2023&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-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&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;local slot = require( [[Module:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Inventory slot&lt;/del&gt;]] ).slot&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;local slot = require( [[Module:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Silot&lt;/ins&gt;]] ).slot&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 addSlot = function( args, item, prefix, class, default )&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 addSlot = function( args, item, prefix, class, default )&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 none, nostacksize&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 none, nostacksize&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Blob</name></author>
	</entry>
	<entry>
		<id>https://wiki.cobblemon.com/index.php?title=Module:UI&amp;diff=3319&amp;oldid=prev</id>
		<title>Blob: Created page with &quot;local slot = require( Module:Inventory slot ).slot local addSlot = function( args, item, prefix, class, default ) 	local none, nostacksize 	prefix = prefix or &#039;&#039; 	if #prefix == 0 then 		none = &#039;none&#039; 		nostacksize = ((item == &#039;&#039; or nil) and &#039;&#039;) or (args and args[item] and args[item]:gsub( &#039;[,%d]&#039;, &#039;&#039; ) or &#039;&#039;) 	end 	return slot{ 		nostacksize or args[item], mod = args.Mod, link = none or args[prefix .. &#039;link&#039;], 		title = none or args[prefix .. &#039;title&#039;], class = class,...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.cobblemon.com/index.php?title=Module:UI&amp;diff=3319&amp;oldid=prev"/>
		<updated>2023-10-27T15:01:07Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local slot = require( &lt;a href=&quot;/index.php?title=Module:Inventory_slot&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Module:Inventory slot (page does not exist)&quot;&gt;Module:Inventory slot&lt;/a&gt; ).slot local addSlot = function( args, item, prefix, class, default ) 	local none, nostacksize 	prefix = prefix or &amp;#039;&amp;#039; 	if #prefix == 0 then 		none = &amp;#039;none&amp;#039; 		nostacksize = ((item == &amp;#039;&amp;#039; or nil) and &amp;#039;&amp;#039;) or (args and args[item] and args[item]:gsub( &amp;#039;[,%d]&amp;#039;, &amp;#039;&amp;#039; ) or &amp;#039;&amp;#039;) 	end 	return slot{ 		nostacksize or args[item], mod = args.Mod, link = none or args[prefix .. &amp;#039;link&amp;#039;], 		title = none or args[prefix .. &amp;#039;title&amp;#039;], class = class,...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local slot = require( [[Module:Inventory slot]] ).slot&lt;br /&gt;
local addSlot = function( args, item, prefix, class, default )&lt;br /&gt;
	local none, nostacksize&lt;br /&gt;
	prefix = prefix or &amp;#039;&amp;#039;&lt;br /&gt;
	if #prefix == 0 then&lt;br /&gt;
		none = &amp;#039;none&amp;#039;&lt;br /&gt;
		nostacksize = ((item == &amp;#039;&amp;#039; or nil) and &amp;#039;&amp;#039;) or (args and args[item] and args[item]:gsub( &amp;#039;[,%d]&amp;#039;, &amp;#039;&amp;#039; ) or &amp;#039;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return slot{&lt;br /&gt;
		nostacksize or args[item], mod = args.Mod, link = none or args[prefix .. &amp;#039;link&amp;#039;],&lt;br /&gt;
		title = none or args[prefix .. &amp;#039;title&amp;#039;], class = class, default = default,&lt;br /&gt;
		parsed = args.parsed&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function experience_image(exp_value)&lt;br /&gt;
&lt;br /&gt;
	local MINMAX = {&lt;br /&gt;
	  {-32768, 2},&lt;br /&gt;
	  {3, 6},&lt;br /&gt;
	  {7, 16},&lt;br /&gt;
	  {17, 36},&lt;br /&gt;
	  {37, 72},&lt;br /&gt;
	  {73, 148},&lt;br /&gt;
	  {149, 306},&lt;br /&gt;
	  {307, 616},&lt;br /&gt;
	  {617, 1236},&lt;br /&gt;
	  {1237, 2476},&lt;br /&gt;
	  {2477, 32767}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local EXP_IMGS = {&lt;br /&gt;
		&amp;quot;Experience Orb Value -32768-2.png&amp;quot;,&lt;br /&gt;
		&amp;quot;Experience Orb Value 3-6.png&amp;quot;,&lt;br /&gt;
		&amp;quot;Experience Orb Value 7-16.png&amp;quot;,&lt;br /&gt;
		&amp;quot;Experience Orb Value 17-36.png&amp;quot;,&lt;br /&gt;
		&amp;quot;Experience Orb Value 37-72.png&amp;quot;,&lt;br /&gt;
		&amp;quot;Experience Orb Value 73-148.png&amp;quot;,&lt;br /&gt;
		&amp;quot;Experience Orb Value 149-306.png&amp;quot;,&lt;br /&gt;
		&amp;quot;Experience Orb Value 307-616.png&amp;quot;,&lt;br /&gt;
		&amp;quot;Experience Orb Value 617-1236.png&amp;quot;,&lt;br /&gt;
		&amp;quot;Experience Orb Value 1237-2476.png&amp;quot;,&lt;br /&gt;
		&amp;quot;Experience Orb Value 2477-32767.png&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local n = assert( tonumber(exp_value), &amp;quot;Module:UI: Experience value is not a number (&amp;quot; .. exp_value .. &amp;quot;)&amp;quot; )&lt;br /&gt;
	&lt;br /&gt;
	local idx = 2; exp = tonumber( exp_value )&lt;br /&gt;
	if exp &amp;lt;= MINMAX[#MINMAX][2] then&lt;br /&gt;
	  for i = 1, #MINMAX do&lt;br /&gt;
		if MINMAX[i][1] &amp;lt; exp and MINMAX[i][2] &amp;gt;= exp then&lt;br /&gt;
		  idx = i&lt;br /&gt;
		  break&lt;br /&gt;
		end&lt;br /&gt;
	  end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tostring( EXP_IMGS[idx] )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Crafting table&lt;br /&gt;
function p.craftingTable( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = f:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local body = mw.html.create( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui mcui-Crafting_Table pixel-image&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	local input = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-input&amp;#039; )&lt;br /&gt;
	for num = 1, 3 do&lt;br /&gt;
		local row = input:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-row&amp;#039; )&lt;br /&gt;
		for _, letter in ipairs{ &amp;#039;A&amp;#039;, &amp;#039;B&amp;#039;, &amp;#039;C&amp;#039; } do&lt;br /&gt;
			row:wikitext( addSlot( args, letter .. num, &amp;#039;I&amp;#039; ) )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local arrow = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-arrow&amp;#039; ):tag( &amp;#039;br&amp;#039; ):done()&lt;br /&gt;
	if args.arrow or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		arrow:css(&lt;br /&gt;
			&amp;#039;background-image&amp;#039;,&lt;br /&gt;
			&amp;#039;{{FileUrl|&amp;#039; .. args.arrow .. &amp;#039; (&amp;#039; .. args.Mod .. &amp;#039;).png}}&amp;#039;&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	body&lt;br /&gt;
		:tag( &amp;#039;span&amp;#039; )&lt;br /&gt;
			:addClass( &amp;#039;mcui-output&amp;#039; )&lt;br /&gt;
			:wikitext( addSlot( args, &amp;#039;Output&amp;#039;, &amp;#039;O&amp;#039;, &amp;#039;invslot-large&amp;#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	local shapeless = args.shapeless or &amp;#039;&amp;#039;&lt;br /&gt;
	local fixed = args.fixed or &amp;#039;&amp;#039;&lt;br /&gt;
	if shapeless ~= &amp;#039;&amp;#039; or fixed ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		local icon = body:tag( &amp;#039;span&amp;#039; )&lt;br /&gt;
			:addClass( &amp;#039;mcui-icons&amp;#039; )&lt;br /&gt;
			:tag( &amp;#039;span&amp;#039; )&lt;br /&gt;
				:tag( &amp;#039;br&amp;#039; )&lt;br /&gt;
			:done()&lt;br /&gt;
		if shapeless ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			icon:addClass( &amp;#039;mcui-shapeless&amp;#039; )&lt;br /&gt;
				:attr( &amp;#039;title&amp;#039;,&lt;br /&gt;
					&amp;#039;This recipe is shapeless, the inputs may be placed in any arrangement in the crafting grid.&amp;#039;&lt;br /&gt;
				)&lt;br /&gt;
		elseif fixed ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			local notFixed = args.notfixed or &amp;#039;&amp;#039;&lt;br /&gt;
			local exceptFixed = &amp;#039;&amp;#039;&lt;br /&gt;
			if notFixed ~= &amp;#039;&amp;#039; then&lt;br /&gt;
				exceptFixed = &amp;#039;; except for &amp;#039; .. notFixed .. &amp;#039;, which can go anywhere&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			icon:addClass( &amp;#039;mcui-fixed&amp;#039; )&lt;br /&gt;
				:attr( &amp;#039;title&amp;#039;,&lt;br /&gt;
					&amp;#039;This recipe is fixed, the input arrangement may not be moved or mirrored in the crafting grid&amp;#039; .. exceptFixed .. &amp;#039;.&amp;#039;&lt;br /&gt;
				)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tostring( mw.html.create( &amp;#039;div&amp;#039; ):node( body ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Furnace&lt;br /&gt;
function p.furnace( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = f:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local body = mw.html.create( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui mcui-Furnace pixel-image&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	local input = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-input&amp;#039; )&lt;br /&gt;
	input:wikitext( addSlot( args, &amp;#039;Input&amp;#039;, &amp;#039;I&amp;#039; ) )&lt;br /&gt;
	local fuel = input:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-fuel&amp;#039; ):tag( &amp;#039;br&amp;#039; ):done()&lt;br /&gt;
	local fuelImg = args.FuelUsage or &amp;#039;&amp;#039;&lt;br /&gt;
	local burning = args.Input or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; and args.Fuel or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039;&lt;br /&gt;
	if not burning then&lt;br /&gt;
		fuel:addClass( &amp;#039;mcui-inactive&amp;#039; )&lt;br /&gt;
		if fuelImg ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			fuelImg = fuelImg .. &amp;#039; (in-active)&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if fuelImg ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		fuel:css(&lt;br /&gt;
			&amp;#039;background-image&amp;#039;,&lt;br /&gt;
			&amp;#039;{{FileUrl|&amp;#039; .. fuelImg .. &amp;#039; (&amp;#039; .. args.Mod .. &amp;#039;).png}}&amp;#039;&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	input:wikitext( addSlot( args, &amp;#039;Fuel&amp;#039;, &amp;#039;F&amp;#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	local arrow = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-arrow&amp;#039; ):tag( &amp;#039;br&amp;#039; ):done()&lt;br /&gt;
	local arrowImg = args.Progress or &amp;#039;&amp;#039;&lt;br /&gt;
	if not burning or ( args.Output or &amp;#039;&amp;#039; ) == &amp;#039;&amp;#039; then&lt;br /&gt;
		arrow:addClass( &amp;#039;mcui-inactive&amp;#039; )&lt;br /&gt;
		if arrowImg ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			arrowImg = arrowImg .. &amp;#039; (in-active)&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if arrowImg ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		arrow:css(&lt;br /&gt;
			&amp;#039;background-image&amp;#039;,&lt;br /&gt;
			&amp;#039;{{FileUrl|&amp;#039; .. arrowImg .. &amp;#039; Progress (&amp;#039; .. args.Mod .. &amp;#039;).png}}&amp;#039;&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	body&lt;br /&gt;
		:tag( &amp;#039;span&amp;#039; )&lt;br /&gt;
			:addClass( &amp;#039;mcui-output&amp;#039; )&lt;br /&gt;
			:wikitext( addSlot( args, &amp;#039;Output&amp;#039;, &amp;#039;O&amp;#039;, &amp;#039;invslot-large&amp;#039; ) )&lt;br /&gt;
			&lt;br /&gt;
	args.Experience = args.Experience or &amp;#039;&amp;#039;&lt;br /&gt;
	if args.Experience ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		-- Converts commas to dots, removes all spaces and splits the arguments with semicolon.&lt;br /&gt;
		local split = mw.text.split(string.gsub(args.Experience, &amp;#039;[ ,]&amp;#039;, {[&amp;#039; &amp;#039;] = &amp;#039;&amp;#039;, [&amp;#039;,&amp;#039;] = &amp;#039;.&amp;#039;}), &amp;#039;;&amp;#039;, true)&lt;br /&gt;
		local animated = body:tag(&amp;#039;span&amp;#039;):attr(&amp;#039;title&amp;#039;, &amp;#039;If there is a fractional part, it means the recipe has a chance equal to the fractional part of rewarding an additional XP point.&amp;#039;)&lt;br /&gt;
							 :addClass(&amp;#039;animated&amp;#039;):cssText(&amp;#039;position:absolute;top:92px;left:108px;text-align:center;width:70px;&amp;#039;)&lt;br /&gt;
		local isNotFirst = true&lt;br /&gt;
		for i, v in ipairs(split) do&lt;br /&gt;
			assert(tonumber(v), &amp;#039;Module:UI: &amp;quot;&amp;#039; .. v .. &amp;#039;&amp;quot; is not a valid number&amp;#039;)&lt;br /&gt;
			local xp = tonumber(v)&lt;br /&gt;
			animated:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
					:addClass(isNotFirst and &amp;#039;animated-active&amp;#039; or nil)&lt;br /&gt;
					:wikitext(&amp;#039;&amp;lt;span style=&amp;quot;display:inline-block;margin-top:3px;width:16px;height:16px;vertical-align:top;background-size:16px 16px;background-image:{{FileUrl|&amp;#039; .. experience_image(xp) .. &amp;#039;}}&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
						.. &amp;#039;&amp;lt;span style=&amp;quot;display:inline-block;vertical-align:top;font-family:Minecraft;font-size:16px;color:#404040&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
						.. (&amp;#039;&amp;amp;nbsp;&amp;#039; and xp &amp;gt; 72 or &amp;#039;&amp;#039;) .. xp .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;)&lt;br /&gt;
			isNotFirst = false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tostring( mw.html.create( &amp;#039;div&amp;#039; ):node( body ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Brewing Stand&lt;br /&gt;
function p.brewingStand( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = f:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local body = mw.html.create( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui mcui-Brewing_Stand pixel-image&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	local input = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-input&amp;#039; )&lt;br /&gt;
	input:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-bubbling&amp;#039; ):tag( &amp;#039;br&amp;#039; )&lt;br /&gt;
	input:wikitext( addSlot( args, &amp;#039;Input&amp;#039;, &amp;#039;I&amp;#039; ) )&lt;br /&gt;
	input:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-arrow&amp;#039; ):tag( &amp;#039;br&amp;#039; )&lt;br /&gt;
	if ( args.Input or &amp;#039;&amp;#039; ) == &amp;#039;&amp;#039; or&lt;br /&gt;
		( ( args.Output1 or &amp;#039;&amp;#039; ) == &amp;#039;&amp;#039; and ( args.Output2 or &amp;#039;&amp;#039; ) == &amp;#039;&amp;#039; and ( args.Output3 or &amp;#039;&amp;#039; ) == &amp;#039;&amp;#039; )&lt;br /&gt;
	then&lt;br /&gt;
		input:addClass( &amp;#039;mcui-inactive&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-paths&amp;#039; ):tag( &amp;#039;br&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	local output = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-output&amp;#039; )&lt;br /&gt;
	for i = 1, 3 do&lt;br /&gt;
		output:wikitext( addSlot( args, &amp;#039;Output&amp;#039; .. i, &amp;#039;O&amp;#039; .. i, &amp;#039;mcui-output&amp;#039; .. i ) )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tostring( mw.html.create( &amp;#039;div&amp;#039; ):node( body ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Stonecutter&lt;br /&gt;
function p.stonecutter( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = f:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local body = mw.html.create( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui mcui-Stonecutter pixel-image&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	local input = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-input&amp;#039; )&lt;br /&gt;
	input:wikitext( addSlot( args, &amp;#039;Input&amp;#039;, &amp;#039;I&amp;#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	local arrow = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-stonecutterArrow&amp;#039; )&lt;br /&gt;
	if (args.arrow or &amp;#039;&amp;#039;) ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		arrow:css(&lt;br /&gt;
			&amp;#039;background-image&amp;#039;,&lt;br /&gt;
			&amp;#039;{{FileUrl|&amp;#039; .. args.arrow .. &amp;#039; (&amp;#039; .. args.Mod .. &amp;#039;).png}}&amp;#039;&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
		arrow:wikitext( addSlot( args, &amp;#039;Output&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;invslot-plain mcui-stonecutterSprite&amp;#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	body&lt;br /&gt;
		:tag( &amp;#039;span&amp;#039; )&lt;br /&gt;
			:addClass( &amp;#039;mcui-output&amp;#039; )&lt;br /&gt;
			:wikitext( addSlot( args, &amp;#039;Output&amp;#039;, &amp;#039;O&amp;#039;, &amp;#039;invslot-large&amp;#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	return tostring( mw.html.create( &amp;#039;div&amp;#039; ):node( body ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Loom&lt;br /&gt;
function p.loom( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = f:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local body = mw.html.create( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui mcui-Loom pixel-image&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	local tapestry = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-tapestry&amp;#039; )&lt;br /&gt;
	if args.Banner and #args.Banner&amp;gt;0 then&lt;br /&gt;
		tapestry:wikitext( addSlot( args, &amp;#039;Banner&amp;#039;, &amp;#039;B&amp;#039;, &amp;#039;mcui-inputBanner&amp;#039; ) )&lt;br /&gt;
	end&lt;br /&gt;
	if args.Dye and #args.Dye&amp;gt;0 then&lt;br /&gt;
		tapestry:wikitext( addSlot( args, &amp;#039;Dye&amp;#039;, &amp;#039;D&amp;#039;, &amp;#039;mcui-inputDye&amp;#039; ) )&lt;br /&gt;
	end&lt;br /&gt;
	if args.Pattern and #args.Pattern&amp;gt;0 then&lt;br /&gt;
		tapestry:wikitext( addSlot( args, &amp;#039;Pattern&amp;#039;, &amp;#039;P&amp;#039;, &amp;#039;mcui-inputPattern&amp;#039; ) )&lt;br /&gt;
	end&lt;br /&gt;
	tapestry:tag( &amp;#039;span&amp;#039; ):tag( &amp;#039;br&amp;#039; ):done()&lt;br /&gt;
	local arrow = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-loomArrow&amp;#039; )&lt;br /&gt;
	if args.arrow or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		arrow:css(&lt;br /&gt;
			&amp;#039;background-image&amp;#039;,&lt;br /&gt;
			&amp;#039;{{FileUrl|&amp;#039; .. args.arrow .. &amp;#039; (&amp;#039; .. args.Mod .. &amp;#039;).png}}&amp;#039;&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local sprite = args.Sprite&lt;br /&gt;
	local bannerSprite&lt;br /&gt;
	if sprite and #sprite&amp;gt;0 then&lt;br /&gt;
		local animate = require( [[Module:AnimateSprite]] ).animate&lt;br /&gt;
		bannerSprite = animate{&lt;br /&gt;
			args.Sprite,&lt;br /&gt;
			sheet = &amp;#039;SlotSprite&amp;#039;&lt;br /&gt;
		}&lt;br /&gt;
	else&lt;br /&gt;
		bannerSprite = &amp;#039;&amp;lt;br&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	arrow&lt;br /&gt;
		:tag( &amp;#039;span&amp;#039; )&lt;br /&gt;
		:addClass( &amp;#039;mcui-bannerSprite&amp;#039; )&lt;br /&gt;
		:wikitext( bannerSprite )&lt;br /&gt;
	&lt;br /&gt;
	body&lt;br /&gt;
		:tag( &amp;#039;span&amp;#039; )&lt;br /&gt;
			:addClass( &amp;#039;mcui-output&amp;#039; )&lt;br /&gt;
			:wikitext( addSlot( args, &amp;#039;Output&amp;#039;, &amp;#039;O&amp;#039;, &amp;#039;invslot-large&amp;#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	return tostring( mw.html.create( &amp;#039;div&amp;#039; ):node( body ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Grindstone&lt;br /&gt;
function p.grindstone( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = f:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local body = mw.html.create( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui mcui-Grindstone pixel-image&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	local grindstone = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-grindstone&amp;#039; )&lt;br /&gt;
		grindstone:wikitext( addSlot( args, &amp;#039;Input1&amp;#039;, &amp;#039;I1&amp;#039;, &amp;#039;mcui-input1&amp;#039; ) )&lt;br /&gt;
		grindstone:wikitext( addSlot( args, &amp;#039;Input2&amp;#039;, &amp;#039;I2&amp;#039;, &amp;#039;mcui-input2&amp;#039; ) )&lt;br /&gt;
	local arrow = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-arrow&amp;#039; )&lt;br /&gt;
	if args.arrow or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		arrow:css(&lt;br /&gt;
			&amp;#039;background-image&amp;#039;,&lt;br /&gt;
			&amp;#039;{{FileUrl|&amp;#039; .. args.arrow .. &amp;#039; (&amp;#039; .. args.Mod .. &amp;#039;).png}}&amp;#039;&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	body&lt;br /&gt;
		:tag( &amp;#039;span&amp;#039; )&lt;br /&gt;
			:addClass( &amp;#039;mcui-output&amp;#039; )&lt;br /&gt;
			:wikitext( addSlot( args, &amp;#039;Output&amp;#039;, &amp;#039;O&amp;#039;, &amp;#039;invslot-large&amp;#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	return tostring( mw.html.create( &amp;#039;div&amp;#039; ):node( body ) )&lt;br /&gt;
end&lt;br /&gt;
-- Smithing Table&lt;br /&gt;
function p.smithing (f) &lt;br /&gt;
local args = f&lt;br /&gt;
if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = f:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
return tostring( mw.html.create( &amp;#039;div&amp;#039; ):node( body ) )&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Blob</name></author>
	</entry>
</feed>