From 31708b9af746586a7e3bbc7da4ddeae748060d08 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 18 Jun 2020 18:47:34 -0400 Subject: [PATCH] Exception parsing cleanup --- core/assets/maps/groundZero.msav | Bin 13000 -> 13399 bytes core/src/mindustry/content/SectorPresets.java | 3 +++ core/src/mindustry/core/UI.java | 2 +- core/src/mindustry/core/World.java | 1 + core/src/mindustry/mod/ContentParser.java | 2 +- core/src/mindustry/net/CrashSender.java | 2 +- core/src/mindustry/net/Net.java | 2 +- .../mindustry/desktop/DesktopLauncher.java | 6 +++--- tests/src/test/java/ApplicationTests.java | 2 +- tests/src/test/java/SectorTests.java | 16 ++++++++++------ 10 files changed, 22 insertions(+), 14 deletions(-) diff --git a/core/assets/maps/groundZero.msav b/core/assets/maps/groundZero.msav index 4e6900b4c35182252df9646eb32fae2d3f3b0fe7..628ab59ecec6d9f66c0bba5d0ad5cbbc86aac26f 100644 GIT binary patch literal 13399 zcmb=J^R^~(dbInbI0o?pNBKe)eq#;QnG_n6r5w3LBPeTPmS;%*lB%j*)qdNrDsSLY zx!4;O(|zNOoz=I+&)Ls>oE@JQ_v|dc-9P4k%>Ov+zV0tbb2}nl8MweCPHt^+$PVvg z;u9xsd|LFgJKpv$ub^nhr2n3mL+m8K-J8qL_j}6irJru!+y1v;@|(Q(K_AcDl?!-$ z?(c8;H*f2H6ufV)-d(=3;7T#?s`dW;`h9$L*X?bWeYx%U|Lw_-lBW50Ztg8FuP!gn zKY#K5k}oeR{{Prg?{+kN@59LXUVFPgn;&1^S9`J8>U8d(f9s#W_xsh)SG7L=yTAGQ zZ`FqnUVQCdzW??aoBEsewiZ<-|Jm=|-^lj;nAwiqznyvOI3CVZe3RK6eth}!b^YnL zo*X{AdGfuwjHI>ibH2szef566ebtJTeE;g^&*oac^g7<<%6*2@D?VqdJf0h*#{A-)E`@4L=OW*nrzs_3T7xC9`%gg!qIR50s=6&XwBf$>f>VkA_k6FqVQszm)9cIkPD&r2!j-;vF|*bi`R{EZcJgz+_pyn$ zPpLZoRowOXrt(J@*bg^u-hJS!kJMHFdtc7|ie6u(@6Y}_#Co?y?cMvYc-xP^Ur|){ z=uP44CqEiy>DwN?_V44vPJTr_mc7<*E#3ag{N?wmY7Rbr_%^rb_x9%S^(#blUibaE zH}!t?r`_uNzd!xn_@_=`KmXJ3&R&w~;rj1h9F5((W4U;BRbjloT)@)>_w6fhTbJL` z{^b97kGX}_d-GVSn~K^i*0%Tl3op&@JAc^q>4xvWCd~gBF;#SmR(@am@t)uk=2yqAZk3p~ zd%s>lfYFWj)(8In3)`W~`gPZXHw(|rnNipBW0$~%)B7ajEtTqmFQ&iy^xzSPzifF7 z-}&StYbQ4ft6%t-s`y8D?q18i6_svlx8HlUZBFpl?RnuCf1KF8-TYT|o4oiG;3K{78Ru*clmEUIFY-(mTl!mrn$nqTr36e=I~bQrCFXATU*%e_blwzmPO~< z!!9fHFNuvUIoGT9*g7*%wD#xs+}+o<%eehq8+-cpp~me`R{ih(c8_O^?YhucFHTCY zpYHeN!Pf_+?_b<$efMc+@wo>@c`SWaeXDbNZ}h_5>vDH=N_@ZfvuB^`j)7-ElDW4em`? zopvbq>ysaAi(3{yZr*3?64U+C!_NNu`IQw0AJ$%)zPI@JH(ApsPPhDa7JRrAIU#x1 z)2@KR-JEX||GaqgW$EU|7Z=YodVBv3e!i>O=kl?aKVQGtR#x_=qVUF&&KGXFv9@ow z+~*d%E+eyR)oYpWZ!=74a%8Qh+r5gH*~PF$pFiu|mpMXD+LWi7@cyh`{r~yrV7Jxp zeslcN^{%p!NQ-NI@#fOc#(wX2zozQfR3&=6dU){S(SIB29~OPwZp-d08h`P7&5lK% zj!raJjMtWl*|BrlYVq^UYv)-W`fDCiaao#YshSRNwfpaVsqahfZ>@PfMS5|Exr}@L3 zRTK6E@^ihv%!l|-T{eR#8)*rL1 z=-Qq4A4}36#4P-i`~Jn(*6*7h9n5@xh_k-T$fC4x?G5Q&4$oIFd)!SNBy-r+CZx zrpt1F4*6fdGgaF&E>>pmJKp`DmR4L{ec|B#QrndlTk9TfeX-!K&bu4OzwDRXQ}j$m z$?^S{Ku9fJ+&$#SZSnbg6@DF$>ML@IE$X_fko9x5XO#M@AFIXxMP9vc z_c>g(KJ=shvcI{LPu|(gS^srveb~3{@sG5=>TCTod%r%&tuXw_`k=Nb@qNeM3Yr&& zm;PV#XgyP8Xa3z#K8DH$wu9>X#kFj-f2Fh5-#!?sczb5%hBv=fEBs|inaTV@<$La3 z<=30lZn3(Z{4L@8Nb5_+wfLtEK@6vvswCs?dNYJXvbBB2?04A^Ex*^TrZ?{x?^JVrq>l>v(_|JGCj+U2`#+plJ2xy?MTJ~Zp#-B zR_)J9*2v0`iSTnwdtI5x^Eq|J-V;67_9}ge?EAXNHtJ~if#jqqJ3qyqSheJ=+JklL zoLAXMZ_T<>v4+u-y+JI;cTak(%%L4;n~z)REa&0Y-qgMR_^)WT#WoVYi5Y8S1=~c9 zJ(fC_AsWuA_PXou)EQy632aU5PbBM2XTE*FV->-;U2I3InzqCy7TGmU`&hzcBy>|H zMH@D8X!{w6On&f%$AZ@!vr?~1EPKg;%X53_Co4Ojc34>J=U|8`LO@xXW) z2ZNOP85!-40=MjmuZuf29#Gz^chf z@XzYVUe4~n0$QB<^AbWhd!I{sF*@n&WaVPk_+#L}JSlIVe^dV^D~)vJhfE7*87$Ft z*>PM$T<&qM+`nxcw*>b7Z#j0GVS~Y>gau(YLZ-aw&tZD^%52w%xJ`VQo?F>`QQq-a zm%-%1)zk@R3rv378LeOT+_GgoS9Lkt11p_Ji`P6z`oyQ;*uZ})g4JP$^cTl%lBw0I z+KCg^r~Lk%eP4wmviZUGi<1AJ?-X%(RgxXqu>Yg4)}1Fs=Vx!2v^sKAeAOna)hf-uj-(L5XeU6;3au`!v%#Qy$ z-LtC2qg_0MJJMz*(~GM~X36$P7pzG>(N)mve_^d8%O=bE-bE%tJxe`;TDf$r8)mUgIeQ_eN#M(;o$B7lCe#X5 zPKk>=YRtEwHA8IDiT(@mvpuE=aIIU+&33_sCwoDD;)zuXySajY>axf8c0PQS%y!|$ zehQ)s3$m4X_-}utDX?kRZ z!G+l?ia%WlFxYGV;ML(1n?ys}(hnc^R9&qk_eYlJrLe*J<|Jv6XW#Z8Rj_a3%elI= zkHwC=P&%-F>ihQxzB4~*uv)dC^u;QkuJws8_>Tp|^qbVpe580KQzVtcZo01JXAYan z40DP9wO`EVAI)Z1)$(xOnXsj*Zh;r_1!nn{R^Pl5*tjuBgw-tR{w9wZ1>sxsO-(9U z-M%x?P9trz`Cn9r_pkKCt-M+g%(Jr9b{D7hCo{hsQzm zW2&8yva%y*;z~}2=Bk#9S;|xNdM<_vn&s`ZZZ(_dc*4El?(fJcHd~_G)S6i)AJ}|y zvFIWG9nq4J9A@_zyrj2mo0iCWKl#S}_BGFY=Fb*>zE9j_Pps2!sav%oD>rL1Ow9?< zZHkudRcDB5IKvj-c!ur2fS}6RWk+kww5}T%4#ig$9hZe z&8nt4o1;^873_|1sO^~abekokM5Dg5pz;U*3-1(|vy(3TNS}B&d!iJ>G+T#PpW?U7 z3uZsX^Zl_=*ZT*bg#xDSke_Q&aQ(u}%zc+O{?RmfB5kkFoO*Gwirmq%geZm$J3miv z;Adcb#m4YSZUJNKO`D~Sbv2!F%O)sXx%Vh6R=!DO6=yJCXaKtwXYYQ8RXWb9rzI9M zn6~Fd{+WGLVRp!T=2OQ`yw|kdzPC@)Y%`zN>b@Q8T7MNTFcLAdzPSBz!~6zO@tYDN zaj!1-apc*&;$WDc=per7M62P6)V?%X$^DEna?$*CeD;Td?`%vRN%FMSYIVA^_z{mnk8;aEk5G3 zZT}-F>5qPCil;BBSxqjms#aT_zltNeB@$9?d&(W$}!wnVP59vf60Nyb?U>wnx5Hbndz4H)&x#L18^F z*GNp;czKP4?~|)LHeFeL={r}-($I$ePw$s)V$xOEu{0sm`n2eb5bj26_Qo!abf!O| zE$uA6dCjSE&W7@?m1~RE+L%wvT_Ca`cIKm(8M=&Q|9{@8+GR+3stsr<)dhB8K&}h+69Ao7W_!ZJRae z^d^}|-;J){RhMwSzRf!&HJ2xDqDkNF2{)Z)zO9(1Sj)UgUsptWSg|sjP21*> ze%EN)<(%x;iq=_cdAI8dNq%PCviW72;_7qnpIcAlWz{V?SoU9c>g`3BYf{o;1GlZT zIJxS^54C_C_L|QHyxf;Eubuhy;*d(abm`WLYE_+>vX`yXpRzhCoc7_A+16#K@31lK zzu=kW9QvDo-F!5`Rn#fm*G_xJ;j9e4MNc;^QWeNmnKy0WYNapcvwIh{o;VoNBPlZB za!kUCPPS*PF(;)m+C<m-e@NOnQTX8YL1mPGu>CIPJO7xo;lg{drHJ|8X0eh*t}YDN5H+a zPdgMGUu=2%aGT*;uENJ`$C?d(mHD+DD6*24JjJu1CnfX+XYJGc!}A3so1FKYNIx9Z z>>L`tO(7>kn`6u6$ouk!|0+NDZqlj!`$x%+%Upf#x|C+0jGEuIXUY%0;L=uN&flfw z*15C$rEfUHqtN|lKHSi3)Bba2%8GDfiM7%O$Jr;WV$55%O!G*u_L}L-<-9(o8BR05 zc$NL)f%V6C_i#sEcp$Yp=dI+0^MZ0`p2+t#Zn71O-g6-BQTP;D$L8&;&nwNmo~o;R z{-?*?eQfeErS%daMt*Gnj!!UY=P0@#f0s2xRPYJcWxG_Hw^`v6r1y!aGxR)}X?(h2sw~ERKqLn8^*0Zj?`SV8M ziCjPRUD3Ci)ZA0fHM{e5Wh`X!*mOyJf{WRXOGP$&Ztvf)HR%46ovG)f!p&FZJih1_ zva#-uZAHtG?dSNG*}O@a)XM&NTK}(Q+Y+N@JNN&SlU#Ii-R{Pe9S6N?5~bxTU-*|@ zH{TPjc_pT7$@7bg^A9Ljd@9Y*Jzg=h_6^qr-S7|rBPoN6Ouq~dDOdba`_ObI$jnaA zoa1ejM@FhkW0Y8(*oVD2;@cSJGuNc@teBI2_Qk!TQ{FEsU7qQ@2+D#RB;2qHUCR%elo5a)t(?c1IY2Q|BY)XsBoBZy~@;OXf_fP)N(8R9V5XCcF z=CQ#3l*^aTM7m_$V_IA^Es$MNgY~r1@w+@VFP?HoO`rLJBctn1#xv#8H8;D<7WR~` zznbH+$ScdJ0b;6 zr>A|CC`l5-4qvV&dt1TUo`?=gwCrCIGi}oJ!+?5^vBd`-!^(IsCc&U*@E9|4RwkQ5>Cx3 zQa){ScGnWuO6{1p2_*)N`ZiP6F05fN?v_mbW!-sk(qh$9XW6dUy*Qb?!+pm|!G;6A z5B7Ii|M)T~|EzI8Z{&^duWA(AzZ&1P%P^m^j62~AW29_$>UZIHTAw$Zm(w`Cg2heM zU=#Dk#)-P`ZF;^;-)XdaR?8CMs4aUP{(e7n?silUhmL*w)Ef&M4}9|WbBJxR3-x2V zU~^@P!?Q}3C;FD|nhxwiqMI1LRd%{g@W1$X0@L3gcH1q>M5A7(n9g)xzV@zKQ6y)0 z*b+U(iEMJLGa@_VbAH%b_A1n!{nT0;6C%f)e|)!C;~QB+5wG){L86;K9GO+qwP303 zre?#ms<%2BdfJ=I?>-OWwh^=m-ln=BmhWt=<}opacmA6m^(jk2JZo1t&>P-I2#=Y%b7JkyjWu1j;wb>#3a5d3qZ zC6~)~*UYJ_j%23CnpNaV~X-qi}JOjywQp^ACSv9n=f&GjV*4lkLNHa+I}&ZRv3k=su^xjL~bSM&6ByK6cM zCwv^2Upsf{4afbMEhn}K*8dkPc{RPJ;`9}}Te%M54_C47Nnl@?w~4pnH$ytNh*|U; z7lqBS+r@UjjEPbAbCBM;riSsSSkr>qw^N$hYaj3Ak@J0bo2@7Q@YX8@u|Ff;i5=TC z@hJD-2uBw#k?aGTUv|uWxck}dyDfZgDmrwxo=?_UD_=O{^{H}B)+I{be7qlaFs@Wn z*!))OhSQ%Db-BEO_nMBE{)lF_@zK|GS|ZD@dGK1AKu?~-C9ACNt=|{kxYnaO@xixk zp&vg~2X@I^GyditIc32~{s$*l%jD`_&b%{&ZCZL zw4p3F`;zgC=mVR-Ce6O2mvD#6VH=O(@pqf_epd!NY|Ct{?Wkwnc*8I9#vdDg>G`cX zmo=($0@EkWb;(T@`&h!dEv>y*tWjL4cWs8>;oa+%n4%9&)nz`q`TWYy2e=KN>jkV! zUHnH%CF1cUm+H*fc9uO~-u(`kcktSq+k)NO8n0c;OM7U%E#+Ec(X@oL@Q06;D^gi7re~oxN#|{Ik024cnU-W8Eb-URv5yFxh#Q?}Qaa6TWCId8Ndd ztMEm&V4*|e=^a0FW=-|o+f!52lp@<}ni9kKsWziV(|fm%^hdF3P3ax49VV{TaE)~9 zKeq5j+tRlaPfg^J<*(Nt*Zh1eac@tteyH zi1kQ_XOFhhJH)>J!OWlUtpdDmUVOjEJ)7foW`0uL{Iiio$ zta8;Sb-JGB@jCUz&!AJ-_(uA+x4`YKA?l=LlUBjJ*EX#p<|ImKU$-|Kt;UTBf9?UNL#JcdcYC zi{kbJ%KTlLeRJ}(KoX+$1xy1eG6H-hUj@p-O(c9X3^PtVG z++w?12Uc}^ZQ$F(cgytRyYvfe2gRGtpGn(1bn&#yeEwZv`b`|nSqzGs?y=oh+p~>}TRVwiSB6Z*l*KI* z1;h9K3v|{`>X{}u@zxvp>3>gfDKL95Zs2H`nEa^h!GRP*b^VE z-WQe1qQG)rsw8#3yoo|6d)vS4mjAaoG!jFmM}GH8>{eVB8~y4JD~r747p z)?M-H6|~`wvTvRFbd$4SMb5(gPfz%jepq$$(7`O@=q#gs-%ci}O8w2tS!7bR`(16l z^Nia?@0pftzp4@Kvz`CZ+k%y@S&`Z=j@`U>j`z0G`oFuwxG&!34P4IZW?dZKt|aD| zHs9uE)BLlGgbhxmOGYxLOfIq3&}q+`dfSL)`I?t!4=?t4d_MNm+#g$Nbjs zK=>W^hj;seFKkQ%9~f$+rpryq4IufIR*!;`Yxjd7K^JMOD&F^#jl7#RER?{3kD6FK^~{Rw-z{l%-9 zF)FL`uZzs%ooJ~3ch{@B+lvm*+Vat6nTy_A|HPK?%O6j)*L}+OEQ#Q;DT|5!X(#^c z?5FjojQi~;K0NtHY?0me!!uHUR_x=Qs4bt<`*r1y?55emJ=1Qm-hS`5!S|`L{twxM zxu zO}>4LYG+Ke3t`!>`eP?Y{BgC3b|J3wT;7~Z)_1+Zx-ed3x3|mk$xZ(^zKD4m78&}^ z^yPn%jGyMKr+-gYGdjmR@n@C<`}^fO(TbOhJI|K5@UJq?m%o?yzH{y57fKUSjiy^qPusHArS_EqTY*fbm(6XVxO-;757!!rwNC$}$2LDyX=0@7W>S6WskqQSiTJhuqfpKLst5 zZZ3EEHs?r%eck7G|E4{D{`9?@RThiv+m0G*#bw)E#kzi($tEsa)X#eGi{U4)59)n_ zo0}FEKAm+UuqR`WjkZwuYNuc!X^lz8%;eK&UiQ=L^1wGqsz2;5{|PLa=90V3^`GR#RE1rdF1cl~vs(?)WZ1(dY>rs2 zE%@Fg=kdD5GlgeGxop-m+bVHUL`DCeaP=%vyYnjN^e0_anN_@3wlaF}`wXjt{+f?} ztL*!tbD@&wTjkd6T}PJj%k160Rx5BrbkqM$bL;dr>9l;j%V%~&WS859Y_3XG@rzds z`*wfeKAO>1bJVEzg~6(W_L?tpru^$Wva@pI>s=?xg5PYio7ArTWO;+n@0K;+G`QTN z4JJJ>ek1PfqF8?E`vnu1b-oX+<-G!z{nU7sY}pmb?Q~m2`sO5wC;uOEuU##7diS0m z=N4V?X)9c;pv)?r8uj(R%bTRu9ci<99=ka1i`h^;tvKd)-;;HvA2&uWJl*Zbb)?iS z@{yx^(ihWAV`q_HLfhAO-rE)U`*la>9CfwkuZ8t_-S1W>v9ESA*WKuI`+dhb(`nVS zv;*bmb(D!*K7B=KcYL+K_0*l3kIPK6zI#g8W`|Gu;X3`+hu>UJ9{+6repr5D{P%Qe z-HUxcWNw=XUJtt0{=DU%@uzIRm~8RR*W2!RSbx*~_t&Ff)uHEYFP7`>?+&c1^1A(j z`~J7&iJ5MHZX93kzu4^b7yX@cod12y;!u0Hzn-&R-D!WszRXV9ee2^n{FnCLu6GK% z9J(a!2h-0ZzdPcS|D9jA_uu>H)&I|Z%)hX_y05mviR=4sj%UJ4&V4Mfd>%3X@8SLB z5^(BqRul%q6vEJ*S|EvEYf99|HAN;xg)xY!mou=LQ@(9?vL}dD*dp`fK#%6QJ z1RK2%KG`DL7%As}O-T8NZsEuIlNml47Jdxm<9jdu=Kt!&ub$NX5m#@VRR1e}lfr(* zbw)y+F)9}yDKoC-xG`xb1R|Msgig{DfFdS#eZ z=xP1S^08hkwDnT0-uXJ^++O?Y+xEiY6{%l3Q-3ahQK=<((Y{`D$NUq&xgt|v^_+B- zJ+~?TNN4otI~N- zeEQ=~3D4*!7qhl2Ox&b1a}C2!$^Yd|{}~HSughf4p3d>;cAc)-M~7S6T(@6WzH@OK zzpHxg!M$F$jb10mK0A8%^CEeBvG0lEk+-y+g1O$#cqYB+=KA-q<3wDwQ;Zi|WghiV zDi=2*U653_7#AAWSXRT-Ima9!lP zogR7pmddqjJI95M6 z9QNNgh3BW7IjiBe;Z4lNS6wMqP2ZI-wr^j%d!cRelOylD9k<8$iXTgOlDg)!kn}n) z`PYqo8$F(AwuMSfTi#fB(|OJcj$^Z4+=(EIdS^iTdrHo znfkzc&#rl0=k~_>Ok9^`H1GQVvlr?Qui!pr6nG)f_09d{iu%_RLO*wH6#O*(Ja5kY zuL_IjpA9~6NpjP)3HSPU-o=D^DTy_ zZgaa-V%)7?JIuUe)L))C|D5q|;DebFV$QD{RWBC18+bJZ@@+C`JC-F>z2CF$@yQKp zOU^|K-F>yjaBoYhb{p%*^tE@Vu>_ZzXl}jpiDTIWioH2RPcQ2LY>pY${WPW%3@VxGf_nS{Q)+SW{tC^U%J=6V_(Ouspxm3x|i;k>z z5^=urP5jW0O?FWS^)=V*SlVRk7$*IJYenLA7UyDPS1Zp0&0p>GH}28-^|5UJ)*Y6tGL|at=|uy?0fI?pCKWx43tx zJ`A1k=Y8sz!j;N4^E&3gT$LGnYr04HgROiCZ?+|Tde`xE;iearojcCW>G>eN#9Cfw z_q)EUC&T_$oZF_pb6)t(Ez81U@;~oMK9c;u^T>=vJ*j>lO4EIw7q2|RIO#{Ua%|!q zG3i@^^FRNW+10OEeWCT;8;!Wg54%!UH+c*CDV2RHYzdxRv)Z)f-JFWw5mTxh$`yAt zU7fN~uP1wulV|Fx$RT8ta>2k%=0;Y8qaR6UpgN0rpJXdb9bxn zzFoaA?UGb{?UC)Xr|xkH5*J%K?ip^uaIQ3YRefovD#aC063Kcm2KK<@0sk}~A|MR?wGmITu ztYRzG4t@4ovVGByMSb1R?@uzE(VQ!AE!CqU@WfM_df?< zS@5d(w6h+O!Apc)=35-=vK8&U?fdd?^NMRZ9yYpy^OptQ2)eL9e*eY|`(Dc3G+JPO zv_1KO(5BWr+XV+UY>V?;{Cev2(6@^Z*?OE0ROh^x+ z$Y-iWXIwV(hRr!m5WRM{p5aRYMXn1$^R!7<}WW_)o@_Fm2261)OLnY<(Dm|ia+)V z-IV$gmSN48Z_|JJqks5nZKb~=E8pui`U6X*HKniEbL+fldF+mtH^t898a~?QW>uXQWyhW( z_c+sD{kH2x(ZKtUR=sd4Px#{FsZ{e!)$b1HwKJ=?epYIK_eH0tbN+6l?S|`rhAjE^ z@uTyi4fa#iZ-3Y95Y3zPcBarz`73@;@$h^7X@*Y!L%U_Oq_&Ih*M2uUb=B_u z-G?s7Yu@Nq5H|jK`tc9Bd#C)FXGr<{{xA4%$39WlkGq4mnY1o{fBE^s?QB!~?^N7* zY}o&=xjKZ?P{HQcb-};#_C}(wIvr(=7Rh!>-m$%ZR^Kh;*IwhE)9);Q9qH@Jz0}u| zf4k$dYm@%TdMC4KnVl8-CgN<(>UwtRz7yu2czRjCYEo>y=9~^M-^)citW^M*-7)xhaS}6WLwYtfwOAuo5>uj z^)5b9i?y3Lt0zJ11 zu0Hd{cc1WFcKveK&W^b2^Ga(=-M$zo*G8(^&0Sfos!|xSKWIa(?lsNpetY=t3e5F& z-Rd;&&FjV5Lg7DRnr_J?ulM*jf1>H*Wgq6NS$|$+c4NxMc~dPmIh9TG*dKSnwzhBj zn$OctnCln$cF&KUdSi+D1>r|Gvz%&91z)%CKKMMh|MuzfaD#QOA9H=5Jow?0C>ARq z^}cy`a>l&QzXBiYQXHRreVgvezB%c+)#PiUb5u9ZT&?*2!#-CnD;@T{9QD{s#iH97 zLZ@t8(ekHo=Dph+=Xd_rDv8Y53N6DX{z&I#uOSZdU*9ju4Q@R)~<^ic&E73-`b~Pv(ByR z(l3X%>ojbFHp(uI?9N##cQezoJau-W!=o=lJv8{ywfxyt2>EtMhY3
DWO{z?sEaLkHu!T> zd%yfTOAX%dWpsXEA}&ONv-R#pIt|m?$}$`Yv>=dJM;HS0rj#}zhiITd)l3tccjW9_Sj=Wy zeMfNqF86P$3+6q&5OwtRufu{o_U=11>&z5CCilPbSvmJ$qII^rgyzkg4;Gy$4t}&_ zozBPWH*3B{JkNL&U%im;XHbR7Qhl%0@v^@v{xd#mowxIjaD3YDzvfP}J?t*-y8rrz zUMBBy>%KjT%bwfqQ#eMzm#hiaRJ=uQZj-uIX z+-AAN-xOQsxu1Q3K=`&3MXufz>PE+`?w@uw;eI3^eJK8U>#O^rkG68!e*f9@!)N32 zonF6G4L;{^>edS<>|6f)&V29MN10)&cBY-r`~GabYj*Cz-Us~oAEk0AM)y%Fsbje$udfUZk?Hn3QJ9o!2ITw?CY3n=xs3hN0_-i#c_v>|`)%n8fWq%Y#sm)V98ozVpzAelC zu)Y-kn8Q8W>3sYu!`d1>1KEYwBR&Uj?3GEq-oMS|pV1r7^UrQwpYZYL0hL47i$93= zOrBf2{LI#P$IF{V*8FC@w3GL>*Y*2f)_8R0_v8V&rkmQ%J+5k U&V=ee`~UN=p7x*nQdoiz0C-d0;s5{u literal 13000 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 a { + r.winWave = 30; + }; }}; saltFlats = new SectorPreset("saltFlats", starter, 101){{ diff --git a/core/src/mindustry/core/UI.java b/core/src/mindustry/core/UI.java index 7832d52652..e93d394e05 100644 --- a/core/src/mindustry/core/UI.java +++ b/core/src/mindustry/core/UI.java @@ -373,7 +373,7 @@ public class UI implements ApplicationListener, Loadable{ cont.add((text.startsWith("$") ? Core.bundle.get(text.substring(1)) : text) + (message == null ? "" : "\n[lightgray](" + message + ")")).colspan(2).wrap().growX().center().get().setAlignment(Align.center); cont.row(); - Collapser col = new Collapser(base -> base.pane(t -> t.margin(14f).add(Strings.parseException(exc, true)).color(Color.lightGray).left()), true); + Collapser col = new Collapser(base -> base.pane(t -> t.margin(14f).add(Strings.neatError(exc)).color(Color.lightGray).left())); cont.button("$details", Styles.togglet, col::toggle).size(180f, 50f).checked(b -> !col.isCollapsed()).fillX().right(); cont.button("$ok", this::hide).size(110, 50).fillX().left(); diff --git a/core/src/mindustry/core/World.java b/core/src/mindustry/core/World.java index 78c06d6ff9..d1b52e3391 100644 --- a/core/src/mindustry/core/World.java +++ b/core/src/mindustry/core/World.java @@ -230,6 +230,7 @@ public class World{ loadGenerator(size, size, tiles -> { if(sector.preset != null){ sector.preset.generator.generate(tiles); + sector.preset.rules.get(state.rules); //apply extra rules }else{ sector.planet.generator.generate(tiles, sector); } diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index d183d5b64a..000d3d6521 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -463,7 +463,7 @@ public class ContentParser{ if(t.getMessage() != null && t instanceof JsonParseException){ builder.append("[accent][[JsonParse][] ").append(":\n").append(t.getMessage()); }else if(t instanceof NullPointerException){ - builder.append(Strings.parseException(t, true)); + builder.append(Strings.neatError(t)); }else{ Seq causes = Strings.getCauses(t); for(Throwable e : causes){ diff --git a/core/src/mindustry/net/CrashSender.java b/core/src/mindustry/net/CrashSender.java index 184c7b96ec..0fb44e1e62 100644 --- a/core/src/mindustry/net/CrashSender.java +++ b/core/src/mindustry/net/CrashSender.java @@ -24,7 +24,7 @@ public class CrashSender{ public static void log(Throwable exception){ try{ - Core.settings.getDataDirectory().child("crashes").child("crash_" + System.currentTimeMillis() + ".txt").writeString(Strings.parseException(exception, true)); + Core.settings.getDataDirectory().child("crashes").child("crash_" + System.currentTimeMillis() + ".txt").writeString(Strings.neatError(exception)); }catch(Throwable ignored){ } diff --git a/core/src/mindustry/net/Net.java b/core/src/mindustry/net/Net.java index 117ccba23e..f99ec4d495 100644 --- a/core/src/mindustry/net/Net.java +++ b/core/src/mindustry/net/Net.java @@ -56,7 +56,7 @@ public class Net{ error = Core.bundle.get("error.io"); }else if(error.equals("mismatch")){ error = Core.bundle.get("error.mismatch"); - }else if(error.contains("port out of range") || error.contains("invalid argument") || (error.contains("invalid") && error.contains("address")) || Strings.parseException(e, true).contains("address associated")){ + }else if(error.contains("port out of range") || error.contains("invalid argument") || (error.contains("invalid") && error.contains("address")) || Strings.neatError(e).contains("address associated")){ error = Core.bundle.get("error.invalidaddress"); }else if(error.contains("connection refused") || error.contains("route to host") || type.contains("unknownhost")){ error = Core.bundle.get("error.unreachable"); diff --git a/desktop/src/mindustry/desktop/DesktopLauncher.java b/desktop/src/mindustry/desktop/DesktopLauncher.java index 22973e0e59..acaf73c808 100644 --- a/desktop/src/mindustry/desktop/DesktopLauncher.java +++ b/desktop/src/mindustry/desktop/DesktopLauncher.java @@ -9,7 +9,6 @@ import arc.func.*; import arc.math.*; import arc.struct.*; import arc.util.*; -import arc.util.async.*; import arc.util.serialization.*; import club.minnced.discord.rpc.*; import com.codedisaster.steamworks.*; @@ -63,7 +62,8 @@ public class DesktopLauncher extends ClientLauncher{ Runtime.getRuntime().addShutdownHook(new Thread(DiscordRPC.INSTANCE::Discord_Shutdown)); }catch(Throwable t){ useDiscord = false; - Log.err("Failed to initialize discord.", t); + Log.err("Failed to initialize discord. Enable debug logging for details."); + Log.debug("Discord init error: \n@\n", Strings.getStackTrace(t)); } } @@ -114,7 +114,7 @@ public class DesktopLauncher extends ClientLauncher{ loadError = true; Log.err(e); try(OutputStream s = new FileOutputStream(new File("steam-error-log-" + System.nanoTime() + ".txt"))){ - String log = Strings.parseException(e, true); + String log = Strings.neatError(e); s.write(log.getBytes()); }catch(Exception e2){ Log.err(e2); diff --git a/tests/src/test/java/ApplicationTests.java b/tests/src/test/java/ApplicationTests.java index e075d527c8..1afcce5fa3 100644 --- a/tests/src/test/java/ApplicationTests.java +++ b/tests/src/test/java/ApplicationTests.java @@ -542,7 +542,7 @@ public class ApplicationTests{ @Test void allBlockTest(){ - Tiles tiles = world.resize(256*2 + 20, 10); + Tiles tiles = world.resize(256*3 + 20, 10); world.beginMapLoad(); for(int x = 0; x < tiles.width; x++){ diff --git a/tests/src/test/java/SectorTests.java b/tests/src/test/java/SectorTests.java index c4ded0a4bd..1cad120b64 100644 --- a/tests/src/test/java/SectorTests.java +++ b/tests/src/test/java/SectorTests.java @@ -60,12 +60,16 @@ public class SectorTests{ Seq spawns = state.rules.spawns; int bossWave = 0; - outer: - for(int i = 1; i <= 1000; i++){ - for(SpawnGroup spawn : spawns){ - if(spawn.effect == StatusEffects.boss && spawn.getUnitsSpawned(i) > 0){ - bossWave = i; - break outer; + if(state.rules.winWave > 0){ + bossWave = state.rules.winWave; + }else{ + outer: + for(int i = 1; i <= 1000; i++){ + for(SpawnGroup spawn : spawns){ + if(spawn.effect == StatusEffects.boss && spawn.getUnitsSpawned(i) > 0){ + bossWave = i; + break outer; + } } } }