From 12b8177f5eb85e1a65e3f7de2aed53c5c4f4d49e Mon Sep 17 00:00:00 2001 From: lax1dude Date: Tue, 24 Sep 2024 20:29:36 -0700 Subject: [PATCH] :>1.0.1 Fix EaglerXBukkitAPI on newer server versions --- .../EaglercraftXBukkitAPI-Latest.jar | Bin 116125 -> 118008 bytes .../EaglerXBukkitAPIListener.java | 22 +++++++--- .../EaglerXBukkitAPIPlugin.java | 41 ++++++++++++++++-- .../api/IEaglerRPCFuture.java | 9 ++-- .../impl/EaglerXBukkitImpl.java | 8 ++-- .../bukkit_rpc_helper/impl/PlayerDataObj.java | 9 ++-- .../impl/SameThreadExecutor.java | 40 +++++++++++++++++ .../src/main/resources/plugin.yml | 2 +- .../EaglerBackendRPCProtocol.java | 3 ++ 9 files changed, 112 insertions(+), 22 deletions(-) create mode 100644 gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/impl/SameThreadExecutor.java diff --git a/gateway/EaglercraftXBukkitAPI/EaglercraftXBukkitAPI-Latest.jar b/gateway/EaglercraftXBukkitAPI/EaglercraftXBukkitAPI-Latest.jar index 5c6b63e86942db4a4a6402b95fa329ab850ebc0d..640488b1251f17c38205507fa575efa6815dc583 100644 GIT binary patch delta 27018 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

Y48 zQQ8qB9^4vyM6we5Jf8PMlf8Po^4VcSFnRVQoF#iDQdp;nsWsewO7$Ab4$#7KEy}Qm zM*ExXFvX%~_M;7gGpnpEbD$ObvrBZB!9v|AlBs!v$A-?5EoAj~4-CCOy-QlLG#XbK zODW`u)rg99)sj!-+Y4JJy+MsnbSR02X1{?=AU5Gp^GH=aA^3dIk1Z47DEl9t0X4!S zckI)9pU0uusHvi$>VdVXt^lgT_%D0i=OKI!lqn?HOk<=%G=A+N?L2N3{ub{)6Ugj@ z1BvLE7n2!!5u1|+i=9WI>Mx|hZ@qV$maG8_d)L2V|BzLBcNwc47E%6%XO1*@R7$jB zEt~TbXHSj1d_YZ!MZK|w+OA3+F`n0Y?_zQz$9MLf;6}01%-g9?jt4pgyBE>!k z8MaQI_gdQ5buWmis7Y3HE=l1QWm+TNe2NvTfiV1M`<(?<{H4SV0U4&NE8BC)<77jY zg}IsIv35-U8+^V#>At1gxrI-O$vI8&J?ML13VjSeq=VN^ApPDrrfY$)EyrQxSNjK8 zQtz&TH< zMa$cQm__^@_FnH7=N$I?i|otBGZ(@#>A56b#tvxr1DC-Ec6TCkO^?M#-!ts8W;dl> z?6U5btu1R*AX8B<-Ny*J;~~ifIY!!>$CVdRO%`o5^OjFg0b0s(ttwPUGu}sIW zrmX2{rK0uV*5yvP8RZje0YyiStUQ3V93_($Dx`#+;3G$hA~`-+yg5kb{`*2r!g8MW zFPIBk?rZ^^O%d%1r67`=^nW}nCwf8QQA*`Z*j9!dAQdbRzJl4To((U>F%8#tT)~=m z$QO@SGla0m$~R~22=kR2(r14oMkK>piLG;47!dtkHzZzSWl<>HO2|b1DVjD<*9_8` zgM0Qno8Qgmp9Af#EM4||-XnVL&f7H)uG~uIrLuCL;d@XH6;;dbac&fOcNjo0}dsB!m(Xp2|36jVTVQ}N-w9ym(+`yxek z?O0~n_Qg*0w~qG3)M4publRwbEx-w&y18&fiX%sI4w(UEkzp zBP2^EPf9csaFQdEWo#~APoDAVuO$Vd$k2?T;f4cwVPP{uzb*2dZw_r=lv7_Vd7iKP~8W6ro)sZtlt9bm<&lkqifW~95 zqC3xnh3ac;+S->zMf!qkqrm>~ejd;y$M>ZWGe_Ko;tVN?WcB1V7dh_>KmA%4b~N{x z&)Wx;Imvu@ECM+g)FTX@MT#{7%Z;oB2KKJz{lS}^$aZ%F{^3oCa*Yw^T9K@}&O#oI zlFNprf1?%ztsP1S=u@g~%gjoS{4^XJ!dNMp;`N$`;pFjz>HM~0Lbm*`LyIu9&orBWuQPZIh?TzF zhfSm2bv_@!zy6cxiWDOaRfW`^0qI6dFnr8|94DSVCH`j9kQ)yx=LTQWUxFOQ9b3G$ zALlSu&dYp57}JgBaKrdBpv&0XLmB3FYyXC+4f;YI&udH&Q`;t=yI*SXr&A zHrSd5rd~(CE*3#0@`oW~hl)S}fbc?lDvI(8^|*pa?-BH1Zs2<{^1Gmz;tfeegKNI4 zwK5t+Lyeyr8ufL?Ah+84XEn6br$vk{4tfq$@N(=Wr8C2&#gjTOdJkfh>Yanntih~> z4s1P^`WbIt($!-RpQ`c(Hq|i?wIHmf*pD$i%i7hW?P51e??wLO8F>#KAnKU=b;2~U zsSJF1LZQ5oc<+~(`svZFo0SU$6G{o?mdvk6l^mr@g2M3vcEUk&-_r9d>j)}!rD`^b z1YTp`J&`#{EBfm~`Unc5gctT8_|l&99VBtL{yewEmiFC%=eBtPhEg_a4AaDwwcnsW z=WPQuD&S2u%XOFCt%$=jffkvZ2$xa~>%<6p+V$&8jbB;0x?JU3D{CbG=y}G1%8F87 z$YOlidzV?HKObfLG)niyEnIL7ufQ@1U+Vo8u4Wux+g>VF+Q__;H8F97pa9Pk3fbt?>)32`7Bc8F<0(%fhbA7@tsclaej%3PCsP_7lHf0DH5s{@w16Hs?R* z$Ob0pQ}vhZ-B6$Q7mr-1?WI5;D5trYfh>$*u1Ne0Tzgsp%uNQ)%?!@XBfI7}7#Up@ z?ye40tE&5rfVqqvZ6FVP`5}OZ$c`!hqMJG_B;&r?C*+sLbHzJa`#aGuc=m4cgswCq zk0vPI(*U1!Btv`dO~`c9@C+k^kC}`8O(ci;Ir*1poYjFZ$pjmugg>qjd1MzpB zN_<}Lw}Otpr}WOeyb4#O?dINqA;G}^Q`S{LMb&j}h8F2o8tD!}7+NJnKpJW3(2?#K z1q4BQfT6o%=ZhKEe+!U%Z%mS$L>F0`YBr5gM;fb=NPIx}Vy8cRx6INt;p2KXo$uZ?3gZQQl z<=`WuM)g@LbJqJpex}2L49AvT9Kc5nGhyt?ghfIuRtzqfQfoeOw4b;qd0mL2kHC2A zrndSRWGF?Yjc;g?VruLcUHz96D{$$K8;;!iN#w-)=&c2wOMa3L;IKk?uk8~gIXj>#eChA0N`!7+C_ITih?b6mt&V!9l@@>E*RF))k(X5{l}haZ3) zhagQ3P*<#ZRC2}=v{0C`KSR0P)!DWJ{)&1~2#2&fkaDKY&C zWkOBl&pvjvoatxeWfLs72~4*MU0;celN8d1ot~O(=JEO-T75cnlQ{PP7Y$q*wXOLF z^rxNBRvUOQ`YUO?`dBV(@X(e#=LJHc8Fe^bB0;xaX#bQ;muS)c3ZCZo17=NUbhd5e zhdAC}tUQR>gfmX2S?ZL9iDAop4_VoXPY%5UCKS-nm`z4;R;G?Z(lPD(#HFH#`<)%V zZ#oyKDWy$EDIqN(AtPdQ;8gul0WI^sP!nu5}x%Y`?&l?F3FL#=((VL67dNq=AcGtqw`DdUrsuKU=kS;!;vreL~pu3 zZ{&Vbb>or4kJQk~MvNEg`uY8lq^aOn5+htpe~HkSJ#X1|x2JIfP^_W#D{3I5`0tU3 zjvGW>9(7s3EJ)HPw`mDG>?F>e(nIRvM=wkl7thUgn93#vXMQaE3eH)4$l9tMZ@6NZx!p4quT4vy z-9*_rOgKamt(dOX7(v!qpZb=`n&sWRCG@srywG9a?i+RRo@xlyWH;y6T5vqg8obHCOe|CZTQ(DGwMR5f_hQT{bXzc@A@N zhEIokdMQ_=ih8mL^vr;WTXN!_H~8YO6cAP+t%zW zxiy34x-j%WAwaZ$y%!$RjU+9XH~uHV6b-IM=42#w{!N)oifGUo4zA3rpY>E&?_L!`?ew>bEQFC z${4GW%}FktC^uuPFieZA4g@OoTmd}2hRJC1H>T%vJdw&_-6W$W4Q zX&R+l;Cm`C!tHI6!cDff*qlUZNS$R?7p&x%M;Cujz&_<=o2=FwG9_&g1iVC3BkYuk z42qQYjr9lbKYf_^k>4bT;3u5}KD(-2ws?QWswJgbuDezt@sJc>5`T`QYMO#%P<3=g z&hr{oqTyD{2O>ENX<2IAB6(3GZqBDx<+NIpi7y2=<()_AY9bUSoH$&gYe=}q$~Ys)B=ze{m13FXBqkag2!or{SOz!ZH|>Sqyy=RO$m07Y7mxt9zR1^S zPaa%dM&u5}%;m&?6`xH_(313q?}&^QqLZyIe`P|CyuQVfFrFl)tCf-)9HD+Cc|DHm zTuc!Sep3vBV4ujR;dA6!K+`DJCJjk`JKeu`%R zvFzSv-h3oD!g%@wKd16REJ?qeYVL~QXj+JOewj2DY`{itzQETp`$&Ng#yR#zM%;t{ z>5E+AvB~B+`5r~AuJgw~ksbK^mE#Qf%v#stz}>3s+^%^cwrYhp23rM`uDv0|nFE0| zX+EuBDfShY9}8{AY;mnWJQjxp>#6GG@z*n377B>!Kme=hCT%ijAslxPfZa(8Y2rY@ zp}l%URwK}Vtq2Z6E=|-%`6>E6|!PY z!GqtT<>Yj|1f7|&)S%uSoTGHdL_I1R9Yg%QveR7f@{hM&pvvtBf0v^pWR@q50 zQ87-5rW4ce+nkRt^9YT5A&c&co>g5ETnY#el-EJLj}HLiPT3o44dr-NFP!LnZ>W>S z2rH}SDS$%cUqy)fP_-vo5#YycFqxfly^!BgecqZPdQxPdRMbkY5Vv6vOm_+HYvqzI zVJ|YsmRpy_+K}<*DUoy3wviu|Nx<%`Y7?M>^U1&-rAyjmT4cA#T5>8<49q3(qKq*H zBaBlN#FGG6oFq`bw<(??ZH{s;(j!Jvc#E2Z0UWr5ipq>?jUez87FXLatsQ-uO~>Hn9-uR_jaM*Yf5zm_Gyb9;p=gjBu+m zIi~-hbspBsfE6((*1ajn_U$fU>+LVjQ|y27QOtSBq~?Oz+4+&_1xAosVM|)0)aclj zJ&@-_<{B6{LebjvCE7wVq75EbN6A@EE`BSuzVDyktu1gAVnrgd2nG(Yk z)80eI$a>4=$%U0?LmhEL9aOHvQocs^&p^fk9dtt-Z{=+Y3WDOcnM-Ff1yoeF-DL}4 zjw`CWO7BAgPTqnqvCY9yhFmcfe^*Z5lU1cDsPK&#EgXSSVa*t^%iocYFxg2#Z3nT?fXJY)v@xmr!PZ|z@CDOyuLu+c65Ue z5y{2G60>2Z85shZl1__hZa7A#L&>{liEHhqk~w#Z1!KgHkT z{JVD&Hw8yPvl*Su4g(2(ECCe(K^4+G4}{)rk*sWV0I(t9-EE-E5T16z!9ze8gm0pJ z^N#^k$OS+G)*g4c1($5I_CBMrLG*_p$f7qFFMkb1_M$+nNTWmifnBk@klxHR62wmX z`gu){cS*$%s+N?Lw1vexq^Xb5QBinN-yeKN?dqw3%}zO_xfSX@(mmatW6kKlS)XCm z#283xKG-u$$g^wsm9Tey+hBKmoYZ)vhQQj!vw-KL0*<1PlR9Plw!W-B6oAc8@PUnN z)&R|ko$M`9AKfo+e^qNY&-DQxk82<90pALy7)m6Q{S1PX~g$z8r@MrPZbq zvhk5_7lTXv$KLfCnz2|hhBwR5npKW9wGkqz$m{r62-mo4zN52ESq!Y#P*iGk{+0^k z<3{2=Pw;!d0mI?s5cFNr;;wCPqW3zd_rk7KMtQh&ED3SRLnSe)@CWwcsqQNCdc_?5Ytn2(pGv$r+-yKtHGpZQKU@!0n=Ioqo+Q6ufPjGHI_ZFpp1R(U9TKpMn_*U=y775I?IPJs%nhDz(TYX_lyJZ+J&q!lQ~56Uw7>4gaz zz?b~7!ErY9>XXe|KF;@A<88X4AJUPY7i{fmR@kc%_+M{Gg?!c{h#PXc`6*O9jzY4^ zG>Xa^BWI<0$X(@S=0B~%6THY$)&EkgVq-|Q9imP$I|*7nd{wfQmt=nn0@*2CfAR-` ztLmLuT1#4cR#UyszoEb*x(2anthqH-Hk8!Rbo z8xJUyFgkAsznoyPBvAOF&QG*@wXJLecJ(XyIm@A!YfZ@?rrgCZ4a%IHg8Ymp!r3u2 zCK4d+LSM5W_O~wr6@to5ONZ+hRT->Qgjj*w(vLMW+=DYp^s2KSS5jLUk~o&C`v|qx zV|v>Kdg;@>e}ML~PZQ;b>KkQ-2}*ZGe}};;JQ=m;DM8i`MU9tQ&(Mp5?GB#rg6TV* z2+u2g2FtS*(j`r^uJz=PEZBRzPGioPL_1gpR0wJ^e{SOQTQ|OwQo4Ype#3IFOLl*i zUA{`tT@`t}3}E}U2=#wg|AIKpx$;7>^iuu`gOXuJinq{ppUQK@Q_UiDucTR4REs}1>Op(LXGiUcM-J3wjgG0RF& z6FZ@S#g?1N1uke#vBXf4t7cf}d06PDnZBY7+)yJfhI@0CW>Xiuk?1=R;r%ayJ)J~l`EFi-# zQt6QfO6zV{rXSMuuN;Y9jBpUJ!xgVf^M|gwqi1phZfrjwGVR+nX)7L*w0xb9QD4j` zb5GTZPjdZD+0q-uN(NLKq(U%yMSWws?a_l1f$nrJk&LQNx5Hx6JVide4jY2PB|cQu z0a^Uc0%gLKgjS3qh3GR1l(&fuCYxJi44xXGgK#H>^TktncM33dG;FhMG=lisOi3v} zETcjZ_h;)f6pd5!VWjwqC4dlxb=$+2Dxck1G|aCMmpzrEuca9pzF2`Du60C9R+I;G z%r)i4kp=9Qbr{@c?GWTbOR%qds0qsZC0p(|$z46TiTF{-qV1;D{8`s9 zv4nPKZbkK}=c$+EGLV+~TR9GRV5@NJG(WO8UB#xx*{OvRW7}HhyJ1_wnmFHFn||yW zE0GW1uCkDZ`xzO-dd&pb+E~TOJh}co$UM0;&xv~M#}x5{g5yOuuim-ZsTxuIP0H`2 z7CSf&m-|jWB|Nb(`TFYz) zy@5K27``95EFmyQfgC&hUK7 zjd!9gv}?@hlt2+m5k4PjW|b8V!n`$I>dei_>%p5WiRx**P61qg{!C-FT^8?vb7SF@W}V{aQ&un@&? zarRAIq8pC=lB?YYCJa$U=Wr0xcs4uJd*qyYn#78I<0U#wQLh@SOz&$KhO^VH7~vde zGMy{sx@DzT*UmUz*Jt&xEVC>`cA51Zqi@XFPxph=W>)C~TRc0w*ShQ-=^cbBk}1VP zvGT)|zH%aF@v&T$7|h&>#`O`tC4u^W#Z<$K&US5_e*vuoM6{=mf;gJJu{67TwzpLdXJXCH+3JT&!Sk?) zdN$ikZIRW&uH2RhCj*3t=h|*>-DnAPK;u7VSV*gy64t*6HG@tg7+R|(90~^M;sc-g zoQ=5AfIqM}n~vxo$OHLvdPAs_rw?gZD@IX3l{YIL-m2S%_VKo$bon3O!PP;eu zPn_)yUh#9*X%!u9i^)e+kRyV*&uo1^u;m%I6Dc33|N0SK&XIywz%~!f#p+wEu%8ILWLC?M26PE?F@y2vYq}Lm2Ak*XKc5tvPM2IRnG*Xi6Mz|Pp-=Si&{}6kQQL+vlJe!_ zkW{IC0n=x;hBat~OG|0d^yDVUdM=;a^fbHPG|pAwk5{R~Rz~TupJ?P;A{&S4v>R=n z_oqh>^cfC3-FP%uTh;T)1(Gt6uC!K7TL6|OGW!G!u*bB!3|ScQg*HWU>o^bw5ea1T zJt9eYR63k0$(0ZUL)ROZsg|>YC2Bkkr1?(mSDc!%#HG&XjAK-O;hJ_~Ze=bUc)Yw# z($qOf)@A-6Lq8w~-4Jz_n{0AHIo1X6k!|=2Lz7ls5v*Yjh~6nt^@1VHGXz1GH^II) z!INaz2II?R)f)a>rwH!l6i>4Aca#k&o?nth_ehAq#Jsej@uZ&%?YjLlm(ln_R_z7O z!1a`@vUH$jOCif5;?a$x-k&FuWotY=BVO9Fbh^3`_T@VLe4S4uR1@3CRfnhy6<>RH zy|Pq_-`{TzHQ}9ntbBL=FD6QB<&wT23 ztdekghR(6H6lB$unrQu#9-aJ)$)RLIXR!mFuU_p)&5l9=3Jj5q69+?st`TDp(g*O;{n`vDSFe z%A2v^6mn4?Oq@bUBu33MyqAd88M>>_<69eB&)FjCD{}2H$33${(az~Gaqw%7(PoEx zdrQn0?V@wve+o_dAT*Jxo$#>HAy?o&qGXtI z&h2FIMStXzGnpSP^TC{$QS9zu_mt8Pi)hOaS$m0ZJlzfSetM}l4eL#>`CYqa!fY|c zMi{ge<`X7tZgtii4@uh_DaT?@xLZyZHOV`*uTF^PCelSw~tME6>*zX$mhp%}~D=I2G81lC3gq+VRaTsjw!gFSw0J z8Rx22tBTWzmgh|sBoR`&Fimp%=@;i)vRE#Da>mJQ{3iNhB2iTyK1VI_Jo52r{kK)u z6r9L*6a`XeO|vuFL81Ipu~t+hEBrOHt;VExrb8f#iLhmU@XRjlv{TMkjPKUV;YwF- z>*yZ^-lyI?6MHOu(3o~+u`~EO{N$a{Xm(NVH>p!g*SY4B-mmOU=gIbklT6$w9h<1_g z`b96?wRb5f+H=5N_Z)tb{;6K;FXx2XH=&2`r_5Np3aDNid;6RpJ@rVrN;|xf88(x4 zR;l?S>PG2lrskIWYJ9%G=EhYiTh2ud%=&R{{nbED^t$V_g}611gc_A>^jsn!a&Cyk z1zCsjz{7TS{y~dpajz{6%10$+vtXsPy27{W^7HH>*pWxJAM@Nl-6GWx5LLgZcunqb zi&MGl4`_aXcgMy??=|wIAI?ODgYw@=7qE%}$VAoL*2KVA(%Hnw!QRUDH#LOnv;u(= zp>7tt9CQ2g>WFV&h;c0>rEnEh4Cxe~7NfjiJvbba%kp#Fu+J1sV7>|)Y(vHmf|@n9 zTPdDmw$rL6xks1onH82gp15BgEb@LL5=L)ADn!=D)!i`N5L1l}$Y+((oCC8{+KwA; z=uKkwyY?+4yxD%e&)b!&3F*z$oTyHlkb6$)rs+6<4Wa?o_)TAt31MM^#Sq&I_3>*MMBnWwU%Dwov@S~8OxP4CP2E5=cB z06$hqp}t?Inl7?x1@B5cYYlvOj+KMZLK?wE*v2J=K0A;9^E!6;XdfaeObudYy;& zlci8Q*5VBB$!21WN&v-o%Sfo9qX?xq;pjk-8EH6$OrQOyP}%L%1>!X@-3+!N1hhge`dDNShDJ{o9k`nd2E!*8GZBk$O z0Tg?h+Yg-e#cDE*vQ`a!d%N6nCO5CN0-7r=qRjbI0!{ZRYSmY0_rw``crtT0E(3$-8)5uy9b`n_n0q8Ukx&&HqahkQG`FjkhjPDQbL6X_Mk}A5_oa-`cTC5 zjZQLNAi>xJHlxV&Nl9KmN?;mcT*d~Sq!D3KN}#|5R}hw~acl|kOp+?es*BB_$M&HW zD997G9I{dO5nV zBAJkVAc{G2XJe6EljkNxrodvALETNGzl(~8Sx(`)E#rc8BwrzY6vyEJRq-_dkr3&h z_bXJ|MF6_*DdnJIQ2>)WRyb%@6yVFhuULTcK>>c$cT98t(AvZ2Oy45>`$_-IfC@1n z6pn%dNTFQO04_ig)F2x09ub=mo-7R|iUF_y?4aT?fB-}c5_pmllp+@J3^DC7B(e zJohLIFCH|y9DoaDNB}$rltU#F0HKJFMelNhXo`|Rg%aVB;-BB^)6a>a19$qi)O~4Q zCjmqevtQrKGf9Bwh~Jg&?MReKq5jEmyBhs_{al{_`X~ji9~s@-Mx_A65T9Dy%S@?o z85MLd*Q5eO5G8ExeLmR`LG{z%K7ICZT^!n*29QQ{bopDxg&L;=_z`J5A)miULzmOx zhQ4>QGQ`>o71HO4^;e~QGT?-MTwcEc0%%qOyrx8%@R~xPT$um}qMkn-Q-_je!D|v8 zawkJ3LWu93AzcywZLf_8II09mD#3&*W&`*T-DCdISF+(n*-HFJcgca{_NjmCkj7LD zC`m57h!Gior$Li*;XZ}Af9sHoTnwmK9^57X_IDbzD-R%q_^#x)P6hpu2f&0puOfW- z?^QH~Cg%gbBGT1BB!-?tKNJ9%5xr|5HZ=y&vjTXqlX|$U1@(l%8&SOlQGV@rT?6#>WqW6leSa%&ivi+@C@c2}glmNqx>pQGAFutL@BpH)MsSyi3H?+8 zphQgH_zM}_cyxF1aiQW-08AW-KQdy3hL!?eLQP8HH^%SHIDd5&o(ed`c6kTAfaqQlvHow} zV@&fm>)=J91t1`3{8JHQc0tOSrD24DZx7I(a=kfv)QXi+5qllo8M zRRjd3KVl%?{_Atc#Y%P`PV`QAf(U>#p9$a5w30vzs{kxW+Sq@kkX8d|?(KxD;dX6= z04N?EKoXi%4Yy$;`mH4r0jTfV7#HeF0>Fj8UgNJ%`scSKzbytx095x^;Xc-I4LlaZ zqu*HkBlzGXR|~+r$FytVnC;_xOdh)b81N9Po&6hIxWk&se`9beO-yKB3ILPluHQ(R z7N$(Y+f4#ai}~jeC`9$!p_&TrFkAOK*mfN}SRl=B41*Sc0bi>6cLcs0ZmsL#CJRsQ zO)Q|~jlZ)B5k=R-fcMcr_|uf`-<5@br+-FbytjP|b#DONGlW9J8sH(mGXKuyssX;r zbr+en5uUul_HQy4)G8ltV$JXZ?TOu8bol*wM_Llw3~wlS zkAmjhL9fOC1Ht)BP@xzt0IGXewiY-p_3}>~51JqWpoFr*yXAdZ{-s6v-?G@g`P1{s zeIxv_O!!CHL!JL)4_`JUg;uxz&g74!!#|ub-T&hRUrPKvPD`}`9wU7X`VW@e29QJY z4gWI*4=U0QprrYKPtt#6AqM@|3Ge?sSwk1o00htf^YDQ%5BJ9SBZ6lv0Kxh%hBg<_ a2gTPY@Fh|>do27fgBt-sBo5xY5&jSV-aW?v delta 25246 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%0A3K7 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 diff --git a/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/EaglerXBukkitAPIListener.java b/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/EaglerXBukkitAPIListener.java index 29d5f8e..a0eabcc 100644 --- a/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/EaglerXBukkitAPIListener.java +++ b/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/EaglerXBukkitAPIListener.java @@ -34,16 +34,28 @@ public class EaglerXBukkitAPIListener implements Listener, PluginMessageListener @Override public void onPluginMessageReceived(String channel, Player player, byte[] data) { - if(EaglerBackendRPCProtocol.CHANNEL_NAME.equals(channel)) { - PlayerDataObj dataObj = PlayerDataObj.getForPlayer(player); + PlayerDataObj dataObj; + switch(channel) { + case EaglerBackendRPCProtocol.CHANNEL_NAME: + case EaglerBackendRPCProtocol.CHANNEL_NAME_MODERN: + dataObj = PlayerDataObj.getForPlayer(player); if(dataObj != null) { dataObj.firePluginMsgRecievedInternal(data); } - }else if(EaglerBackendRPCProtocol.CHANNEL_NAME_READY.equals(channel)) { - PlayerDataObj dataObj = PlayerDataObj.getForPlayer(player); + break; + case EaglerBackendRPCProtocol.CHANNEL_NAME_READY: + dataObj = PlayerDataObj.getForPlayer(player); if(dataObj != null) { - dataObj.firePluginReadyMsgRecieved(); + dataObj.firePluginReadyMsgRecieved(false); } + break; + case EaglerBackendRPCProtocol.CHANNEL_NAME_READY_MODERN: + dataObj = PlayerDataObj.getForPlayer(player); + if(dataObj != null) { + dataObj.firePluginReadyMsgRecieved(true); + } + default: + break; } } diff --git a/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/EaglerXBukkitAPIPlugin.java b/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/EaglerXBukkitAPIPlugin.java index 2a97fa4..8d069ed 100644 --- a/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/EaglerXBukkitAPIPlugin.java +++ b/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/EaglerXBukkitAPIPlugin.java @@ -5,8 +5,10 @@ import java.util.Timer; import java.util.TimerTask; import java.util.logging.Logger; +import org.bukkit.Server; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.plugin.messaging.Messenger; import net.lax1dude.eaglercraft.v1_8.plugin.backend_rpc_protocol.EaglerBackendRPCProtocol; import net.lax1dude.eaglercraft.v1_8.plugin.bukkit_rpc_helper.impl.PlayerDataObj; @@ -44,10 +46,30 @@ public class EaglerXBukkitAPIPlugin extends JavaPlugin { @Override public void onEnable() { EaglerXBukkitAPIListener ls = new EaglerXBukkitAPIListener(); - getServer().getPluginManager().registerEvents(ls, this); - getServer().getMessenger().registerOutgoingPluginChannel(this, EaglerBackendRPCProtocol.CHANNEL_NAME); - getServer().getMessenger().registerIncomingPluginChannel(this, EaglerBackendRPCProtocol.CHANNEL_NAME, ls); - getServer().getMessenger().registerIncomingPluginChannel(this, EaglerBackendRPCProtocol.CHANNEL_NAME_READY, ls); + Server svr = getServer(); + svr.getPluginManager().registerEvents(ls, this); + Messenger msgr = svr.getMessenger(); + boolean registerLegacy = !isPost_v1_13(); + if(registerLegacy) { + try { + msgr.registerOutgoingPluginChannel(this, EaglerBackendRPCProtocol.CHANNEL_NAME); + }catch(Throwable t) { + registerLegacy = false; + } + } + if(!registerLegacy) { + getLogger().warning("Note: Only the modernized plugin channel names can be used for this server!"); + getLogger().warning("Make sure to set \"use_modernized_channel_names: true\" in bungee/velocity plugin settings.yml"); + } + msgr.registerOutgoingPluginChannel(this, EaglerBackendRPCProtocol.CHANNEL_NAME_MODERN); + if(registerLegacy) { + msgr.registerIncomingPluginChannel(this, EaglerBackendRPCProtocol.CHANNEL_NAME, ls); + } + msgr.registerIncomingPluginChannel(this, EaglerBackendRPCProtocol.CHANNEL_NAME_MODERN, ls); + if(registerLegacy) { + msgr.registerIncomingPluginChannel(this, EaglerBackendRPCProtocol.CHANNEL_NAME_READY, ls); + } + msgr.registerIncomingPluginChannel(this, EaglerBackendRPCProtocol.CHANNEL_NAME_READY_MODERN, ls); if(timeoutHandler == null) { timeoutHandler = new Timer("EaglerXBukkitAPI: Timeout cleanup thread"); timeoutHandler.scheduleAtFixedRate(new TimerTask() { @@ -83,4 +105,15 @@ public class EaglerXBukkitAPIPlugin extends JavaPlugin { return instance.getLogger(); } + private boolean isPost_v1_13() { + String[] ver = getServer().getVersion().split("[\\.\\-]"); + if(ver.length >= 2) { + try { + return Integer.parseInt(ver[0]) >= 1 || Integer.parseInt(ver[1]) >= 13; + }catch(NumberFormatException ex) { + } + } + return false; + } + } diff --git a/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/api/IEaglerRPCFuture.java b/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/api/IEaglerRPCFuture.java index b3b68e7..e31be16 100644 --- a/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/api/IEaglerRPCFuture.java +++ b/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/api/IEaglerRPCFuture.java @@ -5,7 +5,8 @@ import java.util.concurrent.Executor; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.MoreExecutors; + +import net.lax1dude.eaglercraft.v1_8.plugin.bukkit_rpc_helper.impl.SameThreadExecutor; /** * Copyright (c) 2024 lax1dude. All Rights Reserved. @@ -24,13 +25,11 @@ import com.google.common.util.concurrent.MoreExecutors; */ public interface IEaglerRPCFuture extends ListenableFuture { - public static final Executor SAME_THREAD_EXECUTOR = MoreExecutors.sameThreadExecutor(); - /** * Warning: Futures.addCallback is recommended! */ default void addListener(Runnable runnable) { - addListener(runnable, SAME_THREAD_EXECUTOR); + addListener(runnable, SameThreadExecutor.SAME_THREAD_EXECUTOR); } default void addCallback(FutureCallback runnable, Executor executor) { @@ -38,7 +37,7 @@ public interface IEaglerRPCFuture extends ListenableFuture { } default void addCallback(FutureCallback runnable) { - Futures.addCallback(this, runnable, SAME_THREAD_EXECUTOR); + Futures.addCallback(this, runnable, SameThreadExecutor.SAME_THREAD_EXECUTOR); } void setExpiresMSFromNow(int millis); diff --git a/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/impl/EaglerXBukkitImpl.java b/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/impl/EaglerXBukkitImpl.java index 6db93be..54ffd0b 100644 --- a/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/impl/EaglerXBukkitImpl.java +++ b/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/impl/EaglerXBukkitImpl.java @@ -79,13 +79,13 @@ public class EaglerXBukkitImpl implements IEaglerXBukkitAPI { sendHello = data.hasRecievedReady; } if(sendHello) { - sendHelloPacket(player); + sendHelloPacket(data.pluginChName, player); } return data.openFuture; } - protected static void sendHelloPacket(Player player) { - player.sendPluginMessage(EaglerXBukkitAPIPlugin.getEagler(), EaglerBackendRPCProtocol.CHANNEL_NAME, HelloPacketFactory.BASE_HELLO_PACKET); + protected static void sendHelloPacket(String channel, Player player) { + player.sendPluginMessage(EaglerXBukkitAPIPlugin.getEagler(), channel, HelloPacketFactory.BASE_HELLO_PACKET); } protected static EaglerXBukkitImpl createFromHandshakeInternal(PlayerDataObj playerDataObj, SPacketRPCEnabledSuccess pkt) { @@ -362,7 +362,7 @@ public class EaglerXBukkitImpl implements IEaglerXBukkitAPI { .warning("[" + playerObj.getName() + "] Packet type " + packet.getClass().getSimpleName() + " was the wrong length after serialization: " + ret.length + " != " + len); } - playerObj.sendPluginMessage(EaglerXBukkitAPIPlugin.getEagler(), EaglerBackendRPCProtocol.CHANNEL_NAME, ret); + playerObj.sendPluginMessage(EaglerXBukkitAPIPlugin.getEagler(), playerDataObj.pluginChName, ret); } protected EaglerBackendRPCPacket decodePacket(byte[] data) throws IOException { diff --git a/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/impl/PlayerDataObj.java b/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/impl/PlayerDataObj.java index 13b3c17..f1e4e35 100644 --- a/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/impl/PlayerDataObj.java +++ b/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/impl/PlayerDataObj.java @@ -41,6 +41,8 @@ public class PlayerDataObj { public final Player player; + public String pluginChName = null; + public volatile boolean hasRecievedReady = false; public volatile boolean isSupported = true; public volatile EaglerXBukkitImpl currentAPI = null; @@ -60,12 +62,13 @@ public class PlayerDataObj { this.player = player; } - public void firePluginReadyMsgRecieved() { + public void firePluginReadyMsgRecieved(boolean modern) { synchronized(this) { if(!hasRecievedReady) { hasRecievedReady = true; + pluginChName = modern ? EaglerBackendRPCProtocol.CHANNEL_NAME_MODERN : EaglerBackendRPCProtocol.CHANNEL_NAME; if(openFuture != null) { - EaglerXBukkitImpl.sendHelloPacket(player); + EaglerXBukkitImpl.sendHelloPacket(pluginChName, player); } } } @@ -121,7 +124,7 @@ public class PlayerDataObj { if(pkt.selectedRPCProtocol != EaglerBackendRPCProtocol.V1.vers) { try { // send raw CPacketRPCDisabled - player.sendPluginMessage(EaglerXBukkitAPIPlugin.getEagler(), EaglerBackendRPCProtocol.CHANNEL_NAME, new byte[] { 0x03 }); + player.sendPluginMessage(EaglerXBukkitAPIPlugin.getEagler(), pluginChName, new byte[] { 0x03 }); }finally { apiFuture.fireExceptionInternal(new EaglerRPCException("Server tried to select an unsupported protocol: " + pkt.selectedRPCProtocol)); } diff --git a/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/impl/SameThreadExecutor.java b/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/impl/SameThreadExecutor.java new file mode 100644 index 0000000..3fe12d2 --- /dev/null +++ b/gateway/EaglercraftXBukkitAPI/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/bukkit_rpc_helper/impl/SameThreadExecutor.java @@ -0,0 +1,40 @@ +package net.lax1dude.eaglercraft.v1_8.plugin.bukkit_rpc_helper.impl; + +import java.util.concurrent.Executor; + +import com.google.common.util.concurrent.MoreExecutors; + +/** + * Copyright (c) 2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ +public class SameThreadExecutor { + + public static final Executor SAME_THREAD_EXECUTOR; + + static { + Executor fuck; + try { + fuck = (Executor) MoreExecutors.class.getDeclaredMethod("newDirectExecutorService").invoke(null); + }catch(Throwable t) { + try { + fuck = (Executor) MoreExecutors.class.getDeclaredMethod("sameThreadExecutor").invoke(null); + }catch(Throwable t2) { + throw new RuntimeException("Google fucked up!", t2); + } + } + SAME_THREAD_EXECUTOR = fuck; + } + +} diff --git a/gateway/EaglercraftXBukkitAPI/src/main/resources/plugin.yml b/gateway/EaglercraftXBukkitAPI/src/main/resources/plugin.yml index 58d06d1..8faf609 100644 --- a/gateway/EaglercraftXBukkitAPI/src/main/resources/plugin.yml +++ b/gateway/EaglercraftXBukkitAPI/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: EaglercraftXBukkitAPI -version: 1.0.0 +version: 1.0.1 main: net.lax1dude.eaglercraft.v1_8.plugin.bukkit_rpc_helper.EaglerXBukkitAPIPlugin description: Official EaglercraftX API for Bukkit servers author: lax1dude diff --git a/gateway/backend-rpc-protocol/src/backend-rpc-protocol/java/net/lax1dude/eaglercraft/v1_8/plugin/backend_rpc_protocol/EaglerBackendRPCProtocol.java b/gateway/backend-rpc-protocol/src/backend-rpc-protocol/java/net/lax1dude/eaglercraft/v1_8/plugin/backend_rpc_protocol/EaglerBackendRPCProtocol.java index b1f4e82..21927d4 100644 --- a/gateway/backend-rpc-protocol/src/backend-rpc-protocol/java/net/lax1dude/eaglercraft/v1_8/plugin/backend_rpc_protocol/EaglerBackendRPCProtocol.java +++ b/gateway/backend-rpc-protocol/src/backend-rpc-protocol/java/net/lax1dude/eaglercraft/v1_8/plugin/backend_rpc_protocol/EaglerBackendRPCProtocol.java @@ -63,6 +63,9 @@ public enum EaglerBackendRPCProtocol { public static final String CHANNEL_NAME = "EAG|1.8-RPC"; public static final String CHANNEL_NAME_READY = "EAG|1.8-Ready"; + public static final String CHANNEL_NAME_MODERN = "eagler:1-8-rpc"; + public static final String CHANNEL_NAME_READY_MODERN = "eagler:1-8-ready"; + public static final int CLIENT_TO_SERVER = 0; public static final int SERVER_TO_CLIENT = 1;