From 7243a25fe6c98ad3bca206b5ad8310462598d93a Mon Sep 17 00:00:00 2001
From: Wuzzy <Wuzzy2@mail.ru>
Date: Tue, 24 Mar 2020 18:48:14 +0100
Subject: [PATCH] Generate item slot images on the fly

---
 mods/HUD/mcl_formspec/init.lua                |  11 +++++++++
 mods/HUD/mcl_formspec/mod.conf                |   1 +
 .../textures/mcl_formspec_itemslot.png        | Bin 0 -> 231 bytes
 mods/HUD/mcl_inventory/creative.lua           |   8 +++++++
 mods/HUD/mcl_inventory/depends.txt            |   1 +
 mods/HUD/mcl_inventory/init.lua               |   8 +++++++
 .../textures/crafting_formspec_bg.png         | Bin 1431 -> 1030 bytes
 .../textures/crafting_formspec_bg2.png        | Bin 861 -> 0 bytes
 .../textures/crafting_inventory_9_slots.png   | Bin 1153 -> 0 bytes
 .../textures/crafting_inventory_creative.png  | Bin 1517 -> 1246 bytes
 .../crafting_inventory_creative_survival.png  | Bin 1516 -> 1419 bytes
 .../ITEMS/REDSTONE/mcl_dispensers/depends.txt |   1 +
 mods/ITEMS/REDSTONE/mcl_dispensers/init.lua   |   1 -
 mods/ITEMS/REDSTONE/mcl_droppers/depends.txt  |   1 +
 mods/ITEMS/REDSTONE/mcl_droppers/init.lua     |   1 -
 mods/ITEMS/mcl_anvils/depends.txt             |   1 +
 mods/ITEMS/mcl_anvils/init.lua                |   5 ++++
 .../textures/mcl_anvils_inventory.png         | Bin 1088 -> 699 bytes
 mods/ITEMS/mcl_chests/depends.txt             |   1 +
 mods/ITEMS/mcl_chests/init.lua                |  22 ++++++++++++++----
 .../textures/mcl_chests_inventory_chest.png   | Bin 1195 -> 0 bytes
 .../mcl_chests_inventory_chest_large.png      | Bin 1562 -> 0 bytes
 mods/ITEMS/mcl_crafting_table/depends.txt     |   1 +
 mods/ITEMS/mcl_crafting_table/init.lua        |   6 ++++-
 .../textures/crafting_inventory_workbench.png | Bin 1282 -> 281 bytes
 mods/ITEMS/mcl_furnaces/depends.txt           |   1 +
 mods/ITEMS/mcl_furnaces/init.lua              |  12 ++++++++--
 .../textures/crafting_inventory_furnace.png   | Bin 1166 -> 0 bytes
 mods/ITEMS/mcl_hoppers/depends.txt            |   1 +
 mods/ITEMS/mcl_hoppers/init.lua               |   4 +++-
 .../textures/mcl_hoppers_inventory.png        | Bin 992 -> 0 bytes
 31 files changed, 76 insertions(+), 11 deletions(-)
 create mode 100644 mods/HUD/mcl_formspec/init.lua
 create mode 100644 mods/HUD/mcl_formspec/mod.conf
 create mode 100644 mods/HUD/mcl_formspec/textures/mcl_formspec_itemslot.png
 delete mode 100644 mods/HUD/mcl_inventory/textures/crafting_formspec_bg2.png
 delete mode 100644 mods/HUD/mcl_inventory/textures/crafting_inventory_9_slots.png
 delete mode 100644 mods/ITEMS/mcl_chests/textures/mcl_chests_inventory_chest.png
 delete mode 100644 mods/ITEMS/mcl_chests/textures/mcl_chests_inventory_chest_large.png
 delete mode 100644 mods/ITEMS/mcl_furnaces/textures/crafting_inventory_furnace.png
 delete mode 100644 mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_inventory.png

diff --git a/mods/HUD/mcl_formspec/init.lua b/mods/HUD/mcl_formspec/init.lua
new file mode 100644
index 00000000..7013fc0e
--- /dev/null
+++ b/mods/HUD/mcl_formspec/init.lua
@@ -0,0 +1,11 @@
+mcl_formspec = {}
+
+function mcl_formspec.get_itemslot_bg(x, y, w, h)
+	local out = ""
+	for i = 0, w - 1, 1 do
+		for j = 0, h - 1, 1 do
+			out = out .."image["..x+i..","..y+j..";1,1;mcl_formspec_itemslot.png]"
+		end
+	end
+	return out
+end
diff --git a/mods/HUD/mcl_formspec/mod.conf b/mods/HUD/mcl_formspec/mod.conf
new file mode 100644
index 00000000..9d614403
--- /dev/null
+++ b/mods/HUD/mcl_formspec/mod.conf
@@ -0,0 +1 @@
+description = Helper mod to simplify creation of formspecs a little bit
diff --git a/mods/HUD/mcl_formspec/textures/mcl_formspec_itemslot.png b/mods/HUD/mcl_formspec/textures/mcl_formspec_itemslot.png
new file mode 100644
index 0000000000000000000000000000000000000000..84958ecd4234850d627aa868c382df5d322d0f8c
GIT binary patch
literal 231
zcmeAS@N?(olHy`uVBq!ia0y~yVDJKA4kiW$hRK^k)fgBU*pj^6T^Rm@;DWu&Co?cG
za29w(7Bet#3xhBt!>l<H3=9nHC7!;n>`$15xs1fsEmglVFff#Ox;TbZ+<JR^BQJv?
z2ZQ0isdsNQbp3tqaZto@A5&KMEPdnT<h!zh^=sapS*3NoTHl6Tut#_9Pl0(atNKeB
Z?ccNQ@7wC&#K6G7;OXk;vd$@?2>|xcL=6A{

literal 0
HcmV?d00001

diff --git a/mods/HUD/mcl_inventory/creative.lua b/mods/HUD/mcl_inventory/creative.lua
index d5b5e474..0b5f52b6 100644
--- a/mods/HUD/mcl_inventory/creative.lua
+++ b/mods/HUD/mcl_inventory/creative.lua
@@ -325,11 +325,16 @@ mcl_inventory.set_creative_formspec = function(player, start_i, pagenum, inv_siz
 
 			-- Survival inventory slots
 			main_list = "list[current_player;main;0,3.75;9,3;9]"..
+				mcl_formspec.get_itemslot_bg(0,3.75,9,3)..
 				-- armor
 				"list[detached:"..playername.."_armor;armor;2.5,1.3;1,1;1]"..
 				"list[detached:"..playername.."_armor;armor;2.5,2.75;1,1;2]"..
 				"list[detached:"..playername.."_armor;armor;5.5,1.3;1,1;3]"..
 				"list[detached:"..playername.."_armor;armor;5.5,2.75;1,1;4]"..
+				mcl_formspec.get_itemslot_bg(2.5,1.3,1,1)..
+				mcl_formspec.get_itemslot_bg(2.5,2.75,1,1)..
+				mcl_formspec.get_itemslot_bg(5.5,1.3,1,1)..
+				mcl_formspec.get_itemslot_bg(5.5,2.75,1,1)..
 				armor_slot_imgs..
 				-- player preview
 				player_preview..
@@ -354,6 +359,7 @@ mcl_inventory.set_creative_formspec = function(player, start_i, pagenum, inv_siz
 		else
 			-- Creative inventory slots
 			main_list = "list[detached:creative_"..playername..";main;0,1.75;9,5;"..tostring(start_i).."]"..
+				mcl_formspec.get_itemslot_bg(0,1.75,9,5)..
 			-- Page buttons
 				"label[9.0,5.5;"..F(S("@1/@2", pagenum, pagemax)).."]"..
 				"image_button[9.0,6.0;0.7,0.7;crafting_creative_prev.png;creative_prev;]"..
@@ -412,6 +418,7 @@ mcl_inventory.set_creative_formspec = function(player, start_i, pagenum, inv_siz
 			"tooltip[nix;"..F(filtername["nix"]).."]"..
 			caption..
 			"list[current_player;main;0,7;9,1;]"..
+			mcl_formspec.get_itemslot_bg(0,7,9,1)..
 			main_list..
 			tab(name, "food") ..
 			"tooltip[food;"..F(filtername["food"]).."]"..
@@ -429,6 +436,7 @@ mcl_inventory.set_creative_formspec = function(player, start_i, pagenum, inv_siz
 			tab(name, "inv") ..
 			"tooltip[inv;"..F(filtername["inv"]).."]"..
 			"list[detached:trash;main;9,7;1,1;]"..
+			mcl_formspec.get_itemslot_bg(9,7,1,1)..
 			"image[9,7;1,1;crafting_creative_trash.png]"..
 			listrings
 
diff --git a/mods/HUD/mcl_inventory/depends.txt b/mods/HUD/mcl_inventory/depends.txt
index 056b070d..fb454b7d 100644
--- a/mods/HUD/mcl_inventory/depends.txt
+++ b/mods/HUD/mcl_inventory/depends.txt
@@ -1,4 +1,5 @@
 mcl_init
+mcl_formspec
 mcl_player?
 _mcl_autogroup?
 mcl_armor?
diff --git a/mods/HUD/mcl_inventory/init.lua b/mods/HUD/mcl_inventory/init.lua
index 994f11e4..e6a1f146 100644
--- a/mods/HUD/mcl_inventory/init.lua
+++ b/mods/HUD/mcl_inventory/init.lua
@@ -96,6 +96,10 @@ local function set_inventory(player, armor_change_only)
 	"list[detached:"..player_name.."_armor;armor;0,1;1,1;2]"..
 	"list[detached:"..player_name.."_armor;armor;0,2;1,1;3]"..
 	"list[detached:"..player_name.."_armor;armor;0,3;1,1;4]"..
+	mcl_formspec.get_itemslot_bg(0,0,1,1)..
+	mcl_formspec.get_itemslot_bg(0,1,1,1)..
+	mcl_formspec.get_itemslot_bg(0,2,1,1)..
+	mcl_formspec.get_itemslot_bg(0,3,1,1)..
 	armor_slot_imgs..
 	-- craft and inventory
 	"label[0,4;"..F(minetest.colorize("#313131", S("Inventory"))).."]"..
@@ -104,6 +108,10 @@ local function set_inventory(player, armor_change_only)
 	"label[4,0.5;"..F(minetest.colorize("#313131", S("Crafting"))).."]"..
 	"list[current_player;craft;4,1;2,2]"..
 	"list[current_player;craftpreview;7,1.5;1,1;]"..
+	mcl_formspec.get_itemslot_bg(0,4.5,9,3)..
+	mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
+	mcl_formspec.get_itemslot_bg(4,1,2,2)..
+	mcl_formspec.get_itemslot_bg(7,1.5,1,1)..
 	-- crafting guide button
 	"image_button[4.5,3;1,1;craftguide_book.png;__mcl_craftguide;]"..
 	"tooltip[__mcl_craftguide;"..F(S("Recipe book")).."]"..
diff --git a/mods/HUD/mcl_inventory/textures/crafting_formspec_bg.png b/mods/HUD/mcl_inventory/textures/crafting_formspec_bg.png
index 146c1422c8ceb3ebf82a3ddc81832e719dce9e42..5fd888decb24314d47272c5791894f2e3c7c1379 100644
GIT binary patch
literal 1030
zcmeAS@N?(olHy`uVBq!ia0y~yVD@8RU>0CuW?*1=#HC@%z`!6H;1lASUzE$hz~Jug
zzIgHCxpU|K|NozXfq`{4&oKrD2F8*gzhDN3XE)M7oFs2|7lsa2Sq}yV2F?PH$YKTt
zZeb8+WSBKaf`Ng7y~NYkmHi2`FqgE!u~Pn01_tIVPZ!6Kid%1QIOaM#3b-6Rn8da0
zf{2geA4L`izKLtfe}@YE@?3oN9wP$`2vlFaXLj}F!MSxw^0Qwpne1n^aI&A(%N9SY
zmrI1LUM`vJ_W~pcXQ0cXDnrO(GXy3Jqfu;F2(<}Q63H1TlIU)PNy2D!<IS#mE>|y|
z<!ANs3I*hs(rNokE_p6rcNvXTFZWlUyXSQ2rIY(7`dPjFQorM}r~2Gge#<BOS%uE^
zQ=eP1%4)8k)yt4ltGOkYR=z5+dbuR{>PwI*t1g4WH*`6=hAN}EB~I#dOD=KFExF{W
z4#IOUc&dX1VKllViXwz078AgdxQx$Pg);_0=>cmPgFFFFE$Fhi5{dA8|Fg@i5Q!0%
eC<i?~;RoxA%D~m>DL<7!ZuNBab6Mw<&;$T!l6>m`

literal 1431
zcmeAS@N?(olHy`uVBq!ia0y~yVD@8RU>0CuW?*1=#HC@%z`!6B;1lA?z`)?{?!I{O
z;<<C@{{R1<fq|h>?P>u70|R48kY6x^!?PP{3=FKso-U3d6^w819?ZPwC35_t_T#6I
zC*F1p;LbXjx}3E%fvx-jo6`wBjR`6H3=d}<o3pvL{CoBPgcKcC1~{nSax~N}cG~Mg
z|H!8O6<wkqWcJ^T{<prqbKkw?w<g;zob30a#m{P?u+>XA^<s&z6-*pinvgh>Hn4FZ
z^*`^WrzQB8+zQq_`1~f4vCrKCr>mxIs;zwR?Em&<$<>Qa&r6EW^Z)o|tKG!^_ipvS
z<(ymMq+W7~bM6ICIOU{1_X1oTNg6Ibueou(^hWjSMYmtOS-s)3cV7T;f8mQGQ|9t`
zsaHR`(5Y!HImPeWk%hv+Wkwov-*h^wFME>`V0BZt-LL!7$ps~w)SEAz{9bGvwmH@9
z>i2JtUuE=Np7-zUJg?5He=2I<R^EAF@s@M$F3XanV}5K)C)*ajYVq4U=ew<W*Djsa
z`#6?9yfN?0%ER-L<o7RMsPB|%_3hrARQ2MR|Fi4AUsyRgSbf>+6hEt*!pr@9uAiJ!
zvPs=<?u>PlEnlYi&#^L$RWH7Da-KzL(lftjOD5aSoa_e*!;dmNb$2^#ZwfQtQ%Lf!
z>vI4H2sZyC1rI3LK;h!4UIL;z`R<=Td;YJ|lxdI4z8w*hpQeBD`tR)vp3g%Bs13*m
zjkX^T%uCv?UJcR&4{MNN(5OHWC(R8g#{D|_z1Uc8`uj#(MtE99V#sd=CtJhgec|=?
zYrg9qzjvYX!p7w4PjNZ0L_sZ=pnB}ly7#qdZbv^PAK(6llYxODp?h`DE*<B7+3LJ4
zZ;Ef+khbEtD$DV&`%iRs!Imvvwt!<6mdn7|1)2##F}`rJ-<_{}&!1T#QTOJ@G;j#z
z6iyACp88^A^7-CrwS3am&d(i>_q{#&em*E}P=W#^fa)hmMj|V+Uh3`pK2uV(xnK6S
zFjDl0N5`aINtG;qQ}J~_^M`WNjpikCC2wxb`(vvJDoCJyAh~2A98`CYez!AToOEDg
ia&;7_m_>3Ei1~*_L103(%39Z5AfBhIpUXO@geCx1i+L*m

diff --git a/mods/HUD/mcl_inventory/textures/crafting_formspec_bg2.png b/mods/HUD/mcl_inventory/textures/crafting_formspec_bg2.png
deleted file mode 100644
index 4c5113d7370050cd01cd417c0fd6f0bad2a10230..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 861
zcmeAS@N?(olHy`uVBq!ia0y~yVD@8RU>0CuW?*1=#HC@%z`(#C;1lA?z`)?{?!I{O
z;<<C@{{R2~z^3C%85kHCOM?7@862M7NMm4N`s3;17*fIb_U^{cBMt&C7cXt(Ea5t3
zuXeQPosP_wHFD1?&g;Fu+&3+iiGf1!ft^AFh|s=c)2c78B&DSF>x!7{eirS2X=7k!
z_iWw;PxX>ZoO3~xllt5XoO4T@zyeSTMI1>QD*n$HRVSv33n#1RhrX2H@A-aTn1O-e
zz|_#C;r$<9+$dk1y#MgCx~n%U688L`_u=<szZWfjRttr#Uc#vtON6Z!LdBsJSelSH
zk~X;d%J-YKWFI$v{8tT%EO1yD%E|uDD|u6X<IZ|3X|Vh1>XAaiQ@sQwKtMi5l7<Hq
zE^%xD_`Wu5X}XPN+&fOB2wS&CYj0JL`*HTa{0;v5?!32__V2wr`M>ZYY<|Y(x0fw`
z$Uy@3Gc+WT#ZisBtatDC8n43@32)~0fr13dK_KS-%zc5KZSQ2}fjFM7elF{r5}E)!
C$|-CB

diff --git a/mods/HUD/mcl_inventory/textures/crafting_inventory_9_slots.png b/mods/HUD/mcl_inventory/textures/crafting_inventory_9_slots.png
deleted file mode 100644
index 4540f5086be57cc30b339fddb33ce1eb27b179c8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1153
zcmeAS@N?(olHy`uVBq!ia0y~yVD@8RU>0CuW?*1=#HC@%z`(#C;1lA?z`)?{?!I{O
z;<<C@{{R2~z^3C%85kHCOM?7@862M7NMm4NQSfwe45?szdv{~+V*?S_i_06Oe(0|F
zKP%+)vZ75UjI&jGiyuvo{om5u$i#pf{4Y##{Ce)$zh4!q^@;51VI`%1UfG+M`M+2q
zY_)K*--{MMtA)Z=FX0rjII=WM99<ho{AG(Dh(a-LPGrE<CmX9lPP5pwpent%zV^-C
zj`<bsXRm%<{r|=dTNKqG?bu9#x(y@^Q%|g;3ey}zCm(;u$-uzy;6&4_xo7|G{iwfJ
z`k|~@`0@4sij%)%c$rwQ5$UKSGg(7@<=@x)<Bl98nFAA-dqv-EK6Z@1{w8C3T#W2o
z_MYDFyVOfAan3Dq0#g?})k~bz=UxB{Kq-(kOdMGnCVq)?E=(G%4J3|a+@tGOKkuc7
zO1bs)KEE%_z`y`;M)I*^yZ1|1wx7LvvGTx;8@6Yky!S`)HIXqzO0s%VJwG&4!qBYD
z|1%>fZ_LxmE$x?-e*Z7;iL6<;`*X(R<nJbv_uC^`O>A_55)YC#c(fyV2%fgy*M==k
z{BYxjEyxkj*!fWKWaXu>?=v=jtozS?V5T_SHUHJGAVQbezz4+!fk=VJ@%`Uxybd>P
j+*o}JRG>he1Ec;hv&g1PJ`=8W28npO`njxgN@xNA)=T4h

diff --git a/mods/HUD/mcl_inventory/textures/crafting_inventory_creative.png b/mods/HUD/mcl_inventory/textures/crafting_inventory_creative.png
index 918d670eb9812dd44004e73ead9bd47230f45402..b0348629e9ccb04b128edb25e98cff5f1e7e025d 100644
GIT binary patch
literal 1246
zcmeAS@N?(olHy`uVBq!ia0y~yVBW~Uz-+|A%)r3lsTnQ9z`!6K;1lAS$N&ZZ|Np;m
z;X+16hP%7_;>C;S&Yk;vvPB330|R48kY6x^!?PP{AWo9Ey9+}HtE>kD0|RG)M`SSr
z1Gg{;GcwGYBf-GHz+U3%>&pIwS(r<P^?rNoL<R;H8&4O<kcwMxF9!-T849=@oI2?i
zGpoYG2?GDaJXkruAC1}GQfV3rbq8_O0r~7lJ+a>^CZ<i#P5u1lGMDrV89nK!vbklg
zwewqM2H$+L>5x|UCJit;wMYky)<F3ht08=yQ+SlD*#y?3b7~Pu+TbRyCQlpK!5ZD0
zPH7S2NVsiqZE&yR^BW#*kPy>YJ?edUNWy}Ih){zo8IiGHeR;zvw&`z=rwc82pSr0t
y?8d9*vP$~VOLLy3UeE0Otj$ea-bPYYa8bNq(RmNIQx~^`L_J;oT-G@yGywp08zn~o

literal 1517
zcmeAS@N?(olHy`uVBq!ia0y~yVBW~Uz-+|A%)r3lsTnQ9z`!68;1lA?00#g6|G#kI
zLPkc0ySw}1#f#_8o$G0=uz-Pqfw3gWFPOpM*^M*?2G(Xz7srqa#<#Z*a=vzxXuW9d
zWSu;tP|9GPqUw_9wRhTi^%O-_^7AK6U)wIBQu(~{`I`6d9=AJ!%mLd%91*`-MR)PT
z=ly3qS0)<Nt4^LQ8@O`joHreMC$Ai8@X}pwb?@q>qS;1j%M$M&JN0Sx6xT=yN(~eP
zqcA9cifbg8FP0hz7Yc<a5lfwlQx{yx%+IeTmA?I#mSZz_^C}tn-^cT&-J7%5efO5U
zoIQUt=3n2H|0azXlZmoyDo*#Lo?E>wMf-7_WlqF&{$sZ0-j-K`4ktwA1%GJzRd#BT
z4j8Rj-#vXz_ILB-$1mrEKK*gS{@u>VXK!q8EiFxc{MP;Vo@=$q=G~jXN_9>xTC+)`
z8;n*%bnBebg7CXHX<!Nwp$n!&r#Nn_YP96{Q;COn)fl|n8F^~uG%2>rMYEg4uWS#7
zg?(-8o|M?#`z59QpRdt6e*9nI`Ljmp?=R||-65TCf9v_ychb8fr@*5DcgRp2zpHd_
zp4k!1Cw=Yd<c+hJ2K#Nj!qYbGw#c3Z0br;8{I*Hs_3KBfuW#M`akj!LJ=D_fTmN01
zy_VJeWtqqBR{Xwbx4!iLjkEZ|6CN^%AchIyi3JQLr{{#{o=iJ7x9G+Oz4<+Nb><eW
zTAF6C<<7DPtgYafJiUFoYh=8*e&qFc$MTO|wp@Mc<Hq_oX)n*-tlr{n{O;K8{%@6Q
ze;>;uDlrn1s_|s0XM3`|&5YkoIowwIGv!U%%PGOSrp*hVnz8C@KyvD~={Qq6Jlg+C
z)}Gu|W?pAJ?_6YPU;p37^Jb@>ySF$t%G~T;-Inv&cg@Q-6O&kpO7$4w4bKHe&qJd(
zO)Xq6W47ir`{Q}Dm(IyrnP{N9U9;!q?9=!n-XzuiTHWuz{B4(CeJPi?a9%$6-(TaN
sXY+g{KV{6#dG=&}^*?^%%0pyT|Csl3>D%?r2?dv_p00i_>zopr02jrIB>(^b

diff --git a/mods/HUD/mcl_inventory/textures/crafting_inventory_creative_survival.png b/mods/HUD/mcl_inventory/textures/crafting_inventory_creative_survival.png
index 50b27a64ab4b239491ea77017d2e82646e24bf4b..828404ea2fd615ec6e66ce0a8e680873e8385e61 100644
GIT binary patch
literal 1419
zcmeAS@N?(olHy`uVBq!ia0y~yVBW~Uz-+|A%)r3lsTnQ9z`!6K;1lAS$N&ZZ|Np;m
z;X+16hP%7_;>C;S&Yk;vvPB330|R48kY6x^!?PP{AWo9Ey9+}HtE>kD0|RG)M`SSr
z1Gg{;GcwGYBf-GHz+U3%>&pIwS(r;kT*pr5CIbV@OHUWakcwMx?_A_<au9I6sM*LH
z#W|%x^+J<bLelS?4J_CB<Id?O`rUgU;yFo$Vzh+&y2$mCQ|G!bS*1$f+;i??6K~FJ
zAG45c{o4+&n|<h3`KFVb5>9rlIRQdCkrPG1NL7225*VephJn$vH7B~>G|X$R-g|PA
z>hJKI2hYnqo2nDJDdprORqtt|jDZY<_4>af+1#hWA`cpKO5Tu|3roQhyC)|>;#)M5
z6kV`1p+lA~NK#vKVv;H`E`-?y*9CVlK7ZlX1xeOQpfrmwt%I$@6F8Hw<`6=<KzVG<
zi7rrfA?!lj(dP}yjYQjp@a8TSotp_a%c|dWt@aH~5q`bl>brLWmN&IF&7AypacE3@
iB*mo-yu4Z>Z_TiVt4rhN)~{<pWvZvEpUXO@geCxevqDDz

literal 1516
zcmeAS@N?(olHy`uVBq!ia0y~yVBW~Uz-+|A%)r3lsTnQ9z`!68;1lA?00#g6|G#kI
zLPkc0ySw}1#f#_8o$G0=uz-Pqfw3gWFPOpM*^M*?2G%A|7srqa#<zD4b}GBe9DNw>
zdcS3Xm!E?MTl<5Y(o1(0JrvR(aJ<>u{q@%aOP|M$d8Wr^Y3_UfCtdT$#|46KTJ*WW
zmJv&MT{@gmS95yGlxYV)xCgn<(OJ5*&mz*#^R1-7(y7jyZ+-j{lPwY4dy+3&EHw~<
z!Xl@*f>9`hFP1tL!gq~Kl{_#deARIst>4xE3QvV`|NnF<{f3U&?lj$g@6)s6KhM|N
zn_F@0|H-sKe1<^nK{gjEM1(H5lGIb$Q}0$Dy_jCvb~b7A{rcCHk0s518=YFD143He
zn>4@(!~qGdf$}w0gXI_LoWf877Wxsr^6L!O)cXG_=Ql*=l%0)|n{M{Pc-l>{Bq1Xg
z5n&4+B|eo)H(9T@I5qoT{NJAIn<GyxoI35`h2pi6!l&w7z)|8Fx!-Z_rZxBNEXrc~
zBSXG@=RIz0c6v&>d-c1%^y9DHfA84xyf2rikR>LH;DL>q6qfC|em?T_$C#UIcj!s?
zJ<pj|l(Dq+;Fp-}53FCWYJ!7aqkB_btW9d<e#?IkcF1jB@#ejBUwY0o&GUWV?#Q0+
zyWan;F!Q|ZZTf`l`uUruJ>Iz~x-iyE=KM{arx(1qn_up{_JI4<>R?zp|GTT=)TX-P
zKL-nK(*keaH<vkoLnnBi?Ax8z^JLe{zkPgZp7plKDVSk_k#k%lF@%WF1y?fjQ=EOe
z?(yQ(?T>clSj+<_1TnVD#cLz^;{yn#L3pzMm;Ocb^sloY*^h%0^!);x<jp>nWm}%V
zt0>!3x24~^`rQrsWYp@vbGFKypL)0J^`?gv=h8IW!=l)n&u@LU`JlK6W;TRp5byA^
zl)ua8*Guy4y=rf)P*=11=j-o1ZP7u-PcnSXf<OJ8Ru3wPi7g5t>KgVlHcjPk&Rgp8
P03_h)>gTe~DWM4f%RYo8

diff --git a/mods/ITEMS/REDSTONE/mcl_dispensers/depends.txt b/mods/ITEMS/REDSTONE/mcl_dispensers/depends.txt
index ad7c191c..7b51f67c 100644
--- a/mods/ITEMS/REDSTONE/mcl_dispensers/depends.txt
+++ b/mods/ITEMS/REDSTONE/mcl_dispensers/depends.txt
@@ -1,4 +1,5 @@
 mcl_init
+mcl_formspec
 mesecons
 mcl_sounds
 mcl_tnt
diff --git a/mods/ITEMS/REDSTONE/mcl_dispensers/init.lua b/mods/ITEMS/REDSTONE/mcl_dispensers/init.lua
index 6e9add61..a88b66f5 100644
--- a/mods/ITEMS/REDSTONE/mcl_dispensers/init.lua
+++ b/mods/ITEMS/REDSTONE/mcl_dispensers/init.lua
@@ -13,7 +13,6 @@ local S = minetest.get_translator("mcl_dispensers")
 local setup_dispenser = function(pos)
 	-- Set formspec and inventory
 	local form = "size[9,8.75]"..
-	"background[-0.19,-0.25;9.41,9.49;crafting_inventory_9_slots.png]"..
 	"label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]"..
 	"list[current_player;main;0,4.5;9,3;9]"..
 	"list[current_player;main;0,7.74;9,1;]"..
diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/depends.txt b/mods/ITEMS/REDSTONE/mcl_droppers/depends.txt
index d8d7ca50..cfd9772f 100644
--- a/mods/ITEMS/REDSTONE/mcl_droppers/depends.txt
+++ b/mods/ITEMS/REDSTONE/mcl_droppers/depends.txt
@@ -1,4 +1,5 @@
 mcl_init
+mcl_formspec
 mesecons
 mcl_util
 doc?
diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/init.lua b/mods/ITEMS/REDSTONE/mcl_droppers/init.lua
index ed026e5f..1fa40eeb 100644
--- a/mods/ITEMS/REDSTONE/mcl_droppers/init.lua
+++ b/mods/ITEMS/REDSTONE/mcl_droppers/init.lua
@@ -14,7 +14,6 @@ local S = minetest.get_translator("mcl_droppers")
 local setup_dropper = function(pos)
 	-- Set formspec and inventory
 	local form = "size[9,8.75]"..
-	"background[-0.19,-0.25;9.41,9.49;crafting_inventory_9_slots.png]"..
 	"label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]"..
 	"list[current_player;main;0,4.5;9,3;9]"..
 	"list[current_player;main;0,7.74;9,1;]"..
diff --git a/mods/ITEMS/mcl_anvils/depends.txt b/mods/ITEMS/mcl_anvils/depends.txt
index 021df7cb..98a3e017 100644
--- a/mods/ITEMS/mcl_anvils/depends.txt
+++ b/mods/ITEMS/mcl_anvils/depends.txt
@@ -1,4 +1,5 @@
 mcl_init
+mcl_formspec
 mcl_sounds
 mcl_core?
 screwdriver?
diff --git a/mods/ITEMS/mcl_anvils/init.lua b/mods/ITEMS/mcl_anvils/init.lua
index d686a583..994a7029 100644
--- a/mods/ITEMS/mcl_anvils/init.lua
+++ b/mods/ITEMS/mcl_anvils/init.lua
@@ -19,10 +19,15 @@ local function get_anvil_formspec(set_name)
 	"background[-0.19,-0.25;9.41,9.49;mcl_anvils_inventory.png]"..
 	"label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]"..
 	"list[current_player;main;0,4.5;9,3;9]"..
+	mcl_formspec.get_itemslot_bg(0,4.5,9,3)..
 	"list[current_player;main;0,7.74;9,1;]"..
+	mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
 	"list[context;input;1,2.5;1,1;]"..
+	mcl_formspec.get_itemslot_bg(1,2.5,1,1)..
 	"list[context;input;4,2.5;1,1;1]"..
+	mcl_formspec.get_itemslot_bg(4,2.5,1,1)..
 	"list[context;output;8,2.5;1,1;]"..
+	mcl_formspec.get_itemslot_bg(8,2.5,1,1)..
 	"label[3,0.1;"..minetest.formspec_escape(minetest.colorize("#313131", S("Repair and Name"))).."]"..
 	"field[3.25,1;4,1;name;;"..minetest.formspec_escape(set_name).."]"..
 	"field_close_on_enter[name;false]"..
diff --git a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_inventory.png b/mods/ITEMS/mcl_anvils/textures/mcl_anvils_inventory.png
index d0ab108c618e18f4dabb5a95460433de935d9376..fdbb706d105a9de6c04fabe89b89134e1996fe41 100644
GIT binary patch
delta 395
zcmX@Wv72>*O1)5kPlzi+ehvczgS)%?;>C;S&Yk=J|9_Xs%yJA242&f~e!&b5&u*lF
zI7!~_E({&4vK|Z!44efXk;M!Q+`=Ht$S`Y;1Oo#Ddx@v7EBg~>VJ<bf0&g!C1_mZ2
zPZ!6Kid%1Q9L!{P6mWHv6`8>|yWWQ_p4Dl_cCpo*@uH5#{Ik;X%qKR+Oq{?{|G@r^
z{5=QtO@8eGRu@Z!ywnf*IlXkb;kn}RbU!QAxzC(mE(yMwX*<QwYU$i#AkOVf>nVO#
zN9QgBaqebXPVuvPI=2nPxu0o1#n0;R#-rZ-M{UlRT+)1LBIcz&_uShpqF(BA{oa{?
zs5iEAONyqyUNX6U@ydkx^Mak0XO~p%ewd{;x5R4U<s7xSC9kaCrd{$}zUOj*+T4;=
z*1GAJJeTjdT%tC&B+EJ%#MyGWLTzq|mi5~7T?}*AUG`L)d&27E65&YonI%fERVMp^
jedarHf~<JWR{7eB_8IFpe-~t6U|{fc^>bP0l+XkKL`b0&

literal 1088
zcmeAS@N?(olHy`uVBq!ia0y~yVD@8RU>0CuW?*1=#HC@%z`(#C;1lA?z`)?{?!I{O
z;<<C@{{R2~z^3C%85kHCOM?7@862M7NMm4NzVGSc7*fIb_AVpa?E;bGAE)bySA?J7
zbbDXlazXfsS|XdujQXhCpEuRn9jM^A|2Hf<6l4hl?ZAWe30?h9r_R>Bcm2QNtNA|#
z?;MnwAN}gT(sUcQ#;5n+cgou@p5QnC^2r4yo79^xan9vpTN-R_C3!{WuFd1^roT3-
zH(xqAkH<^B<dwa~+&3o|lq~Xw3GFI3f(Rw?u~|#X?%TKO@@M|~n8niT{o@vbjq7Zi
z%j2b9omBtQWxL<AC6jG8)?fc!z50Fjp8K7(dw=|2`uFL5+h3)hUM-nyJ9Dz%m)9wN
zRyQYGzI53SR*fW7`}28Ac7p%k=Ma@IuGE87n!aoCdv;~9u+>jFhcpq5nx0?j+ti5)
z%?8arqhm$dR%JCGINl}nO@8Y2{8sYuzu#N@tQJo8djX<^tzNeHy;vd)7JyPH;z-hP
zajS(W+CbvS#{F48_s_lbG#(Kd>%0vhmqOgJ+On)>|M%V*k5hJD+WFwdM%$l%IOmo)
zsh3>hoO{7jy~Ig<?gh@dC5s&4OsEKk60G6~6A<b@RnMPk_+ZC_9S7%u0&JPZDT&i(
z3(tQ1d(S)x6ddWtS&x5v@)_L;AOkwtz^(x?vAGhrIFdG)uTH+NO*=N@@utV0!Oj3V
zg@J(~p=)u^#yc|CW$wSPW;j#0Ddy#y9S?5ItC=rAk5GBG<J*p($j*Vfsv&;4N7JOr
R;Cx?@fTydU%Q~loCIC8av2OqX

diff --git a/mods/ITEMS/mcl_chests/depends.txt b/mods/ITEMS/mcl_chests/depends.txt
index cd00aa22..af11d5f6 100644
--- a/mods/ITEMS/mcl_chests/depends.txt
+++ b/mods/ITEMS/mcl_chests/depends.txt
@@ -1,4 +1,5 @@
 mcl_init
+mcl_formspec
 mcl_core
 mcl_sounds
 mcl_end
diff --git a/mods/ITEMS/mcl_chests/init.lua b/mods/ITEMS/mcl_chests/init.lua
index cbff97b5..669cb159 100644
--- a/mods/ITEMS/mcl_chests/init.lua
+++ b/mods/ITEMS/mcl_chests/init.lua
@@ -183,12 +183,14 @@ minetest.register_node("mcl_chests:"..basename, {
 		minetest.show_formspec(clicker:get_player_name(),
 		"mcl_chests:"..canonical_basename.."_"..pos.x.."_"..pos.y.."_"..pos.z,
 		"size[9,8.75]"..
-		"background[-0.19,-0.25;9.41,10.48;mcl_chests_inventory_chest.png]"..
 		"label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Chest"))).."]"..
 		"list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;0,0.5;9,3;]"..
+		mcl_formspec.get_itemslot_bg(0,0.5,9,3)..
 		"label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]"..
 		"list[current_player;main;0,4.5;9,3;9]"..
+		mcl_formspec.get_itemslot_bg(0,4.5,9,3)..
 		"list[current_player;main;0,7.74;9,1;]"..
+		mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
 		"listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main]"..
 		"listring[current_player;main]")
 
@@ -317,13 +319,16 @@ minetest.register_node("mcl_chests:"..basename.."_left", {
 		minetest.show_formspec(clicker:get_player_name(),
 		"mcl_chests:"..canonical_basename.."_"..pos.x.."_"..pos.y.."_"..pos.z,
 		"size[9,11.5]"..
-		"background[-0.19,-0.25;9.41,12.5;mcl_chests_inventory_chest_large.png]"..
 		"label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Large Chest"))).."]"..
 		"list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;0,0.5;9,3;]"..
+		mcl_formspec.get_itemslot_bg(0,0.5,9,3)..
 		"list[nodemeta:"..pos_other.x..","..pos_other.y..","..pos_other.z..";main;0,3.5;9,3;]"..
+		mcl_formspec.get_itemslot_bg(0,3.5,9,3)..
 		"label[0,7;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]"..
 		"list[current_player;main;0,7.5;9,3;9]"..
+		mcl_formspec.get_itemslot_bg(0,7.5,9,3)..
 		"list[current_player;main;0,10.75;9,1;]"..
+		mcl_formspec.get_itemslot_bg(0,10.75,9,1)..
 		-- BEGIN OF LISTRING WORKAROUND
 		"listring[current_player;main]"..
 		"listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";input]"..
@@ -452,13 +457,16 @@ minetest.register_node("mcl_chests:"..basename.."_right", {
 		"mcl_chests:"..canonical_basename.."_"..pos.x.."_"..pos.y.."_"..pos.z,
 
 		"size[9,11.5]"..
-		"background[-0.19,-0.25;9.41,12.5;mcl_chests_inventory_chest_large.png]"..
 		"label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Large Chest"))).."]"..
 		"list[nodemeta:"..pos_other.x..","..pos_other.y..","..pos_other.z..";main;0,0.5;9,3;]"..
+		mcl_formspec.get_itemslot_bg(0,0.5,9,3)..
 		"list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;0,3.5;9,3;]"..
+		mcl_formspec.get_itemslot_bg(0,3.5,9,3)..
 		"label[0,7;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]"..
 		"list[current_player;main;0,7.5;9,3;9]"..
+		mcl_formspec.get_itemslot_bg(0,7.5,9,3)..
 		"list[current_player;main;0,10.75;9,1;]"..
+		mcl_formspec.get_itemslot_bg(0,10.75,9,1)..
 		-- BEGIN OF LISTRING WORKAROUND
 		"listring[current_player;main]"..
 		"listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";input]"..
@@ -662,12 +670,14 @@ minetest.register_node("mcl_chests:ender_chest", {
 		local meta = minetest.get_meta(pos)
 		meta:set_string("formspec", 
 				"size[9,8.75]"..
-				"background[-0.19,-0.25;9.41,10.48;mcl_chests_inventory_chest.png]"..
 				"label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Ender Chest"))).."]"..
 				"list[current_player;enderchest;0,0.5;9,3;]"..
+				mcl_formspec.get_itemslot_bg(0,0.5,9,3)..
 				"label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]"..
 				"list[current_player;main;0,4.5;9,3;9]"..
+				mcl_formspec.get_itemslot_bg(0,4.5,9,3)..
 				"list[current_player;main;0,7.74;9,1;]"..
+				mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
 				"listring[current_player;enderchest]"..
 				"listring[current_player;main]")
 	end,
@@ -783,12 +793,14 @@ for color, desc in pairs(boxtypes) do
 			local meta = minetest.get_meta(pos)
 			meta:set_string("formspec",
 					"size[9,8.75]"..
-					"background[-0.19,-0.25;9.41,10.48;mcl_chests_inventory_chest.png]"..
 					"label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Shulker Box"))).."]"..
 					"list[current_name;main;0,0.5;9,3;]"..
+					mcl_formspec.get_itemslot_bg(0,0.5,9,3)..
 					"label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]"..
 					"list[current_player;main;0,4.5;9,3;9]"..
+					mcl_formspec.get_itemslot_bg(0,4.5,9,3)..
 					"list[current_player;main;0,7.74;9,1;]"..
+					mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
 					"listring[current_name;main]"..
 					"listring[current_player;main]")
 			local inv = meta:get_inventory()
diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_inventory_chest.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_inventory_chest.png
deleted file mode 100644
index 074790cfce20eb0b33992fc849ccfc607a6112d2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1195
zcmeAS@N?(olHy`uVBq!ia0y~yVD@8RU`}RXW?*2*-xD6iz`(#C;1lA?z`)?{?!I{O
z;<<C@{{R2~z^3C%85kHCOM?7@862M7NMm4N@$z(W45?szdzW$9kpP~yizOw@H=Vxk
zU$*Y4p@T!ryqNMi%v0oluq<;+7G}T+8dlq+e)(i7CtF|JBzz~(hI?)=`!V)A!d5R^
z{Hzv&sTWIxtrkx9djS%d>}T(zUgD%a_kt&c;+$LJq+W7~6E1*F97!6kzUIBLvDD+_
z<nJsD3=BDiQ<wL|?OU9jykA=ON#CQ$7d9qlW&Zc<VfLap1j#*c@s}-r$nFG-V|72+
z8(`@dOD^l}`#w{$w{zph>RbE_3=BI?1-t3TKfbu}elK5<`$wG;GdYRf%jfQ?NAdu%
z{sRRNk~X-%(Si#se*gEGo@4cWy?60M6jBTx2%TqC^;4?9Z@=9^&UYH~rk*=yocz6n
z4-^%1FMv%XCq}Tj49U2<UO!N1**?DcaauJKQfPg2+%H`S3oZ5c^KaZFJvERTTJt`>
zsW@%R$iTo5^Hg*3^z|QK{8(_mcgNxiF)L~Qp1YI3`@eaEND;&)7*Gl#HX*&QO>;Y6
zkrVTt6DelaeVTId^!198nhXCK5RUmTylFFX7D7&f5OHh{1SNfJ;@BJriI|CnPv;>y
chG=Gk{pYT}_1i2;V?kOxUHx3vIVCg!0L=l}?EnA(

diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_inventory_chest_large.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_inventory_chest_large.png
deleted file mode 100644
index 98f738faaa88d47e73c0786c910bb96d9ba70c41..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1562
zcmeAS@N?(olHy`uVBq!ia0y~yVD@8RVBut8W?*1oE^&Rqz`(#C;1lA?z`)?{?!I{O
z;<<C@{{R2~z^3C%85kHCOM?7@862M7NMm4N-RbG#7*fIb_U^_`9YX=vi`P%91ZbB0
zGt`{+K1-)_e}L0z%Wt3co@Pi`wKL!bHZw!7Wl5O#s@p$gn_pA;-CDZ5_wHrel1rR(
zOPtg})CEuV5-0V!7dYpZ{K|&0paK{wu!<uLK&bz;_xviIlAhl4_k|f47!FL1OkL~t
z`o@jj7q`COP+4wO4wk8_zr;BgW<NGlkfc%Ei%lHUJ5K8Nf3G>^^!vt-6Sj;D3=H6~
z_|nsxUvK`2Z+7|e;`cXh*#7*BVlv!=-~d7R2P96c3sGHS@f8#lTl#zZ?;wKW{EZ*q
z%9X)E@x8D2?&SOPVZngn8e;uP(6ODtSb{=gd*5E^*x!7!%lB_CyiTv6SR?tpum27_
zDB22NLsJDLZPF<yW);5wVgH^Jcg8`IsW4i-=Bh!Slz&|jv)#{6@5;^IN!>5@f3ZZ^
z>Sc=`h*~(=??sEB)k3fUltLCqmWGKh5w=3n1`<axuKsQH{Lo0_ce3(3)fpHV8q_zR
zisF5IZDaZ3?E8tI!LHb?zTY0h5Rd>t!=a9ZQXsoQ+CY9lbL;Yb-y^4*KEC&HVl@*3
z0|O*1-bvp7m-j^0?0s1J<F=1Ks}H^RM=}Y;7f^91g=`Tif%OCu6f(O(ApwgTHUG4!
zTcwWKKK}iW{eXJ>y|w3#@jm|iz2(2~D@3#q8xkOw5$W*B?`y+S@4r8O>>ZZ$v*4ut
XW9QRXCq&3S0J+oC)z4*}Q$iB}C?}pH

diff --git a/mods/ITEMS/mcl_crafting_table/depends.txt b/mods/ITEMS/mcl_crafting_table/depends.txt
index e3b8528c..97aafc58 100644
--- a/mods/ITEMS/mcl_crafting_table/depends.txt
+++ b/mods/ITEMS/mcl_crafting_table/depends.txt
@@ -1,2 +1,3 @@
 mcl_init
+mcl_formspec
 mcl_sounds
diff --git a/mods/ITEMS/mcl_crafting_table/init.lua b/mods/ITEMS/mcl_crafting_table/init.lua
index 9d6979a4..bcc8fc43 100644
--- a/mods/ITEMS/mcl_crafting_table/init.lua
+++ b/mods/ITEMS/mcl_crafting_table/init.lua
@@ -16,13 +16,17 @@ minetest.register_node("mcl_crafting_table:crafting_table", {
 		player:get_inventory():set_size("craft", 9)
 
 		local form = "size[9,8.75]"..
-		"background[-0.19,-0.25;9.41,9.49;crafting_formspec_bg2.png^crafting_inventory_workbench.png]"..
+		"background[-0.19,-0.25;9.41,9.49;crafting_inventory_workbench.png]"..
 		"label[0,4;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]"..
 		"list[current_player;main;0,4.5;9,3;9]"..
+		mcl_formspec.get_itemslot_bg(0,4.5,9,3)..
 		"list[current_player;main;0,7.74;9,1;]"..
+		mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
 		"label[1.75,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Crafting"))).."]"..
 		"list[current_player;craft;1.75,0.5;3,3;]"..
+		mcl_formspec.get_itemslot_bg(1.75,0.5,3,3)..
 		"list[current_player;craftpreview;6.1,1.5;1,1;]"..
+		mcl_formspec.get_itemslot_bg(6.1,1.5,1,1)..
 		"image_button[0.75,1.5;1,1;craftguide_book.png;__mcl_craftguide;]"..
 		"tooltip[__mcl_craftguide;"..minetest.formspec_escape(S("Recipe book")).."]"..
 		"listring[current_player;main]"..
diff --git a/mods/ITEMS/mcl_crafting_table/textures/crafting_inventory_workbench.png b/mods/ITEMS/mcl_crafting_table/textures/crafting_inventory_workbench.png
index 46ce1092eeae5ca86913be70ebbf4e76d120d6fd..807b25f02f8205ce0d841cf1c8a51bb51ce77964 100644
GIT binary patch
delta 221
zcmZqTn#nXlqMnhNfq_Bm)pAz`1_rhOpAc7u{G7RS=N9BEK4oBFU@Qsp3ubV5b|Z~}
zf#IO1i(^Oy<J+4Xc@H~qv|SAOc&q1>L`eC|pk1!NzTRVsPmDbF;h`u4D)`XrV=FrI
z)rl)E%luMag{7=g4i=tiHF0J1#Fc$MzQ!r9SeDNF9S-KCyjru&M*Dqe?y{QoXT<i-
zG}`=o|Ev=s`ODtSc*C4-oO=G9+NSFLOcNWWCr;o2BQ~)H`PbDSiY0bGjsRKf>FVdQ
I&MBb@04_vX<NyEw

literal 1282
zcmeAS@N?(olHy`uVBq!ia0y~yVD@8RU>0CuW?*1=#HC@%z`(#C;1lA?z`)?{?!I{O
z;<<C@{{R2~z^3C%85kHCOM?7@862M7NMm4NS?KBF7*fIb_U^%45l4Zxi?dRh7Z^DR
zGyZ(u@PuK_xg#8XkGVJZmStUi`u$w#?{Cu+R8~KhXTS{-x?ew0Hh+BRv0L6ju6KnC
zYoCSN*XQ`ZXz{aJC~Wnz#qY%u7{!YrVzqFxA3`OPG)x>>8e|Yie2K8t!pY?-H}@T%
zBeS~f)Sh2A=I!|VL#tY9@q-)tl`nA4EpbvWxx_hl#jm_CC(iEpb7Nk{#^pEC>%NN1
zgl|$W`Sopct$K-(#@sh27nE#LZ_c{UIhV&vy&58NtHepY`O?XGJYMQ0S`t(IzNG}{
zS}&aJ_%g+xZK-g%wWZ9yo5EI8b^O&!vJ7Bm*xf5}T7LD}lF7C+C;R<~`}gtnpa0(e
zGbh_F4E{T(WRrUFCC<6C&UmU<8>!EIb8=3J)AD=8mrl-uid<NE6{4tfw&lwfzgVa_
zU-!(P{q=b4&B?aCfd$9`8d_ss^&~B(F2{e%jo>%J`+srw|35t~)88i3|4&{0cCg<s
zc&e8;sn3N`@Gt=hT;jwOhXxr)8l(-b9z*=!r@Fj-?{3V)ogk288g%=N&OI%NDXA&o
z4lC&Q|2FenUv}TyOj%I6ASJeu5(y|3KvNYcF~E}<vT?!NzuOr<p7Z!tay1hJ14CR=
z_u`&nOPT93>;K(7QGVk_x|Q`h%Wca`i7^YB0-+QvDT5O(I3eP5+TDA<&-4`cW%s}3
zWME*Z=!6DG@t$Ah%J&nK=f8Zj<JpaQ*FgRtXcp9ePzvO7kT#I_2|BH``n|F7Im>l6
z+tiUFhi{w3DU0cc3tw*B&m3{W*6t>qL*;ef+e}6z_duB+*w^#UUc9DaO$SK8)78&q
Iol`;+0A#K;Q~&?~

diff --git a/mods/ITEMS/mcl_furnaces/depends.txt b/mods/ITEMS/mcl_furnaces/depends.txt
index 441fdfde..365076c1 100644
--- a/mods/ITEMS/mcl_furnaces/depends.txt
+++ b/mods/ITEMS/mcl_furnaces/depends.txt
@@ -1,4 +1,5 @@
 mcl_init
+mcl_formspec
 mcl_core
 mcl_sounds
 mcl_craftguide
diff --git a/mods/ITEMS/mcl_furnaces/init.lua b/mods/ITEMS/mcl_furnaces/init.lua
index c17b29b7..871e38ab 100644
--- a/mods/ITEMS/mcl_furnaces/init.lua
+++ b/mods/ITEMS/mcl_furnaces/init.lua
@@ -7,14 +7,18 @@ local S = minetest.get_translator("mcl_furnaces")
 
 local function active_formspec(fuel_percent, item_percent)
 	return "size[9,8.75]"..
-	"background[-0.19,-0.25;9.41,9.49;crafting_inventory_furnace.png]"..
 	"label[0,4;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]"..
 	"list[current_player;main;0,4.5;9,3;9]"..
+	mcl_formspec.get_itemslot_bg(0,4.5,9,3)..
 	"list[current_player;main;0,7.74;9,1;]"..
+	mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
 	"label[2.75,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Furnace"))).."]"..
 	"list[current_name;src;2.75,0.5;1,1;]"..
+	mcl_formspec.get_itemslot_bg(2.75,0.5,1,1)..
 	"list[current_name;fuel;2.75,2.5;1,1;]"..
+	mcl_formspec.get_itemslot_bg(2.75,2.5,1,1)..
 	"list[current_name;dst;5.75,1.5;1,1;]"..
+	mcl_formspec.get_itemslot_bg(5.75,2.5,1,1)..
 	"image[2.75,1.5;1,1;default_furnace_fire_bg.png^[lowpart:"..
 	(100-fuel_percent)..":default_furnace_fire_fg.png]"..
 	"image[4.1,1.5;1.5,1;gui_furnace_arrow_bg.png^[lowpart:"..
@@ -30,14 +34,18 @@ local function active_formspec(fuel_percent, item_percent)
 end
 
 local inactive_formspec = "size[9,8.75]"..
-	"background[-0.19,-0.25;9.41,9.49;crafting_inventory_furnace.png]"..
 	"label[0,4;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]"..
 	"list[current_player;main;0,4.5;9,3;9]"..
+	mcl_formspec.get_itemslot_bg(0,4.5,9,3)..
 	"list[current_player;main;0,7.74;9,1;]"..
+	mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
 	"label[2.75,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Furnace"))).."]"..
 	"list[current_name;src;2.75,0.5;1,1;]"..
+	mcl_formspec.get_itemslot_bg(2.75,0.5,1,1)..
 	"list[current_name;fuel;2.75,2.5;1,1;]"..
+	mcl_formspec.get_itemslot_bg(2.75,2.5,1,1)..
 	"list[current_name;dst;5.75,1.5;1,1;]"..
+	mcl_formspec.get_itemslot_bg(5.75,1.5,1,1)..
 	"image[2.75,1.5;1,1;default_furnace_fire_bg.png]"..
 	"image[4.1,1.5;1.5,1;gui_furnace_arrow_bg.png^[transformR270]"..
 	"image_button[8,0;1,1;craftguide_book.png;craftguide;]"..
diff --git a/mods/ITEMS/mcl_furnaces/textures/crafting_inventory_furnace.png b/mods/ITEMS/mcl_furnaces/textures/crafting_inventory_furnace.png
deleted file mode 100644
index 344c624786973aff2d0e3e95a3e8770f1a44c4d8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1166
zcmeAS@N?(olHy`uVBq!ia0y~yVD@8RU>0CuW?*1=#HC@%z`(#C;1lA?z`)?{?!I{O
z;<<C@{{R2~z^3C%85kHCOM?7@862M7NMm4N(e-q345?szd)Kh*j)REn#pP}b4gct7
z{Lj|fBf##r^uW3-n<=~8o*&WQU6b}=*-8f7;DCM3PXW_SnU$-;BM#2<FSL0y@6Keu
z7cG8P3x%y-w)nkR0;d)tiz7+H#F3>z+Cbt<gsngnigA_hlTKA{o4<eFjg?wFC66jT
z&#SZfG%t$#U;l;9P^h_33T6yQKe5I`9gSiwk;WaF#~-LX``Nq#f9Jm0?^kNQ|M_;_
zkK48vXYKb#b_qB{h%^#g0ARTAum1bzVFmuUV+l#-!_;kaLVvB2^p~2y=MdMo7@5a&
zd((UGUbZT^#5uRbNgYI8@Ki5xQlEPPEC8jD#gV09;+Ht*qG$t&BOAB;{kMDRp}%^b
z_uUm{U|=Zd)=i(fFRS?2F+209^YglsmwfKoxUqWI{P**bbP+NX=0<eOVB%QZezJOg
z=*t;~W@Y~0K^X@e7-uD=f8WWlt=8+Cc+U9Pv3D=)_SGX<O{{l8{zuXV4n15hdtV#2
zH2K+$8@92Gh{)OSbj_vk+;cZ>yl1$!`S~M>mo~{cZ|1#w{=Ee$wP3{lOHk?trzvt1
r*^|BJSC#lkNbg<_Dk%`|0kaOs3--sgHcyH)193fF{an^LB{Ts5<dy4(

diff --git a/mods/ITEMS/mcl_hoppers/depends.txt b/mods/ITEMS/mcl_hoppers/depends.txt
index dbefba43..67a60d4d 100644
--- a/mods/ITEMS/mcl_hoppers/depends.txt
+++ b/mods/ITEMS/mcl_hoppers/depends.txt
@@ -1,4 +1,5 @@
 mcl_core
+mcl_formspec
 mcl_sounds
 mcl_util
 doc?
diff --git a/mods/ITEMS/mcl_hoppers/init.lua b/mods/ITEMS/mcl_hoppers/init.lua
index d67793e2..668d6db4 100644
--- a/mods/ITEMS/mcl_hoppers/init.lua
+++ b/mods/ITEMS/mcl_hoppers/init.lua
@@ -4,12 +4,14 @@ local S = minetest.get_translator("mcl_hoppers")
 
 local mcl_hoppers_formspec =
 	"size[9,7]"..
-	"background[-0.19,-0.25;9.41,10.48;mcl_hoppers_inventory.png]"..
 	"label[2,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Hopper"))).."]"..
 	"list[current_name;main;2,0.5;5,1;]"..
+	mcl_formspec.get_itemslot_bg(2,0.5,5,1)..
 	"label[0,2;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]"..
 	"list[current_player;main;0,2.5;9,3;9]"..
+	mcl_formspec.get_itemslot_bg(0,2.5,9,3)..
 	"list[current_player;main;0,5.74;9,1;]"..
+	mcl_formspec.get_itemslot_bg(0,5.74,9,1)..
 	"listring[current_name;main]"..
 	"listring[current_player;main]"
 
diff --git a/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_inventory.png b/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_inventory.png
deleted file mode 100644
index 4ad34eedfab5b9a5ca9a218244aa296835164f99..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 992
zcmeAS@N?(olHy`uVBq!ia0y~yVD@8RU`}RXW?*2*-xD6iz`(#C;1lA?z`)?{?!I{O
z;<<C@{{R2~z^3C%85kHCOM?7@862M7NMm4NuJ?3t45?szdv{~*5d#62ix(YvbGTpa
zSG)RXint)p9v1%hM<>_jD?L8&p_u_E*l}sGQTY3bkHzNCX|VR4*Si1g;$!bP=ax9B
z&%FSqN-lBEz2K=17JyP<@oUx#g{@w;_`O&nY_)K*--{MMIE5mPBn=mT+49|Pb)U?C
z<L@ju9fmAXkQy>`_4dphn;%bD?)?0uQ<5hkEnndOrvTZJB~I$dZUs9Miyv@_Bl`_z
z&Zm3np=wsgj{Sbm$-uzy;M5AE@ch>|Zj>)h-hcR6<cm87X7?)nfBc8~9_&3U;zEU#
z(5igDSxZ<p`SD+HXhFiFH0RCkiyQAJeg=od`#tJ^{v&$;i@%YjVg3U}GB$CfC<g}@
zNd2Dgky9-npW9f?gov30uw$<8D1B4Tz`pbI)5w=OcZ|#Y>-;<XhztkpsRJcZVF}hZ
pRqr=z6(8H13=R>5d+5kIU{>E)9V_4RJaHq)R!>(ymvv4FO#o^CWkUb}