From 1e127ac1d4c95e55f2d36a0572da0b609aad313a Mon Sep 17 00:00:00 2001 From: catfoolyou Date: Fri, 31 Jan 2025 11:13:48 -0500 Subject: [PATCH] 20 errors --- .../8.0/executionHistory/executionHistory.bin | Bin 12283839 -> 12283839 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/8.0/fileHashes/fileHashes.bin | Bin 1960423 -> 1960473 bytes .gradle/8.0/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../8.0/fileHashes/resourceHashesCache.bin | Bin 894574 -> 895730 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../GuiScreenSingleplayerException.class | Bin 0 -> 3733 bytes .../eaglercraft/TextureLocation.class | Bin 0 -> 2033 bytes .../sp/ipc/IPCPacket15ThrowException.class | Bin 0 -> 3298 bytes .../eaglercraft/sp/ipc/IPCPacketBase.class | Bin 0 -> 782 bytes .../java/main/net/minecraft/src/Gui.class | Bin 0 -> 4271 bytes .../main/net/minecraft/src/GuiButton.class | Bin 0 -> 2966 bytes .../main/net/minecraft/src/GuiScreen.class | Bin 0 -> 6960 bytes .../minecraft/src/AbstractResourcePack.java | 4 +- .../net/minecraft/src/EntityBreakingFX.java | 2 + .../java/net/minecraft/src/EntityCloudFX.java | 2 + .../java/net/minecraft/src/EntityCrit2FX.java | 2 + .../java/net/minecraft/src/EntityCritFX.java | 2 + .../net/minecraft/src/EntityDiggingFX.java | 2 + .../src/EntityFireworkOverlayFX.java | 2 + .../minecraft/src/EntityFireworkSparkFX.java | 2 + .../src/EntityFireworkStarterFX.java | 2 + .../java/net/minecraft/src/EntityFlameFX.java | 2 + .../java/net/minecraft/src/EntityHeartFX.java | 2 + .../minecraft/src/EntityHugeExplodeFX.java | 2 + .../java/net/minecraft/src/EntityLavaFX.java | 2 + .../java/net/minecraft/src/EntityNoteFX.java | 2 + .../net/minecraft/src/EntityPickupFX.java | 1 + .../net/minecraft/src/EntityPortalFX.java | 2 + .../net/minecraft/src/EntityReddustFX.java | 2 + .../java/net/minecraft/src/EntitySmokeFX.java | 2 + .../net/minecraft/src/EntitySnowShovelFX.java | 2 + .../minecraft/src/EntitySpellParticleFX.java | 2 + src/main/java/net/minecraft/src/Gui.java | 1 + .../java/net/minecraft/src/GuiButton.java | 3 +- .../net/minecraft/src/GuiMultiplayer.java | 125 ++++--- .../java/net/minecraft/src/GuiScreen.java | 11 +- .../net/minecraft/src/GuiScreenBackup.java | 166 -------- .../src/GuiScreenBackupDownloadThread.java | 25 -- .../src/GuiScreenBackupRestoreTask.java | 52 --- .../src/GuiScreenBackupSelectionList.java | 115 ------ .../java/net/minecraft/src/GuiSlotServer.java | 142 +++---- .../java/net/minecraft/src/GuiSlotStats.java | 2 + .../net/minecraft/src/IntegratedServer.java | 6 +- .../net/minecraft/src/NBTTagCompound.java | 4 + .../java/net/minecraft/src/RenderEntity.java | 1 + .../net/minecraft/src/RenderTNTPrimed.java | 1 + .../java/net/minecraft/src/ServerData.java | 166 +++++--- .../java/net/minecraft/src/ServerList.java | 353 ++++++++++++++---- ...SimpleReloadableResourceManagerINNER1.java | 23 -- .../java/net/minecraft/src/SimpleTexture.java | 2 + .../src/ThreadDownloadImageData.java | 2 + 52 files changed, 618 insertions(+), 623 deletions(-) create mode 100644 build/classes/java/main/net/lax1dude/eaglercraft/GuiScreenSingleplayerException.class create mode 100644 build/classes/java/main/net/lax1dude/eaglercraft/TextureLocation.class create mode 100644 build/classes/java/main/net/lax1dude/eaglercraft/sp/ipc/IPCPacket15ThrowException.class create mode 100644 build/classes/java/main/net/lax1dude/eaglercraft/sp/ipc/IPCPacketBase.class create mode 100644 build/classes/java/main/net/minecraft/src/Gui.class create mode 100644 build/classes/java/main/net/minecraft/src/GuiButton.class create mode 100644 build/classes/java/main/net/minecraft/src/GuiScreen.class delete mode 100644 src/main/java/net/minecraft/src/GuiScreenBackup.java delete mode 100644 src/main/java/net/minecraft/src/GuiScreenBackupDownloadThread.java delete mode 100644 src/main/java/net/minecraft/src/GuiScreenBackupRestoreTask.java delete mode 100644 src/main/java/net/minecraft/src/GuiScreenBackupSelectionList.java delete mode 100644 src/main/java/net/minecraft/src/SimpleReloadableResourceManagerINNER1.java diff --git a/.gradle/8.0/executionHistory/executionHistory.bin b/.gradle/8.0/executionHistory/executionHistory.bin index a80d0a16e9dc01ed014e14f4a0a375af94b7be97..f8bd95163d7fcba1d049b2fe94818aace36d7edf 100644 GIT binary patch delta 6581 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 delta 8105 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 pp5Oe8yez1iZsI(`vt$=0rIR2 zs;qA8vtKbGFLZ)lQM(!c_o++J%a+%Gm9(1hO zg$BmY)Xh#*z9AkKPvmnNQc-xCG^XSIaw9oXZ|k6hw;mM?#VI>=iTX18yUvtW5$tkm|6(UTz3aL7Il`Ntmn^aEk(eI~= z2V6hyeQRHvj_uFD(J!Tqe5Z>S{Y`Vs?-BfZR53TzyAglO%{*dSt1}t>&{y0)Ff3ek z+zG_!IJ`&j>)P3vXb%+Px#g-{Tui5%VfiP5U-z9| zbtfw+ua0X6Ok$ij=dF&G+NNX0C!k`ih@>i&PXx-;g*RlG46?8eq-F0{Po7lK9W;aU z)=M&l-*@PWr61s|B{vmbhs5)U{>BM%i}wHZ?8J*5V$nOnIO_PJTT?u)ZTTs_x8#2y zI<|97$+ml`moMiGq;mGxe9rg|q(mad`2 z#O*D0LHsoaYD<64*;Kek+=E>|;BYAt!j7Hr_9S-cmo~zmevswp?&-X!*wUlHsH(1@ zGb4<^shV_kEEY=X7pPMA2gzml9|DB^l$SBEs{!=kmn!HaaCkIM zk)<>6l&C36xN4KWEOk$gZbL&4702BAnO=P$p>y^2fe}~yL{aNeb`1IpIvSN>H7CI+ zD(x8E#6$D__6W%vV~R|KE^ZuQOsDuv`a2o)SKz6$V-rjaIhO`+%p5p)TkLzEVuTvb zXVb$FVL?8u(OG!9jQK)Ac6#h2iIXs{ihGqJnmOLMASkpdcklcJoPo{^)B-G!1_HeZQ^uPB$u@=6DXn+))5Ts9-$AV zF@bJ@57^R~REjNq^VE#C96BHa$O3YJJiq`H07XCvPzIO)3qXJhpbDq~Y(O2*05kzD zU?`vs=l~o*7tjOr0WM$w3M1ndTifjz+AKnbuH*awsXWx#%* o9H;;e00)6e;1Ey+R0D^BBR~ys6sQI201BuFj!|tn$KO8qA5DvRjQ{`u diff --git a/.gradle/8.0/executionHistory/executionHistory.lock b/.gradle/8.0/executionHistory/executionHistory.lock index 1bb560256cbb38ab1235a67931353587c67241a5..c7f9f2ca37f6e0044f3c7bd4857ed55a609ed2a3 100644 GIT binary patch literal 17 VcmZQJ@DbZG(fUj^0~oOW1pp|w1YZCE literal 17 VcmZQJ@DbZG(fUj^0~oOW0sttq1Y7_B diff --git a/.gradle/8.0/fileHashes/fileHashes.bin b/.gradle/8.0/fileHashes/fileHashes.bin index f3dd5853706dd70f55d78d985db6b2c131e9e1e8..1e81aec5c78a74ab7746bf75bd8855fcd7ad925a 100644 GIT binary patch delta 1691 zcmXxk2~ZPP7yw`hNgxn8vK+fFgiSSP#4kS`Kj(QL7Q`h>`(qHAPTBRuc${ z2=b^XhX@{MK|xjpifC0TBDLZ{(?QVzTTuZO$`NQcdAKwG&b*m#{{P?qy?w7ADSm2K zq)>(wi!!3v6o=wc#*_)gqf99?icd|U%qa`XlCr81h&l{YX@?F$I>%z@UT#`{hM$4% z5&iR;F62OaDCWmuyT0_s8=XP+ zqscwL8W3cJiO3}&Pg(RgP}{?<0%-hvd5IXf&%;wF1^N`MRiJP*Zlhsv^wh@ACu7AGYZwIV3=mfD%tWMzhWmFWF?5acJ~{XJ_)7 z{SCw`XH+mkH^-#ch}y$0a{)%%UewL#>6E@f`T3?|^Zz_C>9EgkJ;hXEhyo~k%gktY z6;WtRW;AS2yX+FOq-$j=r-sxedMfCVBRU(({xHEH_bM?;vN@hwZ7K9k_B$ISja80M z$_+^Rz=zGu_j_L>8fTHa)68w1#<^}et>XJRn;=h5@sm-AhQcrxD~xvR)9n%K&4ahD zG3GT64kz%sBbvo}D(Ss}s0-T8xQ~Q4L27Cj<@q`;3wa>lm)h7ScSp1(2vJj*%3%iZ zh!0j{INTCkf3;KdYHd@vV#4bd(<3u0$%P@fPG}G4bz*RygFip@d+c1JFI=MoNBkpZ z#^)oG=La9w2m$Tu47}#z zS<&DzmlQfxiCVhb=VJF0%W! z2PZ!^mx%zqLIw7*$$jTK9+!8I^KV_5uI^Br?m)&uinvFt z<9Ma#43-Ip>Z;y2F7bh57A63OyaUnVL$%Yhx*kb8zKT4x#wsW4l%9}}r=p5e zrEp=b5k~jC0|Nr`u(s@OuT3!=Ia-_P){gh1l960wO`#-$*-@UMkeQ3d)+?U5;wo}i zI6v!qqr8b|APe^GWzJ+OS2!n#{3QL@I1#YGQuN|<;ZaffE!184fzNaCN@mjah6*Wr zlJb1kHe?Z3Tzp05g9)|KlaxYKh;Ek>xv;zeU)6MPwd!!E6X$+Peao*KY+t znc!+qC%B62tJn>WUWlx9OC{VG%$)pVFGMSOur|%o heA*gEb+w-+d{x9R@m|`sik`{bOby**Jixr%{|7<=V!!|Z delta 1587 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 c#s^5+L338M$$zkinhs<` zEkbSaIpBj@*n=V`q*J+32r7}(#H1HtMxl_PgraSdY;jh^p*iS7E8;h zilvWc6emz_l46+5?6R~Es0Mlu(`po5g7+MSnK5#n`gL@)kW)eUHQE=bxJ^`EBm3rb zFUsciVgl===xTb6Eq`dyf+WU@Ic`~)b2B1hSr}v6CgiDk^(>CsS#AiuLw6=KbiB`F zPKK%iwwK}QK{gl3l7{8a7Lg@0-NJ$8S{4*X65=K^IC48!ObA@}ScZy`$Lu**GEC;0 zUioZ5tHb>PHfg0+G`(a&G3fiwS_s)c*b<}b@^_SOmub;@zNcZ1p<&Kk9Ze50DY!2X zU19v91<5gdoFRBCPYa+_nR7xb#gSAV?@v8w%;qi|{L8paLzaUVD9k=1ljGMLk52M< zjfOB)&u0j4ojf5J0j<2;4_Dgw1EB<&EN5nAPoXg6bfL&cp_h;KQxl>NC^I@jOOEYDqMj z`_$7`8ul5*w1HEg&Rgj-B3`K_k+?dmRtA#KXE@9oc;||0+eKq2+%8si9M2FAE2i^B zco4aKMkn7W)mDiojdTYQpTrA+U$ep;MY%p>T>Rhg)4KQ2pq$Lp+R?aQV~KFD=`IV_ z{dUKZ54J8XF&Gv7T1+6?hqOwL#R^f!Z>MZXc+y5Sq>bu>{#1#D5Bj1RD_`^*k>vIn TZPtGu9-;fKXA^|(U(@v$fmQWw diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 4f02df07a8321b378bf2b47702808f5eb09c8dd0..de392b382fd385ea746ccd7fcc04e1d924b92fc8 100644 GIT binary patch literal 17 VcmZSH;5Bjcn=huq3}C>n1^_u61eX8+ literal 17 VcmZSH;5Bjcn=huq3}C>{3;;O!1atrZ diff --git a/build/classes/java/main/net/lax1dude/eaglercraft/GuiScreenSingleplayerException.class b/build/classes/java/main/net/lax1dude/eaglercraft/GuiScreenSingleplayerException.class new file mode 100644 index 0000000000000000000000000000000000000000..661d87d6c94ff64baefdc2a3e0c4f6153bdbb4ef GIT binary patch literal 3733 zcmbtXTT~m@72OvJjU*3P7RU+4!LkD}k_{NU!NGFV*u*4iz#)M`Owxuyx}Y)Aj5-<_ z<2Gs9rtkMVO`mboxOE?CT7zSEt*-vIKka9~`rWnKuYP7VrTfl^ha(^#{m{(4XU^-M zv(GtKfBx_7KLB_y-i)FF0S!SNjR*;}Thi?-nU>5s#+=(%adLf+RL$|6Bc&w}I&E5} z`=CIeJ2e?W7!eIo9lM|loK%uU<8pt#nwNdjm@i7lSF)~P+_Xq77mX$9oV%QpW!JQ+ zHC!@Gt0b+ez&#^7*v}}7%{q1?MpulSFC8DbXk0RA*_!VgcO9DW_~JTR&?*p-8-_BT z_APy^l>5wbt}i<_G-l)$q}zZ0M8UBa*S+*~?$vP@?iPs7R$bS&M$C#U5cBOag=wu|FgPfi_Uzm9v*A<(#J=G}sT$SP`5$3aC66{I;|aHF^vof^7y+=s&g2kT?w zA9%tstV+>vrNFLv>1M5pYgjq%y1G+a1oRz3nJ`j}d_@*z&YiNIV!pTR*z=C8RC;r^ z<(gJiDo>8+IEo$t-CZ;Hm|POLue&}0sd`crZRk@VJ0@^qYSBGQAj~^<)yk{XyidnNI77GQ7?LNYm6wim1d?0CcX$&AaWjO6HJsBi ztYAC1ZI!$m0%=-0j_r&xFUCAG@+h(z-ml{^j0kkpV`H-$3<-hZCw|ID+#SKF6;6sM z9Kv}Wk9#mDjB*PES5B(Kt zjm{)pz_f;^bv%O)3dHMK1hj%tIWI4>uBd-nNj$4#1_sSq9=UZ*w^#7BBx=a95Z~Dc z;_Prz$D9J~T_s~d4%t@DaHmYSz?G^Iw-Sed3}E&8bp?ZqIu=l*YYGNK(xT@w@5e^q zf$n$9bv>ks^VFo$Z0WF-=BU!_YgEDeunq?m9+ufr_{?suoZ8`{Ovw{*w&_diEQ@t) zwcJHmU`sl#sQwXI8nY{=>W`|ue^keFcz(_HS}SJ_4y%f5!wWh-uA~}F59y!O@ghFO zZHYnMsv(cAjfYGWpTTD}d``#b@r5m$-a0SylQ%1>_pgrwR?k);UH_g*O$wBDW~mSP z|Iy=>z2K0YC%Si!@Q~-LrCI4r7_&uE;v;s>C{7xVsrEHu&@Gru-{AH}*H5$M@XHYK zYNV2jGl01j)F!wNmJO%he;xN(&$8aEYRRijRW#nXATi+DWwICL9O2Y7 zuIhKxDA%0b?T^ec>CD+qNwOhs7ynvURq<$2j?g`yL=cVJRVOEhO%;=ScRpROsz@gO ztZlm$PL1-YbPIOAvO9!pQTz-)*Kl27`WFJ78^vo{m+S>uo8^AV4%2hn;jnpWa|f?6 z`br-)tb9>cI!A1Kp<2#tfr~l|zTm`CS#H7p^d=2!qhb@OW_!pe7RTB6I75HMxF?fI z5ytBR`_5QNuUjYWT&~I{l3Xk>V#&kea2Rh0wDk7&CPmVb>gvNQOOksw_^f3~XQ*gY zDzc*C1_$^yPTzT24J(`gJF^lwerRxz?WlpRF~}!xZd^5}tCIKT20MuUb7{0<`&cgld*&s7Y}hPv1Zy{d=@s2yoTjSd8WKTpS1$W1TZ^ z;!wPM1$3@=dKvwJR|OfDWSy+D=<9v;Q&%dqKB(<=!A(bEb)f?0uFO< zr8ts~5IaZlJ#xH;Uc8QD_$!X%AG}xon>Wh?I3c<)AdcdsnB;Bo5>AWfc>PnTxI$bk z5tZMdod`9zf59dnOuE`D9hPwuZT|z(nXmi+ literal 0 HcmV?d00001 diff --git a/build/classes/java/main/net/lax1dude/eaglercraft/TextureLocation.class b/build/classes/java/main/net/lax1dude/eaglercraft/TextureLocation.class new file mode 100644 index 0000000000000000000000000000000000000000..435c024d445dc2a62f38665202673f10c78dcd34 GIT binary patch literal 2033 zcma)7T~ixX7=BKmYzRv!DFh2Gq=jMwWV5T9IyQ){syO`K4-Imr7)ddfKnxuQI!&BH zm%y2Ad0*yj=~VN#Hn&yT7wDR`9Lv8Z(2>cmbt8^$0|^s7Fa@~QpcYNc6Gc_pj1 z^2(mv^7E_ef#390(Jf2gavg!ry7X%T$>JeH$@eU$TF{uMP4wZ6K)hYNX8jR4pRnRGx0jE2#n|)?^=#(CAQ&}^ULj%fLT?3SO70etY~hbg%;CDg(5~E3^RB~oTetig zcMV@UKD%WyTI@D+r2e5Ofsb*+z=DZSu-I;&ql7GIUDMla=OZoDMqSe>`qact6a{)V zEvIr2e`jVX%j*<6*vloW>PY=O1m+^Wbs%_)I#ua$<8A(}R}ZVLewNuoB2_p_BVlSmb(}l6%zCc0;)*5V@(xFmkcS z=zWO(+&%`^e-4a3xo&`a~v=qB`Of~U}rJHcH5ff81EB3R%8`yZd9D=~@=G9m#a|hUrv!Ifs9_uD{s-oT_l5uf literal 0 HcmV?d00001 diff --git a/build/classes/java/main/net/lax1dude/eaglercraft/sp/ipc/IPCPacket15ThrowException.class b/build/classes/java/main/net/lax1dude/eaglercraft/sp/ipc/IPCPacket15ThrowException.class new file mode 100644 index 0000000000000000000000000000000000000000..ca1b892ff35bbd80ed1b39df22e4d0a065d48f0b GIT binary patch literal 3298 zcma)8TXPge6#jZQFv(^}Ac4e$i$Q|q>WU}=o1jSmS=|IQF(_U;yKORLGPBOi0`Y#o z-|_ltS%nY2XsH;ivV8Vm_+t4REET_=nQUfFypUq2r~C9d-*?W}XZoiwAX0s<|&ZuG_uztvLtl+Rfx~F&AK)pa~XjBO-J3HceaN~)yiuGgC?#+mhZAu64(-Rt4YS`M(o862KJe_5jT-b z62pl~5Q3;b=UIUYQPenzLG(`RU^kmMpkdVc)?-S0J!B$>A%SRj2&}Fr9~mDuaSLwc z8vS}Qa6N&xWqx5T^YJ`0If^j@M@$?Avk>8{F(LCg=})Nh5pyyc#c>mP+)gk~I9;2& zNZmODg=P69Qrd_KoG@_G#GSZHVDNwIcvSk-!g@dO3W_3LGg0{lOyO<=(+M+8J(V8e2}X=ztfnz(or8z!w; zM+Oy-dFW1@BYhZ$Rs%SkV|~Wl60MsHmZK&r3p2`_k~4OArre^mr=@4<_js}{n6pSQ zSNPvW`FnF=$euOQlWY^q8Ji|LJ8UDZYb@*LvYOK0NV9EF*M%A;i{)iD2mjl_npx9M z8%xSp%#F>nrjJe(IN3VF*utWqW-Q9Fbqx!y*;=X_CUw6Zm*qIknQAZg4Lq5UM*c)~ zh1E^~Xs-nj^^Fign&*MNt0sE9OgUL>OKIDkrKnif%%ofKit3o91+e2EKM>dH7R9qO z>be2F%ksDi=G>CsydJM+@ETq>@PAbADENU26Gbd8kX&<6ZXAF8-52m*B@K?>NdEv!(AV*6)2PbyXJDB4^-3 z#`_27632>dAcaRb;#ZR6P5LUpx7l!h4)q-Kromr}Go#!o z_}tic38L?N824U6!#Bu$8Csv=Zxb!FmpZi2Pb=p6W=4BpV}WnlpA-8l(oWlVRQ(Nn zhmDueMxTBC-=Jf~aSKh^vH06Yx9zx!f7*Fhnm+luu1yo=+XH zISe?E43mb&ABE{;n5}4FMw+la5vI8srnwrXnPHmg*5mGosh*kROq4^PTmw{M0H5=z zi5%$r8kr?*7wGF>!ZiXU%R!I8aQg7}ZJ#nFG>Dd#Fp$Ej7t-S5m0xv2BBVQbg9B^Y zfNPkLUFbwN-*)pO-i@2FCq&)HSlfv7ENiW4AE@F#fO9xcWSzVPEOIr4$GFbh8fN2Ib}U>Q7b}C$Nq)B8^v2M#I*Mrn)Y`X ze|YF$d2SsHZOC)04i#0bjmifOlIS7UCr6q?tk!UqYuW6g_X4VT4jkO98c|RjU@7*hv#L8f;TVO-N9hV7h+{uXO4-keN58apR_c z#E*oH>n>dQ1Kju{{1tA*15#7En0LREPhv=j9mukSkbz1p61-zfc5M#{$Jsfo?@k#fm5(@~KMJ?VSzl|Z4~7>n|H&NHcH zJ?O`}TGG@!y48zASH1AYgQoVlIU?loW-!a60+vZ}$U~Zx6qWg2VvH6T>($#bEez`71dRSmL`$b)YJXx_B+Vi=3OsO%zb3=WzOc&VI<+ z4py*C^gW`BSVxI*0%^vp^h{QEaUC~kEmX;{Le(}NVU3=FTgp%YMH=hAGj_*a$0$&Jz9RUP2w9gsWjErTJ3Yn)b&zU(#L-1I!RCES4 z_kYdtiL~s%}DCliY^8ySf@(HWs3p)z06tmQaXBM zFH*3Eixt_F)onVqV~2)V!8&P~rToZ3DW@U8!@5=v>ez{gl+{q#D%*!=uO z9?|h70lb3;vYlbVRV)>rSupYy+3nM@3%hA;o_2p>IG|j*2tS@%X!lhcZYO5D#^4}Oh;vN?)1qMmqsEi<`EqOI7;s~#>{J` zr9m5sB8y`o9M>_3$2DwQU*nN-$vMYEo3_cSv=vNe+_9PeR59<&66fBr294aEY#%es z;)ITq7}Bs=60h4hvyyF@2ibZbL*dS-Kl>UWCmGRk8fP@bJz%Da&g{e_ODFIMKrwt7 zPlhn2<1C)iuw{Mvqq%a4)nM9Zi=_#L--uX!MaMH@qIQf$+ zLPZjjuroRe5;h`x0%#=+Ui>Xzq#4vUVL7wnulQj``S=DTX2bSgYRMz`>V=tq~_ zCQ4mGZ#9y%YKLu-V-&0ef_z@(EW=Ub7}#|W+9woRP~uazfe^}k>aGIj@e*f#*r;$t zj6YD0fK*TFW5iO213kwQf#a!kkAFJtpHBFz2#HIda@kF%Ks!x3nd>Izu^FvMqMI)+ z2{Xw3Fn1j+@JXk&fFfPvnk1CMbxLy16c#D@l=M|fe%zq!gVsv%YwI&i_b|hr!-4ei zL|`z*1XIlMz8Ur~`Zi{=of+<6hC7+zL;v3lBl7LxVyJyalw(Z2+ASG&6T_^+&;>M2 zKnD~4_N_NM@b8WUz_{x}vLixGUPdlwN9EMQ>NMr%6iH*1DJK(kk{$DQ8=h-+sc^Pxub8+=r3C5te#@8d>z=7^UNU4Gv-)kMkYz1YX1mQR3AUBEQHuBa*@g+SWs=BFvBDSlyoeb*%l`5lEA%|;@B&^ZGnR1)w~726 zHntzImHiAkhRNgitjnKh@i`ma-!O}Rpoo8BPV?c47J;S3$tGzmAGEvB<0^8Pt5vd>o-W7pw}pKzS}uG5aM50XdCH@2yG)N-}F*X zA~@}mFzuVZl?=@-Gr=IG@Ei$zib{#V8ZAyYR-;2j{d7Z1yn4PQpr_--YgQ53H;S@L zCI32`!W(QHw^-~Yw!b&o{N5sw-{vvj!A}VDF9?woZN@#U2i@H|HF392O-l7Q-CYm5 zyLD=E*QKT(Kdn(S%w{R=D$M9VQtc{28r8t3k-QAdlmHH8V!MKhX>5Z?Y;C?DhjKu!kmK0&&T-8{fq ztngFfL-P6~&h97(&$x&2AYAbvT=5`Wq1}h-V`0UEaHR%efOq32Z;^a_e8i{wWphet y0}uZe7cO=_dk@e53YV0eQ?jY#StZX&{WbNC)27TKyzWtc)x@}ZhkGsf?tcJ6vV_$D literal 0 HcmV?d00001 diff --git a/build/classes/java/main/net/minecraft/src/GuiButton.class b/build/classes/java/main/net/minecraft/src/GuiButton.class new file mode 100644 index 0000000000000000000000000000000000000000..6f3977897de10a2fb9a1382b44181d3c5e4afcf5 GIT binary patch literal 2966 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 literal 0 HcmV?d00001 diff --git a/src/main/java/net/minecraft/src/AbstractResourcePack.java b/src/main/java/net/minecraft/src/AbstractResourcePack.java index 1fa2597..005182e 100644 --- a/src/main/java/net/minecraft/src/AbstractResourcePack.java +++ b/src/main/java/net/minecraft/src/AbstractResourcePack.java @@ -9,6 +9,8 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import javax.imageio.ImageIO; + +import net.lax1dude.eaglercraft.TextureLocation; import org.apache.commons.io.IOUtils; public abstract class AbstractResourcePack implements ResourcePack @@ -23,7 +25,7 @@ public abstract class AbstractResourcePack implements ResourcePack private static String locationToName(TextureLocation par0TextureLocation) { - return String.format("%s/%s/%s", new Object[] {"assets", par0TextureLocation.getResourceDomain(), par0TextureLocation.getResourcePath()}); + return String.format("%s/%s/%s", new Object[] {"assets", par0TextureLocation, par0TextureLocation}); } protected static String getRelativeName(File par0File, File par1File) diff --git a/src/main/java/net/minecraft/src/EntityBreakingFX.java b/src/main/java/net/minecraft/src/EntityBreakingFX.java index 221e756..db47dc3 100644 --- a/src/main/java/net/minecraft/src/EntityBreakingFX.java +++ b/src/main/java/net/minecraft/src/EntityBreakingFX.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.adapter.Tessellator; + public class EntityBreakingFX extends EntityFX { public EntityBreakingFX(World par1World, double par2, double par4, double par6, Item par8Item) diff --git a/src/main/java/net/minecraft/src/EntityCloudFX.java b/src/main/java/net/minecraft/src/EntityCloudFX.java index a7737d1..a54ebc1 100644 --- a/src/main/java/net/minecraft/src/EntityCloudFX.java +++ b/src/main/java/net/minecraft/src/EntityCloudFX.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.adapter.Tessellator; + public class EntityCloudFX extends EntityFX { float field_70569_a; diff --git a/src/main/java/net/minecraft/src/EntityCrit2FX.java b/src/main/java/net/minecraft/src/EntityCrit2FX.java index 65b5e5b..a1ec486 100644 --- a/src/main/java/net/minecraft/src/EntityCrit2FX.java +++ b/src/main/java/net/minecraft/src/EntityCrit2FX.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.adapter.Tessellator; + public class EntityCrit2FX extends EntityFX { /** Entity that had been hit and done the Critical hit on. */ diff --git a/src/main/java/net/minecraft/src/EntityCritFX.java b/src/main/java/net/minecraft/src/EntityCritFX.java index fca28e5..ba74886 100644 --- a/src/main/java/net/minecraft/src/EntityCritFX.java +++ b/src/main/java/net/minecraft/src/EntityCritFX.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.adapter.Tessellator; + public class EntityCritFX extends EntityFX { float initialParticleScale; diff --git a/src/main/java/net/minecraft/src/EntityDiggingFX.java b/src/main/java/net/minecraft/src/EntityDiggingFX.java index 16b31ad..8ea75e7 100644 --- a/src/main/java/net/minecraft/src/EntityDiggingFX.java +++ b/src/main/java/net/minecraft/src/EntityDiggingFX.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.adapter.Tessellator; + public class EntityDiggingFX extends EntityFX { private Block blockInstance; diff --git a/src/main/java/net/minecraft/src/EntityFireworkOverlayFX.java b/src/main/java/net/minecraft/src/EntityFireworkOverlayFX.java index 431397c..9659ffc 100644 --- a/src/main/java/net/minecraft/src/EntityFireworkOverlayFX.java +++ b/src/main/java/net/minecraft/src/EntityFireworkOverlayFX.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.adapter.Tessellator; + public class EntityFireworkOverlayFX extends EntityFX { protected EntityFireworkOverlayFX(World par1World, double par2, double par4, double par6) diff --git a/src/main/java/net/minecraft/src/EntityFireworkSparkFX.java b/src/main/java/net/minecraft/src/EntityFireworkSparkFX.java index 086ec1f..c970326 100644 --- a/src/main/java/net/minecraft/src/EntityFireworkSparkFX.java +++ b/src/main/java/net/minecraft/src/EntityFireworkSparkFX.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.adapter.Tessellator; + public class EntityFireworkSparkFX extends EntityFX { private int baseTextureIndex = 160; diff --git a/src/main/java/net/minecraft/src/EntityFireworkStarterFX.java b/src/main/java/net/minecraft/src/EntityFireworkStarterFX.java index eec8b07..775768c 100644 --- a/src/main/java/net/minecraft/src/EntityFireworkStarterFX.java +++ b/src/main/java/net/minecraft/src/EntityFireworkStarterFX.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.adapter.Tessellator; + public class EntityFireworkStarterFX extends EntityFX { private int fireworkAge; diff --git a/src/main/java/net/minecraft/src/EntityFlameFX.java b/src/main/java/net/minecraft/src/EntityFlameFX.java index eaa6313..260d2c6 100644 --- a/src/main/java/net/minecraft/src/EntityFlameFX.java +++ b/src/main/java/net/minecraft/src/EntityFlameFX.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.adapter.Tessellator; + public class EntityFlameFX extends EntityFX { /** the scale of the flame FX */ diff --git a/src/main/java/net/minecraft/src/EntityHeartFX.java b/src/main/java/net/minecraft/src/EntityHeartFX.java index 19bfb12..dbf0435 100644 --- a/src/main/java/net/minecraft/src/EntityHeartFX.java +++ b/src/main/java/net/minecraft/src/EntityHeartFX.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.adapter.Tessellator; + public class EntityHeartFX extends EntityFX { float particleScaleOverTime; diff --git a/src/main/java/net/minecraft/src/EntityHugeExplodeFX.java b/src/main/java/net/minecraft/src/EntityHugeExplodeFX.java index 34dd5c7..d140d44 100644 --- a/src/main/java/net/minecraft/src/EntityHugeExplodeFX.java +++ b/src/main/java/net/minecraft/src/EntityHugeExplodeFX.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.adapter.Tessellator; + public class EntityHugeExplodeFX extends EntityFX { private int timeSinceStart; diff --git a/src/main/java/net/minecraft/src/EntityLavaFX.java b/src/main/java/net/minecraft/src/EntityLavaFX.java index ac01866..8b5fa28 100644 --- a/src/main/java/net/minecraft/src/EntityLavaFX.java +++ b/src/main/java/net/minecraft/src/EntityLavaFX.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.adapter.Tessellator; + public class EntityLavaFX extends EntityFX { private float lavaParticleScale; diff --git a/src/main/java/net/minecraft/src/EntityNoteFX.java b/src/main/java/net/minecraft/src/EntityNoteFX.java index 9c90634..f5866bd 100644 --- a/src/main/java/net/minecraft/src/EntityNoteFX.java +++ b/src/main/java/net/minecraft/src/EntityNoteFX.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.adapter.Tessellator; + public class EntityNoteFX extends EntityFX { float noteParticleScale; diff --git a/src/main/java/net/minecraft/src/EntityPickupFX.java b/src/main/java/net/minecraft/src/EntityPickupFX.java index f13c5b4..b4d3bde 100644 --- a/src/main/java/net/minecraft/src/EntityPickupFX.java +++ b/src/main/java/net/minecraft/src/EntityPickupFX.java @@ -1,5 +1,6 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.adapter.Tessellator; import org.lwjgl.opengl.GL11; public class EntityPickupFX extends EntityFX diff --git a/src/main/java/net/minecraft/src/EntityPortalFX.java b/src/main/java/net/minecraft/src/EntityPortalFX.java index 5eb0faf..b4ea4a9 100644 --- a/src/main/java/net/minecraft/src/EntityPortalFX.java +++ b/src/main/java/net/minecraft/src/EntityPortalFX.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.adapter.Tessellator; + public class EntityPortalFX extends EntityFX { private float portalParticleScale; diff --git a/src/main/java/net/minecraft/src/EntityReddustFX.java b/src/main/java/net/minecraft/src/EntityReddustFX.java index 5b470e3..172fe40 100644 --- a/src/main/java/net/minecraft/src/EntityReddustFX.java +++ b/src/main/java/net/minecraft/src/EntityReddustFX.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.adapter.Tessellator; + public class EntityReddustFX extends EntityFX { float reddustParticleScale; diff --git a/src/main/java/net/minecraft/src/EntitySmokeFX.java b/src/main/java/net/minecraft/src/EntitySmokeFX.java index ff0921a..a935a9c 100644 --- a/src/main/java/net/minecraft/src/EntitySmokeFX.java +++ b/src/main/java/net/minecraft/src/EntitySmokeFX.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.adapter.Tessellator; + public class EntitySmokeFX extends EntityFX { float smokeParticleScale; diff --git a/src/main/java/net/minecraft/src/EntitySnowShovelFX.java b/src/main/java/net/minecraft/src/EntitySnowShovelFX.java index 0882478..d966bfb 100644 --- a/src/main/java/net/minecraft/src/EntitySnowShovelFX.java +++ b/src/main/java/net/minecraft/src/EntitySnowShovelFX.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.adapter.Tessellator; + public class EntitySnowShovelFX extends EntityFX { float snowDigParticleScale; diff --git a/src/main/java/net/minecraft/src/EntitySpellParticleFX.java b/src/main/java/net/minecraft/src/EntitySpellParticleFX.java index f6cb3f8..d7ba8e6 100644 --- a/src/main/java/net/minecraft/src/EntitySpellParticleFX.java +++ b/src/main/java/net/minecraft/src/EntitySpellParticleFX.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.adapter.Tessellator; + public class EntitySpellParticleFX extends EntityFX { /** Base spell texture index */ diff --git a/src/main/java/net/minecraft/src/Gui.java b/src/main/java/net/minecraft/src/Gui.java index e425409..4d3535c 100644 --- a/src/main/java/net/minecraft/src/Gui.java +++ b/src/main/java/net/minecraft/src/Gui.java @@ -1,6 +1,7 @@ package net.minecraft.src; import net.lax1dude.eaglercraft.TextureLocation; +import net.lax1dude.eaglercraft.adapter.Tessellator; import org.lwjgl.opengl.GL11; public class Gui diff --git a/src/main/java/net/minecraft/src/GuiButton.java b/src/main/java/net/minecraft/src/GuiButton.java index b06e7d9..4bcb982 100644 --- a/src/main/java/net/minecraft/src/GuiButton.java +++ b/src/main/java/net/minecraft/src/GuiButton.java @@ -1,5 +1,6 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.TextureLocation; import org.lwjgl.opengl.GL11; public class GuiButton extends Gui @@ -78,7 +79,7 @@ public class GuiButton extends Gui if (this.drawButton) { FontRenderer var4 = par1Minecraft.fontRenderer; - par1Minecraft.getTextureManager().bindTexture(buttonTextures); + buttonTextures.bindTexture(); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.field_82253_i = par2 >= this.xPosition && par3 >= this.yPosition && par2 < this.xPosition + this.width && par3 < this.yPosition + this.height; int var5 = this.getHoverState(this.field_82253_i); diff --git a/src/main/java/net/minecraft/src/GuiMultiplayer.java b/src/main/java/net/minecraft/src/GuiMultiplayer.java index 47f8629..08c2d23 100644 --- a/src/main/java/net/minecraft/src/GuiMultiplayer.java +++ b/src/main/java/net/minecraft/src/GuiMultiplayer.java @@ -7,6 +7,8 @@ import java.net.InetSocketAddress; import java.net.Socket; import java.util.Collections; import java.util.List; + +import net.lax1dude.eaglercraft.EaglerAdapter; import org.lwjgl.input.Keyboard; public class GuiMultiplayer extends GuiScreen @@ -61,11 +63,43 @@ public class GuiMultiplayer extends GuiScreen private boolean field_74024_A; private List listofLanServers = Collections.emptyList(); + private static long lastCooldown = 0l; + private static long lastRefresh = 0l; + private static int cooldownTimer = 0; + private static boolean isLockedOut = false; + public GuiMultiplayer(GuiScreen par1GuiScreen) { this.parentScreen = par1GuiScreen; } + public static void tickRefreshCooldown() { + if(cooldownTimer > 0) { + long t = EaglerAdapter.steadyTimeMillis(); + if(t - lastCooldown > 5000l) { + --cooldownTimer; + lastCooldown = t; + } + } + } + + private static boolean testIfCanRefresh() { + long t = EaglerAdapter.steadyTimeMillis(); + if(t - lastRefresh > 1000l) { + lastRefresh = t; + if(cooldownTimer < 8) { + ++cooldownTimer; + }else { + isLockedOut = true; + } + if(cooldownTimer < 5) { + isLockedOut = false; + return true; + } + } + return false; + } + /** * Adds the buttons (and other controls) to the screen in question. */ @@ -151,57 +185,45 @@ public class GuiMultiplayer extends GuiScreen /** * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e). */ - protected void actionPerformed(GuiButton par1GuiButton) - { - if (par1GuiButton.enabled) - { - if (par1GuiButton.id == 2) - { + protected void actionPerformed(GuiButton par1GuiButton) { + if (par1GuiButton.enabled) { + if (par1GuiButton.id == 2) { String var2 = this.internetServerList.getServerData(this.selectedServer).serverName; - if (var2 != null) - { + if (var2 != null) { this.deleteClicked = true; - String var3 = I18n.getString("selectServer.deleteQuestion"); - String var4 = "\'" + var2 + "\' " + I18n.getString("selectServer.deleteWarning"); - String var5 = I18n.getString("selectServer.deleteButton"); - String var6 = I18n.getString("gui.cancel"); - GuiYesNo var7 = new GuiYesNo(this, var3, var4, var5, var6, this.selectedServer); - this.mc.displayGuiScreen(var7); + StringTranslate var3 = StringTranslate.getInstance(); + String var4 = var3.translateKey("selectServer.deleteQuestion"); + String var5 = "\'" + var2 + "\' " + var3.translateKey("selectServer.deleteWarning"); + String var6 = var3.translateKey("selectServer.deleteButton"); + String var7 = var3.translateKey("gui.cancel"); + GuiYesNo var8 = new GuiYesNo(this, var4, var5, var6, var7, this.selectedServer); + this.mc.displayGuiScreen(var8); } - } - else if (par1GuiButton.id == 1) - { + } else if (par1GuiButton.id == 1) { this.joinServer(this.selectedServer); - } - else if (par1GuiButton.id == 4) - { + } else if (par1GuiButton.id == 4) { this.directClicked = true; - this.mc.displayGuiScreen(new GuiScreenServerList(this, this.theServerData = new ServerData(I18n.getString("selectServer.defaultName"), ""))); - } - else if (par1GuiButton.id == 3) - { + //this.mc.displayGuiScreen(new GuiScreenConnectOption(this)); // FIX THIS + System.out.println("fuck"); + } else if (par1GuiButton.id == 3) { this.addClicked = true; - this.mc.displayGuiScreen(new GuiScreenAddServer(this, this.theServerData = new ServerData(I18n.getString("selectServer.defaultName"), ""))); - } - else if (par1GuiButton.id == 7) - { + this.mc.displayGuiScreen(new GuiScreenAddServer(this, this.theServerData = new ServerData(StatCollector.translateToLocal("selectServer.defaultName"), "", false))); + } else if (par1GuiButton.id == 7) { this.editClicked = true; - ServerData var8 = this.internetServerList.getServerData(this.selectedServer); - this.theServerData = new ServerData(var8.serverName, var8.serverIP); - this.theServerData.setHideAddress(var8.isHidingAddress()); + ServerData var9 = this.internetServerList.getServerData(this.selectedServer); + this.theServerData = new ServerData(var9.serverName, var9.serverIP, false); + this.theServerData.setHideAddress(var9.isHidingAddress()); this.mc.displayGuiScreen(new GuiScreenAddServer(this, this.theServerData)); - } - else if (par1GuiButton.id == 0) - { + } else if (par1GuiButton.id == 0) { this.mc.displayGuiScreen(this.parentScreen); - } - else if (par1GuiButton.id == 8) - { - this.mc.displayGuiScreen(new GuiMultiplayer(this.parentScreen)); - } - else - { + } else if (par1GuiButton.id == 8) { + if(testIfCanRefresh()) { + lastRefresh = 0; + --cooldownTimer; + this.mc.displayGuiScreen(new GuiMultiplayer(this.parentScreen)); + } + } else { this.serverSlotContainer.actionPerformed(par1GuiButton); } } @@ -336,21 +358,16 @@ public class GuiMultiplayer extends GuiScreen /** * Join server by slot index */ - private void joinServer(int par1) - { - if (par1 < this.internetServerList.countServers()) - { + private void joinServer(int par1) { + if (par1 < internetServerList.countServers()) { this.connectToServer(this.internetServerList.getServerData(par1)); - } - else - { - par1 -= this.internetServerList.countServers(); + } else { + par1 -= internetServerList.countServers(); - if (par1 < this.listofLanServers.size()) - { - LanServer var2 = (LanServer)this.listofLanServers.get(par1); - this.connectToServer(new ServerData(var2.getServerMotd(), var2.getServerIpPort())); - } + /*if (par1 < lanServerList.countServers()) { // FIX THIS (later maybe) + LanServer var2 = lanServerList.getServer(par1); + //connectToLAN("Connecting to '" + var2.getLanServerMotd() + "'...", var2.getLanServerCode(), var2.getLanServerRelay()); + }*/ } } diff --git a/src/main/java/net/minecraft/src/GuiScreen.java b/src/main/java/net/minecraft/src/GuiScreen.java index efb6533..6e4cb25 100644 --- a/src/main/java/net/minecraft/src/GuiScreen.java +++ b/src/main/java/net/minecraft/src/GuiScreen.java @@ -7,6 +7,8 @@ import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.util.ArrayList; import java.util.List; + +import net.lax1dude.eaglercraft.adapter.Tessellator; import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; @@ -186,11 +188,6 @@ public class GuiScreen extends Gui int var2 = this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1; int var3 = Mouse.getEventButton(); - if (Minecraft.isRunningOnMac && var3 == 0 && (Keyboard.isKeyDown(29) || Keyboard.isKeyDown(157))) - { - var3 = 1; - } - if (Mouse.getEventButtonState()) { if (this.mc.gameSettings.touchscreen && this.field_92018_d++ > 0) @@ -277,7 +274,7 @@ public class GuiScreen extends Gui GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_FOG); Tessellator var2 = Tessellator.instance; - this.mc.getTextureManager().bindTexture(optionsBackground); + optionsBackground.bindTexture(); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); float var3 = 32.0F; var2.startDrawingQuads(); @@ -301,7 +298,7 @@ public class GuiScreen extends Gui public static boolean isCtrlKeyDown() { - return Minecraft.isRunningOnMac ? Keyboard.isKeyDown(219) || Keyboard.isKeyDown(220) : Keyboard.isKeyDown(29) || Keyboard.isKeyDown(157); + return Keyboard.isKeyDown(29) || Keyboard.isKeyDown(157); } public static boolean isShiftKeyDown() diff --git a/src/main/java/net/minecraft/src/GuiScreenBackup.java b/src/main/java/net/minecraft/src/GuiScreenBackup.java deleted file mode 100644 index 76c8a84..0000000 --- a/src/main/java/net/minecraft/src/GuiScreenBackup.java +++ /dev/null @@ -1,166 +0,0 @@ -package net.minecraft.src; - -import java.util.Collections; -import java.util.List; -import org.lwjgl.input.Keyboard; - -public class GuiScreenBackup extends GuiScreen -{ - private final GuiScreenConfigureWorld field_110380_a; - private final long field_110377_b; - private List field_110378_c = Collections.emptyList(); - private GuiScreenBackupSelectionList field_110375_d; - private int field_110376_e = -1; - private GuiButton field_110379_p; - - public GuiScreenBackup(GuiScreenConfigureWorld par1GuiScreenConfigureWorld, long par2) - { - this.field_110380_a = par1GuiScreenConfigureWorld; - this.field_110377_b = par2; - } - - /** - * Adds the buttons (and other controls) to the screen in question. - */ - public void initGui() - { - Keyboard.enableRepeatEvents(true); - this.buttonList.clear(); - this.field_110375_d = new GuiScreenBackupSelectionList(this); - (new GuiScreenBackupDownloadThread(this)).start(); - this.func_110369_g(); - } - - private void func_110369_g() - { - this.buttonList.add(new GuiButton(0, this.width / 2 + 6, this.height - 52, 153, 20, I18n.getString("gui.back"))); - this.buttonList.add(this.field_110379_p = new GuiButton(1, this.width / 2 - 154, this.height - 52, 153, 20, I18n.getString("mco.backup.button.restore"))); - } - - /** - * Called from the main game loop to update the screen. - */ - public void updateScreen() - { - super.updateScreen(); - } - - /** - * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e). - */ - protected void actionPerformed(GuiButton par1GuiButton) - { - if (par1GuiButton.enabled) - { - if (par1GuiButton.id == 1) - { - String var2 = I18n.getString("mco.configure.world.restore.question.line1"); - String var3 = I18n.getString("mco.configure.world.restore.question.line2"); - this.mc.displayGuiScreen(new GuiScreenConfirmation(this, "Warning!", var2, var3, 1)); - } - else if (par1GuiButton.id == 0) - { - this.mc.displayGuiScreen(this.field_110380_a); - } - else - { - this.field_110375_d.actionPerformed(par1GuiButton); - } - } - } - - public void confirmClicked(boolean par1, int par2) - { - if (par1 && par2 == 1) - { - this.func_110374_h(); - } - else - { - this.mc.displayGuiScreen(this); - } - } - - private void func_110374_h() - { - if (this.field_110376_e >= 0 && this.field_110376_e < this.field_110378_c.size()) - { - Backup var1 = (Backup)this.field_110378_c.get(this.field_110376_e); - GuiScreenBackupRestoreTask var2 = new GuiScreenBackupRestoreTask(this, var1, (GuiScreenBackupDownloadThread)null); - GuiScreenLongRunningTask var3 = new GuiScreenLongRunningTask(this.mc, this.field_110380_a, var2); - var3.func_98117_g(); - this.mc.displayGuiScreen(var3); - } - } - - /** - * Draws the screen and all the components in it. - */ - public void drawScreen(int par1, int par2, float par3) - { - this.drawDefaultBackground(); - this.field_110375_d.drawScreen(par1, par2, par3); - this.drawCenteredString(this.fontRenderer, I18n.getString("mco.backup.title"), this.width / 2, 20, 16777215); - super.drawScreen(par1, par2, par3); - } - - static Minecraft func_110366_a(GuiScreenBackup par0GuiScreenBackup) - { - return par0GuiScreenBackup.mc; - } - - static List func_110373_a(GuiScreenBackup par0GuiScreenBackup, List par1List) - { - return par0GuiScreenBackup.field_110378_c = par1List; - } - - static long func_110367_b(GuiScreenBackup par0GuiScreenBackup) - { - return par0GuiScreenBackup.field_110377_b; - } - - static Minecraft func_130030_c(GuiScreenBackup par0GuiScreenBackup) - { - return par0GuiScreenBackup.mc; - } - - static GuiScreenConfigureWorld func_130031_d(GuiScreenBackup par0GuiScreenBackup) - { - return par0GuiScreenBackup.field_110380_a; - } - - static Minecraft func_130035_e(GuiScreenBackup par0GuiScreenBackup) - { - return par0GuiScreenBackup.mc; - } - - static Minecraft func_130036_f(GuiScreenBackup par0GuiScreenBackup) - { - return par0GuiScreenBackup.mc; - } - - static List func_110370_e(GuiScreenBackup par0GuiScreenBackup) - { - return par0GuiScreenBackup.field_110378_c; - } - - static int func_130029_a(GuiScreenBackup par0GuiScreenBackup, int par1) - { - return par0GuiScreenBackup.field_110376_e = par1; - } - - static int func_130034_h(GuiScreenBackup par0GuiScreenBackup) - { - return par0GuiScreenBackup.field_110376_e; - } - - static FontRenderer func_130032_i(GuiScreenBackup par0GuiScreenBackup) - { - return par0GuiScreenBackup.fontRenderer; - } - - static FontRenderer func_130033_j(GuiScreenBackup par0GuiScreenBackup) - { - return par0GuiScreenBackup.fontRenderer; - } -} diff --git a/src/main/java/net/minecraft/src/GuiScreenBackupDownloadThread.java b/src/main/java/net/minecraft/src/GuiScreenBackupDownloadThread.java deleted file mode 100644 index 01614d0..0000000 --- a/src/main/java/net/minecraft/src/GuiScreenBackupDownloadThread.java +++ /dev/null @@ -1,25 +0,0 @@ -package net.minecraft.src; - -class GuiScreenBackupDownloadThread extends Thread -{ - final GuiScreenBackup field_111250_a; - - GuiScreenBackupDownloadThread(GuiScreenBackup par1GuiScreenBackup) - { - this.field_111250_a = par1GuiScreenBackup; - } - - public void run() - { - McoClient var1 = new McoClient(GuiScreenBackup.func_110366_a(this.field_111250_a).getSession()); - - try - { - GuiScreenBackup.func_110373_a(this.field_111250_a, var1.func_111232_c(GuiScreenBackup.func_110367_b(this.field_111250_a)).field_111223_a); - } - catch (ExceptionMcoService var3) - { - GuiScreenBackup.func_130030_c(this.field_111250_a).getLogAgent().logSevere(var3.toString()); - } - } -} diff --git a/src/main/java/net/minecraft/src/GuiScreenBackupRestoreTask.java b/src/main/java/net/minecraft/src/GuiScreenBackupRestoreTask.java deleted file mode 100644 index 561827a..0000000 --- a/src/main/java/net/minecraft/src/GuiScreenBackupRestoreTask.java +++ /dev/null @@ -1,52 +0,0 @@ -package net.minecraft.src; - -class GuiScreenBackupRestoreTask extends TaskLongRunning -{ - /** The backup being restored */ - private final Backup theBackup; - - /** The screen running this task */ - final GuiScreenBackup theBackupScreen; - - private GuiScreenBackupRestoreTask(GuiScreenBackup par1GuiScreenBackup, Backup par2Backup) - { - this.theBackupScreen = par1GuiScreenBackup; - this.theBackup = par2Backup; - } - - public void run() - { - this.setMessage(I18n.getString("mco.backup.restoring")); - - try - { - McoClient var1 = new McoClient(this.getMinecraft().getSession()); - var1.func_111235_c(GuiScreenBackup.func_110367_b(this.theBackupScreen), this.theBackup.field_110727_a); - - try - { - Thread.sleep(1000L); - } - catch (InterruptedException var3) - { - Thread.currentThread().interrupt(); - } - - this.getMinecraft().displayGuiScreen(GuiScreenBackup.func_130031_d(this.theBackupScreen)); - } - catch (ExceptionMcoService var4) - { - GuiScreenBackup.func_130035_e(this.theBackupScreen).getLogAgent().logSevere(var4.toString()); - this.setFailedMessage(var4.toString()); - } - catch (Exception var5) - { - this.setFailedMessage(var5.getLocalizedMessage()); - } - } - - GuiScreenBackupRestoreTask(GuiScreenBackup par1GuiScreenBackup, Backup par2Backup, GuiScreenBackupDownloadThread par3GuiScreenBackupDownloadThread) - { - this(par1GuiScreenBackup, par2Backup); - } -} diff --git a/src/main/java/net/minecraft/src/GuiScreenBackupSelectionList.java b/src/main/java/net/minecraft/src/GuiScreenBackupSelectionList.java deleted file mode 100644 index 99c78a0..0000000 --- a/src/main/java/net/minecraft/src/GuiScreenBackupSelectionList.java +++ /dev/null @@ -1,115 +0,0 @@ -package net.minecraft.src; - -import java.text.DateFormat; -import java.util.Date; -import net.minecraft.server.MinecraftServer; - -class GuiScreenBackupSelectionList extends GuiScreenSelectLocation -{ - final GuiScreenBackup field_111249_a; - - public GuiScreenBackupSelectionList(GuiScreenBackup par1GuiScreenBackup) - { - super(GuiScreenBackup.func_130036_f(par1GuiScreenBackup), par1GuiScreenBackup.width, par1GuiScreenBackup.height, 32, par1GuiScreenBackup.height - 64, 36); - this.field_111249_a = par1GuiScreenBackup; - } - - /** - * Gets the size of the current slot list. - */ - protected int getSize() - { - return GuiScreenBackup.func_110370_e(this.field_111249_a).size() + 1; - } - - /** - * the element in the slot that was clicked, boolean for wether it was double clicked or not - */ - protected void elementClicked(int par1, boolean par2) - { - if (par1 < GuiScreenBackup.func_110370_e(this.field_111249_a).size()) - { - GuiScreenBackup.func_130029_a(this.field_111249_a, par1); - } - } - - /** - * returns true if the element passed in is currently selected - */ - protected boolean isSelected(int par1) - { - return par1 == GuiScreenBackup.func_130034_h(this.field_111249_a); - } - - protected boolean func_104086_b(int par1) - { - return false; - } - - protected int func_130003_b() - { - return this.getSize() * 36; - } - - protected void func_130004_c() - { - this.field_111249_a.drawDefaultBackground(); - } - - protected void drawSlot(int par1, int par2, int par3, int par4, Tessellator par5Tessellator) - { - if (par1 < GuiScreenBackup.func_110370_e(this.field_111249_a).size()) - { - this.func_111246_b(par1, par2, par3, par4, par5Tessellator); - } - } - - private void func_111246_b(int par1, int par2, int par3, int par4, Tessellator par5Tessellator) - { - Backup var6 = (Backup)GuiScreenBackup.func_110370_e(this.field_111249_a).get(par1); - this.field_111249_a.drawString(GuiScreenBackup.func_130032_i(this.field_111249_a), "Backup (" + this.func_111248_a(Long.valueOf(MinecraftServer.getSystemTimeMillis() - var6.field_110725_b.getTime())) + ")", par2 + 2, par3 + 1, 16777215); - this.field_111249_a.drawString(GuiScreenBackup.func_130033_j(this.field_111249_a), this.func_111247_a(var6.field_110725_b), par2 + 2, par3 + 12, 7105644); - } - - private String func_111247_a(Date par1Date) - { - return DateFormat.getDateTimeInstance(3, 3).format(par1Date); - } - - private String func_111248_a(Long par1) - { - if (par1.longValue() < 0L) - { - return "right now"; - } - else - { - long var2 = par1.longValue() / 1000L; - - if (var2 < 60L) - { - return (var2 == 1L ? "1 second" : var2 + " seconds") + " ago"; - } - else - { - long var4; - - if (var2 < 3600L) - { - var4 = var2 / 60L; - return (var4 == 1L ? "1 minute" : var4 + " minutes") + " ago"; - } - else if (var2 < 86400L) - { - var4 = var2 / 3600L; - return (var4 == 1L ? "1 hour" : var4 + " hours") + " ago"; - } - else - { - var4 = var2 / 86400L; - return (var4 == 1L ? "1 day" : var4 + " days") + " ago"; - } - } - } - } -} diff --git a/src/main/java/net/minecraft/src/GuiSlotServer.java b/src/main/java/net/minecraft/src/GuiSlotServer.java index 283f2eb..3336d02 100644 --- a/src/main/java/net/minecraft/src/GuiSlotServer.java +++ b/src/main/java/net/minecraft/src/GuiSlotServer.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.EaglerAdapter; +import net.lax1dude.eaglercraft.TextureLocation; import org.lwjgl.opengl.GL11; import net.lax1dude.eaglercraft.adapter.Tessellator; @@ -8,6 +10,8 @@ class GuiSlotServer extends GuiSlot /** Instance to the GUI this list is on. */ final GuiMultiplayer parentGui; + private static final TextureLocation defaultServerIcon = new TextureLocation("/gui/unknown_pack.png"); + public GuiSlotServer(GuiMultiplayer par1GuiMultiplayer) { super(par1GuiMultiplayer.mc, par1GuiMultiplayer.width, par1GuiMultiplayer.height, 32, par1GuiMultiplayer.height - 64, 36); @@ -126,112 +130,116 @@ class GuiSlotServer extends GuiSlot this.parentGui.drawCenteredString(this.parentGui.fontRenderer, var6, this.parentGui.width / 2, par3 + 12, 8421504); } - private void func_77247_d(int par1, int par2, int par3, int par4, Tessellator par5Tessellator) - { + private static final TextureLocation icons = new TextureLocation("/gui/icons.png"); + + private void func_77247_d(int par1, int par2, int par3, int par4, Tessellator par5Tessellator) { ServerData var6 = GuiMultiplayer.getInternetServerList(this.parentGui).getServerData(par1); - synchronized (GuiMultiplayer.getLock()) - { - if (GuiMultiplayer.getThreadsPending() < 5 && !var6.field_78841_f) - { - var6.field_78841_f = true; - var6.pingToServer = -2L; - var6.serverMOTD = ""; - var6.populationInfo = ""; - GuiMultiplayer.increaseThreadsPending(); - (new ThreadPollServers(this, var6)).start(); + boolean var7 = var6.field_82821_f > 61; + boolean var8 = var6.field_82821_f < 61; + boolean var9 = var7 || var8; + this.parentGui.drawString(this.parentGui.fontRenderer, var6.serverName, par2 + 38, par3 + 1, 16777215); + if(var6.hasPing && (var6.pingToServer > 0 || var6.hasError)) { + int i = var6.serverMOTD.indexOf('\n'); + if(i > 0) { + this.parentGui.drawString(this.parentGui.fontRenderer, var6.serverMOTD.substring(0, i), par2 + 38, par3 + 12, 8421504); + this.parentGui.drawString(this.parentGui.fontRenderer, var6.serverMOTD.substring(i + 1), par2 + 38, par3 + 12 + 11, 8421504); + }else { + this.parentGui.drawString(this.parentGui.fontRenderer, var6.serverMOTD, par2 + 38, par3 + 12, 8421504); + if (!this.parentGui.mc.gameSettings.hideServerAddress && !var6.isHidingAddress()) { + this.parentGui.drawString(this.parentGui.fontRenderer, var6.serverIP, par2 + 38, par3 + 12 + 11, 3158064); + } else { + this.parentGui.drawString(this.parentGui.fontRenderer, StatCollector.translateToLocal("selectServer.hiddenAddress"), par2 + 38, par3 + 12 + 11, 3158064); + } + } + this.parentGui.drawString(this.parentGui.fontRenderer, var6.populationInfo, par2 + 251 - this.parentGui.fontRenderer.getStringWidth(var6.populationInfo), par3 + 12, 8421504); + }else { + if (!this.parentGui.mc.gameSettings.hideServerAddress && !var6.isHidingAddress()) { + this.parentGui.drawString(this.parentGui.fontRenderer, var6.serverIP, par2 + 38, par3 + 12 + 11, 3158064); + } else { + this.parentGui.drawString(this.parentGui.fontRenderer, StatCollector.translateToLocal("selectServer.hiddenAddress"), par2 + 38, par3 + 12 + 11, 3158064); } } - boolean var7 = var6.field_82821_f > 78; - boolean var8 = var6.field_82821_f < 78; - boolean var9 = var7 || var8; - this.parentGui.drawString(this.parentGui.fontRenderer, var6.serverName, par2 + 2, par3 + 1, 16777215); - this.parentGui.drawString(this.parentGui.fontRenderer, var6.serverMOTD, par2 + 2, par3 + 12, 8421504); - this.parentGui.drawString(this.parentGui.fontRenderer, var6.populationInfo, par2 + 215 - this.parentGui.fontRenderer.getStringWidth(var6.populationInfo), par3 + 12, 8421504); - - if (var9) - { + if (var9) { String var10 = EnumChatFormatting.DARK_RED + var6.gameVersion; - this.parentGui.drawString(this.parentGui.fontRenderer, var10, par2 + 200 - this.parentGui.fontRenderer.getStringWidth(var10), par3 + 1, 8421504); + this.parentGui.drawString(this.parentGui.fontRenderer, var10, par2 + 240 - this.parentGui.fontRenderer.getStringWidth(var10), par3 + 1, 8421504); } - if (!this.parentGui.mc.gameSettings.hideServerAddress && !var6.isHidingAddress()) - { - this.parentGui.drawString(this.parentGui.fontRenderer, var6.serverIP, par2 + 2, par3 + 12 + 11, 3158064); - } - else - { - this.parentGui.drawString(this.parentGui.fontRenderer, I18n.getString("selectServer.hiddenAddress"), par2 + 2, par3 + 12 + 11, 3158064); + EaglerAdapter.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + var6.refreshIcon(); + if(var6.serverIconEnabled && var6.serverIconGL != -1) { + this.mc.renderEngine.bindTexture(var6.serverIconGL); + }else { + defaultServerIcon.bindTexture(); } - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - Gui.icons.bindTexture(); + int iconX = par2 + 2; + int iconY = par3 + 2; + int iconSize = 28; + + Tessellator var14 = Tessellator.instance; + var14.startDrawingQuads(); + var14.addVertexWithUV((double) (iconX + 0), (double) (iconY + iconSize), 0.0d, 0.0d, 1.0d); + var14.addVertexWithUV((double) (iconX + iconSize), (double) (iconY + iconSize), 0.0d, 1.0d, 1.0d); + var14.addVertexWithUV((double) (iconX + iconSize), (double) (iconY + 0), 0.0d, 1.0d, 0.0d); + var14.addVertexWithUV((double) (iconX + 0), (double) (iconY + 0), 0.0d, 0.0d, 0.0d); + var14.draw(); + + icons.bindTexture(); byte var15 = 0; boolean var11 = false; String var12 = ""; int var16; - if (var9) - { + if (var9) { var12 = var7 ? "Client out of date!" : "Server out of date!"; var16 = 5; - } - else if (var6.field_78841_f && var6.pingToServer != -2L) - { - if (var6.pingToServer < 0L) - { + } else if (var6.hasPing && var6.pingToServer != -2L) { + if (var6.pingToServer < 0L) { var16 = 5; - } - else if (var6.pingToServer < 150L) - { + } else if (var6.pingToServer < 150L) { var16 = 0; - } - else if (var6.pingToServer < 300L) - { + } else if (var6.pingToServer < 300L) { var16 = 1; - } - else if (var6.pingToServer < 600L) - { + } else if (var6.pingToServer < 600L) { var16 = 2; - } - else if (var6.pingToServer < 1000L) - { + } else if (var6.pingToServer < 1000L) { var16 = 3; - } - else - { + } else { var16 = 4; } - if (var6.pingToServer < 0L) - { + if (var6.pingToServer < 0L) { var12 = "(no connection)"; - } - else - { + } else { var12 = var6.pingToServer + "ms"; } - } - else - { + } else { var15 = 1; - var16 = (int)(Minecraft.getSystemTime() / 100L + (long)(par1 * 2) & 7L); + var16 = (int) (Minecraft.getSystemTime() / 100L + (long) (par1 * 2) & 7L); - if (var16 > 4) - { + if (var16 > 4) { var16 = 8 - var16; } var12 = "Polling.."; } - this.parentGui.drawTexturedModalRect(par2 + 205, par3, 0 + var15 * 10, 176 + var16 * 8, 10, 8); + this.parentGui.drawTexturedModalRect(par2 + 241, par3, 0 + var15 * 10, 176 + var16 * 8, 10, 8); byte var13 = 4; - if (this.mouseX >= par2 + 205 - var13 && this.mouseY >= par3 - var13 && this.mouseX <= par2 + 205 + 10 + var13 && this.mouseY <= par3 + 8 + var13) - { + if (this.mouseX >= par2 + 245 - var13 && this.mouseY >= par3 - var13 && this.mouseX <= par2 + 245 + 10 + var13 && this.mouseY <= par3 + 4 + var13) { GuiMultiplayer.getAndSetLagTooltip(this.parentGui, var12); + }else if (this.mouseX >= par2 + 230 - var13 && this.mouseY >= par3 - var13 + 4 && this.mouseX <= par2 + 245 + 10 + var13 && this.mouseY <= par3 + 8 + var13 + 8) { + if(var6.playerList.size() > 0) { + var12 = ""; + for(String s : var6.playerList) { + var12 += (s + "\n"); + } + GuiMultiplayer.getAndSetLagTooltip(this.parentGui, var12); + } } } } diff --git a/src/main/java/net/minecraft/src/GuiSlotStats.java b/src/main/java/net/minecraft/src/GuiSlotStats.java index 44f885d..9f905b0 100644 --- a/src/main/java/net/minecraft/src/GuiSlotStats.java +++ b/src/main/java/net/minecraft/src/GuiSlotStats.java @@ -3,6 +3,8 @@ package net.minecraft.src; import java.util.Collections; import java.util.Comparator; import java.util.List; + +import net.lax1dude.eaglercraft.adapter.Tessellator; import org.lwjgl.input.Mouse; abstract class GuiSlotStats extends GuiSlot diff --git a/src/main/java/net/minecraft/src/IntegratedServer.java b/src/main/java/net/minecraft/src/IntegratedServer.java index 0042133..ae78a13 100644 --- a/src/main/java/net/minecraft/src/IntegratedServer.java +++ b/src/main/java/net/minecraft/src/IntegratedServer.java @@ -19,8 +19,8 @@ public class IntegratedServer extends MinecraftServer public IntegratedServer(Minecraft par1Minecraft, String par2Str, String par3Str, WorldSettings par4WorldSettings) { - super(new File(par1Minecraft.mcDataDir, "saves")); - this.serverLogAgent = new LogAgent("Minecraft-Server", " [SERVER]", (new File(par1Minecraft.mcDataDir, "output-server.log")).getAbsolutePath()); + super(new File("", "saves")); + this.serverLogAgent = new LogAgent("Minecraft-Server", " [SERVER]", (new File("", "output-server.log")).getAbsolutePath()); this.setServerOwner(par1Minecraft.getSession().getUsername()); this.setFolderName(par2Str); this.setWorldName(par3Str); @@ -147,7 +147,7 @@ public class IntegratedServer extends MinecraftServer protected File getDataDirectory() { - return this.mc.mcDataDir; + return null; } public boolean isDedicatedServer() diff --git a/src/main/java/net/minecraft/src/NBTTagCompound.java b/src/main/java/net/minecraft/src/NBTTagCompound.java index cc5a654..1fdace8 100644 --- a/src/main/java/net/minecraft/src/NBTTagCompound.java +++ b/src/main/java/net/minecraft/src/NBTTagCompound.java @@ -455,4 +455,8 @@ public class NBTTagCompound extends NBTBase { return par0NBTTagCompound.tagMap; } + + public String getStringOrNull(String string) { + return !this.tagMap.containsKey(string) ? null : ((NBTTagString) this.tagMap.get(string)).data; + } } diff --git a/src/main/java/net/minecraft/src/RenderEntity.java b/src/main/java/net/minecraft/src/RenderEntity.java index 619f687..070784b 100644 --- a/src/main/java/net/minecraft/src/RenderEntity.java +++ b/src/main/java/net/minecraft/src/RenderEntity.java @@ -1,5 +1,6 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.TextureLocation; import org.lwjgl.opengl.GL11; public class RenderEntity extends Render diff --git a/src/main/java/net/minecraft/src/RenderTNTPrimed.java b/src/main/java/net/minecraft/src/RenderTNTPrimed.java index 71ff222..62c3d2d 100644 --- a/src/main/java/net/minecraft/src/RenderTNTPrimed.java +++ b/src/main/java/net/minecraft/src/RenderTNTPrimed.java @@ -1,5 +1,6 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.TextureLocation; import org.lwjgl.opengl.GL11; public class RenderTNTPrimed extends Render diff --git a/src/main/java/net/minecraft/src/ServerData.java b/src/main/java/net/minecraft/src/ServerData.java index f19ff87..acf1aae 100644 --- a/src/main/java/net/minecraft/src/ServerData.java +++ b/src/main/java/net/minecraft/src/ServerData.java @@ -1,7 +1,18 @@ package net.minecraft.src; -public class ServerData -{ +import java.nio.IntBuffer; +import java.util.ArrayList; +import java.util.List; + +import org.json.JSONArray; +import org.json.JSONObject; + +import net.lax1dude.eaglercraft.EaglerAdapter; +import net.lax1dude.eaglercraft.ServerQuery; +import net.lax1dude.eaglercraft.ServerQuery.QueryResponse; +import net.minecraft.src.Minecraft; + +public class ServerData { public String serverName; public String serverIP; private final int id; @@ -9,38 +20,39 @@ public class ServerData private static int idCounter = 0; /** - * the string indicating number of players on and capacity of the server that is shown on the server browser (i.e. - * "5/20" meaning 5 slots used out of 20 slots total) + * the string indicating number of players on and capacity of the server that is + * shown on the server browser (i.e. "5/20" meaning 5 slots used out of 20 slots + * total) */ public String populationInfo; /** - * (better variable name would be 'hostname') server name as displayed in the server browser's second line (grey - * text) + * (better variable name would be 'hostname') server name as displayed in the + * server browser's second line (grey text) */ public String serverMOTD; /** last server ping that showed up in the server browser */ public long pingToServer; - public int field_82821_f = 78; + public long pingSentTime; + public int field_82821_f = 61; /** Game version for this server. */ - public String gameVersion = "1.6.4"; - public boolean field_78841_f; + public String gameVersion = "1.5.2"; + public boolean hasPing = false; private boolean field_78842_g = true; - private boolean acceptsTextures; + private boolean acceptsTextures = false; + public ServerQuery currentQuery = null; + public int[] serverIcon = null; + public boolean serverIconDirty = false; + public boolean serverIconEnabled = false; + public boolean hasError = false; + public List playerList = new ArrayList(); + public int serverIconGL = -1; public final boolean isDefault; /** Whether to hide the IP address for this server. */ - private boolean hideAddress; - - public ServerData(String par1Str, String par2Str) - { - this.serverName = par1Str; - this.serverIP = par2Str; - this.isDefault = false; - this.id = ++idCounter; - } + private boolean hideAddress = false; public ServerData(String par1Str, String par2Str, boolean isDefault) { this.serverName = par1Str; @@ -49,21 +61,24 @@ public class ServerData this.id = ++idCounter; } + public int hashCode() { + return id; + } + + public boolean equals(Object o) { + return o instanceof ServerData && id == ((ServerData)o).id; + } + /** - * Returns an NBTTagCompound with the server's name, IP and maybe acceptTextures. + * Returns an NBTTagCompound with the server's name, IP and maybe + * acceptTextures. */ - public NBTTagCompound getNBTCompound() - { + public NBTTagCompound getNBTCompound() { NBTTagCompound var1 = new NBTTagCompound(); var1.setString("name", this.serverName); var1.setString("ip", this.serverIP); var1.setBoolean("hideAddress", this.hideAddress); - if (!this.field_78842_g) - { - var1.setBoolean("acceptTextures", this.acceptsTextures); - } - return var1; } @@ -75,35 +90,100 @@ public class ServerData return this.field_78842_g; } - public void setAcceptsTextures(boolean par1) - { + public void setAcceptsTextures(boolean par1) { this.acceptsTextures = par1; this.field_78842_g = false; } - public boolean isHidingAddress() - { + public boolean isHidingAddress() { return this.hideAddress; } - public void setHideAddress(boolean par1) - { + public void setHideAddress(boolean par1) { this.hideAddress = par1; } /** - * Takes an NBTTagCompound with 'name' and 'ip' keys, returns a ServerData instance. + * Takes an NBTTagCompound with 'name' and 'ip' keys, returns a ServerData + * instance. */ - public static ServerData getServerDataFromNBTCompound(NBTTagCompound par0NBTTagCompound) - { - ServerData var1 = new ServerData(par0NBTTagCompound.getString("name"), par0NBTTagCompound.getString("ip")); + public static ServerData getServerDataFromNBTCompound(NBTTagCompound par0NBTTagCompound) { + ServerData var1 = new ServerData(par0NBTTagCompound.getString("name"), par0NBTTagCompound.getString("ip"), par0NBTTagCompound.getBoolean("default")); var1.hideAddress = par0NBTTagCompound.getBoolean("hideAddress"); - - if (par0NBTTagCompound.hasKey("acceptTextures")) - { - var1.setAcceptsTextures(par0NBTTagCompound.getBoolean("acceptTextures")); - } - return var1; } + + public void setMOTDFromQuery(QueryResponse pkt) { + JSONObject motdData = pkt.getResponseJSON(); + JSONArray motd = motdData.getJSONArray("motd"); + this.serverMOTD = motd.length() > 0 ? (motd.length() > 1 ? motd.getString(0) + "\n" + motd.getString(1) : motd.getString(0)) : ""; + this.populationInfo = "" + motdData.getInt("online") + "/" + motdData.getInt("max"); + this.playerList.clear(); + JSONArray players = motdData.getJSONArray("players"); + for(int i = 0, l = players.length(); i < l; ++i) { + this.playerList.add(players.getString(i)); + } + serverIconEnabled = motdData.getBoolean("icon"); + if(!serverIconEnabled) { + if(serverIconGL != -1) { + EaglerAdapter.glDeleteTextures(serverIconGL); + serverIconGL = -1; + } + } + hasError = false; + } + + public void setRateLimitError(boolean lock, boolean isTcp) { + if(lock) { + serverMOTD = EnumChatFormatting.RED + "Your IP is banned for DoS\n" + EnumChatFormatting.GRAY + "Try again in an hour"; + }else { + if(isTcp) { + serverMOTD = EnumChatFormatting.RED + "Connection Blocked\n" + EnumChatFormatting.GRAY + "Try again in a minute"; + }else { + serverMOTD = EnumChatFormatting.RED + "Query Was Blocked\n" + EnumChatFormatting.GRAY + "Try again in a minute"; + } + } + this.populationInfo = ""; + this.playerList.clear(); + this.serverIconEnabled = false; + this.hasError = true; + } + + public void refreshIcon() { + if(serverIconEnabled) { + if(serverIconDirty && serverIcon != null) { + if(serverIconGL == -1) { + serverIconGL = EaglerAdapter.glGenTextures(); + Minecraft.getMinecraft().renderEngine.bindTexture(serverIconGL); + EaglerAdapter.glTexParameteri(EaglerAdapter.GL_TEXTURE_2D, EaglerAdapter.GL_TEXTURE_WRAP_S, EaglerAdapter.GL_REPEAT); + EaglerAdapter.glTexParameteri(EaglerAdapter.GL_TEXTURE_2D, EaglerAdapter.GL_TEXTURE_WRAP_T, EaglerAdapter.GL_REPEAT); + EaglerAdapter.glTexParameteri(EaglerAdapter.GL_TEXTURE_2D, EaglerAdapter.GL_TEXTURE_MIN_FILTER, EaglerAdapter.GL_NEAREST); + EaglerAdapter.glTexParameteri(EaglerAdapter.GL_TEXTURE_2D, EaglerAdapter.GL_TEXTURE_MAG_FILTER, EaglerAdapter.GL_NEAREST); + }else { + Minecraft.getMinecraft().renderEngine.bindTexture(serverIconGL); + } + IntBuffer buf = GLAllocation.createDirectIntBuffer(4096); + buf.put(serverIcon); + buf.flip(); + EaglerAdapter.glTexImage2D(EaglerAdapter.GL_TEXTURE_2D, 0, EaglerAdapter.GL_RGBA, 64, 64, 0, EaglerAdapter.GL_BGRA, EaglerAdapter.GL_UNSIGNED_INT_8_8_8_8_REV, buf); + serverIconDirty = false; + } + }else { + if(serverIconGL != -1) { + EaglerAdapter.glDeleteTextures(serverIconGL); + serverIconGL = -1; + serverIconDirty = false; + } + } + } + + public void freeIcon() { + if(serverIconGL != -1) { + EaglerAdapter.glDeleteTextures(serverIconGL); + serverIconGL = -1; + } + serverIconDirty = false; + serverIconEnabled = false; + } + } diff --git a/src/main/java/net/minecraft/src/ServerList.java b/src/main/java/net/minecraft/src/ServerList.java index d2e9059..ac86654 100644 --- a/src/main/java/net/minecraft/src/ServerList.java +++ b/src/main/java/net/minecraft/src/ServerList.java @@ -1,120 +1,341 @@ package net.minecraft.src; -import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; -public class ServerList -{ +import org.json.JSONArray; +import org.json.JSONObject; + +import net.lax1dude.eaglercraft.ServerQuery.QueryResponse; +import net.lax1dude.eaglercraft.adapter.EaglerAdapterImpl2.RateLimit; +import net.lax1dude.eaglercraft.Base64; +import net.lax1dude.eaglercraft.ConfigConstants; +import net.lax1dude.eaglercraft.EaglerAdapter; +import net.lax1dude.eaglercraft.LocalStorageManager; +import net.lax1dude.eaglercraft.RelayEntry; +import net.lax1dude.eaglercraft.EaglercraftRandom; +import net.minecraft.src.Minecraft; + +public class ServerList { /** The Minecraft instance. */ private final Minecraft mc; /** List of ServerData instances. */ - private final List servers = new ArrayList(); + private final List servers = new ArrayList(); + private final List allServers = new ArrayList(); - public ServerList(Minecraft par1Minecraft) - { + public static final List forcedServers = new ArrayList(); + private static final EaglercraftRandom random = new EaglercraftRandom(); + + public static boolean hideDownDefaultServers = false; + + public ServerList(Minecraft par1Minecraft) { this.mc = par1Minecraft; this.loadServerList(); } - /** - * Loads a list of servers from servers.dat, by running ServerData.getServerDataFromNBTCompound on each NBT compound - * found in the "servers" tag list. - */ - public void loadServerList() - { - try - { - this.servers.clear(); - NBTTagCompound var1 = CompressedStreamTools.read(new File(this.mc.mcDataDir, "servers.dat")); - - if (var1 == null) - { - return; + public static void loadDefaultServers(String base64) { + try { + NBTTagCompound nbt = CompressedStreamTools.readUncompressed(Base64.decodeBase64(base64)); + hideDownDefaultServers = nbt.getBoolean("hide_down"); + ConfigConstants.ayonullTitle = nbt.hasKey("serverListTitle") ? nbt.getString("serverListTitle") : null; + ConfigConstants.ayonullLink = nbt.hasKey("serverListLink") ? nbt.getString("serverListLink") : null; + if(nbt.hasKey("mainMenu")) { + NBTTagCompound cmp = nbt.getCompoundTag("mainMenu"); + ConfigConstants.mainMenuItemLink = cmp.getStringOrNull("itemLink"); + if(ConfigConstants.mainMenuItemLink != null) { + ConfigConstants.mainMenuItemLine0 = cmp.getStringOrNull("itemLine0"); + ConfigConstants.mainMenuItemLine1 = cmp.getStringOrNull("itemLine1"); + ConfigConstants.mainMenuItemLine2 = cmp.getStringOrNull("itemLine2"); + } + if(cmp.hasKey("splashes")) { + ConfigConstants.splashTexts = new ArrayList(); + NBTTagList t = cmp.getTagList("splashes"); + for(int i = 0, l = t.tagCount(); i < l; ++i) { + ConfigConstants.splashTexts.add(((NBTTagString)t.tagAt(i)).data); + } + } + } + forcedServers.clear(); + NBTTagList list = nbt.getTagList("servers"); + for (int i = 0; i < list.tagCount(); ++i) { + NBTTagCompound tag = (NBTTagCompound) list.tagAt(i); + tag.setBoolean("default", true); + forcedServers.add(ServerData.getServerDataFromNBTCompound(tag)); } - NBTTagList var2 = var1.getTagList("servers"); + // NOTE: Change these asap if one goes down or is replaced, they are used by replits - for (int var3 = 0; var3 < var2.tagCount(); ++var3) - { - this.servers.add(ServerData.getServerDataFromNBTCompound((NBTTagCompound)var2.tagAt(var3))); + int choice = random.nextInt(3); + + ConfigConstants.relays = new ArrayList(); + ConfigConstants.relays.add(new RelayEntry("wss://relay.deev.is/", "lax1dude relay #1", choice == 0)); + ConfigConstants.relays.add(new RelayEntry("wss://relay.lax1dude.net/", "lax1dude relay #2", choice == 1)); + ConfigConstants.relays.add(new RelayEntry("wss://relay.shhnowisnottheti.me/", "ayunami relay #1", choice == 2)); + + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static void loadDefaultServers(JSONObject json) { + hideDownDefaultServers = json.optBoolean("hideDownServers", hideDownDefaultServers); + + ConfigConstants.ayonullTitle = json.optString("serverListTitle", ConfigConstants.ayonullTitle); + ConfigConstants.ayonullLink = json.optString("serverListLink", ConfigConstants.ayonullLink); + + JSONObject mainMenu = json.optJSONObject("mainMenu", null); + if(mainMenu != null) { + + ConfigConstants.mainMenuItemLink = mainMenu.optString("itemLink", ConfigConstants.mainMenuItemLink); + if(ConfigConstants.mainMenuItemLink != null) { + ConfigConstants.mainMenuItemLine0 = mainMenu.optString("itemLine0", ConfigConstants.mainMenuItemLine0); + ConfigConstants.mainMenuItemLine1 = mainMenu.optString("itemLine1", ConfigConstants.mainMenuItemLine1); + ConfigConstants.mainMenuItemLine2 = mainMenu.optString("itemLine2", ConfigConstants.mainMenuItemLine2); + } + + ConfigConstants.eaglercraftTitleLogo = mainMenu.optBoolean("eaglerLogo", ConfigConstants.eaglercraftTitleLogo); + + JSONArray splashes = mainMenu.optJSONArray("splashes"); + if(splashes != null) { + ConfigConstants.splashTexts = new ArrayList(); + for(int i = 0, l = splashes.length(); i < l; ++i) { + ConfigConstants.splashTexts.add(splashes.getString(i)); + } + } + + } + + JSONArray servers = json.optJSONArray("servers"); + if(servers != null) { + forcedServers.clear(); + for(int i = 0, l = servers.length(); i < l; ++i) { + JSONObject serverJSON = servers.getJSONObject(i); + ServerData newServer = new ServerData(serverJSON.getString("serverName"), + serverJSON.getString("serverAddress"), true); + newServer.setHideAddress(serverJSON.optBoolean("hideAddress", false)); + forcedServers.add(newServer); } } - catch (Exception var4) - { - var4.printStackTrace(); + + ConfigConstants.relays = new ArrayList(); + JSONArray relays = json.optJSONArray("relays"); + if(relays != null) { + for(int i = 0, l = relays.length(); i < l; ++i) { + JSONObject relay = relays.getJSONObject(i); + String addr = relay.optString("url", null); + if(addr == null) { + addr = relay.optString("address", null); + if(addr == null) { + addr = relay.getString("addr"); + } + } + String comment = relay.optString("name", null); + if(comment == null) { + comment = relay.optString("comment", "Default Relay"); + } + boolean primary = relay.optBoolean("default", false); + if(!primary) { + primary = relay.optBoolean("primary", false); + } + ConfigConstants.relays.add(new RelayEntry(addr, comment, primary)); + } + } + + } + + /** + * Loads a list of servers from servers.dat, by running + * ServerData.getServerDataFromNBTCompound on each NBT compound found in the + * "servers" tag list. + */ + public void loadServerList() { + freeServerIcons(); + this.servers.clear(); + this.allServers.clear(); + for(ServerData dat : forcedServers) { + dat.pingSentTime = -1l; + dat.hasPing = false; + this.servers.add(dat); + this.allServers.add(dat); + } + NBTTagList servers = LocalStorageManager.gameSettingsStorage.getTagList("servers"); + for (int i = 0; i < servers.tagCount(); ++i) { + ServerData dat = ServerData.getServerDataFromNBTCompound((NBTTagCompound) servers.tagAt(i)); + this.servers.add(dat); + this.allServers.add(dat); } } /** - * Runs getNBTCompound on each ServerData instance, puts everything into a "servers" NBT list and writes it to - * servers.dat. + * Runs getNBTCompound on each ServerData instance, puts everything into a + * "servers" NBT list and writes it to servers.dat. */ - public void saveServerList() - { - try - { - NBTTagList var1 = new NBTTagList(); - Iterator var2 = this.servers.iterator(); - - while (var2.hasNext()) - { - ServerData var3 = (ServerData)var2.next(); - var1.appendTag(var3.getNBTCompound()); - } - - NBTTagCompound var5 = new NBTTagCompound(); - var5.setTag("servers", var1); - CompressedStreamTools.safeWrite(var5, new File(this.mc.mcDataDir, "servers.dat")); - } - catch (Exception var4) - { - var4.printStackTrace(); + public void saveServerList() { + NBTTagList servers = new NBTTagList(); + for(int i = forcedServers.size(); i < this.allServers.size(); ++i) { + servers.appendTag(((ServerData) this.allServers.get(i)).getNBTCompound()); } + LocalStorageManager.gameSettingsStorage.setTag("servers", servers); + LocalStorageManager.saveStorageG(); } /** * Gets the ServerData instance stored for the given index in the list. */ - public ServerData getServerData(int par1) - { - return (ServerData)this.servers.get(par1); + public ServerData getServerData(int par1) { + return (ServerData) this.servers.get(par1); } /** * Removes the ServerData instance stored for the given index in the list. */ - public void removeServerData(int par1) - { - this.servers.remove(par1); + public void removeServerData(int par1) { + ServerData dat = this.servers.remove(par1); + this.allServers.remove(dat); + if(dat != null) { + dat.freeIcon(); + } } /** * Adds the given ServerData instance to the list. */ - public void addServerData(ServerData par1ServerData) - { - this.servers.add(par1ServerData); + public void addServerData(ServerData par1ServerData) { + par1ServerData.pingSentTime = -1l; + par1ServerData.hasPing = false; + this.allServers.add(par1ServerData); + refreshServerPing(); } /** * Counts the number of ServerData instances in the list. */ - public int countServers() - { + public int countServers() { return this.servers.size(); } /** * Takes two list indexes, and swaps their order around. */ - public void swapServers(int par1, int par2) - { - ServerData var3 = this.getServerData(par1); - this.servers.set(par1, this.getServerData(par2)); - this.servers.set(par2, var3); - this.saveServerList(); + public void swapServers(int par1, int par2) { // will be fixed eventually + /* + ServerData var3 = this.getServerData(par1); + ServerData dat = this.getServerData(par2); + this.servers.set(par1, dat); + this.servers.set(par2, var3); + int i = this.allServers.indexOf(dat); + this.allServers.set(par1, this.allServers.get(i)); + this.allServers.set(i, var3); + this.saveServerList(); + */ } + + public void freeServerIcons() { + for(ServerData dat : allServers) { + if(dat.currentQuery != null && dat.currentQuery.isQueryOpen()) { + dat.currentQuery.close(); + } + if(dat.serverIconGL != -1) { + EaglerAdapter.glDeleteTextures(dat.serverIconGL); + dat.serverIconGL = -1; + } + dat.serverIconDirty = false; + dat.serverIconEnabled = false; + } + } + + public void refreshServerPing() { + this.servers.clear(); + this.servers.addAll(this.allServers); + for(ServerData dat : servers) { + if(dat.currentQuery != null && dat.currentQuery.isQueryOpen()) { + dat.currentQuery.close(); + } + dat.hasPing = false; + dat.pingSentTime = -1l; + } + } + + public void updateServerPing() { + int total = 0; + Iterator itr = servers.iterator(); + while(itr.hasNext()) { + ServerData dat = itr.next(); + if(dat.pingSentTime <= 0l) { + dat.pingToServer = -2l; + String addr = dat.serverIP; + if(!addr.startsWith("ws://") && !addr.startsWith("wss://")) { + if(EaglerAdapter.isSSLPage()) { + addr = "wss://" + addr; + }else { + addr = "ws://" + addr; + } + } + dat.pingSentTime = EaglerAdapter.steadyTimeMillis(); + dat.currentQuery = EaglerAdapter.openQuery("MOTD", addr); + if(dat.currentQuery == null) { + dat.hasPing = true; + }else { + ++total; + } + }else if(dat.currentQuery != null) { + if(!dat.hasPing) { + ++total; + } + if(dat.currentQuery.responseAvailable() > 0) { + QueryResponse pkt; + do { + pkt = dat.currentQuery.getResponse(); + }while(dat.currentQuery.responseAvailable() > 0); + if(pkt.rateLimitStatus != null) { + if(pkt.rateLimitStatus == RateLimit.LOCKED) { + dat.setRateLimitError(true, pkt.rateLimitIsTCP); + }else if(pkt.rateLimitStatus == RateLimit.BLOCKED) { + dat.setRateLimitError(false, pkt.rateLimitIsTCP); + } + dat.currentQuery.close(); + dat.pingToServer = -1l; + dat.hasPing = true; + }else { + if(pkt.responseType.equalsIgnoreCase("MOTD") && pkt.isResponseJSON()) { + dat.setMOTDFromQuery(pkt); + if(!dat.hasPing) { + dat.pingToServer = pkt.clientTime - dat.pingSentTime; + dat.hasPing = true; + } + } + } + } + if(dat.currentQuery.responseBinaryAvailable() > 0) { + byte[] r; + do { + r = dat.currentQuery.getBinaryResponse(); + }while(dat.currentQuery.responseBinaryAvailable() > 0); + if(r.length == 4096 * 4) { + if(dat.serverIcon == null) { + dat.serverIcon = new int[4096]; + } + for(int i = 0; i < 4096; ++i) { + dat.serverIcon[i] = (((int)r[i * 4 + 3]&0xFF) << 24) | (((int)r[i * 4]&0xFF) << 16) | (((int)r[i * 4 + 1]&0xFF) << 8) | ((int)r[i * 4 + 2]&0xFF); + } + dat.serverIconDirty = true; + } + } + if(!dat.currentQuery.isQueryOpen() && dat.pingSentTime > 0l && !dat.hasPing) { + dat.pingToServer = -1l; + dat.hasPing = true; + } + if(ServerList.hideDownDefaultServers && dat.isDefault && dat.pingToServer == -1l && dat.hasPing == true) { + itr.remove(); + } + } + if(total >= 4) { + break; + } + } + } + } diff --git a/src/main/java/net/minecraft/src/SimpleReloadableResourceManagerINNER1.java b/src/main/java/net/minecraft/src/SimpleReloadableResourceManagerINNER1.java deleted file mode 100644 index 7691bd8..0000000 --- a/src/main/java/net/minecraft/src/SimpleReloadableResourceManagerINNER1.java +++ /dev/null @@ -1,23 +0,0 @@ -package net.minecraft.src; - -import com.google.common.base.Function; - -class SimpleReloadableResourceManagerINNER1 implements Function -{ - final SimpleReloadableResourceManager theSimpleReloadableResourceManager; - - SimpleReloadableResourceManagerINNER1(SimpleReloadableResourceManager par1SimpleReloadableResourceManager) - { - this.theSimpleReloadableResourceManager = par1SimpleReloadableResourceManager; - } - - public String apply(ResourcePack par1ResourcePack) - { - return par1ResourcePack.getPackName(); - } - - public Object apply(Object par1Obj) - { - return this.apply((ResourcePack)par1Obj); - } -} diff --git a/src/main/java/net/minecraft/src/SimpleTexture.java b/src/main/java/net/minecraft/src/SimpleTexture.java index 4b0fd79..6546f8c 100644 --- a/src/main/java/net/minecraft/src/SimpleTexture.java +++ b/src/main/java/net/minecraft/src/SimpleTexture.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.TextureLocation; + import java.awt.image.BufferedImage; import java.io.IOException; import java.io.InputStream; diff --git a/src/main/java/net/minecraft/src/ThreadDownloadImageData.java b/src/main/java/net/minecraft/src/ThreadDownloadImageData.java index 09715df..9289885 100644 --- a/src/main/java/net/minecraft/src/ThreadDownloadImageData.java +++ b/src/main/java/net/minecraft/src/ThreadDownloadImageData.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import net.lax1dude.eaglercraft.TextureLocation; + import java.awt.image.BufferedImage; import java.io.IOException;