From 6807cc8ddc27fcbcc7cf25cc1a6e81d3887410fb Mon Sep 17 00:00:00 2001 From: Vanessa Dannenberg Date: Thu, 2 May 2019 23:14:46 -0400 Subject: [PATCH] rewrite mod to use "procedural" code uses tables to generate spawners based on available mods instead having them hard-coded. side-effect: this allows default mese lamps on all four existing pole materials instead of only wood. --- simple.lua | 94 ++++++++---------- ...e_streetlights_inv_light_source_ilight.png | Bin 0 -> 203 bytes ...streetlights_inv_light_source_meselamp.png | Bin 0 -> 513 bytes .../simple_streetlights_inv_pole_brass.png | Bin 0 -> 787 bytes .../simple_streetlights_inv_pole_steel.png | Bin 0 -> 757 bytes .../simple_streetlights_inv_pole_wood.png | Bin 0 -> 644 bytes ...ple_streetlights_inv_pole_wrought_iron.png | Bin 0 -> 716 bytes ...imple_streetlights_spawner_brass_white.png | Bin 1850 -> 0 bytes ...imple_streetlights_spawner_steel_white.png | Bin 1599 -> 0 bytes ...ple_streetlights_spawner_wood_meselamp.png | Bin 1700 -> 0 bytes ...simple_streetlights_spawner_wood_white.png | Bin 1691 -> 0 bytes ...treetlights_spawner_wrought_iron_white.png | Bin 1630 -> 0 bytes 12 files changed, 41 insertions(+), 53 deletions(-) create mode 100644 textures/simple_streetlights_inv_light_source_ilight.png create mode 100644 textures/simple_streetlights_inv_light_source_meselamp.png create mode 100644 textures/simple_streetlights_inv_pole_brass.png create mode 100644 textures/simple_streetlights_inv_pole_steel.png create mode 100644 textures/simple_streetlights_inv_pole_wood.png create mode 100644 textures/simple_streetlights_inv_pole_wrought_iron.png delete mode 100644 textures/simple_streetlights_spawner_brass_white.png delete mode 100644 textures/simple_streetlights_spawner_steel_white.png delete mode 100644 textures/simple_streetlights_spawner_wood_meselamp.png delete mode 100644 textures/simple_streetlights_spawner_wood_white.png delete mode 100644 textures/simple_streetlights_spawner_wrought_iron_white.png diff --git a/simple.lua b/simple.lua index 2b85d7f..dd5f247 100644 --- a/simple.lua +++ b/simple.lua @@ -11,7 +11,7 @@ minetest.register_privilege("streetlight", { give_to_singleplayer = true }) -local function check_and_place(itemstack, placer, pointed_thing, pole, light) +local function check_and_place(itemstack, placer, pointed_thing, pole, light, param2) if not placer then return end if not minetest.check_player_privs(placer, "streetlight") then minetest.chat_send_player(placer:get_player_name(), "*** You don't have permission to use a streetlight spawner.") @@ -69,61 +69,49 @@ local function check_and_place(itemstack, placer, pointed_thing, pole, light) minetest.set_node(pos2, {name = pole }) end minetest.set_node(pos3, { name = pole }) - minetest.set_node(pos4, { name = light, param2 = 0 }) + minetest.set_node(pos4, { name = light, param2 = param2 }) end -minetest.register_tool("simple_streetlights:spawner_wood_meselamp", { - description = "Streetlight spawner (wooden pole, Mese lamp cube)", - inventory_image = "simple_streetlights_spawner_wood_meselamp.png", - use_texture_alpha = true, - tool_capabilities = { full_punch_interval=0.1 }, - on_place = function(itemstack, placer, pointed_thing) - check_and_place(itemstack, placer, pointed_thing, "default:fence_wood", "default:meselamp") - end -}) +local poles_tab = { +-- material name, mod name, node name + { "wood", "default", "default:fence_wood" }, + { "brass", "homedecor_fences", "homedecor:fence_brass" }, + { "wrought_iron", "homedecor_fences", "homedecor:fence_wrought_iron" }, + { "steel", "gloopblocks", "gloopblocks:fence_steel" } +} -if minetest.get_modpath("ilights") then - minetest.register_tool("simple_streetlights:spawner_wood_white", { - description = "Streetlight spawner (wooden pole, white light)", - inventory_image = "simple_streetlights_spawner_wood_white.png", - use_texture_alpha = true, - tool_capabilities = { full_punch_interval=0.1 }, - on_place = function(itemstack, placer, pointed_thing) - check_and_place(itemstack, placer, pointed_thing, "default:fence_wood", "ilights:light") +local lights_tab = { +-- light name, mod name, node name, optional param2 + { "meselamp", "default", "default:meselamp" }, + { "ilight", "ilights", "ilights:light" } +} + +for _, pole in ipairs(poles_tab) do + local matname = pole[1] + local matmod = pole[2] + local matnode = pole[3] + + if minetest.get_modpath(matmod) then + + for _, light in ipairs(lights_tab) do + local lightname = light[1] + local lightmod = light[2] + local lightnode = light[3] + local lightparam2 = light[4] or 0 + + if minetest.get_modpath(lightmod) then + + minetest.register_tool("simple_streetlights:spawner_"..matname.."_"..lightname, { + description = "Streetlight spawner ("..matname.." pole, "..lightname..")", + inventory_image = "simple_streetlights_inv_pole_"..matname..".png".. + "^simple_streetlights_inv_light_source_"..lightname..".png", + use_texture_alpha = true, + tool_capabilities = { full_punch_interval=0.1 }, + on_place = function(itemstack, placer, pointed_thing) + check_and_place(itemstack, placer, pointed_thing, matnode, lightnode, lightparam2) + end + }) + end end - }) - - if minetest.get_modpath("gloopblocks") then - minetest.register_tool("simple_streetlights:spawner_steel_white", { - description = "Streetlight spawner (steel pole, white light)", - inventory_image = "simple_streetlights_spawner_steel_white.png", - use_texture_alpha = true, - tool_capabilities = { full_punch_interval=0.1 }, - on_place = function(itemstack, placer, pointed_thing) - check_and_place(itemstack, placer, pointed_thing, "gloopblocks:fence_steel", "ilights:light") - end - }) - end - - if minetest.get_modpath("homedecor_fences") then - minetest.register_tool("simple_streetlights:spawner_wrought_iron_white", { - description = "Streetlight spawner (wrought iron pole, white light)", - inventory_image = "simple_streetlights_spawner_wrought_iron_white.png", - use_texture_alpha = true, - tool_capabilities = { full_punch_interval=0.1 }, - on_place = function(itemstack, placer, pointed_thing) - check_and_place(itemstack, placer, pointed_thing, "homedecor:fence_wrought_iron", "ilights:light") - end - }) - - minetest.register_tool("simple_streetlights:spawner_brass_white", { - description = "Streetlight spawner (brass pole, white light)", - inventory_image = "simple_streetlights_spawner_brass_white.png", - use_texture_alpha = true, - tool_capabilities = { full_punch_interval=0.1 }, - on_place = function(itemstack, placer, pointed_thing) - check_and_place(itemstack, placer, pointed_thing, "homedecor:fence_brass", "ilights:light") - end - }) end end diff --git a/textures/simple_streetlights_inv_light_source_ilight.png b/textures/simple_streetlights_inv_light_source_ilight.png new file mode 100644 index 0000000000000000000000000000000000000000..cb7cfdbf860c170cc7e7c3c8346986146af2a2bc GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=lRRA~)y?T-Juz~ZoPebW=+S6MDGP#uNiILmiyb{T6O;EO+DqG-!s-!Gp4Wo{efGf wv3mM}ROcU8A1>E!`*2JC-%Dnoxe&0tlIey+W7fpAea;{OPgg&ebxsLQ0O^8QBLDyZ literal 0 HcmV?d00001 diff --git a/textures/simple_streetlights_inv_light_source_meselamp.png b/textures/simple_streetlights_inv_light_source_meselamp.png new file mode 100644 index 0000000000000000000000000000000000000000..d30515fd980bfac33800604c761e506d61844eb4 GIT binary patch literal 513 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU_9aJ;uunK>+SWkd6ykT+8&nw zo8!}bqRmUNNpF{fQ_^9nLf^g9;sVz*bh1{92`*AtQ0ifA(f52q$B$?wQzNeXn>W2V zYWdIRxLk7w82qWfbAxxz{Q0+&HZGXrbZ+L`GVh*=XVaJ)zR#0TW|%&G`kc9Q?`EDa ze8V8t&8i+ebSNs5dAJoox|eWE1aVNuQ4&A+4y?gj4h zKl91iE7FLk-{b70#V>`uG~2}w^e@f(Ciz%OTIvJu_U-Qr^PD<#CqI+C@Mh^gdFuuV zWy9JdKU=Qm&(IE7Z+Lpf+5^|7d}3>u^Z6m`g;LqRw!FBsu;G0C1u_GCUDsB?>F7B zg})feTGbn8zg_$9g|flyvm0g^ZeJ4R-nBf0DU3O-(`(7K*xBqqMKf-TZPrhC|6&(E zOFh$_fWKntoE%F^y2?xS^$%WTo^k&9j|nq<=Kr_KJia@3mG^E#Nw&N^W5pkbxfe`1 z^g7(X{pA!Q!^tlY8gCT{an^LB{Ts5dv)YW literal 0 HcmV?d00001 diff --git a/textures/simple_streetlights_inv_pole_brass.png b/textures/simple_streetlights_inv_pole_brass.png new file mode 100644 index 0000000000000000000000000000000000000000..e97853e15374782cdda4b3b6565c62177771a07d GIT binary patch literal 787 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEV7le$;uunK>+Ox5dBTn|$3L#$ ze7vIUI-h0Dkw>yG1X;T@7A$|lyCU-tcYvZxt4p^FyS_tvi;L@F)gu=Lj`z*Iaqsdy zWpBaeDI$iNGDq+Iysq8*_wt`K6ZwGPH=1Xw8@I2Qd(yV|V3(rj>F;pp4@W0 zUWL=7?vK_&=}9I+K2Dx*DpMx9NlCAf5L(##LYCpl8jfnovIc*to@I;&&hGX<_vXv# zx!IM|T)yzxcvbEC!T9EVe@1Rcro`rcnaIKj@usr!6WjfE{9ydTS9?o#a@cAYv2$^L z)A=r)yrK2<4ga(U0x?si?(RDsIIlVH?4P*Fe7mM5Gk(35@{xJPb*&|Z4(s0+Em7T5 zy>0IFxmvsSb|r=y&h%@uKbhRwGerXRmPvm`A(+x(r)oZr8nB%Nni z-dCV@*@`7*+stZ)s-0eyzA+KY_3vgIcq?xy65Uw#)yb;%=e)yp{fjLQXoMSv&t~OO zkP-MDyUF5!h~LL^4Jx1fDjXg%op743Qu4pjfwBC6C%;Av!}G5VORZV@Z4*3XcBL$g z-y>TP#~-na!LQokp_W3gTe~DWM4f DqGoI7 literal 0 HcmV?d00001 diff --git a/textures/simple_streetlights_inv_pole_steel.png b/textures/simple_streetlights_inv_pole_steel.png new file mode 100644 index 0000000000000000000000000000000000000000..c3d1261135478aa9c5b99497d033198e0a32a7e3 GIT binary patch literal 757 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEVA|v9;uunK>+OxRezzS&+8$ni zym4|@hr)y(kr%TUq{fSdXjNB9-(kIesB7Iz)_|33BHCEHn|@}uC?z>3^`C#)v`t8d zBT_}_7KYm1T zKcBEkrAsMmA!D}Z<(@qn9=l^V={O5Md;VPAzG3D}Nv}YLcblsxJz)x6IR85*N5`U$ zMH&He$BzX1*uPg?dg1j~HTwn=-@w3-)+pVy?ANEe?|=EXy>_b^6Zf@SC;1Z+6B#E8 zg&vhKF4$A7x{#CeOa+s{;&}?EjY6g>a0pCneEitrkei~?p|@|}J}GB#uzx@KdvOmZ zyS~Pj6&gyX-n@D9g#E#s#bVbD8W-MvTlC{`0OKbccQ3{B#g8nGMRjvJ-+FuhOO>rl zs?7VeFN`Kqz5Cb7E?y<`*XB@EcdyR6f+d+=i!Uy?{4!wu^~l=&zkcMhwf)-ttE8mC zux(MikhJlKwC&rsFK1ZPqG^sM6YsO!ervY$MLqwD7>3i@r&nlPlky4=(QjCNdbPS-z)pr|&z{YzaCpj8@s4q- zHEY|~hLx`y5^WQ-^qme@9Jo??z@C4__17!BzJe9JVMylD6Mv+Y*L1k*z!laBDxAk! zTC~=GYFKH_x`(}j|AX8E+XK}N-x=OB-eV?3z(Mp|L)zw(KYv=bY8RY)c>4P7RrY~% X|4mT4@xvXMoEbb_{an^LB{Ts5@<(X9 literal 0 HcmV?d00001 diff --git a/textures/simple_streetlights_inv_pole_wood.png b/textures/simple_streetlights_inv_pole_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..227e0f592b1d567048432cb46f0ff822a854edf0 GIT binary patch literal 644 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEVDk2KaSW-r^>)U2Z)r!7(#*jR_0ezlFRwYkxql>UF$A$Ahc0r#taCndiU#e<7ORRp8^Jh3!F^ zDl@_^XPDUENhwRSX*p(cXqRKz$#;9oy-slF|2%X1dmFz)V%d^IdK-4`T2U{0uAt=B z5uY*%>D%$O+3WV!udRQk&!`aaueQ0B_du}J;bx|oPz9;24*w%(cs8%*x|5~(g>S>!?FIYJFBm0Gd)f;{W{QiCVXHWjV z+aDDE+sgPKm3JuDssB>HeERffTaE36ZhqdN(G|0Ek*l?Xsb=UBb|KD&xy{K84aT$f z8J8y*)MlF_2bXK7O^oXivF9D^ik7BN9c&T{-*}<9GbnZ?U^lmygf;gt*>>xiXHAS8?4=ve3N# znE${dO^=&VIp?3tCFZ`K{a!4h^82FNH(sgSvnfnnKZzx%n2Y=@PD7=9-8S{<-pn0MvDoY~wDmc$&N+>@-wu#{o8 zaWUfsu@@KFRfHV$?Gy?be%)nn;ahNWm2u$Dy3Ya^7V!Q&DpTNIB5=CC6l4D*t%PgnwOZgWV*sf#TKJ%B# UfhXmMfvJnZ)78&qol`;+0P92@rvLx| literal 0 HcmV?d00001 diff --git a/textures/simple_streetlights_inv_pole_wrought_iron.png b/textures/simple_streetlights_inv_pole_wrought_iron.png new file mode 100644 index 0000000000000000000000000000000000000000..a0fa09f0d61a105ea7943644de3d11ae5c436233 GIT binary patch literal 716 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEV4Cdd;uunK>+S9R-NKF%$3DJ4 zvuE?oyEB5`if#!KaCGE8=#=v}`K`_x9UZ=n+XdcS-JMfbUKe$zamJ%b3YL@J?D={i zNA6x_`VWT%SGIV+t!|!veqLHKPm+mm?B{=nk7s|c`S-=MPm^)M)JLChPTyO%_>DEg zVqPt)S2yQK96t8dP<7Ym_z1x%m#W`4>}3y#Yz{M?wJo(^UU`1}^QW7VUsMMe^vx4s zKIi@?)FF&#^QuGb6@M6c{&wvy&r?p4IIsU>XOyGg4uKPvk7E>;9eE(b_2OK;aekJT zw#M2%`-WY47mgWxVa}8JS@P}ct@y7m4(`=)3ywV4G3S8b3azlaU7^<>?!Eo!M8vGB zwutU$ENKS}zI23Xuo^z^eZ5xn)vkkKSHoWa-~LVR;|m!@mN}n~Z1^dbF>6}dy-VA4 zW4BxVGY}vYhF9>h5Fk+WyXy_M| zw^4M7@mb)|bFf38_?XItV?xFq9CtVE=2DQUXZZWVKx$5Zi^R`we~)k7eqeUEeo>#G zdC!qKKwnG|T2OHBu$Xgh<;FkH=N9}iR&aF_zZkXf%d@v;dxiV-803|bc*0B!3kyn> zoi}W9N^O;X@!~MILw0Kz*HRIsv?|6kYxeGW?P{=XRvd#H&(y7FZd-b;Z01gQ@Bi>t zRNB|2>=MeCxes(~*s*oTmxja{3G8bs4?IabuuiU^i1E!UMs@K6FJwAy-eUICYbfQP zaYrELd&9}n1H0IL^crGqAACtW&<9c}!mlA0V6&jY;bX%i#-q$#>?8@StZ3k`|1Tb~ d>Pq5Oc~Rx-&F8Irq=2cE!PC{xWt~$(697SSOZNZ( literal 0 HcmV?d00001 diff --git a/textures/simple_streetlights_spawner_brass_white.png b/textures/simple_streetlights_spawner_brass_white.png deleted file mode 100644 index 10bbf38b31d840e007cf8cd9f3583855ef481f9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1850 zcmV-A2gUe_P)5{X-+oc6Z4_31| zP7s0;MG$e|5N$w8qM&65CW9HqZI9dIw%h%1cUKO{jh7V32&?P-tFrpjKUdf9SAqqN z=XZah(l{bK88CE)`2LK~ezPauHRt7@ey)7aXL8)f9gg|&SN{?$c<2jT*sdY_{Y~5mA$$_W$RPy_9x8! zKK{`Yg5eOoyoR&_1d4)TEH{8zT_-gI5R&O}m%VQua`)FeO6Uc&f{oM-R5m9|VpNuq zB_TrC*!2}8pc&?J1E@4b>IPPQop2W8&r)ouGnxs)DFkkWHt7+bbctMt*=U5`i7B-^ zm_nc#rR4_jkDsBNRg6lDN^1k7b%uZb?JuZqj4F&NlpGL>EF4l`MzvOE^M^i3<}VYPNBn6>2wh(+0YzGAFE_yCxKGiv5GY7yNHu@|-^R<3kpn1_z+G;D7u`OUvc;;( zNarElZlB+O)lu7LHmGzyp|bG<%;st4(*e`oQ)UB)!)_Nn>$5^iF`6tlz${FN<`Wbd zwIIM9jHs3kqO5?P8fdX3KJkc71_YxK6L-ML@D)ioMW~c&)n9Iat*th`A2B+a5QQ;= zQH(QAdG0#M=U`L=5Rmu|GIo*ajE%O?h~coj?9rEG2-w`hAMCR|o_JT@uVf;LUIK^5x6w zuX`!qIVM7u07)3nNwSnnmoBLX4<3l61F)JM=7s{L&~=S0iGah`;=cIe3$?Ma!RF>B zolXaUBuOZj%Q%k1;o%`yu3S;quU}sX!op<7-~Lvmp-(V6BpMIMl8EnJ`@?I$_xSN+ zC8b2yb>{Oq2L}gCr&G?KKaZ~K_`c7|$_iUsTVkm)plG+rid7I2sp+Ki;Ei!-&z|M} z{rdz#K&#avNfN>^q}S`QzrT-Cifh-dEo={vi&{7iCu9nWl{Kv97It&%jd9g#RouCA zhqbjeE?l_4#fuj?ckUd!ySo^M!M%I;Xfztjw+HynQwmlcv%XHDyoz|oBS$(I% zu%yM1>yQ{8N-0#9QY^o{$u*zPu`G+--Cahb5sgNJot+)__V!RpEhoUR-^a9VDky|r zK(pW8;qg3=M~@z{ySqye1ZbLu<2W1~9N;+4asnK5hm^}coh(B$J6LJ`t+BUn-xj4( zN!`486HU{wEQ>gfdGh254<9~U&Xb^4Fz|zfqgTi1r5SdVy)*vCjT_?X)vL<3ZKRY$ zQN*oVx0bgpe&)<6d_SV!AL1Mjv8FHIJLm4*y99vALCdU zfYDf^5QnsZl0TuUM)?9TS5A{g0SJL3mMf*6QCP>=7U0nm*qQnyfm z$}+;a$`?Q|cF>A81-pq*3QO1X1>pC-rC>F%+B+0WO>~2N0YvT#5@UoA645+`X66iF z=JwHzDF_K7hITby0M1b#yJUk9$byMpZRZQ%us5b;hk!sc*D<3?z5r_V8gV?Q*Bhdj zC)nZSqXbx3PjGv?!}{q}Ql;S>4;Xp-`O1JwYYi(3K`AEDjLhritQe}Vp~nF$N>K?s z8gh~^0JFJ45==oUibaiL7UT?|u}Nx85JC_N!PGm>7XU&>GwYZQ2}q(;<_lmp*hjbP z6zw{tmQLCFIM2chdo45PDM9}k@zh0X21c!suM7xBMxinz7rMM;CGgR-8Mm|*`D1{z1&Cgi|tZb76 z6F`#r8hSR%Sq79>(Txg1YD7{a@SJ=B#Qq4aSi-2SgU|_*oE1ZUe~&_`h1pogthBL2 z&aTG7;lD{{C!jK{YMY{^<*gWU&;uV7h%7+Xat1JT`q-rzD23EPujH&4>b@FLEr%$j z(5x0#(#jV=(X^NbbB=lgWF=-2f1I_z!oE#A+oxDvYY{{l{bP?H80QP1(x|c0u2C+R o@I05SH~hcX`sFv<3;Txt2b}pPHW?@^kpKVy07*qoM6N<$f;h2uJpcdz diff --git a/textures/simple_streetlights_spawner_steel_white.png b/textures/simple_streetlights_spawner_steel_white.png deleted file mode 100644 index df9c34fbf0785f0cba7ba2d19d6eab98b5904779..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1599 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