From 125997e5620170a5661b7a935e2a5f5e687ee996 Mon Sep 17 00:00:00 2001 From: TheBigEye Date: Tue, 7 Dec 2021 00:08:19 -0300 Subject: [PATCH] Lastest changes --- assets/resources/icons.png | Bin 6621 -> 12347 bytes .../resources/localization/english_en-us.mcpl | 6 +- assets/resources/logo.png | Bin 559 -> 887 bytes assets/resources/textures/gui.png | Bin 12337 -> 25016 bytes assets/resources/textures/icons.png | Bin 1029 -> 2750 bytes .../resources/textures/legacy/gui_legacy.png | Bin 4635 -> 15924 bytes .../textures/legacy/items_legacy.png | Bin 19214 -> 36315 bytes .../textures/legacy/tiles_legacy.png | Bin 21036 -> 52141 bytes assets/resources/textures/tiles.png | Bin 42819 -> 86463 bytes src/Minicraft_Splash_Screen_1.png | Bin 26887 -> 30108 bytes src/Minicraft_Splash_Screen_2.png | Bin 32925 -> 33764 bytes src/Minicraft_Splash_Screen_3.png | Bin 12206 -> 12890 bytes src/minicraft/core/Renderer.java | 6 +- src/minicraft/core/io/Localization.java | 7 +- src/minicraft/core/io/SoundOGG.java | 62 - .../entity/furniture/DeathChest.java | 27 +- src/minicraft/entity/furniture/Furniture.java | 27 +- src/minicraft/entity/furniture/Tnt.java | 22 +- src/minicraft/entity/mob/Keeper.java | 2 +- src/minicraft/entity/mob/Mob.java | 11 +- src/minicraft/entity/mob/MobAi.java | 9 +- src/minicraft/entity/mob/Player.java | 53 +- src/minicraft/gfx/Font.java | 6 +- src/minicraft/item/Item.java | 2 +- src/minicraft/level/Level.java | 49 +- src/minicraft/level/LevelGen.java | 290 +-- src/minicraft/level/NoiseMap.java | 2 +- src/minicraft/level/tile/DirtTile.java | 2 + src/minicraft/level/tile/RockTile.java | 19 +- src/minicraft/level/tile/Tile.java | 14 + src/minicraft/level/tile/Tiles.java | 1 + src/minicraft/level/tile/UpRockTile.java | 134 ++ src/minicraft/network/MinicraftClient.java | 1336 ++++++------- .../network/MinicraftConnection.java | 266 ++- src/minicraft/network/MinicraftProtocol.java | 65 +- src/minicraft/network/MinicraftServer.java | 1673 ++++++++--------- .../network/MinicraftServerThread.java | 593 +++--- src/minicraft/screen/Display.java | 4 +- src/minicraft/screen/InventoryMenu.java | 4 +- src/minicraft/screen/MapData.java | 2 +- src/minicraft/screen/PlayerInvDisplay.java | 48 +- src/minicraft/screen/TexturePackDisplay.java | 2 +- src/minicraft/screen/TitleDisplay.java | 362 ++-- src/minicraft/screen/entry/ListEntry.java | 3 +- 44 files changed, 2559 insertions(+), 2550 deletions(-) delete mode 100644 src/minicraft/core/io/SoundOGG.java create mode 100644 src/minicraft/level/tile/UpRockTile.java diff --git a/assets/resources/icons.png b/assets/resources/icons.png index e9c5eaf6fcbd932c3c8d915673205d0a6b81cb98..6a357080105983c3d8703726022b227681b74b8c 100644 GIT binary patch literal 12347 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 C?S_j0 literal 6621 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 Hu0mjfS6*am delta 511 zcmey)ww`5zgewa(0|P^5K0^$UVo7)Ob!1@J*w6hZkrl{SNcITwWnidMV_;}#VPNQ=V}41?&lUAEBrX^tNh=YeY#(Vo9o1 za#1RfVlXl=GSoFR&^0y;F*LR^G_^7^(Kax!GB7aG^fX4%kgK1cl9^VCTZePW$9|v= N22WQ%mvv4FO#sy5umk`A diff --git a/assets/resources/textures/gui.png b/assets/resources/textures/gui.png index f9cba1291f2f06010d4f33728fccccca7aa07d26..85ce8783973cf3856ff22d0ca8f39f40ed0e8a75 100644 GIT binary patch literal 25016 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 literal 12337 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 cjj_3j+yA=2?CM+>cdC0B}2Zpa1{> diff --git a/assets/resources/textures/icons.png b/assets/resources/textures/icons.png index 12dc9b3675414df901180b9d2ad19494eff591b2..f08c768f034b2e63f2c0953d9c101310856f389a 100644 GIT binary patch literal 2750 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&w?27#O!K6o~`!7>k44ofy`glX(f`u%tWs zIx;Y9?C1WI$O`0(2Ka=yX4}_atN&k6Q1Ji%|APk)E?BStD04Jz-WDLmUJ~RN3={_f z1}Sf5H=qz_fk$L90|VcF5N5Ps4OU@b;F9-raSW-5dpp^2m8u&L^Z)9ZXa4rj;pw=* zt~1x36C|W9{ahA?d{{&piv8dv>YSZ0}OD z>92D1uHKAUH7Y^>AhDVM{(b%T4X4jPzaDz>iddSdenfwqfEX^D)VbVikp1_%WyxU{~10v3WPbV SKj#W+{dv0jxvXX literal 1029 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7+9Er6kFKIlR%0k-O<;Pfnj4m_n$;oAYUQb zBgmJ5p-PQ`p`nF=;TKS-;RORjsR0ASs{{rHs~HRo;stYd1=;{5L<4+6T!D19ef_oi z{{;mF|Ns9#c<|tY1q(`N<^BgsFqQ=Q1v5B2yO9RsBze2Lu=Ho#3kc`o)F`4$I$`Y1>%{1f(JzrYCe1_+ci@EI_I zSqqp;8aTl$2H6G7J`mOm2H6Bq&@eDKu)kmsh6q|Yume2{0v8yq4zPe(4SXZk$PbVJ z8o?nzQPf}m%h<<#c;CI`cWuCwq*~${QIe8al4_M)lnSI6j0}tnbqx)4jSWK#jjaq# tt&9z|4GgRd4A$&U1La?YhTQy=%(P0}8ty*3w+)n5Jzf1=);T3K0RZ=$$lU+{ diff --git a/assets/resources/textures/legacy/gui_legacy.png b/assets/resources/textures/legacy/gui_legacy.png index 9073ab28638482c21e4537a9bed4c4296f211670..e240fa4f36436f7dca223a3bc3f000e71de138f6 100644 GIT binary patch literal 15924 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 W{}X1GW?!-ifR&|i+@r5@q-R diff --git a/assets/resources/textures/legacy/items_legacy.png b/assets/resources/textures/legacy/items_legacy.png index d0967c10596d78116c5b7a24ced720f74dac6918..685f9719bb41934e11ce788a14314c6aaf66cd31 100644 GIT binary patch literal 36315 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 literal 19214 zcmaI81z1$w*ET*9lG3Gg3`hurfi#Mgf*_I-!_d;w3_WzGloBe464K2GqqLMtcY{a| zf;9gefn0)tE1mc< zC~2!|dI7%p+B|sh#Kznl0=b^(mnfssa*w6WM9WT5fYgJ^x${YuP(+mYBl>8>+bVhk zcUb)&vRAix_=V$w?7n=7Zz~Lrt}LM_3F0`oG{3x@_lpa9Cc29m3S^4M}7oy6f zw=^2G%5*xpzMN|nUy;$31_kBAGKXXjkPgsZ_gCBz<|HIMobpOnEVU7wkBXF{BI!0d zq)%Gn4A z34Yor6$>2G__^kA!-e3F6F%dJ!{cduVb8#~e8x9r>j^XATGcHi`w%)sw0B1DbL8;t#K444iMbCsu$ArNm~2qZ8B z0yzRjfxjRScQ9eU5fF%EIt0S_BC|nL8r-;SrmCy}Imi8b^Z7$EC?R>F^2`+ip=ick zm&6IRc)-+t@z&ONdur;*@xsN)%EsQ3!wvbulH+2o#be)VJu6}1BtKc9lL*=wXZb*M zjsI`+J@T-zX|#$+`Jk=l^tXJKX1mADVFji^rd~n1PzNQ_qmMcR8-!7VV_W633vqPD4|20Wr`bY(} z^xUnp$G+FJuT-~X)CBu63J2Z^s`UAST&PiASbTBk$6v$oyU%p~&`^()bZ-#)hGN>9 z#qwUJ)`a~u(*I4d_om#!e$7|0Cn023AaIM|=gif`-7g4YZ?Tr=Vy~avHrLvJd_@L0z;FG-g&PO(jV0GMB?UqV?U<1J(Ve4Wwm&;%~{B^iQfvJ`s9b6`I^0v z;myrezAwO@!Ij1qb0q4tke?#Q&}uf|)N!(sEAeK`(v{tnZv3^f`)l`|D*d3B87iE& z#FzHpHNwV2XY<5pLmwcF*2sn4XBIu6+kDzQFa_VAsBZChH3|949tsalKZB5KaX|bg zBR@ePN>UFM?rVFEZ)Eux(Yv3We{ixCY*2jq(-AI6Ln?Y-mu@RfyOr#nMN-7w)_XhG zY$uYu?xSa8RR)MT4P74?-VLxez=znc1!Wld4>Gmmn3v)rFszRRw%u6_48 z2uyap&}=K%%#2$vC^V*bGyZ0X#(3XONr9SFmz(QBqt*Gp*ehX z^qzGyzFsr?2lURu70&r6{J6@9746HI@4Y4|4~r{H7Dsb(+IKRS#Iq||B+us4?+LAr zTvI)&t~s4@q$K^Coj~<6Buw`(E#tckVReSVAwF}JPr`m^bX3$6ZEcH2&4t%@I}Vn6 zv(8M%9~Ku2by*a)j(d5_Pk#Gbx@gV(;}f%jo3xl16_@1n$OJQ&q;QR9t)D;Ke|s0( z@~Jj1P~B|ay{%uwspaSmM=>R7kSWvr@XeIsyH6^n15MLwDYT~VY25Zla|TWOLSpZp zwVP(&wYuXxJ0HJ3zn^%p73S4LydD=V!YfbD1mQNHX@>b}Wb9M!YVY`V)?x<*3h50L zt3jhmm1DgeSUVDX%b!%g=7rOiLQ7={n~vyKWDg-7*kS$UXFp5tG)<;Ni+C>0AGq$8 z<(b%p&$R8o;Si@CZJInAO`Dk6uQbU#CXV|oO^uB;=b9t7Rndv z>;Wz10Vh}5O6`@tkgc(JA(0XaH*ejVQ!|>rG<}B)_UuVTr-e<|?ng8Ig!Bl)$jBGG zrK7#&o#IKRN+~11QTV+dX_A-T76l!7`({H?Zi| z#S!7_5lZ*(S1Fpw!=Y)F@F=0u^OL=&A)VThOIQB1id=2#WOos~CO1v>LrPlIY_~UI zX)mYw8WjyKOQ5rVhuTS50H?pV9b4a4dL&t?bX>F@EvKH@z~7g1EtEv_StF7-JqpoG zWQb1K2;N1Q0tG_xZRx!sG(*-f3f{zuqQaPo} zuWBPx9K0{L3I2RxwxD$#o)|VyZ-eRc)zZ%Jb8Mg1go}&Lc}!;h3D}g9sT!dCGSh-^laOQ*Pni9X5QK&b@zc%EjFL!t=^-*gjlG~O z^rQ0`3;T!65k*Rf3bY#y?R*lqs#WO9n7w!DF{lCgJ&2nyBWE75@90jwp z%ine2K?OMNKc6O*uwdy56u6Ovu|W2&PmJ70RNN*deaA|`+imB&yG((Xyp)oWVMCoR zB=XEm64^zQTvS>}EELfB=>XdD*X3kKHB7|n0KUQ@f;^mieC-w9p`{)TPOJX>k1FW( z+nWOBfF{k?Zk>$_sHya*!%s)1o_{MkZ(s&pEV{3s{&j%XKzFDuG-85oAq!}d1q*4J zbG}B#YJ4e~AD8+@=A(?XDJnA$@V}<)syqKR($l$S8~U;dO%h-tPFsP7v(QGw?><#S zt_qYLCUYmcY<*U#{|oQldXkbR0Mmi%rC=C%cnwv9r`6jw$R&4#)&eXse{b?erx z8}r|KdK6StBD&n?lRUYL9smsn1;2hB^iv03fgb#=$_Jz7tN=@M+0S_Cy)MG`fBqWc zgc%P`Dc|u%87HNkbZ`QdsiqFJRYxAYzfQsk*J!PmlZ(PFEcP08R0Ej=*pUzRp!w6Q zcg?KfQh(H&H5r@S(MX%Ql^=ba_skJnU3sHUcYQvk@UXjFk-&x5M=N@1A6zRa&{HFuv>j!>Oes-Azk zv{;P&se_O=E5wA9jmIOWlNy9e3rULwurzoQ&E~wq=v>2bk!;L_|@4kvCR)AODSE1`+%^kQu8?=rXtlk6)T3_HCs6*I3E$PjLUX!$uuGLs^ziQ+((WP5XGe$$TiwW&*>3#5 z4VQe8vv9wh!E%u)%x59tsV~8Gpx9+Tk2^MTie-s@tXH5+`+P0ocR*G!Vmf`Ol`c&{ zgfn50LdIG4?ia4oJyXq8>$CRy@n#%aVA+O<`bIz% znZjUhf?g+sfev8 zYq?!=3U=9bOz6kKx)!3)Nn6}>v@lQGlRJ62wr%ZU7w&V`UIRn4t3Ns{i7XfUtwyevE@E(+Usyp zdU>8!)5vN1@S6YV!{VANkJZ)T0rmVasYnvk*h4kq9(6Nc z{LZc}J2gb9a3*n9E7mF=55j#!>DiLeszgu|b}Mq{3I`uw=?_tuj@gI5TbNCHtwcNS zavA2IKZ<&{s75E(p0dB>DoEdadE+3qfZwqFQr_^+*OW#;eAeFf4U&d{wD5D5unZ>=T-1~-)MdWw>f>K%^;Cu#}Cjpj8N zHfc;|=E(>xFtR=dbTwzrnfxNvc9LcFj0$cy=(+I>AB31A78e(rZMp4q@)HuMTHD$r zHiiS7H{KXHQTe%h$dzftn*P4euJ7Khn%6+M|9jm(q0RiRMon|`hHt~lA$weACVe`8 z8RG~=;Y*Bm!7l}9E6-vcZK8C%x|v7!4!*oPyq_RnSF^9M@SC=NNu7Ye4qAv;Dzcs% zHnn>an2M%yt zkGE+ufS{P*BQ4yk}u;EjmR|Pxn}?KZga`rdM_eaXa&+@%yEs zS7a;whVTG8M`49Rmn%woIg}ZdX_1FRN0{kpae83mclO&0YRL9SM|0Z+g!F6(qateKc-<>5FJ_l?y4;o_&~3#*aP#9CX%%scN`0X8!mj__a!<|&;fRWtGj zkd1_p@W=Nq)mVW~Y|K9QnoKe%o5k7vH8rWfb$1I6adCFrA^Prx_=;-axIz?{WA8K9M_x=)ot5 z#UX&1;2t!`19|EU$WxoAe9;(h`*qa)Mk3SioA(nGd4+59{b!d}ERm}`%a4E&YiGM= zmzXXER=$WHjh0Bli)RpufqK^!AsXskQskb2CtU?P>=Uci!6nn!#Kmto#<@y@f}V#*BTm2wKPHN_bLK(0g!`x&8HuJsow~cbdoP`0u`bbd7Wr&h zgE}VuO-;lkB+ef(3iSKGi%QMD1Q8~Lx(__Qn-Q;rykqknve~JsvRYBB=A0$vNueCi z=1v9VIXv{|KNXt)%`$WKGu!6eusfj+($D)jKE>9v1&;E{^HUKEB&&o=tM^zLTDlls z)6;`(i++rn8gZ*rH2QmoHI5L3&LQ%`co*(D$g=gd=_qRRj}VsIWa zmeNd3I|>(4Rcoq95aN+=A>@_w7`Eb69mr_4K&}?vFflRd9MVs|eC2!I{oqI4s>JKR ze&jMZv&wi6nle7+6XA>y`||gl$s;+pxUCr6$B`Bpp~i&166Rken5e&-ir(ImklFQs zbGw2j2-7MVqnRo^8)|lJ;N<~qbV}NRZzuL?fF9TrH?TCB0dE$EZeCvg{nNanbv^Fp zs&KRwU!LG$L((l&7foey8dX|^Q7B2GjuITplrAK^N2geUzV@C$idaph`0@5e8O3+>;8K3X1_I6&QM9`whnaF z$j=ITz^=K9lI3Y1T6?TSZ{Ht;>u#b^eDo}hFQ_l z;QDnK)|NWGQcfBv>34Knp=6lsb5pfB5yjTHWuqUve;wY8Uvs{?QPpr(SC-RVrZ7|c z-ri8(nW-={Jr_$68dse^s7tUgO7^(9mOaMW&#&G?HF7p*;x+zm)lLl$d?0f^ax<+y z6Y?P97ii4xr|=I0msMltlyC#nZsmjyL;8XrAJyNaKq!XDjffm-F^ zRaMotl}sc-jy+tj42Dv@#dMZFLalBVVO?}n#X;4Y%MuF|Gx?_VCAp?Mb1SnG_YB1+ePsaJBV zB7on;&ydw>;k?SD`-I9NN|{eI3k^oT2qnAl1PY}E1Yyq%rQKNj;PBI38Sxv^Aep{tPc@^iPqD!c_s>V4pidBY&)zc=RVJq! zgci&v)u-j8@r#JaiF7zgc}-oWjzcAyr1&9rX!#_y5oVJ9C*l$z%(oeEyY29bVy~&>hb|wN6taHcjP$9vSp9dCk8H?%^b~**7}Rre7I8VL1txT^=c?*N-wnVCgJ2x#9`=C zpcGrd{$2+KnsS#f3~|<)Aefr&nDMnIu@(Z0J3SSB$^I-3%iZm~z7>C;f$2Or+2oc9 z)Z2N3V?&~OG9^tglAez4p1S4I(j&7=p3-;{DY&vWWddB;`$uXigDZ_Wn1a*j7q;i} zFBxQ)hxOuR4<^WQ&F->)`g$0z`}U;M#do{*>Kjbw+UE;1U09`!8Wa7JMWRNZD#XbN zn>xfSmWx^AX@x>nKbC4Vc(Ccbz^!rB)bHqY#D;X?Y$i!@)wXEncr)a~zR1@RX!ncF zUt|aS2PWGaJB-e@=UfojBQooS!Lvj0YB_rF3|gp8@%oKSGDv$z=h5%jXcnaV)n%y_iaT(l#;F9~a89Nrk>t*vc1P^SwBxtAGbDR)?+LPJ9Iaiie7 z{zdy?XjS?$N7*(5tq>UId)k*&Ndg6jv=3MahN~W$M`P4COhR_qPp_`Xc~j5$9$07k zdD8a1wEvpnDK@uzSMO3F7$jb%1e#_g-g0hY!Ek3|r+M~7+0glD!&(SW3Ji?J*Ou$d z(*jDUj{@s3Y=b;NhoDR5ouwJ|5k`rNK5eucVGWX0jP{~Q8qk}P9eiFf#NXf858 z5q}o6+fg&$eFjRFY>kRJiQZ8)w1HskliyB}H4?+WL{p_91hcKoxDMD{w4z(s(@V>HGZZNcn`f;8@DQlUH)= z=>ifuUSP4xrwKZkzNnRV^*k+H)Si<_el3-ZyYpG@P`R&J;LDylawapUpl>jOnIRAv1pP%PwYT|yEUFr|G z9;iTne}ApQi>6BeMBm|sIV*BZ=>)s|73@B|oRFM6QioYDnb6niyBnC9nTf~E$HzB9 zqQ=MBNcKZFb@#$E*tzd(ydDSB4ZHYyu5*OZRdjDJ{Mc91Yij8C+PtXrbf__&U^(4tO36t_4hZh|xHeTRrhIv5UR)u^2R|2Icjf3LBm`j(Qd6@qZhzhT$4H8K#b*#ME~FRTwOa6%C2z4| zx;!aIbrJL9ksf#rP|7+eWsR>2F^nfKDB4){3wIPZl_rZR_J?Ke;pOCHlQlrsyiW!& z30MOF1_2?FGTL{dS_)l!|44{!2PX!XD%XzypMXCz)9i`RMBWuZ9)DX{(^~bdht12*wU0tjln8jc1b&J}mPE!?atM%xTm%CSZ`95F@ zEp1%}1a8;c4AGZX&E-n{*#43AM1-}*^3*#|ZinE=Z7pn(Un}9Pl~yHSo@6(~kGy5O zAz^tnH|wF5ud5%oUGi()x0>Nw)IVz=oDO?ws;{N2DJbX|Th!rA1AagJd^~R(9Ll)i zsb=3K3^V0Gexv)dIvi`w0_C$Nv`R^<<4VjzSDc|$3sNj1w5a1< zcj?-v6Si1gecPGw3TyhZxHwXV0W{~tw{94D zZtRB-y6|P;H$0-x;9;grSjSue5mCUnEkWZ^pWs!*U0V5wy?2VsemEx-uTrIFb36f1 zG-&O}E^HEyg}O)ZfxHEbW*mif}AXg;Re0&_=G7J~s;j=WH)b!7VS>Gk301v5lHl%bJF>C5HEp=X7~0;E&U zA^O9Yg=LcE%NP1nbHKE>R9K$&bo|3*-(nZJq967Ck}9X3hl~3Mv7YuACR92#cTa~P zgK%q9C|PgE{bmyR?@mEI9mX;Z?~0W5{OKbz(It8ad0BY_+Yod})nLR@Xw@JwlEkKf z8cXx@Dfi;g^=-Oq?gwnKlD_e4c!A)D_wJ{lgb~9=PjjoMNk~B+-bHBM`!IGY7p!Cx znGK%^;IMLajcf;_RAUXC3#ieWv;67xLgh-V0u6gQ$j{Y2ca!qftF?_-+`k7k2 z+7So6EzeMi$s@|BRRSJWL72q%7d{vy~P`_kW&-k5NKK2m}w`oy9dWN;2Yc+~ETD7jYn z5oWL>_S#geQtW1pU-5oqLHv*`Y_B{#oJd+)+MZoG?1`NrqD03WA`j^3cJ z--WLC>^rNd5X;NUSH&N)CuE)oY~d$2=S{T_(C+&A!e&;U#_Q!OdFK8LfH;LkN_o7H z(6^eojdQHC4%tK|5k(#CY`@COi2yXF1~YGI`S7}+>P?@ofGO5|LKO>~rtR(Rdqzeq zxYN89N-#e+hw6O7jy_)&$6dtEks?`ObeQw~Y5gDmw{)v!$T>@ZJ*JvA!#i=>inY3L zN<33RHfQK@KcYKe(Cr}pRUEF2gycSm9svKlcjShEfIRTUffNUqxcHjKJvoOe9}^?H z=+hGP2l7|*(Th>4O>e>z(u|x*B0(T11MD!AW zQ}H0x_@bgpF&aJjl2H%_)(;O%6FEkrrVaPNqXq5&Mq$a452kqu6v-~dt0UfFD`?X{ zqSpy{1w_C;M8|=NO#>5)cEg>$w79buQ0c1#`PnZtaSr%D-*~&D!HHUGjyIslTBVmu zFow$+lm5QNO+tC)6z%T8RIAnoQDkE-@ z!f)WcmXmlYg%Ba&@y=bZ`?XQAko)Kn%c3G!=*fD|5b|&rlN1AYdU|@!Tek*0&_#d< z&<&J_dt^FM0VXYlV7Zv`+q0sOk4>4*#!GFog23t*y-TDQE@^zu6gKw{R}{1|VFu8_ z5$5c60WI7}sC>mPYinehu{#$^#R3%kyL(JHPe{bG9kci_LUl3!wc|Xq0#MIE5uAD_MCJj*6en67d5^$8yOrsvJ~#; zZt7cn1gyg#()qARD>O7TUCi<(P#`=91YRueUKR^*;nAj!+{7h@OGM9dQ>c_Sy=Q3SN%NBuQZ;`+J?v9T;cXlv zN!drVyxy5BH900Nd8lJ`T7l7)AVEncf2`cw#oh1F_@JeO>`EC;5#H+K_gfc`29866 z(Wjh?6I%$Thy6%C(rY-h*S!D-=8CZJ(csY0;U!K!YxZ=@q*8l7Xt(Y%(zz;tZv?-i?rjdGhduMhk*_4S`SvdeJ*F+WnO@v%>NB~yhkxw`O*xFe-Vx{UZ>S*>oRPPMG- z_+V4Ar`J&S7$e7Gt#$G#)#%etj!G8WWMM8Y`=}uUfRgzRf8`1ycdmmKc#N_AMA=jF z)tnswjblv7Z&{c%)(rQBXs5_QKtx0toNE6)@n4oA{Sf3@{YMz1t`6gpzJ*5ueaqB- zh)oqWc(~))*RS%KvVP-Su(NP*gb>lEOC@E)Yuwld$ zC=DsIg+I`xe0Q3MfU_MeMpff!b@`h(+%Gz{HsL^Y43NwiQT_&~0ryyVma>YkMabLS zB#11h1UShLQ9VqQ|Lvjd(XU5vY0`)4eX?Z+YxtE#+oMFl#>$ozHBk0spfA4MKe2tS zl=2b*4$}Xcovcr)u>GGfHJRV|u26Q*ddYaf0`b?%e^B+@qDa<;Lozb5x1=%WbDdpl z_W>zvv8)kSm8A@yE}`uCXBYlO)eGL6S}Ox%L1+I3q)aZe6HO46xq9E?dtoO&&WtsJ z{N(h_y$z5pa-sKueNaQBai{p(A5;NevdK)!KZCm%w$>64yPq3Wge{Z@tVsP&d#EuT zuYYE8RA-84Sq+Z+vclnC{rJl1jAAaujLDC0PW7gQZuI(=!=Bw&1ZQ14gb!-HGd|xW zcfGNPs!!^_akn^7{U#QB_6hExA1*}i*~%?}>1ZO|0#&bK&#g#AFje z`cd#S?0kEJK(yG}$B;U5<<#)A{RGjn{VBtyNx3sSyBtLej9erBts~i!h;(*{3)W5n z(c)dx0qT{p{$U%g{44<`5?7lTc{o|#y^1wMe^W=8orcK?(PvVnC#3hYHgbrV^Oc63 zGqzDeBo3=NV9(Umm)@=7)6TmpJKA>$Kca7SGf9D zmL#?ZU(!YNJXH6X<>cg~vYDCQnLNB={_6f>ZSa=cY_JDqkV<^449kJ%%;{w=5L2N* zyS25zZq-)e2bgtIMYOuD&SNT1PdRTkAzg|5g`L?I;8)AqQO$!#4O$qo!|3@isjQN0*CHY?!1w_wK2_s0dha<3h;Xv}!6lT(!7?b~#3-@au)oqB9%<<~i8y|@dmT1AA6 z*gmX{zUc#M<0Xyy)WC<10w*9j&A56bRy1f40%-J=JGQ`ubG}k9h`N z&tD=WCuebZ2zve&cqhMZUqL!rhPvN?pyu6}g_hAXPhQToKAvdIi%*b{@$; z*qD{NVKZ4>(6zN1KnWsHrd=|pTcXIVY1!-7BWm(Io!FC0+2+k3t#$UqiQlZ`_K35y z#(qJeB7mSt;4d#_!-iOl)AVH0n+eBThp#XhUY3|^s>1|*w-0+Jlo5)RU8y~2KZVdY zrzT&){0k)#T2=Yu1NkaipPzA$^y0h(l;I4XYAN~N9IFch; z=3rPWA14`B0VL{lW+IP^4rWOKLfnh{#_Z`pDk0GP;anym7d!pgk3)G$s-qg*rlcSb zVM!sH@?c*4==*q9ty2>>5>UhEpqW5|B6s7{Od#~zpzXF1XwiKA^JN$D%SwG>r0O_J z0?z?~aT{@9W=snQiF6GNNC7zx0*OSqA)%oXkMG?J9Qc)Y$NC^LJs6sxQ+69o5sH+5%O8BB|V`L1JYdo1(L-iXNq27M2Y8W8eyh+&mtFz<+K zdv(VS!3S%BA($>Nt7pb_|9u>J33d(0#d%u?F|V@NN=92PeP>T8FMpaC;~aA(Fi~oh zu|C*OQ@Y@FsvH}ATu1KLot{6DM@xQ{X_T^QzQix9&iVTJk?R?^Yblp8nwFrJs8(`x86Njs5Pez~+4ezvE&} z^<~Qdy0+ZB=|EO-=oioQtvHt#>2_kv)FE}BW z81Yz+Fcp=|kZqVDKX#Xyu!9|MwJBO&^_fK}cw7uG}q6JTq*CvK+*wdvG zOis4VK4vW3eKUXEV!}6OBVgSAeZ(&}JXYVEYSSJF*&_{!*zcoHL)uf{4W!dWW;UR^N zzH@DO!rBCV#KX2@zYcM2({~Q?0A%RsTczpaW`91Mk-Je3{eXVBaRXk7y+)@W1=ayj z)H`_uwNLLi!57;6z73Xd2GU8-Fv+FqDI@HCZl#9-P1?C1z&YlL`q5k?$_|29Ji4laW2p z*9VyoeObqd&DPalllAe6a5E#-PQY6Um91%&C0!ft>e%BSk@|y*G*+ojkteqM z%e_&4oVZWbm=r{2`YDn*^p0~bhX=HGNrcSK^B6Tc<u_E zwYOS7ynhWwDUF=1QqkDSa8dRieaL-w?nWAeKHI|u*WfVGVQ5}TW+u64J{RRYnGNu~ z?#D!~g1BAXAPV{8{Jot8Jq_)TE5EyC5R$@qDPWs6;N!^~#4Cr|)hFndIO*L;^TD_o zsn~%%$s+4JiXyW)tW_I!Y);VartlWd8v>)b!T8g5SZ?a;A(1@1bo~0D((o&B($(VF zuO*4q4Te&-$!i4dxgcW$EzHvb1HZ0lsH^vBJpyV^)&kIHaS_K4O5gwnV3%+R;i7cJ zp1a7qU3;&mpu8OQ#N4x8r!oJbbx#(*urP(KMH7c8wXH=-wugb|9@ioHRSLcRoj)Ph zvg4yoZ4Z4BAeQ#M>pn3bNOCpt&#;aZ5~ZZ1EQZUB#HefcE&hsQY2AYLeNR>6afL!^u<;Uf*i;W0={~9hkHUN}&>|TAB&hU3otlD%_UARgWFiHf z%uSq}faPJq-T*S62@(tO@U+(84QxpMCeYPSH&tRtpDHPsZTP182?KJ}2zbeG#GU>% zl<8E1nHGG$DIq-z-Fme24P=Lu0%!adP#^M642mSOAW;yeV^o15CA%eLMial`p`nB7 z1*78hq)c3rmw(H?;nd|E6PmK_qllc#7_5!m3l6}LIn*rNWV#H%lg zo{E}gA%F?cK>|8}J=2aP5hWxf%>qf^g2Jk^DH$r zH3X4)@_@PX=0!lFh^LG>=E+HWM6dxWawRAzC?PX5W^vJC^3IvCg|#&|sOm6LqX^m& zlD>YulZI22`w9f{GBx#GRTUjh9Aq`A8nLP$3msiZxW5-M=s!QtpZ&~-oC$`Z(}%;^ zDk>_3Xx7H7i}=e<+}EBM7(~sKNJO^VD1(or7eIU*?CUBEn4iO%1B^3AYV@GAy?l z;4L<8WZ>uLKe?dpdb26jWVu77+o1tAhB9`cN1>az$00FG-D&0<w?7v zCL8gR+uqZT0(|k<8Oq0ZafICokcA-`pJu8n%e;>hl3-<|A3fMvpk`%t82h| zXS8MHQ@RY+TC~&{_h4nRyZDqNP&S$k_=X^?-$|pjxYxq;(8#vkh~_(`7*=%Y4u9e6 z7Q1i#meTv%{gTM~%BjLm9C=6!2=~05Apk4i*tD-5^}uzS4YCS3kY6D@8ccz|w&T>3rA-5a zFC;ik@5YOw*oq+33P(Oh^y91RAGyi54wsE22bp}h~Nk0X}# zd+2)L3QzWsC4mJbXli+;%9*=S*I^&3n>~ z&oc$e*r!rd+RZ7?pN~Ym0)k7wyB_}xs=>suxKeg}xc<)B(aCdo5``nAN>%Z?`!i!$ z*JxPZk&*}Eru#kdyA~ZJ{u?Fzi=Em{K!D?LXeM&Yp44H$cp_FrF6WLc(Y$U`{39dJ zn}uWU;-94mK6r+6fRD?&>+YsZ?KPBY+5QJ}M42+~->^IobKQZl^dUDf2vcN}2FH)T zBt%F>0_C|b>Qyfn1xc=;T(!u0*Y*+GdboJvTByi0c{`)iPiKOLw0*5<(69g`x8MzwnZ3HHK+9B|!hGuB}c;N0zzX{Fg4^=#1 ze_(_jXD7%e6qp9}IC);4SrF5=+Jknh#-KuLR^tv*2Ur%N1gUpqJBq(5?4^LeH&CBN zi%2MX8aI+!A4#hrS<^k4r_yf0fawDN;GCok`1uuR@MG#D;IRfVb^ zd#aJChKZ9(+z=Ye?9aM?f_stWD~&w!bRH+s4xq`Vm|No`Bb`BP5w+?#R6{D^!W;rJ z=_0$FJ&`y9t@x22f=rbG_p;YmM;lD-(_hpc%M7hd$6o@7`EcA=dbN2?FuL6;R`KgH z0gt^pX0*6Gzx9AU1n_RdM;Pz8tw_Waq(-ov}R!4?8igE?UmRB!F% zsT+9d%q!cm7r8NQvSou$w2U4kh0lK3qcj5}^LlX_%z%pgruuIba8I_3Xhbez`2MF} zW91z$l`|?W1n%t+G>H5@MnUb>XPJR>5BKpyKw>x#AAFbmSp6QGbjxSO-iyeq1tbh$ z{XoJU*ty>9=^txC(5>bYSZWn#x}*!J1ESTOTsmehFnsXjJ&N#2p7^qc=B6BRYts z+mr`8Y-CZG$LAqaSV55=;F{sXc7FTgQI)DGAH+$zq*<>3G8y8Yh| zrTV>)Fg?ivK5;kkIn&1_&2&>^WH|rNVv3GQ5X5kF5r7hIYikqt*%t!zOd`lkMP$2v zP@h}uU|*Ol&>F3@ZzVwSZyzNs$U+39d7y8UcgHD{+M@8uv85de3X&EB3 zP7cg74_4$%`O0sZ_y$on_CH4Y9UiWT@1Gqr z@fqLC)5wv{uLJKZ{`jE5KIwnFA&+R!p#8w9!Pp(3V7sn>n+UvHG27cO7FSjPEF_wn zn`6M?f1cL1XRXj~Tq2L3p`7pbzVQ0#vFh`g;eIY$(yX(nD1&pXR*Apc@kVX#MJFKH z1@qLLZ+?D^-FYWKj`NPkJAPbF0canZAEla-E+DL9R#>MU89QK9^BAxo!tOB+iYMB| z5jmt3z&s}F88RzA*1%Db>W+f2!JRV3Fw>Gb*|H-J5Gw>p677Oz{o53QPTR5`+~=d- z-TDJ^vi-LL&+)_wXUQo}R-oeF7H1&-t)5<#TW2fv?5u~15IMZM2$Ai$7VNDG^X=Bu zE`2zRD1gZ`&FXZ<7=EUlDefE?d;nHq8qc-}IyPWI26Eo!dA&vBfF|H<#XyUu`3*V7 z#we-t9CAXbn6vUQ>5v@r0U`_$$Dd_hKldDNBRy-eJcMBSA;R;w)^DZdH2BkrZJGq_ zo$H6_ga))O1Y{F5&(*4~HNQYgq_0uYEPxC(|5&p1l%Fg{t^B@mp3d8icq~l^m$|Zk z*^({_zJ!QV&XPB^kod;=d6^C9CkJeAkfj}V9N?AC8KPt5q+Fyp=Nl4U=AMr%5%=A>LYFgv zau&RtI}^jvEj)R$!Z+J|z$e=wTYMT2Z@Pb^$#51P?)0VBi`iuM4!PQMRO9hAhBJjt zFQ6EWgS)z)Z!&9*P}IIyu)=@q?C{+I>j&EuMcl3uZbrH$)gM2r6THGa62Ele{)F-z z^%A>KrDZPe<+8LwSF)SJg6kI5jHM>;8!<#0J7Mak{SQCYYn9#cB*le2yVmrW2`_R6 zLD(0UsTe~KhJILTfXX`UFhNxkIsXxP{iMz+bU}Y`6(7^Q5BWg(hG*-U@|mUR_U`e) z{;WES_t{tu%Rw7ACiHJ$wDNY&)C5ba3G>~nMSQL1yT!tkm*A?({$>IPHQBYVY_~> z_IR_D>d7U7&~UZ?z|dAcNl zQT9?FYs*o%H7<@w#}sqmZz|rfM9AXB%ba{1YU$RHB-X9X5r(PL z@o{XZrg_83SQ&b-0GGJvgbf_>M8py+C7<#;6@e z9O3i7VD5iYgq1iKISjYJBs_t4@Ne|+f7z>xm?BmcFZn}9dqCWKjV3F2|Db<}T^=oX!M zk5n5|^IIm?TOZ_!W6n*%sxLA^J&qIV_{nDyoYfgpcS59yDZ$dv(AEO$=IQ2S{iw)% zSvwj)1As(8juNfe&ockVoT;*h*FrjZTl2oa$QRxo+SJU046$bjm%Sx=HxWrI^)~$S zf^E`YK3iDMU7iR`XY|K=!7rGD!h48~Jx z1cDc9BXp7xs#yw9@HR;a7H}TFn9~rOl5sPL6vhtRUM=E*m9N$LKYrVt8}9+$1rjLr zk@8TQsUzs*qQ$ZR}c}_+_!DB(of5KJnnTZfJxlZt`Pl}Ncor^Laim1JqB|1kEa51~! z;#Xk$W&S%+IHYc|lSb;GpIcnpAnd_=OA2t};?kC&sJ&R#vWOxlBfQOx(J{IwpxNj; zJQ|-l&nyu2J0qhNn*SDHil-~W?1;T0A;IA6(Ajl=W!mpL4ks0osX4k+DU&ZvHP5&= zb#Mt^q_h^LU8()|6=d+B&^*n*a$AzC@%?M-3g(|ed87ZyN!u4At$Y6IMVm&Jq-7Y+ zBki)&2EbD|H}{97+wGum#e00$O=cRYSiJ7~`fdFj7Zfvvuo*JNj)q)9YMp@6>`AwDIX%hV7%6i+4q1<4^@OhE<2iKP-&Vv!-c% zvYe{+2jAm5{k?C3IuSKzH&}RT1gr(3$QaXsYH{#67cUuF^L%$#|F7*O1_ysOVTz)#w<7aTup7AWMuCfM@WwQo0d%@9UprI6>f; z6HrFK7=QX>xS3F4-9SL$pBc`@GZ!HNX}vZ7a9X7U^h^Ob8u9<6asMM6fZQVyn(d2g z-`|QUcPapN5Fua(lSu z=)q8JS6{zHy-oQFmXRCDxWt$CY*b?EoOsu?Ee+}CW58~PRM&biUf zS+F489TYK+28`upCEeYXB{6aB#(j3q;9~eYs~XEApMb3g!J!Y_5PBnZ^5={r1;GZe z2m#I=_BpO>ezWx`SV?@L{0!^bxY*j=v4Y~SuN8ijx$gk%;Vx&Id|Nha(Zs7af5q;# ztB#duE3CBJFzdzVRax>9pz&DXA~;}KyScY1R|J^Ga#B*2wZUNk8d%uOzlN(eYSG+N)z4*}Q$iB}V;-}Q diff --git a/assets/resources/textures/legacy/tiles_legacy.png b/assets/resources/textures/legacy/tiles_legacy.png index 41f2f40294970ac92d8fbe7d433c97c9e0ae5eb8..02c6f66112b997d8741f44f1548ca1a0733e084a 100644 GIT binary patch literal 52141 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

g%PSTW&SCEx&KB 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 M(tK3%&?NBx0P(^=qyPW_ literal 21036 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 diff --git a/assets/resources/textures/tiles.png b/assets/resources/textures/tiles.png index 55b6046159a91bc3a5390d1faaeeaf06bce6528e..fb82dca7d40108739016171cead160dcb8cc0dad 100644 GIT binary patch literal 86463 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

EGCw&O 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 literal 42819 zcmbq)c|26_`}cij82g%Cp*>l%M6!$|Wp5*dNwzHElaOr=DrIevC|e6DWM8rlipm<< zWv!5HWE+f`=bq2^`}_U%{PDbA&v(U@9VzS_w_#a%}ous*u~fZ09GXgjVP00bTY0KE;sCOm~s18`FjfIkEP zG?D-i_D-ohs|hdQ9E=Q30y^U-qvp+Hc!tgUwABp&xa%0dh&uE6eemDGnUlH~0tV-| zZ(X|JQbvpI+o~Grj@bQJows}UsZaZw_*D0NmTK2M$3US9XxVY}yl#VF=MKV-CoUaC&U+AS4L0pH$}&OccS4m312=0#nW zl$^7v6d2dCbu9FnIrnpuk{!A*(N^9oZ0);b_ojQMI;z@x`ms4Vz9y=AU&t>$`|m^v zgtqi`uUWfURIspps3Ft`BENc6+j{A$d;^)eXA8z{{od{}vzO8C6rX%=c zqT!pI{7!|~^uawkPu~(H+1aBKIWA5vN`A8!a+B&D1Y?vyfm87#SNXvy;h3iB@NeF2 zes|os=|mn+@yX+D%X5&ffvfKbM==)vm2cRvdeaL8GIi z&lFn*aw*f`=2|K8b`DSugrlyT)Ek*SI`kB^z_ldebyFNFO6wW476ppSi(Q$~jx^Jd z&9V9Nk%l3!nmco)?wONwK5K)e{5xHl(L2T3_>~lJvV#pDa`S_)$9OJ}N?85(x2pUA z3ZQLFod+~Yp`xJ{7KySVOq%a^MHp<&`|O!>G6AH9%e(~mSA?}gAkv48JkW z)3vjc`1|)SCy6A&XKe@;*fGeeZX!10R|;ZnNmN0W+}@<6l4x}b%# zdV7kD6|N3^W? zK)^DwWK?4Ghgc-ES9QL%B2G-!O`a>N>$!KAPqX4CbZBPy@i!+vf7I+^@zN4#m zKop>QUu31lGnl~Ssh!{R|Jv`m{y=bgZGx~;AQ?54K6}^+8|b%77vME!<`M9*r*7~l z=>cUoj+gL$pm-j0;~dT5F3K}?(&fvXZLw`V$ml51?h-;jh=TL=*oggE3fQ|s?~u-O z)G3=;cVGHw&gYhC8vX0u+EeRvceik33_}19l51IkLNz)33@agD%fjwDAE>CPAk47} zb576SMru;`0Vs|>P6UhN#KTSR>h6A+lyq-y&g18=UoV2z9V4F9u>#robhzVTSeu#R zq~48kh8{>s9X~!a7IfO!_~XQRy&3!RnUw9jqkxHfI4s%O1Q<9}tnjUBIGT>-Ne3@$-P*IVEHz4q+|0 zs;a6RK<#e?O#Mfe{HEG>4S%@7()_i>2OhG4OGoi+z*rX*(@esGrKKg2;dK*+EGU$K zlLiKRZ=K=%lhY!I;BNy70HefyK;R`A1O{qA$v9o3FJ6z;`{$n`CgjVPFI|R2==Q#j zNoi;d0wAPd7X!t1?TP)-T;no&`nF%0Bh3&fx_;hg95WI%Cdm&y`sK2Tsra`ynK@^7 z#MWzdAG!Wf_X~Ak(*DM8`h?dg$*7~wkf9G9hk>i-Qa8WWa1h~K&ptgc76n4wgPi~= zG;OU5=W5D@<|!c)u`FR+>s(b@0ley4)4Q;#EMd*@S{I^$DEQvf^F?BL0MtH8M^ILz z{Q5Ao1RE?!OG~>KA8%lBc^|a;nYMs4oF{^}1(Xp@Kn|j}4&MS}5eVMF;Uy=y6c8BL z(A|CBd5yX;cN02?qVPJ($P(OoJyZJ5pFFJw0|iRA)$dBx`fEN)eZ&O_OB0{qJx`m= z^gk{rKl-xlobT(=`QS_xP^@sNL>R7i#jCC{y5rdAC}f65W#+X%0Ap?GUL3sTz(@adj?W6oy|;k}`9o=AZ< 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%0A-Ddvqa}gf9HCtRIaxI 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®uP;22 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

-FKXtQ#pwDiczuqu3xe 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 NG7^g7wW7u${{s~x?pXi; literal 32925 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 LRp~lO)3E;q#g-_7 diff --git a/src/Minicraft_Splash_Screen_3.png b/src/Minicraft_Splash_Screen_3.png index 8737a42cc12ab6f94aa23028dfce3aa3d45616f8..5e5ffe465d1287d1793a02ec197dec7883943870 100644 GIT binary patch literal 12890 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 literal 12206 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 diff --git a/src/minicraft/core/Renderer.java b/src/minicraft/core/Renderer.java index 991c808f..8f35cdf4 100644 --- a/src/minicraft/core/Renderer.java +++ b/src/minicraft/core/Renderer.java @@ -240,9 +240,9 @@ private static void renderGui() { } if (isMode("creative") || ac >= 10000) { - Font.drawCompleteBackground(" x" + "∞", screen, 184 - player.activeItem.arrAdjusted, Screen.h - 24); + Font.drawTransparentBackground(" x" + "∞", screen, 184 - player.activeItem.arrAdjusted, Screen.h - 24); } else { - Font.drawCompleteBackground(" x" + ac, screen, 184 - player.activeItem.arrAdjusted, Screen.h - 24); + Font.drawTransparentBackground(" x" + ac, screen, 184 - player.activeItem.arrAdjusted, Screen.h - 24); } // Displays the arrow icon @@ -286,7 +286,7 @@ private static void renderGui() { screen.render(xx + x * 8, yy, 3 + 21 * 32, 0, 3); } - Font.drawCompleteBackground(dura + "%", screen, 220 + player.activeItem.durAdjusted, Screen.h - 24, Color.get(1, 255 - green, green, 0)); + Font.drawTransparentBackground(dura + "%", screen, 220 + player.activeItem.durAdjusted, Screen.h - 24, Color.get(1, 255 - green, green, 0)); } // This draws the black square where the selected item would be if you were holding it diff --git a/src/minicraft/core/io/Localization.java b/src/minicraft/core/io/Localization.java index 0f609594..3903b931 100644 --- a/src/minicraft/core/io/Localization.java +++ b/src/minicraft/core/io/Localization.java @@ -187,7 +187,12 @@ private static String[] getLanguagesFromDirectoryUsingIDE() { DirectoryStream dir = Files.newDirectoryStream(folderPath); for (Path p : dir) { String filename = p.getFileName().toString(); - languages.add(filename.replace(".mcpl", "")); + String data = filename.replace(".mcpl", ""); + String lang = data.substring(0, data.indexOf('_')); + + languages.add(lang); + localizationFiles.put(lang, "/resources/localization/"+filename); + locales.put(lang, Locale.forLanguageTag(data.substring(data.indexOf('_') + 1))); } } catch (IOException | URISyntaxException e) { e.printStackTrace(); diff --git a/src/minicraft/core/io/SoundOGG.java b/src/minicraft/core/io/SoundOGG.java deleted file mode 100644 index 36704e34..00000000 --- a/src/minicraft/core/io/SoundOGG.java +++ /dev/null @@ -1,62 +0,0 @@ -package minicraft.core.io; - -import java.io.IOException; - -import org.newdawn.easyogg.OggClip; - -public class SoundOGG { - // Ogg support! ;) - - // Player - public static final SoundOGG Theme_Surface = new SoundOGG("/resources/sound/Background/Surface.OGG"); - - OggClip ogg; - - private SoundOGG(String filename) { - try { - ogg = new OggClip(filename); - } catch (IOException e) { - e.printStackTrace(); - } - } - - boolean flipMute = true; - - public void toggleSound() { - try { - if (flipMute) { - ogg.stop(); - } else { - ogg.loop(); - } - flipMute = !flipMute; - } catch (Exception e) { - e.printStackTrace(); - } - } - - public void play() { - try { - ogg.loop(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public void pause() { - try { - ogg.stop(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public void close() { - try { - ogg.stop(); - ogg.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } -} diff --git a/src/minicraft/entity/furniture/DeathChest.java b/src/minicraft/entity/furniture/DeathChest.java index dc65ed21..2b5558d0 100644 --- a/src/minicraft/entity/furniture/DeathChest.java +++ b/src/minicraft/entity/furniture/DeathChest.java @@ -93,19 +93,20 @@ public boolean use(Player player) { public void take(Player player) { } // can't grab a death chest. - @Override - public void touchedBy(Entity other) { - if (other instanceof Player) { - if (!Game.ISONLINE) { - ((Player) other).getInventory().addAll(getInventory()); - remove(); - Game.notifications.add("Death chest retrieved!"); - } else if (Game.isValidClient()) { - Game.client.touchDeathChest((Player) other, this); - remove(); - } - } - } + @Override + public void touchedBy(Entity other) { + if(other instanceof Player) { + if(!Game.ISONLINE) { + ((Player)other).getInventory().addAll(getInventory()); + remove(); + Game.notifications.add("Death chest retrieved!"); + } + else if(Game.isValidClient()) { + Game.client.touchDeathChest(this); + remove(); + } + } + } @Override protected String getUpdateString() { diff --git a/src/minicraft/entity/furniture/Furniture.java b/src/minicraft/entity/furniture/Furniture.java index 384d612d..1834af3b 100644 --- a/src/minicraft/entity/furniture/Furniture.java +++ b/src/minicraft/entity/furniture/Furniture.java @@ -128,20 +128,19 @@ public boolean interact(Player player, @Nullable Item item, Direction attackDir) return false; } - /** - * Tries to let the player push this furniture. - * - * @param player The player doing the pushing. - */ - public void tryPush(Player player) { - if (pushTime == 0) { - pushDir = player.dir; // set pushDir to the player's dir. - pushTime = multiPushTime = 10; // set pushTime to 10. - - if (Game.isConnectedClient()) - Game.client.pushFurniture(this, pushDir); - } - } + /** + * Tries to let the player push this furniture. + * @param player The player doing the pushing. + */ + public void tryPush(Player player) { + if (pushTime == 0) { + pushDir = player.dir; // Set pushDir to the player's dir. + pushTime = multiPushTime = 10; // Set pushTime to 10. + + if (Game.isConnectedClient()) + Game.client.pushFurniture(this); + } + } @Override public boolean canWool() { diff --git a/src/minicraft/entity/furniture/Tnt.java b/src/minicraft/entity/furniture/Tnt.java index 098b6ab9..d1d6648c 100644 --- a/src/minicraft/entity/furniture/Tnt.java +++ b/src/minicraft/entity/furniture/Tnt.java @@ -17,6 +17,7 @@ import minicraft.gfx.Sprite; import minicraft.item.Item; import minicraft.level.Level; +import minicraft.level.tile.Tile; import minicraft.level.tile.Tiles; public class Tnt extends Furniture implements ActionListener { @@ -29,7 +30,7 @@ public class Tnt extends Furniture implements ActionListener { private Timer explodeTimer; private Level levelSave; - private String[] explosionBlacklist = new String[] { "hard rock", "obsidian wall", "hard obsidian" }; + private final String[] explosionBlacklist = new String[] { "hard rock", "obsidian wall", "hard obsidian", "stairs up", "stairs down" }; /** * Creates a new tnt furniture. @@ -58,7 +59,9 @@ public void tick() { float dist = (float) Math.hypot(e.x - x, e.y - y); int dmg = (int) (BLAST_DAMAGE * (1 - (dist / BLAST_RADIUS))) + 1; if (e instanceof Mob) - ((Mob) e).hurt(this, dmg); + ((Mob)e).onExploded(this, dmg); + + // Ignite other bombs in range. if (e instanceof Tnt) { Tnt tnt = (Tnt) e; if (!tnt.fuseLit) { @@ -69,6 +72,18 @@ public void tick() { } } + int xt = x >> 4; + int yt = (y - 2) >> 4; + + // Get the tiles that have been exploded. + Tile[] affectedTiles = level.getAreaTiles(xt, yt, 1); + + // Call the onExplode() event. + for (int i = 0; i < affectedTiles.length; i++) { + // This assumes that range is 1. + affectedTiles[i].onExplode(level, xt + i % 3 - 1, yt + i / 3 - 1); + } + // Random explode sound switch (random.nextInt(4)) { @@ -98,9 +113,6 @@ public void tick() { } - int xt = x >> 4; - int yt = (y - 2) >> 4; - level.setAreaTiles(xt, yt, 1, Tiles.get("explode"), 0, explosionBlacklist); levelSave = level; diff --git a/src/minicraft/entity/mob/Keeper.java b/src/minicraft/entity/mob/Keeper.java index a1fa7908..91a6da8e 100644 --- a/src/minicraft/entity/mob/Keeper.java +++ b/src/minicraft/entity/mob/Keeper.java @@ -85,7 +85,7 @@ public void render(Screen screen) { String txt = ""; int w = Font.textWidth(txt) / 2; - Font.drawCompleteBackground(txt, screen, x - w, y - 45 - Font.textHeight()); + Font.drawTransparentBackground(txt, screen, x - w, y - 45 - Font.textHeight()); } public boolean canSwim() { diff --git a/src/minicraft/entity/mob/Mob.java b/src/minicraft/entity/mob/Mob.java index 25410076..1d54baf6 100644 --- a/src/minicraft/entity/mob/Mob.java +++ b/src/minicraft/entity/mob/Mob.java @@ -217,9 +217,14 @@ public void hurt(Mob mob, int damage, Direction attackDir) { // Hurt the mob, wh doHurt(damage, attackDir); // Call the method that actually performs damage, and use our provided attackDir } - public void hurt(Tnt tnt, int dmg) { - doHurt(dmg, getAttackDir(tnt, this)); - } + /** + * Executed when a TNT bomb explodes near this mob. + * @param tnt The TNT exploding. + * @param dmg The amount of damage the explosion does. + */ + public void onExploded(Tnt tnt, int dmg) { + doHurt(dmg, getAttackDir(tnt, this)); + } protected void doHurt(int damage, Direction attackDir) { // Actually hurt the mob, based on only damage and a // direction diff --git a/src/minicraft/entity/mob/MobAi.java b/src/minicraft/entity/mob/MobAi.java index 6624bf7a..93b3efbd 100644 --- a/src/minicraft/entity/mob/MobAi.java +++ b/src/minicraft/entity/mob/MobAi.java @@ -3,6 +3,7 @@ import minicraft.core.Game; import minicraft.core.io.Sound; import minicraft.entity.Direction; +import minicraft.entity.Entity; import minicraft.entity.particle.TextParticle; import minicraft.gfx.Color; import minicraft.gfx.MobSprite; @@ -62,8 +63,12 @@ public void tick() { if (lifetime > 0) { age++; if (age > lifetime) { - remove(); - return; + boolean playerClose = getLevel().entityNearPlayer((Entity) this); + + if (!playerClose) { + remove(); + return; + } } } diff --git a/src/minicraft/entity/mob/Player.java b/src/minicraft/entity/mob/Player.java index d8663599..33da4a6e 100644 --- a/src/minicraft/entity/mob/Player.java +++ b/src/minicraft/entity/mob/Player.java @@ -1280,22 +1280,39 @@ public void findStartPos(Level level, boolean setSpawn) { this.y = spawnPos.y * 16 + 8; } - /** - * Finds a location where the player can respawn in a given level. - * - * @param level The level. - * @return true - */ - public boolean respawn(Level level) { - if (!level.getTile(spawnx, spawny).maySpawn()) - findStartPos(level); // If there's no bed to spawn from, and the stored coordinates don't point to a - // grass tile, then find a new point. - - // Move the player to the spawnpoint - this.x = spawnx * 16 + 8; - this.y = spawny * 16 + 8; - return true; // Again, why the "return true"'s for methods that never return false? - } + /** + * Finds a location where the player can respawn in a given level. + * + * @param level The level. + * @return true + */ + public void respawn(Level level) { + if (!level.getTile(spawnx, spawny).maySpawn()) { + findStartPos(level); // If there's no bed to spawn from, and the stored coordinates don't point to a grass tile, then find a new point. + + int x = spawnx; + int y = spawny; + + x = (Math.random() > .5) ? -80 : 80; + y = (Math.random() > .5) ? -80 : 80; + + for (int i = 0; i < 20; i++) // Iterate through diagonal line for possible random spawn. + { + if (!level.getTile(spawnx, spawny).maySpawn()) { + x += 4 * (x / -x); + y += 4 * (-y / y); + } else { + spawnx = x; + spawny = y; + break; + } + } + + } + // Move the player to the spawnpoint + this.x = spawnx * 16 + 8; + this.y = spawny * 16 + 8; + } /** * Uses an amount of stamina to do an action. @@ -1366,8 +1383,8 @@ else if (Game.isConnectedClient()) } @Override - public void hurt(Tnt tnt, int dmg) { - super.hurt(tnt, dmg); + public void onExploded(Tnt tnt, int dmg) { + super.onExploded(tnt, dmg); payStamina(dmg * 2); } diff --git a/src/minicraft/gfx/Font.java b/src/minicraft/gfx/Font.java index d159d097..a1398467 100644 --- a/src/minicraft/gfx/Font.java +++ b/src/minicraft/gfx/Font.java @@ -81,11 +81,11 @@ public static void drawBackground(String msg, Screen screen, int x, int y, int w } } - public static void drawCompleteBackground(String msg, Screen screen, int x, int y) { - drawCompleteBackground(msg, screen, x, y, -1); + public static void drawTransparentBackground(String msg, Screen screen, int x, int y) { + drawTransparentBackground(msg, screen, x, y, -1); } - public static void drawCompleteBackground(String msg, Screen screen, int x, int y, int whiteTint) { + public static void drawTransparentBackground(String msg, Screen screen, int x, int y, int whiteTint) { msg = msg.toUpperCase(Localization.getSelectedLocale()); for (int i = 0; i < msg.length(); i++) { diff --git a/src/minicraft/item/Item.java b/src/minicraft/item/Item.java index 13681b57..d4fb29cd 100644 --- a/src/minicraft/item/Item.java +++ b/src/minicraft/item/Item.java @@ -150,7 +150,7 @@ public void renderHUD(Screen screen, int x, int y, int fontColor) { sprite.render(screen, xx, yy); // Item name - Font.drawCompleteBackground(dispName, screen, xx + 8, yy, fontColor); + Font.drawTransparentBackground(dispName, screen, xx + 8, yy, fontColor); } diff --git a/src/minicraft/level/Level.java b/src/minicraft/level/Level.java index 72e6beb4..f43536e5 100644 --- a/src/minicraft/level/Level.java +++ b/src/minicraft/level/Level.java @@ -12,7 +12,6 @@ import java.util.Random; import java.util.Set; import java.util.function.Predicate; -import java.util.function.ToIntFunction; // Game imports import minicraft.core.Game; @@ -128,21 +127,16 @@ public static String getDepthString(int depth) { * sparks set */ private final Object entityLock = new Object(); - private Set < Entity > entities = java.util.Collections.synchronizedSet(new HashSet < > ()); // A list of all the entities in the world - private Set < Spark > sparks = java.util.Collections.synchronizedSet(new HashSet < > ()); // A list of all the sparks in the world - private Set < Spark2 > sparks2 = java.util.Collections.synchronizedSet(new HashSet < > ()); // A list of all the sparks2 in the world - private Set < Spark3 > sparks3 = java.util.Collections.synchronizedSet(new HashSet < > ()); // A list of all the sparks3 in the world - private Set < Player > players = java.util.Collections.synchronizedSet(new HashSet < > ()); // A list of all the players in the world - private List < Entity > entitiesToAdd = new ArrayList < > (); // entities that will be added to the level on next tick, are stored here. This is for the sake of multithreading, optimization. (hopefully) - private List < Entity > entitiesToRemove = new ArrayList < > (); // entities that will be removed from the level on next tick are stored here. This is for the sake of multithreading optimization. (hopefully) + private final Set < Entity > entities = java.util.Collections.synchronizedSet(new HashSet < > ()); // A list of all the entities in the world + private final Set < Spark > sparks = java.util.Collections.synchronizedSet(new HashSet < > ()); // A list of all the sparks in the world + private final Set < Spark2 > sparks2 = java.util.Collections.synchronizedSet(new HashSet < > ()); // A list of all the sparks2 in the world + private final Set < Spark3 > sparks3 = java.util.Collections.synchronizedSet(new HashSet < > ()); // A list of all the sparks3 in the world + private final Set < Player > players = java.util.Collections.synchronizedSet(new HashSet < > ()); // A list of all the players in the world + private final List < Entity > entitiesToAdd = new ArrayList < > (); // entities that will be added to the level on next tick, are stored here. This is for the sake of multithreading, optimization. (hopefully) + private final List < Entity > entitiesToRemove = new ArrayList < > (); // entities that will be removed from the level on next tick are stored here. This is for the sake of multithreading optimization. (hopefully) // creates a sorter for all the entities to be rendered. - private static Comparator < Entity > spriteSorter = Comparator.comparingInt(new ToIntFunction < Entity > () { - @Override - public int applyAsInt(Entity e) { - return e.y; - } - }); + private static Comparator spriteSorter = Comparator.comparingInt(e -> e.y); public Entity[] getEntitiesToSave() { Entity[] allEntities = new Entity[entities.size() + sparks.size() + sparks2.size() + sparks3.size() + entitiesToAdd.size()]; @@ -175,9 +169,9 @@ public void printTileLocs(Tile t) { printLevelLoc(t.name, x, y); } - public void printEntityLocs(Class < ? extends Entity> c) { + public void printEntityLocs(Class < ? extends Entity > c) { int numfound = 0; - for (Entity entity : getEntityArray()) { + for (Entity entity: getEntityArray()) { if (c.isAssignableFrom(entity.getClass())) { printLevelLoc(entity.toString(), entity.x >> 4, entity.y >> 4); numfound++; @@ -581,13 +575,7 @@ public void tick(boolean fullTick) { Entity removeThis = (Entity) entities.toArray()[(random.nextInt(entities.size()))]; if (removeThis instanceof MobAi) { // make sure there aren't any close players - boolean playerClose = false; - for (Player player: players) { - if (Math.abs(player.x - removeThis.x) < 128 && Math.abs(player.y - removeThis.x) < 76) { - playerClose = true; - break; - } - } + boolean playerClose = entityNearPlayer(removeThis); if (!playerClose) { remove(removeThis); @@ -638,6 +626,16 @@ public void tick(boolean fullTick) { trySpawn(); } + + + public boolean entityNearPlayer(Entity entity) { + for (Player player : players) { + if (Math.abs(player.x - entity.x) < 128 && Math.abs(player.y - entity.y) < 76) { + return true; + } + } + return false; + } /* * public void printEntityStatus(String entityMessage, Entity entity, String... @@ -1051,10 +1049,9 @@ public Entity[] getEntityArray() { public List < Entity > getEntitiesInTiles(int xt, int yt, int radius) { return getEntitiesInTiles(xt, yt, radius, false); } - + @SafeVarargs - public final List getEntitiesInTiles(int xt, int yt, int radius, boolean includeGiven, - Class < ? extends Entity>... entityClasses) { + public final List < Entity > getEntitiesInTiles(int xt, int yt, int radius, boolean includeGiven, Class < ? extends Entity > ...entityClasses) { return getEntitiesInTiles(xt - radius, yt - radius, xt + radius, yt + radius, includeGiven, entityClasses); } diff --git a/src/minicraft/level/LevelGen.java b/src/minicraft/level/LevelGen.java index 6f09c143..0efdefe8 100644 --- a/src/minicraft/level/LevelGen.java +++ b/src/minicraft/level/LevelGen.java @@ -36,9 +36,9 @@ private LevelGen(int w, int h, int featureSize) { /// to be 16 or 32, in the code below. for (int y = 0; y < w; y += featureSize) { for (int x = 0; x < w; x += featureSize) { - - // This method sets the random value from -1 to 1 at the given coordinate. - setSample(x, y, random.nextFloat() * 2 - 1); + + // This method sets the random value from -1 to 1 at the given coordinate. + setSample(x, y, random.nextFloat() * 2 - 1); } } @@ -52,12 +52,12 @@ private LevelGen(int w, int h, int featureSize) { for (int x = 0; x < w; x += stepSize) { // this loops through the values again, by a given increment... double a = sample(x, y); // fetches the value at the coordinate set previously (it fetches the exact - // same ones that were just set above) + // same ones that were just set above) double b = sample(x + stepSize, y); // fetches the value at the next coordinate over. This could - // possibly loop over at the end, and fetch the first value in - // the row instead. + // possibly loop over at the end, and fetch the first value in + // the row instead. double c = sample(x, y + stepSize); // fetches the next value down, possibly looping back to the top - // of the column. + // of the column. double d = sample(x + stepSize, y + stepSize); // fetches the value one down, one right. /* @@ -110,19 +110,19 @@ private LevelGen(int w, int h, int featureSize) { // surrounding mids. double H = (a + b + d + e) / 4.0 + (random.nextFloat() * 2 - 1) * stepSize * scale * 0.5; // adds - // middle, - // right, - // mr-mb, - // mr-mt, - // and - // random. + // middle, + // right, + // mr-mb, + // mr-mt, + // and + // random. double g = (a + c + d + f) / 4.0 + (random.nextFloat() * 2 - 1) * stepSize * scale * 0.5; // adds - // middle, - // bottom, - // mr-mb, - // ml-mb, - // and - // random. + // middle, + // bottom, + // mr-mb, + // ml-mb, + // and + // random. setSample(x + halfStep, y, H); // Sets the H to the mid-right setSample(x, y + halfStep, g); // Sets the g to the mid-bottom @@ -178,7 +178,6 @@ static byte[][] createAndValidateMap(int w, int h, int level) { return createAndValidateTopMap(w, h); if (level == -4) return createAndValidateDungeon(w, h); - if ((level > -4) && (level < 0)) return createAndValidateUndergroundMap(w, h, -level); @@ -199,18 +198,12 @@ private static byte[][] createAndValidateTopMap(int w, int h) { count[result[0][i] & 0xff]++; } - if (count[Tiles.get("rock").id & 0xff] < 100) - continue; - if (count[Tiles.get("sand").id & 0xff] < 100) - continue; - if (count[Tiles.get("grass").id & 0xff] < 100) - continue; - if (count[Tiles.get("tree").id & 0xff] < 100) - continue; - if (count[Tiles.get("flower").id & 0xff] < 100) - continue; - if (count[Tiles.get("Stairs Down").id & 0xff] < w / 21) - continue; // size 128 = 6 stairs min + if (count[Tiles.get("rock").id & 0xff] < 100) continue; + if (count[Tiles.get("sand").id & 0xff] < 100) continue; + if (count[Tiles.get("grass").id & 0xff] < 100) continue; + if (count[Tiles.get("tree").id & 0xff] < 100) continue; + if (count[Tiles.get("flower").id & 0xff] < 100) continue; + if (count[Tiles.get("Stairs Down").id & 0xff] < w / 21) continue; // size 128 = 6 stairs min return result; @@ -229,15 +222,11 @@ private static byte[][] createAndValidateUndergroundMap(int w, int h, int depth) count[result[0][i] & 0xff]++; } - if (count[Tiles.get("rock").id & 0xff] < 100) - continue; - if (count[Tiles.get("dirt").id & 0xff] < 100) - continue; - if (count[(Tiles.get("iron Ore").id & 0xff) + depth - 1] < 20) - continue; + if (count[Tiles.get("rock").id & 0xff] < 100) continue; + if (count[Tiles.get("dirt").id & 0xff] < 100) continue; + if (count[(Tiles.get("iron Ore").id & 0xff) + depth - 1] < 20) continue; - if (depth < 3 && count[Tiles.get("Stairs Down").id & 0xff] < w / 32) - continue; // size 128 = 4 stairs min + if (depth < 3 && count[Tiles.get("Stairs Down").id & 0xff] < w / 32) continue; // size 128 = 4 stairs min return result; @@ -256,12 +245,9 @@ private static byte[][] createAndValidateDungeon(int w, int h) { count[result[0][i] & 0xff]++; } - if (count[Tiles.get("Obsidian").id & 0xff] < 100) - continue; - if (count[Tiles.get("Obsidian Wall").id & 0xff] < 100) - continue; - if (count[Tiles.get("Hard obsidian").id & 0xff] < 100) - continue; + if (count[Tiles.get("Obsidian").id & 0xff] < 100) continue; + if (count[Tiles.get("Obsidian Wall").id & 0xff] < 100) continue; + if (count[Tiles.get("Hard obsidian").id & 0xff] < 100) continue; return result; @@ -280,10 +266,8 @@ private static byte[][] createAndValidateSkyMap(int w, int h) { count[result[0][i] & 0xff]++; } - if (count[Tiles.get("cloud").id & 0xff] < 2000) - continue; - if (count[Tiles.get("Stairs Down").id & 0xff] < w / 64) - continue; // size 128 = 2 stairs min + if (count[Tiles.get("cloud").id & 0xff] < 2000) continue; + if (count[Tiles.get("Stairs Down").id & 0xff] < w / 64) continue; // size 128 = 2 stairs min return result; @@ -331,72 +315,87 @@ private static byte[][] createTopMap(int w, int h) { // create surface map // Code of the type of terrain, this according to the user's option switch ((String) Settings.get("Type")) { - case "Island": - if (val < -0.5) { - if (Settings.get("Theme").equals("Hell")) { - map[i] = Tiles.get("lava").id; - } else { - map[i] = Tiles.get("water").id; - } + case "Island": - } else if (val > 0.5 && mval < -1.5) { - map[i] = Tiles.get("rock").id; - } else { - map[i] = Tiles.get("grass").id; - } + if (val < -0.5) { + if (Settings.get("Theme").equals("Hell")) { + map[i] = Tiles.get("lava").id; + } else { + map[i] = Tiles.get("water").id; + } - break; - case "Box": + } else if (val > 0.5 && mval < -1.5) { + + map[i] = Tiles.get("up rock").id; + + } else if (val > 0.1 && mval < -1.1) { + + map[i] = Tiles.get("rock").id; - if (val < -1.5) { - if (Settings.get("Theme").equals("Hell")) { - map[i] = Tiles.get("lava").id; } else { - map[i] = Tiles.get("water").id; + map[i] = Tiles.get("grass").id; + } - } else if (val > 0.5 && mval < -1.5) { - map[i] = Tiles.get("rock").id; - } else { - map[i] = Tiles.get("grass").id; - } + break; + case "Box": - break; - case "Mountain": + if (val < -1.5) { + if (Settings.get("Theme").equals("Hell")) { + map[i] = Tiles.get("lava").id; + } else { + map[i] = Tiles.get("water").id; + } + + } else if (val > 0.5 && mval < -1.5) { + + map[i] = Tiles.get("up rock").id; + + } else if (val > 0.1 && mval < -1.1) { + + map[i] = Tiles.get("rock").id; - if (val < -0.4) { - map[i] = Tiles.get("grass").id; - } else if (val > 0.5 && mval < -1.5) { - if (Settings.get("Theme").equals("Hell")) { - map[i] = Tiles.get("lava").id; } else { - map[i] = Tiles.get("water").id; + map[i] = Tiles.get("grass").id; + } - } else { - map[i] = Tiles.get("rock").id; - } - break; - case "Irregular": + break; + case "Mountain": - if (val < -0.5 && mval < -0.5) { - if (Settings.get("Theme").equals("Hell")) { - map[i] = Tiles.get("lava").id; - } - if (!Settings.get("Theme").equals("Hell")) { - map[i] = Tiles.get("water").id; + if (val < -0.4) { + map[i] = Tiles.get("grass").id; + } else if (val > 0.5 && mval < -1.5) { + if (Settings.get("Theme").equals("Hell")) { + map[i] = Tiles.get("lava").id; + } else { + map[i] = Tiles.get("water").id; + } + } else { + map[i] = Tiles.get("rock").id; } - } else if (val > 0.5 && mval < -1.5) { - map[i] = Tiles.get("rock").id; - } else { - map[i] = Tiles.get("grass").id; - } - break; + break; + case "Irregular": - default: - // meh - break; + if (val < -0.5 && mval < -0.5) { + if (Settings.get("Theme").equals("Hell")) { + map[i] = Tiles.get("lava").id; + } + if (!Settings.get("Theme").equals("Hell")) { + map[i] = Tiles.get("water").id; + } + + } else if (val > 0.5 && mval < -1.5) { + map[i] = Tiles.get("rock").id; + } else { + map[i] = Tiles.get("grass").id; + } + break; + + default: + // meh + break; } } } @@ -408,7 +407,7 @@ private static byte[][] createTopMap(int w, int h) { // create surface map for (int i = 0; i < w * h / 800; i++) { int xs = random.nextInt(w); int ys = random.nextInt(h); - for (int k = 0; k < 10; k++) { + for (int k = 0; k < 16; k++) { int x = xs + random.nextInt(29) - 10 + random.nextInt(5); int y = ys + random.nextInt(29) - 10 + random.nextInt(5); for (int j = 0; j < 100; j++) { @@ -503,6 +502,7 @@ private static byte[][] createTopMap(int w, int h) { // create surface map } } + // Add trees to biomes // Classic forest biome @@ -700,13 +700,14 @@ private static byte[][] createTopMap(int w, int h) { // create surface map if (xx >= 0 && yy >= 0 && xx < w && yy < h) { if (map[xx + yy * w] == Tiles.get("grass").id) { map[xx + yy * w] = Tiles.get("flower").id; - data[xx + yy * w] = (byte) (col + random.nextInt(4) * 16); // data determines which way the - // flower faces + data[xx + yy * w] = (byte)(col + random.nextInt(4) * 16); // data determines which way the + // flower faces } } } } + // Add lawn to grass for (int i = 0; i < w * h / 400; i++) { int x = random.nextInt(w); @@ -718,7 +719,7 @@ private static byte[][] createTopMap(int w, int h) { // create surface map if (xx >= 0 && yy >= 0 && xx < w && yy < h) { if (map[xx + yy * w] == Tiles.get("grass").id) { map[xx + yy * w] = Tiles.get("lawn").id; - data[xx + yy * w] = (byte) (col + random.nextInt(4) * 16); + data[xx + yy * w] = (byte)(col + random.nextInt(4) * 16); } } } @@ -735,7 +736,7 @@ private static byte[][] createTopMap(int w, int h) { // create surface map if (xx >= 0 && yy >= 0 && xx < w && yy < h) { if (map[xx + yy * w] == Tiles.get("grass").id) { map[xx + yy * w] = Tiles.get("orange tulip").id; - data[xx + yy * w] = (byte) (col + random.nextInt(4) * 16); + data[xx + yy * w] = (byte)(col + random.nextInt(4) * 16); } } } @@ -824,12 +825,17 @@ private static byte[][] createTopMap(int w, int h) { // create surface map } } + + // System.out.println("min="+min); // System.out.println("max="+max); // average /= w*h; // System.out.println(average); - return new byte[][] { map, data }; + return new byte[][] { + map, + data + }; } // Dungeons generation code @@ -896,7 +902,10 @@ private static byte[][] createDungeon(int w, int h) { } } - return new byte[][] { map, data }; + return new byte[][] { + map, + data + }; } // Generate cave system @@ -979,7 +988,7 @@ else if (depth == 1) int yy = y + random.nextInt(5) - random.nextInt(5); if (xx >= r && yy >= r && xx < w - r && yy < h - r) { if (map[xx + yy * w] == Tiles.get("rock").id) { - map[xx + yy * w] = (byte) ((Tiles.get("iron Ore").id & 0xff) + depth - 1); + map[xx + yy * w] = (byte)((Tiles.get("iron Ore").id & 0xff) + depth - 1); } } } @@ -990,7 +999,7 @@ else if (depth == 1) int yy = y + random.nextInt(3) - random.nextInt(2); if (xx >= r && yy >= r && xx < w - r && yy < h - r) { if (map[xx + yy * w] == Tiles.get("rock").id) { - map[xx + yy * w] = (byte) (Tiles.get("Lapis").id & 0xff); + map[xx + yy * w] = (byte)(Tiles.get("Lapis").id & 0xff); } } } @@ -1010,7 +1019,7 @@ else if (depth == 1) /// basically prevents negative values... except... this doesn't do anything if /// you flip it back to a byte again... - map[xx + yy * w] = (byte) (Tiles.get("Stairs Down").id & 0xff); + map[xx + yy * w] = (byte)(Tiles.get("Stairs Down").id & 0xff); } } } @@ -1041,7 +1050,10 @@ else if (depth == 1) } } - return new byte[][] { map, data }; + return new byte[][] { + map, + data + }; } // Sky dimension generation @@ -1217,7 +1229,7 @@ private static byte[][] createSkyMap(int w, int h) { if (xx >= 0 && yy >= 0 && xx < w && yy < h) { if (map[xx + yy * w] == Tiles.get("sky grass").id) { map[xx + yy * w] = Tiles.get("sky lawn").id; - data[xx + yy * w] = (byte) (col + random.nextInt(4) * 16); + data[xx + yy * w] = (byte)(col + random.nextInt(4) * 16); } } } @@ -1398,7 +1410,7 @@ private static byte[][] createSkyMap(int w, int h) { if (xx >= 0 && yy >= 0 && xx < w && yy < h) { if (map[xx + yy * w] == Tiles.get("sky grass").id) { map[xx + yy * w] = Tiles.get("sky lawn").id; - data[xx + yy * w] = (byte) (col + random.nextInt(4) * 16); + data[xx + yy * w] = (byte)(col + random.nextInt(4) * 16); } } } @@ -1489,7 +1501,10 @@ private static byte[][] createSkyMap(int w, int h) { } } - return new byte[][] { map, data }; + return new byte[][] { + map, + data + }; } @@ -1537,7 +1552,7 @@ public static void main(String[] args) { // Execute it forever // noinspection InfiniteLoopStatement - + boolean hasquit = false; while (!hasquit) { // stop the loop and close the program.) @@ -1574,14 +1589,14 @@ public static void main(String[] args) { for (int y = 0; y < h; y++) { // Loops through the height of the map for (int x = 0; x < w; x++) { // (inner-loop)Loops through the entire width of the map int i = x + y * w; // Current tile of the map. - - /*The colors used in the pixels are hexadecimal (0xRRGGBB). - 0xff0000 would be fully red - 0x00ff00 would be fully blue - 0x0000ff would be fully green - 0x000000 would be black - and 0xffffff would be white etc. - */ + + /*The colors used in the pixels are hexadecimal (0xRRGGBB). + 0xff0000 would be fully red + 0x00ff00 would be fully blue + 0x0000ff would be fully green + 0x000000 would be black + and 0xffffff would be white etc. + */ // Surface tiles if (map[i] == Tiles.get("water").id) pixels[i] = 0x1a2c89; @@ -1638,6 +1653,7 @@ public static void main(String[] args) { if (map[i] == Tiles.get("Sky lawn").id) pixels[i] = 0x56a383; if (map[i] == Tiles.get("Sky high grass").id) pixels[i] = 0x4f9678; if (map[i] == Tiles.get("Holy rock").id) pixels[i] = 0x7a7a7a; + if (map[i] == Tiles.get("Up rock").id) pixels[i] = 0x939393; } } @@ -1656,9 +1672,13 @@ public static void main(String[] args) { System.out.println("[LevelGen]" + " | " + "Seed: " + worldSeed + " | " + "Gen-Version: " + Game.BUILD + " | " + finalGenTime); img.setRGB(0, 0, w, h, pixels, 0, w); // Sets the pixels into the image - - String[] options = {"Another", "Quit"}; // Name of the buttons used for the window. - + + String[] options = { + "Another", + "Quit" + }; // Name of the buttons used for the window. + + int Generator = JOptionPane.showOptionDialog(null, null, "Map Generator", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, new ImageIcon(img.getScaledInstance(w * mapScale, h * mapScale, Image.SCALE_AREA_AVERAGING)), options, null); if (LevelGen.worldSeed == 0x100) { @@ -1666,14 +1686,16 @@ public static void main(String[] args) { } else { LevelGen.worldSeed = 0x100; } - - /* Now you noticed that we made the dialog an integer. This is because when you click a button it will return a number. - Since we passed in 'options', the window will return 0 if you press "Another" and it will return 1 when you press "Quit". - If you press the red "x" close mark, the window will return -1 - */ - + + /* Now you noticed that we made the dialog an integer. This is because when you click a button it will return a number. + Since we passed in 'options', the window will return 0 if you press "Another" and it will return 1 when you press "Quit". + If you press the red "x" close mark, the window will return -1 + */ + // If the dialog returns -1 (red "x" button) or 1 ("Quit" button) then... - if (Generator == -1 || Generator == 1) hasquit = true; // Stop the loop and close the program. + if (Generator == -1 || Generator == 1) { + hasquit = true; // Stop the loop and close the program. + } } } } \ No newline at end of file diff --git a/src/minicraft/level/NoiseMap.java b/src/minicraft/level/NoiseMap.java index 52ad9cce..f99cb1c1 100644 --- a/src/minicraft/level/NoiseMap.java +++ b/src/minicraft/level/NoiseMap.java @@ -111,4 +111,4 @@ public static void main(String[] args) { JOptionPane.showMessageDialog(null, null, "Another", JOptionPane.YES_NO_OPTION, new ImageIcon(img)); } } -} +} \ No newline at end of file diff --git a/src/minicraft/level/tile/DirtTile.java b/src/minicraft/level/tile/DirtTile.java index 6741d9d0..85aa2fc4 100644 --- a/src/minicraft/level/tile/DirtTile.java +++ b/src/minicraft/level/tile/DirtTile.java @@ -27,6 +27,8 @@ protected DirtTile(String name) { protected static int dCol(int depth) { switch (depth) { + case 1: + return Color.get(1, 194, 194, 194); // Sky. case 0: return Color.get(1, 129, 105, 83); // surface. case -4: diff --git a/src/minicraft/level/tile/RockTile.java b/src/minicraft/level/tile/RockTile.java index d9ce336b..2da9c01f 100644 --- a/src/minicraft/level/tile/RockTile.java +++ b/src/minicraft/level/tile/RockTile.java @@ -23,7 +23,24 @@ public class RockTile extends Tile { private ConnectorSprite sprite = new ConnectorSprite(RockTile.class, new Sprite(18, 6, 3, 3, 1, 3), - new Sprite(21, 8, 2, 2, 1, 3), new Sprite(21, 6, 2, 2, 1, 3)); + new Sprite(21, 8, 2, 2, 1, 3), new Sprite(21, 6, 2, 2, 1, 3)) { + + + public boolean connectsTo(Tile tile, boolean isSide) { + return tile != Tiles.get("dirt") && tile != Tiles.get("grass") && + tile != Tiles.get("sand") && tile != Tiles.get("Orange tulip") && + tile != Tiles.get("tree") && tile != Tiles.get("birch tree") && + tile != Tiles.get("Stairs Down") && tile != Tiles.get("Stairs up") && + tile != Tiles.get("lava") && tile != Tiles.get("water") && + tile != Tiles.get("cactus") && tile != Tiles.get("flower") && + tile != Tiles.get("Hole") && tile != Tiles.get("Snow") && + tile != Tiles.get("Lawn") && tile != Tiles.get("path") && + tile != Tiles.get("Birch tree") && tile != Tiles.get("Fir tree") && + tile != Tiles.get("Wood wall") && tile != Tiles.get("path") && + tile != Tiles.get("ice spike") && tile != Tiles.get("Carrot") && + tile != Tiles.get("pine tree"); + } + }; private boolean dropCoal = false; private final int maxHealth = 50; diff --git a/src/minicraft/level/tile/Tile.java b/src/minicraft/level/tile/Tile.java index fe5e558d..8436ccf1 100644 --- a/src/minicraft/level/tile/Tile.java +++ b/src/minicraft/level/tile/Tile.java @@ -41,6 +41,7 @@ public ToolType getRequiredTool() { public boolean connectsToGrass = false; public boolean connectsToCloud = false; + public boolean connectsToUpRock = false; public boolean connectsToSand = false; public boolean connectsToFluid = false; protected boolean connectsToLava = false; @@ -57,6 +58,7 @@ public ToolType getRequiredTool() { protected boolean connectsToSkyDirt = false; public boolean connectsToSkyHighGrass = false; public boolean connectsToFerrosite = false; + public boolean connectsToDirt = false; { light = 1; @@ -149,6 +151,18 @@ public void steppedOn(Level level, int xt, int yt, Entity entity) { public boolean interact(Level level, int xt, int yt, Player player, Item item, Direction attackDir) { return false; } + + /** + * Executed when the tile is exploded. + * The call for this method is done just before the tiles are changed to exploded tiles. + * @param level The level we are on. + * @param xt X position of the tile. + * @param yt Y position of the tile. + * @return true if successful. + */ + public boolean onExplode(Level level, int xt, int yt) { + return false; + } /** Sees if the tile connects to a fluid. */ public boolean connectsToLiquid() { diff --git a/src/minicraft/level/tile/Tiles.java b/src/minicraft/level/tile/Tiles.java index d8ece4fb..73d5a406 100644 --- a/src/minicraft/level/tile/Tiles.java +++ b/src/minicraft/level/tile/Tiles.java @@ -130,6 +130,7 @@ public static void initTileList() { tiles.set(83, new GoldenCloudTreeTile("Golden Cloud Tree")); tiles.set(84, new BlueCloudTreeTile("Blue Cloud Tree")); tiles.set(85, new SkyFernTile("Sky Fern")); + tiles.set(86, new UpRockTile("Up rock")); // tiles.set(?, new SandRockTile("Sand rock")); diff --git a/src/minicraft/level/tile/UpRockTile.java b/src/minicraft/level/tile/UpRockTile.java new file mode 100644 index 00000000..70b303ea --- /dev/null +++ b/src/minicraft/level/tile/UpRockTile.java @@ -0,0 +1,134 @@ +package minicraft.level.tile; + +import minicraft.core.Game; +import minicraft.core.io.Settings; +import minicraft.core.io.Sound; +import minicraft.entity.Direction; +import minicraft.entity.Entity; +import minicraft.entity.mob.Mob; +import minicraft.entity.mob.Player; +import minicraft.entity.particle.SmashParticle; +import minicraft.entity.particle.TextParticle; +import minicraft.gfx.Color; +import minicraft.gfx.ConnectorSprite; +import minicraft.gfx.Screen; +import minicraft.gfx.Sprite; +import minicraft.item.Item; +import minicraft.item.Items; +import minicraft.item.ToolItem; +import minicraft.item.ToolType; +import minicraft.level.Level; + +public class UpRockTile extends Tile { + private ConnectorSprite sprite = new ConnectorSprite(UpRockTile.class, new Sprite(58, 6, 3, 3, 1, 3), + new Sprite(61, 8, 2, 2, 1, 3), new Sprite(61, 6, 2, 2, 1, 3)) { + + + public boolean connectsTo(Tile tile, boolean isSide) { + return tile != Tiles.get("rock") && tile != Tiles.get("dirt") && tile != Tiles.get("grass") && + tile != Tiles.get("sand") && tile != Tiles.get("Orange tulip") && + tile != Tiles.get("tree") && tile != Tiles.get("birch tree") && + tile != Tiles.get("Stairs Down") && tile != Tiles.get("Stairs up") && + tile != Tiles.get("lava") && tile != Tiles.get("water") && + tile != Tiles.get("cactus") && tile != Tiles.get("flower") && + tile != Tiles.get("Hole") && tile != Tiles.get("Snow") && + tile != Tiles.get("Lawn") && tile != Tiles.get("path") && + tile != Tiles.get("Birch tree") && tile != Tiles.get("Fir tree") && + tile != Tiles.get("Wood wall") && tile != Tiles.get("path") && + tile != Tiles.get("ice spike") && tile != Tiles.get("Carrot") ; + } + }; + + private boolean dropCoal = false; + private final int maxHealth = 50; + + private int damage; + + protected UpRockTile(String name) { + super(name, (ConnectorSprite) null); + csprite = sprite; + } + + @Override + public void render(Screen screen, Level level, int x, int y) { + + Tiles.get("rock").render(screen, level, x, y); + sprite.render(screen, level, x, y); + } + + @Override + public boolean mayPass(Level level, int x, int y, Entity e) { + return false; + } + + @Override + public boolean hurt(Level level, int x, int y, Mob source, int dmg, Direction attackDir) { + hurt(level, x, y, dmg); + return true; + } + + @Override + public boolean interact(Level level, int xt, int yt, Player player, Item item, Direction attackDir) { + + // creative mode can just act like survival here + if (item instanceof ToolItem) { + ToolItem tool = (ToolItem) item; + if (tool.type == ToolType.Pickaxe && player.payStamina(4 - tool.level) && tool.payDurability()) { + + // Drop coal since we use a pickaxe. + dropCoal = true; + hurt(level, xt, yt, random.nextInt(10) + (tool.level) * 5 + 10); + return true; + } + } + return false; + } + + @Override + public void hurt(Level level, int x, int y, int dmg) { + damage = level.getData(x, y) + dmg; + + if (Game.isMode("creative")) { + dmg = damage = maxHealth; + dropCoal = true; + } + + level.add(new SmashParticle(x * 16, y * 16)); + Sound.Tile_generic_hurt.play(); + + level.add(new TextParticle("" + dmg, x * 16 + 8, y * 16 + 8, Color.RED)); + if (damage >= maxHealth) { + + if (dropCoal) { + level.dropItem(x * 16 + 8, y * 16 + 8, 1, 3, Items.get("Stone")); + int coal = 0; + + if (!Settings.get("diff").equals("Hard")) { + coal++; + } + + level.dropItem(x * 16 + 8, y * 16 + 8, coal, coal + 1, Items.get("Coal")); + + } else { + level.dropItem(x * 16 + 8, y * 16 + 8, 2, 4, Items.get("Stone")); + + } + + level.setTile(x, y, Tiles.get("Rock")); + + } else { + level.setData(x, y, damage); + + } + } + + @Override + public boolean tick(Level level, int xt, int yt) { + damage = level.getData(xt, yt); + if (damage > 0) { + level.setData(xt, yt, damage - 1); + return true; + } + return false; + } + } \ No newline at end of file diff --git a/src/minicraft/network/MinicraftClient.java b/src/minicraft/network/MinicraftClient.java index ee06c0a0..71d92afe 100644 --- a/src/minicraft/network/MinicraftClient.java +++ b/src/minicraft/network/MinicraftClient.java @@ -44,738 +44,606 @@ import minicraft.screen.ContainerDisplay; import minicraft.screen.MultiplayerDisplay; -/// This class is only used by the client runtime; the server runtime doesn't touch it. +// This class is only used by the client runtime; the server runtime doesn't touch it. public class MinicraftClient extends MinicraftConnection { - - public static final int DEFAULT_CONNECT_TIMEOUT = 5_000; // in milliseconds - - private MultiplayerDisplay menu; - - private enum State { - LOGIN, LOADING, PLAY, RESPAWNING, DISCONNECTED - } - - private State curState = State.DISCONNECTED; - - private HashMap entityRequests = new HashMap<>(); - - private int serverPlayerCount = 0; - - @Nullable - private static Socket openSocket(String hostName, MultiplayerDisplay menu, int connectTimeout) { - InetAddress hostAddress; - Socket socket; - - socket = connectWithSrv(hostName, menu, connectTimeout); - if (socket != null) - return socket; - - if (Game.debug) - System.out.println("getting host address from host name \"" + hostName + "\"..."); - - // check if there's a custom port to connect on - int port = MinicraftProtocol.PORT; - String[] splitHostName = hostName.split(":"); - if (splitHostName.length > 1) { - hostName = splitHostName[0]; - try { - port = Integer.parseInt(splitHostName[1]); - } catch (NumberFormatException exception) { - System.err.println("Invalid port: " + splitHostName[1]); - menu.setError("Invalid port"); - exception.printStackTrace(); - return null; - } - } - - try { - hostAddress = InetAddress.getByName(hostName); - } catch (UnknownHostException ex) { - System.err.println("Don't know about host " + hostName); - menu.setError("host not found"); - ex.printStackTrace(); - return null; - } - - if (Game.debug) - System.out.println("host found. attempting to open socket..."); - - try { - socket = new Socket(); - socket.connect(new InetSocketAddress(hostAddress, port), connectTimeout); - } catch (IOException ex) { - System.err.println("Problem connecting socket to server:"); - menu.setError(ex.getMessage().replace(" (Connection refused)", "")); - ex.printStackTrace(); - return null; - } - - if (Game.debug) - System.out.println("successfully connected to game server. Returning socket..."); - - return socket; - } - - @Nullable - private static Socket connectWithSrv(String hostName, MultiplayerDisplay menu, int connectTimeout) { - // Perform an SRV lookup to determine if any exist - String query = "_minicraft._tcp." + hostName; - Record[] records; - - try { - records = new Lookup(query, Type.SRV).run(); - } catch (TextParseException e) { - if (Game.debug) - System.err.println("Error running SRV lookup on '" + hostName + "', skipping."); - return null; - } - - if (records == null) { - // no records - if (Game.debug) - System.out.println("No SRV records found."); - return null; - } - - // record-sorting queue - PriorityQueue queue = new PriorityQueue<>((rec1, rec2) -> { - // get smaller priority - int pComp = Integer.compare(rec1.getPriority(), rec2.getPriority()); - if (pComp != 0) - return pComp; - // get larger weight - int wComp = Integer.compare(rec2.getWeight(), rec1.getWeight()); - if (wComp != 0) - return wComp; - - // else equal - return 0; - }); - - // menu.setWaitMessage("Trying available servers"); - - // run through each record in the right order and try to connect - for (Record record : records) { - if (Game.debug) - System.out.println("Found SRV record: " + record.toString()); - SRVRecord srec = (SRVRecord) record; - if (Game.debug) { - System.out.println("SRV record data:"); - System.out.println("Target: '" + srec.getTarget() + "'"); - System.out.println("Port: '" + srec.getPort() + "'"); - System.out.println("Priority: '" + srec.getPriority() + "'"); - System.out.println("Weight: '" + srec.getWeight() + "'"); - } - - queue.add(srec); - } - - // attempt to connect to each record in order of their precedence - int serverIdx = 1; - while (!queue.isEmpty()) { - SRVRecord srec = queue.poll(); - - // remove trailing . - String address = srec.getTarget().toString(true); - int port = srec.getPort(); - - menu.setWaitMessage("Trying server " + serverIdx + "/" + records.length); - try { - Socket socket = new Socket(); - socket.connect(new InetSocketAddress(address, port), connectTimeout); - return socket; - } catch (IOException ex) { - System.err.println( - "Failed to connect to server " + serverIdx + "/" + records.length + ": " + ex.getMessage()); - } - serverIdx++; - } - - menu.setWaitMessage("Trying main server"); - - return null; - } - - public MinicraftClient(String username, MultiplayerDisplay menu, String hostName) { - this(username, menu, hostName, DEFAULT_CONNECT_TIMEOUT); - } - - public MinicraftClient(String username, MultiplayerDisplay menu, String hostName, int connectTimeout) { - super("MinicraftClient", openSocket(hostName, menu, connectTimeout)); - this.menu = menu; - Game.ISONLINE = true; - Game.ISHOST = false; - - if (super.isConnected()) { - login(username); - start(); - } - } - - public int getPlayerCount() { - return serverPlayerCount; - } - - @SuppressWarnings("incomplete-switch") - private void changeState(State newState) { - if (Game.debug) - System.out.println("CLIENT: client state change from " + curState + " to " + newState); - curState = newState; - - switch (newState) { - case LOGIN: - sendData(InputType.LOGIN, ((RemotePlayer) Game.player).getUsername() + ";" + Game.VERSION); - break; - - case LOADING: - Game.setMenu(menu); - menu.setLoadingMessage("Tiles"); - sendData(InputType.LOAD, String.valueOf(Game.currentLevel)); - break; - - case PLAY: - if (Game.debug) - System.out.println("CLIENT: Begin game!"); - World.levels[Game.currentLevel].add(Game.player); - Renderer.readyToRenderGameplay = true; - Game.setMenu(null); - break; - - case RESPAWNING: - Game.setMenu(menu); - menu.setLoadingMessage("Spawnpoint"); - sendData(InputType.RESPAWN, ""); - break; - } - } - - private void login(String username) { - if (Game.debug) - System.out.println("CLIENT: logging in to server..."); - - try { - Game.player = new RemotePlayer(Game.player, true, InetAddress.getLocalHost(), getConnectedPort()); - ((RemotePlayer) Game.player).setUsername(username); - } catch (UnknownHostException ex) { - System.err.println("CLIENT could not get localhost address:"); - ex.printStackTrace(); - menu.setError("unable to get localhost address"); - } - changeState(State.LOGIN); - } - - /** This method is responsible for parsing all data received by the socket. */ - @SuppressWarnings("incomplete-switch") - public boolean parsePacket(InputType inType, String alldata) { - String[] data = alldata.split(";"); - - if (Game.packet_debug) - System.out.println("Received:" + inType.toString() + ", " + alldata); - - switch (inType) { - case INVALID: - System.err.println("CLIENT received error: " + alldata); - menu.setError(alldata); - endConnection(); - return false; - - case PING: - // if(Game.debug) System.out.println("CLIENT: received server ping"); - sendData(InputType.PING, alldata); - return true; - - case LOGIN: - System.err.println("Server tried to login..."); - return false; - - case DISCONNECT: - if (Game.debug) - System.out.println("CLIENT: received disconnect"); - menu.setError("Server Disconnected."); // this sets the menu back to the multiplayer menu, and tells the - // user what happened. - endConnection(); - return true; - - case GAME: - Settings.set("mode", data[0]); - Updater.setTime(Integer.parseInt(data[1])); - Updater.gamespeed = Float.parseFloat(data[2]); - Updater.pastDay1 = Boolean.parseBoolean(data[3]); - Updater.scoreTime = Integer.parseInt(data[4]); - serverPlayerCount = Integer.parseInt(data[5]); - Bed.setPlayersAwake(Integer.parseInt(data[6])); - - if (Game.isMode("creative")) - Items.fillCreativeInv(Game.player.getInventory(), false); - - return true; - - case INIT: - // if (Game.debug) System.out.println("CLIENT: received INIT packet"); - if (curState != State.LOGIN) { - // System.out.println("WARNING: client received init packet in state " + - // curState + "; ignoring packet."); - return false; - } - - changeState(State.LOADING); - // curState = State.LOADING; // I don't want to do the change state sequence - // quite yet. - menu.setLoadingMessage("World"); - - String[] infostrings = alldata.split(","); - int[] info = new int[infostrings.length]; - for (int i = 0; i < info.length; i++) - info[i] = Integer.parseInt(infostrings[i]); - Game.player.eid = info[0]; - World.lvlw = info[1]; - World.lvlh = info[2]; - World.currentLevel = info[3]; - Game.player.x = info[4]; - Game.player.y = info[5]; - return true; - - case TILES: - if (curState != State.LOADING) { // ignore - if (Game.debug) - System.out.println("ignoring level tile data because client state is not LOADING: " + curState); - return false; - } - if (Game.debug) - System.out.println("CLIENT: received tiles for level " + World.currentLevel); - /// receive tiles. - Level level = World.levels[World.currentLevel]; - if (level == null) { - int lvldepth = World.idxToDepth[World.currentLevel]; - World.levels[World.currentLevel] = level = new Level(World.lvlw, World.lvlh, lvldepth, - World.levels[World.lvlIdx(lvldepth + 1)], false); - } - - String[] tilestrs = alldata.split(","); - byte[] tiledata = new byte[tilestrs.length]; - for (int i = 0; i < tiledata.length; i++) - tiledata[i] = Byte.parseByte(tilestrs[i]); - - // System.out.println("TILE DATA ARRAY AS RECEIVED BY CLIENT, DECODED BACK TO - // NUMBERS (length="+tiledata.length+"):"); - // System.out.println(Arrays.toString(tiledata)); - - if (tiledata.length / 2 > level.tiles.length) { - System.err.println( - "CLIENT ERROR: received level tile data is too long for world size; level.tiles.length=" - + level.tiles.length + ", tiles in data: " + (tiledata.length / 2) - + ". Will truncate tile loading."); - } - - for (int i = 0; i < tiledata.length / 2 && i < level.tiles.length; i++) { - level.tiles[i] = tiledata[i * 2]; - level.data[i] = tiledata[i * 2 + 1]; - } - - menu.setLoadingMessage("Entities"); - - if (World.onChangeAction != null) { - World.onChangeAction.act(); - World.onChangeAction = null; - } - - return true; - - case ENTITIES: - if (curState != State.LOADING) {// ignore - System.out.println("ignoring level entity data because client state is not LOADING: " + curState); - return false; - } - - if (Game.debug) - System.out.println("CLIENT: received entities"); - Level curLevel = World.levels[Game.currentLevel]; - Game.player.setLevel(curLevel, Game.player.x, Game.player.y); // so the shouldTrack() calls check correctly. - - String[] entities = alldata.split(","); - for (String entityString : entities) { - if (entityString.length() == 0) - continue; - - if (Game.debug) - System.out.println("CLIENT: loading entity: " + entityString); - Load.loadEntity(entityString, false); - } - - // ready to start game now. - changeState(State.PLAY); // this will be set before the client receives any cached entities, so that - // should work out. - return true; - - case TILE: - Level theLevel = World.levels[Integer.parseInt(data[0])]; - if (theLevel == null) - return false; // ignore, this is for an unvisited level. - int pos = Integer.parseInt(data[1]); - theLevel.tiles[pos] = Byte.parseByte(data[2]); - theLevel.data[pos] = Byte.parseByte(data[3]); - // if (Game.debug) System.out.println("CLIENT: updated tile on lvl " + - // theLevel.depth + " to " + Tiles.get(theLevel.tiles[pos]).name); - return true; - - case ADD: - if (curState == State.LOADING) - System.out.println("CLIENT: received entity addition while loading level"); - - // if (Game.debug) System.out.println("CLIENT: received entity addition: " + - // alldata); - - if (alldata.length() == 0) { - System.err.println("CLIENT WARNING: received entity addition is blank..."); - return false; - } - - Entity addedEntity = Load.loadEntity(alldata, false); - if (addedEntity != null) { - if (addedEntity.eid == Game.player.eid/* && Game.player.getLevel() == null */) { - if (Game.debug) - System.out.println("CLIENT: added main game player back to level based on add packet"); - World.levels[Game.currentLevel].add(Game.player); - Bed.removePlayer(Game.player); - } - - if (entityRequests.containsKey(addedEntity.eid)) - entityRequests.remove(addedEntity.eid); - } - - return true; - - case REMOVE: - if (curState == State.LOADING) - System.out.println("CLIENT: received entity removal while loading level"); - - int eid = Integer.parseInt(data[0]); - Integer entityLevelDepth; - if (data.length > 1) - entityLevelDepth = Integer.parseInt(data[1]); - else - entityLevelDepth = null; - - Entity toRemove = Network.getEntity(eid); - // if (Game.debug) System.out.println("CLIENT: received entity removal: " + - // toRemove); - if (toRemove != null) { - if (entityLevelDepth != null && toRemove.getLevel() != null - && toRemove.getLevel().depth != entityLevelDepth) { - if (Game.debug) - System.out.println("CLIENT: not removing entity " + toRemove - + " because it is not on the specified level depth, " + entityLevelDepth - + "; current depth = " + toRemove.getLevel().depth - + ". Removing from specified level only..."); - Level l = World.levels[World.lvlIdx(entityLevelDepth)]; - if (l != null) - l.remove(toRemove); - } else - toRemove.remove(); - return true; - } - return false; - - case ENTITY: - // these shouldn't occur while loading, becuase the server caches them. But just - // in case, let's make sure. - if (curState == State.LOADING) - System.out.println("CLIENT received entity update while loading level"); - - int entityid = Integer.parseInt(alldata.substring(0, alldata.indexOf(";"))); - // if (Game.debug) System.out.println("CLIENT: received entity update for: " + - // entityid); - String updates = alldata.substring(alldata.indexOf(";") + 1); - if (entityid == Game.player.eid) { - Game.player.update(updates); - return true; - } - Entity entity = Network.getEntity(entityid); - if (entity == null) { - // System.err.println("CLIENT: couldn't find entity specified to update: " + - // entityid + "; could not apply updates: " + updates); - if (entityRequests.containsKey(entityid) - && (System.nanoTime() - entityRequests.get(entityid)) / 1E8 > 15L) { // this will make it so - // that there has to be at - // least 1.5 seconds - // between each time a - // certain entity is - // requested. Also, it - // won't request the entity - // the first time around; - // it has to wait a bit - // after the first attempt - // before it will actually - // request it. - sendData(InputType.ENTITY, String.valueOf(entityid)); - entityRequests.put(entityid, System.nanoTime()); - } else if (!entityRequests.containsKey(entityid)) - entityRequests.put(entityid, (long) (System.nanoTime() - 7L * 1E8)); // should "advance" the time so - // that it only takes 0.8 - // seconds after the first - // attempt to issue the actual - // request. - return false; - } else if (!((RemotePlayer) Game.player).shouldSync(entity.x >> 4, entity.y >> 4, entity.getLevel())) { - // the entity is out of sync range; but not necessarily out of the tracking - // range, so it's *not* removed from the level here. - return false; - } else if (!((RemotePlayer) Game.player).shouldTrack(entity.x >> 4, entity.y >> 4, entity.getLevel())) { - // the entity is out of tracking range, and so may as well be removed from the - // level. - entity.remove(); - return false; - } - entity.update(updates); - return true; - - case PLAYER: - // if (Game.debug) System.out.println("CLIENT: received player packet"); - String[] playerparts = alldata.split("\\n"); - List playerinfo = Arrays.asList(playerparts[1].split(",")); - List playerinv = Arrays.asList(playerparts[2].split(",")); - Load load = new Load(new Version(playerparts[0])); - if (Game.debug) - System.out.println("CLIENT: setting player vars from packet..."); - - if (!(playerinv.size() == 1 && playerinv.get(0).equals("null"))) - load.loadInventory(Game.player.getInventory(), playerinv); - load.loadPlayer(Game.player, playerinfo); - - if (curState == State.RESPAWNING) - changeState(State.LOADING); // load the new data - return true; - - case SAVE: - if (Game.debug) - System.out.println("CLIENT: received save request"); - // send back the player data. - if (Game.debug) - System.out.println("CLIENT: sending save data"); - sendData(InputType.SAVE, Game.player.getPlayerData()); - return true; - - case NOTIFY: - if (Game.debug) - System.out.println("CLIENT: received notification"); - if (curState != State.PLAY) - return true; // ignoring for now - int notetime = Integer.parseInt(alldata.substring(0, alldata.indexOf(";"))); - String note = alldata.substring(alldata.indexOf(";") + 1); - Game.notifications.add(note); - Updater.notetick = notetime; - return true; - - case CHESTOUT: - if (curState != State.PLAY) - return false; // shouldn't happen. - Item item = Items.get(data[0]); - int idx = Integer.parseInt(data[1]); - Inventory playerInv = Game.player.getInventory(); - if (idx > playerInv.invSize()) - idx = playerInv.invSize(); - // if (Game.debug) System.out.println("CLIENT: received chestout with item: " + - // item); - if (!Game.isMode("creative")) { - Game.player.getInventory().add(idx, item); - if (Game.getMenu() instanceof ContainerDisplay) - ((ContainerDisplay) Game.getMenu()).onInvUpdate(Game.player); - } - // if (Game.debug) System.out.println("CLIENT successfully took " + item + " - // from chest and added to inv."); - return true; - - case ADDITEMS: - Inventory inv = Game.player.getInventory(); - for (String itemStr : data) - inv.add(Items.get(itemStr)); - return true; - - case INTERACT: - // the server went through with the interaction, and has sent back the new - // activeItem. - Game.player.activeItem = Items.get(alldata, true); - Game.player.resolveHeldItem(); - return true; - - case PICKUP: - if (curState != State.PLAY) - return false; // shouldn't happen. - int ieid = Integer.parseInt(alldata); - // if (Game.debug) System.out.println("CLIENT: received pickup approval for: " + - // ieid); - Entity ie = Network.getEntity(ieid); - if (ie == null || !(ie instanceof ItemEntity)) { - System.err.println( - "CLIENT error with PICKUP response: specified entity does not exist or is not an ItemEntity: " - + ieid); - return false; - } - Game.player.pickupItem((ItemEntity) ie); - return true; - - case POTION: - boolean addEffect = Boolean.parseBoolean(data[0]); - int typeIdx = Integer.parseInt(data[1]); - PotionItem.applyPotion(Game.player, PotionType.values[typeIdx], addEffect); - return true; - - case HURT: - // the player got attacked. - // if(Game.debug) System.out.println("CLIENT: received hurt packet"); - int hurteid = Integer.parseInt(data[0]); - int damage = Integer.parseInt(data[1]); - Direction attackDir = Direction.values[Integer.parseInt(data[2])]; - Entity p = Network.getEntity(hurteid); - if (p instanceof Player) - ((Player) p).hurt(damage, attackDir); - return true; - - case STAMINA: - Game.player.payStamina(Integer.parseInt(alldata)); - return true; - - case STOPFISHING: - int stopeid = Integer.parseInt(data[0]); - Entity player = Network.getEntity(stopeid); - if (player instanceof Player) { - ((Player) player).isFishing = false; - ((Player) player).fishingTicks = ((Player) player).maxFishingTicks; - } - return true; - } - - // System.out.println("CLIENT: received unexpected packet type " + inType + "; - // ignoring packet."); - return false; // this isn't reached by anything, unless it's some packet type we aren't - // looking for. So in that case, return false. - } - - /// the below methods are all about sending data to the server, *not* setting - /// any game values. - - // public void move(Player player) { move(player, player.x, player.y); } - public void move(Player player, int x, int y) { - // if(Game.debug) System.out.println("CLIENT: sending player movement to - // ("+player.x+","+player.y+"): " + player); - String movedata = x + ";" + y + ";" + player.dir.ordinal() + ";" + World.lvlIdx(player.getLevel().depth); - sendData(InputType.MOVE, movedata); - } - - /** This is called when the player.attack() method is called. */ - public void requestInteraction(Player player) { - /// I don't think the player parameter is necessary, but it doesn't harm - /// anything. - String itemString = player.activeItem != null ? player.activeItem.getData() : "null"; - sendData(InputType.INTERACT, - itemString + ";" + player.stamina + ";" + player.getInventory().count(Items.arrowItem)); - } - - public void requestTile(Level level, int xt, int yt) { - if (level == null) - return; - sendData(InputType.TILE, level.depth + ";" + xt + ";" + yt); - } - - public void dropItem(Item drop) { - sendData(InputType.DROP, drop.getData()); - } - - public void sendPlayerUpdate(Player player) { - if (player.getUpdates().length() > 0) { - sendData(InputType.PLAYER, player.getUpdates()); - player.flushUpdates(); - } - } - - public void sendPlayerDeath(Player player, DeathChest dc) { - if (player != Game.player && Game.player != null) - return; // this is client is not responsible for that player. - Level level = World.levels[Game.currentLevel]; - level.add(dc); - dc.eid = -1; - String chestData = Save.writeEntity(dc, false); - level.remove(dc); - sendData(InputType.DIE, chestData); - } - - public void requestRespawn() { - changeState(State.RESPAWNING); - } - - public void addToChest(Chest chest, int index, Item item) { - if (chest == null || item == null) - return; - sendData(InputType.CHESTIN, chest.eid + ";" + index + ";" + item.getData()); - } - - public void removeFromChest(Chest chest, int itemIndex, int inputIndex, boolean wholeStack) { - if (chest == null) - return; - sendData(InputType.CHESTOUT, chest.eid + ";" + itemIndex + ";" + wholeStack + ";" + inputIndex); - } - - public void touchDeathChest(Player player, DeathChest chest) { - sendData(InputType.CHESTOUT, chest.eid + ""); - } - - public void pushFurniture(Furniture f, Direction pushDir) { - sendData(InputType.PUSH, String.valueOf(f.eid)); - } - - public void pickupItem(ItemEntity ie) { - if (ie == null) - return; - sendData(InputType.PICKUP, String.valueOf(ie.eid)); - } - - public void sendShirtColor() { - sendData(InputType.SHIRT, Game.player.shirtColor + ""); - } - - public void sendBedRequest(Bed bed) { - sendData(InputType.BED, "true;" + String.valueOf(bed.eid)); - } - - public void sendBedExitRequest() { - sendData(InputType.BED, "false"); - } - - public void requestLevel(int lvlidx) { - if (Game.debug) - System.out.println( - "CLIENT: setting level before request to be sure, from " + Game.currentLevel + " to " + lvlidx); - Game.currentLevel = lvlidx; // just in case. - changeState(State.LOADING); - } - - public boolean checkConnection() { - // if not connected, set menu to error screen - if (!isConnected()) - menu.setError("Lost connection to server."); - return isConnected(); - } - - public void endConnection() { - if (isConnected() && curState == State.PLAY) - sendData(InputType.SAVE, Game.player.getPlayerData()); // try to make sure that the player's info is saved - // before they leave. - - super.endConnection(); - - curState = State.DISCONNECTED; - - // one may end the connection without an error; any errors should be set before - // calling this method, so there's no need to say anything here. - if (Game.debug) - System.out.println("client has ended its connection."); - } - - public boolean isConnected() { - return super.isConnected() && curState != State.DISCONNECTED; - } - - public String toString() { - return "CLIENT"; - } -} + + public static final int DEFAULT_CONNECT_TIMEOUT = 5_000; // in milliseconds + + private MultiplayerDisplay menu; + + private enum State { + LOGIN, LOADING, PLAY, RESPAWNING, DISCONNECTED + } + private State curState = State.DISCONNECTED; + + private HashMap entityRequests = new HashMap<>(); + + private int serverPlayerCount = 0; + + @Nullable + private static Socket openSocket(String hostName, MultiplayerDisplay menu, int connectTimeout) { + InetAddress hostAddress; + Socket socket; + + socket = connectWithSrv(hostName, menu, connectTimeout); + if(socket != null) + return socket; + + if (Game.debug) System.out.println("Getting host address from host name \"" + hostName + "\"..."); + + // check if there's a custom port to connect on + int port = MinicraftProtocol.PORT; + String[] splitHostName = hostName.split(":"); + if (splitHostName.length > 1) { + hostName = splitHostName[0]; + try { + port = Integer.parseInt(splitHostName[1]); + } catch (NumberFormatException exception) { + System.err.println("Invalid port: " + splitHostName[1]); + menu.setError("Invalid port"); + exception.printStackTrace(); + return null; + } + } + + try { + hostAddress = InetAddress.getByName(hostName); + } catch (UnknownHostException ex) { + System.err.println("Don't know about host " + hostName); + menu.setError("host not found"); + ex.printStackTrace(); + return null; + } + + if (Game.debug) System.out.println("Host found. Attempting to open socket..."); + + try { + socket = new Socket(); + socket.connect(new InetSocketAddress(hostAddress, port), connectTimeout); + } catch (IOException ex) { + System.err.println("Problem connecting socket to server:"); + menu.setError(ex.getMessage().replace(" (Connection refused)", "")); + ex.printStackTrace(); + return null; + } + + if (Game.debug) System.out.println("Successfully connected to game server. Returning socket..."); + + return socket; + } + + @Nullable + private static Socket connectWithSrv(String hostName, MultiplayerDisplay menu, int connectTimeout) { + // Perform an SRV lookup to determine if any exist + String query = "_minicraft._tcp." + hostName; + Record[] records; + + try { + records = new Lookup(query, Type.SRV).run(); + } catch(TextParseException e) { + if(Game.debug) System.err.println("Error running SRV lookup on '"+hostName+"', skipping."); + return null; + } + + if(records == null) { + // no records + if(Game.debug) System.out.println("No SRV records found."); + return null; + } + + // record-sorting queue + PriorityQueue queue = new PriorityQueue<>((rec1, rec2) -> { + // get smaller priority + int pComp = Integer.compare(rec1.getPriority(), rec2.getPriority()); + if(pComp != 0) + return pComp; + // get larger weight + int wComp = Integer.compare(rec2.getWeight(), rec1.getWeight()); + if(wComp != 0) + return wComp; + + // else equal + return 0; + }); + + // menu.setWaitMessage("Trying available servers"); + + // run through each record in the right order and try to connect + for(Record record: records) { + if(Game.debug) System.out.println("Found SRV record: "+record.toString()); + SRVRecord srec = (SRVRecord) record; + if(Game.debug) { + System.out.println("SRV record data:"); + System.out.println("Target: '"+srec.getTarget()+"'"); + System.out.println("Port: '"+srec.getPort()+"'"); + System.out.println("Priority: '"+srec.getPriority()+"'"); + System.out.println("Weight: '"+srec.getWeight()+"'"); + } + + queue.add(srec); + } + + // attempt to connect to each record in order of their precedence + int serverIdx = 1; + while(!queue.isEmpty()) { + SRVRecord srec = queue.poll(); + + // remove trailing . + String address = srec.getTarget().toString(); + int port = srec.getPort(); + + menu.setWaitMessage("Trying server "+serverIdx+"/"+records.length); + try { + Socket socket = new Socket(); + socket.connect(new InetSocketAddress(address, port), connectTimeout); + return socket; + } catch (IOException ex) { + System.err.println("Failed to connect to server "+serverIdx+"/"+records.length+": "+ex.getMessage()); + } + serverIdx++; + } + + menu.setWaitMessage("Trying main server"); + + return null; + } + + public MinicraftClient(String username, MultiplayerDisplay menu, String hostName) { this(username, menu, hostName, DEFAULT_CONNECT_TIMEOUT); } + public MinicraftClient(String username, MultiplayerDisplay menu, String hostName, int connectTimeout) { + super("MinicraftClient", openSocket(hostName, menu, connectTimeout)); + this.menu = menu; + Game.ISONLINE = true; + Game.ISHOST = false; + + if (super.isConnected()) { + login(username); + start(); + } + } + + public int getPlayerCount() { return serverPlayerCount; } + + private void changeState(State newState) { + if (Game.debug) System.out.println("CLIENT: Client state change from " + curState + " to " +newState); + curState = newState; + + switch(newState) { + case LOGIN: sendData(InputType.LOGIN, ((RemotePlayer)Game.player).getUsername()+ ";" +Game.VERSION); break; + + case LOADING: + Game.setMenu(menu); + menu.setLoadingMessage("Tiles"); + sendData(InputType.LOAD, String.valueOf(Game.currentLevel)); + break; + + case PLAY: + if (Game.debug) System.out.println("CLIENT: Begin game!"); + World.levels[Game.currentLevel].add(Game.player); + Renderer.readyToRenderGameplay = true; + Game.setMenu(null); + break; + + case RESPAWNING: + Game.setMenu(menu); + menu.setLoadingMessage("Spawnpoint"); + sendData(InputType.RESPAWN, ""); + break; + } + } + + private void login(String username) { + if (Game.debug) System.out.println("CLIENT: Logging in to server..."); + + try { + Game.player = new RemotePlayer(Game.player, true, InetAddress.getLocalHost(), getConnectedPort()); + ((RemotePlayer)Game.player).setUsername(username); + } catch(UnknownHostException ex) { + System.err.println("CLIENT: Could not get localhost address"); + ex.printStackTrace(); + menu.setError("unable to get localhost address"); + } + changeState(State.LOGIN); + } + + /** This method is responsible for parsing all data received by the socket. */ + public boolean parsePacket(InputType inType, String alldata) { + String[] data = alldata.split(";"); + + if (Game.packet_debug) System.out.println("Received:" + inType.toString() + ", " + alldata); + + switch(inType) { + case INVALID: + System.err.println("CLIENT: Received error: " + alldata); + menu.setError(alldata); + endConnection(); + return false; + + case PING: + sendData(InputType.PING, alldata); + return true; + + case LOGIN: + System.err.println("Server tried to login..."); + return false; + + case DISCONNECT: + if (Game.debug) System.out.println("CLIENT: Received disconnect"); + menu.setError("Server Disconnected."); // this sets the menu back to the multiplayer menu, and tells the user what happened. + endConnection(); + return true; + + case GAME: + Settings.set("mode", data[0]); + Updater.setTime(Integer.parseInt(data[1])); + Updater.gamespeed = Float.parseFloat(data[2]); + Updater.pastDay1 = Boolean.parseBoolean(data[3]); + Updater.scoreTime = Integer.parseInt(data[4]); + serverPlayerCount = Integer.parseInt(data[5]); + Bed.setPlayersAwake(Integer.parseInt(data[6])); + + if (Game.isMode("creative")) + Items.fillCreativeInv(Game.player.getInventory(), false); + + return true; + + case INIT: + + // server has validated ability to join + if (curState != State.LOGIN) { + return false; + } + + changeState(State.LOADING); + //curState = State.LOADING; // I don't want to do the change state sequence quite yet. + menu.setLoadingMessage("World"); + + String[] infostrings = alldata.split(","); + int[] info = new int[infostrings.length]; + for (int i = 0; i < info.length; i++) + info[i] = Integer.parseInt(infostrings[i]); + Game.player.eid = info[0]; + World.lvlw = info[1]; + World.lvlh = info[2]; + World.currentLevel = info[3]; + Game.player.x = info[4]; + Game.player.y = info[5]; + return true; + + case TILES: + if (curState != State.LOADING) { // ignore + if (Game.debug) System.out.println("Ignoring level tile data because client state is not LOADING: " + curState); + return false; + } + if (Game.debug) System.out.println("CLIENT: Received tiles for level " + World.currentLevel); + + Level level = World.levels[World.currentLevel]; // receive tiles. + if (level == null) { + int lvldepth = World.idxToDepth[World.currentLevel]; + World.levels[World.currentLevel] = level = new Level(World.lvlw, World.lvlh, lvldepth, World.levels[World.lvlIdx(lvldepth+1)], false); + } + + String[] tilestrs = alldata.split(","); + byte[] tiledata = new byte[tilestrs.length]; + for (int i = 0; i < tiledata.length; i++) + tiledata[i] = Byte.parseByte(tilestrs[i]); + + if (tiledata.length / 2 > level.tiles.length) { + System.err.println("CLIENT ERROR: Received level tile data is too long for world size; level.tiles.length=" + level.tiles.length + ", tiles in data: " + (tiledata.length / 2) + ". Will truncate tile loading."); + } + + for (int i = 0; i < tiledata.length/2 && i < level.tiles.length; i++) { + level.tiles[i] = tiledata[i*2]; + level.data[i] = tiledata[i*2+1]; + } + + menu.setLoadingMessage("Entities"); + + if (World.onChangeAction != null) { + World.onChangeAction.act(); + World.onChangeAction = null; + } + + return true; + + case ENTITIES: + if (curState != State.LOADING) {// ignore + System.out.println("Ignoring level entity data because client state is not LOADING: " + curState); + return false; + } + + if (Game.debug) System.out.println("CLIENT: Received entities"); + Level curLevel = World.levels[Game.currentLevel]; + Game.player.setLevel(curLevel, Game.player.x, Game.player.y); // so the shouldTrack() calls check correctly. + + String[] entities = alldata.split(","); + for (String entityString: entities) { + if (entityString.length() == 0) continue; + + if (Game.debug) System.out.println("CLIENT: Loading entity: " + entityString); + Load.loadEntity(entityString, false); + } + + // Ready to start game now. + changeState(State.PLAY); // This will be set before the client receives any cached entities, so that should work out. + return true; + + case TILE: + Level theLevel = World.levels[Integer.parseInt(data[0])]; + if (theLevel == null) return false; // ignore, this is for an unvisited level. + int pos = Integer.parseInt(data[1]); + theLevel.tiles[pos] = Byte.parseByte(data[2]); + theLevel.data[pos] = Byte.parseByte(data[3]); + return true; + + case ADD: + if (curState == State.LOADING) + System.out.println("CLIENT: Received entity addition while loading level"); + + if (alldata.length() == 0) { + System.err.println("CLIENT WARNING: Received entity addition is blank..."); + return false; + } + + Entity addedEntity = Load.loadEntity(alldata, false); + if (addedEntity != null) { + if (addedEntity.eid == Game.player.eid) { + if (Game.debug) System.out.println("CLIENT: Added main game player back to level based on add packet"); + World.levels[Game.currentLevel].add(Game.player); + Bed.removePlayer(Game.player); + } + + entityRequests.remove(addedEntity.eid); + } + + return true; + + case REMOVE: + if (curState == State.LOADING) + System.out.println("CLIENT: Received entity removal while loading level"); + + int eid = Integer.parseInt(data[0]); + Integer entityLevelDepth; + if (data.length > 1) + entityLevelDepth = Integer.parseInt(data[1]); + else + entityLevelDepth = null; + + Entity toRemove = Network.getEntity(eid); + if (toRemove != null) { + if (entityLevelDepth != null && toRemove.getLevel() != null && toRemove.getLevel().depth != entityLevelDepth) { + if (Game.debug) System.out.println("CLIENT: Not removing entity " + toRemove + " because it is not on the specified level depth, " + entityLevelDepth + "; current depth = " + toRemove.getLevel().depth + ". Removing from specified level only..."); + Level l = World.levels[World.lvlIdx(entityLevelDepth)]; + if (l != null) + l.remove(toRemove); + } + else + toRemove.remove(); + return true; + } + return false; + + case ENTITY: // TODO: Make this method easier to look at + // these shouldn't occur while loading, becuase the server caches them. But just in case, let's make sure. + if (curState == State.LOADING) + System.out.println("CLIENT: Received entity update while loading level"); + + int entityid = Integer.parseInt(alldata.substring(0, alldata.indexOf(";"))); + String updates = alldata.substring(alldata.indexOf(";")+1); + if (entityid == Game.player.eid) { + Game.player.update(updates); + return true; + } + Entity entity = Network.getEntity(entityid); + if (entity == null) { + if (entityRequests.containsKey(entityid) && (System.nanoTime() - entityRequests.get(entityid))/1E8 > 15L) { // this will make it so that there has to be at least 1.5 seconds between each time a certain entity is requested. Also, it won't request the entity the first time around; it has to wait a bit after the first attempt before it will actually request it. + sendData(InputType.ENTITY, String.valueOf(entityid)); + entityRequests.put(entityid, System.nanoTime()); + } + else if (!entityRequests.containsKey(entityid)) + entityRequests.put(entityid, (long)(System.nanoTime() - 7L*1E8)); // should "advance" the time so that it only takes 0.8 seconds after the first attempt to issue the actual request. + return false; + } + else if (!((RemotePlayer)Game.player).shouldSync(entity.x >> 4, entity.y >> 4, entity.getLevel())) { // the entity is out of sync range; but not necessarily out of the tracking range, so it's *not* removed from the level here. + return false; + } + else if (!((RemotePlayer)Game.player).shouldTrack(entity.x >> 4, entity.y >> 4, entity.getLevel())) { // the entity is out of tracking range, and so may as well be removed from the level. + entity.remove(); + return false; + } + entity.update(updates); + return true; + + case PLAYER: + String[] playerparts = alldata.split("\\n"); + List playerinfo = Arrays.asList(playerparts[1].split(",")); + List playerinv = Arrays.asList(playerparts[2].split(",")); + Load load = new Load(new Version(playerparts[0])); + if (Game.debug) System.out.println("CLIENT: Setting player vars from packet..."); + + if (!(playerinv.size() == 1 && playerinv.get(0).equals("null"))) + load.loadInventory(Game.player.getInventory(), playerinv); + load.loadPlayer(Game.player, playerinfo); + + if (curState == State.RESPAWNING) + changeState(State.LOADING); // load the new data + return true; + + case SAVE: + if (Game.debug) System.out.println("CLIENT: Received save request"); + if (Game.debug) System.out.println("CLIENT: Sending save data"); + sendData(InputType.SAVE, Game.player.getPlayerData()); // send back the player data. + return true; + + case NOTIFY: + if (Game.debug) System.out.println("CLIENT: Received notification"); + if (curState != State.PLAY) return true; // ignoring for now + int notetime = Integer.parseInt(alldata.substring(0, alldata.indexOf(";"))); + String note = alldata.substring(alldata.indexOf(";")+1); + Game.notifications.add(note); + Updater.notetick = notetime; + return true; + + case CHESTOUT: + if (curState != State.PLAY) return false; // shouldn't happen. + Item item = Items.get(data[0]); + int idx = Integer.parseInt(data[1]); + Inventory playerInv = Game.player.getInventory(); + if (idx > playerInv.invSize()) + idx = playerInv.invSize(); + if (!Game.isMode("creative")) { + Game.player.getInventory().add(idx, item); + if (Game.getMenu() instanceof ContainerDisplay) + ((ContainerDisplay)Game.getMenu()).onInvUpdate(Game.player); + } + return true; + + case ADDITEMS: + Inventory inv = Game.player.getInventory(); + for (String itemStr: data) + inv.add(Items.get(itemStr)); + return true; + + case INTERACT: + // the server went through with the interaction, and has sent back the new activeItem. + Game.player.activeItem = Items.get(alldata, true); + Game.player.resolveHeldItem(); + return true; + + case PICKUP: + if (curState != State.PLAY) return false; // shouldn't happen. + int ieid = Integer.parseInt(alldata); + Entity ie = Network.getEntity(ieid); + if (ie == null || !(ie instanceof ItemEntity)) { + System.err.println("CLIENT: Error with PICKUP response: specified entity does not exist or is not an ItemEntity: " + ieid); + return false; + } + Game.player.pickupItem((ItemEntity)ie); + return true; + + case POTION: + boolean addEffect = Boolean.parseBoolean(data[0]); + int typeIdx = Integer.parseInt(data[1]); + PotionItem.applyPotion(Game.player, PotionType.values[typeIdx], addEffect); + return true; + + case HURT: + // the player got attacked. + int hurteid = Integer.parseInt(data[0]); + int damage = Integer.parseInt(data[1]); + Direction attackDir = Direction.values[Integer.parseInt(data[2])]; + Entity p = Network.getEntity(hurteid); + if (p instanceof Player) + ((Player)p).hurt(damage, attackDir); + return true; + + case STAMINA: + Game.player.payStamina(Integer.parseInt(alldata)); + return true; + + case STOPFISHING: + int stopeid = Integer.parseInt(data[0]); + Entity player = Network.getEntity(stopeid); + if (player instanceof Player) { + ((Player) player).isFishing = false; + ((Player) player).fishingTicks = ((Player) player).maxFishingTicks; + } + return true; + } + return false; // this isn't reached by anything, unless it's some packet type we aren't looking for. So in that case, return false. + } + + // The below methods are all about sending data to the server, *not* setting any game values. + + public void move(Player player, int x, int y) { + String movedata = x+ ";" +y+ ";" +player.dir.ordinal()+ ";" +World.lvlIdx(player.getLevel().depth); + sendData(InputType.MOVE, movedata); + } + + /** This is called when the player.attack() method is called. */ + public void requestInteraction(Player player) { + // I don't think the player parameter is necessary, but it doesn't harm anything. + String itemString = player.activeItem != null ? player.activeItem.getData() : "null"; + sendData(InputType.INTERACT, itemString+ ";" +player.stamina+ ";" +player.getInventory().count(Items.arrowItem)); + } + + public void requestTile(Level level, int xt, int yt) { + if (level == null) return; + sendData(InputType.TILE, level.depth+ ";" +xt+ ";" +yt); + } + + public void dropItem(Item drop) { sendData(InputType.DROP, drop.getData()); } + + public void sendPlayerUpdate(Player player) { + if (player.getUpdates().length() > 0) { + sendData(InputType.PLAYER, player.getUpdates()); + player.flushUpdates(); + } + } + + public void sendPlayerDeath(Player player, DeathChest dc) { + if (player != Game.player && Game.player != null) return; // this is client is not responsible for that player. + Level level = World.levels[Game.currentLevel]; + level.add(dc); + dc.eid = -1; + String chestData = Save.writeEntity(dc, false); + level.remove(dc); + sendData(InputType.DIE, chestData); + } + + public void requestRespawn() { changeState(State.RESPAWNING); } + + public void addToChest(Chest chest, int index, Item item) { + if (chest == null || item == null) return; + sendData(InputType.CHESTIN, chest.eid+ ";" +index+ ";" +item.getData()); + } + + public void removeFromChest(Chest chest, int itemIndex, int inputIndex, boolean wholeStack) { + if (chest == null) return; + sendData(InputType.CHESTOUT, chest.eid+ ";" +itemIndex+ ";" +wholeStack+ ";" +inputIndex); + } + + public void touchDeathChest(DeathChest chest) { + sendData(InputType.CHESTOUT, chest.eid+ ""); + } + + public void pushFurniture(Furniture f) { sendData(InputType.PUSH, String.valueOf(f.eid)); } + + public void pickupItem(ItemEntity ie) { + if (ie == null) return; + sendData(InputType.PICKUP, String.valueOf(ie.eid)); + } + + public void sendShirtColor() { sendData(InputType.SHIRT, Game.player.shirtColor+ ""); } + + public void sendBedRequest(Bed bed) { sendData(InputType.BED, "true;" + bed.eid); } + public void sendBedExitRequest() { sendData(InputType.BED, "false"); } + + public void requestLevel(int lvlidx) { + if (Game.debug) System.out.println("CLIENT: Setting level before request to be sure, from " +Game.currentLevel+ " to " +lvlidx); + Game.currentLevel = lvlidx; // just in case. + changeState(State.LOADING); + } + + public boolean checkConnection() { + // if not connected, set menu to error screen + if (!isConnected()) + menu.setError("Lost connection to server."); + return isConnected(); + } + + public void endConnection() { + if (isConnected() && curState == State.PLAY) + sendData(InputType.SAVE, Game.player.getPlayerData()); // try to make sure that the player's info is saved before they leave. + + super.endConnection(); + + curState = State.DISCONNECTED; + + // one may end the connection without an error; any errors should be set before calling this method, so there's no need to say anything here. + if (Game.debug) System.out.println("Client has ended its connection."); + } + + public boolean isConnected() { return super.isConnected() && curState != State.DISCONNECTED; } + + public String toString() { return "CLIENT"; } +} \ No newline at end of file diff --git a/src/minicraft/network/MinicraftConnection.java b/src/minicraft/network/MinicraftConnection.java index 33c67364..1f810ce1 100644 --- a/src/minicraft/network/MinicraftConnection.java +++ b/src/minicraft/network/MinicraftConnection.java @@ -14,149 +14,123 @@ import minicraft.item.PotionType; public abstract class MinicraftConnection extends Thread implements MinicraftProtocol { - - private PrintWriter out; - private BufferedReader in; - private Socket socket; - - protected MinicraftConnection(String threadName, @Nullable Socket socket) { - super(threadName); - this.socket = socket; - - if (socket == null) - return; - - try { - in = new BufferedReader(new InputStreamReader(socket.getInputStream())); - out = new PrintWriter(socket.getOutputStream(), true); - } catch (IOException ex) { - System.err.println("failed to initialize i/o streams for socket:"); - ex.printStackTrace(); - } catch (NullPointerException ex) { - System.err.println("CONNECTION ERROR: null socket, cannot initialize i/o streams..."); - ex.printStackTrace(); - } - } - - public void run() { - if (Game.debug) - System.out.println("starting " + this); - - StringBuilder currentData = new StringBuilder(); - - while (isConnected()) { - int read = -2; - - try { - read = in.read(); - } catch (IOException ex) { - System.err.println( - this + " had a problem reading its input stream (will continue trying): " + ex.getMessage()); - ex.printStackTrace(); - } - - if (read < 0) { - if (Game.debug) - System.out.println(this + " reached end of input stream."); - break; - } - - // if (Game.debug) System.out.println(this + " successfully read character from - // input stream: " + read); - - if (read > 0) { // if it is valid character that is not the null character, then add it to the - // string. - currentData.append((char) read); - } else if (currentData.length() > 0) { // read MUST equal 0 at this point, aka a null character; the if - // statement makes it ignore sequential null characters. - - // if (Game.debug) System.out.println(this + " completed data packet: " + - // currentData); - - InputType inType = MinicraftProtocol.getInputType(currentData.charAt(0)); - - if (inType == null) - System.err.println("SERVER: invalid packet received; input type is not valid."); - else - parsePacket(inType, currentData.substring(1)); - - currentData = new StringBuilder(); - // if (Game.debug) System.out.println(this + " cleared currentData."); - } - } - - if (Game.debug) - System.out.println("run loop ended for " + this + "; ending connection."); - - endConnection(); - } - - protected int getConnectedPort() { - return socket.getPort(); - } - - protected abstract boolean parsePacket(InputType inType, String data); - - protected void sendData(InputType inType, String data) { - if (socket == null) - return; - - if (Game.packet_debug && Game.isConnectedClient()) - System.out.println("Sent:" + inType.toString() + ", " + data); - - char inTypeChar = (char) (inType.ordinal() + 1); - // if (Game.debug && inType == InputType.TILES) System.out.println(this + ": - // printing " + inType + " data:"); - if (data.contains("\0")) - System.err.println("WARNING from " + this + ": data to send contains a null character. Not sending data."); - else { - out.print(inTypeChar + data + '\0'); - out.flush(); - } - } - - @NotNull - public static String stringToInts(String str) { - return stringToInts(str, str.length()); - } - - @NotNull - public static String stringToInts(String str, int maxLength) { - int[] chars = new int[Math.min(str.length(), maxLength)]; - - for (int i = 0; i < chars.length; i++) - chars[i] = (int) str.charAt(i); - - return Arrays.toString(chars); - } - - /// there are a couple methods that are identical in both a server thread, and - /// the client, so I'll just put them here. - - public void sendNotification(String note, int notetime) { - sendData(InputType.NOTIFY, notetime + ";" + note); - } - - public void sendPotionEffect(PotionType type, boolean addEffect) { - sendData(InputType.POTION, addEffect + ";" + type.ordinal()); - } - - public void endConnection() { - if (socket != null && !socket.isClosed()) { - if (Game.debug) - System.out.println("closing socket and ending connection for: " + this); - - sendData(InputType.DISCONNECT, ""); - - try { - socket.close(); - } catch (IOException ignored) { - } - } - } - - public boolean isConnected() { - - return socket != null && !socket.isClosed() && socket.isConnected(); - } -} + + private PrintWriter out; + private BufferedReader in; + private Socket socket; + + protected MinicraftConnection(String threadName, @Nullable Socket socket) { + super(threadName); + this.socket = socket; + + if (socket == null) return; + + try { + in = new BufferedReader(new InputStreamReader(socket.getInputStream())); + out = new PrintWriter(socket.getOutputStream(), true); + } catch (IOException ex) { + System.err.println("Failed to initialize i/o streams for socket:"); + ex.printStackTrace(); + } catch (NullPointerException ex) { + System.err.println("CONNECTION ERROR: null socket, cannot initialize i/o streams..."); + ex.printStackTrace(); + } + } + + public void run() { + if (Game.debug) System.out.println("Starting " + this); + + StringBuilder currentData = new StringBuilder(); + + while(isConnected()) { + int read = -2; + + try { + read = in.read(); + } catch (IOException ex) { + System.err.println(this + " had a problem reading its input stream (will continue trying): " + ex.getMessage()); + ex.printStackTrace(); + } + + if (read < 0) { + if (Game.debug) System.out.println(this + " reached end of input stream."); + break; + } + + if (read > 0) { // if it is valid character that is not the null character, then add it to the string. + currentData.append( (char)read ); + } + else if (currentData.length() > 0) { // read MUST equal 0 at this point, aka a null character; the if statement makes it ignore sequential null characters. + + InputType inType = MinicraftProtocol.getInputType(currentData.charAt(0)); + + if (inType == null) + System.err.println("SERVER: invalid packet received; input type is not valid."); + else + parsePacket(inType, currentData.substring(1)); + + currentData = new StringBuilder(); + } + } + + if (Game.debug) System.out.println("Run loop ended for " + this + "; ending connection."); + + endConnection(); + } + + protected int getConnectedPort() { + return socket.getPort(); + } + + protected abstract boolean parsePacket(InputType inType, String data); + + protected void sendData(InputType inType, String data) { + if (socket == null) return; + + if (Game.packet_debug && Game.isConnectedClient()) System.out.println("Sent:" + inType.toString() + ", " + data); + + char inTypeChar = (char) (inType.ordinal() + 1); + if (data.contains("\0")) System.err.println("WARNING from " + this + ": data to send contains a null character. Not sending data."); + else { + out.print(inTypeChar + data + '\0'); + out.flush(); + } + } + + @NotNull + public static String stringToInts(String str, int maxLength) { + int[] chars = new int[Math.min(str.length(), maxLength)]; + + for (int i = 0; i < chars.length; i++) + chars[i] = (int) str.charAt(i); + + return Arrays.toString(chars); + } + + // there are a couple methods that are identical in both a server thread, and the client, so I'll just put them here. + + public void sendNotification(String note, int notetime) { + sendData(InputType.NOTIFY, notetime+ ";" + note); + } + + public void sendPotionEffect(PotionType type, boolean addEffect) { + sendData(InputType.POTION, addEffect+ ";" + type.ordinal()); + } + + public void endConnection() { + if (socket != null && !socket.isClosed()) { + if (Game.debug) System.out.println("Closing socket and ending connection for: " + this); + + sendData(InputType.DISCONNECT, ""); + + try { + socket.close(); + } catch (IOException ignored) { + } + } + } + + public boolean isConnected() { + return socket != null && !socket.isClosed() && socket.isConnected(); + } +} \ No newline at end of file diff --git a/src/minicraft/network/MinicraftProtocol.java b/src/minicraft/network/MinicraftProtocol.java index 59795538..187a3f07 100644 --- a/src/minicraft/network/MinicraftProtocol.java +++ b/src/minicraft/network/MinicraftProtocol.java @@ -5,38 +5,33 @@ import java.util.List; public interface MinicraftProtocol { - - int PORT = 4225; - - enum InputType { - INVALID, PING, USERNAMES, LOGIN, GAME, INIT, LOAD, TILES, ENTITIES, TILE, ENTITY, PLAYER, MOVE, ADD, REMOVE, - DISCONNECT, SAVE, NOTIFY, INTERACT, PUSH, PICKUP, CHESTIN, CHESTOUT, ADDITEMS, BED, POTION, HURT, DIE, RESPAWN, - DROP, STAMINA, SHIRT, STOPFISHING; - - public static final InputType[] values = InputType.values(); - public static final List serverOnly = Arrays.asList(INIT, TILES, ENTITIES, ADD, REMOVE, HURT, GAME, - ADDITEMS, STAMINA, STOPFISHING); - public static final List entityUpdates = Arrays.asList(ENTITY, ADD, REMOVE); - public static final List tileUpdates = Collections.singletonList(TILE); - } - - static InputType getInputType(char idxChar) { - InputType inType; - int idx = idxChar; - idx--; // the "-1" is because 1 is added originally so it does not make a null - // character, which is used to seperate requests. - - if (idx < InputType.values.length && idx >= 0) - inType = InputType.values[idx]; - else { - System.err.println("Communication Error: Socket data has an invalid input type: " + idx); - return null; - } - - return inType; - } - - void endConnection(); - - boolean isConnected(); -} + + int PORT = 4225; + + enum InputType { + INVALID, PING, USERNAMES, LOGIN, GAME, INIT, LOAD, TILES, ENTITIES, TILE, ENTITY, PLAYER, MOVE, ADD, REMOVE, DISCONNECT, SAVE, NOTIFY, INTERACT, PUSH, PICKUP, CHESTIN, CHESTOUT, ADDITEMS, BED, POTION, HURT, DIE, RESPAWN, DROP, STAMINA, SHIRT, STOPFISHING; + + public static final InputType[] values = InputType.values(); + public static final List serverOnly = Arrays.asList(INIT, TILES, ENTITIES, ADD, REMOVE, HURT, GAME, ADDITEMS, STAMINA, STOPFISHING); + public static final List entityUpdates = Arrays.asList(ENTITY, ADD, REMOVE); + public static final List tileUpdates = Collections.singletonList(TILE); + } + + static InputType getInputType(char idxChar) { + InputType inType; + int idx = idxChar; + idx--; // the "-1" is because 1 is added originally so it does not make a null character, which is used to seperate requests. + + if(idx < InputType.values.length && idx >= 0) + inType = InputType.values[idx]; + else { + System.err.println("Communication Error: Socket data has an invalid input type: " + idx); + return null; + } + + return inType; + } + + void endConnection(); + boolean isConnected(); +} \ No newline at end of file diff --git a/src/minicraft/network/MinicraftServer.java b/src/minicraft/network/MinicraftServer.java index e4692c64..dac26ecb 100644 --- a/src/minicraft/network/MinicraftServer.java +++ b/src/minicraft/network/MinicraftServer.java @@ -43,896 +43,785 @@ import minicraft.screen.WorldSelectDisplay; public class MinicraftServer extends Thread implements MinicraftProtocol { - - class MyTask extends TimerTask { - public MyTask() { - } - - public void run() { - } - } - - private static final int UPDATE_INTERVAL = 10; // measured in seconds - - private final int port; - - private List threadList = Collections.synchronizedList(new ArrayList<>()); - private ServerSocket socket; - - private RemotePlayer hostPlayer = null; - private String worldPath; - - private int playerCap = 10; - - public MinicraftServer(int port) { - super("MinicraftServer"); - - this.port = port; - - Game.ISONLINE = true; - Game.ISHOST = true; // just in case. - Game.player.remove(); // the server has no player... - - worldPath = Game.gameDir + "/saves/" + WorldSelectDisplay.getWorldName(); - - try { - System.out.println("Opening server socket..."); - socket = new ServerSocket(port); - start(); - } catch (IOException ex) { - System.err.println("Failed to open server socket on port " + port); - ex.printStackTrace(); - } - - } - - public void run() { - if (Game.debug) - System.out.println("Server started."); - - Timer gameUpdateTimer = new Timer("GameUpdateTimer"); - gameUpdateTimer.schedule((new MyTask() { - public void run() { - updateGameVars(); - } - }), 5000, UPDATE_INTERVAL * 1000); - - try { - while (socket != null) { - MinicraftServerThread mst = new MinicraftServerThread(socket.accept(), this); - if (mst.isConnected()) - threadList.add(mst); - } - } catch (SocketException ex) { // this should occur when closing the thread. - } catch (IOException ex) { - System.err.println("Server socket encountered an error while attempting to listen on port " + port + ":"); - ex.printStackTrace(); - } - - gameUpdateTimer.cancel(); - System.out.println("Closing server socket"); - - endConnection(); - } - - public String getWorldPath() { - return worldPath; - } - - public int getPlayerCap() { - return playerCap; - } - - public void setPlayerCap(int val) { - playerCap = Math.max(val, -1); // no need to set it to anything below -1. - } - - public boolean isFull() { - return playerCap >= 0 && threadList.size() >= playerCap; - } - - public int getNumPlayers() { - return threadList.size(); - } - - public MinicraftServerThread[] getThreads() { - return threadList.toArray(new MinicraftServerThread[threadList.size()]); - } - - public String[] getClientInfo() { - List playerStrings = new ArrayList<>(); - for (MinicraftServerThread serverThread : getThreads()) { - RemotePlayer clientPlayer = serverThread.getClient(); - - playerStrings.add(clientPlayer.getUsername() + ": " + clientPlayer.getIpAddress().getHostAddress() - + (Game.debug ? " (" + (clientPlayer.x >> 4) + "," + (clientPlayer.y >> 4) + ")" : "")); - } - - return playerStrings.toArray(new String[0]); - } - - public List getPlayersInRange(Entity e, boolean useTrackRange) { - if (e == null || e.getLevel() == null) - return new ArrayList<>(); - int xt = e.x >> 4, yt = e.y >> 4; - return getPlayersInRange(e.getLevel(), xt, yt, useTrackRange); // NOTE if "e" is a RemotePlayer, the list - // returned *will* contain "e". - } - - public List getPlayersInRange(Level level, int xt, int yt, boolean useTrackRange) { - List players = new ArrayList<>(); - for (MinicraftServerThread thread : getThreads()) { - RemotePlayer rp = thread.getClient(); - if (useTrackRange && rp.shouldTrack(xt, yt, level) || !useTrackRange && rp.shouldSync(xt, yt, level)) - players.add(rp); - } - - return players; - } - - @Nullable - private RemotePlayer getIfPlayer(Entity e) { - if (e instanceof RemotePlayer) { - return (RemotePlayer) e; - } else - return null; - } - - @Nullable - public MinicraftServerThread getAssociatedThread(String username) { - MinicraftServerThread match = null; - - for (MinicraftServerThread thread : getThreads()) { - if (thread.getClient().getUsername().equalsIgnoreCase(username)) { - match = thread; - break; - } - } - - return match; - } - - public List getAssociatedThreads(String[] usernames, boolean printError) { - List threads = new ArrayList<>(); - for (String username : usernames) { - MinicraftServerThread match = getAssociatedThread(username); - if (match != null) - threads.add(match); - else if (printError) - System.err.println("Couldn't match username \"" + username + "\""); - } - - return threads; - } - - @NotNull - public MinicraftServerThread getAssociatedThread(RemotePlayer player) { - MinicraftServerThread thread = null; - - for (MinicraftServerThread curThread : getThreads()) { - if (curThread.getClient() == player) { - thread = curThread; - break; - } - } - - if (thread == null) { - System.err.println("SERVER: Could not find thread for remote player " + player); - thread = new MinicraftServerThread(player, this); - } - - return thread; - } - - private List getAssociatedThreads(List players) { - List threads = new ArrayList<>(); - - // NOTE I could do this the other way around, by looping though the thread list, - // and adding those whose player is found in the given list, which might be - // slightly more optimal... but I think it's better that this tells you when a - // player in the list doesn't have a matching thread. - for (RemotePlayer client : players) { - MinicraftServerThread thread = getAssociatedThread(client); - if (thread.isValid()) - threads.add(thread); - else - System.err.println("SERVER WARNING: Couldn't find server thread for client " + client); - } - - return threads; - } - - public void broadcastEntityUpdate(Entity e) { - broadcastEntityUpdate(e, false); - } - - public void broadcastEntityUpdate(Entity e, boolean updateSelf) { - if (e.isRemoved()) { - if (Game.debug) - System.out.println("SERVER: Tried to broadcast update of removed entity: " + e); - return; - } - List players = getPlayersInRange(e, false); - if (!updateSelf) { - players.remove(getIfPlayer(e)); - } - - for (MinicraftServerThread thread : getAssociatedThreads(players)) { - thread.sendEntityUpdate(e, e.getUpdates()); - } - - e.flushUpdates(); // It is important that this method is only called once: right here. - } - - public void broadcastTileUpdate(Level level, int x, int y) { - broadcastData(InputType.TILE, Tile.getData(level.depth, x, y)); - } - - public void broadcastEntityAddition(Entity e) { - broadcastEntityAddition(e, false); - } - - public void broadcastEntityAddition(Entity e, boolean addSelf) { - if (e.isRemoved()) { - if (Game.debug) - System.out.println("SERVER: Tried to broadcast addition of removed entity: " + e); - return; - } - List players = getPlayersInRange(e, true); - if (!addSelf) - players.remove(getIfPlayer(e)); // if "e" is a player, this removes it from the list. - int cnt = 0; - if (Game.debug && e instanceof Player) - System.out.println("SERVER: Broadcasting player addition of " + e); - for (MinicraftServerThread thread : getAssociatedThreads(players)) { - thread.sendEntityAddition(e); - cnt++; - } - if (Game.debug && e instanceof Player) - System.out.println("SERVER: Broadcasted player addition of " + e + " to " + cnt + " clients"); - } - - private List getPlayersToRemove(Entity e, boolean removeSelf) { - List players = getPlayersInRange(e, true); - if (players.size() == 0) - return players; - if (Game.debug && e instanceof Player) { - System.out.println("SERVER: Sending removal of player " + e + " to " + players.size() - + " players (may remove equal player): "); - for (RemotePlayer rp : players) - System.out.println(rp); - } - - if (!removeSelf) - players.remove(getIfPlayer(e)); // if "e" is a player, this removes it from the list. - - if (Game.debug && e instanceof Player) - System.out.println("...now sending player removal to " + players.size() + " players."); - - return players; - } - - // remove only if on given level - public void broadcastEntityRemoval(Entity e, Level level, boolean removeSelf) { - List players = getPlayersToRemove(e, removeSelf); - - if (level == null) { - if (Game.debug) - System.out.println("SERVER: Cannot remove entity " + e - + " from specified level, level given is null; ignoring request to broadcast entity removal."); - return; - } - - for (MinicraftServerThread thread : getAssociatedThreads(players)) - thread.sendEntityRemoval(e.eid, level.depth); - } - - // remove regardless of level - public void broadcastEntityRemoval(Entity e, boolean removeSelf) { - List players = getPlayersToRemove(e, removeSelf); - - for (MinicraftServerThread thread : getAssociatedThreads(players)) - thread.sendEntityRemoval(e.eid); - } - - public void saveWorld() { - broadcastData(InputType.SAVE, ""); // tell all the other clients to send their data over to be saved. - new Save(WorldSelectDisplay.getWorldName()); - System.out.println("World saved"); - } - - public void broadcastNotification(String note, int notetime) { - String data = notetime + ";" + note; - broadcastData(InputType.NOTIFY, data); - } - - public void broadcastPlayerHurt(int eid, int damage, Direction attackDir) { - for (MinicraftServerThread thread : getThreads()) - thread.sendPlayerHurt(eid, damage, attackDir); - } - - public void broadcastStopFishing(int eid) { - for (MinicraftServerThread thread : getThreads()) - thread.sendStopFishing(eid); - } - - public void updateGameVars() { - updateGameVars(getThreads()); - } - - public void updateGameVars(MinicraftServerThread sendTo) { - updateGameVars(new MinicraftServerThread[] { sendTo }); - } - - public void updateGameVars(MinicraftServerThread[] sendTo) { - // if (Game.debug) System.out.println("SERVER: updating game vars..."); - if (sendTo.length == 0) - return; - - String[] varArray = { Settings.get("mode").toString(), Updater.tickCount + "", Updater.gamespeed + "", - Updater.pastDay1 + "", Updater.scoreTime + "", getNumPlayers() + "", Bed.getPlayersAwake() + "" }; - - String vars = String.join(";", varArray); - - for (MinicraftServerThread thread : sendTo) - thread.sendData(InputType.GAME, vars); - } - - public void pingClients() { - System.out.println("Pinging clients (" + threadList.size() + " connected)..."); - for (MinicraftServerThread thread : getThreads()) - thread.doPing(); - } - - protected File[] getRemotePlayerFiles() { - File saveFolder = new File(worldPath); - - File[] clientSaves = saveFolder.listFiles((file, name) -> name.startsWith("RemotePlayer")); - - if (clientSaves == null) - clientSaves = new File[0]; - - return clientSaves; - } - - boolean parsePacket(MinicraftServerThread serverThread, InputType inType, String alldata) { - String[] data = alldata.split(";"); - - RemotePlayer clientPlayer = serverThread.getClient(); - if (clientPlayer == null) { - System.err.println("CRITICAL SERVER ERROR: Server thread client is null: " + serverThread - + "; cannot parse the received " + inType + " packet: " + alldata); - return false; - } - - // handle reports of type INVALID - if (inType == InputType.INVALID) { - if (Game.debug) - System.out.println(serverThread + " received an error:"); - System.err.println(alldata); - return false; - } - - if (InputType.serverOnly.contains(inType)) { - /// these are ALL illegal for a client to send. - System.err.println( - "SERVER WARNING: Client " + clientPlayer + " sent illegal packet type " + inType + " to server."); - return false; - } - - switch (inType) { - case PING: - System.out.println("Received ping from " + serverThread); - return true; - - case LOGIN: - if (Game.debug) - System.out.println("SERVER: Received login request"); - if (Game.debug) - System.out.println("SERVER: Login data: " + Arrays.toString(data)); - String username = data[0]; - Version clientVersion = new Version(data[1]); - // check version; send back invalid if they don't match. - if (clientVersion.compareTo(Game.VERSION) != 0) { - serverThread.sendError("Wrong game version; need " + Game.VERSION); - return false; - } - - // check if the same username already exists on the server (due to signing on a - // second time with the same account), and if so, prevent the new login - if (getAssociatedThread(username) != null) { - serverThread.sendError("Account is already logged in to server"); - return false; - } - - // versions match, and username is unique; make client player - clientPlayer.setUsername(username); - - // now, we need to check if this player has played in this world before. If they - // have, then all previous settings and items and such will be restored. - String playerdata = ""; // this stores the data fetched from the files. - - if (serverThread.getClient().getIpAddress().isLoopbackAddress() && hostPlayer == null) { - // this is the first person on localhost. I believe that a second person will be - // saved as a loopback address (later: jk the first one actually will), but a - // third will simply overwrite the second. - if (Game.debug) - System.out.println("SERVER: Host player found"); - - if (Game.player != null) { - // save the player, and then remove it. It is leftover from when this was a - // single player world. - playerdata = Game.player.getPlayerData(); - Game.player.remove(); // all the important data has been saved. - Game.player = null; - } else { - // load the data from file instead. - playerdata = Game.VERSION + "\n"; - try { - playerdata += Load.loadFromFile(worldPath + "/Player" + Save.extension, true) + "\n"; - playerdata += Load.loadFromFile(worldPath + "/Inventory" + Save.extension, true); - } catch (IOException ex) { - System.err.println("SERVER: Server had error while trying to load host player data from file:"); - ex.printStackTrace(); - } - } - - hostPlayer = clientPlayer; - } else { - playerdata = serverThread.getRemotePlayerFileData(); - } - - if (playerdata.length() > 0) { - // if a save file was found, then send the data to the client so they can resume - // where they left off. - // and now, initialize the RemotePlayer instance with the data. - // first get the version that saved the file, which can be different if this is - // a remote player. - String[] saveData = playerdata.split("\\n"); - new Load(new Version(saveData[0])).loadPlayer(clientPlayer, Arrays.asList(saveData[1].split(","))); - // we really don't need to load the inventory. - } else { - clientPlayer.findStartPos(World.levels[World.lvlIdx(0)]); // find a new start pos - // this is a new player. - playerdata = clientPlayer.getPlayerData(); - // save the new player once, immediately. - serverThread.writeClientSave(playerdata); - } - serverThread.sendData(InputType.PLAYER, playerdata); - - // now, we send the INIT_W packet and notify the others clients. - - int playerlvl = World.lvlIdx(clientPlayer.getLevel() != null ? clientPlayer.getLevel().depth : 0); - if (!Arrays.asList(World.levels[playerlvl].getEntityArray()).contains(clientPlayer) - && clientPlayer != hostPlayer) // this will be true if their file was already found, since they are - // added in Load.loadPlayer(). - World.levels[playerlvl].add(clientPlayer); // add to level (**id is generated here**) and also, maybe, - // broadcasted to other players? - - updateGameVars(); - // making INIT_W packet - int[] toSend = { clientPlayer.eid, World.levels[playerlvl].w, World.levels[playerlvl].h, playerlvl, // these - // bottom - // three - // are - // actually - // unnecessary - // because - // of - // the - // previous - // PLAYER - // packet. - clientPlayer.x, clientPlayer.y }; - StringBuilder sendString = new StringBuilder(); - for (int val : toSend) - sendString.append(val).append(","); - // send client world info - if (Game.debug) - System.out.println("SERVER: Sending INIT packet"); - serverThread.sendData(InputType.INIT, sendString.toString()); - return true; - - case LOAD: - if (Game.debug) - System.out.println("SERVER: Received level data request"); - - // send back the tiles in the level specified. - int levelidx = Integer.parseInt(alldata); - - if (levelidx < 0 || levelidx >= World.levels.length) { - System.err.println("SERVER warning: Client " + clientPlayer - + " tried to request tiles from nonexistent level " + levelidx); - serverThread.sendError("Requested level (" + levelidx + ") does not exist."); - return false; - } - - // if it's the same level, it will cancel out. - - byte[] tiledata = new byte[World.levels[levelidx].tiles.length * 2]; - for (int i = 0; i < tiledata.length / 2 - 1; i++) { - tiledata[i * 2] = World.levels[levelidx].tiles[i]; - tiledata[i * 2 + 1] = World.levels[levelidx].data[i]; - } - serverThread.cachePacketTypes(InputType.tileUpdates); - - StringBuilder tiledataString = new StringBuilder(); - for (byte b : tiledata) { - tiledataString.append(b).append(","); - } - serverThread.sendData(InputType.TILES, tiledataString.substring(0, tiledataString.length() - 1)); - serverThread.sendCachedPackets(); - - // move the associated player to the level they requested -- they shouldn't be - // requesting it if they aren't going to transfer to it. - // moved to after the tile data is sent so that the client doesn't try to add - // anything to the level before it gets created. - Level next = World.levels[levelidx]; - if (clientPlayer.getLevel() != null && !next.getTile(clientPlayer.x >> 4, clientPlayer.y >> 4).mayPass(next, - clientPlayer.x >> 4, clientPlayer.y >> 4, clientPlayer)) - clientPlayer.findStartPos(next, false); - - next.add(clientPlayer); - - // send back the entities in the level specified. - - Entity[] entities = World.levels[levelidx].getEntityArray(); - serverThread.cachePacketTypes(InputType.entityUpdates); - - StringBuilder edata = new StringBuilder(); - for (Entity curEntity : entities) { - if (!clientPlayer.shouldTrack(curEntity.x >> 4, curEntity.y >> 4, curEntity.getLevel())) - continue; // this is outside of the player's entity tracking range; doesn't need to know - // about it yet. - String curEntityData = ""; - if (curEntity != clientPlayer) { - curEntityData = Save.writeEntity(curEntity, false) + ","; - if (Game.debug && curEntity instanceof Player) - System.out.println("SERVER: Sending player in ENTITIES packet: " + curEntity); - } - // there is enough space. - if (curEntityData.length() > 1) // 1 b/c of the "," added; this prevents entities that aren't saved from - // causing ",," to appear. - edata.append(curEntityData); - } - - String edataToSend = edata.substring(0, Math.max(0, edata.length() - 1)); // cut off trailing comma - - serverThread.sendData(InputType.ENTITIES, edataToSend); - serverThread.sendCachedPackets(); - - return true; - - case DIE: - if (Game.debug) - System.out.println("Received player death"); - Load.loadEntity(alldata, false); - broadcastEntityRemoval(clientPlayer, true); - return true; - - case RESPAWN: - serverThread.respawnPlayer(); - broadcastEntityAddition(clientPlayer); - // added player; client will request level data when it's ready - return true; - - case DISCONNECT: - serverThread.endConnection(); - return true; - - case DROP: - Item dropped = Items.get(alldata); - Level playerLevel = clientPlayer.getLevel(); - if (playerLevel != null) - playerLevel.dropItem(clientPlayer.x, clientPlayer.y, dropped); - return true; - - case TILE: - int lvlDepth = Integer.parseInt(data[0]); - int xt = Integer.parseInt(data[1]); - int yt = Integer.parseInt(data[2]); - for (int lvly = yt - 1; lvly <= yt + 1; lvly++) - for (int lvlx = xt - 1; lvlx <= xt + 1; lvlx++) - serverThread.sendTileUpdate(lvlDepth, lvlx, lvly); - return true; - - case ENTITY: - // client wants the specified entity sent in an ADD packet, becuase it couldn't - // find that entity upon receiving an ENTITY packet from the server. - int enid = Integer.parseInt(alldata); - Entity entityToSend = Network.getEntity(enid); - if (entityToSend == null) { - /// well THIS would be a problem, I think. Though... Actually, not really. It - /// just means that an entity was removed between the time of sending an update - /// for it, and the client then asking for it to be added. But since it would be - /// useless to add it at this point, we'll just ignore the request. - if (Game.debug) - System.out.println( - "SERVER: Ignoring request to add unknown entity (probably already removed): " + enid); - return false; - } - - if (!clientPlayer.shouldSync(entityToSend.x >> 4, entityToSend.y >> 4, entityToSend.getLevel())) { - // the requested entity is not even in range - return false; - } - if (Game.debug) - System.out.println("SERVER: Sending entity addition via " + serverThread - + " because client requested it: " + entityToSend); - serverThread.sendEntityAddition(entityToSend); - return true; - - case SAVE: - if (Game.debug) - System.out.println("SERVER: Received player save from " + serverThread.getClient()); - // save this client's data to a file. - // first, determine if this is the main player. if not, determine if a file - // already exists for this client. if not, find an available file name. for - // simplicity, we will just count the number of remote player files saved. - - if (clientPlayer == hostPlayer) { - if (Game.debug) - System.out.println("SERVER: Identified SAVE packet client as host"); - String[] parts = alldata.split("\\n"); - List datastrs = new ArrayList<>(); - - Save save = new Save(clientPlayer, false); - datastrs.addAll(Arrays.asList(parts[1].split(","))); - save.writeToFile(save.location + "Player" + Save.extension, datastrs); - datastrs.clear(); - datastrs.addAll(Arrays.asList(parts[2].split(","))); - save.writeToFile(save.location + "Inventory" + Save.extension, datastrs); - - return true; - } - - serverThread.writeClientSave(alldata); // writes the data in a RemotePlayer save file. - - return true; - - case CHESTIN: - case CHESTOUT: - int eid = Integer.parseInt(data[0]); - Entity e = Network.getEntity(eid); - if (!(e instanceof Chest)) { - System.err.println( - "SERVER: Error with CHESTOUT request: Specified chest entity did not exist or was not a chest."); - return false; - } - - Chest chest = (Chest) e; - - if (e instanceof DeathChest) { - StringBuilder itemDataB = new StringBuilder(); - for (Item i : chest.getInventory().getItems()) - itemDataB.append(i.getData()).append(";"); - String itemData = itemDataB.toString(); - itemData = itemData.length() == 0 ? itemData : itemData.substring(0, itemData.length() - 1); - serverThread.sendItems(itemData); - serverThread.sendNotification("Death chest retrieved!", 0); - chest.remove(); - return true; - } - - int itemIdx = Integer.parseInt(data[1]); - - if (inType == InputType.CHESTIN) { - Item item = Items.get(data[2]); - if (item instanceof UnknownItem) { - System.err.println( - "SERVER error with CHESTIN request: Specified item could not be found from string: " - + data[2]); - return false; - } - if (itemIdx > chest.getInventory().invSize()) - itemIdx = chest.getInventory().invSize(); - chest.getInventory().add(itemIdx, item); - } else { /// inType == InputType.CHESTOUT - - if (itemIdx >= chest.getInventory().invSize() || itemIdx < 0) { - System.err - .println("SERVER: Error with CHESTOUT request: Specified chest inv index is out of bounds: " - + itemIdx + "; inv size:" + chest.getInventory().invSize()); - return false; - } - // if here, the index is valid - boolean wholeStack = Boolean.parseBoolean(data[2]); - Item toRemove = chest.getInventory().get(itemIdx); - Item itemToSend = toRemove.clone(); - if (!wholeStack && toRemove instanceof StackableItem && ((StackableItem) toRemove).count > 1) { - ((StackableItem) itemToSend).count = 1; - ((StackableItem) toRemove).count--; - } else - chest.getInventory().remove(itemIdx); - - serverThread.sendData(InputType.CHESTOUT, itemToSend.getData() + ";" + data[3]); // send back the item - // that the player - // should put in their - // inventory. - } - - serverThread.sendEntityUpdate(chest, chest.getUpdates()); - return true; - - case PUSH: - int furnitureID = Integer.parseInt(alldata); - Entity furniture = Network.getEntity(furnitureID); - if (furniture == null) { - System.err.println("SERVER: Couldn't find the specified piece of furniture to push: " + furnitureID); - return false; - } else if (!(furniture instanceof Furniture)) { - System.err.println("SERVER: Specified entity is not an instance of the furniture class: " + furniture - + "; cannot push."); - return false; - } - - ((Furniture) furniture).tryPush(clientPlayer); - return true; - - case PICKUP: - int ieid = Integer.parseInt(alldata); - Entity entity = Network.getEntity(ieid); - if (!(entity instanceof ItemEntity) || entity.isRemoved()) { - System.err.println("SERVER: Could not find item entity in pickup request " + ieid - + ". Telling client to remove..."); - serverThread.sendEntityRemoval(ieid); // will happen when another guy gets to it first, so the this - // client shouldn't have it on the level anymore. It could also - // happen if the client didn't receive the packet telling them to - // pick it up... in which case it will be lost, but oh well. - return false; - } - - entity.remove(); - serverThread.sendData(inType, alldata); - broadcastData(InputType.REMOVE, String.valueOf(entity.eid), serverThread); - return true; - - case INTERACT: - clientPlayer.activeItem = Items.get(data[0], true); // this can be null; and that's fine, it means a fist. - // ;) - clientPlayer.stamina = Integer.parseInt(data[1]); - int arrowCount = Integer.parseInt(data[2]); - int curArrows = clientPlayer.getInventory().count(Items.arrowItem); - if (curArrows < arrowCount) - clientPlayer.getInventory().add(Items.arrowItem, arrowCount - curArrows); - if (curArrows > arrowCount) - clientPlayer.getInventory().removeItems(Items.arrowItem, curArrows - arrowCount); - clientPlayer.attack(); /// NOTE the player may fire an arrow, but we won't sync the arrow count because - /// that player will update it theirself. - - serverThread.sendData(InputType.INTERACT, - (clientPlayer.activeItem == null ? "null" : clientPlayer.activeItem.getData())); - return true; - - case BED: - if (Game.debug) - System.out.println("Received bed request: " + alldata); - boolean getIn = Boolean.parseBoolean(data[0]); - if (getIn) { - Entity bed = Network.getEntity(Integer.parseInt(data[1])); - if (!(bed instanceof Bed) || !Bed.checkCanSleep(clientPlayer)) { - updateGameVars(); - return false; - } - - ((Bed) bed).use(clientPlayer); - } else { - if (Bed.sleeping()) - return false; // can't quit once everyone is in bed - // else, get the player out of bed - Bed.restorePlayer(clientPlayer); - } - return true; - - case POTION: - boolean addEffect = Boolean.parseBoolean(data[0]); - int typeIdx = Integer.parseInt(data[1]); - PotionItem.applyPotion(clientPlayer, PotionType.values[typeIdx], addEffect); - return true; - - case SHIRT: - clientPlayer.shirtColor = Integer.parseInt(alldata); - broadcastEntityUpdate(clientPlayer, false); - return true; - - case PLAYER: - clientPlayer.update(alldata); - return true; - - case MOVE: - // the player moved. - int plvlidx = Integer.parseInt(data[3]); - if (plvlidx >= 0 && plvlidx < World.levels.length && World.levels[plvlidx] != clientPlayer.getLevel()) { - clientPlayer.remove(); - World.levels[plvlidx].add(clientPlayer); - } - - int oldx = clientPlayer.x >> 4, oldy = clientPlayer.y >> 4; - int newx = Integer.parseInt(data[0]); - int newy = Integer.parseInt(data[1]); - - boolean moved = clientPlayer.move(newx - clientPlayer.x, newy - clientPlayer.y); // this moves the player, - // and updates other - // clients. - - clientPlayer.dir = Direction.values[Integer.parseInt(data[2])]; // do this AFTERWARD, so that the move - // method doesn't mess something up. - - if (moved) - clientPlayer.updateSyncArea(oldx, oldy); // this updates the current client. - - broadcastEntityUpdate(clientPlayer, !moved); // this will make it so that if the player is prevented from - // moving, the server will update the client, forcing it back - // to the last place the server recorded the player at. TODO - // this breaks down with a slow connection... - clientPlayer.walkDist++; // hopefully will make walking animations work. Actually, they should be sent - // with Mob's update... no, it doesn't update, it just feeds back. - - return true; - - // I'm thinking this should end up never being used... oh, well maybe for - // notifications, actually. - default: - System.out.println("SERVER: Used default behavior for input type " + inType); - broadcastData(inType, alldata, serverThread); - return true; - } - } - - private void broadcastData(InputType inType, String data) { - broadcastData(inType, data, (MinicraftServerThread) null); - } - - private void broadcastData(InputType inType, String data, @Nullable MinicraftServerThread clientThreadToExclude) { - for (MinicraftServerThread thread : getThreads()) { - if (thread != clientThreadToExclude) // send this packet to all EXCEPT the specified one. - thread.sendData(inType, data); - } - } - - @SuppressWarnings("unused") - private void broadcastData(InputType inType, String data, List threads) { - for (MinicraftServerThread thread : threads) - thread.sendData(inType, data); - } - - protected synchronized void onThreadDisconnect(MinicraftServerThread thread) { - threadList.remove(thread); - if (thread.getClient() == hostPlayer) - hostPlayer = null; - } - - @Override - public synchronized void endConnection() { - if (!isConnected()) - return; - - if (Game.debug) - System.out.println("SERVER: Ending connection with threads: " + threadList); - - if (hasClients()) { - broadcastData(InputType.SAVE, ""); - MyUtils.sleep(1000); // give time for the clients to send back their player data - - MinicraftServerThread[] threads = getThreads(); - for (MinicraftServerThread thread : threads) - thread.endConnection(); - } - - try { - socket.close(); - } catch (IOException ignored) { - } - - threadList.clear(); // should already be clear - } - - @Override - public boolean isConnected() { - return socket != null && !socket.isClosed(); - } - - public boolean hasClients() { - return threadList.size() > 0; - } + + class MyTask extends TimerTask { + public MyTask() {} + public void run() {} + } + + private static final int UPDATE_INTERVAL = 10; // measured in seconds + + private final int port; + + private List threadList = Collections.synchronizedList(new ArrayList<>()); + private ServerSocket socket; + + private RemotePlayer hostPlayer = null; + private String worldPath; + + private int playerCap = 5; + + public MinicraftServer(int port) { + super("MinicraftServer"); + + this.port = port; + + Game.ISONLINE = true; + Game.ISHOST = true; // just in case. + Game.player.remove(); // the server has no player... + + worldPath = Game.gameDir + "/saves/" + WorldSelectDisplay.getWorldName(); + + try { + System.out.println("Opening server socket..."); + socket = new ServerSocket(port); + start(); + } catch (IOException ex) { + System.err.println("Failed to open server socket on port " + port); + ex.printStackTrace(); + } + } + + public void run() { + if (Game.debug) System.out.println("Server started."); + + Timer gameUpdateTimer = new Timer("GameUpdateTimer"); + gameUpdateTimer.schedule(new MyTask() { + public void run() { updateGameVars(); } + }, 5000, UPDATE_INTERVAL*1000); + + try { + while (socket != null) { + MinicraftServerThread mst = new MinicraftServerThread(socket.accept(), this); + if (mst.isConnected()) + threadList.add(mst); + } + } catch (SocketException ex) { // this should occur when closing the thread. + } catch (IOException ex) { + System.err.println("Server socket encountered an error while attempting to listen on port " + port + ":"); + ex.printStackTrace(); + } + + gameUpdateTimer.cancel(); + System.out.println("Closing server socket"); + + endConnection(); + } + + public String getWorldPath() { return worldPath; } + + public int getPlayerCap() { return playerCap; } + public void setPlayerCap(int val) { + playerCap = Math.max(val, -1); // no need to set it to anything below -1. + } + + public boolean isFull() { + return playerCap >= 0 && threadList.size() >= playerCap; + } + + public int getNumPlayers() { return threadList.size(); } + + private MinicraftServerThread[] getThreads() { + return threadList.toArray(new MinicraftServerThread[threadList.size()]); + } + + public String[] getClientInfo() { + List playerStrings = new ArrayList<>(); + for (MinicraftServerThread serverThread: getThreads()) { + RemotePlayer clientPlayer = serverThread.getClient(); + + playerStrings.add(clientPlayer.getUsername() + ": " + clientPlayer.getIpAddress().getHostAddress() + (Game.debug?" (" +(clientPlayer.x>>4)+ "," +(clientPlayer.y>>4)+ ")":"")); + } + + return playerStrings.toArray(new String[0]); + } + + public List getPlayersInRange(Entity e, boolean useTrackRange) { + if (e == null || e.getLevel() == null) return new ArrayList<>(); + int xt = e.x >> 4, yt = e.y >> 4; + return getPlayersInRange(e.getLevel(), xt, yt, useTrackRange); // NOTE if "e" is a RemotePlayer, the list returned *will* contain "e". + } + public List getPlayersInRange(Level level, int xt, int yt, boolean useTrackRange) { + List players = new ArrayList<>(); + for (MinicraftServerThread thread: getThreads()) { + RemotePlayer rp = thread.getClient(); + if (useTrackRange && rp.shouldTrack(xt, yt, level) || !useTrackRange && rp.shouldSync(xt, yt, level)) + players.add(rp); + } + + return players; + } + + @Nullable + private RemotePlayer getIfPlayer(Entity e) { + if (e instanceof RemotePlayer) { + return (RemotePlayer) e; + } + else + return null; + } + + @Nullable + public MinicraftServerThread getAssociatedThread(String username) { + MinicraftServerThread match = null; + + for (MinicraftServerThread thread: getThreads()) { + if (thread.getClient().getUsername().equalsIgnoreCase(username)) { + match = thread; + break; + } + } + + return match; + } + + public List getAssociatedThreads(String[] usernames, boolean printError) { + List threads = new ArrayList<>(); + for (String username: usernames) { + MinicraftServerThread match = getAssociatedThread(username); + if (match != null) + threads.add(match); + else if (printError) + System.err.println("Couldn't match username \"" + username + "\""); + } + + return threads; + } + + @NotNull + public MinicraftServerThread getAssociatedThread(RemotePlayer player) { + MinicraftServerThread thread = null; + + for (MinicraftServerThread curThread: getThreads()) { + if (curThread.getClient() == player) { + thread = curThread; + break; + } + } + + if (thread == null) { + System.err.println("SERVER: Could not find thread for remote player " + player); + thread = new MinicraftServerThread(player, this); + } + + return thread; + } + + private List getAssociatedThreads(List players) { + List threads = new ArrayList<>(); + + // NOTE I could do this the other way around, by looping though the thread list, and adding those whose player is found in the given list, which might be slightly more optimal... but I think it's better that this tells you when a player in the list doesn't have a matching thread. + for (RemotePlayer client: players) { + MinicraftServerThread thread = getAssociatedThread(client); + if (thread.isValid()) + threads.add(thread); + else + System.err.println("SERVER WARNING: Couldn't find server thread for client " + client); + } + + return threads; + } + + public void broadcastEntityUpdate(Entity e) { broadcastEntityUpdate(e, false); } + public void broadcastEntityUpdate(Entity e, boolean updateSelf) { + if (e.isRemoved()) { + if (Game.debug) System.out.println("SERVER: Tried to broadcast update of removed entity: " + e); + return; + } + List players = getPlayersInRange(e, false); + if (!updateSelf) { + players.remove(getIfPlayer(e)); + } + + for (MinicraftServerThread thread: getAssociatedThreads(players)) { + thread.sendEntityUpdate(e, e.getUpdates()); + } + + e.flushUpdates(); // It is important that this method is only called once: right here. + } + + public void broadcastTileUpdate(Level level, int x, int y) { + broadcastData(InputType.TILE, Tile.getData(level.depth, x, y)); + } + + public void broadcastEntityAddition(Entity e) { broadcastEntityAddition(e, false); } + public void broadcastEntityAddition(Entity e, boolean addSelf) { + if (e.isRemoved()) { + if (Game.debug) System.out.println("SERVER: Tried to broadcast addition of removed entity: " + e); + return; + } + List players = getPlayersInRange(e, true); + if (!addSelf) + players.remove(getIfPlayer(e)); // if "e" is a player, this removes it from the list. + int cnt = 0; + if (Game.debug && e instanceof Player) System.out.println("SERVER: Broadcasting player addition of " + e); + for (MinicraftServerThread thread: getAssociatedThreads(players)) { + thread.sendEntityAddition(e); + cnt++; + } + if (Game.debug && e instanceof Player) System.out.println("SERVER: Broadcasted player addition of " + e + " to " + cnt + " clients"); + } + + private List getPlayersToRemove(Entity e, boolean removeSelf) { + List players = getPlayersInRange(e, true); + if (players.size() == 0) return players; + if (Game.debug && e instanceof Player) { + System.out.println("SERVER: Sending removal of player " + e + " to " + players.size() + " players (may remove equal player): "); + for (RemotePlayer rp: players) + System.out.println(rp); + } + + if (!removeSelf) + players.remove(getIfPlayer(e)); // if "e" is a player, this removes it from the list. + + if (Game.debug && e instanceof Player) System.out.println("...now sending player removal to " + players.size() + " players."); + + return players; + } + + // remove only if on given level + public void broadcastEntityRemoval(Entity e, Level level, boolean removeSelf) { + List players = getPlayersToRemove(e, removeSelf); + + if (level == null) { + if (Game.debug) System.out.println("SERVER: Cannot remove entity " +e+ " from specified level, level given is null; ignoring request to broadcast entity removal."); + return; + } + + for (MinicraftServerThread thread: getAssociatedThreads(players)) + thread.sendEntityRemoval(e.eid, level.depth); + } + // remove regardless of level + public void broadcastEntityRemoval(Entity e, boolean removeSelf) { + List players = getPlayersToRemove(e, removeSelf); + + for (MinicraftServerThread thread: getAssociatedThreads(players)) + thread.sendEntityRemoval(e.eid); + } + + public void saveWorld() { + broadcastData(InputType.SAVE, ""); // tell all the other clients to send their data over to be saved. + new Save(WorldSelectDisplay.getWorldName()); + System.out.println("World saved"); + } + + public void broadcastNotification(String note, int notetime) { + String data = notetime + ";" + note; + broadcastData(InputType.NOTIFY, data); + } + + public void broadcastPlayerHurt(int eid, int damage, Direction attackDir) { + for (MinicraftServerThread thread: getThreads()) + thread.sendPlayerHurt(eid, damage, attackDir); + } + + public void broadcastStopFishing(int eid) { + for (MinicraftServerThread thread: getThreads()) + thread.sendStopFishing(eid); + } + + public void updateGameVars() { updateGameVars(getThreads()); } + public void updateGameVars(MinicraftServerThread sendTo) { + updateGameVars(new MinicraftServerThread[] {sendTo}); + } + public void updateGameVars(MinicraftServerThread[] sendTo) { + //if (Game.debug) System.out.println("SERVER: updating game vars..."); + if (sendTo.length == 0) return; + + String[] varArray = { + Settings.get("mode").toString(), + Updater.tickCount+ "", + Updater.gamespeed+ "", + Updater.pastDay1+ "", + Updater.scoreTime+ "", + getNumPlayers()+ "", + Bed.getPlayersAwake()+ "" + }; + + String vars = String.join(";", varArray); + + for (MinicraftServerThread thread: sendTo) + thread.sendData(InputType.GAME, vars); + } + + public void pingClients() { + System.out.println("Pinging clients (" +threadList.size()+ " connected)..."); + for (MinicraftServerThread thread: getThreads()) + thread.doPing(); + } + + protected File[] getRemotePlayerFiles() { + File saveFolder = new File(worldPath); + + File[] clientSaves = saveFolder.listFiles((file, name) -> name.startsWith("RemotePlayer")); + + if (clientSaves == null) + clientSaves = new File[0]; + + return clientSaves; + } + + boolean parsePacket(MinicraftServerThread serverThread, InputType inType, String alldata) { + String[] data = alldata.split(";"); + + RemotePlayer clientPlayer = serverThread.getClient(); + if (clientPlayer == null) { + System.err.println("CRITICAL SERVER ERROR: Server thread client is null: " + serverThread + "; cannot parse the received " +inType+ " packet: " + alldata); + return false; + } + + // handle reports of type INVALID + if (inType == InputType.INVALID) { + if (Game.debug) System.out.println(serverThread + " received an error:"); + System.err.println(alldata); + return false; + } + + if (InputType.serverOnly.contains(inType)) { + /// these are ALL illegal for a client to send. + System.err.println("SERVER WARNING: Client " + clientPlayer + " sent illegal packet type " + inType + " to server."); + return false; + } + + switch(inType) { + case PING: + System.out.println("Received ping from " + serverThread); + return true; + + case LOGIN: + if (Game.debug) System.out.println("SERVER: Received login request"); + if (Game.debug) System.out.println("SERVER: Login data: " + Arrays.toString(data)); + String username = data[0]; + Version clientVersion = new Version(data[1]); + // check version; send back invalid if they don't match. + if (clientVersion.compareTo(Game.VERSION) != 0) { + serverThread.sendError("Wrong game version; need " + Game.VERSION); + return false; + } + + // check if the same username already exists on the server (due to signing on a second time with the same account), and if so, prevent the new login + if (getAssociatedThread(username) != null) { + serverThread.sendError("Account is already logged in to server"); + return false; + } + + // versions match, and username is unique; make client player + clientPlayer.setUsername(username); + + // now, we need to check if this player has played in this world before. If they have, then all previous settings and items and such will be restored. + String playerdata = ""; // this stores the data fetched from the files. + + if (serverThread.getClient().getIpAddress().isLoopbackAddress() && hostPlayer == null) { + // this is the first person on localhost. I believe that a second person will be saved as a loopback address (later: jk the first one actually will), but a third will simply overwrite the second. + if (Game.debug) System.out.println("SERVER: Host player found"); + + if (Game.player != null) { + // save the player, and then remove it. It is leftover from when this was a single player world. + playerdata = Game.player.getPlayerData(); + Game.player.remove(); // all the important data has been saved. + Game.player = null; + } else { + // load the data from file instead. + playerdata = Game.VERSION+ "\n"; + try { + playerdata += Load.loadFromFile(worldPath+ "/Player" +Save.extension, true) + "\n"; + playerdata += Load.loadFromFile(worldPath+ "/Inventory" +Save.extension, true); + } catch(IOException ex) { + System.err.println("SERVER: Server had error while trying to load host player data from file:"); + ex.printStackTrace(); + } + } + + hostPlayer = clientPlayer; + } + else { + playerdata = serverThread.getRemotePlayerFileData(); + } + + if (playerdata.length() > 0) { + // if a save file was found, then send the data to the client so they can resume where they left off. + // and now, initialize the RemotePlayer instance with the data. + // first get the version that saved the file, which can be different if this is a remote player. + String[] saveData = playerdata.split("\\n"); + new Load(new Version(saveData[0])).loadPlayer(clientPlayer, Arrays.asList(saveData[1].split(","))); + // we really don't need to load the inventory. + } else { + clientPlayer.findStartPos(World.levels[World.lvlIdx(0)]); // find a new start pos + // this is a new player. + playerdata = clientPlayer.getPlayerData(); + // save the new player once, immediately. + serverThread.writeClientSave(playerdata); + } + serverThread.sendData(InputType.PLAYER, playerdata); + + // now, we send the INIT_W packet and notify the others clients. + + int playerlvl = World.lvlIdx(clientPlayer.getLevel() != null ? clientPlayer.getLevel().depth : 0); + if (!Arrays.asList(World.levels[playerlvl].getEntityArray()).contains(clientPlayer) && clientPlayer != hostPlayer) // this will be true if their file was already found, since they are added in Load.loadPlayer(). + World.levels[playerlvl].add(clientPlayer); // add to level (**id is generated here**) and also, maybe, broadcasted to other players? + + updateGameVars(); + //making INIT_W packet + int[] toSend = { + clientPlayer.eid, + World.levels[playerlvl].w, + World.levels[playerlvl].h, + playerlvl, // these bottom three are actually unnecessary because of the previous PLAYER packet. + clientPlayer.x, + clientPlayer.y + }; + StringBuilder sendString = new StringBuilder(); + for (int val: toSend) + sendString.append(val).append(","); + // send client world info + if (Game.debug) System.out.println("SERVER: Sending INIT packet"); + serverThread.sendData(InputType.INIT, sendString.toString()); + return true; + + case LOAD: + if (Game.debug) System.out.println("SERVER: Received level data request"); + // send back the tiles in the level specified. + int levelidx = Integer.parseInt(alldata); + if (levelidx < 0 || levelidx >= World.levels.length) { + System.err.println("SERVER warning: Client " + clientPlayer + " tried to request tiles from nonexistent level " + levelidx); + serverThread.sendError("Requested level (" +levelidx+ ") does not exist."); + return false; + } + + // if it's the same level, it will cancel out. + + byte[] tiledata = new byte[World.levels[levelidx].tiles.length*2]; + for (int i = 0; i < tiledata.length/2 - 1; i++) { + tiledata[i*2] = World.levels[levelidx].tiles[i]; + tiledata[i*2+1] = World.levels[levelidx].data[i]; + } + serverThread.cachePacketTypes(InputType.tileUpdates); + + StringBuilder tiledataString = new StringBuilder(); + for (byte b: tiledata) { + tiledataString.append(b).append(","); + } + serverThread.sendData(InputType.TILES, tiledataString.substring(0, tiledataString.length()-1)); + serverThread.sendCachedPackets(); + + // move the associated player to the level they requested -- they shouldn't be requesting it if they aren't going to transfer to it. + // moved to after the tile data is sent so that the client doesn't try to add anything to the level before it gets created. + Level next = World.levels[levelidx]; + if (clientPlayer.getLevel() != null && !next.getTile(clientPlayer.x >> 4, clientPlayer.y >> 4).mayPass(next, clientPlayer.x >> 4, clientPlayer.y >> 4, clientPlayer)) + clientPlayer.findStartPos(next, false); + + next.add(clientPlayer); + + // send back the entities in the level specified. + + Entity[] entities = World.levels[levelidx].getEntityArray(); + serverThread.cachePacketTypes(InputType.entityUpdates); + + StringBuilder edata = new StringBuilder(); + for (Entity curEntity : entities) { + if (!clientPlayer.shouldTrack(curEntity.x >> 4, curEntity.y >> 4, curEntity.getLevel())) + continue; // this is outside of the player's entity tracking range; doesn't need to know about it yet. + String curEntityData = ""; + if (curEntity != clientPlayer) { + curEntityData = Save.writeEntity(curEntity, false) + ","; + if (Game.debug && curEntity instanceof Player) + System.out.println("SERVER: Sending player in ENTITIES packet: " + curEntity); + } + // there is enough space. + if (curEntityData.length() > 1) // 1 b/c of the "," added; this prevents entities that aren't saved from causing ",," to appear. + edata.append(curEntityData); + } + + String edataToSend = edata.substring(0, Math.max(0, edata.length()-1)); // cut off trailing comma + + serverThread.sendData(InputType.ENTITIES, edataToSend); + serverThread.sendCachedPackets(); + + return true; + + case DIE: + if (Game.debug) System.out.println("Received player death"); + Load.loadEntity(alldata, false); + broadcastEntityRemoval(clientPlayer, true); + return true; + + case RESPAWN: + serverThread.respawnPlayer(); + broadcastEntityAddition(clientPlayer); + // added player; client will request level data when it's ready + return true; + + case DISCONNECT: + serverThread.endConnection(); + return true; + + case DROP: + Item dropped = Items.get(alldata); + Level playerLevel = clientPlayer.getLevel(); + if (playerLevel != null) + playerLevel.dropItem(clientPlayer.x, clientPlayer.y, dropped); + return true; + + case TILE: + int lvlDepth = Integer.parseInt(data[0]); + int xt = Integer.parseInt(data[1]); + int yt = Integer.parseInt(data[2]); + for (int lvly = yt-1; lvly <= yt+1; lvly++) + for (int lvlx = xt-1; lvlx <= xt+1; lvlx++) + serverThread.sendTileUpdate(lvlDepth, lvlx, lvly); + return true; + + case ENTITY: + // client wants the specified entity sent in an ADD packet, becuase it couldn't find that entity upon receiving an ENTITY packet from the server. + int enid = Integer.parseInt(alldata); + Entity entityToSend = Network.getEntity(enid); + if (entityToSend == null) { + /// well THIS would be a problem, I think. Though... Actually, not really. It just means that an entity was removed between the time of sending an update for it, and the client then asking for it to be added. But since it would be useless to add it at this point, we'll just ignore the request. + if (Game.debug) System.out.println("SERVER: Ignoring request to add unknown entity (probably already removed): " + enid); + return false; + } + + if (!clientPlayer.shouldSync(entityToSend.x >> 4, entityToSend.y >> 4, entityToSend.getLevel())) { + // the requested entity is not even in range + return false; + } + if (Game.debug) System.out.println("SERVER: Sending entity addition via " + serverThread + " because client requested it: " + entityToSend); + serverThread.sendEntityAddition(entityToSend); + return true; + + case SAVE: + if (Game.debug) System.out.println("SERVER: Received player save from " + serverThread.getClient()); + // save this client's data to a file. + // first, determine if this is the main player. if not, determine if a file already exists for this client. if not, find an available file name. for simplicity, we will just count the number of remote player files saved. + + if (clientPlayer == hostPlayer) { + if (Game.debug) System.out.println("SERVER: Identified SAVE packet client as host"); + String[] parts = alldata.split("\\n"); + List datastrs = new ArrayList<>(); + + Save save = new Save(clientPlayer, false); + datastrs.addAll(Arrays.asList(parts[1].split(","))); + save.writeToFile(save.location+ "Player" +Save.extension, datastrs); + datastrs.clear(); + datastrs.addAll(Arrays.asList(parts[2].split(","))); + save.writeToFile(save.location+ "Inventory" +Save.extension, datastrs); + + return true; + } + + serverThread.writeClientSave(alldata); // writes the data in a RemotePlayer save file. + + return true; + + case CHESTIN: case CHESTOUT: + int eid = Integer.parseInt(data[0]); + Entity e = Network.getEntity(eid); + if (!(e instanceof Chest)) { + System.err.println("SERVER: Error with CHESTOUT request: Specified chest entity did not exist or was not a chest."); + return false; + } + + Chest chest = (Chest) e; + + if (e instanceof DeathChest) { + StringBuilder itemDataB = new StringBuilder(); + for (Item i: chest.getInventory().getItems()) + itemDataB.append(i.getData()).append(";"); + String itemData = itemDataB.toString(); + itemData = itemData.length() == 0 ? itemData : itemData.substring(0, itemData.length() - 1); + serverThread.sendItems(itemData); + serverThread.sendNotification("Death chest retrieved!", 0); + chest.remove(); + return true; + } + + int itemIdx = Integer.parseInt(data[1]); + + if (inType == InputType.CHESTIN) { + Item item = Items.get(data[2]); + if (item instanceof UnknownItem) { + System.err.println("SERVER error with CHESTIN request: Specified item could not be found from string: " + data[2]); + return false; + } + if (itemIdx > chest.getInventory().invSize()) + itemIdx = chest.getInventory().invSize(); + chest.getInventory().add(itemIdx, item); + } + else { /// inType == InputType.CHESTOUT + + if (itemIdx >= chest.getInventory().invSize() || itemIdx < 0) { + System.err.println("SERVER: Error with CHESTOUT request: Specified chest inv index is out of bounds: " + itemIdx + "; inv size:" + chest.getInventory().invSize()); + return false; + } + // if here, the index is valid + boolean wholeStack = Boolean.parseBoolean(data[2]); + Item toRemove = chest.getInventory().get(itemIdx); + Item itemToSend = toRemove.clone(); + if (!wholeStack && toRemove instanceof StackableItem && ((StackableItem)toRemove).count > 1) { + ((StackableItem)itemToSend).count = 1; + ((StackableItem)toRemove).count--; + } else + chest.getInventory().remove(itemIdx); + + serverThread.sendData(InputType.CHESTOUT, itemToSend.getData()+ ";" +data[3]); // send back the item that the player should put in their inventory. + } + + serverThread.sendEntityUpdate(chest, chest.getUpdates()); + return true; + + case PUSH: + int furnitureID = Integer.parseInt(alldata); + Entity furniture = Network.getEntity(furnitureID); + if (furniture == null) { + System.err.println("SERVER: Couldn't find the specified piece of furniture to push: " + furnitureID); + return false; + } else if (!(furniture instanceof Furniture)) { + System.err.println("SERVER: Specified entity is not an instance of the furniture class: " + furniture + "; cannot push."); + return false; + } + + ((Furniture)furniture).tryPush(clientPlayer); + return true; + + case PICKUP: + int ieid = Integer.parseInt(alldata); + Entity entity = Network.getEntity(ieid); + if (!(entity instanceof ItemEntity) || entity.isRemoved()) { + System.err.println("SERVER: Could not find item entity in pickup request " + ieid + ". Telling client to remove..."); + serverThread.sendEntityRemoval(ieid); // will happen when another guy gets to it first, so the this client shouldn't have it on the level anymore. It could also happen if the client didn't receive the packet telling them to pick it up... in which case it will be lost, but oh well. + return false; + } + + entity.remove(); + serverThread.sendData(inType, alldata); + broadcastData(InputType.REMOVE, String.valueOf(entity.eid), serverThread); + return true; + + case INTERACT: + clientPlayer.activeItem = Items.get(data[0], true); // this can be null; and that's fine, it means a fist. ;) + clientPlayer.stamina = Integer.parseInt(data[1]); + int arrowCount = Integer.parseInt(data[2]); + int curArrows = clientPlayer.getInventory().count(Items.arrowItem); + if (curArrows < arrowCount) + clientPlayer.getInventory().add(Items.arrowItem, arrowCount-curArrows); + if (curArrows > arrowCount) + clientPlayer.getInventory().removeItems(Items.arrowItem, curArrows-arrowCount); + clientPlayer.attack(); /// NOTE the player may fire an arrow, but we won't sync the arrow count because that player will update it theirself. + + serverThread.sendData(InputType.INTERACT, ( clientPlayer.activeItem == null ? "null" : clientPlayer.activeItem.getData() )); + return true; + + case BED: + if (Game.debug) System.out.println("Received bed request: " + alldata); + boolean getIn = Boolean.parseBoolean(data[0]); + if (getIn) { + Entity bed = Network.getEntity(Integer.parseInt(data[1])); + if (!(bed instanceof Bed) || !Bed.checkCanSleep(clientPlayer)) { + updateGameVars(); + return false; + } + + ((Bed) bed).use(clientPlayer); + } + else { + if (Bed.sleeping()) return false; // can't quit once everyone is in bed + // else, get the player out of bed + Bed.restorePlayer(clientPlayer); + } + return true; + + case POTION: + boolean addEffect = Boolean.parseBoolean(data[0]); + int typeIdx = Integer.parseInt(data[1]); + PotionItem.applyPotion(clientPlayer, PotionType.values[typeIdx], addEffect); + return true; + + case SHIRT: + clientPlayer.shirtColor = Integer.parseInt(alldata); + broadcastEntityUpdate(clientPlayer, false); + return true; + + case PLAYER: + clientPlayer.update(alldata); + return true; + + case MOVE: + // the player moved. + int plvlidx = Integer.parseInt(data[3]); + if (plvlidx >= 0 && plvlidx < World.levels.length && World.levels[plvlidx] != clientPlayer.getLevel()) { + clientPlayer.remove(); + World.levels[plvlidx].add(clientPlayer); + } + + int oldx = clientPlayer.x>>4, oldy = clientPlayer.y>>4; + int newx = Integer.parseInt(data[0]); + int newy = Integer.parseInt(data[1]); + + boolean moved = clientPlayer.move(newx - clientPlayer.x, newy - clientPlayer.y); // this moves the player, and updates other clients. + + clientPlayer.dir = Direction.values[Integer.parseInt(data[2])]; // do this AFTERWARD, so that the move method doesn't mess something up. + + if (moved) clientPlayer.updateSyncArea(oldx, oldy); // this updates the current client. + + broadcastEntityUpdate(clientPlayer, !moved); // this will make it so that if the player is prevented from moving, the server will update the client, forcing it back to the last place the server recorded the player at. TODO this breaks down with a slow connection... + clientPlayer.walkDist++; // hopefully will make walking animations work. Actually, they should be sent with Mob's update... no, it doesn't update, it just feeds back. + + return true; + + // I'm thinking this should end up never being used... oh, well maybe for notifications, actually. + default: + System.out.println("SERVER: Used default behavior for input type " + inType); + broadcastData(inType, alldata, serverThread); + return true; + } + } + + private void broadcastData(InputType inType, String data) { broadcastData(inType, data, (MinicraftServerThread)null); } + private void broadcastData(InputType inType, String data, @Nullable MinicraftServerThread clientThreadToExclude) { + for (MinicraftServerThread thread: getThreads()) { + if (thread != clientThreadToExclude) // send this packet to all EXCEPT the specified one. + thread.sendData(inType, data); + } + } + private void broadcastData(InputType inType, String data, List threads) { + for (MinicraftServerThread thread: threads) + thread.sendData(inType, data); + } + + protected synchronized void onThreadDisconnect(MinicraftServerThread thread) { + threadList.remove(thread); + if (thread.getClient() == hostPlayer) + hostPlayer = null; + } + + @Override + public synchronized void endConnection() { + if (!isConnected()) return; + + if (Game.debug) System.out.println("SERVER: Ending connection with threads: " + threadList); + + if (hasClients()) { + broadcastData(InputType.SAVE, ""); + MyUtils.sleep(1000); // give time for the clients to send back their player data + + MinicraftServerThread[] threads = getThreads(); + for (MinicraftServerThread thread: threads) + thread.endConnection(); + } + + try { + socket.close(); + } catch (IOException ignored) {} + + threadList.clear(); // should already be clear + } + + @Override + public boolean isConnected() { + return socket != null && !socket.isClosed(); + } + + public boolean hasClients() { + return threadList.size() > 0; + } } \ No newline at end of file diff --git a/src/minicraft/network/MinicraftServerThread.java b/src/minicraft/network/MinicraftServerThread.java index 7886b4e9..9d3f2ae4 100644 --- a/src/minicraft/network/MinicraftServerThread.java +++ b/src/minicraft/network/MinicraftServerThread.java @@ -26,310 +26,289 @@ import minicraft.saveload.Version; public class MinicraftServerThread extends MinicraftConnection { - - private static final String autoPing = "ping"; - private static final String manualPing = "manual"; - - private static final int MISSED_PING_THRESHOLD = 5; - private static final int PING_INTERVAL = 1_000; // measured in milliseconds - - private MinicraftServer serverInstance; - private RemotePlayer client; - - /// PING - - private Timer pingTimer; - private boolean receivedPing = true; // after first pause, it will act as if the ping was successful, since it - // didn't even send one in the first place and was just buying time for - // everything to get settled before pinging. - private int missedPings = 0; - - private long manualPingTimestamp; - - private List packetTypesToKeep = new ArrayList<>(); - private List packetTypesToCache = new ArrayList<>(); - private List cachedPackets = new ArrayList<>(); - - private final boolean valid; - - MinicraftServerThread(Socket socket, MinicraftServer serverInstance) { - super("MinicraftServerThread", socket); - valid = true; - - this.serverInstance = serverInstance; - if (serverInstance.isFull()) { - sendError("server at max capacity."); - super.endConnection(); - return; - } - - client = new RemotePlayer(null, false, socket.getInetAddress(), socket.getPort()); - - // username is set later - - packetTypesToKeep.addAll(InputType.tileUpdates); - packetTypesToKeep.addAll(InputType.entityUpdates); - - pingTimer = new Timer(PING_INTERVAL, e -> { - if (!isConnected()) { - pingTimer.stop(); - return; - } - - // if(Game.debug) System.out.println("received ping from "+this+": - // "+receivedPing+". Previously missed "+missedPings+" pings."); - - if (!receivedPing) { - missedPings++; - if (missedPings >= MISSED_PING_THRESHOLD) { - // disconnect from the client; they are taking too long to respond and probably - // don't exist at this point. - pingTimer.stop(); - sendError("client ping too slow, server timed out"); - endConnection(); - } - } else { - missedPings = 0; - receivedPing = false; - } - - sendData(InputType.PING, autoPing); - }); - pingTimer.setRepeats(true); - pingTimer.setCoalesce(true); // don't try to make up for lost pings. - pingTimer.start(); - - start(); - } - - // this is to be a dummy thread. - MinicraftServerThread(RemotePlayer player, MinicraftServer server) { - super("MinicraftServerThread", null); - valid = false; - this.client = player; - this.serverInstance = server; - } - - public boolean isValid() { - return valid; - } - - public RemotePlayer getClient() { - return client; - } - - protected boolean parsePacket(InputType inType, String data) { - if (inType == InputType.PING) { - // if (Game.debug) System.out.println(this+" received ping"); - receivedPing = true; - if (data.equals(manualPing)) { - long nsPingDelay = System.nanoTime() - manualPingTimestamp; - double pingDelay = Math.round(nsPingDelay * 1.0 / 1E6) * 1.0 / 1E3; - System.out - .println("received ping from " + client.getUsername() + "; delay = " + pingDelay + " seconds."); - } - - return true; - } - - return serverInstance.parsePacket(this, inType, data); - } - - void doPing() { - sendData(InputType.PING, manualPing); - manualPingTimestamp = System.nanoTime(); - } - - void sendError(String message) { - if (Game.debug) - System.out.println("SERVER: sending error to " + client + ": \"" + message + "\""); - sendData(InputType.INVALID, message); - } - - void cachePacketTypes(List packetTypes) { - packetTypesToCache.addAll(packetTypes); - packetTypesToKeep.removeAll(packetTypes); - } - - void sendCachedPackets() { - packetTypesToCache.clear(); - - for (String packet : cachedPackets) { - InputType inType = InputType.values[Integer.parseInt(packet.substring(0, packet.indexOf(":")))]; - packet = packet.substring(packet.indexOf(":") + 1); - sendData(inType, packet); - } - - cachedPackets.clear(); - } - - protected void sendData(InputType inType, String data) { - if (packetTypesToCache.contains(inType)) - cachedPackets.add(inType.ordinal() + ":" + data); - else if (!packetTypesToKeep.contains(inType)) - super.sendData(inType, data); - } - - public void sendTileUpdate(Level level, int x, int y) { - sendTileUpdate(level.depth, x, y); - } - - public void sendTileUpdate(int depth, int x, int y) { - String data = Tile.getData(depth, x, y); - if (data.length() > 0) - sendData(InputType.TILE, data); - } - - public void sendEntityUpdate(Entity e, String updateString) { - if (updateString.length() > 0) { - // if (Game.debug && e instanceof Player) System.out.println("SERVER sending - // player update to " + client + ": " + e + "; data = " + updateString); - sendData(InputType.ENTITY, e.eid + ";" + updateString); - } // else - // if(Game.debug) System.out.println("SERVER: skipping entity update b/c no new - // fields: " + e); - } - - public void sendEntityAddition(Entity e) { - if (Game.debug && e instanceof Player) - System.out.println("SERVER: sending addition of player " + e + " to client through " + this); - if (Game.debug && e.eid == client.eid) - System.out.println("SERVER: sending addition of player to itself"); - String edata = Save.writeEntity(e, false); - if (edata.length() == 0) - System.out.println("entity not worth adding to client level: " + e + "; not sending to " + client); - else - sendData(InputType.ADD, edata); - } - - public void sendEntityRemoval(int eid, int levelDepth) { - sendData(InputType.REMOVE, String.valueOf(eid) + ";" + String.valueOf(levelDepth)); - } - - public void sendEntityRemoval(int eid) { // remove regardless of current level - sendData(InputType.REMOVE, String.valueOf(eid)); - } - - public void sendNotification(String note, int notetime) { - sendData(InputType.NOTIFY, notetime + ";" + note); - } - - public void sendPlayerHurt(int eid, int damage, Direction attackDir) { - sendData(InputType.HURT, eid + ";" + damage + ";" + attackDir.ordinal()); - } - - public void sendStopFishing(int eid) { - sendData(InputType.STOPFISHING, "" + eid); - } - - public void sendStaminaChange(int amt) { - sendData(InputType.STAMINA, amt + ""); - } - - public void updatePlayerActiveItem(Item heldItem) { - if (client.activeItem != null && !(client.activeItem instanceof PowerGloveItem)) - sendData(InputType.CHESTOUT, client.activeItem.getData()); - client.activeItem = heldItem; - - sendData(InputType.INTERACT, (client.activeItem == null ? "null" : client.activeItem.getData())); - } - - public void sendItems(String itemData) { - sendData(InputType.ADDITEMS, itemData); - } - - protected void respawnPlayer() { - client.remove(); // hopefully removes it from any level it might still be on - client = new RemotePlayer(false, client); - client.respawn(World.levels[World.lvlIdx(0)]); // get the spawn loc. of the client - sendData(InputType.PLAYER, client.getPlayerData()); // send spawn loc. - } - - @SuppressWarnings("resource") - private File getRemotePlayerFile() { - File[] clientFiles = serverInstance.getRemotePlayerFiles(); - - for (File file : clientFiles) { - String username = ""; - try { - BufferedReader br = new BufferedReader(new FileReader(file)); - try { - username = br.readLine().trim(); - } catch (IOException ex) { - System.err.println("failed to read line from file."); - ex.printStackTrace(); - } - } catch (FileNotFoundException ex) { - System.err.println("couldn't find remote player file: " + file); - ex.printStackTrace(); - } - - if (username.equals(client.getUsername())) { - /// this player has been here before. - if (Game.debug) - System.out.println("remote player file found; returning file " + file.getName()); - return file; - } - } - - return null; - } - - protected String getRemotePlayerFileData() { - File rpFile = getRemotePlayerFile(); - - String playerdata = ""; - if (rpFile != null && rpFile.exists()) { - try { - String content = Load.loadFromFile(rpFile.getPath(), false); - playerdata = content.substring(content.indexOf("\n") + 1); // cut off username - // assume the data version is dev6 if it isn't written (it isn't before dev7). - if (!Version.isValid(playerdata.substring(0, playerdata.indexOf("\n")))) - playerdata = "2.0.4-dev6\n" + playerdata; - } catch (IOException ex) { - System.err.println("failed to read remote player file: " + rpFile); - ex.printStackTrace(); - return ""; - } - } - - return playerdata; - } - - protected void writeClientSave(String playerdata) { - String filename; // this will hold the path to the file that will be saved to. - - File rpFile = getRemotePlayerFile(); - if (rpFile != null && rpFile.exists()) // check if this remote player already has a file. - filename = rpFile.getName(); - else { - File[] clientSaves = serverInstance.getRemotePlayerFiles(); - int numFiles = clientSaves.length; - filename = "RemotePlayer" + numFiles + Save.extension; - } - - String filedata = String.join("\n", client.getUsername(), playerdata); - - String filepath = serverInstance.getWorldPath() + "/" + filename; - try { - Save.writeToFile(filepath, filedata.split("\\n"), false); - } catch (IOException ex) { - System.err.println("problem writing remote player to file: " + filepath); - ex.printStackTrace(); - } - // the above will hopefully write the data to file. - } - - public void endConnection() { - pingTimer.stop(); - super.endConnection(); - - client.remove(); - - serverInstance.onThreadDisconnect(this); - } - - public String toString() { - return "ServerThread for " + (client == null ? "null" : client.getUsername()); - } -} + + private static final String autoPing = "ping"; + private static final String manualPing = "manual"; + + private static final int MISSED_PING_THRESHOLD = 5; + private static final int PING_INTERVAL = 1_000; // measured in milliseconds + + + private MinicraftServer serverInstance; + private RemotePlayer client; + + /// PING + + private Timer pingTimer; + private boolean receivedPing = true; // after first pause, it will act as if the ping was successful, since it didn't even send one in the first place and was just buying time for everything to get settled before pinging. + private int missedPings = 0; + + private long manualPingTimestamp; + + + private List packetTypesToKeep = new ArrayList<>(); + private List packetTypesToCache = new ArrayList<>(); + private List cachedPackets = new ArrayList<>(); + + private final boolean valid; + + MinicraftServerThread(Socket socket, MinicraftServer serverInstance) { + super("MinicraftServerThread", socket); + valid = true; + + this.serverInstance = serverInstance; + if (serverInstance.isFull()) { + sendError("Server at max capacity."); + super.endConnection(); + return; + } + + client = new RemotePlayer(null, false, socket.getInetAddress(), socket.getPort()); + + // username is set later + + packetTypesToKeep.addAll(InputType.tileUpdates); + packetTypesToKeep.addAll(InputType.entityUpdates); + + pingTimer = new Timer(PING_INTERVAL, e -> { + if (!isConnected()) { + pingTimer.stop(); + return; + } + + if (!receivedPing) { + missedPings++; + if (missedPings >= MISSED_PING_THRESHOLD) { + // disconnect from the client; they are taking too long to respond and probably don't exist at this point. + pingTimer.stop(); + sendError("Client ping too slow, server timed out"); + endConnection(); + } + } else { + missedPings = 0; + receivedPing = false; + } + + sendData(InputType.PING, autoPing); + }); + pingTimer.setRepeats(true); + pingTimer.setCoalesce(true); // don't try to make up for lost pings. + pingTimer.start(); + + start(); + } + + // this is to be a dummy thread. + MinicraftServerThread(RemotePlayer player, MinicraftServer server) { + super("MinicraftServerThread", null); + valid = false; + this.client = player; + this.serverInstance = server; + } + + public boolean isValid() { return valid; } + + public RemotePlayer getClient() { return client; } + + protected boolean parsePacket(InputType inType, String data) { + if (inType == InputType.PING) { + receivedPing = true; + if (data.equals(manualPing)) { + long nsPingDelay = System.nanoTime() - manualPingTimestamp; + double pingDelay = Math.round(nsPingDelay*1.0 / 1E6)*1.0 / 1E3; + System.out.println("Received ping from " + client.getUsername() + "; delay = " + pingDelay + " seconds."); + } + + return true; + } + + return serverInstance.parsePacket(this, inType, data); + } + + void doPing() { + sendData(InputType.PING, manualPing); + manualPingTimestamp = System.nanoTime(); + } + + void sendError(String message) { + if (Game.debug) System.out.println("SERVER: Sending error to " + client + ": \"" + message + "\""); + sendData(InputType.INVALID, message); + } + + void cachePacketTypes(List packetTypes) { + packetTypesToCache.addAll(packetTypes); + packetTypesToKeep.removeAll(packetTypes); + } + + void sendCachedPackets() { + packetTypesToCache.clear(); + + for (String packet: cachedPackets) { + InputType inType = InputType.values[Integer.parseInt(packet.substring(0, packet.indexOf(":")))]; + packet = packet.substring(packet.indexOf(":")+1); + sendData(inType, packet); + } + + cachedPackets.clear(); + } + + protected void sendData(InputType inType, String data) { + if (packetTypesToCache.contains(inType)) + cachedPackets.add(inType.ordinal()+ ":" +data); + else if (!packetTypesToKeep.contains(inType)) + super.sendData(inType, data); + } + + public void sendTileUpdate(Level level, int x, int y) { + sendTileUpdate(level.depth, x, y); + } + public void sendTileUpdate(int depth, int x, int y) { + String data = Tile.getData(depth, x, y); + if (data.length() > 0) + sendData(InputType.TILE, data); + } + + public void sendEntityUpdate(Entity e, String updateString) { + if (updateString.length() > 0) { + sendData(InputType.ENTITY, e.eid+ ";" +updateString); + } + } + + public void sendEntityAddition(Entity e) { + if (Game.debug && e instanceof Player) System.out.println("SERVER: Sending addition of player " + e + " to client through " + this); + if (Game.debug && e.eid == client.eid) System.out.println("SERVER: Sending addition of player to itself"); + String edata = Save.writeEntity(e, false); + if (edata.length() == 0) + System.out.println("Entity not worth adding to client level: " + e + "; not sending to " + client); + else + sendData(InputType.ADD, edata); + } + + public void sendEntityRemoval(int eid, int levelDepth) { + sendData(InputType.REMOVE, eid + ";" + levelDepth); + } + public void sendEntityRemoval(int eid) { // remove regardless of current level + sendData(InputType.REMOVE, String.valueOf(eid)); + } + + public void sendNotification(String note, int notetime) { + sendData(InputType.NOTIFY, notetime+ ";" +note); + } + + public void sendPlayerHurt(int eid, int damage, Direction attackDir) { + sendData(InputType.HURT, eid+ ";" +damage+ ";" +attackDir.ordinal()); + } + + public void sendStopFishing(int eid) { + sendData(InputType.STOPFISHING, "" + eid); + } + + public void sendStaminaChange(int amt) { + sendData(InputType.STAMINA, amt+ ""); + } + + public void updatePlayerActiveItem(Item heldItem) { + if (client.activeItem != null && !(client.activeItem instanceof PowerGloveItem)) + sendData(InputType.CHESTOUT, client.activeItem.getData()); + client.activeItem = heldItem; + + sendData(InputType.INTERACT, ( client.activeItem == null ? "null" : client.activeItem.getData() )); + } + + public void sendItems(String itemData) { + sendData(InputType.ADDITEMS, itemData); + } + + protected void respawnPlayer() { + client.remove(); // hopefully removes it from any level it might still be on + client = new RemotePlayer(false, client); + client.respawn(World.levels[World.lvlIdx(0)]); // get the spawn loc. of the client + sendData(InputType.PLAYER, client.getPlayerData()); // send spawn loc. + } + + private File getRemotePlayerFile() { + File[] clientFiles = serverInstance.getRemotePlayerFiles(); + + for (File file: clientFiles) { + String username = ""; + try { + BufferedReader br = new BufferedReader(new FileReader(file)); + try { + username = br.readLine().trim(); + } catch(IOException ex) { + System.err.println("Failed to read line from file."); + ex.printStackTrace(); + } + } catch(FileNotFoundException ex) { + System.err.println("Couldn't find remote player file: " + file); + ex.printStackTrace(); + } + + if (username.equals(client.getUsername())) { + /// this player has been here before. + if (Game.debug) System.out.println("Remote player file found; returning file " + file.getName()); + return file; + } + } + + return null; + } + + protected String getRemotePlayerFileData() { + File rpFile = getRemotePlayerFile(); + + String playerdata = ""; + if (rpFile != null && rpFile.exists()) { + try { + String content = Load.loadFromFile(rpFile.getPath(), false); + playerdata = content.substring(content.indexOf("\n")+1); // cut off username + // assume the data version is dev6 if it isn't written (it isn't before dev7). + if (!Version.isValid(playerdata.substring(0, playerdata.indexOf("\n")))) + playerdata = "2.0.4-dev6\n" +playerdata; + } catch(IOException ex) { + System.err.println("Failed to read remote player file: " + rpFile); + ex.printStackTrace(); + return ""; + } + } + + return playerdata; + } + + protected void writeClientSave(String playerdata) { + String filename; // this will hold the path to the file that will be saved to. + + File rpFile = getRemotePlayerFile(); + if (rpFile != null && rpFile.exists()) // check if this remote player already has a file. + filename = rpFile.getName(); + else { + File[] clientSaves = serverInstance.getRemotePlayerFiles(); + int numFiles = clientSaves.length; + filename = "RemotePlayer" + numFiles+Save.extension; + } + + String filedata = String.join("\n", client.getUsername(), playerdata); + + String filepath = serverInstance.getWorldPath() + "/" +filename; + try { + Save.writeToFile(filepath, filedata.split("\\n"), false); + } catch(IOException ex) { + System.err.println("Problem writing remote player to file: " + filepath); + ex.printStackTrace(); + } + // the above will hopefully write the data to file. + } + + public void endConnection() { + pingTimer.stop(); + super.endConnection(); + + client.remove(); + + serverInstance.onThreadDisconnect(this); + } + + public String toString() { + return "ServerThread for " + (client == null ? "null" : client.getUsername()); + } +} \ No newline at end of file diff --git a/src/minicraft/screen/Display.java b/src/minicraft/screen/Display.java index 951db6c1..8854888b 100644 --- a/src/minicraft/screen/Display.java +++ b/src/minicraft/screen/Display.java @@ -74,9 +74,7 @@ public void tick(InputHandler input) { boolean changedSelection = false; - if (menus.length > 1 && menus[selection].isSelectable()) { // if menu set is unselectable, it must have been - // intentional, so prevent the user from setting it - // back. + if (menus.length > 1 && menus[selection].isSelectable()) { // if menu set is unselectable, it must have been intentional, so prevent the user from setting it back. int prevSel = selection; String shift = menus[selection].getCurEntry() instanceof ArrayEntry ? "shift-" : ""; diff --git a/src/minicraft/screen/InventoryMenu.java b/src/minicraft/screen/InventoryMenu.java index 45860b2d..dadd009c 100644 --- a/src/minicraft/screen/InventoryMenu.java +++ b/src/minicraft/screen/InventoryMenu.java @@ -11,8 +11,8 @@ class InventoryMenu extends ItemListMenu { - private Inventory inv; - private Entity holder; + private final Inventory inv; + private final Entity holder; InventoryMenu(Entity holder, Inventory inv, String title) { super(InventoryMenu.getBuilder(), ItemEntry.useItems(inv.getItems()), title); diff --git a/src/minicraft/screen/MapData.java b/src/minicraft/screen/MapData.java index 00a4c1d5..db9bb38b 100644 --- a/src/minicraft/screen/MapData.java +++ b/src/minicraft/screen/MapData.java @@ -92,7 +92,7 @@ public enum MapData { WATER(Tiles.get("Water").id, Color.get(1, 26, 44, 137)), LAVA(Tiles.get("Lava").id, Color.RED), ROCK(Tiles.get("Rock").id, Color.get(1, 122, 122, 122)), - // SAND_ROCK(Tiles.get("Sand Rock").id, Color.get(1, 214, 214, 77)), + UP_ROCK(Tiles.get("Up Rock").id, Color.get(1, 147, 147, 147)), HARD_ROCK(Tiles.get("Hard Rock").id, Color.get(1, 127, 126, 107)), CACTUS(Tiles.get("Cactus").id, Color.get(1, 183, 183, 91)), diff --git a/src/minicraft/screen/PlayerInvDisplay.java b/src/minicraft/screen/PlayerInvDisplay.java index 44990766..786b7e17 100644 --- a/src/minicraft/screen/PlayerInvDisplay.java +++ b/src/minicraft/screen/PlayerInvDisplay.java @@ -2,29 +2,41 @@ import minicraft.core.Game; import minicraft.core.io.InputHandler; +import minicraft.core.io.Localization; import minicraft.entity.mob.Player; +import minicraft.gfx.Color; +import minicraft.gfx.Font; +import minicraft.gfx.Screen; public class PlayerInvDisplay extends Display { - private Player player; + private final Player player; - public PlayerInvDisplay(Player player) { - super(new InventoryMenu(player, player.getInventory(), "Inventory")); - this.player = player; - } + public PlayerInvDisplay(Player player) { + super(new InventoryMenu(player, player.getInventory(), "Inventory")); + this.player = player; + } + + @Override + public void tick(InputHandler input) { + super.tick(input); + + if(input.getKey("menu").clicked) { + Game.exitMenu(); + return; + } + + if(input.getKey("attack").clicked && menus[0].getNumOptions() > 0) { + player.activeItem = player.getInventory().remove(menus[0].getSelection()); + Game.exitMenu(); + } + } - @Override - public void tick(InputHandler input) { - super.tick(input); + @Override + public void render(Screen screen) { + super.render(screen); - if (input.getKey("menu").clicked) { - Game.exitMenu(); - return; - } - - if (input.getKey("attack").clicked && menus[0].getNumOptions() > 0) { - player.activeItem = player.getInventory().remove(menus[0].getSelection()); - Game.exitMenu(); - } - } + String text = "(" + Game.input.getMapping("SEARCHER-BAR") + ") " + Localization.getLocalized("to search."); + Font.draw(text, screen, Screen.w / 4 - 75 - text.length(), Screen.h / 2 - 46, Color.WHITE); + } } diff --git a/src/minicraft/screen/TexturePackDisplay.java b/src/minicraft/screen/TexturePackDisplay.java index 5c234990..1bd68b34 100644 --- a/src/minicraft/screen/TexturePackDisplay.java +++ b/src/minicraft/screen/TexturePackDisplay.java @@ -123,7 +123,7 @@ public void tick(InputHandler input) { // In case the name is too big ... private static String shortNameIfLong(String name) { - return name.length() > 24 ? name.substring(0, 16) + "..." : name; + return name.length() > 32 ? name.substring(0, 16) + "..." : name; } @Override diff --git a/src/minicraft/screen/TitleDisplay.java b/src/minicraft/screen/TitleDisplay.java index 19f1b388..63165a46 100644 --- a/src/minicraft/screen/TitleDisplay.java +++ b/src/minicraft/screen/TitleDisplay.java @@ -38,10 +38,10 @@ public TitleDisplay() { new SelectEntry("Singleplayer", () -> { if (WorldSelectDisplay.getWorldNames().size() > 0) Game.setMenu(new Display(true, - new Menu.Builder(false, 2, RelPos.CENTER, - new SelectEntry("Load World", () -> Game.setMenu(new WorldSelectDisplay())), - new SelectEntry("New World", () -> Game.setMenu(new WorldGenDisplay()))) - .createMenu())); + new Menu.Builder(false, 2, RelPos.CENTER, + new SelectEntry("Load World", () -> Game.setMenu(new WorldSelectDisplay())), + new SelectEntry("New World", () -> Game.setMenu(new WorldGenDisplay()))) + .createMenu())); else Game.setMenu(new WorldGenDisplay()); }), @@ -49,17 +49,17 @@ public TitleDisplay() { new SelectEntry("Options", () -> Game.setMenu(new OptionsDisplay())), new SelectEntry("Credits", () -> Game.setMenu(new BookDisplay(BookData.credits))), displayFactory("Help", - new SelectEntry("Instructions", () -> Game.setMenu(new BookDisplay(BookData.instructions))), - new BlankEntry(), - // new SelectEntry("Storyline Guide", () -> Game.setMenu(new - // BookDisplay(BookData.storylineGuide))), - new SelectEntry("Tutorial", () -> Game.setMenu(new TutorialDisplay())), new BlankEntry(), - new SelectEntry("About", () -> Game.setMenu(new BookDisplay(BookData.about))), new BlankEntry(), - new BlankEntry(), new LinkEntry(Color.BLUE, "Minicraft discord", "https://discord.me/minicraft") + new SelectEntry("Instructions", () -> Game.setMenu(new BookDisplay(BookData.instructions))), + new BlankEntry(), + // new SelectEntry("Storyline Guide", () -> Game.setMenu(new + // BookDisplay(BookData.storylineGuide))), + new SelectEntry("Tutorial", () -> Game.setMenu(new TutorialDisplay())), new BlankEntry(), + new SelectEntry("About", () -> Game.setMenu(new BookDisplay(BookData.about))), new BlankEntry(), + new BlankEntry(), new LinkEntry(Color.BLUE, "Minicraft discord", "https://discord.me/minicraft") ), new SelectEntry("Exit", Game::quit)) - .setPositioning(new Point(Screen.w / 2, Screen.h * 3 / 5), RelPos.CENTER).createMenu()); + .setPositioning(new Point(Screen.w / 2, Screen.h * 3 / 5), RelPos.CENTER).createMenu()); } @Override @@ -70,10 +70,9 @@ public void init(Display parent) { if (random.nextInt(2) == 0) { Sound.Intro.play(); - } - if (random.nextInt(2) == 1) { + } else { + Sound.Intro2.play(); - } /// This is useful to just ensure that everything is really reset as it should @@ -148,9 +147,8 @@ public void init(Display parent) { } @NotNull - private static SelectEntry displayFactory(String entryText, ListEntry... entries) { - return new SelectEntry(entryText, - () -> Game.setMenu(new Display(true, new Menu.Builder(false, 2, RelPos.CENTER, entries).createMenu()))); + private static SelectEntry displayFactory(String entryText, ListEntry...entries) { + return new SelectEntry(entryText, () -> Game.setMenu(new Display(true, new Menu.Builder(false, 2, RelPos.CENTER, entries).createMenu()))); } @Override @@ -209,14 +207,13 @@ public void render(Screen screen) { boolean isOrange = splashes[rand].contains("Orange"); boolean isYellow = splashes[rand].contains("Yellow"); - /// This isn't as complicated as it looks. It just gets a color based off of - /// count, which oscilates between 0 and 25. + /// This isn't as complicated as it looks. It just gets a color based off of count, which oscilates between 0 and 25. int bcol = 5 - count / 5; // this number ends up being between 1 and 5, inclusive. - int splashColor = isblue ? Color.BLUE - : isRed ? Color.RED - : isGreen ? Color.GREEN - : isOrange ? Color.ORANGE - : isYellow ? Color.YELLOW : Color.get(1, bcol * 51, bcol * 51, bcol * 25); + int splashColor = isblue ? Color.BLUE : + isRed ? Color.RED : + isGreen ? Color.GREEN : + isOrange ? Color.ORANGE : + isYellow ? Color.YELLOW : Color.get(1, bcol * 51, bcol * 51, bcol * 25); Font.drawCentered(splashes[rand], screen, 100, splashColor); @@ -238,99 +235,224 @@ public void render(Screen screen) { Font.draw("Mod by TheBigEye", screen, 300, 280, Color.GRAY); } - private static final String[] splashes = { "Happy birthday Minicraft!", "Happy XMAS!", "Happy birthday Eye :)", - "Happy birthday Zaq :)", "Thanks A.L.I.C.E!", - - // "Bye ben :(", - - // Also play - "Also play Minicraft Plus!", "Also play InfinityTale!", "Also play Minicraft Deluxe!", - "Also play Alecraft!", "Also play Hackcraft!", "Also play MiniCrate!", "Also play MiniCraft Mob Overload!", - "Also play Minitale!, oh right :(", - - "Playing " + Game.BUILD + ", nice!", "Based in Minicraft+, nice!", "Updates always!, nice?", - - // Now with... - "Now with better fishing!", "Now with better Weapons!", "Now with better tools!", "Now with better chests!", - "Now with better dungeons!", "Now with better sounds!", "Air Wizard now with phases!", - - "Only on PlayMinicraft.com!", "Playminicraft.com is the bomb!", "@MinicraftPlus on Twitter", - "MinicraftPlus on Youtube", "Join the Forums!", "The Wiki is weak! Help it!", "Great little community!", - - "Notch is Awesome!", "Dillyg10 is cool as Ice!", "Shylor is the man!", "Chris J is great with portals!", - "AntVenom loves cows! Honest!", "The eye and Cake rain!", "ASCII", "32.872 lines of code!", - - "Nobody should read this! #404", "You should read Antidious Venomi!", "Oh Hi Mark", "Use the force!", - "Keep calm!", "Get him, Steve!", "Forty-Two!", "A hostile paradise", - - // kill - "Kill Creeper, get Gunpowder!", "Kill Cow, get Beef!", "Kill Zombie, get Cloth!", "Kill Slime, get Slime!", - "Kill Slime, get Problems!", "Kill Skeleton, get Bones!", "Kill Skeleton, get Arrows!", - "Kill Sheep, get Wool!", "Kill Goat, get Leather!", "Kill Pig, get Porkchop!", - "Kill Chicken, get Feathers!", "Kill Guiman, get more Feathers!", - - // Mineral levels - "Gold > Iron", "Gem > Gold", - - "Test == InDev!", "Story? yes!", "Mod on phase B-eta", - - "Axes: good against plants!", "Picks: good against rocks!", "Shovels: good against dirt!", - "Swords: good against mobs!", - - // What's that? - "Infinite terrain? What's that?", "Ceilings? What's is that?", "Redstone? What's that?", - "Minecarts? What are those?", "Windows? I prefer Doors!", "2.5D FTW!", "Grab your friends!", - "Sky?, better Aether!", - - // Not Included - "Null not included", "Humans not included", "Herobine not included?", "Mouse not included!", - "No spiders included!", "No Endermen included!", "3rd dimension not included!", "Orange box not included!", - "Alpha version not included!", "Cthulhu sold separately!", "Skins not included!", - - // Included - "Villagers included!", "Creepers included!", "Skeletons included!", "Knights included!", "Snakes included!", - "Cows included!", "Sheep included!", "Chickens included!", "Goats included!", "Pigs included!", - "Cthulhu included?", "Enchantments Now Included!", "Multiplayer Now Included!", "Carrots Now Included!", - "Potatos Now Included!", "Boats Now Included!", "Maps Now Included!", "Books included!", - "Sad music included!", "Big eye included!", - // "Nether Now Included?", - - "Shhh!,secret dimension!", "A nice cup of coffee!", - - // Worlds - "Bigger Worlds!", "World types!", "World themes!", "Mushroom Biome!", "Desert Biome!", "Forest Biome!", - "Snow Biome!", "Better sky", "Slow world gen :(", - - // Ideas - "Sugarcane is a Idea!", "Milk is an idea!", "Cakes is an idea!", "Coffee is another idea!", - - "Texture packs!", - - "Creeper, aw man", "So we back in the mine,", "pickaxe swinging from side to side", "In search of Gems!", - "Life itself suspended by a thread", "saying ay-oh, that creeper's KO'd!", - - "Gimmie a bucket!", "Farming with water!", "Press \"R\"!", "Get the High-Score!", "I see a dreamer!", - "Potions ftw!", "Beds ftw!", - - "Defeat the Air Wizard!", "Defeat the Eye queen!", "Defeat the Keeper!", "Defeat me...", - - "Conquer the Dungeon!", "One down, one to go...", "Loom + Wool = String!", "String + Wood = Rod!", - "Sand + Gunpowder = TNT!", - - "Try Eyenglish!", - - "Sleep at Night!", "Farm at Day!", - - "Explanation Mark!", "!sdrawkcab si sihT", "This is forwards!", "Why is this blue?", - "Green is a nice color!", "Red is my favorite color!", "Hmmm Orange!", "Yellow = Happy!", - // "Y U NO BOAT!?", - "Made with 10000% Vitamin Z!", "Too much DP!", "Punch the Moon!", "This is String qq!", "Why?", - "You are null!", "hello down there!", "That guy is such a sly fox!", "Hola senor!", "Sonic Boom!", - "Hakuna Matata!", "One truth prevails!", "Awesome!", "Sweet!", "Great!", "Cool!", "Radical!", - "011011000110111101101100!", "001100010011000000110001!", "011010000110110101101101?", "...zzz...", - - // Tributes - "Rick May, 1940 - 2020", - - "Something cool is coming ;)", }; + private static final String[] splashes = { + "Happy birthday Minicraft!", + "Happy XMAS!", + "Happy birthday Eye :)", + "Happy birthday Zaq :)", + "Thanks A.L.I.C.E!", + + // "Bye ben :(", + + // Also play + "Also play Minicraft Plus!", + "Also play InfinityTale!", + "Also play Minicraft Deluxe!", + "Also play Alecraft!", + "Also play Hackcraft!", + "Also play MiniCrate!", + "Also play MiniCraft Mob Overload!", + "Also play Minitale!, oh right :(", + + "Playing " + Game.BUILD + ", nice!", + "Based in Minicraft+, nice!", + "Updates always!, nice?", + + // Now with... + "Now with better fishing!", + "Now with better Weapons!", + "Now with better tools!", + "Now with better chests!", + "Now with better dungeons!", + "Now with better sounds!", + "Air Wizard now with phases!", + + "Only on PlayMinicraft.com!", + "Playminicraft.com is the bomb!", + "@MinicraftPlus on Twitter", + "MinicraftPlus on Youtube", + "Join the Forums!", + "The Wiki is weak! Help it!", + "Great little community!", + + "Notch is Awesome!", + "Dillyg10 is cool as Ice!", + "Shylor is the man!", + "Chris J is great with portals!", + "AntVenom loves cows! Honest!", + "The eye and Cake rain!", + "ASCII", + "32.872 lines of code!", + + "Nobody should read this! #404", + "You should read Antidious Venomi!", + "Oh Hi Mark", + "Use the force!", + "Keep calm!", + "Get him, Steve!", + "Forty-Two!", + "A hostile paradise", + + // kill + "Kill Creeper, get Gunpowder!", + "Kill Cow, get Beef!", + "Kill Zombie, get Cloth!", + "Kill Slime, get Slime!", + "Kill Slime, get Problems!", + "Kill Skeleton, get Bones!", + "Kill Skeleton, get Arrows!", + "Kill Sheep, get Wool!", + "Kill Goat, get Leather!", + "Kill Pig, get Porkchop!", + "Kill Chicken, get Feathers!", + "Kill Guiman, get more Feathers!", + + // Mineral levels + "Gold > Iron", + "Gem > Gold", + + "Test == InDev!", + "Story? yes!", + "Mod on phase B-eta", + + "Axes: good against plants!", + "Picks: good against rocks!", + "Shovels: good against dirt!", + "Swords: good against mobs!", + + // What's that? + "Infinite terrain? What's that?", + "Ceilings? What's is that?", + "Redstone? What's that?", + "Minecarts? What are those?", + "Windows? I prefer Doors!", + "2.5D FTW!", + "Grab your friends!", + "Sky?, better Aether!", + + // Not Included + "Null not included", + "Humans not included", + "Herobine not included?", + "Mouse not included!", + "No spiders included!", + "No Endermen included!", + "3rd dimension not included!", + "Orange box not included!", + "Alpha version not included!", + "Cthulhu sold separately!", + "Skins not included!", + + // Included + "Villagers included!", + "Creepers included!", + "Skeletons included!", + "Knights included!", + "Snakes included!", + "Cows included!", + "Sheep included!", + "Chickens included!", + "Goats included!", + "Pigs included!", + "Cthulhu included?", + "Enchantments Now Included!", + "Multiplayer Now Included!", + "Carrots Now Included!", + "Potatos Now Included!", + "Boats Now Included!", + "Maps Now Included!", + "Books included!", + "Sad music included!", + "Big eye included!", + // "Nether Now Included?", + + "Shhh!,secret dimension!", + "A nice cup of coffee!", + + // Worlds + "Bigger Worlds!", + "World types!", + "World themes!", + "Mushroom Biome!", + "Desert Biome!", + "Forest Biome!", + "Snow Biome!", + "Better sky", + "Slow world gen :(", + + // Ideas + "Sugarcane is a Idea!", + "Milk is an idea!", + "Cakes is an idea!", + "Coffee is another idea!", + + "Texture packs!", + + "Creeper, aw man", + "So we back in the mine,", + "pickaxe swinging from side to side", + "In search of Gems!", + "Life itself suspended by a thread", + "saying ay-oh, that creeper's KO'd!", + + "Gimmie a bucket!", + "Farming with water!", + "Press \"R\"!", + "Get the High-Score!", + "I see a dreamer!", + "Potions ftw!", + "Beds ftw!", + + "Defeat the Air Wizard!", + "Defeat the Eye queen!", + "Defeat the Keeper!", + "Defeat me...", + + "Conquer the Dungeon!", + "One down, one to go...", + "Loom + Wool = String!", + "String + Wood = Rod!", + "Sand + Gunpowder = TNT!", + + "Try Eyenglish!", + + "Sleep at Night!", + "Farm at Day!", + + "Explanation Mark!", + "!sdrawkcab si sihT", + "This is forwards!", + "Why is this blue?", + "Green is a nice color!", + "Red is my favorite color!", + "Hmmm Orange!", + "Yellow = Happy!", + // "Y U NO BOAT!?", + "Made with 10000% Vitamin Z!", + "Too much DP!", + "Punch the Moon!", + "This is String qq!", + "Why?", + "You are null!", + "hello down there!", + "That guy is such a sly fox!", + "Hola senor!", + "Sonic Boom!", + "Hakuna Matata!", + "One truth prevails!", + "Awesome!", + "Sweet!", + "Great!", + "Cool!", + "Radical!", + "011011000110111101101100!", + "001100010011000000110001!", + "011010000110110101101101?", + "...zzz...", + + // Tributes + "Rick May, 1940 - 2020", + + "Something cool is coming ;)", + }; } \ No newline at end of file diff --git a/src/minicraft/screen/entry/ListEntry.java b/src/minicraft/screen/entry/ListEntry.java index 9c14081c..37695b8f 100644 --- a/src/minicraft/screen/entry/ListEntry.java +++ b/src/minicraft/screen/entry/ListEntry.java @@ -35,8 +35,7 @@ public void render(Screen screen, int x, int y, boolean isSelected, String conta String string = toString().toLowerCase(Locale.ENGLISH); contain = contain.toLowerCase(Locale.ENGLISH); - Font.drawColor(string.replaceAll(contain, Color.toStringCode(containColor) + contain + Color.WHITE_CODE), - screen, x, y); + Font.drawColor(string.replace(contain, Color.toStringCode(containColor) + contain + Color.WHITE_CODE), screen, x, y); } /**

2PLab9$B8R~LhGG#YVz8f| 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