From 80aed311350f8daf86e681ecb53a7045aada1f68 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 28 Oct 2018 14:26:58 -0400 Subject: [PATCH] Broke and cleaned up server commands --- annotations/build.gradle | 4 +- .../io/anuke/annotations/Annotations.java | 0 .../io/anuke/annotations/ClassEntry.java | 2 + .../java}/io/anuke/annotations/IOFinder.java | 0 .../io/anuke/annotations/MethodEntry.java | 0 .../RemoteMethodAnnotationProcessor.java | 0 .../annotations/RemoteReadGenerator.java | 2 + .../annotations/RemoteWriteGenerator.java | 0 .../SerializeAnnotationProcessor.java | 2 +- .../java}/io/anuke/annotations/Utils.java | 0 .../javax.annotation.processing.Processor | 2 + build.gradle | 5 +- .../sprites/blocks/turrets/turrets/arc.png | Bin 111 -> 191 bytes core/assets/sprites/sprites.png | Bin 105144 -> 105132 bytes .../io/anuke/mindustry/core/NetClient.java | 7 - .../io/anuke/mindustry/core/NetServer.java | 23 +- core/src/io/anuke/mindustry/io/TypeIO.java | 43 --- .../anuke/mindustry/net/Administration.java | 38 +-- .../io/anuke/mindustry/net/NetConnection.java | 3 + .../src/io/anuke/mindustry/net/TraceInfo.java | 27 -- .../mindustry/ui/dialogs/TraceDialog.java | 14 +- .../ui/fragments/PlayerListFragment.java | 2 +- .../anuke/mindustry/server/ServerControl.java | 266 +++--------------- 23 files changed, 92 insertions(+), 348 deletions(-) rename annotations/src/{ => main/java}/io/anuke/annotations/Annotations.java (100%) rename annotations/src/{ => main/java}/io/anuke/annotations/ClassEntry.java (90%) rename annotations/src/{ => main/java}/io/anuke/annotations/IOFinder.java (100%) rename annotations/src/{ => main/java}/io/anuke/annotations/MethodEntry.java (100%) rename annotations/src/{ => main/java}/io/anuke/annotations/RemoteMethodAnnotationProcessor.java (100%) rename annotations/src/{ => main/java}/io/anuke/annotations/RemoteReadGenerator.java (98%) rename annotations/src/{ => main/java}/io/anuke/annotations/RemoteWriteGenerator.java (100%) rename annotations/src/{ => main/java}/io/anuke/annotations/SerializeAnnotationProcessor.java (98%) rename annotations/src/{ => main/java}/io/anuke/annotations/Utils.java (100%) create mode 100644 annotations/src/main/resources/META-INF/services/javax.annotation.processing.Processor delete mode 100644 core/src/io/anuke/mindustry/net/TraceInfo.java diff --git a/annotations/build.gradle b/annotations/build.gradle index afd5e6ab73..edc88bfb58 100644 --- a/annotations/build.gradle +++ b/annotations/build.gradle @@ -1,4 +1,6 @@ apply plugin: "java" sourceCompatibility = 1.8 -sourceSets.main.java.srcDirs = [ "src/" ] +sourceSets.main.java.srcDirs = [ "src/main/java/" ] +sourceSets.main.resources.srcDirs = [ "src/main/resources/" ] + diff --git a/annotations/src/io/anuke/annotations/Annotations.java b/annotations/src/main/java/io/anuke/annotations/Annotations.java similarity index 100% rename from annotations/src/io/anuke/annotations/Annotations.java rename to annotations/src/main/java/io/anuke/annotations/Annotations.java diff --git a/annotations/src/io/anuke/annotations/ClassEntry.java b/annotations/src/main/java/io/anuke/annotations/ClassEntry.java similarity index 90% rename from annotations/src/io/anuke/annotations/ClassEntry.java rename to annotations/src/main/java/io/anuke/annotations/ClassEntry.java index a9be2ec134..3da814be88 100644 --- a/annotations/src/io/anuke/annotations/ClassEntry.java +++ b/annotations/src/main/java/io/anuke/annotations/ClassEntry.java @@ -1,5 +1,7 @@ package io.anuke.annotations; +import io.anuke.annotations.MethodEntry; + import java.util.ArrayList; /** Represents a class witha list method entries to include in it. */ diff --git a/annotations/src/io/anuke/annotations/IOFinder.java b/annotations/src/main/java/io/anuke/annotations/IOFinder.java similarity index 100% rename from annotations/src/io/anuke/annotations/IOFinder.java rename to annotations/src/main/java/io/anuke/annotations/IOFinder.java diff --git a/annotations/src/io/anuke/annotations/MethodEntry.java b/annotations/src/main/java/io/anuke/annotations/MethodEntry.java similarity index 100% rename from annotations/src/io/anuke/annotations/MethodEntry.java rename to annotations/src/main/java/io/anuke/annotations/MethodEntry.java diff --git a/annotations/src/io/anuke/annotations/RemoteMethodAnnotationProcessor.java b/annotations/src/main/java/io/anuke/annotations/RemoteMethodAnnotationProcessor.java similarity index 100% rename from annotations/src/io/anuke/annotations/RemoteMethodAnnotationProcessor.java rename to annotations/src/main/java/io/anuke/annotations/RemoteMethodAnnotationProcessor.java diff --git a/annotations/src/io/anuke/annotations/RemoteReadGenerator.java b/annotations/src/main/java/io/anuke/annotations/RemoteReadGenerator.java similarity index 98% rename from annotations/src/io/anuke/annotations/RemoteReadGenerator.java rename to annotations/src/main/java/io/anuke/annotations/RemoteReadGenerator.java index 5898e369a1..524e590847 100644 --- a/annotations/src/io/anuke/annotations/RemoteReadGenerator.java +++ b/annotations/src/main/java/io/anuke/annotations/RemoteReadGenerator.java @@ -2,6 +2,8 @@ package io.anuke.annotations; import com.squareup.javapoet.*; import io.anuke.annotations.IOFinder.ClassSerializer; +import io.anuke.annotations.MethodEntry; +import io.anuke.annotations.Utils; import javax.lang.model.element.Modifier; import javax.lang.model.element.TypeElement; diff --git a/annotations/src/io/anuke/annotations/RemoteWriteGenerator.java b/annotations/src/main/java/io/anuke/annotations/RemoteWriteGenerator.java similarity index 100% rename from annotations/src/io/anuke/annotations/RemoteWriteGenerator.java rename to annotations/src/main/java/io/anuke/annotations/RemoteWriteGenerator.java diff --git a/annotations/src/io/anuke/annotations/SerializeAnnotationProcessor.java b/annotations/src/main/java/io/anuke/annotations/SerializeAnnotationProcessor.java similarity index 98% rename from annotations/src/io/anuke/annotations/SerializeAnnotationProcessor.java rename to annotations/src/main/java/io/anuke/annotations/SerializeAnnotationProcessor.java index 58aa2abd5b..3cb31a1ee3 100644 --- a/annotations/src/io/anuke/annotations/SerializeAnnotationProcessor.java +++ b/annotations/src/main/java/io/anuke/annotations/SerializeAnnotationProcessor.java @@ -52,7 +52,7 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{ TypeSpec.Builder serializer = TypeSpec.anonymousClassBuilder("") .addSuperinterface(ParameterizedTypeName.get( - ClassName.get(Class.forName("io.anuke.ucore.io.TypeSerializer")), type)); + ClassName.bestGuess("io.anuke.ucore.io.TypeSerializer"), type)); MethodSpec.Builder writeMethod = MethodSpec.methodBuilder("write") .returns(void.class) diff --git a/annotations/src/io/anuke/annotations/Utils.java b/annotations/src/main/java/io/anuke/annotations/Utils.java similarity index 100% rename from annotations/src/io/anuke/annotations/Utils.java rename to annotations/src/main/java/io/anuke/annotations/Utils.java diff --git a/annotations/src/main/resources/META-INF/services/javax.annotation.processing.Processor b/annotations/src/main/resources/META-INF/services/javax.annotation.processing.Processor new file mode 100644 index 0000000000..a83673baa6 --- /dev/null +++ b/annotations/src/main/resources/META-INF/services/javax.annotation.processing.Processor @@ -0,0 +1,2 @@ +io.anuke.annotations.RemoteMethodAnnotationProcessor +io.anuke.annotations.SerializeAnnotationProcessor diff --git a/build.gradle b/build.gradle index e21d058b06..b6c140a870 100644 --- a/build.gradle +++ b/build.gradle @@ -178,11 +178,14 @@ project(":core") { compile "com.badlogicgames.gdx:gdx:$gdxVersion" compile "com.badlogicgames.gdx:gdx-controllers:$gdxVersion" + + annotationProcessor project(":annotations") } + /* compileJava.options.compilerArgs = [ "-processor", "io.anuke.annotations.RemoteMethodAnnotationProcessor,io.anuke.annotations.SerializeAnnotationProcessor" - ] + ]*/ } project(":server") { diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/arc.png b/core/assets-raw/sprites/blocks/turrets/turrets/arc.png index c41a9b2a80ffe6ae740f9b157f694277f8bc2a2d..82d7b7fb6f90642877261885a4a8874cd5e41838 100644 GIT binary patch delta 162 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 delta 41785 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
  • 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%0AY9e^uye8HN+g3=cT}nB|?DTX^N{ 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

    wqEcHuL&dIKGlqtwzt!7I zr4KXsy!-$A`}3W6)xrXTb=cN^x8AAIcrq15a$#ep=?KMT8fsLW2F#i*i z!I^*BwhV_rtKTOuGu(SOoza1hV?y8ayNP1l3?~Ei8YgN2fKfZWMr5c*vha8K1Oq(VFojUYx1obCpOdzFz_)}9ILy+zCd8?ZrX|Zu2rs>6xv*=LRD6-UzAl#ez4`OJo3m}>uE{VMFfjc5o!oR^ z|Na^#22)jkj>+n>PYfGY9ocy5H1BHW1y9fXQ)a06FQiv}sKAn&wPN>$>zX?E85~sR zm2El)sfiz)V`b2pqwsvv`8Gxk*J(P33M7*|awjpIVw$`A$KsPpfvgPmB?1n9-greCJAuVh~_w;#tCe;B5@shca$P4JQTz!|Xstheey} z3mF?USsLEY=4CHXWDrwixD#RFuttD^lY!%+zi%6Z*-wTY4Wi$UzuwL>n~lkWVZr}@ zGajs;pvYh^AKP!M_vXi6XB(3}_1{lCW|Cw$ar@_AE^n4atS$Cu|1Ey8yo{TTWm|If zy40B)w7b*}{NYyX!mlS@G-TQo2;ldCZ%i}6D0|LdX5 z9+oT$dJGnD?iu`9}XsEATv;W;JmHLP086A#2*j#({;EsBc-zLBPd-pJKu%s{^ z@HRCL1obA2*nV4S{VBT2!LZ^B^aufP`pJ+!|3lxN$9LWANw+tIZ~ZmJ=-XX3h6SeE za++p|u64U!Y00T@zm0)Gm&fBp5yOn6mwIm_6MHP5Y|FZ~*Oi??MBu^x8|VJiA79BN zz|7FV$Dq>4ulPk{Ou3y5*2#D+|Vr=T*Tlo;{^Xr zzW?7I8NKyA2cCmFz{tSPFh!0*hT%xz)aRa8Cowcke!H1r?G1(l+}6{hy6ZQoPOgh9 zVL0&QTh3(*h6Rx?-_8B)IQ4p?Lc^0s@*B>*yW3E}+V2`Fc8I}2gk!-f7ePh_2I2be ziEL&J3Or0Fmae)0TIc*;t?$S3?{iF+TCp>o*eP~u`a7ZLWsk2NK9+pDieZHfV~Y1p zW`#?pvX6GjTdOGWaIIiqIQsdu0>gPp2Y~}D40^G+Xm3P|N>P27wo1&bf z78d5X5Q(^U+)N-MKCnv?k+5Nr`verD*N2KyBnO8U(7mC!|;3imIFukRZU<# zuwH*%d-}OAOvnBf*Prj|J8Qk5`Z?o^xAuo(pEwIUx^2|>I!9DMVbameOZjeWf&aFt z^g1)}u%CFwBG7jFrT}9^$j!3TrB^O^ESQ{d{V8Y>crYKsmV;ajdnQPIF=KF;F5FPf z`GSEVa^LJ%QM|=V`*y|sn=4oQ$(sSx(-393Aa(B7;y?}7bE;3;C5z~0ZDYqM(A8!7)k%Z=}eD>B@g^Q(Vh z$wkTf28+tFRtAQ>(P^jov)CEfI2cqizuzhDH(+7Bd-txAp;Ev1@|pFq91SvT4Nk>> z+j1X8RQSy0xaO!4>8NvJed+JktHpXteuQ&s?R0XGVraO>ewfifok5N5$Scs4^=pj~ zg*9_)f6Q+^JIj{+=zc+l6;2E#3=D@k+wOc{F@2gHqfzwVU!^}DH1i+%?;>zu+fJi~ z?e3BevsD`Y?0Tx&_jw}AhMZqaPv5KO-AoCb_Tfh&WWfmoXq@*1D?@B-tR?ep=k|O4 zq6{fK%fj!SsASXh_$$lH06LuQ=yYX!MqA<1rI#JWnFOXWH?UouYOEGy*LZt+u|1<1 z={ige%9a5ZQ2?3bj_yTs^ICg!9T&%cZognY@++Y6+{Z(V$u5EuDeS1NEbicsa zC;$45|IFYJ5dN9_?k>OdHaYpmW8Z=|YqkA}oj+|v|0IyK6nflP|jW8?2 ziWVX9A3A|K=XP1_v|5qq*N~Isp!g-e>ZR&}F2)`8KCf5CUpaPkiDyPzXZ_QUJcr_o z_tbE`X|!n*W$383E0GIR*`jIUVCKvxwe)#J-;ead|9eWOpXE_uoWkgEqquuI-x8IE z{Md|Q(B$eQYsNcr3=FRGK`jLV28YS5mgaU9(dynPbIDRRa_0gZO+`7d#KPV<2<@Vv}a9i~M zP%HPT)K}umPaZPr`{4hw;-}b+PS&bZa;z(B>ec#1O}OGO?VWb_-Q=o1Q7MLoqrE3h zufNN9_}=wQN9>#4dYAZpZ*SlKXC}hM@Zv~J%)<57_vZ33sD$5@VOVhM9m9bGj0~15 zXK5<$d-FH1u=fA=2Oe=#~_pRhwO>)O8^k^ggjr|UaxJA2i(L>PE+#BxO?W^JgoLreqbR3lfdNk^Hbv{ZE%yvtD zn~}GJZ+oKro7GkG-&XT;pKqBZx^_d!%~vw#J6F954cNDU@7bA1#?Pm&IsN=omN?bh zYT>#v={0d%gKw-l_I5+jQ@4nl7r1(T*IF)El6~0CV#iX>xSM-9>dFh!o(Rp^)^_~Z zcZ*GHCH3}yS(G`4N04P-VNKz~nd0@I%Ib2wT^0$Po5uZR)3ndGRHm6OOkCNtYv<=_ z-Pwu1=Q$ty|NPI-&x>3XIBPE(edBG7ZhIg6tw+fs>(er$xszEG6xTCZxBgX(pMUnt z-EYt-Lf`j!O|$x=7JRxKdg$5r>r(3jC$l%4D_*nsebcwPy@}sL6W3bb7goE!e|LS< zHE|P`1E3D}W(J16d-r}gz|1cav*teHsPsqr`}{8bd!+x5>E9>)|3>d0{hxjRk6Kqf zs8lIn0N3w43=1|_Z?}|p5@WcKFsX;3Av2zdAw!LyS7^qj9V*I=nN|8M3{y?dx}EP_ zcg}c2^6%YlhwaqzIhh#he+vCi`62fs?#Eu+&xcN*D*TjhU-9|cui4_gk6*;cSI6)C z+ZujP;5o~E<@?W%voWk-+5f8a${kV7>Q@K;u$C^IXB;^(pOxXlBo3dc=~H^mr!q6N zGBRYaFnIj=y)C~qiy`6hx62E^XWv@4yI$EvHw3y=kcolE#rP<{ShekGkVn`o874d~ zPZj^K8NB@P;eMMu9!3L4hG+%>^K1Y7*csB@dj#AB4uoB3cVyT(U+?jDuRo8!e%xOF zeY%btqk{hD=?n@Ya|*5pPF>3C$M^PI%gkwq*97de;`+K*^i{1#3XiN+NT$yRY2M#) zf8X8Do?h+7C|l2#y_xg&&-VHs?Dp&&djGG+|KI;Fg-LIApJ!Tiol#SK=CWG8srpBZ z8aI6Il)UwOgRg6u_g2CbPR2LsEh6|fE zf8=AZV3;7qV9@#BfWe^ln3Klboj25rCS&d zaGw;jnILe0`($1YGsC5A8qHSG8{ab=2v}Ne|6hCh=Sd6=&lwIJU}Bj1BZM=Uk88)x zGt*8pi&f6%V)*ddg^l6UzE$53KHXjasiJSoYwHOw3A2#W%ufOZV8~OE9 z+KFQ(?OoeD9^IGU^XWwcV1le$eO{-n$g%qj+BG|K+F=`$ko&W1-j;0Hr|Kj2cgwv)*^3@9IMjdNAFxPI zYR&C6+kgITnJYj0>#|Lil|ujB7z#c=^G%HTGkc!$mp=>tvPm#V)Gz;2w{lnesqewf z$J_ZC9(8@z_`UL1Y1#WG+28%G$F3yHzmXPYh}lyScw@qExvgvro72v7GBX_eY@8L| zYOrrjl=xS>tXXsCZ+o$war2*AHim|m`|20nKKJmzd;YVn{NKY}#3a}4e0GbWGq?Nx z(*`GoZ~yw!b3Cufl{0`#mo9mR7i_vuzU3GF?`LB0__Fw6_RYWXe9Q~%SeOqnG-NKb z?^AE!Wmq6tA3fdY6u$r~!-`2uZtm-QywLIfW?qJXx67Fsc75Q~`%-#3Q6NEqp@DDS z%6hiP%NVWf+^g%nxuf-mL!bf7NK4 z{NESud<;BB3<)c)t}Xdr|6!qE9bdys@>^BaBN`@I}zZO?9wJSSRBt1R#gn*hs zs-jm@P`&BlGyUq^Nt4+b%&(?DUu4fC7s1f5WafWo#s;x@hKlQiUak5p`}NO)m-pPi zOM7xNxCs8&Vwmu=$LYx9`zsh4-b;%zRIHcVwrK@J!{G%h_Fopbv6zX0u~1g+RO#SUH6w-}Z@rBl#^0YeSNT!l8;9p}>xB+ax>(wf%u{K<$!Wg) z-M<=nC#JoV$Yf-YN!}Z0?OI#dZ~dheG(0KB#PFd!$Yt|?=69?KlbIjvzW;Zf0Xsup zJVSwY;N^^}4r>O36ATVA;bpfQCuVK4*I{vZDw;5v*}?Sk`tG$Rl}s&985S@u;$k{+ zUs?RW*}8vLjVpy3>k~b{FXHgI>oA4e`>KMe7Q+SJJ%`uKU~HJPz+3&_%imqqb%zp~ zv&;;A83aQAoMvEXwcb^8`TnXdqihC)q$7*>{Rnq#SaQgohh+uJGQH=moFyl3mmKG2 zWRROZ_xiC_>FH1Rb}%p;IwTar;IPYXsv<*viBD5GpO3J>gU8v$0XyoeBb%>Ht86S} z7XQDc?%SD(DnI`IJs}mQr}N_HL&b>11EHduQkxiL#NI^JpZGrM&3t=isq|V->jKH^ zFR!h((FLve+^WRRU}#g+rRd_w$?)&^{~z*)xKw+@eSdUbRan3J&+&ry<^NXy-~Yg9 z-R7I+?;hW8w`O5DvDx4jOT(rK^~MYgsUD!)X80L$jJR(zH7wK3*Gm5tny8}X&k)+m z5T_I{ow?!sm)WP7ADPWnZ_s6UAmH%buE_F$21CR7XVGdaf~t63d@o5%i#Vs|xmd4q zQC8X6G=+8EhccKL0;6RZ7X0e-eJHf*e!vtNscnV_5-m+u=tS5ZwSTvqi9v&<{vzL+ zDyD1U=ebxJrgpm@{&#nB?Z)W>3>8w{ybL~@PXu0zZeuvIOa4X+!<8%B4qRHL2D-E2 z!|V0=_b(dcH#ev=G_jxJRA6SGX$Cs&G%ttSg~I(o#p;ICWe${ zTJ;PyV)FK{#r6BSCFXAptz`VrD9Kf0B=jqgy>HcfiGI~~wh0#>_^Yy&8b8qz^lUz7 za6NP~_bR>3d$QuC84{X|thCb@1ccJ_-()j0Jdu(3^xyx{{VDUEOY6X)yq|}`gQ3WJ zf0@=l(Imfp@)v$hpEq-1$!|VphG~c5xtS{JXB%&|aZfn4)cDGM( zG$OLK{t*KMXI;B1C!fEcWIx>6_PcF)Ucg*7fD@-P-SW5Ba2icwrI9z#x0v zBw;HfL(Q>>GFkJpHnY>jUs~9_F8TUMc;CmI|DFu>46^N7YzsuW7(Tr3{pT*r5;*mF z(ATN`?aQp}Wf)%UaVrT`tB_!?m)GHLo96%VJR^gh|F!e-s>}@iJgsy7%wGOgYx;ZP z_WV}u`k#9qW*Uu_@FaNy{kbH-=3@W=7*=9_l-$SE#mhK}kwABF}ShLEN>^?#`x3ipF6 z=P`&fJaCHtwyT$wDd5Hq1BUA{#=HMpGdy58FqexG^{g9C*O_fZ+fG z1A|OT0YgKY_OTWFUq#3;B*Zf@Z0YCeE~(F)*>`d^^Nk9I5A~6MmdG*usSjslu#-^# zcwVu=YtF^O61_z=Vz#digl^UMcUdYlgN5->%!$y=H~vVJOECnfx<0wj`rj|){%l=_ z2k(Wy$(~|xD6cbO`~U6HrafKtk_-#JhV^lB)SJYXN*djK`}^kRx_1oG3=72nvvC}_ zz0FX#^`p)|&${KSQi}iA*H@>@*@Tzg{rUU9&(!QUUB0VUbj?hP5e{Ew6gqQNVbJ8x z-nlI|jw!BTI-{^HesrQfU9-+x{A`fuI4$b{H`^Xk7}+n2~b zP3v5+%TA>;ip>1?em7)SG937K^zl^z2ciFUKg0JGGjZfrN_&%u`rz3ZaDvEv)IG`_b#?adN(n!F|3JvZO5Q-kbC)ag$BlkgA5FDSAK`{ zFj$1=@iY7}Dv4xfSj^1uU}F6nT?NK^hFx>)mpd^m=wN3Emt8QMf#FO)!_&_2rE}x< z+i@{CS#mh3zDT;cdhdarR_7@X|J^?+z_923pZ`lfw5UCOtiT}lv;?#wpD9ku(c^Ky zYC{7fL&Vfa^O+g$O}))s?<*PkUv78Tb0&t3VhjxI`n#Eq>_7ZHQ2y5v(Mbza|NNS; zv;J|l_!FV$stgTc-KLs44NMK8m-WlJ)#6{J`R-Wq)Mmk=dEBfAPycv-&?x?{#pSoR z3@@ME|6fhuzb^v=o73Jkj~`z@&e(AB^S!*?<;xiuYWmwsC$3`5JGrespOIn5e0@d+ z9>z}$49yJJ)(C$8uf^!#8~)AzZ*?^*lLW(y-&zdyx{H6gGBQNnTgA}RB+y{Q*kH!) z(8b=M|9AOWMgcCy0|E^Fa+yvH8Vn4RtyV1DR3*W1;cFm6!%;=KiG4>mT^20JYpJ~W zr&)K}b#4WdU-xETVbo@6{XJA-XsLbE#v&)X3;eZo^g37sSL570ATs({~R_veuYprl@W|~j3=k>h+wp=H{JbjW3eX#FGIxUFk6NdQ-iW$UKZyUvFUjyifnkC|gBXLy zq84TbS7-Mm28H(?`%UbpF*^vYzIRrB_wRO>JRXLYJ9|ZC>$V=?$rV;#y?F7NAG@U( z7I>PhJX`O$kdcAahnL}lh8%C_gH0cfyYV<5Uw$^&{RZFNc`OY3N-y(H?W*7K>;0*m z^M~}eS1?>KXb|8@I8y(N@x$H2#&57x8^XGPg}*_J1orP3yWiup6OO<56_oU+(9*%T$w5GzF7jZy_ouKT~(vGH5gv%YeAw|9Re9+m2CYli3X&heyv$8W;_7&z?Aw!Ql|;%fwK!Kd67@jr5mRye$kS#Y_{9G~|B# zX_wDns>)Ds;S@w@^dh6TT`K4-m9ckPb5YW)H^ zW`;ZEGk$mN{(mt&nt`F?mjpw{vA@y`8`91)G%z+?YnQ(><9g1X^NkBPsbX9k6kXT0Sf;%=5GcGNR7#IiBSuw2l2ZOgi4-7D?w`;N`JcGT8%V$7fWaV&(LraK`N^eI{!O1-EmzDveO=(%`QCr(#b=%4Og?LOcu{Iv)la!lCx428O~K)tC0o;y_kT0)rruC(m^FIqifT@w<&Gq~v{x{!M@qhvoL&5auJx|`9Ddp=hli1Uq zd2ec-2y?@Vbcd8F@lt0q{r(^PwwjkABxCaHxlgLpO*X%MyzZOn+S@$K4%bBF-J1U| zv+VY&L+50Q*RJONw`^|xQQfJzr*CJ@|C@CCe`{uH{`1TAh1-6g5?y`w#^?IH;`I5J z7q7Z%XFs1?-@5zJsn?T^xUMkPyxD6k{%}U()&o=4=oCy6XGkcx)XlKqMBVEvWoEf| zk4|MM;g6}C7+v*s!tQ^^cIJK4<-U8OZEfCf=ikvTnmry(8aFrnU3lh!ttL7toyTP-#pFlU);ZL{+oI;{n>Bc#TnhbyEkiM^sbtv(G|}-cK`gg z^xZe>upLWRzbn#yzwh|kn;VYyuDSaljBkBu`8tU*?Y8&lmgV03nQ(gBzF!~A@0{op zzvHXyerK!q{gTJe{;L>Q@Lx`l(`nv6`BVLa{crAWz4-Rtt~+a`_c@o&UDg)#@O8=e zd+v89vwzzqB>(3Ai@x`<59+p;$EAJvx3>21^s;!y9NxCO2lrav-Ii;8cW?If>F?ti zBkKA5i}P#i7hC^%^X|$yr_iQ3dtJkF&VFm3|L1*Zo_Y52|6f_pPBgeLc>K4-5z&q{ z+Ql=zC&t<;b^X(a9 zgZTd|3358ZyZAG=F_#@b_WbUmUiaCL?o0bLS8n_rTc2b7Z~u?`HSeF9E@f_bSbE#; zMqKQZ<{RH1-Ji|Qu<-vQ#)gvn2Y>T090!27IqpY@)y+RMxgEc>^}+)M9Y6B%U1up{^CWWG(G^!HZhA7?o5&-Qlo zIqNF9Wirhv3<&}U>SuNSFJf@uk9BWVJdnZ0aKY}&LVihx1Se*ub^ihxKIrG$%$BqZ zykC`;Yi#mhrmVTOuaNo5p4b(0WKC~~ae1ydV|K>saBS_t%yoJf7MFcg4Y%+;wENb^ z)S0dKj^~^?I=wV%!gZ@0S!S7-qQIQeg;z~}&73V}mB)Miiqp25TRbY;)31qyi%(i} z&?dso%Z5!ZxcHe~(c^tJy)S+;l$|_!`Ro(^%o%nS( z+@68q;@>vy4Hvw0Ie(wK`~Sq_xQwpT7iU!KJ(Sy?m;YgYna!7s0_!_?0#MBe^k&k zp_GSV&bOQUQ)1Z<-W7Q9YntlkqT_k%?tVGwF)9B3#oE_K&EMD8y?1?gtKfb`3iq-b zvWyIM)&6()AFZSVV|7-1YnM@6r{eN%n_#r>Nv)PZaL67589%I9)?Zx%iEX7NG zCLFZfU2?VU&ZGKcrRJur&$d7J%MzY$aF&@NLae_0)RmtzC+z)sEj91hncGGT1=nsS zM>5twyB|BL^Y=ndZ`Y6fpA#e_#Ol9$*ITPGGhFBMEmQuyJeA?WasK$(-hb?Orq27d zON*J|z{kjqRkpkDf3qv{xNLvo+5R2b?Df?(W%s21+p{t3;%C@1BlpPf>3j?awmdJ5 zWN`Rg-^I|-d%JwMwba5H3*SCrWtjEXOpCF>ks({{UpHfe+@3lvM+Rnwr=1h}Yn~{- zdotPo9VbJyGc^mKQo+k=VX(fBjRB)$9ju|2KcFvR>xqn=SmiCowqao@`zB zh>dAsec&g}8Lf919P*>y?8sz|yw@i;x!Nt&b#j;EyD6;QZZcOm*qgsw%=g+JeW~;) z$3GbXhduo=_H}pueww~NXXpRF&&>B1CRBiGFR`EYsdMvJ{hhYh$Z6i&3dPr~I(6$s zH))2-Sxi{?*Z;w*`yJ~3b@MXMZ+@ygd(m^od*Lz+9|SL-`eWbuX#dapYkBuxKGT;8 z+deskv5m#6BDk!t-Kg~U9La!06@Hcjw>d*NI-MAFBfJ?IHun9vzQ6Rw-haPdzdLJw zzXY^=JKF6_{qNiNk2&qxl)B+KLkn|5I>VjE;cMd_PfyNd+*ki0bY|iG&-WPqRkJay zVrNLOyBH<+(f@pKg!suv@7C=v%nSMRoFkIE?tJ>6`Q@jLO0V+8C$iWu+VFVy-VG09 z7i2up6WM)*p+Q(?QUWhyLwH=}(Y+s!Nx!?XG1*s;fAKGmKkmHKzRqJvV5pQ9WpVgp zefFo=?fhAvb)P9JR5-HKKVPac^RV7qcQd}!M^m`!?dR^=P<;EN@~^s(c)?2xyWTHX z-ccd>f6kL5YfJtX-~OEU?vBm=`U4D12?7Gl3_q-YR7)^Dxc_eRZ}GqOcKQus3`dUC zdz@JQ#N@zj>(^^G&ocL@c(40JaN*s)us_AmHOlW>7QAR+WXQf|#mMmMgOsOe6NBik z|HbpO*%+S82=u+AaWZwvHq+@Q*^Dch+}>@!pUvpZ#OS$QIginUiDv`zW2p`?EiW|>$;-K5zA3|l z*Y~a7#MS>T{r+rr{y{Kd8~0aGceKQDOS&Radj8PcC6REvziP&1!># zy-w&Kbw-Bzb$T&2m$ny{GEQf#H`QJIe*%v#3!{p8`mLKw6d5+24^qGCQoS{l!RhzB zBVU&H>D67h*xmnT_5As+j15yh?!T?e#_-|av?F$N<%BjVGBg}w{P0&Yy4Xr*_Jdv# zn{=fEPH#`?)lQfGI$et`gMs19;->jd3|6n+KMz(AxYd_dGOPQ4f3Kc5(`4Zdx6apZ zlqlw7Dv%S2*~;>+`h!+0L&5&T;AZHNGwt9m)bpA*mfij9Ss0Sm{fg>mJNtDqlib7) z|7-J?a;Y>kTw@Cbx19PzwyV)fSuYa1SBZhXx4 z{Or2F?Oxw~PGA00${6{t{LQ`jlIMQh=k|RZ>D+4fobf;-<4I>`dHFjE>JEn=uiokB zA;!_R{Gic>94>|xuWBy8G51^1vMhV@(!_)O@2}hb5Q}~572C+D1k``$n8q3zE9!dCBB+^*N*QFvc=K<#|>?xRjW z*>{!xeem1wZLjTBW`@)33Aqy<{o`ejVAx>P@X@FtXnE&nr4NtnL)a#C?_A8_AoNE@ zr9+ix$wIbEC+4dB`+Ur%Xdy#I^{t-gSI)-QSINI#(l^^+Wir!F@9T-`?-+mFVC|Rm zyVYjA<8tQ4$In{JA{Db-rDDV<+^zq-js5Pn*!~o@_rb>h%B2`Q+79MqM9q85%qzs) zbYpp90&?jz>+i9h+U?7h=dkZy@VM&xjXx#3YUcfKt~Y+(C;Q94!uqtk*~;_Q^|RRB zKl?EDZ))|vZjo1?DCqCa67;eEyY%0Iz$S}E5wjDF^$ef?mOC>vI57x(D`|0(+WK99A@1didM<_u zla_fV#m^Fpa_3+;a>V{zkzB=w?J1u9jtzbc3_L1kxp%J`Hr`P*l)JTTb(XbwoRMDD z9hHx&zTL9sMQ_$jWnozH;CjdZDUX@ISJ%IvzO8vaZ{>ggna`uU8ZI6&6u-&W#&BiJ zarOGpo}+f{=a|oKT=XbjIVFG2PK|0k&)3fsI#~RY?tA~W5BZa=(D2`$eOrDB|NX5h zyJYk1Grz^=>@RGxQ~9ULFyZ+gKil&=9vi*(wC%nWP{Rx(Tv`s8eH1!;AuHGDdBFPs!JBsi0n0QmkW#dQ_X$! zM&fkWKeBmW?DZKYI590bFT`?!ks&K+(&mUFqdZw5mKP=r5!+wx%Q=#8=*esC-EIkY zf7plZT+Ep%KW6JQJyEdj`Z*|G#P{-!fCHJ@F9JLZZT_14Y zC#K@X-EDr#K8KH;?O%KSc6{x>?%4h3|E{~wwCw;vZuy{CQue_$u`^MKeJ>Fe)3FgDjM+1J?m zuJESaY_r2}XPO?pdXy{MfPWh2Tl2GJ2h#5CsXusk-=_(yxx=?tT{eDHD&2f_rC4XrYWzxr8x_l#-zs`tx-9yx1njDJ=5^|)$Ec+S1Y=l(p8;(ha| z)PI*@`Q8hEeCprMnd&Yh5%+JB_xtlXe?kwxskD9gN>kxP_T3GAEesMY8_YZ&-3N8# z{aP80SXHN9>3#O7d8Ysa591zbd-GZH#=mU;AGoIWcjBwa8hW>e)_ohvWSk9%faV#{d4@SuKv@xdFX-lx`o zu9h!KuKR!Z-K_rlHJKlN9y(uRmRVnN;Le@f(^8twOs{T!{LFgF>NfM~+iDpz8E;Nk zsAKG?-|_6WB!k4PEeoFRk(*_4wEsjoH$%v5mJ6U{BMeS9A#WG)?DywpIH0g{J_~~s z=l?4V52X3um2w}C*Jfgve}dncVeOCahW}$;IAmSBA8>PiM7m;_c*H9m7bk|I-UD6& z44am=pJEETxFGqGL}vH3$Zw|0GM{DeFfRG2DO`XWtwSU`<+BMP)3_hQl7?>x%=WVgymtV!u@P07^lhkD+?zOjPFLO1C%7`+_%sBPg z^|#G+yX(R4mp9$u@2t<9nPVH{toL&ayK`M71D{^I86o>Li}p6%uMv#W5X+^mp*$q&PVtu#ZNIJ^J5@H1Qsn!RP-TmE;i zH5eR}b4-2JeNV}(oqIp`;OUNkQbybV9^!8L?X0yw&tJ^y?R1{Ci>Z9w&wawbSnHu47<` zYYEI}V33LiUG=g$fA_iR%q6nI{%nkEzHa_u&XB;c0CdRZr*JEV0|E_QMZF)6v%P*` z6&mG87S^4N zl<)Y@!Z5+H!L>MV1rx&+AqEHE;x$R<#W`19+Q#bWr!e1-!I4(k~hLSz>lb7+{Bxna$+#^3h5j34+j-_<9c?o8+5w+J{;dTa@w zNXmcTvsZLG|A%mFC`#Epnc;xKwhML7tU@Mr+p{t(6lkz%+RpsQUZ0`B()V^{?rr&| ziuF&oG&V9s9h|R}uYyFLDOy<6VARiBtVY}nXeeOtZjZ}#1L*?WFfe)xC2H$385<=MhZ zHt{A54%Yhm0j>W(oY_C$;QxHN-=(Wh+^_p{#KfSY|M@|a|F(PPi7eSuWpd!8*Z=4~!+`^g4RMT&tJ;d09XbyrAMe}RQTyYJZ*!_?CF_!l^}@Fr7x71U z{t4y~kg}cVa{kN9&65=zJQ);j-*Xj@f9d!Cka+B0#i&(tt6r^qHznAwPRIsM>NAD|%T6**P^z$2{de$M-`**uk-C9D+#MY<>ZfS@X;w%$ zz|gQN{$jV&o=1N#1}ZFIG2U6%e672;Uih28-RCvGFP6_M`~U0i`knV>?@hd^A9rKA zZ*!%LMn~mF$Dg|v|GwsW_y6@+yJL+TmNPuq^I5<2y6?}QafVIk z_FZ$<%C5dGUHV(y6verQaLte|?{_$A3p|>8J9H@183e z4%nA}c=2yLpInLkkAL6q*vnSmb=(w{a`t@w-nt{Qb^ln|PY3BY2FOY4G8{NGuYzGq zt=j3SybNxyzB%2k3)x;SrSxC^^|ob+=gpTj+JJD;(F`;Q^#ToQa6`<`WpXZlJ;-LsHs<7%g;yhFeH4`FAZ3FUWjFaRmN`qy3N{; z6Dbxo=DVPFho2-x`Jy*I}K3D0Zaj3)`tnJUt@;MH%DKeACT>J^XHP3L7u5>VpM z*`ml0qbjX)w42R|iI|WalZ74pQ;r*-4>rc_^W#5CPR`)YFWLy8^4*xxU{tKRIsp}HC z7!K^>WiVT}Pw{-oR>KnNcyIbqm z^8SA_t@qvBv#VvEzw;NqQRvA~c&$$7mL|i6d;XRT4y!m*rZF?vT$FhE-!r-8|Lxwu zx*27)cjZ>xzQ@MUkUIY|0|QrDO?=bs{FR5|nHVeXn#?~uOFS;)^o{#veE*(>ulx2n zdEK{XAMC?07FC6(QEw-4%&LzTU-7xsCNIina7y= zr|&`iuOJ17Q~4)fKbz0q(XuXDZw~M6ZJfeK)8)@R-naNf`lQ(HQVa)LgCEK;9QwP3 zi=iOj`Nm<6|ND0B?Rn;(>+|_@+@%(Vf`yV23=e9<#25}7pQl!)GV`|~!;b||1^-Jh zO(>qWQX=5B7{dzg|I5C%Y%tw84nA$dspR;{C#)q#Xs|lfAmdl7|P72{j9pHcZ!)|hstKx zqx+w*I(#-OSo&K^@{fJN?|kuZdP!?fFD__sQ*AWkNMJbN#I)w?hST-?85yz{%Q7@X zt9H~?bTl8Vev&mar#R0-@z?x_+CvX)eP$b#*0C`>ySL{^tbJ)28-t(q+hR6`T@p+V zvHy}e8CIU&&%)qj$ymd2U|sY264yW3j0~b5R=1g_uAjZ_T~SN~vrqP!ZpQ{AMu&+- zjm?i31GJTlxH;aZFvbfqcofw?*EeE{SK(3gKgaO4wA;RUw*8UM)zj+)S|pe*yq?w< zb$HW<*a&tNww@=(h1~CDPPSNf)al9lc>f7d2PhUY6Cofx8A>MJ)p z+SJebk>Ad+q0epchK08k8Fa-H*LUhPGpPNm{<>#N+S#alGiHXTj12Et4;=k-`CO)# zD8sn~>AENTH5fFU|2$`8@Sc8mvM=-dsSYn!ig7SJWDsR$5Z~Cx*bsG8^_v$H!^Mfe z=j>m~b1>$}SG!8vQ%7oCZ5Tp+Z=Dt~*O9TF;m*Ii)ti^p+1vc+sLs89_gp_$vC~Cq zHkSUHr&{0h``@3t#(0&npwr>quDQnbo~JeJjic@>y-EHaJWJ;ScP)$PtwYR0eHX>0 z84}!`@4V06Q^oLMzw~_ZD|Rb*3M#c27RZVIlbFKFu;eRy5km`uL-&dN+vP$m4;UT% zpD?_rtY=72WPJ81pW(o*1>4WpzAH|%)D>mmxLKgRy^fdh0t3VS!l_nkmMoTHWzbb* zD1F`b<2*Bin2uE8_IukdRc?IP+VEeml|g`y!IDvng`v;;$#f1zFGhx~U9V4RGdP^; z*sgu?>E1By8+9W&M`xYs)R!1*_`se@ZO>@p5@>h2Ldco3gu) zN^Q30R&O>s(7*3<$z~IU^1Js8s_VK9+~57*I*Gxdw}o*_CA-R-$Nksep5_hQzhvT< ze80PX>uzh7TJJZ^txdMOG5=`aQhxa-do-;$8JH{?LKqzG)V~BR5CHX&)j!HJGgP{C zZ#^jRQtjVve#Uwph7vx8gz^yi$)|dMIJ=AP-kQbeaQDu+V*D7H`N zlwDsd;}e#KBMoyI7`Bv3GKdtdUwjnTv+jJ?=J>6^smW zd%rtfiTD5a>r&kId)*9Ym>c5vY|ww=dO_^@|EZjlqmJy~Z=b}VP=D9|Ws%&zs)P4A zm^GLf{_RlwvRr|ofd8XFL{m=M-G2&YHs9yf+jZ0%vO9z_D5$a@`1bgPO*(@^i98zv z!V88Vn*QLIqU8aHnmTk;W?FxdrJ z3<_KI7#j}Fd|S-G5Ptgow>S}oDN{W*a4=|SH`fO;1W5du!pPvz(j+mJ!QsuWqYGJh z86MP?SG2P+n7pr^9$Pnc@#24RH?mKy{`FgHGXDazZ;!NPBh5q^=3J>4_);IZ-9C3u z+^reqRd>~{zOBFZ_WbK_+e?2h-t{-}%?z_6_OBTON`)NOvO9PS9hk)Epv;+YzJlRP zjHCl7i~bg6Q0cIos_|!g^K}znp-*>=KD_#_{@1r+*B84jI%av6XTP7Cbv##p%YO?7 zfoM02eOZRH-2Ys!_rAP=;ahKBy|n-Id+pPX_D1`C-n;1;=k4-Cb&211Gd8?h#c(0; z?;?f+=clh?$Y693eRQ9};XV_?%JqS(msT@$Jle|5upo?qVan6q39oO2vM|K(Gd4tN zF&ua_U+v%GcmKZBovKU-)L-4i@Zh_Y07KGW{hXA)-x(eVm;O$-v) zXK<)zY}mE4S3B>OK0|`SftLF9j14Y^(?MfC3cAj$CZeYl83J5Rd^civz_Kq*l9M6h zXa*BQhIPCO!vW5x0t^~TPpU;3JbvG0aQLdo0IHG{8A3b%Z*pQ-F=K;3!zpKmMYa7h z3=3AgD79r^n6y_>i-93^=YMe~hFJm)7wSt-Gd9%!eRo}pks*e|ft`WjM*W)G^%;BW zcI3%Bes=iq|2i8(L#6yx1_o}%7i$F=7#I?c$IrS^4;t9%{4dAKUF;G9)uNM5nrL;$m>f+pN;?cOuJ%`uB_t;D!$ygGrK~NXwiJ%OAyU_6cNA(48&L zQ1DuZi(yA;5Q73|4G)9UX^-O(+HPAJ8m!|_u`yiQRLRJ&{oEo32M*7Scb^Y{+ zt_!!vH zVa?7EYtPIO<1*~UXy01&rzDjvO$Mo!3Pb2*!RJ)f4Z3(>Mwk2ZE0P^-mF%laCP%B1_x75 zhJ}ZZI5vdvGx+^^>{lGkap2(MSi%2M3<6CI0(=)va88iili$K&GF|XU{Y{1i9bZ`) zIvg4j%>HySHeCMF8^n_D$*@37`k?OX@{IqJ`P}@u*HU9=O-qPhs;xtoO>?%UsYB3 z&5QQ|73nI@Gn5z@`gxL@3m7;V4%oc2F8LDA%y6uC_5%}3hAncT7VHi2<@O8=vzDya z;W!{$?aJ5it@z#Z;}-QC3ygp0S?2GY(45EAaC@6h+5HuJEh-oeI5cqn&wI*n;<21u zSM2p8+owme1u!#w=-6Yjo`=Dq-dm%@fr%mFhBre)^s+Yw{WmO~&(AhG&5*^wAUARP zv#E>>66YJE9@uYtTdeetm!ZUhWx*OPhFJm(8}d5pSs6H-8m=7ctXE~IF9_}aZ^z28 zm8sTtx|UV30|Re|hR#1x&mUP_?>S2OS|=^^(B&wFN^FJfBoib40= z;pYAwkqL-=Ptc1HD*cp_Nu;e<`4M{NWpKuih<=wOo&L8;i+DaN7hT zf)yQ>yX`goaB!;PKkpy9OV#pp7#OcC6X` zcVvD~EwZz=wqfQRfzR%t&UPTUIhdc!LbX zglU>w3`t5hEZi^l7%?=YNuK@pc-rNz`je^gLW?XJ9Nx^)=nywL>WR1 zf6cqH-f`8`c&&?1-@Xqm=qY;JeIfs0%-M|z%LNWRXZdj5dJ0F&d*{1V1{I)Y>h}8Y zaqLU~U(<_vmLXOhq0Y{F;NC6sH`{HdGWIjp-{{?+wL&xQg7#^JWl~{ZH9z!qBzq3bbZ}-oi!N&If;~qEF#%*6Oe0%9%Z)MEQ zXdscWsGfnLA?!k=v=2joX^cVl`(kE>t4s{@H|Rf+6nMSiQK<+6!_=<-O0w5B`P@zv zRd7gr{k;B~w$t|c--Fl7EZ&rKR+DAH_1P-_G+8FNWW3mA`{738vLE~Z{mOhd$$Q_O zN#YJ0a_oAZnA@=L>3k%gbLi^iJC@Jm?!?%4{EuU2Som8@^yi&wPKF0xv)(Vikg>*Y z^4|NL@3Zfe@BF4-|4Dsj>FW1}h5t$yt8*r}8XVx=^uYY$e7<^yHIbXI?M-7?FiWN3 zUeF}K{Ee@}jFZl^ z@*J7g8@pZM(8L$dds-Qu&#mv=opY(YpC9dyXJBYGxRd_U_WR6x>$iRncKfos z;YGjh@w~^A=l@CB{#z^W)TVlAUWO?g%rX19>xBQZF|3I+W=LRANSjm6F#WDQ3xm_# zEwa16?{?mP=J6_!Yl5xUgi79(Pq?-w@^t;(HkTy1&xJ2Gz835L$ib8GnMuIy|Kdga z?=v!p{!)D36LG@r)ZY-pSNf8#c`q!kotpFec>Jskh6PRv7kCXOe7XImLW-dtx?WO* zVMEdDY+dCaUyRLp?Xq3;Z!BB8`_4P-X=Sc|zH>1w_|1G~mTC50UWOg7!-Sp*u4mw4 zh*|aFy*q<|)ZOV$##@eu7Tb%){EuZ}@;EKcV4#q&@ejy1o53r1jQFmsjorUD-)c=L zb3@*H{_JZ!3`>|9>hB(7sjrG-5QtvS*zo1|%N5KF*H&ewPHEWKVs>p!$nYd)JG1lE3BuKR$ow{@hZ-cWXA9eSXH9m+?+G@68+YnAjVTi7(!`ht?lr zGxu(Ou2a}O{m$JIpMrBU*7NDy!@|*vA~ZHzkZ(lKS6RH8{6qaLK7_O)Lbkr_^<3K{&q5hy0dM~^ ZU*Ftz-GKG1FarYvgQu&X%Q~loCID%}tK$Fw diff --git a/core/src/io/anuke/mindustry/core/NetClient.java b/core/src/io/anuke/mindustry/core/NetClient.java index ba61968ce9..baebe42cc8 100644 --- a/core/src/io/anuke/mindustry/core/NetClient.java +++ b/core/src/io/anuke/mindustry/core/NetClient.java @@ -21,7 +21,6 @@ import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.Net.SendMode; import io.anuke.mindustry.net.NetworkIO; import io.anuke.mindustry.net.Packets.*; -import io.anuke.mindustry.net.TraceInfo; import io.anuke.mindustry.net.ValidateException; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.modules.ItemModule; @@ -207,12 +206,6 @@ public class NetClient extends Module{ players[0].y = y; } - @Remote(variants = Variant.one) - public static void onTraceInfo(TraceInfo info){ - Player player = playerGroup.getByID(info.playerid); - ui.traces.show(player, info); - } - @Remote public static void onPlayerDisconnect(int playerid){ playerGroup.removeByID(playerid); diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index f6572cd6d4..6fefd332ba 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -106,11 +106,9 @@ public class NetServer extends Module{ connection.hasBegunConnecting = true; - TraceInfo trace = admins.getTraceByID(uuid); PlayerInfo info = admins.getInfo(uuid); - trace.uuid = uuid; - trace.ip = connection.address; - trace.android = packet.mobile; + + connection.mobile = packet.mobile; if(admins.isIDBanned(uuid)){ kick(id, KickReason.banned); @@ -150,7 +148,7 @@ public class NetServer extends Module{ return; } - Log.info("Recieved connect packet for player '{0}' / UUID {1} / IP {2}", packet.name, uuid, trace.ip); + Log.info("Recieved connect packet for player '{0}' / UUID {1} / IP {2}", packet.name, uuid, connection.address); String ip = Net.getConnection(id).address; @@ -162,7 +160,7 @@ public class NetServer extends Module{ } if(packet.version == -1){ - trace.modclient = true; + connection.modclient = true; } Player player = new Player(); @@ -207,8 +205,6 @@ public class NetServer extends Module{ connections.put(id, player); - trace.playerid = player.id; - sendWorldData(player, id); Platform.instance.updateRPC(); @@ -395,11 +391,11 @@ public class NetServer extends Module{ netServer.kick(other.con.id, KickReason.kick); Log.info("&lc{0} has kicked {1}.", player.name, other.name); }else if(action == AdminAction.trace){ - //TODO + //TODO implement if(player.con != null){ - Call.onTraceInfo(player.con.id, netServer.admins.getTraceByID(other.uuid)); + //Call.onTraceInfo(player.con.id, other.con.trace); }else{ - NetClient.onTraceInfo(netServer.admins.getTraceByID(other.uuid)); + //NetClient.onTraceInfo(other.con.trace); } Log.info("&lc{0} has requested trace info of {1}.", player.name, other.name); } @@ -424,7 +420,6 @@ public class NetServer extends Module{ if(!headless && !closing && Net.server() && state.is(State.menu)){ closing = true; - reset(); threads.runGraphics(() -> ui.loadfrag.show("$text.server.closing")); Timers.runTask(5f, () -> { Net.closeServer(); @@ -438,10 +433,6 @@ public class NetServer extends Module{ } } - public void reset(){ - admins.clearTraces(); - } - public void kickAll(KickReason reason){ for(NetConnection con : Net.getConnections()){ kick(con.id, reason); diff --git a/core/src/io/anuke/mindustry/io/TypeIO.java b/core/src/io/anuke/mindustry/io/TypeIO.java index 294671530f..7a0f2d3069 100644 --- a/core/src/io/anuke/mindustry/io/TypeIO.java +++ b/core/src/io/anuke/mindustry/io/TypeIO.java @@ -1,7 +1,6 @@ package io.anuke.mindustry.io; import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.utils.Base64Coder; import io.anuke.annotations.Annotations.ReadClass; import io.anuke.annotations.Annotations.WriteClass; import io.anuke.mindustry.entities.Player; @@ -17,7 +16,6 @@ import io.anuke.mindustry.entities.units.UnitCommand; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.net.Packets.AdminAction; import io.anuke.mindustry.net.Packets.KickReason; -import io.anuke.mindustry.net.TraceInfo; import io.anuke.mindustry.type.*; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; @@ -364,45 +362,4 @@ public class TypeIO{ buffer.get(bytes); return bytes; } - - @WriteClass(TraceInfo.class) - public static void writeTrace(ByteBuffer buffer, TraceInfo info){ - buffer.putInt(info.playerid); - buffer.putShort((short) info.ip.getBytes().length); - buffer.put(info.ip.getBytes()); - buffer.put(info.modclient ? (byte) 1 : 0); - buffer.put(info.android ? (byte) 1 : 0); - - buffer.putInt(info.totalBlocksBroken); - buffer.putInt(info.structureBlocksBroken); - buffer.putInt(info.lastBlockBroken.id); - - buffer.putInt(info.totalBlocksPlaced); - buffer.putInt(info.lastBlockPlaced.id); - buffer.put(Base64Coder.decode(info.uuid)); - } - - @ReadClass(TraceInfo.class) - public static TraceInfo readTrace(ByteBuffer buffer){ - int id = buffer.getInt(); - short iplen = buffer.getShort(); - byte[] ipb = new byte[iplen]; - buffer.get(ipb); - - TraceInfo info = new TraceInfo(new String(ipb)); - - info.playerid = id; - info.modclient = buffer.get() == 1; - info.android = buffer.get() == 1; - info.totalBlocksBroken = buffer.getInt(); - info.structureBlocksBroken = buffer.getInt(); - info.lastBlockBroken = content.block(buffer.getInt()); - info.totalBlocksPlaced = buffer.getInt(); - info.lastBlockPlaced = content.block(buffer.getInt()); - byte[] uuid = new byte[8]; - buffer.get(uuid); - - info.uuid = new String(Base64Coder.encode(uuid)); - return info; - } } diff --git a/core/src/io/anuke/mindustry/net/Administration.java b/core/src/io/anuke/mindustry/net/Administration.java index 48454fa1a6..7c69d5d816 100644 --- a/core/src/io/anuke/mindustry/net/Administration.java +++ b/core/src/io/anuke/mindustry/net/Administration.java @@ -2,6 +2,7 @@ package io.anuke.mindustry.net; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.ObjectMap; +import com.badlogic.gdx.utils.ObjectSet; import io.anuke.annotations.Annotations.Serialize; import io.anuke.ucore.core.Settings; @@ -11,8 +12,6 @@ public class Administration{ /**All player info. Maps UUIDs to info. This persists throughout restarts.*/ private ObjectMap playerInfo = new ObjectMap<>(); - /**Maps UUIDs to trace infos. This is wiped when a player logs off.*/ - private ObjectMap traceInfo = new ObjectMap<>(); private Array bannedIPs = new Array<>(); public Administration(){ @@ -53,17 +52,20 @@ public class Administration{ if(!info.ips.contains(ip, false)) info.ips.add(ip); } - /** - * Returns trace info by UUID. - */ - public TraceInfo getTraceByID(String uuid){ - if(!traceInfo.containsKey(uuid)) traceInfo.put(uuid, new TraceInfo(uuid)); + public boolean banPlayer(String uuid){ + if(bannedIPs.contains(ip, false)) + return false; - return traceInfo.get(uuid); - } + for(PlayerInfo info : playerInfo.values()){ + if(info.ips.contains(ip, false)){ + info.banned = true; + } + } - public void clearTraces(){ - traceInfo.clear(); + bannedIPs.add(ip); + save(); + + return true; } /** @@ -86,9 +88,7 @@ public class Administration{ return true; } - /** - * Bans a player by UUID; returns whether this player was already banned. - */ + /**Bans a player by UUID; returns whether this player was already banned.*/ public boolean banPlayerID(String id){ if(playerInfo.containsKey(id) && playerInfo.get(id).banned) return false; @@ -215,11 +215,13 @@ public class Administration{ return info.admin && usip.equals(info.adminUsid); } - public Array findByName(String name, boolean last){ - Array result = new Array<>(); + /**Finds player info by IP, UUID and name.*/ + public ObjectSet findByName(String name){ + ObjectSet result = new ObjectSet<>(); for(PlayerInfo info : playerInfo.values()){ - if(info.lastName.toLowerCase().equals(name.toLowerCase()) || (last && info.names.contains(name, false))){ + if(info.lastName.toLowerCase().equals(name.toLowerCase()) || (info.names.contains(name, false)) + || info.ips.contains(name, false) || info.id.equals(name)){ result.add(info); } } @@ -287,8 +289,6 @@ public class Administration{ public String adminUsid; public int timesKicked; public int timesJoined; - public int totalBlockPlaced; - public int totalBlocksBroken; public boolean banned, admin; public long lastKicked; //last kicked timestamp diff --git a/core/src/io/anuke/mindustry/net/NetConnection.java b/core/src/io/anuke/mindustry/net/NetConnection.java index 7314caae55..3b572d0bb5 100644 --- a/core/src/io/anuke/mindustry/net/NetConnection.java +++ b/core/src/io/anuke/mindustry/net/NetConnection.java @@ -6,6 +6,9 @@ public abstract class NetConnection{ public final int id; public final String address; + public boolean modclient; + public boolean mobile; + public int lastSentSnapshotID = -1; /**ID of last recieved client snapshot.*/ diff --git a/core/src/io/anuke/mindustry/net/TraceInfo.java b/core/src/io/anuke/mindustry/net/TraceInfo.java deleted file mode 100644 index 0b62ec54d2..0000000000 --- a/core/src/io/anuke/mindustry/net/TraceInfo.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.anuke.mindustry.net; - -import com.badlogic.gdx.utils.IntIntMap; -import io.anuke.mindustry.content.blocks.Blocks; -import io.anuke.mindustry.world.Block; - -public class TraceInfo{ - public int playerid; - public String ip; - public boolean modclient; - public boolean android; - - public IntIntMap fastShots = new IntIntMap(); - - public int totalBlocksBroken; - public int structureBlocksBroken; - public Block lastBlockBroken = Blocks.air; - - public int totalBlocksPlaced; - public Block lastBlockPlaced = Blocks.air; - - public String uuid; - - public TraceInfo(String uuid){ - this.uuid = uuid; - } -} diff --git a/core/src/io/anuke/mindustry/ui/dialogs/TraceDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/TraceDialog.java index 2cb70b4346..7c58101b03 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/TraceDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/TraceDialog.java @@ -1,10 +1,5 @@ package io.anuke.mindustry.ui.dialogs; -import io.anuke.mindustry.entities.Player; -import io.anuke.mindustry.net.TraceInfo; -import io.anuke.ucore.scene.ui.layout.Table; -import io.anuke.ucore.util.Bundles; - public class TraceDialog extends FloatingDialog{ public TraceDialog(){ @@ -12,14 +7,15 @@ public class TraceDialog extends FloatingDialog{ addCloseButton(); } - - public void show(Player player, TraceInfo info){ +/* + public void show(Player player, SessionInfo info){ content().clear(); Table table = new Table("clear"); table.margin(14); table.defaults().pad(1); + /* table.defaults().left(); table.add(Bundles.format("text.trace.playername", player.name)); table.row(); @@ -50,10 +46,10 @@ public class TraceDialog extends FloatingDialog{ table.add(Bundles.format("text.trace.totalblocksplaced", info.totalBlocksPlaced)); table.row(); table.add(Bundles.format("text.trace.lastblockplaced", info.lastBlockPlaced.formalName)); - table.row();*/ + table.row(); content().add(table); show(); - } + }*/ } diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java index 2bd79e4a63..2a58ffcab8 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java @@ -119,7 +119,7 @@ public class PlayerListFragment extends Fragment{ t.addImageButton("icon-admin", "toggle", 14 * 2, () -> { if(Net.client()) return; - String id = netServer.admins.getTraceByID(player.uuid).uuid; + String id = player.uuid; if(netServer.admins.isAdmin(id, connection.address)){ ui.showConfirm("$text.confirm", "$text.confirmunadmin", () -> netServer.admins.unAdminPlayer(id)); diff --git a/server/src/io/anuke/mindustry/server/ServerControl.java b/server/src/io/anuke/mindustry/server/ServerControl.java index e9601b65dc..bdefec5ad4 100644 --- a/server/src/io/anuke/mindustry/server/ServerControl.java +++ b/server/src/io/anuke/mindustry/server/ServerControl.java @@ -2,6 +2,7 @@ package io.anuke.mindustry.server; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.ObjectSet; import com.badlogic.gdx.utils.Timer; import com.badlogic.gdx.utils.Timer.Task; import io.anuke.mindustry.core.GameState.State; @@ -18,7 +19,6 @@ import io.anuke.mindustry.maps.Map; import io.anuke.mindustry.net.Administration.PlayerInfo; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.Packets.KickReason; -import io.anuke.mindustry.net.TraceInfo; import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.ItemType; import io.anuke.mindustry.world.Tile; @@ -157,7 +157,7 @@ public class ServerControl extends Module{ handler.register("help", "Displays this command list.", arg -> { info("Commands:"); for(Command command : handler.getCommandList()){ - print(" &y" + command.text + (command.paramText.isEmpty() ? "" : " ") + command.paramText + " - &lm" + command.description); + info(" &y" + command.text + (command.paramText.isEmpty() ? "" : " ") + command.paramText + " - &lm" + command.description); } }); @@ -176,7 +176,6 @@ public class ServerControl extends Module{ Net.closeServer(); if(lastTask != null) lastTask.cancel(); state.set(State.menu); - netServer.reset(); Log.info("Stopped server."); }); @@ -268,7 +267,7 @@ public class ServerControl extends Module{ if(playerGroup.size() > 0){ info("&lyPlayers: {0}", playerGroup.size()); for(Player p : playerGroup.all()){ - print(" &y" + p.name); + info(" &y{0} / {1}", p.name, p.uuid); } }else{ info("&lyNo players connected."); @@ -277,21 +276,6 @@ public class ServerControl extends Module{ } }); - handler.register("players", "Display player info.", arg -> { - if(state.is(State.menu)){ - info("&lyServer is closed."); - }else{ - if(playerGroup.size() > 0){ - info("&lyPlayers: {0}", playerGroup.size()); - for(Player p : playerGroup.all()){ - print(" &y{0} / Connection {1} / IP: {2}", p.name, p.con.id, p.con.address); - } - }else{ - info("&lyNo players connected."); - } - } - }); - handler.register("say", "", "Send a message to all players.", arg -> { if(!state.is(State.playing)){ err("Not hosting. Host a game first."); @@ -384,14 +368,7 @@ public class ServerControl extends Module{ return; } - Player target = null; - - for(Player player : playerGroup.all()){ - if(player.name.equalsIgnoreCase(arg[0])){ - target = player; - break; - } - } + Player target = playerGroup.find(p -> p.name.equals(arg[0])); if(target != null){ netServer.kick(target.con.id, KickReason.kick); @@ -401,17 +378,27 @@ public class ServerControl extends Module{ } }); - handler.register("ban", "", "Ban a person by name.", arg -> { - if(!state.is(State.playing)){ - err("Can't ban people by name with no players."); - return; + handler.register("ban", " ", "Ban a person.", arg -> { + if(arg[0].equals("id")){ + netServer.admins.banPlayerID(arg[0]); + }else if(arg[0].equals("name")){ + Player target = playerGroup.find(p -> p.name.equalsIgnoreCase(arg[0])); + if(target != null){ + netServer.admins.banPlayer(target.uuid); + }else{ + err("No matches found."); + } + }else if(arg[0].equals("ip")){ + netServer.admins.banPlayerIP(arg[0]); + }else{ + err("Invalid type."); } - Player target = null; - - for(Player player : playerGroup.all()){ - if(player.name.equalsIgnoreCase(arg[0])){ - target = player; + if(state.is(State.playing)){ + for(Player player : playerGroup.all()){ + if(player.name.equalsIgnoreCase(arg[0])){ + targets.add(netServer.admins.getInfo(player.uuid)); + } } } @@ -422,7 +409,7 @@ public class ServerControl extends Module{ netServer.kick(target.con.id, KickReason.banned); info("Banned player by IP and ID: {0} / {1}", ip, target.uuid); }else{ - info("Nobody with that name could be found."); + info("No matches were found."); } }); @@ -455,35 +442,6 @@ public class ServerControl extends Module{ } }); - handler.register("banip", "", "Ban a person by IP.", arg -> { - if(netServer.admins.banPlayerIP(arg[0])){ - info("Banned player by IP: {0}.", arg[0]); - - for(Player player : playerGroup.all()){ - if(player.con.address != null && - player.con.address.equals(arg[0])){ - netServer.kick(player.con.id, KickReason.banned); - } - } - }else{ - err("That IP is already banned!"); - } - }); - - handler.register("banid", "", "Ban a person by their unique ID.", arg -> { - if(netServer.admins.banPlayerID(arg[0])){ - info("Banned player by ID: {0}.", arg[0]); - - for(Player player : playerGroup.all()){ - if(player.uuid.equals(arg[0])){ - netServer.kick(player.con.id, KickReason.banned); - } - } - }else{ - err("That ID is already banned!"); - } - }); - handler.register("unbanip", "", "Completely unban a person by IP.", arg -> { if(netServer.admins.unbanPlayerIP(arg[0])){ info("Unbanned player by IP: {0}.", arg[0]); @@ -500,49 +458,35 @@ public class ServerControl extends Module{ } }); - handler.register("admin", "", "Make a user admin", arg -> { + handler.register("admin", "", "Make an online user admin", arg -> { if(!state.is(State.playing)){ err("Open the server first."); return; } - Player target = null; - - for(Player player : playerGroup.all()){ - if(player.name.equalsIgnoreCase(arg[0])){ - target = player; - break; - } - } + Player target = playerGroup.find(p -> p.name.equals(arg[0])); if(target != null){ netServer.admins.adminPlayer(target.uuid, target.usid); target.isAdmin = true; - info("Admin-ed player by ID: {0} / {1}", target.uuid, arg[0]); + info("Admin-ed player: {0}", arg[0]); }else{ info("Nobody with that name could be found."); } }); - handler.register("unadmin", "", "Removes admin status from a player", arg -> { + handler.register("unadmin", "", "Removes admin status from an online player", arg -> { if(!state.is(State.playing)){ err("Open the server first."); return; } - Player target = null; - - for(Player player : playerGroup.all()){ - if(player.name.equalsIgnoreCase(arg[0])){ - target = player; - break; - } - } + Player target = playerGroup.find(p -> p.name.equals(arg[0])); if(target != null){ netServer.admins.unAdminPlayer(target.uuid); target.isAdmin = false; - info("Un-admin-ed player by ID: {0} / {1}", target.uuid, arg[0]); + info("Un-admin-ed player: {0}", arg[0]); }else{ info("Nobody with that name could be found."); } @@ -610,37 +554,6 @@ public class ServerControl extends Module{ }); }); - handler.register("griefers", "[min-break:place-ratio] [min-breakage]", "Find possible griefers currently online.", arg -> { - if(!state.is(State.playing)){ - err("Open the server first."); - return; - } - - try{ - - float ratio = arg.length > 0 ? Float.parseFloat(arg[0]) : 0.5f; - int minbreak = arg.length > 1 ? Integer.parseInt(arg[1]) : 100; - - boolean found = false; - - for(Player player : playerGroup.all()){ - TraceInfo info = netServer.admins.getTraceByID(player.uuid); - if(info.totalBlocksBroken >= minbreak && info.totalBlocksBroken / Math.max(info.totalBlocksPlaced, 1f) >= ratio){ - info("&ly - Player '{0}' / UUID &lm{1}&ly found: &lc{2}&ly broken and &lc{3}&ly placed.", - player.name, info.uuid, info.totalBlocksBroken, info.totalBlocksPlaced); - found = true; - } - } - - if(!found){ - info("No griefers matching the criteria have been found."); - } - - }catch(NumberFormatException e){ - err("Invalid number format."); - } - }); - handler.register("gameover", "Force a game over.", arg -> { if(state.is(State.menu)){ info("Not playing a map."); @@ -679,108 +592,22 @@ public class ServerControl extends Module{ } }); - handler.register("find", "", "Find player info(s) by name. Can optionally check for all names a player has had.", arg -> { - boolean checkAll = true; + handler.register("info", "", "Find player info(s). Can optionally check for all names or IPs a player has had.", arg -> { - Array infos = netServer.admins.findByName(arg[0], checkAll); + ObjectSet infos = netServer.admins.findByName(arg[0]); - if(infos.size == 1){ - PlayerInfo info = infos.peek(); - Log.info("&lcTrace info for player '{0}' / UUID {1}:", info.lastName, info.id); - Log.info(" &lyall names used: {0}", info.names); - Log.info(" &lyIP: {0}", info.lastIP); - Log.info(" &lyall IPs used: {0}", info.ips); - Log.info(" &lytimes joined: {0}", info.timesJoined); - Log.info(" &lytimes kicked: {0}", info.timesKicked); - Log.info(""); - Log.info(" &lytotal blocks broken: {0}", info.totalBlocksBroken); - Log.info(" &lytotal blocks placed: {0}", info.totalBlockPlaced); - }else if(infos.size > 1){ - Log.info("&lcMultiple people have been found with that name:"); + if(infos.size > 0){ + Log.info("&lgPlayers found: {0}", infos.size); + + int i = 0; for(PlayerInfo info : infos){ - Log.info(" &ly{0}", info.id); + Log.info("&lc[{0}] Trace info for player '{1}' / UUID {2}", i ++, info.lastName, info.id); + Log.info(" &lyall names used: {0}", info.names); + Log.info(" &lyIP: {0}", info.lastIP); + Log.info(" &lyall IPs used: {0}", info.ips); + Log.info(" &lytimes joined: {0}", info.timesJoined); + Log.info(" &lytimes kicked: {0}", info.timesKicked); } - Log.info("&lcUse the info command to examine each person individually."); - }else{ - info("Nobody with that name could be found."); - } - }); - - handler.register("findip", "", "Find player info(s) by IP.", arg -> { - - Array infos = netServer.admins.findByIPs(arg[0]); - - if(infos.size == 1){ - PlayerInfo info = infos.peek(); - Log.info("&lcTrace info for player '{0}' / UUID {1}:", info.lastName, info.id); - Log.info(" &lyall names used: {0}", info.names); - Log.info(" &lyIP: {0}", info.lastIP); - Log.info(" &lyall IPs used: {0}", info.ips); - Log.info(" &lytimes joined: {0}", info.timesJoined); - Log.info(" &lytimes kicked: {0}", info.timesKicked); - Log.info(""); - Log.info(" &lytotal blocks broken: {0}", info.totalBlocksBroken); - Log.info(" &lytotal blocks placed: {0}", info.totalBlockPlaced); - }else if(infos.size > 1){ - Log.info("&lcMultiple people have been found with that IP:"); - for(PlayerInfo info : infos){ - Log.info(" &ly{0}", info.id); - } - Log.info("&lcUse the info command to examine each person individually."); - }else{ - info("Nobody with that IP could be found."); - } - }); - - - handler.register("info", "", "Get global info for a player's UUID.", arg -> { - PlayerInfo info = netServer.admins.getInfoOptional(arg[0]); - - if(info != null){ - Log.info("&lcTrace info for player '{0}':", info.lastName); - Log.info(" &lyall names used: {0}", info.names); - Log.info(" &lyIP: {0}", info.lastIP); - Log.info(" &lyall IPs used: {0}", info.ips); - Log.info(" &lytimes joined: {0}", info.timesJoined); - Log.info(" &lytimes kicked: {0}", info.timesKicked); - Log.info(""); - Log.info(" &lytotal blocks broken: {0}", info.totalBlocksBroken); - Log.info(" &lytotal blocks placed: {0}", info.totalBlockPlaced); - }else{ - info("Nobody with that UUID could be found."); - } - }); - - handler.register("trace", "", "Trace a player's actions", arg -> { - if(!state.is(State.playing)){ - err("Open the server first."); - return; - } - - Player target = null; - - for(Player player : playerGroup.all()){ - if(player.name.equalsIgnoreCase(arg[0])){ - target = player; - break; - } - } - - if(target != null){ - TraceInfo info = netServer.admins.getTraceByID(target.uuid); - Log.info("&lcTrace info for player '{0}':", target.name); - Log.info(" &lyEntity ID: {0}", info.playerid); - Log.info(" &lyIP: {0}", info.ip); - Log.info(" &lyUUID: {0}", info.uuid); - Log.info(" &lycustom client: {0}", info.modclient); - Log.info(" &lyandroid: {0}", info.android); - Log.info(""); - Log.info(" &lytotal blocks broken: {0}", info.totalBlocksBroken); - Log.info(" &lystructure blocks broken: {0}", info.structureBlocksBroken); - Log.info(" &lylast block broken: {0}", info.lastBlockBroken.formalName); - Log.info(""); - Log.info(" &lytotal blocks placed: {0}", info.totalBlocksPlaced); - Log.info(" &lylast block placed: {0}", info.lastBlockPlaced.formalName); }else{ info("Nobody with that name could be found."); } @@ -789,7 +616,7 @@ public class ServerControl extends Module{ private void readCommands(){ Scanner scan = new Scanner(System.in); - while(true){ + while(scan.hasNext()){ String line = scan.nextLine(); Gdx.app.postRunnable(() -> { @@ -880,11 +707,4 @@ public class ServerControl extends Module{ state.set(State.menu); } } - - @Override - public void update(){ - if(!inExtraRound && state.mode.isPvp){ - // checkPvPGameOver(); - } - } }