<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://sls.wiki/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3AUI</id>
	<title>模块:UI - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://sls.wiki/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3AUI"/>
	<link rel="alternate" type="text/html" href="https://sls.wiki/index.php?title=%E6%A8%A1%E5%9D%97:UI&amp;action=history"/>
	<updated>2026-05-03T20:15:28Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://sls.wiki/index.php?title=%E6%A8%A1%E5%9D%97:UI&amp;diff=1055&amp;oldid=prev</id>
		<title>Kesager：​导入1个版本</title>
		<link rel="alternate" type="text/html" href="https://sls.wiki/index.php?title=%E6%A8%A1%E5%9D%97:UI&amp;diff=1055&amp;oldid=prev"/>
		<updated>2022-10-06T08:18:45Z</updated>

		<summary type="html">&lt;p&gt;导入1个版本&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;zh-Hans-CN&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2022年10月6日 (四) 16:18的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;zh-Hans-CN&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;（没有差异）&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key wiki:diff:1.41:old-1054:rev-1055 --&gt;
&lt;/table&gt;</summary>
		<author><name>Kesager</name></author>
	</entry>
	<entry>
		<id>https://sls.wiki/index.php?title=%E6%A8%A1%E5%9D%97:UI&amp;diff=1054&amp;oldid=prev</id>
		<title>SJMC&gt;ART1st：​导入1个版本</title>
		<link rel="alternate" type="text/html" href="https://sls.wiki/index.php?title=%E6%A8%A1%E5%9D%97:UI&amp;diff=1054&amp;oldid=prev"/>
		<updated>2022-05-10T06:32:09Z</updated>

		<summary type="html">&lt;p&gt;导入1个版本&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&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;
&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;此配方是无序的，原料可以放置在合成网格的任意位置。&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;除了&amp;#039; .. notFixed .. &amp;#039;可以被放置在任意位置外，&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;此配方是固定的。&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;如果有小数部分，表示此配方有小数部分的几率获得额外的1经验值。&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;模块:UI: &amp;quot;&amp;#039; .. v .. &amp;#039;&amp;quot;不是有效的数字。&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;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>SJMC&gt;ART1st</name></author>
	</entry>
</feed>