From c65f6b006f38c0e8ca919c846ee9605ef54433bf Mon Sep 17 00:00:00 2001 From: "Kristian S. Stangeland" Date: Wed, 12 Sep 2012 19:04:53 +0200 Subject: [PATCH] Initial commit. --- ProtocolLib/.classpath | 14 + ProtocolLib/.project | 17 + .../.settings/org.eclipse.jdt.core.prefs | 11 + ProtocolLib/Java.xml | 14 + ProtocolLib/lib/cglib-nodep-2.2.3.jar | Bin 0 -> 322553 bytes .../com/comphenix/protocol/Application.java | 8 + .../comphenix/protocol/ProtocolLibrary.java | 63 + .../comphenix/protocol/ProtocolManager.java | 90 ++ .../protocol/events/ConnectionSide.java | 31 + .../protocol/events/PacketAdapter.java | 60 + .../protocol/events/PacketContainer.java | 126 ++ .../protocol/events/PacketEvent.java | 119 ++ .../protocol/events/PacketListener.java | 34 + .../protocol/injector/MinecraftRegistry.java | 88 ++ .../injector/PacketFilterManager.java | 336 +++++ .../protocol/injector/PacketInjector.java | 177 +++ .../protocol/injector/PlayerInjector.java | 261 ++++ .../protocol/injector/ReadPacketModifier.java | 84 ++ .../protocol/injector/StructureCache.java | 46 + .../protocol/reflect/EquivalentConverter.java | 12 + .../protocol/reflect/FieldUtils.java | 473 ++++++ .../protocol/reflect/FuzzyReflection.java | 218 +++ .../protocol/reflect/MethodUtils.java | 1325 +++++++++++++++++ .../protocol/reflect/StructureModifier.java | 218 +++ .../protocol/reflect/VolatileField.java | 158 ++ ProtocolLib/src/plugin.yml | 8 + .../reflect/StructureModifierTest.java | 24 + 27 files changed, 4015 insertions(+) create mode 100644 ProtocolLib/.classpath create mode 100644 ProtocolLib/.project create mode 100644 ProtocolLib/.settings/org.eclipse.jdt.core.prefs create mode 100644 ProtocolLib/Java.xml create mode 100644 ProtocolLib/lib/cglib-nodep-2.2.3.jar create mode 100644 ProtocolLib/src/com/comphenix/protocol/Application.java create mode 100644 ProtocolLib/src/com/comphenix/protocol/ProtocolLibrary.java create mode 100644 ProtocolLib/src/com/comphenix/protocol/ProtocolManager.java create mode 100644 ProtocolLib/src/com/comphenix/protocol/events/ConnectionSide.java create mode 100644 ProtocolLib/src/com/comphenix/protocol/events/PacketAdapter.java create mode 100644 ProtocolLib/src/com/comphenix/protocol/events/PacketContainer.java create mode 100644 ProtocolLib/src/com/comphenix/protocol/events/PacketEvent.java create mode 100644 ProtocolLib/src/com/comphenix/protocol/events/PacketListener.java create mode 100644 ProtocolLib/src/com/comphenix/protocol/injector/MinecraftRegistry.java create mode 100644 ProtocolLib/src/com/comphenix/protocol/injector/PacketFilterManager.java create mode 100644 ProtocolLib/src/com/comphenix/protocol/injector/PacketInjector.java create mode 100644 ProtocolLib/src/com/comphenix/protocol/injector/PlayerInjector.java create mode 100644 ProtocolLib/src/com/comphenix/protocol/injector/ReadPacketModifier.java create mode 100644 ProtocolLib/src/com/comphenix/protocol/injector/StructureCache.java create mode 100644 ProtocolLib/src/com/comphenix/protocol/reflect/EquivalentConverter.java create mode 100644 ProtocolLib/src/com/comphenix/protocol/reflect/FieldUtils.java create mode 100644 ProtocolLib/src/com/comphenix/protocol/reflect/FuzzyReflection.java create mode 100644 ProtocolLib/src/com/comphenix/protocol/reflect/MethodUtils.java create mode 100644 ProtocolLib/src/com/comphenix/protocol/reflect/StructureModifier.java create mode 100644 ProtocolLib/src/com/comphenix/protocol/reflect/VolatileField.java create mode 100644 ProtocolLib/src/plugin.yml create mode 100644 ProtocolLib/test/com/comphenix/protocol/reflect/StructureModifierTest.java diff --git a/ProtocolLib/.classpath b/ProtocolLib/.classpath new file mode 100644 index 00000000..0bc481ca --- /dev/null +++ b/ProtocolLib/.classpath @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/ProtocolLib/.project b/ProtocolLib/.project new file mode 100644 index 00000000..dd7e4061 --- /dev/null +++ b/ProtocolLib/.project @@ -0,0 +1,17 @@ + + + ProtocolLib + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/ProtocolLib/.settings/org.eclipse.jdt.core.prefs b/ProtocolLib/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..54e493c0 --- /dev/null +++ b/ProtocolLib/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/ProtocolLib/Java.xml b/ProtocolLib/Java.xml new file mode 100644 index 00000000..33c14105 --- /dev/null +++ b/ProtocolLib/Java.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/ProtocolLib/lib/cglib-nodep-2.2.3.jar b/ProtocolLib/lib/cglib-nodep-2.2.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..35d6d7c3a7ca43f0ae689b7c3a6dc23d634d8261 GIT binary patch literal 322553 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

t5F98xhQSCAl$ZNh@m^~%^&qm(I46;{T8pF zPf1ws3n_Q|@CODH1Ohh&Iq=0gd{4lYitP3D!rY^D160n)aP)c-ESs;SS8YYojDfT7 zpgDcVDDHCtd^|&c6M^oZmYUW`-O~nwkW-3r8WWjS7vnr1D1J<$4f~!z;-M9CY-zJa z%r`_S@aT@@DBv8vD1GqyxQE0Y6d@w;KEn2-p*BR}fzlb=6vK8-o;Cu3oH;&cK58JS z-B)Cw`jS7TxYi^O`FegOJkj5qaUL%3oGmaph*0fUi;uM)#7 z%D&xdnopX;-1(XbHt>d;g>j}7Mbv0+w9n6sjE{*LAdlK%o>ye0&+%~Y?PM9E@9M}l zfx_<#PzBQ~=6)sfUje40Cm?kTfqPAU{jCo^yJ%MUDE3D6qc5fUo3cyn z?xUQ?^OCHvf7JK=4rH1|Qj|M`^$IO%xLMiC<>FHkR!XIYnQ8~kl{L+G>-uF2CboVudd~bf-=6&bljQzKGbX3l#@+GVxr=`5>HfRi4i{^y zf1*oB1pocvKXi22vYp>LI>fA}_@Od=JL@U}nB|0zs?FSWQgY za7|&Y7$nb!RD(_5M12eA z#NmK|sQ()n^S@rgf2a!o9m=R`{iB@wk_DE4?1zC?L8`(cB}v;W-cXgIcBjM=5HY&r z3n%A5M9#uQt!mv^*-`To)vJz}>u`RmwtC9{SzfuDjwvW@D&nI*WAL3+(*4rZ*h+&U15detsb;K2ZP^6nI8AuTVBkfCY*rc^1Zbb<)DZ zNqYti3CX+$ks_4XOb!7LeJ$O0)cxh5t{C%h0a-m;m9rFD(}BkXTM4shBq4;d?zdpD z=MvN7LEA#6)SIZ4t)`<*_udZ_jyw#PO1(b(i*eyPakgbtdY1K;dw4;PTczHnF$fqIU66uuaNlE${8(bF=rA&zn?Uc zE7|pO^L|cg|3o{jp#8E)ryt95Sy_OQJ|q}-0+CmFCYmjzK!QDx2Y~E}2Q_QUW|%hB z*2)nm{M?>kBpy@n#uEhy;j|WXu`09BR+o*uMTqI*DRgC*B`n5Yf-04s9E!6Sf{}x^ zj9NbBh&>w!M-NG`1v1aE@yZ@+c8j_NW34qHtv|_CbQU$EXC>phk&V@3tSPd#WN;oQ z5f^55WHjc$+C`b<4K{Le+MJQ@cpCBOl!AtqI zd7SRVu=Y@2-M0i_^uGvf9l>@J0v1wN;TAP*^K9^5V%)HgR4`)M>tQ^wt1IB?!=Q@K zeRWvPG##nJD0f^k49uO{7g#Q^Ud)RK5$5A0>w?Z0BHHrj4$l*n*=gT{56e;)PrV11 zktoIv+FY_}9D;~MIJE=>PWfy0dZ03$BK#@p3rzVejYMp!?m0y5#dO9Ewp@0Wiqhpa zTqQQ?+Kn*=d|X=B?Nw;Jq%(!QLG||Yu^wtwbUYZr?r0NnX>=MPN|P3$F{kI6tp#!v z@MqLC=_mHn%d1$lCEB)jv!d%BWO3({$(WRn_SSNW!l$iw!M{Q*hQOb|9Z!^Eqr2~s z>Q~v^jsyFeF#{B;PhPmcT2meSSyBB0V!)g~ZMA%7?S|rwPjY30hOlBSe&yN zMMlocwJ(4kgnJ05B5mN7N9MUwF)8@Fq&S#StcP6bs@Hp}Q*}yKF&bu<7L8(4D zLth}*(eSskP$&ArQByXT z$}hV`kKer(q55(uA0tC|$ZpR*RoVHSPaRtO z=EbdN=!ggQl-v7)3H>!A0;pM1{y|xOCaz*#t84heL({B+HE9Qv+>+63&3Qm$df5Wc z*pk_1f}n}jnC7Gr$&4^ZCVWLTu~~jLV8gbG`{mm)x%tW$atEY#7dO_*sE8+HaB?HX zQ)4)(_IyQbI$|?`D%JedHopzL~5M@#^V_Q zuaY2{X9W6p+;u)Ix7}8sOJE>)t(dQ5X==rMzk>+z?O&AQ>rs!-#or^L?r)PM;s3m; z|NB<1VxxvFg6c~~a}-QVzh4}p2%RR0ED5}!Nz;_vs!uwni5OMp(kLxRVC>)~Ft@vR zb4zW*+gCrjVV83ld+%=M3Ke$=bH-Mt{+qB@=?@#G zk{KrRCAqHFwwkcG7Z@$6HjV0ZVLlhuz4Lrq$1EYMy!xWfjN!=TWy!IUiV6}`=OPgX zdy;+!yc#qZS7NYm^{*8X7w+_+U`XJ@J2c4gnNKsnIGU9#W~Gf%GoSY>R5wtLjOwMI zK4q&`GY%?IZI?q3Jc34f4^*1+c_Hz^mA8cT!c1>aZnCPVwJ+p`uRAHZc=p7TF)TG4 zuJf7EYrCP)a8FUgL(c{t6BK?g%t!7+CLHi6`8qQNLHd1t560<;J2h_$x9_xEKa_*A zv3`<0cZ{=UI@*j_Qh4y|7&soBOL`N5_Qnau(OC>9yP4V8=4V1lL!X2S?{vr;yG;cK z-}*(#1^-Pt)T4AAVVq?G6_!1L?=Zycf+CLg*#E#BtXBWzQjR)w+VAA&qPI^NmESJa zu^2Vq*73!F|_ug2ewwp>X zIkkG^d#mhAf!)00nEO+s!%~**dkkqBua%-&rcfZIJiMxoKp1H^ue7Qh=OyG3qwj5&l!LM8kWDHmEIeY={u@B|q=-gU12v8z4wmRC@l1}UV~#dL zTiQ!r?X5^eN~*X3L-{KqqV%B6Cy)B3TbQ3+I)|vVsbrCN(XO9vFfFu&`Kh3&ZVJ&C zXq=_ZTfK$7U1zBrY8rs8jT4n`Rje{iW7&?Zhon~&D_uX8`t0hsnK#3RPZj8$zb&jdLT87P8x$ z&DrY*AuS+@xuYn6#W&(AkWY3(GC2as5lt{Mo!q)*GpNBDk{$IONka~hn+YPrCDkEB zsuxURuy}?+GKj2LL}U}TPa%(U!V<_h=D!Hm2W%jVKquKBpz7h7?C8@lZ&A)eko4_gl=RNMiMqw`I~A3FRLk_(3#SAnV$XWtE4D zOjHztn1~pbcQ`pEb+3OL8~xBDf_Yvv`}>AIWeeWZ{W$WmBXKi-6++11Xbir(OP=^4;r zvdUJ3vWdNBg~fn7D*lHMRF=t%KdhS*n7rzgnTA+|_>dYTZPFjF zaJH#{u|2i#x44rN-q=H9r%A${HrPVOABx14EE)!Sc2JX3Tj!~uD=~HbkYrhsg8Cv8 z?sDfS7D$?yBdD$L^1NsDpkV=;A>F+6M85sO95@lY9Duwp{N+`8kh z>{YK6*1<@WO3_%HYSeoUZ!+-o7M#8r%wj|E{$QiwLf56wmdg+T-Qjjb=5n0xj=DQL z{jlm@@S1GcLR}(f>=4WA0IODrZXNw3r0CbK%IKMg641Cyjigo}f-h!3B^V3)0r(P@ zzfAmZN~;B91=SpSf&>R6R5iG0b>ctfhRd0b<@i?VUExJ|vB&}q7#1ncY==4mRfFxo z`CaI*^*dmKzL3gCBkF%hO03p?wGe1J#0xyR7 zPr5fQXQGzH9>InCA-vjXVgx*xR^ig@PcZZgc7u4Sym z9Jw*o(`L(|CW_5A#JKE zm{*s!RtxrtJe8UbjeQLgiv|;6y((O;n``4MgTL1KG;&zRBqV)6Tcyf*oo85R!S&XU zpb8=evtP?l+aiJQ9`~5wUfO=`Nb$SqfLDaPZ;gF&Ag~yAaV@9fG0>>cTBlzeC#tZ) zy&V1+f7MmpZz|^an>6{S)MGVc2<9i>BoN^!7G6RNPuT2n^q{Cm)p^R`);76)0VwZA zdyUUv$ub;m(BEG{en0u>8F)*$>%YnvQJKMUnI%SM#~>nL_ECeW0|OTx4d61o;5?E9 zEHSwYOPEMT2tErgwv9kz%|$~~EZw(;AE1D(ZsZZ5i8B39Q8&8Pjb}QzXdJ!sXdhkE>X4T6g_*k*`Ve1v z#D6$IqMSua2D>g5NZK=NdRwc;TIlY+5AqeklBLoewu+jH5g;~w&Jf*l;rq2pY7!V2 zFo24wz^}EjuE>CSC(|wk?X4U+P(;N zqW6ZVOYw|5hSiw2P10E*?t^?Jx`?b_sbPr$GGfJh7 z1xi1FD{YBMQ_1l$12^)ec!?6@Ar7+v!4%ickG)~-KLPr7HC?P_Efkyg4wafR&APXa z!6<}7$iCe(tRmK{D$006Q;M@=Mik{Qsh%p>WpqzTo>D%=UkiNi4-^%32_IFcXG9%0K4Hn3{Sk1x;Er?yiZm(#bb z!2Gb=7d5XH3Gl0GW|N*Mj6k7S1`V3^IzYj8xpz;%`}v-EBVfiShz z)lc9&Dn+jcD=OmL))zU1*apK^-z#_(NsgxT25b`kgX8x#Kbj$}9CCTf?=!N5?8OO6mE{Z-{`%5t!(-2r z-=F`!x5W^HM0fG*lcs<@mm0&tCa8^e(6V5w&o6q&81BXVpzsXG`C&3n4y;C^0F2Gd zRZ+{|d&-Q_E4@X$2|;SgcFNF|J*R9ZR*UJCA)X3ncyFN4K^fA-UaY&dZbnW01mO>9 z0(OO(NC_p2_;!o8X_Rak^aX>4Xn( z$jJOj0#7o?io$zbsI0zI{d`?{Wg4=3y}@>gHOV9w+*wZ&zeY~EctlqX(3%ozPRQn5 zKmyUsPs}0C&WnCWQwU**vB%d;!~V7fzx}gi2IICym7D2}t~ZuW@mD8^BR2r*@s<}Y zR0x{0)nBhvqq#d(LJaV;STc|Rna{}_@~@BhI_nkd=SL( z-%yh?--H}+^X>QmF1=;(r?GBG)rNM6MTC8Ow>v4qU4f512V|^!mBi^#Dj~jxbuB_I z#;Dx7pty$A%0C`IWmB0#Z!KR0a45e#z3dOEmm4Yofqrw7i`AaK|EoQn3waD97Ms-=O7{gD#ZX1WPH^dSqB=>c< zGLV6d^%}3iRmBK~0xd7d7gJ9I)s^2WY5DHtDXx6a$~9_vUX4y;6K>AS;U7?1W!D84BD~W5FHl)^vZ?Y@O zU`vq7jySs0;x8_2)278CUf0Np8o&9{zUm)36I^*EB3T^tM)U}$cGzNLl4jIz8?*HoNxq*trWUQ>U2w=6l?Qy*ERz3D z3RrB_A7C=j-w{M>)<~)w(=Re(GFZF%oFyLbWD0oo6J!xH%RV> z74~$d?c8!D3#R26=?G_Kp_$TW%k3U#5bCn6Z*$x{Lk}M`^s;g@9(ggt5iRxn7&|e@ z9c7x$J@PlGCr@@ygo7Z$GnqQ1i1fMB3;~uKU&-q&5XQHWC(a0w1z8H`jF>%rPPsSX zI@y|$qiLI_rtw*vo~3MwK*r05H#as)596E=ky<0`%Im}`(+>>F)buqW`Rhw!*O`sK z*5+!@t+v)>XSBQaoxM~tUoE54YZhrqJGJS)m9wlnK$M_z45<+9&T$ z##^4ltQ_qIHFK=HYg@_h`B}0~h&*_CI+tfPW*{pD#mqdWpJQM!^qvqp>Oc&$G^QRa z&=+ce6sa5*N{gw;&5aVQ%S~QTnekga7OAS-2ucNx-61mHG)m;fd$kz$%xk)+HX{UD zm8=NUpzIlolHpeNGlwT(%Rz*D!FVtYc{s~+RbkWy?qY3DfuAwMJu*mXl&R=)<*yo= z#D@SZRQoG}0;Z&5_%G_8VaE8i-f=r9rnUvSL^QbIQyMJxKX;(6=vq%+%%hW2c8_gC zA@1Dmh)`&CJP+*c&%+41=Qq9xP9uEIpsg1;INz?B9_O6z!k;DiU<3_Qs$}eLppprD zZL<$UmfLuQ*586BHb=lxX6rrur$@X`r#3CuMhAPcnh3J>Dr`QM8Q<+ zLR2E=#4XB8k1#!^-(s%t-TQ8z5NdOT6?ej_5qFoyQ%+AL0GCPM7s?#dD~an;oE|ujRXY5@PDr*2^$+1X9GiPlmCBA_pcKwH4SI2WwhUYux;~g(YLrJO0wG>%?F|N4-QQSNj!C3U(b#~zW1EQ*>*9zzc0;JKp74?d3?m% zL5Y%SgBDf{j1Ce1Wk(^G;21 zgL+K@!z)s9kSmIwvM;c@ZDP@xQRxWbrP1+!axU~S)=Q2#DjkFFZ_C~6emrd!In`<+2j@OQ*9#ST%O?S2=2D>SIP zYHTjQN>|P4n88-archZwu0hqHCzuO)w8J7_I+LSCcPq0MtOPizW>j9OxXV=l)X#I! z6=|*2$pLeIo*++_h2;`jxYUg{1H4n|tdA|vH2|&V+~J0*Y1$CGQDnddRo%wCRO}kl zcUtRS<$&jL#F$!e}nZE%pv&QY?70i+$N8tu# zcZyN@*veCa$$UZ~iqTXi@7v`$3^T7TYD0&ib#sdGO95@r`y5?exq8*k@6W=N3(1l{ zzQxlki12wr1U$H;$3qMW6ZIw>6m^y_kNqK~mI?k>LC4gIS#5I_BN$SXZ9MOvtPbp$3tzad`7-Y^k z>Zdc=VYaYpspFq`SL{dZom%c+p&o+~2P77jaxjyx#Z$6k5*HP2|Hu3QP^iV!6)X2pm5_;^8Kj>Q5XA-q$b<6N){n^X;#G=j%4a9p)TV*hGrh( zs|l#*Eyx;6wV}>nbTm0@WK*)t_hKsOCZU1Q@Gfl5jkyV4uv_9a3;Q~E~_Qzvsl&v=UN zDVJN>*cPufH`O0WKEBl>@K~Atw6r|;T=tWRIlUWWvlu23wYqbFM&I20G@G%sA)yAXq0_XQhP474*k{YEV=idLOFImRNK1_H$Pe?tit^bt!r)Z*f{{%mF-M|=HmJaB=F=~y-!~4i35KA#xPL04Gq%u6q9(fVr9dSxwYmgb zFv~~GU(R4RpPFM%?DQRhz1r$|`Q)xg6p1rw6h!8NC_YCte)NuP7xnEA)7(Mi+dV)r zc7H(21JA6WXN0FgL9d7$K`Z)X=`f4!Ha{i8Jh;{yI<{3=lzPJFd|0oCSROY_RoCmA zuSs6^uU2yJAYDU+b9`RMB!<3LQqW^b8+~XjlLH_6^S3+y#|Nl+*qaoP^!`IU{qMWv zby`20iNoUcHNF9Lo={D1++F^-RC{XO5%#mXi?v^N9!9-;u`s-%X4B?-xZc>`{{iF` zW9G0^SSz;o(Cd{?#~0(}1L$WFy6mCG2jtHZE*zei+&$pK4+^qd=-m(9u$+>E{!YSQ z@I+g)_;@Qk%uNwZt4u9eF0({TT&;=rnYR{7AJZ7`UT_=rlK3%j4UFNW}qC?A_yvw*>n6 zFqxjUd#nPv7ejsfqBC@1XJ~W8uH@c%gRJ{ARx*Y`gY52Is!Y{C2WClH$?q9fZIAvV z>ULVL4ah`(#9KXh@9+P1^UgoLCM{Pr)IZiY#c%7|e-i}zU;2Z8>o$Xxt&}!JQF&p8 zYN`0Q_%nbAi-=gs`a_E3%r&iHSgaj=vCJe7Ah^3-P+!FMbYCWbv$wGr|6Tx__4K(O#db#<({L315_7d~z3UJ&!?R z;k7^nruMMWScTy#uCH}jnA{AxL7}SGq%o&XUbq+aMiT_l%O0+g zn}JnsDfy)Ke(>E?+`kJOFZN37|IlN6AnKqS3BYFATiVe;8 z3t0?5g*)V7;MTL%!0RvSP&^`8aLjlBL%y=ts${*Cda zmF2jS#gEZOj?nE+JnpCJEn!VWl%Mr?-yC3a-94C#S~NWOw2u)oxlp+e+8MH4*lhl;C-xejz~ z6yXgwcZlB)H_!FvBIK--vxMUTZvcSpUAW;R2{j@DOMpudSP&O0=)OilKps~~xLzDT z?MmVscuHN^Dyl`M3U`m10eQoK0-*w9k`ah9DiDz;>TZ+h5puqPWN%)7#NNvB2|UBF zX_-g#=Y9>E0XP&h2t5b5A$~r}#Jh$hNGR1Q>kNc$ede3I0oE}#xM?nt?l8pEKcq(3 z`H}cI_K5`@==ZHWQip`7BmiE*mL(gJ>9{Fe7ywz5Mb9XNupHVLxKRTTzM6QV1;tgHBEs8Q6hz7&|JqR}D$^qHW8s&a-n z>E6ERHgfu!N7>_&E8pTMmq9YbwUYVvjiOUtspmPx3+M5D=x+sOsa7@S;wOwAOPUf} zG)pskULf3bvORiwW+i01U=4a(qVX>FK z`X(>_k9fuZsScFvTpW!|{_Si@R+y9>_%4RQ$^a2W3clO)HXvzp?`jsZkRh>v4tYkp zQkS6qg$&o*UTs8VneX#_!d**R{Z!D5$qesh%V~DX+qROk7DmL*JsQGw$@J6spvouQrw5Ep9&-{1UlvLm{I4mLz$ky9SL!i)wke@;@gl%_pfBZ|M30({llsM@9FT6 zporjz1ITI8z{FbpPzxadbQvP#6!3GV^sXTPaoB7RgEP~}rVT|cwBZHC&iMo2iIgA! zDWoM$OUk!gpn7RTrTBfv@_qM3m#ncX=<$7Q>;1a>Wb1F%L$1@!@ugR6HYkG<hh@F_xVeM=I8{t2GGwXcGAsnk`Zg48UTY(JsX2To(ag_PR%>OU z3=~dak##O66I|fKs;8MGDzJ~hVa8^<6)c2u*)~we=$>D8a|?}GV;J_!s!Ph-&NeFD z{01&1GRMF(6U)?Us>?OVfNZ92OCfDIHq}wVe#q6fB3~Js9XfgK>~25DNiHW$k*#@s zDUOXUB6O%w3RPo5)y#$f(-1`!$>rdw5t9n>g26%H5-@~v1UqYHU-(-akEP$l_hm0=mZVWBe~Y~h_m|x101O> zte63wHHC@u`*Iu>4Y?_#^o?I@Q{P1NheujC^%lTC-m!4qHfr>^fqgYvp-uXEhg^S^ zEePeYFYj~A98RLlvC~*w%%johJFdN7y?s&;xlx042{4ayMmwHjZxm4f1p+MOwfd4U znMf8dNzaa6sF=UD3|ze9i>_hY3Mo~zrRcw3ek%>`NuOV-0wea}QXwib=@6~#OxsPF zek~f!LW0n28#O3zu>kEK99U}UF#->+p+;q2D62ovCvi1o>2Det2FqcnN(K`K>uAIw z{Plb?)ci+15P^x3*tF`tz(<#6j6tLiX(Fc_%C@8e+rIE|Lxx0sBMGHymlHO=kHwDd zcfuthyP)}$7ziMeP!u#{u?aZ>#o(SMzQ3{lQ#6|q5Y4El0@II;8K-DfsvgWvOK!4H zX+D#bDQ&3NAbH}{xjepM{!)|Jai6IKp|P-n`K2%25bCv?Bk|h^0)v)5J5yc#5lB)N;?~ewCO?35+7#_Lraz0p@YDgFemZM$^ zpOsI6oN`P@)?&A1ry4WUSofm#?+d$35Hjh!_3$v?>Q^_F=DHIBbDLmdp+PA?aZB_i z9CS6JK&fV&fV=MRhITcI^>1N9UtY2~Gw&stzaG)`5BIsBBt~lH1e7nHURBr-x-_E4 zh-AM;^u12#vtTVoV5!JNC#qV;`_^EspAV>+*ifp~A?O{}PmUdhgb5QDhrAq5Hs~7$ z=7jGm*6HP>VLEy8`H1!Z;Qap>d#B*q0&QC~wr$(CZQHhO+qUf$Co6VVY}>Z8f|q^v zdH3w2TlZts{F_yyMrZ52x0c@YJJkwJqvV_*`9+Y2B>BZ~oATYvbNN-hN|s8O!rnX_ zg@;HuD>=c{Fhy0@U<7Xj5%aycQLbA*?9~G+P-*jAgqu3uB?|M)s9Ja`2!VXIvH&=~ z0R)B!HpfGUJd>~H9P~;led9jqDSC?|^4f2zH&@gBv)%tkT{c?;?cfJ-$E*LVcV+_yv;%3u3kgJ^yKBMk4_$$$1qgqx{xrn()DXm74S=KL zwCG7%=hEwHCf5@(*OPNF%nnrFYbp*3UZpe(|TjmTf_7sohw`^jRGL~4k)q0m}}Qbwio+A>5P|eDQ-nwVHM{`XO#a#`~er+ihIBA z4fRD|mE0otY@2){VS4jGwCkp7m@__%)_ij%!yO4w%~*qunirpoHHlvifw z@i-(itSX)5%BBk?bA?^kvACeezzZUKryd``ka#CE;fd|epPN!oap!L`30+D;W*L}9 zc0ihGh({B9fiWo`h?oAd@gXEcVhY$5UvF^UBT5r& z(8HRb`}0S|Yle@PhgaDYD2z!ZV^wW^bcYvqq!+FaX2xHXnE_FEx>P*ht+_$-SwhJ# zk6Jt_URsRWmK!8vDZO>(_xiMCU)&hjNme|xYc^*sw`W}CC+GUO^~}a~n&@)|{$0N_ zUBjIZ^?eF`ao@ezD$TTHo&h=OLwyxXy5-dN92R`vMSz|wt|<;zj47t* zXPgww-lEF~*0CLBpR*8X&Mh|Kv(+Fmnaj}E_truy3D5<>F_ZGX?B>LE@WA2C*b4o8 z!hLQ1FiLaZ1L(y&9qPxak&W`e8R-K|k)XOBHi<88W8*>k^K{76xDTL{x9P^?1?9e+ z@??;|wSDq#oZdC;HE2g*pN%=+eBei?Y z>&E_aia48Y|0c=PNYTEmfqcd)*wgzD?XF`T$5_i2&yzgjN-_?wtXdx7L7ot5o)~Xl z|I{hrxp}6Pxg#~=^?vS~9Z&pUhd4j)z&!8B9`D5GoKeIs8Ed`0D)qO&SldGv&0j!k z?_u?KKpc5|5BGBH$vyWEQ0&osS+Q+r#qJUBM4HpuRE$04%(}a@aUa4b-cBJsZ{>ND zOp@kjYs21R=$9tA%q@YO4pn z{|j@uhfaDH>`%+_`qO^m{*Ps=kd3{u^}j<`in{X1f+)NTzi2PeELsGhTeLye>{34g zG4NSf87)~F${^zxt`yMAI?cE-KGl;VNU~0|;lC&ja<{|~s(gRHOy_z}^Ew}&{G#6h zxI7>n^rA>%=e_@EfCXscf4d#|v2o)5`gg zbYxaLZB$5Cb9A<&=WxWCCgUuu^YEnfYNiy$nC@>B^_=fbbQ@KK5HOpjq~F?HB5jLG z_Jqdm9Jn`?3gQNgYPq}Qyt*So9K6ymH<{-82?dha&qsAA6}OhZoV5{!^U*$Z;5=}z z3Q;Ru3^k8I3SAtzFrqvc8K0*t&%;duP(_oo=m47IkI*Wn&8CuU$vNP~S7^g*xq6EH z!oTRF03Th#q($1D8%EIE7I4}VN-7JG| zeWg!^+1_Ga|8OJ}D>4!~o$f<%i~mFn?e5So66{1rYd8V{AO3D-fSM~O+cCC z3h(H3tBwBZ6`eiRU_upidhg}SI?F?Sl8uM&&fZLjR7}=|6TeEZ^r2)M#^-TMX)_Wg zjCM+3<8NooNZz!>U1QALGkLJsJd`wwoidC3j*G*GV|5)yc5n^GHn2Y#8^9)0HZ}n{ zzl&h&zakl!AA5yY({I}Yvkz _#NTZ1CE|d};5isxtKx-aGRiJk*4J+^NjsAkM@`E-2-}nYz?AS zB1_Nq%V2Qf`I}*mL@z6fRxdWCv5C^oco2lNe?th~oA*4-{?|s&>tqd$8N|_sZ#MpL zB7w=Iz}Y)B-on>+j_vVvg+%5`h?+6hZ{PUby7}>;vF8ao!&=7NBf@YYKuZ)}lY}Ya zP$WWIS!A{H_6qxkv&Glzy=yt5!+4tx@(~)I4G5qM26m)_IK(}2AW)gTM%-|tieG1f zCB&@@5H$?QH9^vddeutmT zb<7-K8Wr!lM>}rV)rzJl9?*z=fPn_k=cL>37r9i*vm>!e?-L2SO)woZjo%8uZZMAX zVOKW-yji;|wZb&tNwij*QT$xdwj|OSa3;4oI^LYM_c=xO;4nRoy2u`;`UPrMsssP^ zFS+XCpe14g5P_Sgq2`Ka$wjw%f*h$GtIV>3F=57k~&FWg8Y9m~rxc zX$d%oYTVCJXi{|#sW zJQ3nV;+lX5z9*^P63ifHa@$Hh@6uM@oF-YC1&(-ZZ#XROBr#4boYA4#dZ(BJB_!vr zqP1p{I5`CFCsMWO0jUmSlT6E!t>h|pt#dE7CI{J}1=pq&WeIon8)NH_KC zY=I1m3JJf{mvtsgqG7X5d7(GC%t-ZkqRiEWaTL?*=n4C5GT#LKX%sj;tdYCf?z|1j}@Z@0$wp_?_%=9w&?_^invv{S)Kjwj4U)*aM#B@0i5tz`F7k?OAe$_#Ybq+l%Z3+qSE?4->|SC zR1`63WgV!ga|vS!2U8FNVgSq}C25PPRGW$1W}ngVP9Gr}7+KEIgY=1Eo|g;qyE~<| zwzmvo9Nr7h&GaBofmo^`h_?kCLcXk`P0KK+a>#isz;5>Dc`li4+yPO`8z#J>K?$`v z%aUpd3}IE0*bptz7vCr<4#A5tEi$iJ>bDLPQZiaa>BO`Ow4bLONoti*OF!WyiQyN; z0qgoL7-SbI5A5&lDJ(|_8;Ns!D)Qye`3Xiv%e zqzQ>JoBK}ng34$G;xkz{(>?b`%=IC%pb3lw0#{32bN$+I*IYsvrGeSFY>X0SQ7f#p z1z+*3?c@&l67N)$Uy94(F}ujqd(3rv(004j$G5P2J;>m^K^@E0L&Rq3NF6YgBQ+RG zBMnlzLMDig!fc*hjdS^WgG+yryN3?P;G^=BG!=8obT?yxU|}s@LH~3113P*(WdG3` zTEO`qwjBRkwe?Sn@793y$u`CH+h$prx7S^93$EdAWNKyUUhQynv0)gG`_lorwd9z> z^0{tWqA!&c2MdU*2&mWx4IWW&dZ;im=ThoaX%qC~yA#E}9~uS0ck|aza-BpM@bmZQ zyYI~l-uJ^BzI~qG*`7EcOEfa*v9?(U>Cy_)Rs5)zR#9Zh+B{x-iIO$A(OGlmqX5KY zc0G9#)~xpOqZrsy8dG5A0X*wX++`#LNW7faTt^1x4Xm~=B>X1Of>Sj$nHTlh#Fxy%Ca}eiT0e zW5LXdr0i_jc1IhWT!I3PA1yKiIV)0&k6chlcT9fnpsEvPR|QzD4$sGcz|=P$GBgls z_^GI1CIw1)yr>{wGCmorwF#vR#2Ijw2_nU7zS5>$n9QDj(WrS(^awg1{Z5`lN3Pf* zW9W2vjw$Tn!%QguTMrg1vLi;nezx~#x4`lViUmv>fhucWrD9&ICOKpoS_SR;E}-w3 zWUAkT#7Zg2z}uUVFo^>i+t&k^i(*2Go(SlGaSbU?1mYzZBOb+~ zHcF06y{D5jr)|-QzxCL_$!M_L^}GfOzn}lW2g;TTAEHjCBnW2xH6oc{gc#Sa({LdR zOF}A>mNF=12_?KtM4>YjN?x1mi7hezR&^C|wy%4Gb-1UJmJCj5S}Tz=hF?O)d#q znKf%r;h=_if)BfJ$MOKLOOEp;S2on^b>Ojk7T-^*{q1JIh$FK=ho?jD&_yQ%s0jny zph94F6**+w9oQqnL_jSfAbC9;8*{G&SYvd|%eNWuk~U;p7vOp8S62S~ggt0ZbH3SV zCf)8kcsyn9c?SqgZWU`s26*n!%;H`x!-4;36nWS&8lLUIJt$Fr2dJ6_+6q1>PFs>Z zGKQkZaBJuzGVW<^IEiBSv}+uKPMg{O=W_Y^s4?S6!4xh zD?hP1-!xaT+M3phKZcYkEgnMUq=P3?(wYKKALDkvGH9Uvw|N_;EPgkGpB~XMbO+qo z$6wM+fBS)SSCTx-vZAq70#wFZ)$aQi8@BU$L{#`M_@-?Y-qJw(-Ryao9V*>mB(&V0 zokH*);S<-e7557Zrd!@MMql(D^KC|Yyr>~%P{M3h^yDG{XQl1}O#Pw4DT)qzDYh8FTjfE%xonr$D_9q$9_Vkv zjANo5w-EHiy0=l6%_{QyGSxBHN}66q(MHIo11v8iN|s9*;bnbxU&lR4PvYl9IMS7C z%(mF_N-OT?Ow8AHyEpQk|WEuGy)Y`;*bev!|6s*lpt;aKnTt$}h6_ zy|HGe*p|FRx^Wp?g^k*E#Yb*DM3{9Jp|_0FV=_wMn-d|nzd z4h#EOkG{mrw}tg9dJLY}M$=4bZA8Y9kU1CG;F9z3D2+J0OZ(v}`NiaE%BgOV*d4%^NU8WBk`sj{B`H9ulzzg4LgbYro%`GzZSDdIOFcAQg!AA3Uq$j-cbO zIw0sLK2BnC=Hv9GGPd+B~M+k1Mo)z7{s1ILWbNyB}5p(!sR1Y=vxz(Mf3&??$ zPxt8HKI??*#S)+UZunv_oyvD;#TwdR3SqVr*jG8Vf^zzk+GAc3tz0<8;aEF>>{a6A z_GLYqg!GWq_i4uqBz1;W*=Otrw11x~zE6|03F@LNZY0kJKFmf!v>E_tdxCC?!O^U? z;$9QsjxkEj)$xY7UyVL8ZqBMcT_bkgFh=z}LM$tOW_L8Yt;=`f4A5e3ie0GqT7bAC zfD|f}re~{1!0<`gIIMbMpx%?3Gq;N?QMo9(QOzd?E5($5y3TdOf@s6AS4Ax)CW( z_{%}d4zbM4E-&rAhAZd|$wX6vS5`tXkRC~a?fl#toB0*$yN51Ig~4|tmd*SC_*D>$ ze=UBBO~ZaJi*%wNPw^Nn;|TrLGU( zbD&aYO^i6G{&5$}=v%8!FMg_P$$mJt#1|U)uUgS38`h(njyUtSgz$D0wquMcaw3~$`&hQSd2TmT_3I>m^imujEzO7yF z1w+=SkLm5e6o)em{qg1t(w4ZoZ3Wsar?W`JC<mNCGqCK4GtSu_+CFYuO8SVal&@tzH1GVx2h$UVUd{{A>aFSEs= zXeTf{b4v^(IG>QVO5}Oaxi&4Rox(bP*r+GKbfb^eY-%kRxls#}jgP5UkcjmVP4;OE ziUO3kS007z`kV&{?E#EBZCqhDR?5)_6^Mwf*yPMcJ>$)IKv{b7t_v-oVzUfQ!95(Q zbSf3RywfwokBrM=dHab`k>rFcsw{0RFS!bLTV-QuV`fX-lGNhcR``%nB4WQ#+vJ#I zPBOKev(vC;T++{roO3!=DMk>due+C8)Nd7a#+S z3p=IuqOW#=OKL0qf?OJhqFfllozICT7b#3DAR`x)l?%$s0b%8Yv~ogP+||sQNd?bz zdT^3VZ=yz7&aHw@&5eP7&o}I)e!SrSkH+I4E3f;K%+NJIV}i?{=l=q`{huwhf3_Z~ za)Li>buc-L>sG2iwCo=9(l3B`qTLX9A=_=zG}`BC9jZRr;P|`6L$#p80up4IlZS5| z`~X83NM&KxhVeqCKO*B))M(X0TAikYsWlT+Ac!NsyQCB)k|TYynyQ3dAd>yfHWMI< zYjAJPr8B17{qg4Ww4z0{ucp(Yha^8?mf43-w9?5$;t_lclcV5{N|n0iK*2%a`LYP| z5&AwO{}Aph^-Kg_@Ve~$=l6xahuS*&ftXBwASS~9aXj*GAj5y)3ZaU!|G*V|lj*S! z{1D!CwX#|jxDi`GMv3TB6No~cB$j}4maoay#v7uq2=3HhVLAIsC2$aO5?&P}G&iUe zs*orj+|0ML+nB%Z9v;vEeijEW5+}P{c0qrHEA$Y^=ec1-v)qaWZ2}-3%=c?=g%Dx8 z)4wudn1EFWE=eu*S0H1{sg%~3g_a!UZCDI6D*8zl8xy4Pnakxn0>CqGG)Ms5^Nfe+ke?F_C&}p35=0U?W`S{Pp~5+-n-77 z>Eb^2`I-)n#DqejWjfj#15dDB8}$!BsX?M3XMMX7We_LE!5t`D8UxEtZ6BJTy)=o4 z3J(Cue`>3lOo*RYb0Hb0*%gj}`4gmM?8j_57{YAF(Jro9o=Uf*>LbGGOzSF+})-b!1ihT?M z7+FI)VaPwgWyuuvVlNGx;i}!d^bzmoy7Cb|>gH>vuU~wNf*J%}E=!-52JLiNE_dBL z(DU}Jopy}gncYWhUGomlb^krSLHmi94xD+__3(L?nmNgDW_5@eet_oQrPlj*ulHRX zCpSm+`(K*zfA~Zc6{Th64-m!r!(;g0lnef&8J9D(HB~Y-H2D{`BISP{r_IxCp;d$i zsR9NP*#^=T5Jb&ofF+NViPf{tm7lp$2&dULb=vN3>F-C+koocN{*2VX5BL>t;6gN{ zfU++)ncc55oo}`}`M-U*ff7c2!!Wfy!a9vJV5OH~n$94K4IEc!AAB1~J#;zFOkraT zyQmX7|BgDwUvwQoiVG(g9>Os9j&kShO%EewZ#KZO!TwB|4A!!^ZLD%BU2$QXc4|@$JByZB zvw{J}n4b&xfKePGf*|OhJ-L!fH*9r@Y*kJR3?>a5gKowU!o_DwVIJOh>_BV79%((1 z=xlJroVn0T*Ej#DQ6FRln?j_G&JHqUQKm5Qu4LToYmd9gFu=I9%MZ(j5!Cy|Ov3!l zn7{NKB01%YI>=&Hlp&NQcv42G!`|H`VyiJ@LO<8Ctyo}V_j4=>f(b@;MymvgyVq_d zH!zCzXlc_C8dlkcgGHv!W^>(wyLaFw&0&gKBb^=QAMPcH4wJti0=2`}+^xGOnM?vT z)sbY8wOQpPexF6E_X<6zAh}+&x%~_BWT@DleIt%CPr@IWdcD;_rDb3kNmd#EbATrA zHXQmfx!)h?5zZjtxjF=Ij!%LuEBiZ!`gdqNhTpHCWeZ%@e#IDq$_mB%7{oieJqAsK zxaDezT%G4=kiTPUPWTL680`CR@);jdYXEv>Li`NpoyvuD{tmLzR+YDN+A>uO4occ* zP#(n%?*9J%g3o^~wX{hZBUqd=!jC6%$u#wk}l|6=c=hE6t~q8^qm|K$`rS3y@A=x3h1^6ROZhMD@JutLDw0htJ*7@ZMf z2po22)OJ47mCbEsHh)QZR+zs4A9YJNv;;5Zn&D+S$9rbe`Q+i^6IcNCZwNH4?}9f= zZD8$t*-`tv&Fa9zx)BMt5|6}738jwrdJaV|XTxFBFC5zdh*I)9A{p(|z%@*3{n$ex zJ}HV1uX3zKXo| zX_YVJ*$I6p5?61!eC3nh0&0N4G{G{kO^!arVb@=4$SQ}{9zYFf6jU$ zaM(DmZ{1D(2!!KZze{OM(tK7chR5B`9V!cAs)f&UJd+w^CL zesAw507INPOmOQS^>$j(3QbehX`D61MB1?@^?F@{l|^IexY2-4EkR!6dD zs-C%qV%<^EM8ZD(&9eT9gj6SNBtNnph>R`_Lm##a#N4%^lA=|ZUzFnvld!jon8KGA;8SzKS9PvYSYVg6zP~nD6xI2B(Ke-aVF-(sk9i6=mY) zTjWH@BDXVaY%(*CxNQ}AbHHW|c?P`@i0+t7>8R)o5_{HO4oE3Z)lx?SUJ#myFASRu z1y9SMF$_BP&BO$w1g~&6F@k9`C!B)`8nd+yDyDDzhfsT#lhFvb5yzfuYa}z4OLMH& z!p^d_R+tz4p@qV%w#KIRZC34sNjlv1pSFYSuIHvxYtF6*zcG0d##?RMyE66+6S{^^ zXF?0v>!sXnLuRE#{s4Vu6{Uh&d|^})cSPXvdvU`s4?NbDF`1mYoe#*%Q&p+ccR zz&}I1(Vs@j;ju|VGz9|AJxOSXbV;s5SjHlV<+BspXB!=;f;3?q^M*Mu_e2^Di9_(t!x&Zp zTJVs_>5~ro3v7hX=>3P8+j%RN{6iDSxqQv^xAXZUh)^hQ@hfDLxNH~Syx%yp%VBG{3B71guh7tqj&}S310t~;?>moha7<9|4=Ra{t!q1gKC*IYY1Zw zTtfrGD%m@rlmG-2TDp3oAuPlpP)Fq>D-{0rhie%`us?JSH*78Q?|~OELZLi{bzLYY zL@Jslk&0%62HHFZn{|&24G)50#zZno=wjt68E5r+urP*Cj-oL^%vY(W17sX&NZzq? zjVx`8(SS?qjt@G`aW4|#YU-%e9ToMZHiq@o688?MmPIk<4`Uj{EJgRqH9<2wfaZ0- z`zQH-_WZ_mzlF^o&rkpHe4_t7Q2*Qe{?qA0RemZGMFifq6uZtEG%W!|fj%Hw3+Nzy z6h#V^xplI%1Qx!8D<|!=6y2sy)m!+ts00eDqMppx;uz<2tE=$(vFoc`PUq{%%-^4H z7Z2(Hjy#4KEbYnl(vY<}bJ37f%^pOminiGsGp~UlBeUJrJ!;6POBCcz!@6~xNL&~} zt|~eJ7-G{#QSCN-VQ}yL1f}W9*uT+1!x|<%4JE@MWi^OGVpdBdqGKRTN)X3plPk$D z-YHhwDzH16M8w67v!UpAi(u%3VD!wz+c3jsCIt{I(A06K88Ce_EzyWEtyw7{1mOCD z`NHUedo|f@#93MDc9Fa~3HF$T%dIr2OmXalDdSwA%`oD>4yL)&>{77hK9o)B$4Cq_ zROm9*)V7M9#TiHru*53YxfrZFW>xj1vQ>?}ry6CX2VBohkTsWG(@!{mKxGQyqY=A!(;3{#-S5B68A zZr@Uy1r=>JxOQPUaHG6_W~Y0{w$H)lx1+{DLGpBHyGkWc&|1P-C?f2Uw>nYFt1D$| zRfE#5oOI&*&L^x|kNaKTdxS=rIAjC>?a`MI-THWQxvPQg&P%utcTgy^8IJ+<20Xa7 z7gsmuQ9fx)=fcF=(pah0p;dDWdshg=)Y0Fx)J@c8g~n;GMjKo1+Mu`$8?4Qm$RO3| zarQkBOl?#jXxFQN4nvI)pU&e_ZINHJg;N`|JY5-o>UR@XJFm{kS_Dq0wQ`DT1q_Tr zXEAtMi#VCAYj8yTDDOKE03I$&!z8Lx+wiJ0flw*}OOj&nr)cm9PBz!zlHma~ao`bL zfseiSw*~zXqoVO;`I2~-BZ-ba1apS%F5Jra}+_EiCj>pZq&|8YTcjmwDD~;F_k=FhA#_9iFwA-7Q{{QPr z$}Wa3|9)ZJ)?5LWMMq7Th$&5!BI0L6R*2U^X%DyDsgtE6vO%$IGYk zcT?>8KC?qrcm4Rg@l1K#xYQ{^*^fES={MXvoG+6%{QUla8b1?M%53RDYAm%%8mO?N z_RUp?=QlG^iLtFST}vrEaAS$wuJ+-hz^43`XgM6iupZ*R(3NBCWWz_9XAUD6MSf7> za#c27`9wsT6`+?Jk4!={EwmRNuryN$@1jMlMrx^6%4#}tiMF$}Dpb3PZujt<1Y!C( zV3}V=6~rCus%|t*UCK0GI!uqZZD{-{0}a3?HlnLSb&Q7#=Hrujm8Z>*nLMf~(}%1u z`#wO3IL+!w8b* z%rmSqMpS{)8OyW!}Jr%tTNOCf3kJ`*mmREn9omD2`atij^1S1E$Je)JZOsI*Jrj zow=7~ilFRski|uo1{o5Rl~dVu4bjGZXTPptLldFAzEe|Tc>n; zX|4@}xX=r4*u?y?AS>`;LvAc_eB@!Def{hCcYmQ8A)NHp%gllANB&&l_8t`RX$vdK zFEJF&tT0rO6SKx#RN`lN#(TUH6E*h~&G-Z7V(CMm4nVDyask)vXXTsEsSkZfSVFxe zDxp3Tml6l5Mv>16J`>jBA(Dx+w@PfVC9M`>ddm37N0=k70Jng74r4F%621K<6sWcb z15*1WTAIdNBi*zB#Cuyr`-r)e-LwM4v(0}aUE9d81;n$5_Y-}Fy9V3+4S-`b^=B56 zq`aH;ntAln{;@IvYO_WoKnwtIp$q`<^8;XK>O${qMsI9xV`)VH z&ri`I+$>21tA5S-QzuTdrD6b8LWiC(R2v=j+0VXA&Ux% zN|vc$3L9=zjOO|8dR8?stsuE66c)3CJ-I35cyleq4r`#k3T6!Kw}j#2~B@|vo$y0=q}k=jzNmPQkW+LV@#vbrLEwW-?5x@nV>>1UK` z>Qih>wUrgf(NI;p>PjBXpNfhqB$6svnsG0c^t!6OeKC}k#oFC{Ho-Vm>hy~H-xhkm ztq9Sx6>F;WriR&2tkH8PhasY<(P)p1z=K!R9PfMtm4bC6=Et6NI)F>DR6Alf&>YX) z?37En6{}QBwH39RbELTytOl@BNfNcXRteji>-DB3$2!QU0N%@IUcf&RL4#V;@L;=c zobB6vN0jtUjO#sH_%Gu@gdeKFbrxJd!&mIDZl|(4v=rt5fOA2P8?}8Csr1_^4{rcS z1qY?dm+SLpEFQqL%xhvoJ_46L$$Vp}bX<^VQB?G_wt5HW$QWE(Bp)irMd7qe=I>mD z$RvZxG79QQ3SB*EBFYg^-2w2IT%w|7-a87GC`+q4zRHP=`O-W7NVbqom3mH|Fi}{W z6!XJ;f$4eCblB`{%4fbu1CQ_7THS{NT84bqG7#>hk?D&M;lnUsTi|6z2@4)1%kjiP z>$%G}%8hm9upYT~v6LGYnTK~VFfHJlu|BiYLV~dej?GtEKN+nN$+T#6GqIhiU?o9H zvRTqv7&w+LR&JX*zX46f zUO`Drp&?CfPDZyZc7j$Xs%hy?IYB9fLqj>D?9x&hP2F8P4vNFmR&yMPV!NPy{vh?jnT2C7v>>$(uy zvRCG*HQ?$}Q3R_}?8A!6yqB5nI-TltvNw;F{M@L|s|v_)agys6ue5Omh(dd8Sao0V zCD$3xxX}7iGdevtaglEkSX5{&z0WR7p*;(A`;@1bB`v7i$x}sUpKfTn5O2YVHlma{ z0Jx6DECe7@b_W!*YT%npNe@H)(9dOEQRZIZE(J2|MoCvIyR)Cst&jQmf%~*N5^pM0 zT`MsAOBXc3`Z6g(fVr%l*<11;A9^V6CAtLnMq)E@1XkERFOwk z-O4))fZ>;bZy4u+;i}Pauo(BMmi0>M(4=-7z0{c5QLLKupcnPb<8^@hbm=8pTwl9} z7TI6)?=9Giyy&QJDh*9;0IoR!M8_=|C9DnIK29n#@CMhh;lQA(mb_{?Gf)i{Sgl^pS>GBnrFz3#mc=&w7lb`;0S3xF^)fzUl|yhR_!Pjj7Rajpi@PQ8ppo&_oh#UK<19cEy#I z;;1oJ=;NP1nOw^c>6 zQstACG7K^(gEAwJCECOf6X{)BXs!{-Vr@rbottSlrI_GlkpjwaL;xU}QPkXGzkzW* z{oMmmZjq2_ELPdYQW*w4+3jhh#2+utDo8M`Tq7njf|1`tD2h!rqKk zLAignbByqUQ#yxy9Ek+#cd*uXs{5>fdzw;(NKuVQvkTb~0ud6|%7m~eS>M?If+-!elvSXWGu%ilGFzeNYBd;%iVg}8Gi;O= zrHL;(f`CMdx$&22$mKKMp)w9yJb-Gg5iqZ%U~$s2Te8NAqs zVv&^7RpN^Q4e=^vNH_co5VXTGtVWwbU7thP@?z0EnYL!Vhm6u)9?31EnZUvV|NLQ= zM_GrsV&qR%H$j4aQQY0T)V0;8jjgC3>nX2EYV-~Pm)|voQc;wiYHpYX+=D}exCF=#l6oICf zA3ii#^B!OCsHLeE-IMK=^woE~OU9QbRrb`aZ8Ne?{Cuw^Za6BHY$O~nUn?aZyh;Ad zd}tg&iB+q3WL-E-#sQTK<)KXvinM(Imfk^1=%|2Wh9pm58JF*fFSK6($MeTW{Lz22 zBHm>6c1cWur#h};$Qd&t`VLTeVvABQK~)w2jo#mdT?T87(pO#pkC%-ajH z>m~EHwA(VB{V3ndjl4kiedCFyzeMUqD}!|xpvg2U+DAVA+relfWZ ziYOjCr=!UHNFu&~iH3*Eep9i*E!SX@hclIW3o2vqlO)k7BG;bZ#*9m``C$uRia@e& zhr~9Z&yFt?QJ6Lu-+- z?8bMp$UG~hucwuJ&qFvCSnWGYFglKe5sEWfuHw$Lg3Pcc2sK4XE@(`{TJad>Tb3il z-E?RYnJW^w4FwvU&Bguhl$A7d4#?>$4ezYATm|=m;&x4Z&~3`A%?YiBe?Mld0acRv_1umuqPcC3-AsW36_#`F z;W6Akvc2uRC!6veP={8QL(8OP1Lk1+QeBOnX|DyL(8W0TtDTHh93w|Pxes9-$|~u0 zP-+MBnbH*KUW@Pkw*L~=HRE6&`VUU#JxWJ%=(p>(Z_Ux>00amznQzrI0}^*O;kfun z{#_a@U$~)XZz0bwow4m#Bf459%l4?zdlhA$s(iM3jsc0!SXe;_QfF6P*VOIyiG`&R z-8{qj8P}aBE=p~T&3)@-^9N?|Gc)h_%OkM05C-CGSuf?{RtGBXQyQDTHby7nqK?Oh zHOhwwZ*u`zX?t~Rbz0qai%`mqB{x-}BF?JZ83rn z_XviQm#!M%+c~b_n1%4=~0<#N@lml zPnK*d-vwI1X`ZPrH#4fiQ6tslUyInLzR8O5hR*LLg zlFtzP+wL{hBDuC~=qp4zmVoegUWp2(5GINoRavTxkbc~gPN67Wy70!ryiuX>yUDa@ z+3(<{T4{4N&s@k%@WNN#f%~-NUSZb{FVfbf_D?G$+c)G>o4EoI%GD;&%N$4~0iP{V ze1vXQE7iHqG+hhVdiS{En{7eY{B>}pFF|BU3h}`;jnpE{dt8oIppUDL7xR_T@ufK@ zb$oKHh>x$97w|RG@kKgMJ~&rappUJV7u~{De<{#IQ_l~3e{6q;Su`J6GB4!guJeOA zciulAEz-kN=ZEV(I0I45lYV%;fc-dLh&;UmlTuGko_EYY#M3>EP%_nor*-pwo=18C zbYk-;QVD(@XvVABke@=Dk0_KXH=@L;Y7WDq zknM@QS6Ff)Go2%&vBe%*g$sFWUN*92RlqQB-&hbX@8tEifP4u3d(YPev(jy&7q);& z5y^ptn<8ee$QD|FWjJe5@`M)4w3uOS$zyPk*&%vBnc}k4h^gMrVSQ+0Z4!q4aanjQ zjx=Kai0uzo$7j_rf^Qu=(>Nk-X-p)d#vk$E_#|wCWfTUQID!xvyzmaY9d<$X=lAz6 zsW`q5W!)7@eI~m~^@1&iA{1{H!zL#CW~tfI5(;?>FZ-p8z@=%+|7SI?hN8o$vwbM;~r!^+b`&r(XwYtk)aO zoUm=~-7H*(D&pO&tqZr;lhw>q#tf_j7kj^hdjUMq@8JQVg4;`{3?n>O&*ufYU?f)N z(Xu3A_XXZGvvbO=u#4`>+q}=wE0aH0;TDQR7In%`&ps zQzbWz#7d+isgCdU$m5^5Jb&|Ib%8Y>JkmR}@hAq8c#|S78xwWe8msZ|c@=WJ?=A(s zB#5QqNN&}Nbkew^CKjT4w%hZcB_YnqJG`P*d26b7TC3tI<{f6Tp5gWhL}$5+l(rtWEw#!z z-11eq1>#w83W8yIT`W$K6}_-(c+pGIy-vl$qgkVy7Y7bJQ})@DSI3aMnC6f^s_swg zoW#*n59j21;zM*lNPbj(OqJ7b=-e6BfW%|MgPJWBy(s%nqVHF!3LYEh+3D`QBvkjG z0@5OkPf?o%?~Ta1qmrKAvJnj+yJ2g5xVGX`KlxsL0Ss>lhhoKd)A38m)@23Pf$d@c zmg03p-~s0bW886w;fPHjH^=9JoG(0*@)F}b)-arLCQ8plCq4=*%FstRJ{Dz&@uMxA zmG5hKLF)9FasP61pfb|R@vhR!5rH>*cINxF`|br5!x}u~fx5!3WWWN0bik_Pp9XZ$ zENIjfcacrWundQE0IRbj71&^xfWbfbbcKRZ4v%yotFt2+=r}^axIOSRjDivS^AFf7 z`JCpA#qc*?TczP2-2obCv;F)Z=k`#6)96(e9(gyZ4-s zK?NCm$tP-8OdBt&IGzLjOc+f~<}uK#U^=Zh?HYj%$1~w8$!xMqT*BXw^_QjLxGj;% zH;uq9xSMw($x8!bk8J#qcjP@E8<|%&i`kV`FYZ*w)s>H;4-w6;Sg8F{K7Y^Xv*P>1mzqSG3o1P%Wc@dCf$led(*1%6#*x zsLb*YL+o80+m9~AP^T|Q!kXtb1gc%P`}?3N1?TGJ?UN#(O_7MPwv(-=8CmMZGe=Rx zh|#v78jb2kb(7;$=CaY7764@=4gG9BKKe=aV@i4D_TvwMC65rx zo!HbT-Wt>oW?)AW#GlW9oFJ_z``(9PYm`>WLG~vPYkz@SeX=@NiU|9fKD$KiDHx|IF7W}&rh!nKtt-sq?cogkVkyK9hM&`hObduU_lwt z`esnN@$NGtKZL%2=z~D#bdv8`kE)z(@yJ<<9TeoPLtifDjZRRn(hg#pI-(tD*%B|N zp;_Q8!ZFH?v973hiXBI>LQhPrBwx#>k>~RZKGKJt&kew&1)S%}kLM}$Tbjc=97`JF z`^OwtK!R3C_1@Q}vR>wl*H&TKES$$|kddmLYj8=Kp|24Yksg?}P0Ts&fT7uWNZ0|T z>eHY^yf8@tWE;i+s|XS)4y1+~4FSQDbaoRNv0i@$dIG)ljdi}ATP2SX9OCWih7NUq zv9UG5fuk@f0s^6wX6W^6cXPPx9u@4Z!7eBSteZ?_R>%$?3%R@W#A8(HLRYfqLmm;w zJ2C6OIE=d#OJ@gAFT^dLst9w)C~T8pGeEbi)w(I8(8h*Il7MUSbW|s8T_OhLYKiGd z4T-Hegt*xUD1#6j8l{rTGq+dB%$=ugt%ktmG>j=slQ?5=pYB5w!^Wj+QZwO?yc&@g zePw~85YK9$iUV~2PTY5N&YVxn<)2^h@H0ZX0*vvtnsmT98I7V z53&4h4I1>W-8>f2mB;=$VaI6HCl`fW$s}h9LQpMb+9^anWMwKp5t5fjf7z1JW_~gvZ*cbEFQQM zC~Km(Du$?c8r@v^$>?O5(86dJd2s`%UHK-A0c6&!-P>2;9#e(u$5+1a;uQ*wi0Rdc zc1^nyy|mVPoye?x^l*sDzNdu=6f}M2I^jpj`MBGOb&H~8;%*#IFu*lr$jk10Oqk^4zsJ z{Bot*88uAr6RK?*Ke|xzX0IavF>x1Qj|Y)kL{*ZCYnE7C8UaImn_voqmiTvm_-|^x zys<7n?aA<~>!O^)j2iM)A^w7gyWR7C8Omc_mw1DDvI3oP^Zs3R-a!-aQx#&z(FEe@ zYHYBKY0-Ae8s|E_%)94Wt?%Ye!xI^h!sYtQPHBBca6Y{7LK?g*j$GTcK#KgyAhuI_sb&~7eoNgFE^xTnn?GUQ(q+`Vr~^y z%(U#uee^Z@>AbwY* zBsFhcWVYxaS-R9g?xsM+>f$|d9x=t1>hYj4GEA4vo)Srfd2{fj`uzxQP$NTg6>ef- z=O0_}ZodSxz~ipSNM=8}2yThs-4FzEMa2!DzJiBk`1VQGZ4fvCgz3B>Jt0u{e0B*{ z*~-VE;owgZB6~7BN5|4Etw2WZ{E2ODJ4#`YSY-`ZR?%#|)iZQAq{hud&VddW_30^S z$lSo08>Sg9bbqrMqn9l>6+;@yrt-5=79T@_fiFg0a8x?dz0rOia_8VS%uPX!-I=u2 zehH~R1PHcBV$m?tjLh3!DFi>mZf8mIs2$Q#X7Ril{_Z#Y4K&F}VP}nrJW1C5!maVqCgtNxpFRvKu0IGl!F)5@>a*wcl&CCC%WD0_0UBRBGSlN}^5D05;ilK)0qG zwz7&=f*7H0p&PyG;1le5GsPtF4twX0!b5nI$d7yRl<=U|>0OO%Ddj?O@0xul^ZZ5Y z_pUC#f9&Ju8OZQ5i1&w-Z}TaeNCJ5H7k-ysxueZ00(6Yr&EXF-kvtv=vQ!4(SQ}V~ zmq``BaiD?`(s;*DZjp4Kb5Ozf7r35x2emP9!=~(?zxpkCQg8;rQV?%9tD)F|VyCTd z?))roHu6{V0C@m4m<%0aJ7zaW{1tEKA1Xvc^1%Qa2X8HjK6>_NdJrA*3g z^nYW{{~qX{IrbdTgonp$$lbj4zYL^{T`9}ALbFHB?mLnX!vv+iulqc1PktN#bl(X; z2S@qz$H4}ROQpNv;4VQlae-r}jy2!zK+YQWeV;pWMcz+JvdKhw*xrD≠k%tX{hE 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

}YC(x|Y>cy=YIvng*b@QTyS6&!cl-fTFt} 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 z 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 literal 0 HcmV?d00001 diff --git a/ProtocolLib/src/com/comphenix/protocol/Application.java b/ProtocolLib/src/com/comphenix/protocol/Application.java new file mode 100644 index 00000000..e4c6ab64 --- /dev/null +++ b/ProtocolLib/src/com/comphenix/protocol/Application.java @@ -0,0 +1,8 @@ +package com.comphenix.protocol; + +public class Application { + public static void main(String[] args) { + // For now, though we might consider making a proper application + System.out.println("This is a Bukkit library. Place it in the plugin-folder and restart the server!"); + } +} diff --git a/ProtocolLib/src/com/comphenix/protocol/ProtocolLibrary.java b/ProtocolLib/src/com/comphenix/protocol/ProtocolLibrary.java new file mode 100644 index 00000000..3b2711c9 --- /dev/null +++ b/ProtocolLib/src/com/comphenix/protocol/ProtocolLibrary.java @@ -0,0 +1,63 @@ +package com.comphenix.protocol; + +import java.util.logging.Logger; + +import org.bukkit.Server; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; + +import com.comphenix.protocol.injector.PacketFilterManager; + +public class ProtocolLibrary extends JavaPlugin { + + // There should only be one protocol manager, so we'll make it static + private static PacketFilterManager protocolManager; + + // Error logger + private Logger logger; + + @Override + public void onLoad() { + logger = getLoggerSafely(); + protocolManager = new PacketFilterManager(getClassLoader(), logger); + } + + @Override + public void onEnable() { + Server server = getServer(); + PluginManager manager = server.getPluginManager(); + + // Player login and logout events + protocolManager.registerEvents(manager, this); + protocolManager.initializePlayers(server.getOnlinePlayers()); + } + + @Override + public void onDisable() { + protocolManager.close(); + } + + /** + * Retrieves the packet protocol manager. + * @return Packet protocol manager. + */ + public static ProtocolManager getProtocolManager() { + return protocolManager; + } + + // Get the Bukkit logger first, before we try to create our own + private Logger getLoggerSafely() { + + Logger log = null; + + try { + log = getLogger(); + } catch (Throwable e) { + // We'll handle it + } + + if (log == null) + log = Logger.getLogger("Minecraft"); + return log; + } +} diff --git a/ProtocolLib/src/com/comphenix/protocol/ProtocolManager.java b/ProtocolLib/src/com/comphenix/protocol/ProtocolManager.java new file mode 100644 index 00000000..3e37fc2d --- /dev/null +++ b/ProtocolLib/src/com/comphenix/protocol/ProtocolManager.java @@ -0,0 +1,90 @@ +package com.comphenix.protocol; + +import java.lang.reflect.InvocationTargetException; +import java.util.Set; + +import org.bukkit.entity.Player; + +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketListener; +import com.google.common.collect.ImmutableSet; + +public interface ProtocolManager { + + /** + * Retrieves a list of every registered packet listener. + * @return Every registered packet listener. + */ + public abstract ImmutableSet getPacketListeners(); + + /** + * Adds a packet listener. + * @param listener - new packet listener. + */ + public abstract void addPacketListener(PacketListener listener); + + /** + * Removes a given packet listener. + * @param listener - the packet listener to remove. + */ + public abstract void removePacketListener(PacketListener listener); + + /** + * Send a packet to the given player. + * @param reciever - the reciever. + * @param packet - packet to send. + * @throws InvocationTargetException - if an error occured when sending the packet. + */ + public void sendServerPacket(Player reciever, PacketContainer packet) + throws InvocationTargetException; + + /** + * Send a packet to the given player. + * @param reciever - the reciever. + * @param packet - packet to send. + * @param filters - whether or not to invoke any packet filters. + * @throws InvocationTargetException - if an error occured when sending the packet. + */ + public void sendServerPacket(Player reciever, PacketContainer packet, boolean filters) + throws InvocationTargetException; + + /** + * Simulate recieving a certain packet from a given player. + * @param sender - the sender. + * @param packet - the packet that was sent. + * @throws InvocationTargetException If the reflection machinery failed. + * @throws IllegalAccessException If the underlying method caused an error. + */ + public void recieveClientPacket(Player sender, PacketContainer packet) + throws IllegalAccessException, InvocationTargetException; + + /** + * Simulate recieving a certain packet from a given player. + * @param sender - the sender. + * @param packet - the packet that was sent. + * @param filters - whether or not to invoke any packet filters. + * @throws InvocationTargetException If the reflection machinery failed. + * @throws IllegalAccessException If the underlying method caused an error. + */ + public void recieveClientPacket(Player sender, PacketContainer packet, boolean filters) + throws IllegalAccessException, InvocationTargetException; + + /** + * Constructs a new encapsulated Minecraft packet with the given ID. + * @param id - packet ID. + * @return New encapsulated Minecraft packet. + */ + public PacketContainer createPacket(int id); + + /** + * Retieves a set of every enabled packet. + * @return Every packet filter. + */ + public Set getPacketFilters(); + + /** + * Determines whether or not is protocol mananger has been disabled. + * @return TRUE if it has, FALSE otherwise. + */ + public boolean isClosed(); +} \ No newline at end of file diff --git a/ProtocolLib/src/com/comphenix/protocol/events/ConnectionSide.java b/ProtocolLib/src/com/comphenix/protocol/events/ConnectionSide.java new file mode 100644 index 00000000..5e8d1b2e --- /dev/null +++ b/ProtocolLib/src/com/comphenix/protocol/events/ConnectionSide.java @@ -0,0 +1,31 @@ +package com.comphenix.protocol.events; + +/** + * Used to set a packet filter. + * + * @author Kristian + */ +public enum ConnectionSide { + /** + * Listen for server side packets that will invoke onPacketSending(). + */ + SERVER_SIDE, + + /** + * Listen for client side packets that will invoke onPacketReceiving(). + */ + CLIENT_SIDE, + + /** + * Listen for both client and server side packets. + */ + BOTH; + + public boolean isForClient() { + return this == CLIENT_SIDE || this == BOTH; + } + + public boolean isForServer() { + return this == SERVER_SIDE || this == BOTH; + } +} diff --git a/ProtocolLib/src/com/comphenix/protocol/events/PacketAdapter.java b/ProtocolLib/src/com/comphenix/protocol/events/PacketAdapter.java new file mode 100644 index 00000000..16a11659 --- /dev/null +++ b/ProtocolLib/src/com/comphenix/protocol/events/PacketAdapter.java @@ -0,0 +1,60 @@ +package com.comphenix.protocol.events; + +import java.util.Set; + +import org.apache.commons.lang.StringUtils; +import org.bukkit.plugin.java.JavaPlugin; + +import com.google.common.collect.Sets; + +/** + * Represents a packet listener with useful constructors. + * + * @author Kristian + */ +public abstract class PacketAdapter implements PacketListener { + + protected JavaPlugin plugin; + protected Set packetsID; + protected ConnectionSide connectionSide; + + /** + * Initialize a packet listener. + * @param plugin - the plugin that spawned this listener. + * @param connectionSide - the packet type the listener is looking for. + * @param packets - the packet IDs the listener is looking for. + */ + public PacketAdapter(JavaPlugin plugin, ConnectionSide connectionSide, Integer... packets) { + this.plugin = plugin; + this.connectionSide = connectionSide; + this.packetsID = Sets.newHashSet(packets); + } + + @Override + public void onPacketReceiving(PacketEvent event) { + // Default is to do nothing + } + + @Override + public void onPacketSending(PacketEvent event) { + // And here too + } + + @Override + public ConnectionSide getConnectionSide() { + return connectionSide; + } + + @Override + public Set getPacketsID() { + return packetsID; + } + + @Override + public String toString() { + // This is used by the error reporter + return String.format("PacketAdapter[plugin=%s, side=%s, packets=%s]", + plugin.getName(), getConnectionSide().name(), + StringUtils.join(packetsID, ", ")); + } +} diff --git a/ProtocolLib/src/com/comphenix/protocol/events/PacketContainer.java b/ProtocolLib/src/com/comphenix/protocol/events/PacketContainer.java new file mode 100644 index 00000000..5971e974 --- /dev/null +++ b/ProtocolLib/src/com/comphenix/protocol/events/PacketContainer.java @@ -0,0 +1,126 @@ +package com.comphenix.protocol.events; + +import org.apache.commons.lang.NullArgumentException; +import org.bukkit.craftbukkit.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +import com.comphenix.protocol.injector.StructureCache; +import com.comphenix.protocol.reflect.EquivalentConverter; +import com.comphenix.protocol.reflect.StructureModifier; + +import net.minecraft.server.Packet; + +/** + * Represents a Minecraft packet indirectly. + * + * @author Kristian + */ +public class PacketContainer { + + protected Packet handle; + protected int id; + + // Current structure modifier + protected StructureModifier structureModifier; + + /** + * Creates a packet container for a new packet. + * @param id - ID of the packet to create. + */ + public PacketContainer(int id) { + this(id, StructureCache.newPacket(id)); + } + + /** + * Creates a packet container for an existing packet. + * @param id - ID of the given packet. + * @param handle - contained packet. + */ + public PacketContainer(int id, Packet handle) { + this(id, handle, StructureCache.getStructure(id).withTarget(handle)); + } + + /** + * Creates a packet container for an existing packet. + * @param id - ID of the given packet. + * @param handle - contained packet. + * @param structure - structure modifier. + */ + public PacketContainer(int id, Packet handle, StructureModifier structure) { + if (handle == null) + throw new NullArgumentException("handle"); + + this.id = id; + this.handle = handle; + this.structureModifier = structure; + } + + /** + * Retrieves the underlying Minecraft packet. + * @return Underlying Minecraft packet. + */ + public Packet getHandle() { + return handle; + } + + /** + * Retrieves the generic structure modifier for this packet. + * @return Structure modifier. + */ + public StructureModifier getModifier() { + return structureModifier; + } + + public StructureModifier getPrimitiveModifier(Class primitiveType) { + return structureModifier.withType(primitiveType); + } + + public StructureModifier getItemModifier() { + // Convert from and to the Bukkit wrapper + return structureModifier.withType(net.minecraft.server.ItemStack.class, new EquivalentConverter() { + public Object getGeneric(ItemStack specific) { + return ((CraftItemStack) specific).getHandle(); + } + + @Override + public ItemStack getSpecific(Object generic) { + return new CraftItemStack((net.minecraft.server.ItemStack) generic); + } + }); + } + + public StructureModifier getItemArrayModifier() { + // Convert to and from the Bukkit wrapper + return structureModifier.withType(net.minecraft.server.ItemStack[].class, new EquivalentConverter() { + public Object getGeneric(ItemStack[] specific) { + net.minecraft.server.ItemStack[] result = new net.minecraft.server.ItemStack[specific.length]; + + // Unwrap every item + for (int i = 0; i < result.length; i++) { + result[i] = ((CraftItemStack) specific[i]).getHandle(); + } + return result; + } + + @Override + public ItemStack[] getSpecific(Object generic) { + net.minecraft.server.ItemStack[] input = (net.minecraft.server.ItemStack[]) generic; + ItemStack[] result = new ItemStack[input.length]; + + // Add the wrapper + for (int i = 0; i < result.length; i++) { + result[i] = new CraftItemStack(input[i]); + } + return result; + } + }); + } + + /** + * Retrieves the ID of this packet. + * @return Packet ID. + */ + public int getID() { + return id; + } +} diff --git a/ProtocolLib/src/com/comphenix/protocol/events/PacketEvent.java b/ProtocolLib/src/com/comphenix/protocol/events/PacketEvent.java new file mode 100644 index 00000000..e403f658 --- /dev/null +++ b/ProtocolLib/src/com/comphenix/protocol/events/PacketEvent.java @@ -0,0 +1,119 @@ +package com.comphenix.protocol.events; + +import java.util.EventObject; + +import org.bukkit.entity.Player; + +public class PacketEvent extends EventObject { + /** + * Automatically generated by Eclipse. + */ + private static final long serialVersionUID = -5360289379097430620L; + + private PacketContainer packet; + private Player sender; + private Player reciever; + private boolean cancel; + + /** + * Use the static constructors to create instances of this event. + * @param source - the event source. + */ + public PacketEvent(Object source) { + super(source); + } + + private PacketEvent(Object source, PacketContainer packet, Player sender, Player reciever) { + super(source); + this.packet = packet; + this.sender = sender; + this.reciever = reciever; + } + + /** + * Creates an event representing a client packet transmission. + * @param source - the event source. + * @param packet - the packet. + * @param client - the client that sent the packet. + * @return The event. + */ + public static PacketEvent fromClient(Object source, PacketContainer packet, Player client) { + return new PacketEvent(source, packet, client, null); + } + + /** + * Creates an event representing a server packet transmission. + * @param source - the event source. + * @param packet - the packet. + * @param recipient - the client that will receieve the packet. + * @return The event. + */ + public static PacketEvent fromServer(Object source, PacketContainer packet, Player recipient) { + return new PacketEvent(source, packet, null, recipient); + } + + /** + * Retrieves the packet that will be sent to the player. + * @return Packet to send to the player. + */ + public PacketContainer getPacket() { + return packet; + } + + /** + * Replace the packet that will be sent to the player. + * @param packet - the packet that will be sent instead. + */ + public void setPacket(PacketContainer packet) { + this.packet = packet; + } + + /** + * Retrieves the packet ID. + * @return The current packet ID. + */ + public int getPacketID() { + return packet.getID(); + } + + /** + * Retrieves whether or not the packet should be cancelled. + * @return TRUE if it should be cancelled, FALSE otherwise. + */ + public boolean isCancelled() { + return cancel; + } + + /** + * Sets whether or not the packet should be cancelled. + * @param cancel - TRUE if it should be cancelled, FALSE otherwise. + */ + public void setCancelled(boolean cancel) { + this.cancel = cancel; + } + + /** + * Retrieves the player that has sent the packet. + * @return The sender, or NULL if the server is sending the packet. + */ + public Player getSender() { + return sender; + } + + /** + * Retrieves the player that will recieve the packet. + * @return The reciever, or NULL if the server is recieving the packet. + */ + public Player getReciever() { + return reciever; + } + + + /** + * Whether or not this packet was created by the server. + * @return TRUE if the packet was created by the server, FALSE if it was created by a client. + */ + public boolean isServerPacket() { + return getReciever() != null; + } +} diff --git a/ProtocolLib/src/com/comphenix/protocol/events/PacketListener.java b/ProtocolLib/src/com/comphenix/protocol/events/PacketListener.java new file mode 100644 index 00000000..6b0b7fc0 --- /dev/null +++ b/ProtocolLib/src/com/comphenix/protocol/events/PacketListener.java @@ -0,0 +1,34 @@ +package com.comphenix.protocol.events; + +import java.util.Set; + + +public interface PacketListener { + + /** + * Invoked right before a packet is transmitted from the server to the client. + *

+ * Note that the packet may be replaced, if needed. + * + * @param event - the packet that should be sent. + */ + public void onPacketSending(PacketEvent event); + + /** + * Invoked right before a recieved packet from a client is being processed. + * @param event - the packet that has been recieved. + */ + public void onPacketReceiving(PacketEvent event); + + /** + * Retrieve whether or not we're listening for client or server packets. + * @return The type of packets we expect. + */ + public ConnectionSide getConnectionSide(); + + /** + * Set of packet ids we expect to recieve. + * @return Packets IDs. + */ + public Set getPacketsID(); +} diff --git a/ProtocolLib/src/com/comphenix/protocol/injector/MinecraftRegistry.java b/ProtocolLib/src/com/comphenix/protocol/injector/MinecraftRegistry.java new file mode 100644 index 00000000..9c8d4fe6 --- /dev/null +++ b/ProtocolLib/src/com/comphenix/protocol/injector/MinecraftRegistry.java @@ -0,0 +1,88 @@ +package com.comphenix.protocol.injector; + +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.lang.ObjectUtils; + +import net.minecraft.server.Packet; + +import com.comphenix.protocol.reflect.FieldUtils; +import com.comphenix.protocol.reflect.FuzzyReflection; + +/** + * Static registries in Minecraft. + * + * @author Kristian + */ +@SuppressWarnings("rawtypes") +class MinecraftRegistry { + + // The packet class to packet ID translator + private static Map packetToID; + + // New proxy values + private static Map overwrittenPackets = new HashMap(); + + // Vanilla packets + private static Map previousValues = new HashMap(); + + @SuppressWarnings({ "unchecked" }) + public static Map getPacketToID() { + // Initialize it, if we haven't already + if (packetToID == null) { + try { + Field packetsField = FuzzyReflection.fromClass(Packet.class, true).getFieldByType("java\\.util\\.Map"); + packetToID = (Map) FieldUtils.readStaticField(packetsField, true); + + } catch (IllegalAccessException e) { + throw new RuntimeException("Unable to retrieve the packetClassToIdMap", e); + } + } + + return packetToID; + } + + public static Map getOverwrittenPackets() { + return overwrittenPackets; + } + + public static Map getPreviousPackets() { + return previousValues; + } + + /** + * Retrieves the correct packet class from a given packet ID. + * @param packetID - the packet ID. + * @return The associated class. + */ + public static Class getPacketClassFromID(int packetID) { + return getPacketClassFromID(packetID, false); + } + + /** + * Retrieves the correct packet class from a given packet ID. + * @param packetID - the packet ID. + * @param vanilla - whether or not to look for vanilla classes, not injected classes. + * @return The associated class. + */ + public static Class getPacketClassFromID(int packetID, boolean forceVanilla) { + + Map lookup = forceVanilla ? previousValues : overwrittenPackets; + + // Optimized lookup + if (lookup.containsKey(packetToID)) { + return lookup.get(packetToID); + } + + // Will most likely not be used + for (Map.Entry entry : getPacketToID().entrySet()) { + if (ObjectUtils.equals(entry.getValue(), packetID)) { + return entry.getKey(); + } + } + + throw new IllegalArgumentException("The packet ID " + packetID + " is not registered."); + } +} diff --git a/ProtocolLib/src/com/comphenix/protocol/injector/PacketFilterManager.java b/ProtocolLib/src/com/comphenix/protocol/injector/PacketFilterManager.java new file mode 100644 index 00000000..c96e5cea --- /dev/null +++ b/ProtocolLib/src/com/comphenix/protocol/injector/PacketFilterManager.java @@ -0,0 +1,336 @@ +package com.comphenix.protocol.injector; + +import java.io.DataInputStream; +import java.lang.reflect.InvocationTargetException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.CopyOnWriteArraySet; +import java.util.logging.Level; +import java.util.logging.Logger; + +import net.minecraft.server.Packet; + +import org.apache.commons.lang.NullArgumentException; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginManager; + +import com.comphenix.protocol.ProtocolManager; +import com.comphenix.protocol.events.ConnectionSide; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.events.PacketListener; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; + +public final class PacketFilterManager implements ProtocolManager { + + private Set packetListeners = new CopyOnWriteArraySet(); + + // Player injection + private Map connectionLookup = new HashMap(); + private Map playerInjection = new HashMap(); + + // Packet injection + private PacketInjector packetInjector; + + // Enabled packet filters + private Set packetFilters = new HashSet(); + + // Whether or not this class has been closed + private boolean hasClosed; + + // Error logger + private Logger logger; + + /** + * Only create instances of this class if protocol lib is disabled. + */ + public PacketFilterManager(ClassLoader classLoader, Logger logger) { + if (logger == null) + throw new NullArgumentException("logger"); + if (classLoader == null) + throw new NullArgumentException("classLoader"); + + try { + // Initialize values + this.logger = logger; + this.packetInjector = new PacketInjector(classLoader, this, connectionLookup); + } catch (IllegalAccessException e) { + logger.log(Level.SEVERE, "Unable to initialize packet injector.", e); + } + } + + public Logger getLogger() { + return logger; + } + + @Override + public ImmutableSet getPacketListeners() { + return ImmutableSet.copyOf(packetListeners); + } + + @Override + public void addPacketListener(PacketListener listener) { + if (listener == null) + throw new NullArgumentException("listener"); + + packetListeners.add(listener); + enablePacketFilters(listener.getConnectionSide(), + listener.getPacketsID()); + } + + @Override + public void removePacketListener(PacketListener listener) { + if (listener == null) + throw new NullArgumentException("listener"); + + packetListeners.remove(listener); + disablePacketFilters(listener.getConnectionSide(), + listener.getPacketsID()); + } + + /** + * Invokes the given packet event for every registered listener. + * @param event - the packet event to invoke. + */ + public void invokePacketRecieving(PacketEvent event) { + for (PacketListener listener : packetListeners) { + try { + if (canHandlePacket(listener, event)) + listener.onPacketReceiving(event); + } catch (Exception e) { + // Minecraft doesn't want your Exception. + logger.log(Level.SEVERE, "Exception occured in onPacketReceiving() for " + listener.toString(), e); + } + } + } + + /** + * Invokes the given packet event for every registered listener. + * @param event - the packet event to invoke. + */ + public void invokePacketSending(PacketEvent event) { + for (PacketListener listener : packetListeners) { + try { + if (canHandlePacket(listener, event)) + listener.onPacketSending(event); + } catch (Exception e) { + logger.log(Level.SEVERE, "Exception occured in onPacketReceiving() for " + listener.toString(), e); + } + } + } + + private boolean canHandlePacket(PacketListener listener, PacketEvent event) { + // Make sure the listener is looking for this packet + if (!listener.getPacketsID().contains(event.getPacket().getID())) + return false; + + // And this type of packet + if (event.isServerPacket()) + return listener.getConnectionSide().isForServer(); + else + return listener.getConnectionSide().isForClient(); + } + + /** + * Enables packet events for a given packet ID. + *

+ * Note that all packets are disabled by default. + * + * @param side - which side the event will arrive from. + * @param packets - the packet id(s). + */ + private void enablePacketFilters(ConnectionSide side, Set packets) { + if (side == null) + throw new NullArgumentException("side"); + + for (int packetID : packets) { + if (side.isForServer()) + packetFilters.add(packetID); + if (side.isForClient() && packetInjector != null) + packetInjector.addPacketHandler(packetID); + } + } + + /** + * Disables packet events from a given packet ID. + * @param packets - the packet id(s). + * @param side - which side the event no longer should arrive from. + */ + private void disablePacketFilters(ConnectionSide side, Set packets) { + if (side == null) + throw new NullArgumentException("side"); + + for (int packetID : packets) { + if (side.isForServer()) + packetFilters.remove(packetID); + if (side.isForClient() && packetInjector != null) + packetInjector.removePacketHandler(packetID); + } + } + + @Override + public void sendServerPacket(Player reciever, PacketContainer packet) throws InvocationTargetException { + sendServerPacket(reciever, packet, true); + } + + @Override + public void sendServerPacket(Player reciever, PacketContainer packet, boolean filters) throws InvocationTargetException { + if (reciever == null) + throw new NullArgumentException("reciever"); + if (packet == null) + throw new NullArgumentException("packet"); + + getInjector(reciever).sendServerPacket(packet.getHandle(), filters); + } + + @Override + public void recieveClientPacket(Player sender, PacketContainer packet) throws IllegalAccessException, InvocationTargetException { + recieveClientPacket(sender, packet, true); + } + + @Override + public void recieveClientPacket(Player sender, PacketContainer packet, boolean filters) throws IllegalAccessException, InvocationTargetException { + + if (sender == null) + throw new NullArgumentException("sender"); + if (packet == null) + throw new NullArgumentException("packet"); + + PlayerInjector injector = getInjector(sender); + Packet mcPacket = packet.getHandle(); + + if (filters) { + mcPacket = injector.handlePacketRecieved(mcPacket); + } + + injector.processPacket(mcPacket); + } + + @Override + public PacketContainer createPacket(int id) { + return new PacketContainer(id); + } + + @Override + public Set getPacketFilters() { + if (packetInjector != null) + return Sets.union(packetFilters, packetInjector.getPacketHandlers()); + else + return packetFilters; + } + + /** + * Initialize the packet injection for every player. + * @param players - list of players to inject. + */ + public void initializePlayers(Player[] players) { + for (Player player : players) + injectPlayer(player); + } + + private void injectPlayer(Player player) { + // Don't inject if the class has closed + if (!hasClosed && player != null && !playerInjection.containsKey(player)) { + try { + PlayerInjector injector = new PlayerInjector(player, this, packetFilters); + + injector.injectManager(); + playerInjection.put(player, injector); + connectionLookup.put(injector.getInputStream(false), player); + + } catch (IllegalAccessException e) { + // Mark this injection attempt as a failure + playerInjection.put(player, null); + logger.log(Level.SEVERE, "Unable to access fields.", e); + } + } + } + + /** + * Register this protocol manager on Bukkit. + * @param manager - Bukkit plugin manager that provides player join/leave events. + * @param plugin - the parent plugin. + */ + public void registerEvents(PluginManager manager, Plugin plugin) { + manager.registerEvents(new Listener() { + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onPlayerJoin(PlayerJoinEvent event) { + injectPlayer(event.getPlayer()); + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onPlayerQuit(PlayerQuitEvent event) { + uninjectPlayer(event.getPlayer()); + } + }, plugin); + } + + private void uninjectPlayer(Player player) { + if (!hasClosed && player != null) { + + PlayerInjector injector = playerInjection.get(player); + DataInputStream input = injector.getInputStream(true); + + if (injector != null) { + injector.cleanupAll(); + + playerInjection.remove(injector); + connectionLookup.remove(input); + } + } + } + + private PlayerInjector getInjector(Player player) { + if (!playerInjection.containsKey(player)) { + // What? Try to inject again. + injectPlayer(player); + } + + PlayerInjector injector = playerInjection.get(player); + + // Check that the injector was sucessfully added + if (injector != null) + return injector; + else + throw new IllegalArgumentException("Player has no injected handler."); + } + + @Override + public boolean isClosed() { + return hasClosed; + } + + public void close() { + // Guard + if (hasClosed) + return; + + // Remove everything + for (PlayerInjector injection : playerInjection.values()) { + injection.cleanupAll(); + } + + // Remove packet handlers + if (packetInjector != null) + packetInjector.cleanupAll(); + + playerInjection.clear(); + connectionLookup.clear(); + hasClosed = true; + } + + @Override + protected void finalize() throws Throwable { + close(); + } +} diff --git a/ProtocolLib/src/com/comphenix/protocol/injector/PacketInjector.java b/ProtocolLib/src/com/comphenix/protocol/injector/PacketInjector.java new file mode 100644 index 00000000..f143b0d8 --- /dev/null +++ b/ProtocolLib/src/com/comphenix/protocol/injector/PacketInjector.java @@ -0,0 +1,177 @@ +package com.comphenix.protocol.injector; + +import java.io.DataInputStream; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Map; +import java.util.Set; + +import org.bukkit.entity.Player; + +import net.minecraft.server.Packet; +import net.sf.cglib.proxy.Callback; +import net.sf.cglib.proxy.Enhancer; + +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.reflect.FuzzyReflection; + +/** + * This class is responsible for adding or removing proxy objects that intercepts recieved packets. + * + * @author Kristian + */ +class PacketInjector { + + // The "put" method that associates a packet ID with a packet class + private static Method putMethod; + private static Object intHashMap; + + // The packet filter manager + private PacketFilterManager manager; + + // Allows us to determine the sender + private Map playerLookup; + + // Class loader + private ClassLoader classLoader; + + public PacketInjector(ClassLoader classLoader, PacketFilterManager manager, + Map playerLookup) throws IllegalAccessException { + + this.classLoader = classLoader; + this.manager = manager; + this.playerLookup = playerLookup; + initialize(); + } + + private void initialize() throws IllegalAccessException { + if (intHashMap == null) { + // We're looking for the first static field with a Minecraft-object. This should be a IntHashMap. + Field intHashMapField = FuzzyReflection.fromClass(Packet.class).getFieldByType(FuzzyReflection.MINECRAFT_OBJECT); + + try { + intHashMap = intHashMapField.get(null); + } catch (IllegalArgumentException e) { + throw new RuntimeException("Minecraft is incompatible.", e); + } + + // Now, get the "put" method. + putMethod = FuzzyReflection.fromObject(intHashMap).getMethodByParameters("put", int.class, Object.class); + } + } + + @SuppressWarnings("rawtypes") + public boolean addPacketHandler(int packetID) { + if (hasPacketHandler(packetID)) + return false; + + Enhancer ex = new Enhancer(); + + // Unfortunately, we can't easily distinguish between these two functions: + // * Object lookup(int par1) + // * Object removeObject(int par1) + + // So, we'll use the classMapToInt registry instead. + Map overwritten = MinecraftRegistry.getOverwrittenPackets(); + Map previous = MinecraftRegistry.getPreviousPackets(); + Map registry = MinecraftRegistry.getPacketToID(); + Class old = MinecraftRegistry.getPacketClassFromID(packetID); + + // Check for previous injections + if (!old.getName().startsWith("net.minecraft.")) { + throw new IllegalStateException("Packet " + packetID + " has already been injected."); + } + + // Subclass the specific packet class + ex.setSuperclass(old); + ex.setCallbackType(ReadPacketModifier.class); + ex.setUseCache(false); + ex.setClassLoader(classLoader); + Class proxy = ex.createClass(); + + // Add a static reference + Enhancer.registerStaticCallbacks(proxy, new Callback[] { + new ReadPacketModifier(packetID, this) + }); + + try { + // Override values + putMethod.invoke(intHashMap, packetID, proxy); + previous.put(packetID, old); + registry.put(proxy, packetID); + overwritten.put(packetID, proxy); + return true; + + } catch (IllegalArgumentException e) { + throw new RuntimeException("Illegal argument.", e); + } catch (IllegalAccessException e) { + throw new RuntimeException("Cannot access method.", e); + } catch (InvocationTargetException e) { + throw new RuntimeException("Exception occured in IntHashMap.put.", e); + } + } + + @SuppressWarnings("rawtypes") + public boolean removePacketHandler(int packetID) { + if (!hasPacketHandler(packetID)) + return false; + + Map registry = MinecraftRegistry.getPacketToID(); + Map previous = MinecraftRegistry.getPreviousPackets(); + Map overwritten = MinecraftRegistry.getOverwrittenPackets(); + + // Use the old class definition + try { + Class old = previous.get(packetID); + Class proxy = MinecraftRegistry.getPacketClassFromID(packetID); + + putMethod.invoke(intHashMap, packetID, old); + previous.remove(packetID); + registry.remove(proxy); + overwritten.remove(packetID); + return true; + + // Handle some problems + } catch (IllegalArgumentException e) { + return false; + } catch (IllegalAccessException e) { + throw new RuntimeException("Cannot access method.", e); + } catch (InvocationTargetException e) { + throw new RuntimeException("Exception occured in IntHashMap.put.", e); + } + } + + public boolean hasPacketHandler(int packetID) { + return MinecraftRegistry.getPreviousPackets().containsKey(packetID); + } + + public Set getPacketHandlers() { + return MinecraftRegistry.getPreviousPackets().keySet(); + } + + // Called from the ReadPacketModified monitor + PacketEvent packetRecieved(PacketContainer packet, DataInputStream input) { + + Player client = playerLookup.get(input); + PacketEvent event = PacketEvent.fromClient((Object) manager, packet, client); + + manager.invokePacketRecieving(event); + return event; + } + + @SuppressWarnings("rawtypes") + public void cleanupAll() { + Map overwritten = MinecraftRegistry.getOverwrittenPackets(); + Map previous = MinecraftRegistry.getPreviousPackets(); + + // Remove every packet handler + for (Integer id : previous.keySet()) { + removePacketHandler(id); + } + + overwritten.clear(); + previous.clear(); + } +} diff --git a/ProtocolLib/src/com/comphenix/protocol/injector/PlayerInjector.java b/ProtocolLib/src/com/comphenix/protocol/injector/PlayerInjector.java new file mode 100644 index 00000000..dcbefb72 --- /dev/null +++ b/ProtocolLib/src/com/comphenix/protocol/injector/PlayerInjector.java @@ -0,0 +1,261 @@ +package com.comphenix.protocol.injector; + +import java.io.DataInputStream; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.util.Set; + +import net.minecraft.server.EntityPlayer; +import net.minecraft.server.Packet; + +import org.bukkit.craftbukkit.entity.CraftPlayer; +import org.bukkit.entity.Player; + +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.reflect.FieldUtils; +import com.comphenix.protocol.reflect.FuzzyReflection; +import com.comphenix.protocol.reflect.VolatileField; + +class PlayerInjector { + + // Cache previously retrieved fields + private static Field serverHandlerField; + private static Field networkManagerField; + private static Field inputField; + private static Field netHandlerField; + + // And methods + private static Method queueMethod; + private static Method processMethod; + + private Player player; + private boolean hasInitialized; + + // Reference to the player's network manager + private VolatileField networkManager; + + // The packet manager and filters + private PacketFilterManager manager; + private Set packetFilters; + + // Previous data input + private DataInputStream cachedInput; + + // Current net handler + private Object netHandler; + + public PlayerInjector(Player player, PacketFilterManager manager, Set packetFilters) throws IllegalAccessException { + this.player = player; + this.manager = manager; + this.packetFilters = packetFilters; + initialize(); + } + + private void initialize() throws IllegalAccessException { + + CraftPlayer craft = (CraftPlayer) player; + EntityPlayer notchEntity = craft.getHandle(); + + if (!hasInitialized) { + // Do this first, in case we encounter an exception + hasInitialized = true; + + // Retrieve the server handler + if (serverHandlerField == null) + serverHandlerField = FuzzyReflection.fromObject(notchEntity).getFieldByType(".*NetServerHandler"); + Object serverHandler = FieldUtils.readField(serverHandlerField, notchEntity); + + // Next, get the network manager + if (networkManagerField == null) + networkManagerField = FuzzyReflection.fromObject(serverHandler).getFieldByType(".*NetworkManager"); + networkManager = new VolatileField(networkManagerField, serverHandler); + + // And the queue method + if (queueMethod == null) + queueMethod = FuzzyReflection.fromClass(networkManagerField.getType()). + getMethodByParameters("queue", Packet.class ); + + // And the data input stream that we'll use to identify a player + if (inputField == null) + inputField = FuzzyReflection.fromObject(networkManager.getOldValue(), true). + getFieldByType("java\\.io\\.DataInputStream"); + } + } + + /** + * Retrieves the current net handler for this player. + * @return Current net handler. + * @throws IllegalAccessException Unable to find or retrieve net handler. + */ + private Object getNetHandler() throws IllegalAccessException { + + // What a mess + try { + if (netHandlerField == null) + netHandlerField = FuzzyReflection.fromClass(networkManagerField.getType(), true). + getFieldByType("net\\.minecraft\\.NetHandler"); + } catch (RuntimeException e1) { + try { + // Well, that sucks. Try just Minecraft objects then. + netHandlerField = FuzzyReflection.fromClass(networkManagerField.getType(), true). + getFieldByType(FuzzyReflection.MINECRAFT_OBJECT); + + } catch (RuntimeException e2) { + return new IllegalAccessException("Cannot locate net handler. " + e2.getMessage()); + } + } + + // Get the handler + if (netHandler != null) + netHandler = FieldUtils.readField(netHandlerField, networkManager.getOldValue(), true); + return netHandler; + } + + /** + * Processes the given packet as if it was transmitted by the current player. + * @param packet - packet to process. + * @throws IllegalAccessException If the reflection machinery failed. + * @throws InvocationTargetException If the underlying method caused an error. + */ + public void processPacket(Packet packet) throws IllegalAccessException, InvocationTargetException { + + Object netHandler = getNetHandler(); + + // Get the process method + if (processMethod == null) { + try { + processMethod = FuzzyReflection.fromClass(Packet.class). + getMethodByParameters("processPacket", netHandlerField.getType()); + } catch (RuntimeException e) { + throw new IllegalArgumentException("Cannot locate process packet method: " + e.getMessage()); + } + } + + // We're ready + try { + processMethod.invoke(packet, netHandler); + } catch (IllegalArgumentException e) { + throw new IllegalArgumentException("Method " + processMethod.getName() + " is not compatible."); + } catch (InvocationTargetException e) { + throw e; + } + } + + /** + * Send a packet to the client. + * @param packet - server packet to send. + * @param filtered - whether or not the packet will be filtered by our listeners. + * @param InvocationTargetException If an error occured when sending the packet. + */ + public void sendServerPacket(Packet packet, boolean filtered) throws InvocationTargetException { + Object networkDelegate = filtered ? networkManager.getValue() : networkManager.getOldValue(); + + if (networkDelegate != null) { + try { + // Note that invocation target exception is a wrapper for a checked exception + queueMethod.invoke(networkDelegate, packet); + + } catch (IllegalArgumentException e) { + throw e; + } catch (InvocationTargetException e) { + throw e; + } catch (IllegalAccessException e) { + throw new IllegalStateException("Unable to access queue method.", e); + } + } else { + throw new IllegalStateException("Unable to load network mananager. Cannot send packet."); + } + } + + public void injectManager() { + + if (networkManager != null) { + final Class networkInterface = networkManagerField.getType(); + final Object networkDelegate = networkManager.getOldValue(); + + // Create our proxy object + Object networkProxy = Proxy.newProxyInstance(networkInterface.getClassLoader(), + new Class[] { networkInterface }, new InvocationHandler() { + + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + // OH OH! The queue method! + if (method.equals(queueMethod)) { + Packet packet = (Packet) args[0]; + + if (packet != null) { + packet = handlePacketRecieved(packet); + + // A NULL packet indicate cancelling + if (packet != null) + args[0] = packet; + else + return null; + } + } + + // Delegate to our underlying class + try { + return method.invoke(networkDelegate, args); + } catch (InvocationTargetException e) { + throw e.getCause(); + } + } + }); + + // Inject it, if we can. + networkManager.setValue(networkProxy); + } + } + + /** + * Allows a packet to be recieved by the listeners. + * @param packet - packet to recieve. + * @return The given packet, or the packet replaced by the listeners. + */ + Packet handlePacketRecieved(Packet packet) { + // Get the packet ID too + Integer id = MinecraftRegistry.getPacketToID().get(packet.getClass()); + + // Make sure we're listening + if (packetFilters.contains(id)) { + // A packet has been sent guys! + PacketContainer container = new PacketContainer(id, packet); + PacketEvent event = PacketEvent.fromServer(manager, container, player); + manager.invokePacketSending(event); + + // Cancelling is pretty simple. Just ignore the packet. + if (event.isCancelled()) + return null; + + // Right, remember to replace the packet again + return event.getPacket().getHandle(); + } + + return packet; + } + + public DataInputStream getInputStream(boolean cache) { + // Get the associated input stream + try { + if (cache && cachedInput != null) + return cachedInput; + + // Save to cache + cachedInput = (DataInputStream) FieldUtils.readField(inputField, networkManager.getOldValue(), true); + return cachedInput; + + } catch (IllegalAccessException e) { + throw new RuntimeException("Unable to read input stream.", e); + } + } + + public void cleanupAll() { + // Clean up + networkManager.revertValue(); + } +} diff --git a/ProtocolLib/src/com/comphenix/protocol/injector/ReadPacketModifier.java b/ProtocolLib/src/com/comphenix/protocol/injector/ReadPacketModifier.java new file mode 100644 index 00000000..a3c59f95 --- /dev/null +++ b/ProtocolLib/src/com/comphenix/protocol/injector/ReadPacketModifier.java @@ -0,0 +1,84 @@ +package com.comphenix.protocol.injector; + +import java.io.DataInputStream; +import java.lang.reflect.Method; +import java.util.WeakHashMap; + +import org.apache.commons.lang.ArrayUtils; + +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; + +import net.minecraft.server.Packet; +import net.sf.cglib.proxy.MethodInterceptor; +import net.sf.cglib.proxy.MethodProxy; + +class ReadPacketModifier implements MethodInterceptor { + + @SuppressWarnings("rawtypes") + private static Class[] parameters = { DataInputStream.class }; + + // Common for all packets of the same type + private PacketInjector packetInjector; + private int packetID; + + // Whether or not a packet has been cancelled + private static WeakHashMap override = new WeakHashMap(); + + public ReadPacketModifier(int packetID, PacketInjector packetInjector) { + this.packetID = packetID; + this.packetInjector = packetInjector; + } + + @Override + public Object intercept(Object thisObj, Method method, Object[] args, MethodProxy proxy) throws Throwable { + + Object returnValue = null; + String methodName = method.getName(); + + // We always pass these down (otherwise, we'll end up with a infinite loop) + if (methodName.equals("hashCode") || methodName.equals("equals") || methodName.equals("toString")) { + return proxy.invokeSuper(thisObj, args); + } + + if (override.containsKey(thisObj)) { + Object overridenObject = override.get(thisObj); + + // Cancel EVERYTHING, including "processPacket" + if (overridenObject == null) + return null; + + returnValue = proxy.invokeSuper(overridenObject, args); + } else { + returnValue = proxy.invokeSuper(thisObj, args); + } + + // Is this a readPacketData method? + if (returnValue == null && + ArrayUtils.isEquals(method.getParameterTypes(), parameters)) { + + // We need this in order to get the correct player + DataInputStream input = (DataInputStream) args[0]; + + // Let the people know + PacketContainer container = new PacketContainer(packetID, (Packet) thisObj); + PacketEvent event = packetInjector.packetRecieved(container, input); + Packet result = event.getPacket().getHandle(); + + // Handle override + if (event != null) { + if (event.isCancelled()) { + override.put(thisObj, null); + } else if (!objectEquals(thisObj, result)) { + override.put(thisObj, result); + } + } + } + + return returnValue; + } + + private boolean objectEquals(Object a, Object b) { + return System.identityHashCode(a) != System.identityHashCode(b); + } +} diff --git a/ProtocolLib/src/com/comphenix/protocol/injector/StructureCache.java b/ProtocolLib/src/com/comphenix/protocol/injector/StructureCache.java new file mode 100644 index 00000000..9aab6ab2 --- /dev/null +++ b/ProtocolLib/src/com/comphenix/protocol/injector/StructureCache.java @@ -0,0 +1,46 @@ +package com.comphenix.protocol.injector; + +import java.util.HashMap; +import java.util.Map; + +import net.minecraft.server.Packet; + +import com.comphenix.protocol.reflect.StructureModifier; + +public class StructureCache { + // Structure modifiers + private static Map> structureModifiers = new HashMap>(); + + /** + * Creates an empty Minecraft packet of the given ID. + * @param id - packet ID. + * @return Created packet. + */ + public static Packet newPacket(int id) { + try { + return (Packet) MinecraftRegistry.getPacketClassFromID(id, true).newInstance(); + } catch (InstantiationException e) { + return null; + } catch (IllegalAccessException e) { + throw new RuntimeException("Access denied.", e); + } + } + + /** + * Retrieve a cached structure modifier for the given packet id. + * @param id - packet ID. + * @return A structure modifier. + */ + public static StructureModifier getStructure(int id) { + + StructureModifier result = structureModifiers.get(id); + + // Use the vanilla class definition + if (result == null) { + result = new StructureModifier(MinecraftRegistry.getPacketClassFromID(id, true)); + structureModifiers.put(id, result); + } + + return result; + } +} diff --git a/ProtocolLib/src/com/comphenix/protocol/reflect/EquivalentConverter.java b/ProtocolLib/src/com/comphenix/protocol/reflect/EquivalentConverter.java new file mode 100644 index 00000000..a55db066 --- /dev/null +++ b/ProtocolLib/src/com/comphenix/protocol/reflect/EquivalentConverter.java @@ -0,0 +1,12 @@ +package com.comphenix.protocol.reflect; + +/** + * Interface that converts generic objects into types and back. + * + * @author Kristian + * @param The specific type. + */ +public interface EquivalentConverter { + public TType getSpecific(Object generic); + public Object getGeneric(TType specific); +} diff --git a/ProtocolLib/src/com/comphenix/protocol/reflect/FieldUtils.java b/ProtocolLib/src/com/comphenix/protocol/reflect/FieldUtils.java new file mode 100644 index 00000000..28b9ebf8 --- /dev/null +++ b/ProtocolLib/src/com/comphenix/protocol/reflect/FieldUtils.java @@ -0,0 +1,473 @@ +package com.comphenix.protocol.reflect; + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.lang.reflect.AccessibleObject; +import java.lang.reflect.Field; +import java.lang.reflect.Member; +import java.lang.reflect.Modifier; +import java.util.Iterator; + +import org.apache.commons.lang.ClassUtils; + +/** + * Utilities for working with fields by reflection. Adapted and refactored from + * the dormant [reflect] Commons sandbox component. + *

+ * The ability is provided to break the scoping restrictions coded by the + * programmer. This can allow fields to be changed that shouldn't be. This + * facility should be used with care. + * + * @author Apache Software Foundation + * @author Matt Benson + * @since 2.5 + * @version $Id: FieldUtils.java 1057009 2011-01-09 19:48:06Z niallp $ + */ +@SuppressWarnings("rawtypes") +public class FieldUtils { + + /** + * FieldUtils instances should NOT be constructed in standard programming. + *

+ * This constructor is public to permit tools that require a JavaBean + * instance to operate. + */ + public FieldUtils() { + super(); + } + + /** + * Gets an accessible Field by name respecting scope. + * Superclasses/interfaces will be considered. + * + * @param cls the class to reflect, must not be null + * @param fieldName the field name to obtain + * @return the Field object + * @throws IllegalArgumentException if the class or field name is null + */ + public static Field getField(Class cls, String fieldName) { + Field field = getField(cls, fieldName, false); + MemberUtils.setAccessibleWorkaround(field); + return field; + } + + /** + * Gets an accessible Field by name breaking scope if + * requested. Superclasses/interfaces will be considered. + * + * @param cls the class to reflect, must not be null + * @param fieldName the field name to obtain + * @param forceAccess whether to break scope restrictions using the + * setAccessible method. False will + * only match public fields. + * @return the Field object + * @throws IllegalArgumentException if the class or field name is null + */ + public static Field getField(final Class cls, String fieldName, boolean forceAccess) { + if (cls == null) { + throw new IllegalArgumentException("The class must not be null"); + } + if (fieldName == null) { + throw new IllegalArgumentException("The field name must not be null"); + } + // Sun Java 1.3 has a bugged implementation of getField hence we write + // the + // code ourselves + + // getField() will return the Field object with the declaring class + // set correctly to the class that declares the field. Thus requesting + // the + // field on a subclass will return the field from the superclass. + // + // priority order for lookup: + // searchclass private/protected/package/public + // superclass protected/package/public + // private/different package blocks access to further superclasses + // implementedinterface public + + // check up the superclass hierarchy + for (Class acls = cls; acls != null; acls = acls.getSuperclass()) { + try { + Field field = acls.getDeclaredField(fieldName); + // getDeclaredField checks for non-public scopes as well + // and it returns accurate results + if (!Modifier.isPublic(field.getModifiers())) { + if (forceAccess) { + field.setAccessible(true); + } else { + continue; + } + } + return field; + } catch (NoSuchFieldException ex) { + // ignore + } + } + // check the public interface case. This must be manually searched for + // incase there is a public supersuperclass field hidden by a + // private/package + // superclass field. + Field match = null; + for (Iterator intf = ClassUtils.getAllInterfaces(cls).iterator(); intf.hasNext();) { + try { + Field test = ((Class) intf.next()).getField(fieldName); + if (match != null) { + throw new IllegalArgumentException("Reference to field " + fieldName + + " is ambiguous relative to " + cls + + "; a matching field exists on two or more implemented interfaces."); + } + match = test; + } catch (NoSuchFieldException ex) { + // ignore + } + } + return match; + } + + /** + * Read an accessible static Field. + * + * @param field to read + * @return the field value + * @throws IllegalArgumentException if the field is null or not static + * @throws IllegalAccessException if the field is not accessible + */ + public static Object readStaticField(Field field) throws IllegalAccessException { + return readStaticField(field, false); + } + + /** + * Read a static Field. + * + * @param field to read + * @param forceAccess whether to break scope restrictions using the + * setAccessible method. + * @return the field value + * @throws IllegalArgumentException if the field is null or not static + * @throws IllegalAccessException if the field is not made accessible + */ + public static Object readStaticField(Field field, boolean forceAccess) + throws IllegalAccessException { + if (field == null) { + throw new IllegalArgumentException("The field must not be null"); + } + if (!Modifier.isStatic(field.getModifiers())) { + throw new IllegalArgumentException("The field '" + field.getName() + "' is not static"); + } + return readField(field, (Object) null, forceAccess); + } + + /** + * Read the named public static field. Superclasses will be considered. + * + * @param cls the class to reflect, must not be null + * @param fieldName the field name to obtain + * @return the value of the field + * @throws IllegalArgumentException if the class or field name is null + * @throws IllegalAccessException if the field is not accessible + */ + public static Object readStaticField(Class cls, String fieldName) throws IllegalAccessException { + return readStaticField(cls, fieldName, false); + } + + /** + * Read the named static field. Superclasses will be considered. + * + * @param cls the class to reflect, must not be null + * @param fieldName the field name to obtain + * @param forceAccess whether to break scope restrictions using the + * setAccessible method. False will + * only match public fields. + * @return the Field object + * @throws IllegalArgumentException if the class or field name is null + * @throws IllegalAccessException if the field is not made accessible + */ + public static Object readStaticField(Class cls, String fieldName, boolean forceAccess) + throws IllegalAccessException { + Field field = getField(cls, fieldName, forceAccess); + if (field == null) { + throw new IllegalArgumentException("Cannot locate field " + fieldName + " on " + cls); + } + // already forced access above, don't repeat it here: + return readStaticField(field, false); + } + + /** + * Read an accessible Field. + * + * @param field the field to use + * @param target the object to call on, may be null for static fields + * @return the field value + * @throws IllegalArgumentException if the field is null + * @throws IllegalAccessException if the field is not accessible + */ + public static Object readField(Field field, Object target) throws IllegalAccessException { + return readField(field, target, false); + } + + /** + * Read a Field. + * + * @param field the field to use + * @param target the object to call on, may be null for static fields + * @param forceAccess whether to break scope restrictions using the + * setAccessible method. + * @return the field value + * @throws IllegalArgumentException if the field is null + * @throws IllegalAccessException if the field is not made accessible + */ + public static Object readField(Field field, Object target, boolean forceAccess) throws IllegalAccessException { + if (field == null) + throw new IllegalArgumentException("The field must not be null"); + + if (forceAccess && !field.isAccessible()) { + field.setAccessible(true); + } else { + MemberUtils.setAccessibleWorkaround(field); + } + return field.get(target); + } + + /** + * Read the named public field. Superclasses will be considered. + * + * @param target the object to reflect, must not be null + * @param fieldName the field name to obtain + * @return the value of the field + * @throws IllegalArgumentException if the class or field name is null + * @throws IllegalAccessException if the named field is not public + */ + public static Object readField(Object target, String fieldName) throws IllegalAccessException { + return readField(target, fieldName, false); + } + + /** + * Read the named field. Superclasses will be considered. + * + * @param target the object to reflect, must not be null + * @param fieldName the field name to obtain + * @param forceAccess whether to break scope restrictions using the + * setAccessible method. False will + * only match public fields. + * @return the field value + * @throws IllegalArgumentException if the class or field name is null + * @throws IllegalAccessException if the named field is not made accessible + */ + public static Object readField(Object target, String fieldName, boolean forceAccess) + throws IllegalAccessException { + if (target == null) { + throw new IllegalArgumentException("target object must not be null"); + } + Class cls = target.getClass(); + Field field = getField(cls, fieldName, forceAccess); + if (field == null) { + throw new IllegalArgumentException("Cannot locate field " + fieldName + " on " + cls); + } + // already forced access above, don't repeat it here: + return readField(field, target); + } + + /** + * Write a public static Field. + * + * @param field to write + * @param value to set + * @throws IllegalArgumentException if the field is null or not static + * @throws IllegalAccessException if the field is not public or is final + */ + public static void writeStaticField(Field field, Object value) throws IllegalAccessException { + writeStaticField(field, value, false); + } + + /** + * Write a static Field. + * + * @param field to write + * @param value to set + * @param forceAccess whether to break scope restrictions using the + * setAccessible method. False will + * only match public fields. + * @throws IllegalArgumentException if the field is null or not static + * @throws IllegalAccessException if the field is not made accessible or is + * final + */ + public static void writeStaticField(Field field, Object value, boolean forceAccess) + throws IllegalAccessException { + if (field == null) { + throw new IllegalArgumentException("The field must not be null"); + } + if (!Modifier.isStatic(field.getModifiers())) { + throw new IllegalArgumentException("The field '" + field.getName() + "' is not static"); + } + writeField(field, (Object) null, value, forceAccess); + } + + /** + * Write a named public static Field. Superclasses will be considered. + * + * @param cls Class on which the Field is to be found + * @param fieldName to write + * @param value to set + * @throws IllegalArgumentException if the field cannot be located or is not + * static + * @throws IllegalAccessException if the field is not public or is final + */ + public static void writeStaticField(Class cls, String fieldName, Object value) + throws IllegalAccessException { + writeStaticField(cls, fieldName, value, false); + } + + /** + * Write a named static Field. Superclasses will be considered. + * + * @param cls Class on which the Field is to be found + * @param fieldName to write + * @param value to set + * @param forceAccess whether to break scope restrictions using the + * setAccessible method. False will + * only match public fields. + * @throws IllegalArgumentException if the field cannot be located or is not + * static + * @throws IllegalAccessException if the field is not made accessible or is + * final + */ + public static void writeStaticField(Class cls, String fieldName, Object value, + boolean forceAccess) throws IllegalAccessException { + Field field = getField(cls, fieldName, forceAccess); + if (field == null) { + throw new IllegalArgumentException("Cannot locate field " + fieldName + " on " + cls); + } + // already forced access above, don't repeat it here: + writeStaticField(field, value); + } + + /** + * Write an accessible field. + * + * @param field to write + * @param target the object to call on, may be null for static fields + * @param value to set + * @throws IllegalArgumentException if the field is null + * @throws IllegalAccessException if the field is not accessible or is final + */ + public static void writeField(Field field, Object target, Object value) + throws IllegalAccessException { + writeField(field, target, value, false); + } + + /** + * Write a field. + * + * @param field to write + * @param target the object to call on, may be null for static fields + * @param value to set + * @param forceAccess whether to break scope restrictions using the + * setAccessible method. False will + * only match public fields. + * @throws IllegalArgumentException if the field is null + * @throws IllegalAccessException if the field is not made accessible or is + * final + */ + public static void writeField(Field field, Object target, Object value, boolean forceAccess) + throws IllegalAccessException { + if (field == null) { + throw new IllegalArgumentException("The field must not be null"); + } + if (forceAccess && !field.isAccessible()) { + field.setAccessible(true); + } else { + MemberUtils.setAccessibleWorkaround(field); + } + field.set(target, value); + } + + /** + * Write a public field. Superclasses will be considered. + * + * @param target the object to reflect, must not be null + * @param fieldName the field name to obtain + * @param value to set + * @throws IllegalArgumentException if target or + * fieldName is null + * @throws IllegalAccessException if the field is not accessible + */ + public static void writeField(Object target, String fieldName, Object value) + throws IllegalAccessException { + writeField(target, fieldName, value, false); + } + + /** + * Write a field. Superclasses will be considered. + * + * @param target the object to reflect, must not be null + * @param fieldName the field name to obtain + * @param value to set + * @param forceAccess whether to break scope restrictions using the + * setAccessible method. False will + * only match public fields. + * @throws IllegalArgumentException if target or + * fieldName is null + * @throws IllegalAccessException if the field is not made accessible + */ + public static void writeField(Object target, String fieldName, Object value, boolean forceAccess) + throws IllegalAccessException { + if (target == null) { + throw new IllegalArgumentException("target object must not be null"); + } + Class cls = target.getClass(); + Field field = getField(cls, fieldName, forceAccess); + if (field == null) { + throw new IllegalArgumentException("Cannot locate declared field " + cls.getName() + + "." + fieldName); + } + // already forced access above, don't repeat it here: + writeField(field, target, value); + } + + // Useful member methods + private static class MemberUtils { + + private static final int ACCESS_TEST = Modifier.PUBLIC | Modifier.PROTECTED + | Modifier.PRIVATE; + + public static void setAccessibleWorkaround(AccessibleObject o) { + if (o == null || o.isAccessible()) { + return; + } + Member m = (Member) o; + if (Modifier.isPublic(m.getModifiers()) + && isPackageAccess(m.getDeclaringClass().getModifiers())) { + try { + o.setAccessible(true); + } catch (SecurityException e) { // NOPMD + // ignore in favor of subsequent IllegalAccessException + } + } + } + + /** + * Returns whether a given set of modifiers implies package access. + * + * @param modifiers to test + * @return true unless package/protected/private modifier detected + */ + public static boolean isPackageAccess(int modifiers) { + return (modifiers & ACCESS_TEST) == 0; + } + } +} diff --git a/ProtocolLib/src/com/comphenix/protocol/reflect/FuzzyReflection.java b/ProtocolLib/src/com/comphenix/protocol/reflect/FuzzyReflection.java new file mode 100644 index 00000000..2f729329 --- /dev/null +++ b/ProtocolLib/src/com/comphenix/protocol/reflect/FuzzyReflection.java @@ -0,0 +1,218 @@ +package com.comphenix.protocol.reflect; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.LinkedHashSet; +import java.util.Set; +import java.util.regex.Pattern; + +import org.apache.commons.lang.ArrayUtils; + +/** + * Retrieves fields and methods by signature, not just name. + * + * @author Kristian + */ +public class FuzzyReflection { + + /** + * Matches a Minecraft object. + */ + public static String MINECRAFT_OBJECT = "net\\.minecraft(\\.\\w+)+"; + + // The class we're actually representing + private Class source; + + // Whether or not to lookup private members + private boolean forceAccess; + + public FuzzyReflection(Class source, boolean forceAccess) { + this.source = source; + this.forceAccess = forceAccess; + } + + /** + * Retrieves a fuzzy reflection instance from a given class. + * @param source - the class we'll use. + * @return A fuzzy reflection instance. + */ + public static FuzzyReflection fromClass(Class source) { + return fromClass(source, false); + } + + /** + * Retrieves a fuzzy reflection instance from a given class. + * @param source - the class we'll use. + * @param forceAccess - whether or not to override scope restrictions. + * @return A fuzzy reflection instance. + */ + public static FuzzyReflection fromClass(Class source, boolean forceAccess) { + return new FuzzyReflection(source, forceAccess); + } + + /** + * Retrieves a fuzzy reflection instance from an object. + * @param reference - the object we'll use. + * @return A fuzzy reflection instance that uses the class of the given object. + */ + public static FuzzyReflection fromObject(Object reference) { + return new FuzzyReflection(reference.getClass(), false); + } + + /** + * Retrieves a fuzzy reflection instance from an object. + * @param reference - the object we'll use. + * @param forceAccess - whether or not to override scope restrictions. + * @return A fuzzy reflection instance that uses the class of the given object. + */ + public static FuzzyReflection fromObject(Object reference, boolean forceAccess) { + return new FuzzyReflection(reference.getClass(), forceAccess); + } + + /** + * Retrieves the underlying class. + */ + public Class getSource() { + return source; + } + + /** + * Retrieves a method by looking at its name. + * @param nameRegex - regular expression that will match method names. + * @return The first method that satisfies the regular expression. + */ + public Method getMethodByName(String nameRegex) { + + Pattern match = Pattern.compile(nameRegex); + + for (Method method : getMethods()) { + if (match.matcher(method.getName()).matches()) { + // Right - this is probably it. + return method; + } + } + + throw new RuntimeException("Unable to find a method with the pattern " + + nameRegex + " in " + source.getName()); + } + + /** + * Retrieves a method by looking at the parameter types only. + * @param name - potential name of the method. Only used by the error mechanism. + * @param args - parameter types of the method to find. + * @return The first method that satisfies the parameter types. + */ + public Method getMethodByParameters(String name, Class... args) { + + // Find the correct method to call + for (Method method : getMethods()) { + if (ArrayUtils.isEquals(method.getParameterTypes(), args)) { + return method; + } + } + + // That sucks + throw new RuntimeException("Unable to find " + name + " in " + source.getName()); + } + + /** + * Retrieves a field by name. + * @param nameRegex - regular expression that will match a field name. + * @return The first field to match the given expression. + */ + public Field getFieldByName(String nameRegex) { + + Pattern match = Pattern.compile(nameRegex); + + for (Field field : getFields()) { + if (match.matcher(field.getName()).matches()) { + // Right - this is probably it. + return field; + } + } + + // Looks like we're outdated. Too bad. + throw new RuntimeException("Unable to find a field with the pattern " + + nameRegex + " in " + source.getName()); + } + + /** + * Retrieves a field by type. + *

+ * Note that the type is matched using the full canonical representation, i.e.: + *

    + *
  • java.util.List
  • + *
  • net.comphenix.xp.ExperienceMod
  • + *
+ * @param typeRegex - regular expression that will match the field type. + * @return The first field with a type that matches the given regular expression. + */ + public Field getFieldByType(String typeRegex) { + + Pattern match = Pattern.compile(typeRegex); + + // Like above, only here we test the field type + for (Field field : getFields()) { + if (match.matcher(field.getType().getName()).matches()) { + return field; + } + } + + // Looks like we're outdated. Too bad. + throw new RuntimeException("Unable to find a field with the type " + + typeRegex + " in " + source.getName()); + } + + /** + * Retrieves all private and public fields in declared order (after JDK 1.5). + * @return Every field. + */ + public Set getFields() { + // We will only consider private fields in the declared class + if (forceAccess) + return setUnion(source.getDeclaredFields(), source.getFields()); + else + return setUnion(source.getFields()); + } + + /** + * Retrieves all private and public methods in declared order (after JDK 1.5). + * @return Every method. + */ + public Set getMethods() { + // We will only consider private methods in the declared class + if (forceAccess) + return setUnion(source.getDeclaredMethods(), source.getMethods()); + else + return setUnion(source.getMethods()); + } + + // Prevent duplicate fields + private static Set setUnion(T[]... array) { + Set result = new LinkedHashSet(); + + for (T[] elements : array) { + for (T element : elements) { + result.add(element); + } + } + + return result; + } + + /** + * Retrieves whether or not not to override any scope restrictions. + * @return TRUE if we override scope, FALSE otherwise. + */ + public boolean isForceAccess() { + return forceAccess; + } + + /** + * Sets whether or not not to override any scope restrictions. + * @param forceAccess - TRUE if we override scope, FALSE otherwise. + */ + public void setForceAccess(boolean forceAccess) { + this.forceAccess = forceAccess; + } +} diff --git a/ProtocolLib/src/com/comphenix/protocol/reflect/MethodUtils.java b/ProtocolLib/src/com/comphenix/protocol/reflect/MethodUtils.java new file mode 100644 index 00000000..324c823d --- /dev/null +++ b/ProtocolLib/src/com/comphenix/protocol/reflect/MethodUtils.java @@ -0,0 +1,1325 @@ +package com.comphenix.protocol.reflect; + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.lang.ref.Reference; +import java.lang.ref.WeakReference; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.Collections; +import java.util.Map; +import java.util.WeakHashMap; +import java.util.logging.Logger; + +import org.bukkit.Bukkit; + +/** + *

Utility reflection methods focussed on methods in general rather than properties in particular.

+ * + *

Known Limitations

+ *

Accessing Public Methods In A Default Access Superclass

+ *

There is an issue when invoking public methods contained in a default access superclass. + * Reflection locates these methods fine and correctly assigns them as public. + * However, an IllegalAccessException is thrown if the method is invoked.

+ * + *

MethodUtils contains a workaround for this situation. + * It will attempt to call setAccessible on this method. + * If this call succeeds, then the method can be invoked as normal. + * This call will only succeed when the application has sufficient security privilages. + * If this call fails then a warning will be logged and the method may fail.

+ * + * @author Craig R. McClanahan + * @author Ralph Schaer + * @author Chris Audley + * @author Rey François + * @author Gregor Raýman + * @author Jan Sorensen + * @author Robert Burrell Donkin + */ + +@SuppressWarnings("rawtypes") +public class MethodUtils { + + // --------------------------------------------------------- Private Methods + + /** + * Only log warning about accessibility work around once. + *

+ * Note that this is broken when this class is deployed via a shared + * classloader in a container, as the warning message will be emitted + * only once, not once per webapp. However making the warning appear + * once per webapp means having a map keyed by context classloader + * which introduces nasty memory-leak problems. As this warning is + * really optional we can ignore this problem; only one of the webapps + * will get the warning in its logs but that should be good enough. + */ + private static boolean loggedAccessibleWarning = false; + + /** + * Indicates whether methods should be cached for improved performance. + *

+ * Note that when this class is deployed via a shared classloader in + * a container, this will affect all webapps. However making this + * configurable per webapp would mean having a map keyed by context classloader + * which may introduce memory-leak problems. + */ + private static boolean CACHE_METHODS = true; + + /** An empty class array */ + private static final Class[] EMPTY_CLASS_PARAMETERS = new Class[0]; + /** An empty object array */ + private static final Object[] EMPTY_OBJECT_ARRAY = new Object[0]; + + /** + * Stores a cache of MethodDescriptor -> Method in a WeakHashMap. + *

+ * The keys into this map only ever exist as temporary variables within + * methods of this class, and are never exposed to users of this class. + * This means that the WeakHashMap is used only as a mechanism for + * limiting the size of the cache, ie a way to tell the garbage collector + * that the contents of the cache can be completely garbage-collected + * whenever it needs the memory. Whether this is a good approach to + * this problem is doubtful; something like the commons-collections + * LRUMap may be more appropriate (though of course selecting an + * appropriate size is an issue). + *

+ * This static variable is safe even when this code is deployed via a + * shared classloader because it is keyed via a MethodDescriptor object + * which has a Class as one of its members and that member is used in + * the MethodDescriptor.equals method. So two components that load the same + * class via different classloaders will generate non-equal MethodDescriptor + * objects and hence end up with different entries in the map. + */ + @SuppressWarnings("unchecked") + private static final Map cache = Collections.synchronizedMap(new WeakHashMap()); + + // --------------------------------------------------------- Public Methods + + /** + * Set whether methods should be cached for greater performance or not, + * default is true. + * + * @param cacheMethods true if methods should be + * cached for greater performance, otherwise false + * @since 1.8.0 + */ + public static synchronized void setCacheMethods(boolean cacheMethods) { + CACHE_METHODS = cacheMethods; + if (!CACHE_METHODS) { + clearCache(); + } + } + + /** + * Clear the method cache. + * @return the number of cached methods cleared + * @since 1.8.0 + */ + public static synchronized int clearCache() { + int size = cache.size(); + cache.clear(); + return size; + } + + /** + *

Invoke a named method whose parameter type matches the object type.

+ * + *

The behaviour of this method is less deterministic + * than invokeExactMethod(). + * It loops through all methods with names that match + * and then executes the first it finds with compatable parameters.

+ * + *

This method supports calls to methods taking primitive parameters + * via passing in wrapping classes. So, for example, a Boolean class + * would match a boolean primitive.

+ * + *

This is a convenient wrapper for + * {@link #invokeMethod(Object object,String methodName,Object [] args)}. + *

+ * + * @param object invoke method on this object + * @param methodName get method with this name + * @param arg use this argument + * @return The value returned by the invoked method + * + * @throws NoSuchMethodException if there is no such accessible method + * @throws InvocationTargetException wraps an exception thrown by the + * method invoked + * @throws IllegalAccessException if the requested method is not accessible + * via reflection + */ + public static Object invokeMethod( + Object object, + String methodName, + Object arg) + throws + NoSuchMethodException, + IllegalAccessException, + InvocationTargetException { + + Object[] args = {arg}; + return invokeMethod(object, methodName, args); + + } + + + /** + *

Invoke a named method whose parameter type matches the object type.

+ * + *

The behaviour of this method is less deterministic + * than {@link #invokeExactMethod(Object object,String methodName,Object [] args)}. + * It loops through all methods with names that match + * and then executes the first it finds with compatable parameters.

+ * + *

This method supports calls to methods taking primitive parameters + * via passing in wrapping classes. So, for example, a Boolean class + * would match a boolean primitive.

+ * + *

This is a convenient wrapper for + * {@link #invokeMethod(Object object,String methodName,Object [] args,Class[] parameterTypes)}. + *

+ * + * @param object invoke method on this object + * @param methodName get method with this name + * @param args use these arguments - treat null as empty array + * @return The value returned by the invoked method + * + * @throws NoSuchMethodException if there is no such accessible method + * @throws InvocationTargetException wraps an exception thrown by the + * method invoked + * @throws IllegalAccessException if the requested method is not accessible + * via reflection + */ + public static Object invokeMethod( + Object object, + String methodName, + Object[] args) + throws + NoSuchMethodException, + IllegalAccessException, + InvocationTargetException { + + if (args == null) { + args = EMPTY_OBJECT_ARRAY; + } + int arguments = args.length; + Class[] parameterTypes = new Class[arguments]; + for (int i = 0; i < arguments; i++) { + parameterTypes[i] = args[i].getClass(); + } + return invokeMethod(object, methodName, args, parameterTypes); + + } + + + /** + *

Invoke a named method whose parameter type matches the object type.

+ * + *

The behaviour of this method is less deterministic + * than {@link + * #invokeExactMethod(Object object,String methodName,Object [] args,Class[] parameterTypes)}. + * It loops through all methods with names that match + * and then executes the first it finds with compatable parameters.

+ * + *

This method supports calls to methods taking primitive parameters + * via passing in wrapping classes. So, for example, a Boolean class + * would match a boolean primitive.

+ * + * + * @param object invoke method on this object + * @param methodName get method with this name + * @param args use these arguments - treat null as empty array + * @param parameterTypes match these parameters - treat null as empty array + * @return The value returned by the invoked method + * + * @throws NoSuchMethodException if there is no such accessible method + * @throws InvocationTargetException wraps an exception thrown by the + * method invoked + * @throws IllegalAccessException if the requested method is not accessible + * via reflection + */ + public static Object invokeMethod( + Object object, + String methodName, + Object[] args, + Class[] parameterTypes) + throws + NoSuchMethodException, + IllegalAccessException, + InvocationTargetException { + + if (parameterTypes == null) { + parameterTypes = EMPTY_CLASS_PARAMETERS; + } + if (args == null) { + args = EMPTY_OBJECT_ARRAY; + } + + Method method = getMatchingAccessibleMethod( + object.getClass(), + methodName, + parameterTypes); + if (method == null) { + throw new NoSuchMethodException("No such accessible method: " + + methodName + "() on object: " + object.getClass().getName()); + } + return method.invoke(object, args); + } + + + /** + *

Invoke a method whose parameter type matches exactly the object + * type.

+ * + *

This is a convenient wrapper for + * {@link #invokeExactMethod(Object object,String methodName,Object [] args)}. + *

+ * + * @param object invoke method on this object + * @param methodName get method with this name + * @param arg use this argument + * @return The value returned by the invoked method + * + * @throws NoSuchMethodException if there is no such accessible method + * @throws InvocationTargetException wraps an exception thrown by the + * method invoked + * @throws IllegalAccessException if the requested method is not accessible + * via reflection + */ + public static Object invokeExactMethod( + Object object, + String methodName, + Object arg) + throws + NoSuchMethodException, + IllegalAccessException, + InvocationTargetException { + + Object[] args = {arg}; + return invokeExactMethod(object, methodName, args); + + } + + + /** + *

Invoke a method whose parameter types match exactly the object + * types.

+ * + *

This uses reflection to invoke the method obtained from a call to + * getAccessibleMethod().

+ * + * @param object invoke method on this object + * @param methodName get method with this name + * @param args use these arguments - treat null as empty array + * @return The value returned by the invoked method + * + * @throws NoSuchMethodException if there is no such accessible method + * @throws InvocationTargetException wraps an exception thrown by the + * method invoked + * @throws IllegalAccessException if the requested method is not accessible + * via reflection + */ + public static Object invokeExactMethod( + Object object, + String methodName, + Object[] args) + throws + NoSuchMethodException, + IllegalAccessException, + InvocationTargetException { + if (args == null) { + args = EMPTY_OBJECT_ARRAY; + } + int arguments = args.length; + Class[] parameterTypes = new Class[arguments]; + for (int i = 0; i < arguments; i++) { + parameterTypes[i] = args[i].getClass(); + } + return invokeExactMethod(object, methodName, args, parameterTypes); + + } + + + /** + *

Invoke a method whose parameter types match exactly the parameter + * types given.

+ * + *

This uses reflection to invoke the method obtained from a call to + * getAccessibleMethod().

+ * + * @param object invoke method on this object + * @param methodName get method with this name + * @param args use these arguments - treat null as empty array + * @param parameterTypes match these parameters - treat null as empty array + * @return The value returned by the invoked method + * + * @throws NoSuchMethodException if there is no such accessible method + * @throws InvocationTargetException wraps an exception thrown by the + * method invoked + * @throws IllegalAccessException if the requested method is not accessible + * via reflection + */ + public static Object invokeExactMethod( + Object object, + String methodName, + Object[] args, + Class[] parameterTypes) + throws + NoSuchMethodException, + IllegalAccessException, + InvocationTargetException { + + if (args == null) { + args = EMPTY_OBJECT_ARRAY; + } + + if (parameterTypes == null) { + parameterTypes = EMPTY_CLASS_PARAMETERS; + } + + Method method = getAccessibleMethod( + object.getClass(), + methodName, + parameterTypes); + if (method == null) { + throw new NoSuchMethodException("No such accessible method: " + + methodName + "() on object: " + object.getClass().getName()); + } + return method.invoke(object, args); + + } + + /** + *

Invoke a static method whose parameter types match exactly the parameter + * types given.

+ * + *

This uses reflection to invoke the method obtained from a call to + * {@link #getAccessibleMethod(Class, String, Class[])}.

+ * + * @param objectClass invoke static method on this class + * @param methodName get method with this name + * @param args use these arguments - treat null as empty array + * @param parameterTypes match these parameters - treat null as empty array + * @return The value returned by the invoked method + * + * @throws NoSuchMethodException if there is no such accessible method + * @throws InvocationTargetException wraps an exception thrown by the + * method invoked + * @throws IllegalAccessException if the requested method is not accessible + * via reflection + * @since 1.8.0 + */ + public static Object invokeExactStaticMethod( + Class objectClass, + String methodName, + Object[] args, + Class[] parameterTypes) + throws + NoSuchMethodException, + IllegalAccessException, + InvocationTargetException { + + if (args == null) { + args = EMPTY_OBJECT_ARRAY; + } + + if (parameterTypes == null) { + parameterTypes = EMPTY_CLASS_PARAMETERS; + } + + Method method = getAccessibleMethod( + objectClass, + methodName, + parameterTypes); + if (method == null) { + throw new NoSuchMethodException("No such accessible method: " + + methodName + "() on class: " + objectClass.getName()); + } + return method.invoke(null, args); + + } + + /** + *

Invoke a named static method whose parameter type matches the object type.

+ * + *

The behaviour of this method is less deterministic + * than {@link #invokeExactMethod(Object, String, Object[], Class[])}. + * It loops through all methods with names that match + * and then executes the first it finds with compatable parameters.

+ * + *

This method supports calls to methods taking primitive parameters + * via passing in wrapping classes. So, for example, a Boolean class + * would match a boolean primitive.

+ * + *

This is a convenient wrapper for + * {@link #invokeStaticMethod(Class objectClass,String methodName,Object [] args)}. + *

+ * + * @param objectClass invoke static method on this class + * @param methodName get method with this name + * @param arg use this argument + * @return The value returned by the invoked method + * + * @throws NoSuchMethodException if there is no such accessible method + * @throws InvocationTargetException wraps an exception thrown by the + * method invoked + * @throws IllegalAccessException if the requested method is not accessible + * via reflection + * @since 1.8.0 + */ + public static Object invokeStaticMethod( + Class objectClass, + String methodName, + Object arg) + throws + NoSuchMethodException, + IllegalAccessException, + InvocationTargetException { + + Object[] args = {arg}; + return invokeStaticMethod (objectClass, methodName, args); + + } + + + /** + *

Invoke a named static method whose parameter type matches the object type.

+ * + *

The behaviour of this method is less deterministic + * than {@link #invokeExactMethod(Object object,String methodName,Object [] args)}. + * It loops through all methods with names that match + * and then executes the first it finds with compatable parameters.

+ * + *

This method supports calls to methods taking primitive parameters + * via passing in wrapping classes. So, for example, a Boolean class + * would match a boolean primitive.

+ * + *

This is a convenient wrapper for + * {@link #invokeStaticMethod(Class objectClass,String methodName,Object [] args,Class[] parameterTypes)}. + *

+ * + * @param objectClass invoke static method on this class + * @param methodName get method with this name + * @param args use these arguments - treat null as empty array + * @return The value returned by the invoked method + * + * @throws NoSuchMethodException if there is no such accessible method + * @throws InvocationTargetException wraps an exception thrown by the + * method invoked + * @throws IllegalAccessException if the requested method is not accessible + * via reflection + * @since 1.8.0 + */ + public static Object invokeStaticMethod( + Class objectClass, + String methodName, + Object[] args) + throws + NoSuchMethodException, + IllegalAccessException, + InvocationTargetException { + + if (args == null) { + args = EMPTY_OBJECT_ARRAY; + } + int arguments = args.length; + Class[] parameterTypes = new Class[arguments]; + for (int i = 0; i < arguments; i++) { + parameterTypes[i] = args[i].getClass(); + } + return invokeStaticMethod (objectClass, methodName, args, parameterTypes); + + } + + + /** + *

Invoke a named static method whose parameter type matches the object type.

+ * + *

The behaviour of this method is less deterministic + * than {@link + * #invokeExactStaticMethod(Class objectClass,String methodName,Object [] args,Class[] parameterTypes)}. + * It loops through all methods with names that match + * and then executes the first it finds with compatable parameters.

+ * + *

This method supports calls to methods taking primitive parameters + * via passing in wrapping classes. So, for example, a Boolean class + * would match a boolean primitive.

+ * + * + * @param objectClass invoke static method on this class + * @param methodName get method with this name + * @param args use these arguments - treat null as empty array + * @param parameterTypes match these parameters - treat null as empty array + * @return The value returned by the invoked method + * + * @throws NoSuchMethodException if there is no such accessible method + * @throws InvocationTargetException wraps an exception thrown by the + * method invoked + * @throws IllegalAccessException if the requested method is not accessible + * via reflection + * @since 1.8.0 + */ + public static Object invokeStaticMethod( + Class objectClass, + String methodName, + Object[] args, + Class[] parameterTypes) + throws + NoSuchMethodException, + IllegalAccessException, + InvocationTargetException { + + if (parameterTypes == null) { + parameterTypes = EMPTY_CLASS_PARAMETERS; + } + if (args == null) { + args = EMPTY_OBJECT_ARRAY; + } + + Method method = getMatchingAccessibleMethod( + objectClass, + methodName, + parameterTypes); + if (method == null) { + throw new NoSuchMethodException("No such accessible method: " + + methodName + "() on class: " + objectClass.getName()); + } + return method.invoke(null, args); + } + + + /** + *

Invoke a static method whose parameter type matches exactly the object + * type.

+ * + *

This is a convenient wrapper for + * {@link #invokeExactStaticMethod(Class objectClass,String methodName,Object [] args)}. + *

+ * + * @param objectClass invoke static method on this class + * @param methodName get method with this name + * @param arg use this argument + * @return The value returned by the invoked method + * + * @throws NoSuchMethodException if there is no such accessible method + * @throws InvocationTargetException wraps an exception thrown by the + * method invoked + * @throws IllegalAccessException if the requested method is not accessible + * via reflection + * @since 1.8.0 + */ + public static Object invokeExactStaticMethod( + Class objectClass, + String methodName, + Object arg) + throws + NoSuchMethodException, + IllegalAccessException, + InvocationTargetException { + + Object[] args = {arg}; + return invokeExactStaticMethod (objectClass, methodName, args); + + } + + + /** + *

Invoke a static method whose parameter types match exactly the object + * types.

+ * + *

This uses reflection to invoke the method obtained from a call to + * {@link #getAccessibleMethod(Class, String, Class[])}.

+ * + * @param objectClass invoke static method on this class + * @param methodName get method with this name + * @param args use these arguments - treat null as empty array + * @return The value returned by the invoked method + * + * @throws NoSuchMethodException if there is no such accessible method + * @throws InvocationTargetException wraps an exception thrown by the + * method invoked + * @throws IllegalAccessException if the requested method is not accessible + * via reflection + * @since 1.8.0 + */ + public static Object invokeExactStaticMethod( + Class objectClass, + String methodName, + Object[] args) + throws + NoSuchMethodException, + IllegalAccessException, + InvocationTargetException { + if (args == null) { + args = EMPTY_OBJECT_ARRAY; + } + int arguments = args.length; + Class[] parameterTypes = new Class[arguments]; + for (int i = 0; i < arguments; i++) { + parameterTypes[i] = args[i].getClass(); + } + return invokeExactStaticMethod(objectClass, methodName, args, parameterTypes); + + } + + /** + *

Return an accessible method (that is, one that can be invoked via + * reflection) with given name and parameters. If no such method + * can be found, return null. + * This is just a convenient wrapper for + * {@link #getAccessibleMethod(Method method)}.

+ * + * @param clazz get method from this class + * @param methodName get method with this name + * @param parameterTypes with these parameters types + * @return The accessible method + */ + @SuppressWarnings("unchecked") + public static Method getAccessibleMethod( + Class clazz, + String methodName, + Class[] parameterTypes) { + + try { + MethodDescriptor md = new MethodDescriptor(clazz, methodName, parameterTypes, true); + // Check the cache first + Method method = getCachedMethod(md); + if (method != null) { + return method; + } + + method = getAccessibleMethod + (clazz, clazz.getMethod(methodName, parameterTypes)); + cacheMethod(md, method); + return method; + } catch (NoSuchMethodException e) { + return (null); + } + + } + + + /** + *

Return an accessible method (that is, one that can be invoked via + * reflection) that implements the specified Method. If no such method + * can be found, return null.

+ * + * @param method The method that we wish to call + * @return The accessible method + */ + public static Method getAccessibleMethod(Method method) { + + // Make sure we have a method to check + if (method == null) { + return (null); + } + + return getAccessibleMethod(method.getDeclaringClass(), method); + + } + + /** + *

Return an accessible method (that is, one that can be invoked via + * reflection) that implements the specified Method. If no such method + * can be found, return null.

+ * + * @param clazz The class of the object + * @param method The method that we wish to call + * @return The accessible method + * @since 1.8.0 + */ + public static Method getAccessibleMethod(Class clazz, Method method) { + + // Make sure we have a method to check + if (method == null) { + return (null); + } + + // If the requested method is not public we cannot call it + if (!Modifier.isPublic(method.getModifiers())) { + return (null); + } + + boolean sameClass = true; + if (clazz == null) { + clazz = method.getDeclaringClass(); + } else { + sameClass = clazz.equals(method.getDeclaringClass()); + if (!method.getDeclaringClass().isAssignableFrom(clazz)) { + throw new IllegalArgumentException(clazz.getName() + + " is not assignable from " + method.getDeclaringClass().getName()); + } + } + + // If the class is public, we are done + if (Modifier.isPublic(clazz.getModifiers())) { + if (!sameClass && !Modifier.isPublic(method.getDeclaringClass().getModifiers())) { + setMethodAccessible(method); // Default access superclass workaround + } + return (method); + } + + String methodName = method.getName(); + Class[] parameterTypes = method.getParameterTypes(); + + // Check the implemented interfaces and subinterfaces + method = + getAccessibleMethodFromInterfaceNest(clazz, + methodName, + parameterTypes); + + // Check the superclass chain + if (method == null) { + method = getAccessibleMethodFromSuperclass(clazz, + methodName, + parameterTypes); + } + + return (method); + + } + + + // -------------------------------------------------------- Private Methods + + /** + *

Return an accessible method (that is, one that can be invoked via + * reflection) by scanning through the superclasses. If no such method + * can be found, return null.

+ * + * @param clazz Class to be checked + * @param methodName Method name of the method we wish to call + * @param parameterTypes The parameter type signatures + */ + @SuppressWarnings("unchecked") + private static Method getAccessibleMethodFromSuperclass + (Class clazz, String methodName, Class[] parameterTypes) { + + Class parentClazz = clazz.getSuperclass(); + while (parentClazz != null) { + if (Modifier.isPublic(parentClazz.getModifiers())) { + try { + return parentClazz.getMethod(methodName, parameterTypes); + } catch (NoSuchMethodException e) { + return null; + } + } + parentClazz = parentClazz.getSuperclass(); + } + return null; + } + + /** + *

Return an accessible method (that is, one that can be invoked via + * reflection) that implements the specified method, by scanning through + * all implemented interfaces and subinterfaces. If no such method + * can be found, return null.

+ * + *

There isn't any good reason why this method must be private. + * It is because there doesn't seem any reason why other classes should + * call this rather than the higher level methods.

+ * + * @param clazz Parent class for the interfaces to be checked + * @param methodName Method name of the method we wish to call + * @param parameterTypes The parameter type signatures + */ + @SuppressWarnings("unchecked") + private static Method getAccessibleMethodFromInterfaceNest + (Class clazz, String methodName, Class[] parameterTypes) { + + Method method = null; + + // Search up the superclass chain + for (; clazz != null; clazz = clazz.getSuperclass()) { + + // Check the implemented interfaces of the parent class + Class[] interfaces = clazz.getInterfaces(); + for (int i = 0; i < interfaces.length; i++) { + + // Is this interface public? + if (!Modifier.isPublic(interfaces[i].getModifiers())) { + continue; + } + + // Does the method exist on this interface? + try { + method = interfaces[i].getDeclaredMethod(methodName, + parameterTypes); + } catch (NoSuchMethodException e) { + /* Swallow, if no method is found after the loop then this + * method returns null. + */ + } + if (method != null) { + return method; + } + + // Recursively check our parent interfaces + method = + getAccessibleMethodFromInterfaceNest(interfaces[i], + methodName, + parameterTypes); + if (method != null) { + return method; + } + + } + + } + + // We did not find anything + return (null); + + } + + /** + *

Find an accessible method that matches the given name and has compatible parameters. + * Compatible parameters mean that every method parameter is assignable from + * the given parameters. + * In other words, it finds a method with the given name + * that will take the parameters given.

+ * + *

This method is slightly undeterminstic since it loops + * through methods names and return the first matching method.

+ * + *

This method is used by + * {@link + * #invokeMethod(Object object,String methodName,Object [] args,Class[] parameterTypes)}. + * + *

This method can match primitive parameter by passing in wrapper classes. + * For example, a Boolean will match a primitive boolean + * parameter. + * + * @param clazz find method in this class + * @param methodName find method with this name + * @param parameterTypes find method with compatible parameters + * @return The accessible method + */ + @SuppressWarnings("unchecked") + public static Method getMatchingAccessibleMethod( + Class clazz, + String methodName, + Class[] parameterTypes) { + + MethodDescriptor md = new MethodDescriptor(clazz, methodName, parameterTypes, false); + Logger log = tryGetLogger(); + + // see if we can find the method directly + // most of the time this works and it's much faster + try { + // Check the cache first + Method method = getCachedMethod(md); + if (method != null) { + return method; + } + + method = clazz.getMethod(methodName, parameterTypes); + + setMethodAccessible(method); // Default access superclass workaround + + cacheMethod(md, method); + return method; + + } catch (NoSuchMethodException e) { /* SWALLOW */ } + + // search through all methods + int paramSize = parameterTypes.length; + Method bestMatch = null; + Method[] methods = clazz.getMethods(); + float bestMatchCost = Float.MAX_VALUE; + float myCost = Float.MAX_VALUE; + for (int i = 0, size = methods.length; i < size ; i++) { + if (methods[i].getName().equals(methodName)) { + + // compare parameters + Class[] methodsParams = methods[i].getParameterTypes(); + int methodParamSize = methodsParams.length; + if (methodParamSize == paramSize) { + boolean match = true; + for (int n = 0 ; n < methodParamSize; n++) { + if (!isAssignmentCompatible(methodsParams[n], parameterTypes[n])) { + match = false; + break; + } + } + + if (match) { + // get accessible version of method + Method method = getAccessibleMethod(clazz, methods[i]); + if (method != null) { + setMethodAccessible(method); // Default access superclass workaround + myCost = getTotalTransformationCost(parameterTypes,method.getParameterTypes()); + if ( myCost < bestMatchCost ) { + bestMatch = method; + bestMatchCost = myCost; + } + } + + if (log != null) { + //log.severe("Couldn't find accessible method."); + } + } + } + } + } + if ( bestMatch != null ){ + cacheMethod(md, bestMatch); + } else { + if (log != null) { + log.severe("No match found."); + } + } + + return bestMatch; + } + + /** + * Attempt to get the default logger from Bukkit. + * @return Bukkit default logger. + */ + private static Logger tryGetLogger() { + try { + return Bukkit.getLogger(); + } catch (Exception e) { + return null; + } + } + + /** + * Try to make the method accessible + * @param method The source arguments + */ + private static void setMethodAccessible(Method method) { + try { + // + // + // When a public class has a default access superclass + // with public methods, these methods are accessible. + // Calling them from compiled code works fine. + // + // Unfortunately, using reflection to invoke these methods + // seems to (wrongly) to prevent access even when the method + // modifer is public. + // + // The following workaround solves the problem but will only + // work from sufficiently privilages code. + // + // Better workarounds would be greatfully accepted. + // + if (!method.isAccessible()) { + method.setAccessible(true); + } + + } catch (SecurityException se) { + + if (!loggedAccessibleWarning) { + boolean vulnerableJVM = false; + try { + String specVersion = System.getProperty("java.specification.version"); + if (specVersion.charAt(0) == '1' && + (specVersion.charAt(2) == '0' || + specVersion.charAt(2) == '1' || + specVersion.charAt(2) == '2' || + specVersion.charAt(2) == '3')) { + + vulnerableJVM = true; + } + } catch (SecurityException e) { + // don't know - so display warning + vulnerableJVM = true; + } + if (vulnerableJVM && tryGetLogger() != null) { + tryGetLogger().info("Vulnerable JVM!"); + } + + loggedAccessibleWarning = true; + } + } + } + + /** + * Returns the sum of the object transformation cost for each class in the source + * argument list. + * @param srcArgs The source arguments + * @param destArgs The destination arguments + * @return The total transformation cost + */ + private static float getTotalTransformationCost(Class[] srcArgs, Class[] destArgs) { + + float totalCost = 0.0f; + for (int i = 0; i < srcArgs.length; i++) { + Class srcClass, destClass; + srcClass = srcArgs[i]; + destClass = destArgs[i]; + totalCost += getObjectTransformationCost(srcClass, destClass); + } + + return totalCost; + } + + /** + * Gets the number of steps required needed to turn the source class into the + * destination class. This represents the number of steps in the object hierarchy + * graph. + * @param srcClass The source class + * @param destClass The destination class + * @return The cost of transforming an object + */ + private static float getObjectTransformationCost(Class srcClass, Class destClass) { + float cost = 0.0f; + while (destClass != null && !destClass.equals(srcClass)) { + if (destClass.isInterface() && isAssignmentCompatible(destClass,srcClass)) { + // slight penalty for interface match. + // we still want an exact match to override an interface match, but + // an interface match should override anything where we have to get a + // superclass. + cost += 0.25f; + break; + } + cost++; + destClass = destClass.getSuperclass(); + } + + /* + * If the destination class is null, we've travelled all the way up to + * an Object match. We'll penalize this by adding 1.5 to the cost. + */ + if (destClass == null) { + cost += 1.5f; + } + + return cost; + } + + + /** + *

Determine whether a type can be used as a parameter in a method invocation. + * This method handles primitive conversions correctly.

+ * + *

In order words, it will match a Boolean to a boolean, + * a Long to a long, + * a Float to a float, + * a Integer to a int, + * and a Double to a double. + * Now logic widening matches are allowed. + * For example, a Long will not match a int. + * + * @param parameterType the type of parameter accepted by the method + * @param parameterization the type of parameter being tested + * + * @return true if the assignement is compatible. + */ + @SuppressWarnings("unchecked") + public static final boolean isAssignmentCompatible(Class parameterType, Class parameterization) { + // try plain assignment + if (parameterType.isAssignableFrom(parameterization)) { + return true; + } + + if (parameterType.isPrimitive()) { + // this method does *not* do widening - you must specify exactly + // is this the right behaviour? + Class parameterWrapperClazz = getPrimitiveWrapper(parameterType); + if (parameterWrapperClazz != null) { + return parameterWrapperClazz.equals(parameterization); + } + } + + return false; + } + + /** + * Gets the wrapper object class for the given primitive type class. + * For example, passing boolean.class returns Boolean.class + * @param primitiveType the primitive type class for which a match is to be found + * @return the wrapper type associated with the given primitive + * or null if no match is found + */ + public static Class getPrimitiveWrapper(Class primitiveType) { + // does anyone know a better strategy than comparing names? + if (boolean.class.equals(primitiveType)) { + return Boolean.class; + } else if (float.class.equals(primitiveType)) { + return Float.class; + } else if (long.class.equals(primitiveType)) { + return Long.class; + } else if (int.class.equals(primitiveType)) { + return Integer.class; + } else if (short.class.equals(primitiveType)) { + return Short.class; + } else if (byte.class.equals(primitiveType)) { + return Byte.class; + } else if (double.class.equals(primitiveType)) { + return Double.class; + } else if (char.class.equals(primitiveType)) { + return Character.class; + } else { + + return null; + } + } + + /** + * Gets the class for the primitive type corresponding to the primitive wrapper class given. + * For example, an instance of Boolean.class returns a boolean.class. + * @param wrapperType the + * @return the primitive type class corresponding to the given wrapper class, + * null if no match is found + */ + public static Class getPrimitiveType(Class wrapperType) { + // does anyone know a better strategy than comparing names? + if (Boolean.class.equals(wrapperType)) { + return boolean.class; + } else if (Float.class.equals(wrapperType)) { + return float.class; + } else if (Long.class.equals(wrapperType)) { + return long.class; + } else if (Integer.class.equals(wrapperType)) { + return int.class; + } else if (Short.class.equals(wrapperType)) { + return short.class; + } else if (Byte.class.equals(wrapperType)) { + return byte.class; + } else if (Double.class.equals(wrapperType)) { + return double.class; + } else if (Character.class.equals(wrapperType)) { + return char.class; + } else { + return null; + } + } + + /** + * Find a non primitive representation for given primitive class. + * + * @param clazz the class to find a representation for, not null + * @return the original class if it not a primitive. Otherwise the wrapper class. Not null + */ + public static Class toNonPrimitiveClass(Class clazz) { + if (clazz.isPrimitive()) { + Class primitiveClazz = MethodUtils.getPrimitiveWrapper(clazz); + // the above method returns + if (primitiveClazz != null) { + return primitiveClazz; + } else { + return clazz; + } + } else { + return clazz; + } + } + + + /** + * Return the method from the cache, if present. + * + * @param md The method descriptor + * @return The cached method + */ + private static Method getCachedMethod(MethodDescriptor md) { + if (CACHE_METHODS) { + Reference methodRef = (Reference)cache.get(md); + if (methodRef != null) { + return (Method)methodRef.get(); + } + } + return null; + } + + /** + * Add a method to the cache. + * + * @param md The method descriptor + * @param method The method to cache + */ + @SuppressWarnings("unchecked") + private static void cacheMethod(MethodDescriptor md, Method method) { + if (CACHE_METHODS) { + if (method != null) { + cache.put(md, new WeakReference(method)); + } + } + } + + /** + * Represents the key to looking up a Method by reflection. + */ + private static class MethodDescriptor { + private Class cls; + private String methodName; + private Class[] paramTypes; + private boolean exact; + private int hashCode; + + /** + * The sole constructor. + * + * @param cls the class to reflect, must not be null + * @param methodName the method name to obtain + * @param paramTypes the array of classes representing the paramater types + * @param exact whether the match has to be exact. + */ + public MethodDescriptor(Class cls, String methodName, Class[] paramTypes, boolean exact) { + if (cls == null) { + throw new IllegalArgumentException("Class cannot be null"); + } + if (methodName == null) { + throw new IllegalArgumentException("Method Name cannot be null"); + } + if (paramTypes == null) { + paramTypes = EMPTY_CLASS_PARAMETERS; + } + + this.cls = cls; + this.methodName = methodName; + this.paramTypes = paramTypes; + this.exact= exact; + + this.hashCode = methodName.length(); + } + /** + * Checks for equality. + * @param obj object to be tested for equality + * @return true, if the object describes the same Method. + */ + public boolean equals(Object obj) { + if (!(obj instanceof MethodDescriptor)) { + return false; + } + MethodDescriptor md = (MethodDescriptor)obj; + + return ( + exact == md.exact && + methodName.equals(md.methodName) && + cls.equals(md.cls) && + java.util.Arrays.equals(paramTypes, md.paramTypes) + ); + } + /** + * Returns the string length of method name. I.e. if the + * hashcodes are different, the objects are different. If the + * hashcodes are the same, need to use the equals method to + * determine equality. + * @return the string length of method name. + */ + public int hashCode() { + return hashCode; + } + } +} diff --git a/ProtocolLib/src/com/comphenix/protocol/reflect/StructureModifier.java b/ProtocolLib/src/com/comphenix/protocol/reflect/StructureModifier.java new file mode 100644 index 00000000..62faff1a --- /dev/null +++ b/ProtocolLib/src/com/comphenix/protocol/reflect/StructureModifier.java @@ -0,0 +1,218 @@ +package com.comphenix.protocol.reflect; + +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.google.common.base.Function; + +import net.minecraft.server.Packet; + +@SuppressWarnings("rawtypes") +public class StructureModifier { + + // Object and its type + private Class targetType; + private Object target; + + // Converter. May be NULL. + private EquivalentConverter converter; + + // The fields to read in order + private Class fieldType; + private List data = new ArrayList(); + + // Cache of previous types + private Map subtypeCache; + + public StructureModifier(Class targetType) { + this(targetType, Object.class, getFields(targetType), null, new HashMap()); + } + + private StructureModifier(Class targetType, Class fieldType, List data, + EquivalentConverter converter, Map subTypeCache) { + this.targetType = targetType; + this.fieldType = fieldType; + this.data = data; + this.converter = converter; + this.subtypeCache = subTypeCache; + } + + private StructureModifier(StructureModifier other, Object target) { + this(other.targetType, other.fieldType, other.data, other.converter, other.subtypeCache); + this.target = target; + } + + /** + * Reads the value of a field given its index. + * @param fieldIndex - index of the field. + * @return Value of the field. + * @throws IllegalAccessException If we're unable to read the field due to a security limitation. + */ + @SuppressWarnings("unchecked") + public TField read(int fieldIndex) throws IllegalAccessException { + if (fieldIndex < 0 || fieldIndex >= data.size()) + throw new IllegalArgumentException("Field index must be within 0 - count"); + if (target == null) + throw new IllegalStateException("Cannot read from a NULL target."); + + Object result = FieldUtils.readField(data.get(fieldIndex), target, true); + + // Use the converter, if we have it + if (converter != null) + return converter.getSpecific(result); + else + return (TField) result; + } + + /** + * Writes the value of a field given its index. + * @param fieldIndex - index of the field. + * @param value - new value of the field. + * @return This structure modifier - for chaining. + * @throws IllegalAccessException If we're unable to write to the field due to a security limitation. + */ + public StructureModifier write(int fieldIndex, TField value) throws IllegalAccessException { + if (fieldIndex < 0 || fieldIndex >= data.size()) + throw new IllegalArgumentException("Field index must be within 0 - count"); + if (target == null) + throw new IllegalStateException("Cannot write to a NULL target."); + + // Use the converter, if it exists + Object obj = converter != null ? converter.getGeneric(value) : value; + FieldUtils.writeField(data.get(fieldIndex), target, obj, true); + + // Make this method chainable + return this; + } + + /** + * Correctly modifies the value of a field. + * @param fieldIndex - index of the field to modify. + * @param select - the function that modifies the field value. + * @return This structure modifier - for chaining. + * @throws IllegalAccessException + */ + public StructureModifier modify(int fieldIndex, Function select) throws IllegalAccessException { + TField value = read(fieldIndex); + return write(fieldIndex, select.apply(value)); + } + + /** + * Retrieves a structure modifier that only reads and writes fields of a given type. + * @param fieldType - the type, or supertype, of every field to modify. + * @return A structure modifier for fields of this type. + */ + public StructureModifier withType(Class fieldType) { + return withType(fieldType, null); + } + + /** + * Retrieves a structure modifier that only reads and writes fields of a given type. + * @param fieldType - the type, or supertype, of every field to modify. + * @param converter - converts objects into the given type. + * @return A structure modifier for fields of this type. + */ + @SuppressWarnings("unchecked") + public StructureModifier withType(Class fieldType, EquivalentConverter converter) { + + StructureModifier result = subtypeCache.get(fieldType); + + if (fieldType.equals(this.fieldType)) { + + // We're dealing with the exact field type. + return withConverter(converter); + + } else if (result == null) { + List filtered = new ArrayList(); + + for (Field field : data) { + if (fieldType.isAssignableFrom(field.getType())) { + filtered.add(field); + } + } + + // Cache structure modifiers + result = new StructureModifier(targetType, fieldType, filtered, + converter, new HashMap()); + subtypeCache.put(fieldType, result); + } + + // Add the target too + return result.withTarget(target); + } + + /** + * Retrieves the common type of each field. + * @return Common type of each field. + */ + public Class getFieldType() { + return fieldType; + } + + /** + * Retrieves the type of the object we're modifying. + * @return Type of the object. + */ + public Class getTargetType() { + return targetType; + } + + /** + * Retrieves the object we're currently modifying. + * @return Object we're modifying. + */ + public Object getTarget() { + return target; + } + + /** + * Retrieve the number of readable types. + * @return Readable types. + */ + public int size() { + return data.size(); + } + + /** + * Retrieves a structure modifier of the same type for a different object target. + * @param target - different target of the same type. + * @return Structure modifier with the new target. + */ + public StructureModifier withTarget(Object target) { + return new StructureModifier(this, target); + } + + /** + * Retrieves a structure modifier with the same type and target, but using a new object converter. + * @param converter- the object converter to use. + * @return Structure modifier with the new converter. + */ + @SuppressWarnings("unchecked") + private StructureModifier withConverter(EquivalentConverter converter) { + StructureModifier copy = new StructureModifier(this, target); + + copy.converter = converter; + return copy; + } + + // Used to filter out irrelevant fields + private static List getFields(Class type) { + List result = new ArrayList(); + + // Retrieve every private and public field + for (Field field : FuzzyReflection.fromClass(type, true).getFields()) { + int mod = field.getModifiers(); + + // Ignore static, final and "abstract packet" fields + if (!Modifier.isFinal(mod) && !Modifier.isStatic(mod) && !field.getDeclaringClass().equals(Packet.class)) { + result.add(field); + } + } + + return result; + } +} diff --git a/ProtocolLib/src/com/comphenix/protocol/reflect/VolatileField.java b/ProtocolLib/src/com/comphenix/protocol/reflect/VolatileField.java new file mode 100644 index 00000000..b6259332 --- /dev/null +++ b/ProtocolLib/src/com/comphenix/protocol/reflect/VolatileField.java @@ -0,0 +1,158 @@ +package com.comphenix.protocol.reflect; + +import java.lang.reflect.Field; + + +/** + * Represents a field that will revert to its original state when this class is garbaged collected. + * + * @author Kristian + */ +public class VolatileField { + + private Field field; + private Object container; + + // The current and previous values + private Object previous; + private Object current; + + // Whether or not we must reset or load + private boolean previousLoaded; + private boolean currentSet; + + // Whether or not to break access restrictions + private boolean forceAccess; + + /** + * Initializes a volatile field with an associated object. + * @param field - the field. + * @param container - the object this field belongs to. + */ + public VolatileField(Field field, Object container) { + this.field = field; + this.container = container; + } + + /** + * Initializes a volatile field with an associated object. + * @param field - the field. + * @param container - the object this field belongs to. + * @param forceAccess - whether or not to override any scope restrictions. + */ + public VolatileField(Field field, Object container, boolean forceAccess) { + this.field = field; + this.container = container; + this.forceAccess = forceAccess; + } + + /** + * Retrieves the current field. + * @return The stored field. + */ + public Field getField() { + return field; + } + + /** + * Retrieves the object the field is stored. + * @return The reference object. + */ + public Object getContainer() { + return container; + } + + /** + * Retrieves whether or not not to override any scope restrictions. + * @return TRUE if we override scope, FALSE otherwise. + */ + public boolean isForceAccess() { + return forceAccess; + } + + /** + * Sets whether or not not to override any scope restrictions. + * @param forceAccess - TRUE if we override scope, FALSE otherwise. + */ + public void setForceAccess(boolean forceAccess) { + this.forceAccess = forceAccess; + } + + /** + * Retrieves the current field value. + * @return The current field value. + */ + public Object getValue() { + // Retrieve the correct value + if (!currentSet) { + ensureLoaded(); + return previous; + } else { + return current; + } + } + + /** + * Retrieves the field value before the previous setValue(), unless saveValue() has been called. + * @return Previous value. + */ + public Object getOldValue() { + ensureLoaded(); + return previous; + } + + /** + * Sets the current value. This will be reverted unless saveValue() is called. + * @param newValue - new field value. + */ + public void setValue(Object newValue) { + + // Remember to safe the previous value + ensureLoaded(); + + try { + FieldUtils.writeField(field, container, newValue, forceAccess); + current = newValue; + currentSet = true; + + } catch (IllegalAccessException e) { + throw new RuntimeException("Unable to read field " + field.getName(), e); + } + } + + /** + * Ensure that the current value is still set after this class has been garbaged collected. + */ + public void saveValue() { + previous = current; + currentSet = false; + } + + /** + * Revert to the previously set value. + */ + public void revertValue() { + // Reset value. + if (currentSet) { + setValue(previous); + currentSet = false; + } + } + + private void ensureLoaded() { + // Load the value if we haven't already + if (!previousLoaded) { + try { + previous = FieldUtils.readField(field, container, forceAccess); + previousLoaded = true; + } catch (IllegalAccessException e) { + throw new RuntimeException("Unable to read field " + field.getName(), e); + } + } + } + + @Override + protected void finalize() throws Throwable { + revertValue(); + } +} diff --git a/ProtocolLib/src/plugin.yml b/ProtocolLib/src/plugin.yml new file mode 100644 index 00000000..aa0fa29f --- /dev/null +++ b/ProtocolLib/src/plugin.yml @@ -0,0 +1,8 @@ +name: ProtocolLib +version: 1.0.0 +description: Provides read/write access to the Minecraft protocol. +author: Comphenix +website: http://www.comphenix.net/ProtocolLib + +main: com.comphenix.protocol.ProtocolLibrary +database: false \ No newline at end of file diff --git a/ProtocolLib/test/com/comphenix/protocol/reflect/StructureModifierTest.java b/ProtocolLib/test/com/comphenix/protocol/reflect/StructureModifierTest.java new file mode 100644 index 00000000..d3168d87 --- /dev/null +++ b/ProtocolLib/test/com/comphenix/protocol/reflect/StructureModifierTest.java @@ -0,0 +1,24 @@ +package com.comphenix.protocol.reflect; + +import static org.junit.Assert.*; + +import net.minecraft.server.Packet103SetSlot; + +import org.junit.Test; + +import com.comphenix.protocol.reflect.StructureModifier; + +public class StructureModifierTest { + + @Test + public void test() throws IllegalAccessException { + + Packet103SetSlot move = new Packet103SetSlot(); + StructureModifier modifier = new StructureModifier(Packet103SetSlot.class); + + move.a = 1; + int value = (Integer) modifier.withTarget(move).withType(int.class).read(0); + + assertEquals(1, value); + } +}