<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.mineinabyss.com/w/Module:UI/history?feed=atom</id>
	<title>Module:UI - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.mineinabyss.com/w/Module:UI/history?feed=atom"/>
	<link rel="alternate" type="text/html" href="https://wiki.mineinabyss.com/w/Module:UI/history"/>
	<updated>2026-04-10T13:19:06Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://wiki.mineinabyss.com/index.php?title=Module:UI&amp;diff=351&amp;oldid=prev</id>
		<title>Scyu: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineinabyss.com/index.php?title=Module:UI&amp;diff=351&amp;oldid=prev"/>
		<updated>2024-10-11T13:03:14Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&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 13:03, 11 October 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key my_wiki:diff:1.41:old-350:rev-351 --&gt;
&lt;/table&gt;</summary>
		<author><name>Scyu</name></author>
	</entry>
	<entry>
		<id>https://wiki.mineinabyss.com/index.php?title=Module:UI&amp;diff=350&amp;oldid=prev</id>
		<title>minecraft&gt;ItsPlantseed: Fixed anvil item name. A lot of these styles should be moved outside of module.</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineinabyss.com/index.php?title=Module:UI&amp;diff=350&amp;oldid=prev"/>
		<updated>2024-08-02T14:02:50Z</updated>

		<summary type="html">&lt;p&gt;Fixed anvil item name. A lot of these styles should be moved outside of module.&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_class(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;xp-2&amp;quot;,&lt;br /&gt;
		&amp;quot;xp-6&amp;quot;,&lt;br /&gt;
		&amp;quot;xp-16&amp;quot;,&lt;br /&gt;
		&amp;quot;xp-36&amp;quot;,&lt;br /&gt;
		&amp;quot;xp-72&amp;quot;,&lt;br /&gt;
		&amp;quot;xp-148&amp;quot;,&lt;br /&gt;
		&amp;quot;xp-306&amp;quot;,&lt;br /&gt;
		&amp;quot;xp-616&amp;quot;,&lt;br /&gt;
		&amp;quot;xp-1236&amp;quot;,&lt;br /&gt;
		&amp;quot;xp-2476&amp;quot;,&lt;br /&gt;
		&amp;quot;xp-32767&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;XP reward. 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 mcui-experience&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;
			local xpWrapper = animated:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
					:addClass(isNotFirst and &amp;#039;animated-active&amp;#039; or nil)&lt;br /&gt;
			xpWrapper:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
					:addClass(experience_class(xp) .. &amp;#039; mcui-experience-orb&amp;#039;)&lt;br /&gt;
			xpWrapper:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
					:addClass(&amp;#039;mcui-experience-text&amp;#039;)&lt;br /&gt;
					:wikitext((&amp;#039;&amp;amp;nbsp;&amp;#039; and xp &amp;gt; 72 or &amp;#039;&amp;#039;) .. xp)&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&lt;br /&gt;
		:tag( &amp;#039;span&amp;#039; )&lt;br /&gt;
			:addClass( &amp;#039;mcui-paths&amp;#039; )&lt;br /&gt;
			: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 bannerSprite&lt;br /&gt;
	if args.Sprite and #args.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;
			name = &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;
		&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;
&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;
	&lt;br /&gt;
	local body = mw.html.create( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui mcui-Smithing_Table pixel-image&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	local smithingTable = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-smithingTable&amp;#039; )&lt;br /&gt;
	smithingTable:wikitext( addSlot( args, &amp;#039;Input1&amp;#039;, &amp;#039;I1&amp;#039;, &amp;#039;mcui-input1&amp;#039; ) )&lt;br /&gt;
	smithingTable:wikitext( addSlot( args, &amp;#039;Input2&amp;#039;, &amp;#039;I2&amp;#039;, &amp;#039;mcui-input2&amp;#039; ) )&lt;br /&gt;
	smithingTable:wikitext( addSlot( args, &amp;#039;Input3&amp;#039;, &amp;#039;I3&amp;#039;, &amp;#039;mcui-input3&amp;#039; ) )&lt;br /&gt;
		&lt;br /&gt;
	local arrow = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-arrow&amp;#039; )&lt;br /&gt;
	arrow:cssText([[display: inline-block;&lt;br /&gt;
					width: 44px;&lt;br /&gt;
					height: 30px;&lt;br /&gt;
					margin: 3px 18px;&lt;br /&gt;
					vertical-align: top;]])&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;
	if args.crossed then arrow:addClass(&amp;#039;mcui-inactive&amp;#039;) 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&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;
-- Anvil&lt;br /&gt;
function p.anvil (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-Anvil pixel-image&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	local hammer = body:tag( &amp;#039;span&amp;#039; ):addClass(&amp;#039;mcui-hammer&amp;#039;)&lt;br /&gt;
	hammer:cssText([[display: block;&lt;br /&gt;
					 width: 60px;&lt;br /&gt;
					 height: 60px;]])&lt;br /&gt;
	                    &lt;br /&gt;
	local title = body:tag( &amp;#039;span&amp;#039; ):addClass(&amp;#039;mcui-Anvil-inputbox mcui-input&amp;#039;)&lt;br /&gt;
	local itemName&lt;br /&gt;
	if args.Input1 and #args.Input1&amp;gt;0 then&lt;br /&gt;
		local animate = require( [[Module:AnimateText]] ).animate&lt;br /&gt;
		itemName = animate{&lt;br /&gt;
			args.Input1:gsub( &amp;#039;;&amp;#039; , &amp;#039;,,&amp;#039; )&lt;br /&gt;
	    }&lt;br /&gt;
	else&lt;br /&gt;
		title:addClass( &amp;#039;mcui-inactive&amp;#039; )&lt;br /&gt;
		itemName = &amp;#039;&amp;lt;br&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	title:wikitext( ( itemName:gsub( &amp;#039;class=&amp;quot;animated&amp;quot;&amp;#039;, &amp;#039;class=&amp;quot;mcui-Anvil-inputtext animated&amp;quot;&amp;#039; ) ) )&lt;br /&gt;
	&lt;br /&gt;
	local anvilA = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-anvil&amp;#039; ):css(&amp;#039;margin-left&amp;#039;, &amp;#039;18px&amp;#039;)&lt;br /&gt;
	anvilA:wikitext( addSlot( args, &amp;#039;Input1&amp;#039;, &amp;#039;I1&amp;#039;, &amp;#039;mcui-input1&amp;#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	local plus = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-plus&amp;#039; )&lt;br /&gt;
	plus:cssText([[display: inline-block;&lt;br /&gt;
				   width: 26px;&lt;br /&gt;
				   height: 26px;&lt;br /&gt;
				   margin: 6px 18px;&lt;br /&gt;
				   vertical-align: top;]])&lt;br /&gt;
	&lt;br /&gt;
	local anvilB = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-anvil&amp;#039; )&lt;br /&gt;
	anvilB:wikitext( addSlot( args, &amp;#039;Input2&amp;#039;, &amp;#039;I2&amp;#039;, &amp;#039;mcui-input2&amp;#039; ) )&lt;br /&gt;
		&lt;br /&gt;
	local arrow = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-arrow&amp;#039; )&lt;br /&gt;
    arrow:cssText([[display: inline-block;&lt;br /&gt;
					width: 44px;&lt;br /&gt;
					height: 30px;&lt;br /&gt;
					margin: 4px 18px;&lt;br /&gt;
					vertical-align: top;]])&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;
	if args.crossed then&lt;br /&gt;
		arrow:addClass(&amp;#039;mcui-inactive&amp;#039;)&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;
			:css( &amp;#039;margin-right&amp;#039;, &amp;#039;18px&amp;#039; )&lt;br /&gt;
			:wikitext( addSlot( args, &amp;#039;Output&amp;#039;, &amp;#039;O&amp;#039;, &amp;#039;invslot&amp;#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	if args.cost then&lt;br /&gt;
		local cost = body:tag(&amp;#039;span&amp;#039;):addClass(&amp;#039;mcui-Anvil-cost&amp;#039;)&lt;br /&gt;
		if args.expensive then&lt;br /&gt;
			cost:addClass(&amp;#039;mcui-Anvil-cost-expensive&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			cost:addClass(&amp;#039;mcui-Anvil-cost-normal&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args.cost == &amp;#039;expensive&amp;#039; then&lt;br /&gt;
			cost:wikitext(&amp;#039;Too expensive&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			cost:wikitext(&amp;#039;Enchantment Cost: &amp;#039; .. args.cost)&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;
function p.legacySmithing (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-Smithing_Table pixel-image&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	local smithingA = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-smithingTable&amp;#039; )&lt;br /&gt;
	smithingA:wikitext( addSlot( args, &amp;#039;Input1&amp;#039;, &amp;#039;I1&amp;#039;, &amp;#039;mcui-input1&amp;#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	local plus = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-plus&amp;#039; )&lt;br /&gt;
	plus:cssText([[display: inline-block;&lt;br /&gt;
				   width: 26px;&lt;br /&gt;
				   height: 26px;&lt;br /&gt;
				   margin: 6px 18px;&lt;br /&gt;
				   vertical-align: top;]])&lt;br /&gt;
	&lt;br /&gt;
	local smithingB = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-smithingTable&amp;#039; )	&lt;br /&gt;
	smithingB:wikitext( addSlot( args, &amp;#039;Input2&amp;#039;, &amp;#039;I2&amp;#039;, &amp;#039;mcui-input2 invslot-default-smithing&amp;#039; ) )&lt;br /&gt;
		&lt;br /&gt;
	local arrow = body:tag( &amp;#039;span&amp;#039; ):addClass( &amp;#039;mcui-arrow&amp;#039; )&lt;br /&gt;
	arrow:cssText([[display: inline-block;&lt;br /&gt;
					width: 44px;&lt;br /&gt;
					height: 30px;&lt;br /&gt;
					margin: 4px 18px;&lt;br /&gt;
					vertical-align: top;]])&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;
	if args.crossed then arrow:addClass(&amp;#039;mcui-inactive&amp;#039;) 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&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;
return p&lt;/div&gt;</summary>
		<author><name>minecraft&gt;ItsPlantseed</name></author>
	</entry>
</feed>