From de0964a1195f28e4871c246940c6259d7aa24051 Mon Sep 17 00:00:00 2001 From: The4codeblocks <72419529+The4codeblocks@users.noreply.github.com> Date: Wed, 30 Apr 2025 15:52:54 -0500 Subject: [PATCH 1/7] textures --- textures/pipeworks_accelerator_tube_plain.png | Bin 1195 -> 1261 bytes textures/pipeworks_broken_tube_plain.png | Bin 1803 -> 2062 bytes .../pipeworks_conductor_tube_on_plain.png | Bin 2167 -> 2791 bytes textures/pipeworks_conductor_tube_plain.png | Bin 2169 -> 2749 bytes textures/pipeworks_crossing_tube_plain.png | Bin 1219 -> 1676 bytes textures/pipeworks_detector_tube_plain.png | Bin 1551 -> 1541 bytes ...ipeworks_digiline_conductor_tube_plain.png | Bin 169 -> 184 bytes ...pipeworks_digiline_detector_tube_plain.png | Bin 1500 -> 1571 bytes textures/pipeworks_mese_sand_tube_plain.png | Bin 1091 -> 2452 bytes textures/pipeworks_mese_tube_plain_1.png | Bin 1269 -> 1252 bytes textures/pipeworks_mese_tube_plain_2.png | Bin 1273 -> 1253 bytes textures/pipeworks_mese_tube_plain_3.png | Bin 1274 -> 1251 bytes textures/pipeworks_mese_tube_plain_4.png | Bin 1269 -> 1248 bytes textures/pipeworks_mese_tube_plain_5.png | Bin 1269 -> 1248 bytes textures/pipeworks_mese_tube_plain_6.png | Bin 1274 -> 1251 bytes textures/pipeworks_one_way_tube.png | Bin 0 -> 931 bytes textures/pipeworks_one_way_tube_port.png | Bin 0 -> 641 bytes textures/pipeworks_pane.png | Bin 0 -> 1587 bytes .../pipeworks_pane_embedded_tube_sides.png | Bin 1031 -> 1464 bytes textures/pipeworks_sand_tube_plain.png | Bin 1129 -> 1196 bytes textures/pipeworks_tag_tube_plain_1.png | Bin 864 -> 926 bytes textures/pipeworks_tag_tube_plain_2.png | Bin 865 -> 923 bytes textures/pipeworks_tag_tube_plain_3.png | Bin 863 -> 923 bytes textures/pipeworks_tag_tube_plain_4.png | Bin 864 -> 923 bytes textures/pipeworks_tag_tube_plain_5.png | Bin 871 -> 927 bytes textures/pipeworks_tag_tube_plain_6.png | Bin 860 -> 917 bytes textures/pipeworks_teleport_tube_plain.png | Bin 1682 -> 1713 bytes textures/pipeworks_tube_plain.png | Bin 1073 -> 1498 bytes 28 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 textures/pipeworks_one_way_tube.png create mode 100644 textures/pipeworks_one_way_tube_port.png create mode 100644 textures/pipeworks_pane.png diff --git a/textures/pipeworks_accelerator_tube_plain.png b/textures/pipeworks_accelerator_tube_plain.png index 8256d05e4a7d0ff4459c9e36c2e267124d7b5c25..f06000b6d63f27f53973f1ee9bb7a1ee74a05c2a 100644 GIT binary patch delta 1024 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 diff --git a/textures/pipeworks_conductor_tube_plain.png b/textures/pipeworks_conductor_tube_plain.png index e0891ed687e435864b509ebb991f2d78c6dbecdb..6962d3d8edb4aa338078965c1b605872c2c39e31 100644 GIT binary patch delta 2742 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 QqW}N^07*qoM6N<$g4z5Sh5!Hn delta 1210 zcmV;r1V#Id4Z{hL8Gir(0055yE&>1m00MMUPE!B?c9YFG000DhNklvG~o z0)Wx){a<1$vy~W-)Ka%DfNcy2-ET--$5W}P&7VBSiiVkZQvTED@VUiv#V^jTiwO}O z_{Gi>n0T}Q$4$gT=T9-=_$O{&c{nPGiC{jUt+;#lBTP)AD}P$U-BBt`gkR2RDR-?{ zVM6#FcY8)L!!*Q%CtI{EV^lLNd`u{N&rQ6pV<4ljmYA5W&W!d+QdBXJeDeZKNUtX) zkMkrglLXqM=VQY22U13988cd*vTOfaz!C2WAS zA!T&69ZV>zMSsh7v~|r3qqF5>LM|?7X$D*1+gxD6n-^$#1zX@8xtLJi z9xbiV_O^!!;SFf%7VV%EpZmjel!}CSewr*?F>P7goK&eF_=dbcLoQuGhc7LoqD-2|~DePq^RG_TTk}|Nu zsjKYed?G|(Idfn5d~fsovab)PE^YS5{=KjI;W#+K4}tToJJ#*> zI{aB3iqq+G8eI=9H$DHhv7)^Nrl{1knr%rL&>OEp_M=s9Jy)A1g#d& z-0dJ=^N{iI2FWHt+W?W+qs1j!?UPs~ZIk4iJWW5-b%DXFoBG_l$$koEgxjuJx4j@K$4(U@&(xN!5eoiAEjuH_YON? z6Mv)aLjf%Ks6)&7s6uo69<6#qtCR#vK1#SLn(nyo{=W8o-yJUB_x*6%cZ07EFQ;$U z_EN4+hw}J7^p@rCZ*It#5Rh&(p@!pdCXS6Mxpz z39YMu8aiKMB5=-Vbp;f#R})N3!v?Kb0|gB60uxiW2hwd(Y|^TrpjS2~q}nDxk+rK` z4Jl{kU}6?^J4W?B+W`rkqc9QpR~klHhL%TDOiZUeZ)h1eo$@i^y8|iOmYZg2VIuNd z9yZ*34MI#b%707*qoM6N<$f~P=8X#fBK diff --git a/textures/pipeworks_detector_tube_plain.png b/textures/pipeworks_detector_tube_plain.png index 6a9845cf18fd8633b4176ce4713a3325d126771c..d9be82f9201927065ca12cb11e8f7078649bf354 100644 GIT binary patch delta 1091 zcmV-J1ibr?422AkBMSflb5ch_0Itp)>9HZR0e=rkL_t(og_W0ya@#f#K-FWKcG_l| zG)Pu;8OgZXgzl*aK;2M;EL$u+%du-6Tnlg)VRtVM^LBF+ya>C zTz_iJ^A&`c3E;k+q{d_Bn4&BC%x$LtmCRZu!%bw(Tqb}YPBZH!8O|b0fJ^`^E{l(M z(ZXpk0ftwT()0O8-(v!VzP65EBGZx2wgn$rIe-MAF$o`-05FU*aZJo}GFs4Q0)&k? zi2tVceKK%pzyuJ`b@tCJmpIX20$^vlwtvY^EXH~egqwo0p9~X+?G!?xwR!j!|30b= z1w{rt_@OJyzy>zal5N^@&+PS{2>@Rtxog_IDVwPVdu9xgy5@5McI}V;$(LF^7NY+? z{qgYo`YRjI03Un3G~)o;6p><9s>Nj^==p2c0NQinYx1 zQz*WwF#x=w0ZwHpQTGMceGV8GoPXn}15Rjw8c*_|*fjTZz;$ur_0AZSRvQ<~ERimY z>)IKE&k0 z5?cW3G(g`zC?#Claw?0tGFmFXa+;Wil1; z=gR}YcT6*G2SoSe?rXkh%JMS-JdipEJTN6$l8N4v0FXiFCy6q7OKWq6q)u*%zSEp4bPSpy;JJW>p{4-OA< zSOHJfR9w@S;lg4wQlFj!x<(|$g0I7|Q?u4`>ti9dO4pFB=*mYZod-x_RR zt|8nc5?R91VcUZ1TP$mvETI*$ZNYfIDmz$TChRF?$0FDQ_z%(<^s=()&KUpz002ov JPDHLkV1mog0bc+B delta 1102 zcmV-U1hM;t437+uBe5{C0e>b*L_t(|+LcyicjGz`^ktC4xr6NFt?|Lq0k*5!bK3hn-s?V8h@DKOFl0^V{Peq zcb)n3h>IXWv$b`dcPE)IK`sI!>(%LPwg?+s1jEY-Ge6x(VlD!dScQI6!*K%nG=Tn! zfQrzVpb-}VL~fSd6}w;cK1}$I&{&H2rLe!}-4qYF2qb(}tfa9tl^s4ehBOY=C-FJ+ zL5j+RvYmI65b|jtwSUUVx8-lc#C&cv7c9ZVPWd!QbQaKMJ~!gTXMrYpDj$4G971f2 z+h+qQCD67dXbQ zG7r&VWa1biu&-)eFAzOV1)CmF1GVdg2*qJEPl?=EuEcTZn12vM;lu3iuBD$eUE^NS z$JT*$WBFqr1Q##*NBbA`djI|LuX{h&Uj|^q7@y3hQ~%GK=E8Mb?y^mrvy}!`_ONYs zcUhnYL?+9!BGSxRMlKMK^Wpsu^sS~+pH`Yey)b%65O}qG`1=QX;RRXcZk4t`!<`L% z(fhobe5L4~>VK`RYSG-L1XmQHlU~qY*>wumL5EgJHdzYmTFCAz>w!1LWPc4FYihZu zDuO`4lD)nBb-+=9yw1DlOASPiF1oH9_4|WR{z8pc-iyMZO7uaO&R8u37NvLar=6qf zU%zGbXF)lwRz2aC0crIB-J@*3gm<%A09Xf5<%Jmowtp!BsOQVd)(>{5QtWw!j506^ zcY4b>_*|7i?36)7J;xF-P@V@j#xenQx7P;O;SPL2%3}_Eipr>_Ti9Ju#+K3P-Oh@s*5gDR*h!Mtz ziGbh9rc7{3U_6MT$RrVTa4G_|vm*je)znQD01b40SJN29AxX_7b>_&N52MhI?c}MX zn(8dDb%yyWQ+mY$I+D2vqNG(gl{V$fvL>4nJa0`PlBg3pY5H=O_J^E|LL7SQ&rbIO3dwl7IEHAP wPfkckcwm^&&@l1X4}Mk-wznm`!E6lcS%q{zvRzP!1}bFmboFyt=akR{0H@(9iU0rr diff --git a/textures/pipeworks_digiline_detector_tube_plain.png b/textures/pipeworks_digiline_detector_tube_plain.png index 86ded6f9e00b20f7c196deccd7596c10211d84f3..1799b1ef46ff8bda4107dc6dc0f4f11a08a698f7 100644 GIT binary patch delta 1236 zcmci0{X5eM008jsHjT7!F3rolznzCgHZNWCwziPrEa50E!d06i%1ckale|XWPMnvF zvBnh^8;!@U6T9_7*}TlAOPo_nSXWnVxc-VhKYrx9n1~ANT>vDF?2iY!#!;_0mVOX0 zF`XQ86xjY6bZKsT06+sBNbn1f%CD*2`LoO&+#}@LVQecy5Kg``b3vVw)M+jUU0lT$ zk8|V~_06lw*{}GkDlq?5U;C9YJd|Z-ZU$zyb!;;|ug?u_#Y;I7Z1z$?LDP@YRA#)L zAYYlGOg}Gt@Wurao>qyQI4^88Bms|hlNWJmLv`b0lxT(Lsk5a@1mX{k9v}2kaB*K+ z>BgroKeBAo%Sz37vct4tC&Og%G5`9Y{l0aQ9T3JEUGVbwEAAHph80=VQz!Orvkb znSZ1xFLk?Z^~{5G)P(%b5R=HGGYnZXLSE8J)YL?9f7zwR;1G@!VAy=6tZr33 zu=K{>NDy!A3$2;-6w6&LMM?eH0We8F<;;W<1iKpXLoSuK%>Lf15i6=RSoaedt)Ur; zT#f!9&3%psMxLGaZc>|k9`^aw3vB*;zcr$LxNI$dPMu@qlsCAp@L^_oMmw>3k>lbe zXV-}0&M0JaC|^4jEjap~Vh(vJnk#!>7|bu28ikJ~eP8I~(1lNFON@~5XtlF;^l&1W z?W}!+gpHh$Twl1z=e>#2;l|;^I!$@?clZ(<+oRsRT(>=gtQhelGKgZ}cPb6m0`I2_ zU{@_}D{D+!N;0=<07wy+X4wfhu$iv-^V*;lfMahuZEeekMDqmunYeo{gWb)hZo;70 z-`-nho#{Q{g0)3=jmYEXf=X-WcIboLS?{dVs}3GwvD%A$_wqgC<-ReCzck^u7&Bz2z#UsM)Ki_o)TI7lFhOLKmKL<$s_* Bi+TV6 delta 1166 zcmV;91abSL4BQKlBe5_)0e=B>QchC0yziJszs55$RQDs+I8Fi{|ie(kkHF7?|t*Q#(znlH8WjDgjTy{ zP0P>_abEd{P>tBgE+L|7PYIn8n^-0yoVrisjD>r z(&4u)BG%vr~Av_vii}J8xv^+h}q#oX`Eg`?tO6^lloM z-wp|R{ODO~i+?qTQijMGj~I~9CLm?@2)tzJeL73zf`kFF7AtK6vT{h^HgRdX#zRvHIYpg_R?8m z9aaX!Iz(CoPJq0$OXN9$7jTeKh+Put5@@pS3$drlJAYQTp&+GL*XJ=k7JlB?<#!(Z z%FYv+AGC>dNIGUgO6{`AgDnna3Hl^m6B&|p!h$62z!ob7c>_8mePLlpLWhNX?iIXZ zWjm7xnk1aFFeIr>L`omR3szn$63`%NM5IenpNJ&yv1U7)0j^29BGem$nPH>>>j**zhBrY9KP90WxT;`(wX@)zdir@?_e??OsC`9dm6g> zN!6-Wwc?zAJStbLx}#N9`T3I#DU(+eSv_2*V|mdtvo?5Z`V zX7D&oAG7A`k%kCezh=$YtRTWQ?g+G58XVOTp_V-Y9!pcZjEGvJN2p8ezGxsquiO#p z5gTeJh;WQKp&qe`TS0_+G$qm^a04UTM1)hF5or_X!PqJyqT~)(>4AUQKtxIRNa*2N z6@NsS*2NVoZDv*#5#`#bMWjXGic!@}@r%mL7 z(BN1_M9m%&YZChExQI~o8)7{|{i=ot(;l$YBrsN0M7V~}Qjfr$=^~=~amt#JZ6d;Q gMy%=SCXf0bAJVg*-WxJ200000NkvXXt^-0~g3JaQmH+?% diff --git a/textures/pipeworks_mese_sand_tube_plain.png b/textures/pipeworks_mese_sand_tube_plain.png index 8a48599d6a17f27eb8e744c9e36e82758321c438..8fb74a7649a8f7fe456d3a933c343ef875c23fe4 100644 GIT binary patch literal 2452 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 diff --git a/textures/pipeworks_mese_tube_plain_1.png b/textures/pipeworks_mese_tube_plain_1.png index 47ce4ed84b9e8ea222751208e18fb7713f26594c..e84088e8b8da987d7e3782a2966303a1e3d0cc5c 100644 GIT binary patch delta 999 zcmV^v@pWc3q(3jjV!?JF!8-E;=2jqI6B1K&O*%ESviM*q;vuZoPHN@%A|1I2a5kJlzemn zc5GveetNhYPa}0$D2j3BVWlJ}0mc)5P?S*HiM9dcK`2as6D8!{c)|n-Y&%a@0HDt< zJ)pktE|u|bWzrX5YlQcqq!5&`eA~o2R!U>od1V8)$3?=6iYl=WSi)P2@fVRfy5gf;*o(5DE06|dK> zElX5tLtX0KwN>|(aT3`8r69N4?Q~n)1n8IY`c9#<0eY5e!EUMUXTbfu2C&QqsFWB* z#|7Z{07MHwbkAjK19S|JqU!>XKLG7Ahc+gk))cldiq6X%E;HbMS^$nOjWvQ0*eqHW zVFq08Kefmuwx@Y6G~e0Q=EB znFGYh3eXxrx&q`Az&;0a8^7&+PGLp3m?~O}sN1+4qIsx)0rVW+?@#7Hw=rIYkQhL; z0$laqlR40BZ2wzDukDjAOa4YxRV5vI%c`P$G6%W~-6bf3qDG&8`VRGfWtnxM7c2aM znG{mO>0|3lLE*_9WO^~iSe@Z7B76?MUcGFiJoX}~6ija$Xb2%x5RhQqNLRrD3q|$1 zZa8gxf+nftbz-ji2<8}_R~+vFxI!MFeN34q4!q>CPauyK4lOEl@)2Owp+69CjN zKu6pz7q}aJwTlq#u4v1ByfJ22jby23+jw1)v@R zM}SY0^P-CNkVv-=4gfTmDjW?V1Ow80I2U>?Ysuu@ito`Y7OW z@}J=L$%EDR9GGdoO1Cdp4nKo5g^*#l6o{_DDg^yra{|bZa#)$`VG@w60j+uh_!l{m V?hMRcW!(S(002ovPDHLkV1ft5(Te~8 delta 1018 zcmVa)P89;XIG?+Z8oc=Wr}Fyr9w-I)_np50l%yeG4=M_f*uPhw^ne2UD1gQG>U;A5 zYIGC;W#f#=49HMM0eVTCk^2g?i2{g+)EUn+pj1iRE?_Y`t7+N3e>c5|0)Q@Oz}7X= zs0Tf0I0`FJl<_&gAmuk zdJOT|m9U!@qWUO6t_J7yB@k=lwvqWcm^*0zA_wXALaC=EWs%#MliMDy#v_v|t^zrP zfK)3)Ucee7m8zG04hE&nQT9D3triTxA{Z11Qb?&~Vm0Qq z61fItAwk)z^+K3h;RcP#QOh^|CZs~tc58qM)B=oM3uVwS!L&vu`stg|sgPNT3Kvi1 z@klC8+v3bC+GX9TYiMJUywY+@IH!m1sV#VeHY+GE327cre{^VD(vBjuTzrn|K7VS> zhOpJl>W{0Ek5E?tzxSS}#p-Ud9limNV4Puf@8&b$bN>^7BAaZxZvYWEn|61Aod+Df z+h1#Oy!uWa&>AtDPIrLX0|xK*A0*PNk9z=D^=#VT_i&g2pUE9yHvv@TjN2K|fw`G( z;vR7Lyk${Oe}^rdaWyUbF#|2UY3oi$7lH$LJ^PDXygGnSf-2?#VHP()5XM7aew}ZG z=P$m*j~_Zaz#$x<`D|I~+IJehGF1LYy#@y;13>KoichwiDE2-+ujjdifN=02InKfH zJ_cR;A@WKBfY*7h0J16kn<}BkyYrxg!U2u};4}lUfBOn_GTOHtrnne*L960F(sf-y z$y3!eZB;aAXx(O{Bqt*(VYl)!Q=1wgHh$rN+cgN1sq(i#N@u@^!}BhV_)%Dna33Ik?6 zvcc9He*>tI8ISpdG#y?3b_b{zl6hLC>1Khdy0gAXu1b*AXNhhn~wh?E5FQH;_Er>CLpai1h oTCgweB~a|cWUvSU1N;K`9}2GOmlhfE&Hw-a07*qoM6N<$f~s}d{{R30 diff --git a/textures/pipeworks_mese_tube_plain_2.png b/textures/pipeworks_mese_tube_plain_2.png index 12d79665fe2e7348de4b509d8250c9dcec502431..9d8d433ab8cf5ff37b2c20b5b6dc4628eeb227fb 100644 GIT binary patch delta 996 zcmVH8G4hE4 z+X8b+Y8^4&_kXq(5{@AwZ$(|@F3QFKRbM&?{&iY*PCjS0m(u-a;QpJ@W)9d&<^|Y@ ze~gaa0jVmz07B(P_kIU79J~OEVk_K?fLKv4KuK#W?Cuc&_X3dLdn>$*fFs*@0hmgE zN9Ad7t4~}KFMx#O2w2%faHhNfT%4v;u=}jq$P0ir``H{_V(AwF$l|MhriP6tKq`C( zm?A`b*m?mJ=t(?G8i|$PVuDB)@y&*?9$d}*)0zj-M1Sp}d73~6`bvp+zXAM$- zLA0I#)_1^R0ytbFvjxLqt@Hv>e2 zdol;18Kj3*7I2&a&IaI~gRzZY_BN(4Bba!e%zbcn{G{sz!? zm;n;~dol;Qjn$u345}_|PU&BDQ50!Yznlu3KbZsFg=V+Mdwi+Gzq_V??(+Q9#6c$8 zMau*iLTwfwNN}p2%t1;R&sw=vzX(U5-vY+oWx#$5Dmc@-nJV?>OF2=9Jc&T>NL*4W zMG3S-q@{{V*QQDUM>q~&F-~xphV~)GDRSNPoPgzGf%I8G^?n`^VjuLm06zujgXL`j z01+TG94qEQGkzR_wiXqCy*A^F<;ry^JO|LMGP=VZ5SN~(v#5=(x&w~v>;+Kr8=xV6 z7mW5Jx5Dk^;~!!!V|GCzPU`Wd0%el-BTyi5R>e(woD zG~G_Bca+RQ2>kW)%WHB z)aWPx%ElR!8IYlj0`!tNBli_(69o_tsWYBuK&g_rUBG;HR@1V5e{Xsb1pr;nfURq! zDKH9PZ1sMp!~4M2QGiY2GVnTQ5LbbQ&gJJbq>%u?#sTIK)~Vh{0Z@;Vc)Z)l1|hD6 z^%&xdD`7V+MDxg}#A+;R zB?=A7LV~ha>xD42!VMZzpq6j?O-O~P?bZMjs0A3i7RsPuf@zIR^wT$^Qz5ew6)qmj zef-p# z4PmR9)t^@-pP{Y*e(ya`i`Cs^JA4D4z&OL|-pyyg$Nnb(MK;-X-vAe;lv@8K{5K9W1YZUU&v8MiZ_19LOo z#695fam%8fe-2wZ<7!&=V+LAy)7G7iE(8bgdhr*9cy$1u1Xauf!YpopAdH8;{5szV zFJF9#pFebVfI~Py^Vzb}weK{1WvKj*dJPUx27uZF6rXH2QS5zuUN3VC0pZ|5a-4(X zeGIzxL*$hN0I&000c2D7H&sH7cNakkxdR*nz-b0xfA+G)aLo5}iVl!l6Bi$DcDhNa=oa;r^S^W)9d%<^|Y_ ze~gaa0jVmz077L(_jU&~9J~OEVk_K^fDc8z041%gu)9Y9+zUW{AFQw#0VlTg0x*?- zj>^m6)}Oc}UH}QF5wNz2;6!-=xVTKGVE!TKD^dtom7}45lkG2SZi&+C-jYrHmi7`ae=;KKnC;9)+9DD=Z3JciJ0MX!{ z%t2@d>0z}6oMwQt0l4R2Y~z=`jw#FtCY~pApxZbdqH(Cd0rVVdfO`&f8mh{jPaR;(jc`%J?o#YP|qdo$dwP7#}LX zPo7qO&4HcfSonRpf_e;+3E|TEr9gBIW+7DImx2hgerCRliK}!DsO1yDf8ZGPeS`%t QW&i*H07*qoM6N<$f_p>5(EtDd delta 1019 zcmVf zc|4Mu)3!MCns!-t>KfWuB(JpG63*$Nduj{bpv?-(OG28*e-j{aBN%5`-Mje=_}KphpvWfM?i)Y^&ZgZRVCMlx z@AlVP9Iw8U2ed}arqdmu@_@m+{RfHk>f;{3RW+OT_dOhDz(;Zi*i8UcJL7f+bYO0# zo45xYK5ki5f74-0XIxFoe#}4%Z`!)k(S_guUeEp_7q1TBlc0)uK$yi15QOp2mtW@_ z;rWX%@$-ky4sZwuXg*t3y7rxhuMCy{QLn)P$^cM#fZ~(wCW^g}&+B<^As`$)NRD%G zypKUweu%u10N{0=D}ZbY|E5}~@$Nh*p>Tj>065J6f9$>jos9Nvhbb-wUeLPumvmiM zQ1VoFOJoYnm-`U@uHrV=X2x%Z)V> zm1VeE_EuLyAWC4lmI9#C#^en4_(zzH#*NZSy}?2~SZR#{gV+lpq!DNpXl34dZG{1| z9@${4e~kgu$P7pT+iTfx1d}8E*OzL23G}**{9k|}1k~C_0R)iAcK!zNrHlfwO*h%5 z#i_+j6hP*#g`)>#J;Y^T$<_CrM5(GM0KyLd6*ew|W$TRlYl4?cfjX`Nn>xUGuA?@6 z6rdN}0emCPHje{9cL@lciOWEnl^Y`8NE!*)amZpnr|1BMHE|&#xwsUzj&qceA@b?qONim<>LRUFC7H`IxRiNpEKJ_>3%bC|IKJK2W%zt0&K*K z(a}2~QKc6^sLbfz?|_Db7eG;Lg_{v@P}B=h(#i_Edj!C}0Oa@H3X2hNVjC|2Q^}}* zybNyjiA&-IkZ>9SE1L*Tl^1}E%XA8MpLH8~0nlbYo1@|&{UQLFf7Q>_u<-;)h3^1U zglG?2FMt9)iN{GJvGQ9?5a}Ym*$~!)tC-(fNLf89#}FzZya2pCeHGATf<5;G36Bls zJh*-9*~YYb^l&+>M(VMl00R~v07L+Pi1ma3CDgT|T>!Kk#6*h$Mb;B$P(KBbFvQ6+ zjAOh@tbf5tj0ti97E*9d89RTJspN{%R7EIuWqUv%K&59!Qjko@jiM!s0>aNsA;o#B zfWE^!p$tLd0=xpKmXwl=OiwQxpoAZ!#( zi!cIq*GDbR=t&A>VMHsdJ=!9F1hWRd8IPEA5@U#_(Z`cEPV)bsIrs*+6&A3Y0iwY@ znS;;_(!**CIL!cO18~p5*v2n=8&jAOOgvBKK(}!^MB`9@1L!%_0QVf|Hm0)>5(_xa z0I~i(nFHO%`tK?Rb(b`k~uK7_9r$2d$v`*6Ssa^3WtfaPL=^jSdlejX8GAN08ZKLzN6H2}UWCV-;fdjb$m zwv#FreIoomIFzb-TZNV79I0m!%e>!M>CX6s`(5*t#Qj)=rSV-()OrD^I^7GnHa=8- zpFFMnngct{vGDtH1@#yt6T+qSOM&Pb%tENZF9os4`kDDICa#h>pq5Vn{{h-b<-7X_ RA7KCh002ovPDHLkV1nRc$g}_e delta 1018 zcmVa)P89;XIG?+Z8oc=Wr;6(I87Kw#_np50l%yeG4=M_f*uPhw^ne`uD1gQG>U;A5 zYIGC;W#f#=49HMM0eVTCk^2g?i2{g+)EUn+pj1iRE?_=8>uK43e>S~{0)Q@Oz}7X= z6c`0Cw*I`+;d5Y{D8M>#8F-yDh^s(D=koIz(ntVc;{bCAn^f3)Ucee7m8zC~0S2WkQ1(42triTxA{Z11Qb?&~Vl@_( z5`_k3Awk)z%|e(;;Tnx8P|G*{CZs~tc58qM)B=p%2xZVP!L&vu`stg|sgPNT3Kvi1 z@knY;+x*OH+GX9TYiMJUywY+@IH!m1sm*zVHp?k5327cre{^VD(vBjuT)dC!-hXPt zhOpJl>W{0Ek5E?tzxSS}#p-Ud9limNV4Puf@8&b$eg6}HBAaZxZvYWEn|61Aod+Df z+h1#Oy!uWa&>AtDPIrLH0|xK*A0*PNk9z=D)oj||_i&g2@5votHvv@bjN2K|fw`G( z;vR5#zhzNPe}^rdaWyUbF#|2UY3oi$7lH$LJ^PD7ygGnSf-2?#VHP()5XM7aew}ZG z=P$m*j~_Zaz#$x<`D|I~+IJehGF1LYy#@y;13={gichwiDE2-+ujjdifN=02InKfH zJ_cR+A@WKBfY*7h0J16kn`)uPyNjTN+yRaO;4}lUfBOn_GTOHtrnne*PV4*+>AEhb z5ixLkTz*^Ca-@vCA@8Gnk@=oFHBiuEhaC^wKWoz zWw=`QR#!qGN??VS0-(~y6b$zGpD=5UYo(QXgN1sq(i#N@u@^!}BhV_)%Dna33Ik>{ zvcXnse*>tI8IS1Khdy0gAXu1b*AXNhhn~wh?E5FQH~}Er>CLpai1h oTCgweB~a|cWH1i_1N;K`AFcW7m&ZzQ1poj507*qoM6N<$f|rKaKmY&$ diff --git a/textures/pipeworks_mese_tube_plain_5.png b/textures/pipeworks_mese_tube_plain_5.png index fbe8de00f7e4db465ba83054aff8320edeef8251..2a528d426507ce25168643e2e779f1bb4516e054 100644 GIT binary patch delta 995 zcmV<9104MI3E&BkBnkm@Qb$4nuFf3kks<4UvPnciR9Jb?qONim<>LRUFC7H`IxW4#pEKJ_>3%bC|IKJK2W%zt0&K*K z(a}2~QKc6^sLbfz?|_Db7eG;Lg_{v@P}B=h(#i_Edj!C}0Oa@H3X2hNVjC|2Q^}}* zJP&U5iA&-IkZ>9SE1L*Tl^1}E^K=S!pLH8~0nlbYo1@|&{UQLFf7Q>_u<-;)h3^1U zglG?2FMt9)iN{GJvGQ9?5a}Ym*$~!)tC-(fNLf89#}FzZya2pCeHGATf<5;G36Bls zGPr%~*~YYb^l&+>M(VMl00R~v07L+Pi1ma3CDgT|T>!Kk#6*h$Mb;B$P(KBbFvQ6+ zjAOh@tbf5tj0ti97E*9d8M}OxspN{%R7EIuWqUv%K&2N(Qjko@jiM!s0>Up$A;o#B zfWE^!p$tLd0=xpKmXwl=OiwQxpoAZ!#( zi!cIq*GDZb=t&A>VMHsdJ=!9F1hWRd8IPEA5@U#_(Z`cEPV)bsIrs*+6&A3Y0iwY@ znS;;_(!**CIL!bT18~p5*v2n=8&jAOOgvBKK(}!^MB`9@1L!%_0QVf|Hm0)>5(_xa z0I~i(nFHO%`tK?Rb(b{f~uK7_9r$2d$v`*6Ssa^3WtfaPL=^jSdlejX8GAN08ZKLzN6H2}UWCV-;fdjb$m zwv#FreIoomIFzb-TZNV79I0m!%e>!M>CX6s`(5*t#Qj)=rSV-()OrD^I^7GnHa=8- zpFFMnngct{vGDtH1@#yt6T-RmOM&Pb%tENZF9os4`kDDICa#h>pq5Vn{{g}W<;~se RvPA#@002ovPDHLkV1h$w$d~{C delta 1018 zcmVa)P89;XIG?+Z8oc=Wr;7UY9w-I)_np50l%yeG4=M_f*uPhw^ne`uD1gQG>U;A5 zYIGC;W#f#=49HMM0eVTCk^2g?i2{g+)EUn+pj1iRE?_=8t7+N3e>c5|0)Q@Oz}7X= z6c`0CwtBzQ;eBB1D8MFh8F-yDh^s(D=koIz(ntVc;{bCA>s0Tf0I0`FJl<_&gAmuk zdJOT|m9U!@qWUO6p$6ylB@k=lwvqWcm^*0zA_wXALaC=EWs%!hklP-v#v_v|t^zrP zfK)3)Ucee7m8zG00S2WkQ1(42triTxA{Z11Qb?&~Vl@`E z5`_k3Awk)z^+K3h;RcNd&i^&rnwYzxSS}#p-Ud9limNV4Puf@8&b$WB(I?BAaZxZvYWEn|61Aod+Df z+h1#Oy!uWa&>AtDPIrLX0|xK*A0*PNk9z=D^=#VT_i&g2AITkHHvv@TjN2K|fw`G( z;vR7LxMfjKe}^rdaWyUbF#|2UY3oi$7lH$LJ^PD7ygGnSf-2?#VHP()5XM7aew}ZG z=P$m*&mTHFz#$x<`D|I~+IJehGF1LYy#@y;13>KoichwiDE2-+ujjdifN=02InKfH zJ_cR;A@WKBfY*7h0J16kn<}BkyNjTN+yRaO;4}lUfBOn_GTOHtrnne*POJP6>AEhb z5ixLkTz*^Ca-@vCA@7bnk@=oFHBiuEhaC^jWrUL zWw=`QR@XuxN??VS0-)B$6b$zGpD-JZ8>N+cgN1sq(i#N@u@^!}BhV_)%Dna33Ik?6 zvcc9He*>tI8ISbMGQ>Hz1tj>_~= zfL?G1@QpOvA`SrEB_MPrE(2{=Zisv%X(V7HaP$3~q66gC#D$3D;!@Z;&QV5&*msx2 zSr6AWHyAlcjen9>?qOQ9D1gM$2e@iB%lTKE}Z6nSAUqZ#=S`cFfK?y|1 owP0V`OQ6_?$zUD=2KWW=KN3{xmyRo(D*ylh07*qoM6N<$f+^|QC;$Ke diff --git a/textures/pipeworks_mese_tube_plain_6.png b/textures/pipeworks_mese_tube_plain_6.png index 76b49e36cf85b07bf360f256ca07e52d3b810817..72fa68ec6a08f9fc38e1d71e28f743f9bfc493db 100644 GIT binary patch delta 994 zcmV<810DSO3F8TnBnkm@Qb$4nuFf3kks!TJI^dtom7}45lkG2SZi&+C-jYrHmi7`ae=;KKnC;9)+9DD=Z3JciJ0MX!{ z%t2@d>0z}6oMwQF0l4R2Y~z=`jw#FtCY~pApxZbdqH(Cd0rVVdfO`&f8`D_`i3J>I zfLQ;Y%z&NmZ{jPaR;(jc`%J?o#YP|qdo$dwP7#}LX zPo7qO&4HcfSonRpf_e;+3E|xOr9gBIW+7DImx2hgerCRliK}D|sO1yDf8pu%Y^eLo QuK)l507*qoM6N<$f+5(&F8}}l delta 1019 zcmVf zc|4Me(>6czigsCd>KfWuB(JpG63*$Ndunsupv`j1OG28*e-j{aBN%5`-Mje=_}KphpvWfM?i)Y^&ZgZRVCMlx z@AlVP9Iw8U2ed}arqdmu_JF~={RfHk>f;{3RXv;b_dOhDz(;Zi*i8UcIpcN)bYO0# zo45xYK5kjmf74-0XIxFoe#}4%Z`!)k(S_guUeErb5U&p4lc0)uK$yi15QOp2mtW@_ z;rWX%@$-ky4sZwuXg*t3y7rxhuMCy{QLn)P$^cM%fZ~(wCW^g}&+B<^As`$)NRD%G zypKWGeu%u10N{0=D}ZbY|E5Z)@$MohA$Ndd065J6f9$>jos9Nvhbb-wp3^G-mvmj1 zQ}R@GOJoE1E3|U@uHrV=X2x%Z)V> zm1VeE_Ey(IAWC3`mI9#G#uN#J;Y^T$<_CrM5*d10KyLd6*ew|W$TRlYl4?cjykRan>xUGuA?%2 z6rdN}0emCPwul2jcL@lciOWEnl^Y`8NE!*)amai>r|1B=HE|&#xwsUzj&qceA@k44ofy`glX(f`90>3UaRt)z z=g(ibaN(jwixw|lymaZ(Wy_W=U%q_BiWMtYu3WWh)#}x&*Q{BycJ11A>(;Gbzkb7p z4I4LZ+_Y)a=FOY8Y}vAP>(*`Cwr$_OeaDU+J9qBfwQJYz-Mjbf*|T@=-hKP_?ccxu zz<~n?4<0;p=+NQAhmRaNa`foYW5eXx4u3f)={l<+OH*em&b?erhJ9qBgyZ7+n!)MQ) zy%!L$%M3gP^n*i5kY6yvf69Qc_B=xd1}0Ze7srr@*0)pZ%Wo-&w9UMIYjx+7HWjwD zxp%FmM%6D^re^#4+WY@&-4sr8o;vsO{@W*CIa&@(KK-;vaY^uUzq$Xi85NigEZ-Dl z?-E<^b-$Rw;i|C6LYB`A;miSAqCsbt2o!~Fb5UI4Qqa5apklJJm-_Yt%woN6Hclez zCUQM!7o2~grQM^wLVl^kah1e!6R9ITA1!>AKQ!@t8PC9E@NH7vfj=8(c_!!2a5GVQ zKl|yYE!CDOw|`cZPsuM*y(+}<^T&nFt4>8U=+Cyf|3607W!hY$rGGXUu7BfSDDd^o#G4|oGM*oF3o?pbGky+x5Qb|$HJwivtD7i-Fft8;wqc{8?DrH4;(eS z)!_a}A)|UnXY*$Vp%c3EuUeHW2lwVf8 z*Y@4E{l!z8x3ypX?f1^uVEM*R&c^#*94!2}tN!l!&yTMEnz4R!PI-m0&4)Z2s}yJZ zx*t{6A0nlgcL;MaJ&yYzQtx>~p@-dMNl8~r-M8TRfm6>Wc}!AC^}I5t)!4y5RYh!x z1kdlpTk0B7xQ)>|8?7s%+d!YP6kg`KbLh*2~7afF#!tz literal 0 HcmV?d00001 diff --git a/textures/pipeworks_one_way_tube_port.png b/textures/pipeworks_one_way_tube_port.png new file mode 100644 index 0000000000000000000000000000000000000000..dae1a7c2d82b78f379f2c44c86b6033af4bde5c3 GIT binary patch literal 641 zcmV-{0)G98P)Px%J4r-ARA_no=bI##mVq#)qVq#)q;wzJ-$$o1Hh+uEkJq1zd zG?%;3seVnGdzR|-Z8v!ky3eNwy<#)oaA<9YG+FyW%wa=RR$aZRGwsJ*6z$@R?c!q1x|9c%8N$)A~J4~ zxC2oTWVU`Xb8__J$t#w2?mT#PR4M$`X;VowP}+#rwzhuhiSGAJwD@0c+#>M^HiF=@ z;>N_eJTLJy6o4820n;3KG=Eb)kOy@(P8XL zxCHl_8@dN;N2SNHci=*PBL)sK#{oa%0i`&K9-MDvK~(v+`!T1HT#9*X=jfYW-NM}N z`o@R`Xfr#v@70`Ca-=6>az_+Jg~rV9&G!nGS1XOBsJ3^f5H$`8rT1Ofj%c9e(H}Bf zb1Ns*m^(Om<6xn&P}_{31#L50`{>@26Sms2)0mmbd{)~l9Od{l{t>`;2%i1iHKCWT z_|h>&yb(w~fB^;(fWXDTz3e00000NkvXXu0mjf1mG-j literal 0 HcmV?d00001 diff --git a/textures/pipeworks_pane.png b/textures/pipeworks_pane.png new file mode 100644 index 0000000000000000000000000000000000000000..e86336714242b920476db0f9291ae63d054bc806 GIT binary patch literal 1587 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 JPDHLkV1kp9(is2% delta 922 zcmV;L17-ZI3F!!sB#|+^e{@MiK~#7Fm6q9Z;>-@meI`o+Lmcpejp<#B{QggPzQJ?~ zrIHKv1<3!hf7a4cyIFr+eK=|%68(JVFMuRP3kOOjzzP4{{-p{XFD3x;bo+m=LV;`o za1G&f7g`n*V3D{PzIu?s1dx|I;Bps+bh1@}ySp|1`#G;=v4uc+f4E!cEs)Z)2>>`g zUVf}s7fgWtDXQyBOEwQO%{6~p4vP^$TyB7xgb?$=1mHZa>*qru3zIE`Fn;aAzqf8o zwqEGdb$hb95D{%nMc z(Lw?E1@KA;ASs32f6^1MNYAn?lyYhu5%NEcNkk;e2{ZR0NuMbpomiF>8i9~_&j3AV zdC%`6i8eAPn|D}ZCCsdV|hB3>ompbzZJ`H%fY;UU%_3q&|+3oe^w>2PR@s&i+SD#NnK9_ zwWbft*D4&o16bOvkLrrTn^CoDH+8$~t)FF+j#ZtY4%Ophq!nZ7DlhddK}J*1M*DDhCcFW^uCn;f$|wnh#0@55GBj`Z@j88z&Z+|5*??gf>M zmt|Nlk6^!Je|={imd%F}Yo^c*>-mw}a;h)YFKdRM0msnr!9ZzHW&_jViL^QYV*&#TrU*Rb`=nyc^1*!?fg^W2sAJkDhryTVYy z)W#vkr>R^^TV|JMAInE9v0UQYA77%Mrm?h5Pwv$ve*{E6z3%o1!U-LpcMIkq!Yt(a zEJ74AK=0_lF9Q3_`;=39rzX9iAS43jMMMOIF;PzNzGM_22!Kc!_CTE30SOTZpaco$*|ts}{zLCV)_^dES=ai3#BLvmTZc?`y3~ z#T%eQuqBb>>eVSA#w0HDdU_m_9k6jD>5uKz2WJ8Z534%P-`LoVv|w!};7$uy`UUWRr7~H^5Z5cQ=l}o!07*qoM6N<$f^vtz0RR91 diff --git a/textures/pipeworks_tag_tube_plain_1.png b/textures/pipeworks_tag_tube_plain_1.png index 69f9d66c79be1d28ea8bef9cd9c793880cf980e0..3df4ed7e49984b8a79045bc95474325175e57e88 100644 GIT binary patch delta 846 zcmV-U1F`(z2A&6yBn|;{Qb$4nuFf3k0000yktHaRP#AytdJDn;000zpQchC<|NsC0 z|NsC0|NsC0|NsC0|NsBG;bW-)00QtyL_t(og`Jm;dg>qyhU>8yeiDM~{om_JXtA)- z&B$DR+~Do^B_YLSnGQ_hYZ#7bKJ#K^bR!^AHUSdf>pE-zpke|r?F!PT7N}Whgq6?) zC=CD~D!_l|0f;RIIhg>N+O1*7xMH(FFF@QW4vj(N2B;%^c{T;Pb{ z11Y4~1pysJGvF(9iL_TDysEIixoq1DnEeY-B{*iAf-a5WBMWpkl-&YN zisfF&el~NZtW#62qL>n4$+#e;OoggoOq3Aie=q|$4GWg)t7M6i*vz!tAp{jGnpNxy z0SMO_0FZT_TZ8ki4Onh6;5H1xFatkHygbomHiKhU`f-VX(fbTtcoCi^|uzmLs4!|vSfb=ZCSr{Zh1BB*Z0X(gmzz!ILpr3f&4;+6L|1*k<*G&xnwMs+b!qP)nT1+X0wXx7eKgil*BRx?&P?6S~6D|44^4F{lxL|E)bg7^=YHhVe zx>-Ti$+MXf!~nsqqS33+Ro|t}zWr>WSgH}}vYfE?cfA?D{d7}9(xtO56G{9=Py}Dpm*ZBsp9yBEpBfz2UfWc)4JmL`wupThD2Y3b8 zf>`iOKn1vHJgHI-5CY7f?U#cn#tsl47l(su1qiVVLVUcx5t;&bl;Ob%Xbhs1a(Z;d zXilRj=si5ZSV(wgVHaZk*2X8`*i|xY`{qhr9aITmJZ$5!nO+i{)j~M|A7%kYfWHF# Y2Pv~mq1Wr$t^fc407*qoM6N<$g6F${_y7O^ delta 805 zcmV+=1KRwa2jB*fBmqB>GAMulu#^6zzW<)O|Czr3m$(0tyZ?%|H{Uz}007VuvN8Yw z00DGTPE!Ct=GbNc00PfRL_t(|+MSk*&g(b`guUBvi0x&7{{QxL7f$a_6>R1x*RA+FK{Q{n4p6H`P1*Z@ob0c?FDhNvDzToq;l zMSF4Y#7xBFs(f%~A~MiHJmQPaueiVtjw{j8>7*35-!5^KO=4%;bQr#WYJTtfJ77dH zaM=0-zygdYDGorIHUQ)Z+iWS41=w1c3Fzt0HKez#1%fP7|0jRIneKcepcdi;u+Hy) z$j}22n(1C^(PbS803OpLPC(E63otDKcgYCZLULvTmS!$QjvJ7ZAhiT+jqHGD7;oq7 zJ~SIU(z$oi`Ua47HQNAZJD^+oOXm&Xf6QRYVS7aIzXIlpun~HKq(}5e9Wy=u3CKNZ zIPww(CV*xfXu1lWu`-_GG6=z{5f)(F zg$?D~$O#B_DGt&3$6VHRnCcy5h8rN&)0lT*HFBVM8Xv$qRi?EF3CI@M>VGI(3j`@2 jrcDf#BWxKu{|)dbXIWTVb!ns{00000NkvXXu0mjfaynUW diff --git a/textures/pipeworks_tag_tube_plain_2.png b/textures/pipeworks_tag_tube_plain_2.png index 76aa726926f74650af68b27c8486412093bb09f6..9dfa114eeacd68610913918c0c7028959164b889 100644 GIT binary patch delta 826 zcmV-A1I7H|2AcL3h-+q=c^lMtNs{h#%QP!x9Qjxpob(Jf!kNkUq; zZ5f!t_Y{t3eda}EbTc4QHUScU={oEHpke|rH3jKY3)C%i!a-;Pln#Io72y2@#GZqH zoJ@dB{nF4duGlQl6A&B4p)rZv0UF`kvoVQjZlriv%P1D&0046zNF&7|3Fs)A0pDRL zq`ed2*@gP%vTZM5_D_IHaLhIZLm9(I7U(rlng#xFH+ByP8U_m0V0{sx91-OMO1uf+ zSkISrZJABdC2#*y2kn4Hw2+q46ustN; zF@^N;3LvT7_dV@%{077al3Q9(Kpa=Y36MoIV5vYX>^~%=4hRDvJQ6Pfhbq{A!wTR> z4<6S^lq&2$J%khRNCP0<%U>2I3D5zd`>z0ATX2N?AR#ml+f=|Ny;iP74zuG{CYGq0C8G0<;daZe?kt*#k7d zoP_#`*Ym(p@xQaUd7V4|H2Ny^sP8gn z-@dm{ENVoiEGN|YUN44k-`(`al8P>59o02MEZ@8dkl+G02|Z{yjMUl0AB&NBo=%XKmjfqpHyiC2m#jj_RAoO zaR9{I#lyk10)#juA>Q8K2wj0Y+wkNBG$v76Io*b4G?!5nj2>=aY$SYDp$W16YU3B+ z+*NG*zs01)RY~#5lnVu4y)k1jzKCA-F0DlGe5BvX4L5;BBr2qf`07*qoM6N<$ Eg0`D_W&i*H delta 769 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 Ef(0*hb^rhX delta 768 zcmV+b1ONP+2jB*fB#|*oe*tt-PE!Ct=GbNc00PfRL_t(|+G4;C0G*cU*7PU{g!4`d zQ7Pct?*CdRjB@%oJ6%7}UU)*`aw4;T9U|bWNQF+ofR+H$USAV9@Y5{2> z2@O&Lcmnvt3gp`cjO>BV5myfM-3=jh~iUB zWdLo!8iX*)fUll_k9H#GE?fhtmjI%70#*rR_VF_Ik1QZBl(b+Up2qahM2mp?1d!A> z(jhKdP|*LqR2>G0>U0+XA_8%TLcbg0H$VV+1et~>s0g5j32~K6FcrT4HZesMfDORn z8^HEAVuvU6!uOE*%!XdHy zI@An5|Iqw->aTzi!N8H$-vDgDh>+p{WYPhEv`Cv*iev%K5@rH=X6GEzucHKl?4MxZ%$$D(nTh!~;zvZU2+Rb~ zq()3npgU%UfB31>qe1P(6hAVxOJHtlFvE0rgFwwNVmd_tfeB(V0f=GXo4^5As7_q^ z&BUO1;`zX@p=^3mY(2U_*HsIRT+A#U?ucnmctLrg{bGVF9Fi8gmtPAq~aTn1I~P y-Lz&Q0a*fD{X#iPAV~Qz9b%wt;n4k0fZqWOt6=Or#1X9k0000CzBnkm@Qb$4nuFf3kks(We6m(KfQvm<}|NsC0|NsC0|NsC0|NsC0 z|GMF0sQ>^1@kvBMR9J=Y11x0~fT<~n-&&w=m5~7ZJ)GQNEzWhX4*` zyv%FUDh37jaWzXjGGGH(E7z^u!5Zs-fR+o9i&9J}=8W}GD5~9Rq^YJbrXngaMZ%nL zLyCzqRlyi3BFg{l3IHW7n5(ax60z7!wB4-tMXYF+`(X}$5SkUhBA0PsJUHlKw}-^> zm_q7!1(4L9=NZpAD!`7@!vhJH7Ahc&v+WZglV-qDfmk?yNr)Zb2Y`P>UII*iRdD(h zz>OXpu9GOMaQ^n-pMXak0P&vxvM@=o9pJnF0^qd;AUp>NzIoWD1#Cht3dvHO)xVc< z@Lz6MtI(48il$`q69AisKP~id4KNi^^Ki8a#1kMsEldR80Lx0Wc}~I-P}hOhr7VRs zd$0{KC!u`fbw2>g?*A-quJs*%IF3X1>dhVid|`ni__Boqm|NNZ28|aRu1LZ{0$7oA;mcORbIWyLVMwbd&Pm_C=ZkCbD;MGV;q7`FCG`b?x zluv21AHQ2Dni|Fb+ z-vLJR_~L@0&T}20J!r~8%m6^$0fTb`?4dqhF6{w>M}R8;T@o|e{T%{;pggJ4u}_3! z{cgVuq7Vi^*e?zT*9y>vAqipsd?R!Pu-i94DhicJlv0lSP>kwj6a}M)-6{)7-Yq?W zO^Eha8@~b1UB$XzuJi^hGznID*v98(dPxASh5QD5xe9g$xGTUv(6d$7jsy%h00000 LNkvXXu0mjfM3IEd delta 779 zcmV+m1N8i#2j>QmB#|*le*tt-PE!Ct=GbNc00P-bL_t(|+MSk(k^?OWgeSx5ICg`3 zy#KrYVUgbN)HS6<}`+f6Pg5EJ3zqn zENrSt3rhLFKdOU9LbZ+FD%w3{@L zAZ@(@qsQR^LzQNrfAVMZ?y98g?3h7Mb0LdgzEAARPnG0 zb{(5elR17k~?Jdk9qrMA8NzPEYGcNU#7~2|WNUvSUxQV=F<3 zmDK(Ya7A`J0p)Pj091`{-aIr1xO!x-J#?ks3sA^c(n~b}e=YnkK(_$Q5Ei0@;PeG> zZG`~m1Vkr9EdYBVFTmD}&rzfLc^Y*vGWSZ3wgIqKvkh<^CpEq_bWK40TMwqy(_Rve zKLh%*un}5-(A@e9#{1#eMl*# ziacr&A6inne-E@ggIv#0jQ)O;r*1hPKL7qW5736G(TshJVFcBTw{JT@f(H7glZ5f+ zCpgHVRP8+U(_mDR9C*qTlvMWNnIxQTeb8kjNE^f$a4`S*FV4rNbLf!~dF_BoO94Rf zwEG1ZNC9jVPxCM(9JvZGEwon;m;%t`!*vB9`$v=fe-l7p$sRZ$+F1P*vK9ic>Zr*k z4#Y)T0J)I^uzYNULQ6LBo|h<$2rX-20qz;9F@20R0Ir5)6G!>zD|HQ1zJl;D0mx2c z9OEkFWO5o`fHhU7DF6cyB~;7*pll@wkshW^l}uaMbo~?H4*?Ee+`)Gm82|tP07*qo JM6N<$0fIs+T8jVx diff --git a/textures/pipeworks_tag_tube_plain_6.png b/textures/pipeworks_tag_tube_plain_6.png index 458fe5d27ec90b82c596635423338d0e37ea801b..e664db61142c5de82147a09dc1ae9598ed105ed4 100644 GIT binary patch delta 823 zcmV-71IYZ`29*bpBnkm@Qb$4nuFf3kks(We6m(KfQvm<}|NsC0|NsC0|NsC0|NsC0 z|GMF0sQ>^1=Sf6CR9J z1jy7c4GrUp%>q3Eu~8fvlgJ&Q5xzYelbGg4io3OpVj&IyF!zBpQXGHgyvzJ3fP2PG!jsn)xXL(_^*en zDzqd%qbb?K1iaVIqVESau?mISEUE)`8ZoER8gKfCiY8 zP(Sf{9ylugcNRC_=8pW;z51_z9{9onB^T-zj&A>|`@g<+87N#>W(doODWz~7EOaps zbi_uwW1T=Hlgu&N@}1?|TqkEi9cXl^pv^Qn7MW%Rxt_c_Q<7Ny?4r?Ep?iIoG5hwt zgrd`amUs@nIX!&GeKa;H(zP3-DnTUQT+e_002ovPDHLkV1k_P Bez*Vt delta 767 zcmV^b@kjqmcgq}SI)1eAP2mR3qhzLR0 zASr+cfFJBYUM@h38E8)d6dcYIL!OHO1fZQ16663DfT{YrTXKk1+L?d}3VL?G@^=!*dc00PMTyc-~0MF2H)h^rJqSNQd_jxM4AtN|u~ z0Cs&MHmi>!t_m}Of1*5bt;9^k?WnwQWg;@rM%>01m7m4}w((dJZIyNkad|()qbw5J z%c9NjHr3x&{SRoP7u%TzxD z?BR|#0-8P!0Be8yBtsp5p+4)qE_zv80D#+civv(2{{`q4e}J<@glHi+JphN6Mntx9 zs~!Ng0IZGNfMpmj&e8o)FYH+T(MhQbK(3|P0@%w2jXw?TCxAcAV9LXGi{SqP`W0az z)Bs5x(Qj4s@O%r1ebTUv;ooA>lDk*Ow7;3hlrj=VJ3h& zZNzjG+Q*tq0L0MnB5=SJsvSjN zObiMDE{BFe0Y&%WoB)G$$B+R6m_yuUfbsP$&Ywk_Ysm=MR{+CO009kKy8$jKfccDY z=OB2l134qqdj?1WU^IPu0J1llz&`*IOU_^bVvKyeb&!v61NH&%6u>1mzy+WtIl#In z?&%!~Xf50`2*I)uT6kw+LwYlE0EVh0hv@vLU)EU}`3@q(2}tfpa&Lt`Yxb$l0uXz1 xHO)l`K(xS?KcOrw5F~vtEn*-YVbT5-;4k(CVTF18=uZFu002ovPDHLkV1k^oPx=4= diff --git a/textures/pipeworks_teleport_tube_plain.png b/textures/pipeworks_teleport_tube_plain.png index 0a859f2059d55f8049b05a3f435c7cd583a8ab15..d512a058a85f7a12f8968977427040f7ce8f9c08 100644 GIT binary patch delta 1188 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 diff --git a/textures/pipeworks_tube_plain.png b/textures/pipeworks_tube_plain.png index 9d6442b28493a4a0af67a0cd5623976c5527f494..850e22336164541d01963393d6e69852cbc0a509 100644 GIT binary patch delta 1491 zcmV;^1uXip2-*vf8Gi%-0001Bxm5rF00d`2O+f$vv5tKEQIh}w1(8WaK~!jgwb{#$ z99ILP5ep z2q8lJn3;Z7b#<|rad&mkbh}Hq&#J0)>(+PAx#v6IJr%UDUw_n*W3PtIBOcZt;)h#C ztXtFuz{pHz>xd_Uy3LgB02~`RY~26+%C~xA<^BLXl^ZnfvnwM~^$UFTe*wrPs>c0y z!dq)T$OP&B01VY@t3FyAQJ9r znO{k=^Tkyc9Dl9(=p_Rvue@-7K{_SI&acUhmj+{8_2F} z%08K}7Q0IGZ!f<1u}E;dKLD}0827^O8p~Wx@x3q;dAvUWbDhfwH&gAk@aqMfY`?odoTGwK!GePQ9Uy7NIQY?tf&E!g%%tXNVcba=g4^(am=6X6JeFqXj z*G#OCp%j}d6b358o#|-DfCXnhrxcmXl?p?*j9jqefkPvO%8`N8+&_0t#_;3%KqWo+OB2)Q}Yoag`bQB_|h7w~zW`ZE`M1dX($rn9U=sPkslZzC_azRoen>0ptp)uLgLl{`S_u zEta)eO1@h&khPH8aieN(-sSJtD*(O{e!C@ea>=FS+QkalV&ZQ!O4X`e@Mj~io3KWx z@MLEIb5(=k4mOM`*8yzWWM2=zuT%B4Bz(P%%^EdvUAjNFH^Y1N%2&S@ezn0_V-zh8 z9Dk|MAfng9dmHA>tSx(Wn=SW5AvJFyw=>a7Szd*{R8xa>0C!gsX8GE8L#5l|#8at^ z8u#~C=3PR2BWx{3-wY2HSpVbPaAyD$(=9pkYG|tJXj6RPbaB;drF0JUFQwb{*37qP z8^bp}7q{30Q(-HBW_Y46hd*xg!7}j^Ayfv3dbesx;*oT5wY^#?| z`)mDy+~=J;GLx7YxGCuRuUulN<3hycl4r(dN~zc*sZy=uz`sRekxY8Y?AtuGYJXz~ zN{?jzC2`BCr=F=yrM34w7sT?0UcBrR^xmqT;u`__mNKfQkj)9rJ ziLqQ}=t3`aWC}aW@}JeUS5#`Tk9=CDGSXGcP0WoQ$V}8`x=MeO`N2+e?|h6o@=&fe zS2>gDDltc5s&vCtda3?m>CUXNqkqtwd#tAxByK5j=7RHUkw`EwH#QWjWi8H#E!xWb zq^^Cz?S+cGedX=H)Q^n)XkX3hp2G&c++Jx@Tv%$j&nDH>V5M1ob)f^d2VL0Ie{U@! zk>h=CLW+%u?}P_6wP!28G+r`*j@YSpHVBQ%Mfq+;Ep5{@KNB%+ocxJbiQCEaYx&E@-S)y5Jt>&e&L z6Mf}Asdy;4rp`A{lxL><%uIqza?SL28ZC&_{Mu&jW^3hvWJ8iIeUQsq_KI7Lo|s&# tbe8?YiKyj|%a-Lhe}OnJ%v!Sh{{U!3#ah7S`7Hnd002ovPDHLkV1jMz;Jp9< delta 1063 zcmV+?1lar93$X~08Gir(0055yE&>1m00d`2O+f$vv5yPd7W06@|E|38t+q$UO=wbb2e3Gjx&>{?mP)YMe+lJAHR!iXuq z^f`R3KU{HV@B7#g(S|#dKw#s={fD!NMy9*i@br$eCmLHNv40W9CADWRPCCLyH#$;F zxY$aC4fAbJZOTO|p0Ocx#zjtLOxZQq2xQ8|n97>6ud$)roR%32XMl~~^PaZ%A3=x> z85B&pNwdpW^|mOGep_Rd+U18m4a4zJWkRF0y9jlNjIh}x9O(e<#Q zoRq6MmD2aI;eX2&SC3Toj>d-UANceJ{D=iMf_TBFH(($6*ib>vo!kwuA%c=S8>RT# z-+`x8B*gHc)AyB*qP~tgU0+D?hZ6*D=qqisADJkU@v|#+e<(~}2Eq%Tb=(mHjCvHh z7b?{cW&9+cOe{hz-LVQB6G{^(cVL7Hm17(!L&tP|<$n(1ju4^a#ad{7rSthAUvGBV zG|9KcsaO@|w)Dco$2J`wl4Lt8e(kb#8G1jm?K(Xk%b%;wVz)c&D#uOAS;6lH&VoB9 zS5kZC3kfY#DxNH;%((jLD{61FBs3=6OsRzCL}kR)!Gv6lxEaxyb2FzR&789pjh!-F zthjlkv45mx2}I$RvxLT447r%lGNbXr%?OA@PHoIZ;VT+5ZW0=ico*TY=f9Sa?4u$9Fw}*}=hsJ0f2Tor`Ch&(+ zseiuXPr|>9>dCMtq!3R5;+q@0O882L9b-(ajP`^tg?j2p*Qh`Zlj78J_GhE#9w+)UXk4;#HGn^2ojc_;G}HbQ+Q;cQH89(A$N?H0UHn{k#YjScOW zOsTzbmJA$hL^`E0;_M?d*l_$cjRj{bPhdmpgsTyi+;OmBf|9ERm4h_c@V@W3lOSn{ h4HahGS@@DK{SPvXa~PjogW~`I002ovPDHLkV1jSA1||Ri From 155c301e87d575fa525e4f7cae4dc366c1fde85f Mon Sep 17 00:00:00 2001 From: The4codeblocks <72419529+The4codeblocks@users.noreply.github.com> Date: Wed, 30 Apr 2025 16:08:13 -0500 Subject: [PATCH 2/7] replace autoplace_tubes with engine-provided nodebox functionality --- autoplace_tubes.lua | 139 ----------------------------------- chests.lua | 15 +--- compat-furnaces.lua | 12 +-- filter-injector.lua | 3 +- init.lua | 1 - mcl_furnaces.lua | 30 +------- trashcan.lua | 9 ++- tubes/lua.lua | 4 - tubes/pane_embedded_tube.lua | 10 +-- tubes/registration.lua | 122 +++++++++++------------------- tubes/routing.lua | 22 ++++-- wielder.lua | 5 ++ 12 files changed, 85 insertions(+), 287 deletions(-) delete mode 100644 autoplace_tubes.lua diff --git a/autoplace_tubes.lua b/autoplace_tubes.lua deleted file mode 100644 index 9f4e112a..00000000 --- a/autoplace_tubes.lua +++ /dev/null @@ -1,139 +0,0 @@ --- autorouting for pneumatic tubes - -local function is_tube(nodename) - return pipeworks.table_contains(pipeworks.tubenodes, nodename) -end - ---a function for determining which side of the node we are on -local function nodeside(node, tubedir) - if node.param2 < 0 or node.param2 > 23 then - node.param2 = 0 - end - - local backdir = minetest.facedir_to_dir(node.param2) - local back = vector.dot(backdir, tubedir) - if back == 1 then - return "back" - elseif back == -1 then - return "front" - end - - local topdir = pipeworks.facedir_to_top_dir(node.param2) - local top = vector.dot(topdir, tubedir) - if top == 1 then - return "top" - elseif top == -1 then - return "bottom" - end - - local rightdir = pipeworks.facedir_to_right_dir(node.param2) - local right = vector.dot(rightdir, tubedir) - if right == 1 then - return "right" - else - return "left" - end -end - -local vts = {0, 3, 1, 4, 2, 5} -local tube_table = {[0] = 1, 2, 2, 4, 2, 4, 4, 5, 2, 3, 4, 6, 4, 6, 5, 7, 2, 4, 3, 6, 4, 5, 6, 7, 4, 6, 6, 8, 5, 7, 7, 9, 2, 4, 4, 5, 3, 6, 6, 7, 4, 6, 5, 7, 6, 8, 7, 9, 4, 5, 6, 7, 6, 7, 8, 9, 5, 7, 7, 9, 7, 9, 9, 10} -local tube_table_facedirs = {[0] = 0, 0, 5, 0, 3, 4, 3, 0, 2, 0, 2, 0, 6, 4, 3, 0, 7, 12, 5, 12, 7, 4, 5, 5, 18, 20, 16, 0, 7, 4, 7, 0, 1, 8, 1, 1, 1, 13, 1, 1, 10, 8, 2, 2, 17, 4, 3, 6, 9, 9, 9, 9, 21, 13, 1, 1, 10, 10, 11, 2, 19, 4, 3, 0} -local function tube_autoroute(pos) - local active = {0, 0, 0, 0, 0, 0} - local nctr = minetest.get_node(pos) - if not is_tube(nctr.name) then return end - - local adjustments = { - {x = -1, y = 0, z = 0}, - {x = 1, y = 0, z = 0}, - {x = 0, y = -1, z = 0}, - {x = 0, y = 1, z = 0}, - {x = 0, y = 0, z = -1}, - {x = 0, y = 0, z = 1} - } - -- xm = 1, xp = 2, ym = 3, yp = 4, zm = 5, zp = 6 - - local adjlist = {} -- this will be used in item_transport - - for i, adj in ipairs(adjustments) do - local position = vector.add(pos, adj) - local node = minetest.get_node(position) - - local idef = minetest.registered_nodes[node.name] - -- handle the tubes themselves - if is_tube(node.name) then - active[i] = 1 - table.insert(adjlist, adj) - -- handle new style connectors - elseif idef and idef.tube and idef.tube.connect_sides then - if idef.tube.connect_sides[nodeside(node, vector.multiply(adj, -1))] then - active[i] = 1 - table.insert(adjlist, adj) - end - end - end - - minetest.get_meta(pos):set_string("adjlist", minetest.serialize(adjlist)) - - -- all sides checked, now figure which tube to use. - - local nodedef = minetest.registered_nodes[nctr.name] - local basename = nodedef.basename - if nodedef.style == "old" then - local nsurround = "" - for _, n in ipairs(active) do - nsurround = nsurround..n - end - nctr.name = basename.."_"..nsurround - elseif nodedef.style == "6d" then - local s = 0 - for i, n in ipairs(active) do - if n == 1 then - s = s + 2^vts[i] - end - end - nctr.name = basename.."_"..tube_table[s] - nctr.param2 = tube_table_facedirs[s] - end - minetest.swap_node(pos, nctr) -end - -function pipeworks.scan_for_tube_objects(pos) - for side = 0, 6 do - tube_autoroute(vector.add(pos, pipeworks.directions.side_to_dir(side))) - end -end - -function pipeworks.after_place(pos) - pipeworks.scan_for_tube_objects(pos) -end - -function pipeworks.after_dig(pos) - pipeworks.scan_for_tube_objects(pos) -end - --- Screwdriver calls this function before rotating a node. --- However, connections must be updated *after* the node is rotated --- So, this function does the rotation itself and returns `true`. --- (Note: screwdriver already checks for protected areas.) - --- This should only be used for tubes that don't autoconnect. --- (For example, one-way tubes.) --- Autoconnecting tubes will just revert back to their original state --- when they are updated. -function pipeworks.on_rotate(pos, node, user, mode, new_param2) - node.param2 = new_param2 - minetest.swap_node(pos, node) - pipeworks.scan_for_tube_objects(pos) - return true -end - -if minetest.get_modpath("mesecons_mvps") then - mesecon.register_on_mvps_move(function(moved_nodes) - for _, n in ipairs(moved_nodes) do - pipeworks.scan_for_tube_objects(n.pos) - pipeworks.scan_for_tube_objects(n.oldpos) - end - end) -end - diff --git a/chests.lua b/chests.lua index 74b658e1..26c649ee 100644 --- a/chests.lua +++ b/chests.lua @@ -9,6 +9,7 @@ pipeworks.chests = {} -- @param connect_sides: which directions the chests shall connect to function pipeworks.override_chest(chestname, override, connect_sides) local old_def = minetest.registered_nodes[chestname] + local nodebox_connection = {} local tube_entry = "^pipeworks_tube_connection_wooden.png" override.tiles = override.tiles or old_def.tiles @@ -22,6 +23,7 @@ function pipeworks.override_chest(chestname, override, connect_sides) local tile_directions = {"top", "bottom", "right", "left", "back", "front"} for i, direction in ipairs(tile_directions) do if connect_sides[direction] then + table.insert( nodebox_connection, direction ) if type(override.tiles[i]) == "string" then override.tiles[i] = override.tiles[i] .. tube_entry elseif type(override.tiles[i]) == "table" and not override.tiles[i].animation then @@ -30,18 +32,6 @@ function pipeworks.override_chest(chestname, override, connect_sides) end end - local old_after_place_node = override.after_place_node or old_def.after_place_node or function() end - override.after_place_node = function(pos, placer, itemstack, pointed_thing) - old_after_place_node(pos, placer, itemstack, pointed_thing) - pipeworks.after_place(pos) - end - - local old_after_dig = override.after_dig or old_def.after_dig_node or function() end - override.after_dig_node = function(pos, oldnode, oldmetadata, digger) - old_after_dig(pos, oldnode, oldmetadata, digger) - pipeworks.after_dig(pos, oldnode, oldmetadata, digger) - end - local old_on_rotate if override.on_rotate ~= nil then old_on_rotate = override.on_rotate @@ -84,6 +74,7 @@ function pipeworks.override_chest(chestname, override, connect_sides) override.groups = override.groups or old_def.groups or {} override.groups.tubedevice = 1 override.groups.tubedevice_receiver = 1 + override.connect_sides = nodebox_connection minetest.override_item(chestname, override) pipeworks.chests[chestname] = true diff --git a/compat-furnaces.lua b/compat-furnaces.lua index c4cbd86c..8a00547b 100644 --- a/compat-furnaces.lua +++ b/compat-furnaces.lua @@ -62,9 +62,9 @@ local override = { connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1} }, - after_place_node = pipeworks.after_place, - after_dig_node = pipeworks.after_dig, - on_rotate = pipeworks.on_rotate + on_rotate = pipeworks.on_rotate, + + connect_sides = {"left", "right", "back", "bottom", "top"} } local override_active = { @@ -113,9 +113,9 @@ local override_active = { connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1} }, - after_place_node = pipeworks.after_place, - after_dig_node = pipeworks.after_dig, - on_rotate = pipeworks.on_rotate + on_rotate = pipeworks.on_rotate, + + connect_sides = {"left", "right", "back", "bottom", "top"} } if minetest.get_modpath("default") then diff --git a/filter-injector.lua b/filter-injector.lua index cac48587..79f2bdf1 100644 --- a/filter-injector.lua +++ b/filter-injector.lua @@ -425,9 +425,7 @@ for _, data in ipairs({ end, after_place_node = function (pos, placer) minetest.get_meta(pos):set_string("owner", placer:get_player_name()) - pipeworks.after_place(pos) end, - after_dig_node = pipeworks.after_dig, on_rotate = pipeworks.on_rotate, allow_metadata_inventory_put = function(pos, listname, index, stack, player) if not pipeworks.may_configure(pos, player) then @@ -452,6 +450,7 @@ for _, data in ipairs({ return count end, tube = {connect_sides = {right = 1}}, + connect_sides = {"right"}, } if data.digiline then diff --git a/init.lua b/init.lua index 6d85a066..541e3d7f 100644 --- a/init.lua +++ b/init.lua @@ -54,7 +54,6 @@ end dofile(pipeworks.modpath.."/common.lua") dofile(pipeworks.modpath.."/models.lua") dofile(pipeworks.modpath.."/autoplace_pipes.lua") -dofile(pipeworks.modpath.."/autoplace_tubes.lua") dofile(pipeworks.modpath.."/luaentity.lua") dofile(pipeworks.modpath.."/item_transport.lua") dofile(pipeworks.modpath.."/flowing_logic.lua") diff --git a/mcl_furnaces.lua b/mcl_furnaces.lua index e23a297c..b785b906 100644 --- a/mcl_furnaces.lua +++ b/mcl_furnaces.lua @@ -76,18 +76,9 @@ override.tube = { end end, input_inventory = "dst", - connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1} + connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1}, } -override.after_place_node = function(pos, placer, itemstack, pointed_thing) - pipeworks.after_place(pos, placer, itemstack, pointed_thing) -end - -override.after_dig_node = function(pos, oldnode, oldmetadata, digger) - old_furnace.after_dig_node(pos, oldnode, oldmetadata, digger) - pipeworks.after_dig(pos) -end - override.on_metadata_inventory_take = function(pos, listname, index, stack, player) if listname == "dst" then if stack:get_name() == "mcl_core:iron_ingot" then @@ -101,6 +92,7 @@ end override.on_rotate = pipeworks.on_rotate +override.connect_sides = {"left", "right", "back", "bottom", "top"} local override_active = table.copy(override) @@ -188,15 +180,6 @@ override_blast_furnace.tube = { connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1} } -override_blast_furnace.after_place_node = function(pos, placer, itemstack, pointed_thing) - pipeworks.after_place(pos, placer, itemstack, pointed_thing) -end - -override_blast_furnace.after_dig_node = function(pos, oldnode, oldmetadata, digger) - old_blast_furnace.after_dig_node(pos, oldnode, oldmetadata, digger) - pipeworks.after_dig(pos) -end - override_blast_furnace.on_metadata_inventory_take = function(pos, listname, index, stack, player) -- Award smelting achievements if listname == "dst" then @@ -299,15 +282,6 @@ override_smoker.tube = { connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1} } -override_smoker.after_place_node = function(pos, placer, itemstack, pointed_thing) - pipeworks.after_place(pos, placer, itemstack, pointed_thing) -end - -override_smoker.after_dig_node = function(pos, oldnode, oldmetadata, digger) - old_smoker.after_dig_node(pos, oldnode, oldmetadata, digger) - pipeworks.after_dig(pos) -end - override_smoker.on_metadata_inventory_take = function(pos, listname, index, stack, player) -- Award fish achievements if listname == "dst" then diff --git a/trashcan.lua b/trashcan.lua index c8ae9b2e..b0838600 100644 --- a/trashcan.lua +++ b/trashcan.lua @@ -1,5 +1,6 @@ local S = minetest.get_translator("pipeworks") -minetest.register_node("pipeworks:trashcan", { +local voidname = "pipeworks:trashcan" +minetest.register_node(voidname, { description = S("Trash Can"), drawtype = "normal", tiles = { @@ -43,10 +44,10 @@ minetest.register_node("pipeworks:trashcan", { meta:set_string("infotext", S("Trash Can")) meta:get_inventory():set_size("trash", 1) end, - after_place_node = pipeworks.after_place, - after_dig_node = pipeworks.after_dig, on_metadata_inventory_put = function(pos, listname, index, stack, player) minetest.get_meta(pos):get_inventory():set_stack(listname, index, ItemStack("")) end, }) -pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:trashcan" +pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = voidname +pipeworks.flowables.register.simple(voidname) +pipeworks.flowables.register.output(voidname, 0, 0, function(pos, node, currentpressure, finitemode, currentfluidtype) return 4, currentfluidtype end, function()end) diff --git a/tubes/lua.lua b/tubes/lua.lua index ec09829d..67b71c52 100644 --- a/tubes/lua.lua +++ b/tubes/lua.lua @@ -942,7 +942,6 @@ for white = 0, 1 do after_dig_node = function(pos, node) mesecon.do_cooldown(pos) mesecon.receptor_off(pos, output_rules) - pipeworks.after_dig(pos, node) end, is_luacontroller = true, on_timer = node_timer, @@ -994,7 +993,6 @@ for white = 0, 1 do return go_back(velocity) end, }, - after_place_node = pipeworks.after_place, on_blast = function(pos, intensity) if not intensity or intensity > 1 + 3^0.5 then minetest.remove_node(pos) @@ -1076,8 +1074,6 @@ minetest.register_node(BASENAME .. "_burnt", { connect_sides = {front = 1, back = 1, left = 1, right = 1, top = 1, bottom = 1}, priority = 50, }, - after_place_node = pipeworks.after_place, - after_dig_node = pipeworks.after_dig, on_blast = function(pos, intensity) if not intensity or intensity > 1 + 3^0.5 then minetest.remove_node(pos) diff --git a/tubes/pane_embedded_tube.lua b/tubes/pane_embedded_tube.lua index 4bc1e833..8e850a1f 100644 --- a/tubes/pane_embedded_tube.lua +++ b/tubes/pane_embedded_tube.lua @@ -6,6 +6,7 @@ local pane_box = { type = "fixed", fixed = { { -9/64, -9/64, -8/16, 9/64, 9/64, 8/16 }, -- tube + { -12/64, -12/64, -12/64, 12/64, 12/64, 12/64 }, -- tube core { -8/16, -8/16, -1/16, 8/16, 8/16, 1/16 } -- pane } } @@ -21,8 +22,8 @@ minetest.register_node("pipeworks:steel_pane_embedded_tube", { pipeworks.make_tube_tile("pipeworks_pane_embedded_tube_sides.png^[transformR90"), pipeworks.make_tube_tile("pipeworks_pane_embedded_tube_sides.png"), pipeworks.make_tube_tile("pipeworks_pane_embedded_tube_sides.png"), - pipeworks.make_tube_tile("pipeworks_pane_embedded_tube_ends.png"), - pipeworks.make_tube_tile("pipeworks_pane_embedded_tube_ends.png"), + pipeworks.make_tube_tile("pipeworks_pane.png^pipeworks_one_way_tube_port.png"), + pipeworks.make_tube_tile("pipeworks_pane.png^pipeworks_one_way_tube_port.png"), }, use_texture_alpha = texture_alpha_mode, node_box = pane_box, @@ -46,8 +47,7 @@ minetest.register_node("pipeworks:steel_pane_embedded_tube", { return vector.equals(dir, direction) or vector.equals(vector.multiply(dir, -1), direction) end, }, - after_place_node = pipeworks.after_place, - after_dig_node = pipeworks.after_dig, - on_rotate = pipeworks.on_rotate, + on_rotate = pipeworks.on_rotate, + connect_sides = {"front", "back"}, }) pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:steel_pane_embedded_tube" diff --git a/tubes/registration.lua b/tubes/registration.lua index cbfc1506..226d8d04 100644 --- a/tubes/registration.lua +++ b/tubes/registration.lua @@ -12,9 +12,7 @@ local REGISTER_COMPATIBILITY = true local vti = {4, 3, 2, 1, 6, 5} -local default_noctrs = { "pipeworks_tube_noctr.png" } local default_plain = { "pipeworks_tube_plain.png" } -local default_ends = { "pipeworks_tube_end.png" } local texture_mt = { __index = function(table, key) @@ -31,81 +29,48 @@ local texture_mt = { local texture_alpha_mode = minetest.features.use_texture_alpha_string_modes and "clip" or true -local register_one_tube = function(name, tname, dropname, desc, plain, noctrs, ends, short, inv, special, connects, style) - noctrs = noctrs or default_noctrs - setmetatable(noctrs, texture_mt) +local box = { + type = "connected", + connect_top = { -9/64, 9/64, -9/64, 9/64, 1/2, 9/64 }, + connect_bottom = { -9/64, -1/2, -9/64, 9/64,-9/64, 9/64 }, + connect_front = { -9/64, -9/64, -1/2, 9/64, 9/64,-9/64 }, + connect_back = { -9/64, -9/64, 9/64, 9/64, 9/64, 1/2 }, + connect_left = { -1/2, -9/64, -9/64,-9/64, 9/64, 9/64 }, + connect_right = { 9/64, -9/64, -9/64, 1/2, 9/64, 9/64 }, + fixed = { -12/64, -12/64, -12/64, 12/64, 12/64, 12/64 } +} + +local selbox = { + type = "connected", + connect_top = { -10/64, 10/64, -10/64, 10/64, 1/2, 10/64 }, + connect_bottom = { -10/64, -1/2, -10/64, 10/64,-10/64, 10/64 }, + connect_front = { -10/64, -10/64, -1/2, 10/64, 10/64,-10/64 }, + connect_back = { -10/64, -10/64, 10/64, 10/64, 10/64, 1/2 }, + connect_left = { -1/2, -10/64, -10/64,-10/64, 10/64, 10/64 }, + connect_right = { 10/64, -10/64, -10/64, 1/2, 10/64, 10/64 }, + fixed = { -13/64, -13/64, -13/64, 13/64, 13/64, 13/64 } +} + +local register_one_tube = function(name, tname, dropname, desc, plain, _, _, _, inv, special, connects, style) plain = plain or default_plain setmetatable(plain, texture_mt) - ends = ends or default_ends - setmetatable(ends, texture_mt) - short = short or "pipeworks_tube_short.png" inv = inv or "pipeworks_tube_inv.png" - local outboxes = {} - local outsel = {} - local outimgs = {} - - for i = 1, 6 do - outimgs[vti[i]] = plain[i] - end - - for _, v in ipairs(connects) do - pipeworks.table_extend(outboxes, pipeworks.tube_boxes[v]) - table.insert(outsel, pipeworks.tube_selectboxes[v]) - outimgs[vti[v]] = noctrs[v] - end - - if #connects == 1 then - local v = connects[1] - v = v-1 + 2*(v%2) -- Opposite side - outimgs[vti[v]] = ends[v] - end - - local tgroups = {snappy = 3, tube = 1, tubedevice = 1, not_in_creative_inventory = 1, dig_generic = 4, axey=1, handy=1, pickaxey=1} - local tubedesc = string.format("%s %s", desc, dump(connects)) - local iimg = type(plain[1]) == "table" and plain[1].name or plain[1] - local wscale = {x = 1, y = 1, z = 1} - - if #connects == 0 then - tgroups = {snappy = 3, tube = 1, tubedevice = 1, dig_generic = 4, axey=1, handy=1, pickaxey=1} - tubedesc = desc - iimg=inv - outimgs = { - short, short, - ends[3],ends[4], - short, short - } - outboxes = { -24/64, -9/64, -9/64, 24/64, 9/64, 9/64 } - outsel = { -24/64, -10/64, -10/64, 24/64, 10/64, 10/64 } - wscale = {x = 1, y = 1, z = 0.01} - end - - for i, tile in ipairs(outimgs) do - outimgs[i] = pipeworks.make_tube_tile(tile) - end - - local rname = string.format("%s_%s", name, tname) - table.insert(tubenodes, rname) + table.insert(tubenodes, name) local nodedef = { - description = tubedesc, + description = desc, drawtype = "nodebox", - tiles = outimgs, + tiles = plain, use_texture_alpha = texture_alpha_mode, sunlight_propagates = true, - inventory_image = iimg, - wield_image = iimg, - wield_scale = wscale, + inventory_image = inv, + wield_image = inv, + wield_scale = {x = 1, y = 1, z = 0.01}, paramtype = "light", - selection_box = { - type = "fixed", - fixed = outsel - }, - node_box = { - type = "fixed", - fixed = outboxes - }, - groups = tgroups, + selection_box = selbox, + node_box = box, + groups = {snappy = 3, tube = 1, tubedevice = 1, dig_generic = 4, axey=1, handy=1, pickaxey=1}, is_ground_content = false, _mcl_hardness=0.8, _sound_def = { @@ -113,6 +78,7 @@ local register_one_tube = function(name, tname, dropname, desc, plain, noctrs, e }, walkable = true, basename = name, + connects_to = {"group:tubedevice","group:injector"}, style = style, drop = string.format("%s_%s", name, dropname), tubelike = 1, @@ -132,9 +98,7 @@ local register_one_tube = function(name, tname, dropname, desc, plain, noctrs, e end return minetest.node_punch(pos, node, player, pointed) end, - after_place_node = pipeworks.after_place, - after_dig_node = pipeworks.after_dig, - on_rotate = false, + on_rotate = false, on_blast = function(pos, intensity) if not intensity or intensity > 1 + 3^0.5 then minetest.remove_node(pos) @@ -147,9 +111,6 @@ local register_one_tube = function(name, tname, dropname, desc, plain, noctrs, e check_for_horiz_pole = pipeworks.check_for_horiz_tube, tubenumber = tonumber(tname) } - if style == "6d" then - nodedef.paramtype2 = "facedir" - end if special == nil then special = {} end @@ -169,10 +130,12 @@ local register_one_tube = function(name, tname, dropname, desc, plain, noctrs, e end end - minetest.register_node(rname, nodedef) + local rname = string.format("%s_%s", name, tname) + core.register_alias(rname, name) + if not core.registered_nodes[name] then core.register_node(name, nodedef) end end -local register_all_tubes = function(name, desc, plain, noctrs, ends, short, inv, special, old_registration) +local register_all_tubes = function(name, desc, plain, _, _, _, inv, special, old_registration) if old_registration then for xm = 0, 1 do for xp = 0, 1 do @@ -200,7 +163,7 @@ local register_all_tubes = function(name, desc, plain, noctrs, ends, short, inv, connects[#connects+1] = 6 end local tname = xm..xp..ym..yp..zm..zp - register_one_tube(name, tname, "000000", desc, plain, noctrs, ends, short, inv, special, connects, "old") + register_one_tube(name, tname, "000000", desc, plain, nil, nil, nil, inv, special, connects, "old") end end end @@ -212,7 +175,7 @@ local register_all_tubes = function(name, desc, plain, noctrs, ends, short, inv, -- 6d tubes: uses only 10 nodes instead of 64, but the textures must be rotated local cconnects = {{}, {1}, {1, 2}, {1, 3}, {1, 3, 5}, {1, 2, 3}, {1, 2, 3, 5}, {1, 2, 3, 4}, {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5, 6}} for index, connects in ipairs(cconnects) do - register_one_tube(name, tostring(index), "1", desc, plain, noctrs, ends, short, inv, special, connects, "6d") + register_one_tube(name, tostring(index), "1", desc, plain, nil, nil, nil, inv, special, connects, "6d") end if REGISTER_COMPATIBILITY then local cname = name.."_compatibility" @@ -225,8 +188,7 @@ local register_all_tubes = function(name, desc, plain, noctrs, ends, short, inv, paramtype = "light", sunlight_propagates = true, description = S("Pneumatic tube segment (legacy)"), - after_place_node = pipeworks.after_place, - groups = {not_in_creative_inventory = 1, tube_to_update = 1, tube = 1}, + groups = {not_in_creative_inventory = 1, tube_to_update = 1, tube = 1}, is_ground_content = false, tube = {connect_sides = {front = 1, back = 1, left = 1, right = 1, top = 1, bottom = 1}}, drop = name.."_1", @@ -254,7 +216,7 @@ end pipeworks.register_tube = function(name, def, ...) if type(def) == "table" then register_all_tubes(name, def.description, - def.plain, def.noctr, def.ends, def.short, + def.plain, nil, nil, nil, def.inventory_image, def.node_def, def.no_facedir) else -- we assert to be the old function with the second parameter being the description diff --git a/tubes/routing.lua b/tubes/routing.lua index e0a90aa8..c379828f 100644 --- a/tubes/routing.lua +++ b/tubes/routing.lua @@ -165,8 +165,14 @@ local texture_alpha_mode = minetest.features.use_texture_alpha_string_modes and "clip" or true if pipeworks.enable_one_way_tube then - local tiles = {"pipeworks_one_way_tube_top.png", "pipeworks_one_way_tube_top.png", "pipeworks_one_way_tube_output.png", - "pipeworks_one_way_tube_input.png", "pipeworks_one_way_tube_side.png", "pipeworks_one_way_tube_top.png"} + local tiles = { + "pipeworks_one_way_tube.png", + "pipeworks_one_way_tube.png^[transformR180", + "pipeworks_one_way_tube_port.png", + "pipeworks_one_way_tube_port.png", + "pipeworks_one_way_tube.png^[transformR180", + "pipeworks_one_way_tube.png" + } for i, tile in ipairs(tiles) do tiles[i] = pipeworks.make_tube_tile(tile) end @@ -178,8 +184,13 @@ if pipeworks.enable_one_way_tube then drawtype = "nodebox", paramtype = "light", node_box = {type = "fixed", - fixed = {{-1/2, -9/64, -9/64, 1/2, 9/64, 9/64}}}, - groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1, axey=1, handy=1, pickaxey=1}, + fixed = { + {-1/2, -9/64, -9/64, -9/64, 9/64, 9/64}, + {9/64, -9/64, -9/64, 1/2, 9/64, 9/64}, + {-13/64, -13/64, -13/64, 13/64, 13/64, 13/64} + } + }, + groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1, tube = 1, axey=1, handy=1, pickaxey=1}, is_ground_content = false, _mcl_hardness=0.8, _sound_def = { @@ -196,8 +207,7 @@ if pipeworks.enable_one_way_tube then end, priority = 75 -- Higher than normal tubes, but lower than receivers }, - after_place_node = pipeworks.after_place, - after_dig_node = pipeworks.after_dig, + connect_sides = {"left","right"}, on_rotate = pipeworks.on_rotate, check_for_pole = pipeworks.check_for_vert_tube, check_for_horiz_pole = pipeworks.check_for_horiz_tube diff --git a/wielder.lua b/wielder.lua index 0850e5a7..0317c9d9 100644 --- a/wielder.lua +++ b/wielder.lua @@ -123,6 +123,10 @@ function pipeworks.register_wielder(def) axey = 1, handy = 1, pickaxey = 1, not_in_creative_inventory = state == "on" and 1 or nil } + local connect_sides = {} + for k, _ in ipairs(def.connect_sides) do + table.insert(connect_sides, k) + end minetest.register_node(def.name.."_"..state, { description = def.description, tiles = def.tiles[state], @@ -175,6 +179,7 @@ function pipeworks.register_wielder(def) return stack:get_count() end, }, + connect_sides = connect_sides, on_construct = function(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() From 599b111e6ab7346d418fc777f8de5d56b702f05b Mon Sep 17 00:00:00 2001 From: The4codeblocks <72419529+The4codeblocks@users.noreply.github.com> Date: Wed, 30 Apr 2025 16:12:10 -0500 Subject: [PATCH 3/7] on_rotate is irrelevant now --- chests.lua | 20 -------------------- compat-furnaces.lua | 4 ---- filter-injector.lua | 1 - mcl_furnaces.lua | 8 -------- tubes/embedded_tube.lua | 1 - tubes/pane_embedded_tube.lua | 1 - tubes/routing.lua | 1 - wielder.lua | 1 - 8 files changed, 37 deletions(-) diff --git a/chests.lua b/chests.lua index 26c649ee..99616a37 100644 --- a/chests.lua +++ b/chests.lua @@ -32,26 +32,6 @@ function pipeworks.override_chest(chestname, override, connect_sides) end end - local old_on_rotate - if override.on_rotate ~= nil then - old_on_rotate = override.on_rotate - elseif old_def.on_rotate ~= nil then - old_on_rotate = old_def.on_rotate - else - old_on_rotate = function() end - end - -- on_rotate = false -> rotation disabled, no need to update tubes - -- everything else: undefined by the most common screwdriver mods - if type(old_on_rotate) == "function" then - override.on_rotate = function(pos, node, user, mode, new_param2) - if old_on_rotate(pos, node, user, mode, new_param2) ~= false then - return pipeworks.on_rotate(pos, node, user, mode, new_param2) - else - return false - end - end - end - override.tube = { insert_object = function(pos, node, stack, direction) local meta = minetest.get_meta(pos) diff --git a/compat-furnaces.lua b/compat-furnaces.lua index 8a00547b..76777326 100644 --- a/compat-furnaces.lua +++ b/compat-furnaces.lua @@ -62,8 +62,6 @@ local override = { connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1} }, - on_rotate = pipeworks.on_rotate, - connect_sides = {"left", "right", "back", "bottom", "top"} } @@ -113,8 +111,6 @@ local override_active = { connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1} }, - on_rotate = pipeworks.on_rotate, - connect_sides = {"left", "right", "back", "bottom", "top"} } diff --git a/filter-injector.lua b/filter-injector.lua index 79f2bdf1..39cb7b42 100644 --- a/filter-injector.lua +++ b/filter-injector.lua @@ -426,7 +426,6 @@ for _, data in ipairs({ after_place_node = function (pos, placer) minetest.get_meta(pos):set_string("owner", placer:get_player_name()) end, - on_rotate = pipeworks.on_rotate, allow_metadata_inventory_put = function(pos, listname, index, stack, player) if not pipeworks.may_configure(pos, player) then return 0 diff --git a/mcl_furnaces.lua b/mcl_furnaces.lua index b785b906..a0266b4d 100644 --- a/mcl_furnaces.lua +++ b/mcl_furnaces.lua @@ -90,8 +90,6 @@ override.on_metadata_inventory_take = function(pos, listname, index, stack, play end end -override.on_rotate = pipeworks.on_rotate - override.connect_sides = {"left", "right", "back", "bottom", "top"} local override_active = table.copy(override) @@ -190,9 +188,6 @@ override_blast_furnace.on_metadata_inventory_take = function(pos, listname, inde end end -override_blast_furnace.on_rotate = pipeworks.on_rotate - - local override_blast_active = table.copy(override) override_blast_active.tiles = { @@ -292,9 +287,6 @@ override_smoker.on_metadata_inventory_take = function(pos, listname, index, stac end end -override_smoker.on_rotate = pipeworks.on_rotate - - local override_smoker_active = table.copy(override) override_smoker_active.tiles = { diff --git a/tubes/embedded_tube.lua b/tubes/embedded_tube.lua index 0ca6e36d..17ec8926 100644 --- a/tubes/embedded_tube.lua +++ b/tubes/embedded_tube.lua @@ -47,7 +47,6 @@ function pipeworks.register_embedded_tube(nodename, opts) }, after_place_node = pipeworks.after_place, after_dig_node = pipeworks.after_dig, - on_rotate = pipeworks.on_rotate, }) minetest.register_craft( { diff --git a/tubes/pane_embedded_tube.lua b/tubes/pane_embedded_tube.lua index 8e850a1f..1fc1d6c9 100644 --- a/tubes/pane_embedded_tube.lua +++ b/tubes/pane_embedded_tube.lua @@ -47,7 +47,6 @@ minetest.register_node("pipeworks:steel_pane_embedded_tube", { return vector.equals(dir, direction) or vector.equals(vector.multiply(dir, -1), direction) end, }, - on_rotate = pipeworks.on_rotate, connect_sides = {"front", "back"}, }) pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:steel_pane_embedded_tube" diff --git a/tubes/routing.lua b/tubes/routing.lua index c379828f..dc13a683 100644 --- a/tubes/routing.lua +++ b/tubes/routing.lua @@ -208,7 +208,6 @@ if pipeworks.enable_one_way_tube then priority = 75 -- Higher than normal tubes, but lower than receivers }, connect_sides = {"left","right"}, - on_rotate = pipeworks.on_rotate, check_for_pole = pipeworks.check_for_vert_tube, check_for_horiz_pole = pipeworks.check_for_horiz_tube }) diff --git a/wielder.lua b/wielder.lua index 0317c9d9..367b80da 100644 --- a/wielder.lua +++ b/wielder.lua @@ -207,7 +207,6 @@ function pipeworks.register_wielder(def) end pipeworks.scan_for_tube_objects(pos) end, - on_rotate = pipeworks.on_rotate, allow_metadata_inventory_put = function(pos, listname, index, stack, player) if not pipeworks.may_configure(pos, player) then return 0 end return stack:get_count() From 502bc3165ca867fd6748efcc14d3c4ce1d1e6c22 Mon Sep 17 00:00:00 2001 From: The4codeblocks <72419529+The4codeblocks@users.noreply.github.com> Date: Thu, 1 May 2025 02:40:05 -0500 Subject: [PATCH 4/7] remove tube scanning --- autocrafter.lua | 4 ---- item_transport.lua | 1 - tubes/lua.lua | 2 -- tubes/registration.lua | 17 ----------------- tubes/routing.lua | 1 - tubes/teleport.lua | 1 - tubes/vacuum.lua | 1 - wielder.lua | 2 -- 8 files changed, 29 deletions(-) diff --git a/autocrafter.lua b/autocrafter.lua index b4954b6f..af29ccc7 100644 --- a/autocrafter.lua +++ b/autocrafter.lua @@ -511,10 +511,6 @@ minetest.register_node("pipeworks:autocrafter", { local inv = meta:get_inventory() return (inv:is_empty("src") and inv:is_empty("dst")) end, - after_place_node = pipeworks.scan_for_tube_objects, - after_dig_node = function(pos) - pipeworks.scan_for_tube_objects(pos) - end, on_destruct = function(pos) autocrafterCache[minetest.hash_node_position(pos)] = nil end, diff --git a/item_transport.lua b/item_transport.lua index ddf2a08c..10298d74 100644 --- a/item_transport.lua +++ b/item_transport.lua @@ -87,7 +87,6 @@ function pipeworks.break_tube(pos) local meta = minetest.get_meta(pos) meta:set_string("the_tube_was", minetest.serialize(node)) minetest.swap_node(pos, {name = "pipeworks:broken_tube_1"}) - pipeworks.scan_for_tube_objects(pos) end local crunch_tube = function(pos, cnode, cmeta) diff --git a/tubes/lua.lua b/tubes/lua.lua index 67b71c52..95ea08f2 100644 --- a/tubes/lua.lua +++ b/tubes/lua.lua @@ -999,7 +999,6 @@ for white = 0, 1 do return end minetest.swap_node(pos, {name = "pipeworks:broken_tube_1"}) - pipeworks.scan_for_tube_objects(pos) end, }) end @@ -1080,7 +1079,6 @@ minetest.register_node(BASENAME .. "_burnt", { return end minetest.swap_node(pos, {name = "pipeworks:broken_tube_1"}) - pipeworks.scan_for_tube_objects(pos) end, }) diff --git a/tubes/registration.lua b/tubes/registration.lua index 226d8d04..5ec22f24 100644 --- a/tubes/registration.lua +++ b/tubes/registration.lua @@ -105,7 +105,6 @@ local register_one_tube = function(name, tname, dropname, desc, plain, _, _, _, return {string.format("%s_%s", name, dropname)} end minetest.swap_node(pos, {name = "pipeworks:broken_tube_1"}) - pipeworks.scan_for_tube_objects(pos) end, check_for_pole = pipeworks.check_for_vert_tube, check_for_horiz_pole = pipeworks.check_for_horiz_tube, @@ -225,19 +224,3 @@ pipeworks.register_tube = function(name, def, ...) register_all_tubes(name, def, ...) end end - - -if REGISTER_COMPATIBILITY then - minetest.register_abm({ - nodenames = {"group:tube_to_update"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local minp = vector.subtract(pos, 1) - local maxp = vector.add(pos, 1) - if table.getn(minetest.find_nodes_in_area(minp, maxp, "ignore")) == 0 then - pipeworks.scan_for_tube_objects(pos) - end - end - }) -end diff --git a/tubes/routing.lua b/tubes/routing.lua index dc13a683..f284bc01 100644 --- a/tubes/routing.lua +++ b/tubes/routing.lua @@ -92,7 +92,6 @@ pipeworks.register_tube("pipeworks:broken_tube", { nodedef.tube.on_repair(pos, was_node) else minetest.swap_node(pos, { name = was_node.name, param2 = was_node.param2 }) - pipeworks.scan_for_tube_objects(pos) end meta:set_string("the_tube_was", "") else diff --git a/tubes/teleport.lua b/tubes/teleport.lua index 83d9344a..f6dd3c5d 100644 --- a/tubes/teleport.lua +++ b/tubes/teleport.lua @@ -263,7 +263,6 @@ end local function repair_tube(pos, node) minetest.swap_node(pos, {name = node.name, param2 = node.param2}) - pipeworks.scan_for_tube_objects(pos) local meta = minetest.get_meta(pos) local channel = meta:get_string("channel") if channel ~= "" then diff --git a/tubes/vacuum.lua b/tubes/vacuum.lua index d78d8377..b545b033 100644 --- a/tubes/vacuum.lua +++ b/tubes/vacuum.lua @@ -36,7 +36,6 @@ end local function repair_tube(pos, was_node) minetest.swap_node(pos, {name = was_node.name, param2 = was_node.param2}) - pipeworks.scan_for_tube_objects(pos) set_timer(pos) end diff --git a/wielder.lua b/wielder.lua index 367b80da..a5a3ed62 100644 --- a/wielder.lua +++ b/wielder.lua @@ -190,7 +190,6 @@ function pipeworks.register_wielder(def) set_wielder_formspec(def, meta) end, after_place_node = function(pos, placer) - pipeworks.scan_for_tube_objects(pos) if not placer then return end @@ -205,7 +204,6 @@ function pipeworks.register_wielder(def) minetest.add_item(pos, stack) end end - pipeworks.scan_for_tube_objects(pos) end, allow_metadata_inventory_put = function(pos, listname, index, stack, player) if not pipeworks.may_configure(pos, player) then return 0 end From 6fbe42bed4b6499774bb8c0f00469d0790091893 Mon Sep 17 00:00:00 2001 From: The4codeblocks <72419529+The4codeblocks@users.noreply.github.com> Date: Thu, 1 May 2025 02:46:08 -0500 Subject: [PATCH 5/7] missed some --- tubes/embedded_tube.lua | 2 -- tubes/sorting.lua | 1 - tubes/tags.lua | 1 - tubes/teleport.lua | 1 - 4 files changed, 5 deletions(-) diff --git a/tubes/embedded_tube.lua b/tubes/embedded_tube.lua index 17ec8926..81d610c1 100644 --- a/tubes/embedded_tube.lua +++ b/tubes/embedded_tube.lua @@ -45,8 +45,6 @@ function pipeworks.register_embedded_tube(nodename, opts) return vector.equals(dir, direction) or vector.equals(vector.multiply(dir, -1), direction) end }, - after_place_node = pipeworks.after_place, - after_dig_node = pipeworks.after_dig, }) minetest.register_craft( { diff --git a/tubes/sorting.lua b/tubes/sorting.lua index 39a86867..16a5ca19 100644 --- a/tubes/sorting.lua +++ b/tubes/sorting.lua @@ -132,7 +132,6 @@ if pipeworks.enable_mese_tube then end update_formspec(pos) end - return pipeworks.after_place(pos, placer, itemstack, pointed_thing) end, on_punch = update_formspec, on_receive_fields = function(pos, formname, fields, sender) diff --git a/tubes/tags.lua b/tubes/tags.lua index ffd7ec7f..450764cf 100644 --- a/tubes/tags.lua +++ b/tubes/tags.lua @@ -112,7 +112,6 @@ pipeworks.register_tube("pipeworks:tag_tube", { end update_formspec(pos) end - return pipeworks.after_place(pos, placer, itemstack, pointed_thing) end, on_receive_fields = function(pos, formname, fields, sender) if (fields.quit and not fields.key_enter_field) diff --git a/tubes/teleport.lua b/tubes/teleport.lua index f6dd3c5d..6d9b9554 100644 --- a/tubes/teleport.lua +++ b/tubes/teleport.lua @@ -315,7 +315,6 @@ if has_digilines then def.after_place_node = function(pos, placer) -- Set owner for digilines minetest.get_meta(pos):set_string("owner", placer:get_player_name()) - pipeworks.after_place(pos) end def.digiline = { receptor = { From dad11237681596596204c941b4a05b42edfcbfb9 Mon Sep 17 00:00:00 2001 From: The4spaceconsts Date: Sun, 24 May 2026 17:05:23 -0500 Subject: [PATCH 6/7] null commit From 84c359b377c7cd820f78fe9eddd2cc6f3f0fda84 Mon Sep 17 00:00:00 2001 From: The4spaceconsts Date: Thu, 4 Jun 2026 05:43:49 -0500 Subject: [PATCH 7/7] does not belong here --- trashcan.lua | 2 -- 1 file changed, 2 deletions(-) diff --git a/trashcan.lua b/trashcan.lua index b0838600..ec8d90f3 100644 --- a/trashcan.lua +++ b/trashcan.lua @@ -49,5 +49,3 @@ minetest.register_node(voidname, { end, }) pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = voidname -pipeworks.flowables.register.simple(voidname) -pipeworks.flowables.register.output(voidname, 0, 0, function(pos, node, currentpressure, finitemode, currentfluidtype) return 4, currentfluidtype end, function()end)