From b40f23b1405376002d436e81cabd66658a6c7cef Mon Sep 17 00:00:00 2001 From: hanna Date: Sat, 30 Jan 2021 11:47:41 +0100 Subject: [PATCH] first commit --- .gitignore | 2 + build.xml | 73 + build/built-jar.properties | 4 + build/classes/plugin.yml | 14 + build/classes/xenon/commands/Discord.class | Bin 0 -> 918 bytes build/classes/xenon/commands/Help.class | Bin 0 -> 1054 bytes build/classes/xenon/commands/Joindate.class | Bin 0 -> 1819 bytes build/classes/xenon/commands/Kill.class | Bin 0 -> 821 bytes build/classes/xenon/commands/Stats.class | Bin 0 -> 4716 bytes .../classes/xenon/events/AntiIllegals$1.class | Bin 0 -> 968 bytes build/classes/xenon/events/AntiIllegals.class | Bin 0 -> 3950 bytes .../xenon/events/AntiNetherRoof$1.class | Bin 0 -> 1532 bytes .../classes/xenon/events/AntiNetherRoof.class | Bin 0 -> 2006 bytes build/classes/xenon/events/AntiSpam.class | Bin 0 -> 3224 bytes build/classes/xenon/events/BoatflyPatch.class | Bin 0 -> 1638 bytes build/classes/xenon/events/CustomChat.class | Bin 0 -> 2429 bytes .../classes/xenon/events/CustomMessages.class | Bin 0 -> 1864 bytes build/classes/xenon/events/CustomTab$1.class | Bin 0 -> 3613 bytes build/classes/xenon/events/CustomTab.class | Bin 0 -> 949 bytes .../xenon/events/ElytraflyPatch$1.class | Bin 0 -> 2265 bytes .../classes/xenon/events/ElytraflyPatch.class | Bin 0 -> 1261 bytes .../xenon/events/LimitArmorStands$1.class | Bin 0 -> 1799 bytes .../xenon/events/LimitArmorStands.class | Bin 0 -> 621 bytes .../classes/xenon/events/RandomRespawn.class | Bin 0 -> 2457 bytes build/classes/xenon/main.class | Bin 0 -> 1734 bytes build/classes/xenon/misc/Common.class | Bin 0 -> 628 bytes build/classes/xenon/misc/GetElapsedTime.class | Bin 0 -> 1198 bytes manifest.mf | 3 + nbproject/build-impl.xml | 1770 +++++++++++++++++ nbproject/genfiles.properties | 8 + nbproject/private/private.properties | 2 + nbproject/private/private.xml | 27 + nbproject/project.properties | 99 + nbproject/project.xml | 15 + src/plugin.yml | 14 + src/xenon/commands/Discord.java | 22 + src/xenon/commands/Help.java | 26 + src/xenon/commands/Joindate.java | 41 + src/xenon/commands/Kill.java | 21 + src/xenon/commands/Stats.java | 92 + src/xenon/events/AntiIllegals.java | 74 + src/xenon/events/AntiNetherRoof.java | 52 + src/xenon/events/AntiSpam.java | 84 + src/xenon/events/BoatflyPatch.java | 29 + src/xenon/events/CustomChat.java | 59 + src/xenon/events/CustomMessages.java | 26 + src/xenon/events/CustomTab.java | 78 + src/xenon/events/ElytraflyPatch.java | 75 + src/xenon/events/LimitArmorStands.java | 37 + src/xenon/events/RandomRespawn.java | 50 + src/xenon/main.java | 51 + src/xenon/misc/Common.java | 14 + src/xenon/misc/GetElapsedTime.java | 42 + 53 files changed, 2904 insertions(+) create mode 100644 .gitignore create mode 100644 build.xml create mode 100644 build/built-jar.properties create mode 100644 build/classes/plugin.yml create mode 100644 build/classes/xenon/commands/Discord.class create mode 100644 build/classes/xenon/commands/Help.class create mode 100644 build/classes/xenon/commands/Joindate.class create mode 100644 build/classes/xenon/commands/Kill.class create mode 100644 build/classes/xenon/commands/Stats.class create mode 100644 build/classes/xenon/events/AntiIllegals$1.class create mode 100644 build/classes/xenon/events/AntiIllegals.class create mode 100644 build/classes/xenon/events/AntiNetherRoof$1.class create mode 100644 build/classes/xenon/events/AntiNetherRoof.class create mode 100644 build/classes/xenon/events/AntiSpam.class create mode 100644 build/classes/xenon/events/BoatflyPatch.class create mode 100644 build/classes/xenon/events/CustomChat.class create mode 100644 build/classes/xenon/events/CustomMessages.class create mode 100644 build/classes/xenon/events/CustomTab$1.class create mode 100644 build/classes/xenon/events/CustomTab.class create mode 100644 build/classes/xenon/events/ElytraflyPatch$1.class create mode 100644 build/classes/xenon/events/ElytraflyPatch.class create mode 100644 build/classes/xenon/events/LimitArmorStands$1.class create mode 100644 build/classes/xenon/events/LimitArmorStands.class create mode 100644 build/classes/xenon/events/RandomRespawn.class create mode 100644 build/classes/xenon/main.class create mode 100644 build/classes/xenon/misc/Common.class create mode 100644 build/classes/xenon/misc/GetElapsedTime.class create mode 100644 manifest.mf create mode 100644 nbproject/build-impl.xml create mode 100644 nbproject/genfiles.properties create mode 100644 nbproject/private/private.properties create mode 100644 nbproject/private/private.xml create mode 100644 nbproject/project.properties create mode 100644 nbproject/project.xml create mode 100644 src/plugin.yml create mode 100644 src/xenon/commands/Discord.java create mode 100644 src/xenon/commands/Help.java create mode 100644 src/xenon/commands/Joindate.java create mode 100644 src/xenon/commands/Kill.java create mode 100644 src/xenon/commands/Stats.java create mode 100644 src/xenon/events/AntiIllegals.java create mode 100644 src/xenon/events/AntiNetherRoof.java create mode 100644 src/xenon/events/AntiSpam.java create mode 100644 src/xenon/events/BoatflyPatch.java create mode 100644 src/xenon/events/CustomChat.java create mode 100644 src/xenon/events/CustomMessages.java create mode 100644 src/xenon/events/CustomTab.java create mode 100644 src/xenon/events/ElytraflyPatch.java create mode 100644 src/xenon/events/LimitArmorStands.java create mode 100644 src/xenon/events/RandomRespawn.java create mode 100644 src/xenon/main.java create mode 100644 src/xenon/misc/Common.java create mode 100644 src/xenon/misc/GetElapsedTime.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7b20272 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +dist +api \ No newline at end of file diff --git a/build.xml b/build.xml new file mode 100644 index 0000000..31da32f --- /dev/null +++ b/build.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + Builds, tests, and runs the project xenon. + + + diff --git a/build/built-jar.properties b/build/built-jar.properties new file mode 100644 index 0000000..7ae9bae --- /dev/null +++ b/build/built-jar.properties @@ -0,0 +1,4 @@ +#Fri, 29 Jan 2021 22:23:53 +0100 + + +C\:\\Users\\hanna\\Documents\\NetBeansProjects\\hnhx= diff --git a/build/classes/plugin.yml b/build/classes/plugin.yml new file mode 100644 index 0000000..04af7e2 --- /dev/null +++ b/build/classes/plugin.yml @@ -0,0 +1,14 @@ +main: xenon.main +name: xenon +version: 1.0 +api-version: 1.16 +description: The main plugin of Xenon. +commands: + kill: + aliases: suicide + help: + discord: + aliases: d + stats: + joindate: + aliases: jd \ No newline at end of file diff --git a/build/classes/xenon/commands/Discord.class b/build/classes/xenon/commands/Discord.class new file mode 100644 index 0000000000000000000000000000000000000000..5515f9cc45289a2218624a2f6f04c85096f72b3f GIT binary patch literal 918 zcmaJDBV#KAn&R5`%OkHy)a#wZEtr zE}Re?5bBX1g%~@o2x^qe?C#8b-_AEPzyJLB3E&A@Wt4E+z?~JC6=>KouxsG1fqMq- zGnAeSDO8uC(Apa?=)K724C}U#{Oxq&^7znkL-N$^$aBJh6N~hnJ9RY_3B#6s!et~a zFPcmo=_l3;k$6$;cNkV9*_(M8KDF#94lH*%9t(AmY~|rTmp+d>OENn4$T@bb(2;@F zSFw;m=i_D9-Urf@WMmAxOX%_sNw_!h8E!5~B^`R`xLFr2)j%;P4yX%_1=TRHBZlpH zZZ4Hjr`G$>IVHUe<$g4cJ^o6hU9RSx+fTo#VijfT?p)LU12c5b&)i-pys;TcQw_Np z3OP1aWR4;s+vfS1KUC@{X*o5+3;Six)g%=vtH@N`tg13YBdTs%F7tN+Blb4T1$ z49)psj;S2W7K!4L$JFh)SiTAu(|viuy{U>Qsglm-4Nnp$AiW!{1rr=#2Sr+14F*H1ACb{314P zTp3*$!_tla$arVk#u^BVH}mG)bMDMNbLZEe?>_)MN4<<9?v!wM8oYuWR!dkb;a&;% zOL)Lge5tguTMSe6^?io?wuvOeTvKWJVUVnS^C2BUCG>PV)IOBjvjp*RvjEOa+$ z*;MIn`Aa2ixaAsq1-ZqG?cHEvv|hY_RQ^3#SF>}OB0U$r)2njb{Yje703MSwEd3e zjGvf6*`b*gHgj-Grbja6N_R|}2&;_t@knK%Nh8OgTkdgdxIK`33};^DnYQoq?CrLA zCpC$u#UitOBYDa<>D$;$Jn?`I?(*$XJMd8#_`so2Iucg$df%74?pSZfpy_bIhk+^{ z;t|<+K_f9-{pb5m`%s3KVR_P;BQhsws?16)Q@Z$x*yu3hMtgNE!+|wKs<<|JFSAT^ z$@<0m1!Jj!>qtLaTsgMswluSFkTWT&1z-!CB1Ge|1Q}70l6! z>cBjWPCTGwMVjZI{6y|WVYyJ7`i6WC`OgIANC*;5IRepYBwz9gw}zroLKm%J!EZ8; dYgi;4TNV|k(xi%lu{P8q%CNm%4%)ZZYtK&B0_*_5T#XTHrWF#BpYUT!$2>b z{s?dM4{*~PZ%S*&j>DzDsdapI6CjibGn_r=Iq%o=zVCVS&%b}Z1aKWcr_ha0ReY94 z1UFMKP)OqzK2KmWK)z6MJB0+kRBXghMDQ7cP#$t+iiWQ+BRSzR_=J2b08bSe`yxw;jv$WkDcWccz-Kz-qo&ch~fCV{_B?52f|ibxAswbPH!l6p9<>wy9T5 zXH75puI;Q99-fBA9*~r8x@*!8qCTai4VWE{O|dno&2;Z^$mLu2xx+BiY0TQ@mu?=v2%KgvYzg zxIk}{a>KW)dVtVy#99>?XyU%y@k4yN?$%77w|#-BK(dMWl61RDzFFCvH@CtI-;#WxvzixQ1xu!Qdfh7a~COY5ee zYk1PlIdYrpR*(-Xw=P|IDT8HvFVG!U@rY93><1<&L_@?iYew+ODqV4(8kuH0!?XLAs4mvVAM4cBeQgfz zgfEP2sPu-NiTr8hvG%S!Acrj2Ra_585+*c%)a?6`FBh~}l|nQM&cd?%~HILXfj zQ>Fj7QtdU0uZBG+Fw#;#s&Jtr#kS%!-@m}k4vyPjU$cmv%;6HUoTd?+LqCUW1Z05$ zt`~UH`4#-e#`huq2(JgZ#zQa*jr&Yf07H0-Cr${w!xd4a^rfVz*Qk$i#FN;bWZ zjFHNA#r{I~N>rm*k3eZf(NbFSDSAuK&}XEzn3fLpl_!iLiXd)-L_u*<1*%Og^z9o4c`8O_d>3Z$mb$d{tt5{vli=Mmt!J>R6VBd6{a!R zjZiKc?nd!06#9KcOL@fT-N6{fiA-=3T*dpeH%I>;@SLRIai;!5{%$pp#z(Z0#x>gM XLF6??ReY@C`YQ}6ba;bs1fTo|TAR!* literal 0 HcmV?d00001 diff --git a/build/classes/xenon/commands/Kill.class b/build/classes/xenon/commands/Kill.class new file mode 100644 index 0000000000000000000000000000000000000000..7945ba0f6f8073f546a951bfa5e8e06d896d30e7 GIT binary patch literal 821 zcmaJfgc5Pjn~ag(OOq!gM`KKenGfYiNkBB+-FLc#*1pd8?|c9wKoXN~Ml)&8em zI3YM7&ip9E*l|Trt6cWu&6_tfZ}<0~A3p&+#a;td-1BgM84ezJc<5ov!?uSVLhZRW z+8z)p-QJMk9wsA2xDjZh-cBc>NyU3;W6!dh^qOkzZoOeWHd zGVw;oai366%;5|oeC`HGIu_yd0EG)Rv1IJ`KW(!uY>4rdG2pjX-%2;jB#rs&E z^Sp${Aep9-dZlxV>$z?Fd5tEPP$#U6T5iCMX#});Q#CLU3jb_OX$oCowAe& zbY_)NDcdv`DH^dfP{!|WX@c558puA;X8+;SI z6Ytf>-#}lB@G`Hp0$f3p&&?SDD`@eJKOB5s^JI$(GXej}FF4PtooeelDiydFj5)}4 zTFd}$GONw!)k5!JmQ(6+HpkmV4WAjeI5WrAaJ$I$aR=)>K#ePQu)%{6?iTu+e*x;B B!;Js{ literal 0 HcmV?d00001 diff --git a/build/classes/xenon/commands/Stats.class b/build/classes/xenon/commands/Stats.class new file mode 100644 index 0000000000000000000000000000000000000000..2a294326c7f34e85bf83425ed8fd50db8e6d540e GIT binary patch literal 4716 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 D#SlW_ literal 0 HcmV?d00001 diff --git a/build/classes/xenon/events/AntiNetherRoof$1.class b/build/classes/xenon/events/AntiNetherRoof$1.class new file mode 100644 index 0000000000000000000000000000000000000000..67172242af504a606b86a55203a07cadfbc5f925 GIT binary patch literal 1532 zcmaJ>OH&g;5dJ0!Sx82}5Ck9iB51NG3%=i|-~$b)fFR<7O)`d+WtZCBMEnKbyn4{H zo~;rU50+EE7+R{jnOS4lk++?)R;aA37@j69&+wjWw@v-IaLzKsy=BAA3^VlQ z*M((Uny3=Q)h-ck%6B1%@-(rpW)3<>nY-V|Izc>&P3Hn5wK6gfpub zOwy$Cc2PIybjOf#O&OEH(b*;}OE_bu?z)1+J)oUDJn zt@^Uf%eys18;~)ym4!DWoT_jby0f{kgFsDX2;0@M(#}r{l{`guGWA-;GfXXSxE>j` zH)^QhWFa{wYG6~h%G#~MQ&E)g-cW1}w}7FwPQ{RJjIiD(NkYgD^$eRjtEUlE-yo8% z5J_E4T~F2venZktjhAY7G?pEg4cf8h-$i%Uu4lRP-?PRYv1(VTA-l7|X83Hm`{cE# zTSZ}FFFgv~^io9Wr|ttfJ7qumGc_k^BlPb=9~gGiDo?V+rq#g>F!j&|BI+kZ)s_v! z-uvi1G$wqjezYS)4AQgolEyyt(=1ogH$6MFKTz}h11&yk{WDrN5vMF{LW$rTTJ!1$ zL^jdJF!&aWfskPMh-4c4)f=SS!@5_mv0uvc$6jorJqmR}F4O2(c}Y>eLoaQy57-)5 zr6QPDKcY)UABBv5KU!%#h!nCU=P(8pcQA+oJ*6&&@C+lNQ?1udmBJGoAS*^zG6T_H d@~O@3PLo%aG!gP}h~^l186pmeq5h$nzCS2;Zpr`v literal 0 HcmV?d00001 diff --git a/build/classes/xenon/events/AntiNetherRoof.class b/build/classes/xenon/events/AntiNetherRoof.class new file mode 100644 index 0000000000000000000000000000000000000000..568b699cba1aeb75bc0d575788bd8d09afaa375d GIT binary patch literal 2006 zcma)7Yj4|B7=BKY#*5>1ZJMkrTXzT2bj%C}gQe@%wY#*W-PVM59RubhUg})z$Z;zA zOC|xI`Hlqb$|S^RzVUYuLOjQAmbin8NIA!Tug`n+?|=XDD}bwLtC+ww1)r#h;93GF z@TrRH$R{y_8!BdTGl^T6ldrcG%qOvcJMy@z;vVkDZ#|}OXs#KqCExdnF>li%#>v7rrtR3exkdXOeU466OmEY4 zR~_fM^x@dc&X&ZM4S|v3dJx|}Bq?@BlJgQw-1e>b&igT}J8rW|t3$p!fvNv(Q{ZUP zGb)W`qwNR4stHW2c8RxTu2~(6k`_4ZEg4DA&!3$8rpS@(b+uxXF@py;TL$%dvJ$GFefmpLFARrDQ3^nCP1viC{e^**h4OD5H=lPeb9EA+F=ZG7g;?C^82Ib6}Ax zk)NgPd4Axgkn>}z@5eyIn8qc>@*bsoK8ZVjQ4p9xkz}*P#=*h(~^0G z)JAT47h^AxPNb39!T5SVcf)=@E+9e0G(PlE91j#<`_7Plm1ZOOhz2A07$rojvXgZQeUIe@SWM&^*A<_ zkao|W`Op7<|LyzF&hOuQ{Wk#a#w!N)V?xIn0|`u|aT`8r;2}(A@G#CAIEN|q_=t}4 z2GW>NS{HOYn!?8nY{$n9d;*`$z{F$f#8$Ft^_W*nAp?oW)l$?kqs|<)TufnB!Iu>B zoPu@L;;ALHn^y;y6hc{tuOrY=5!gImvKM7}O!~fEl)k{$(TnziovQ>+DRzsf# zk6w|k=jP;sbOS#(=myT@ zygjGTJ$Gov4g~JZj(X){Zn`o%>jX8$TrKt7pugzm&xB=Ay2lkrpNgev&Mzv*VL{@# z2^fXSe96h%fht*hEZ4zu*aSoI;0nrl#?WmO)<-Lba#i}Upcbj1>Cq`qOV1@^~u z|0g8`nkNH0KTFz$Jr1e5K%#RzbX*p&9;&dtbMlw1A5IG)S$?p8jw zq=~2SB&TN8s!;|LpTp-lVXH?fYXQ+|;tP0M#}`dJgJ(^A3D24MGM+c_6@1mi*VOWL zyufr#d;>3#f(&FnkcCbP zd=AAv6W_siO=nhp}uV5hsxQH@G>dA;XthkVq*Ftf!UCCbEVRhu43`w zb!YE0a~!qRQjG+%YzH1O(nT56rc+>7wrfp`$%J4rS36~Qcf{Sr&jd0=IqN!?DsrSi zN5on6rKW+_u}0PABNceH%Z%e#H;C0=(TS+hl=8aZgTTRT4LMY-)u=CW78h}Pecm86 zxIJzVU7lT!#y}!jz4+nH9FmNTPuhNsR0pzgleK?(V#CS^5Ee110%65(LqVb(4IA|%S(anx}A;X~RU1nf989Oeo&^=8Vispt7 zYYQK_W;+8fyb*_NpZH06sbZH{j*Kte`jvZ2mi5Z=UN?Oi4B2j8mP(Sv(6SfQZEr~%hqxZ5WB^T}PHXpdi0(I#IDZ{Yzl8Q$sC|U1dQkvcprI8dZZ18D*qy;}D#pdGFv^Crw*?MPd56`OyB zmflU4_FLT6(6Y26D`-t%Dpa?$Dz;25ix-Ym(bk$=5<4xzZza)}M60E(V4Fa1(n_wN zUGVm~p>`btZ(@6|Zs}F*pxurttgGlyk+pqb1v?WsMATi&_@kvaqDa*PNL#5Is$m%s z>Rz>rP%~EA$`G>_GOHtHT1Mvk;xKT z8l_)GyQMX);Dc;KLm2CaVu%LCkXOkkU>keifi}J{?!*qV&B8J6daw(F*o{-zgGbPb z61n+2*?Eop{4x3YD%tr{vT}ute2Xl4n~47=&)y-sZs1N~;Vy9y$3z$I5&h^958^&C zfj;pV`o%2n7xNepJ{}N@7#3G?TrA;)_z6bD&u~io8mGnYFed(laq(B25&yts$l#|L z>D&AsenxbR0PkX#j#KaAUdrCXZpy;XsT(-(A8cvt hZ&FuZZ% literal 0 HcmV?d00001 diff --git a/build/classes/xenon/events/BoatflyPatch.class b/build/classes/xenon/events/BoatflyPatch.class new file mode 100644 index 0000000000000000000000000000000000000000..8d5ac493bedab17ae8283b0aee916a4453ca6bad GIT binary patch literal 1638 zcmaJ>*-{fh6g>?ILy}=}1rZfo37~`ff}#O}pa~#gP+Y1ep@o5QhDruXKE)s4T^_K| zD$8fT$+A2>Lv$vBFMYf3a_+f(`}U7tU%mmjfwxJt;!+YlNT<+?KDG3xa2Zz;FfgFu zY6=>zC2<`$61a(5Dcr^#wcJhM9tM^5zJ>=HhBQ1BXt-}VmNz6&-;*u~#75jjDbSL$ z967oEz9`FcX3?hRaLz56cEK!L>b$3ndCOKs;AHNDbX>=f8`AMA#;|L8@9fQK(zY_vGC2l2Ke=UA4Tx*;up9O<6XkeWBd43S&@F5gQ6Q9N~DDw`mmQvQ@Gr zk>h?sfpo-60UU%&)HQ*Qh<|_@Fd%5ttY?;1^X8ggqlQNUCuY{^^j;RMipAnHj^lc! zXSoh*KNG?7bNeNXo6e#w%LGi$y6feV9JACl9tvO1l@)Wt)NvR`G-PxPV}$8+j3TRJ z439O8>zKe34NrCCkSCD?Z$rl%;)*PJHJSY?b5_NZjw}nb|H~@4O@T{c(|;NxkXVvlHL9~G+R>U0 zwOEx2r(!M2y_ev>-34AWA^xcL$H@9nY|1{I1Dk+Gn7Pe0Hmhr29)X|oAWmnvz<}pp zJI85wDl;c=I`T+r-3XInPBmcaQ33Iii~9+LZ8U6QAW(dVHhFm$jRHGJ zY$LggR2{u^<<+!>ByG(C^NK`06p7RPsX?Z3CTphV4C$mvBTFJVbo%6aNg$1LILULp nqOwO*?M@MaSAcOwc9Ci~?TrvWk<)ONF+rKU8+hnf{ahg3dV9_Bopf;nL3Z!=63+p69&J^PcxP$?q?Jehy$5 zUk33S#x-0E;w`)_hg1;lmM{PK7BDIB!~}dr`m_?Vk}) zl6Kw@Xib@xFjxxV($(g|MXv!`Z64}c9yy@1UiBeHtGRlcDXUWQ4_vR9NMWz{*YW!YCfuaAm zRX|-Z97ivBy6@?WdZMUXg+$sdn^u9McBEZBH$S15ygGP_tl>t*a?J%}#&k>;IA&S4 ztGlLcvA*7|^q$6X-O3k@G7|=ig{+&ji*}jtBhl0r&i<_-0g>aAAccIVvYTZ0u6$RdX+FB|YE3z)qF*oXhgJ;k`IYpOP$XSIRl#swo}Ry6%f1c|IW=!eNG2 zmh*?5mF4WYzLn+K!;Xr3A{MqbRU@^T}SWn8mzNrhiwKnX(Kg z1XpgXU{RpmgEyX=iU%P)#F9YU=2Tt|wuG5Rypf_gKk1G65I(}k-Zbltv)*{h8;^zX z2|f+sGkh)psp1Pt{g+Fzfq5!>&&aV8U0d!(%5+@Al9k1`to_Hm5omS{_o`i9ke4p9 zofUbpf(65!cy&c~MYnZlAjb}mF^Lkr)=!rPnRjhZKrfXHD=#p(9YcdnYIm;QC7M=q z?OKTTE*e(Bo#P2c`|19U^?s~*i#K^uFIJ2xp7x$-vQg(6hDm*;3U!`olu|p`(FP^; zNMnwANT9{FQ}zR+oYWmQT_F<-_VJK5-RA$w(Y;aM#=`l_etgXN$c}yJK^WNmGtdsK?iye!9{d> zGWu#%br~eZAciQXh5u;@9HXS;+}n(%RrIJh(T9`#lywYyVcufSsk&*7QI&-_fq^P^ z{K(QDKf_MyYE8x33Qy727Wf728DBV@&M4uIbjBavmCgjh!E{CqN75NB+?lRo_pMl) zOR!eM?vdC|iS3eD&eZUpIxI_AJtgBxc&~&->WigKi=^_e?X7*IBN$PXyWfl`U;D-K-`@>B zW-Ao0(|53&^DYFj4`Fn(n?0Dtetd;qJVGB<=-5B#*Hs)6G@J0_sL&7ahL<{qu#X0FP;b4@G0m4GZd0e0| zR`GyNyM!h(S$LhRKJv|D440`mNvymEHT)Z#Nw4)n4gQ5cRa{ZA|0OiKPKZ?uiT)P| NydaUlRl=I^=0EJ3M@Ikv literal 0 HcmV?d00001 diff --git a/build/classes/xenon/events/CustomMessages.class b/build/classes/xenon/events/CustomMessages.class new file mode 100644 index 0000000000000000000000000000000000000000..7c09141c5d1a3e7a583a6542958bffcb967638e0 GIT binary patch literal 1864 zcma)6S$Eq+6#mAWTt%rl=-Jw+*O;;4BRvDIYVZ} z^;~(2Az7H&Wk{|0Rl$%ex}Ml-H_IZ};pGOM*hRm>8@oJk)jmE<$+{adTrK`2Jl}J~ zq3~qrthGbwH#bEX@|p;j8OF97{D}zG1()>=rNgjLDEdLoDYp*}Tp1ZUbm7V;PQUW9 z;+59e472~=jEq`ays5eG^F!`5xL0#ZGH|^bk;+zMh76Y;w#ju#!QJ*eUvlaC z9>sQT(4h|DF88Vp5fD%=B7Dzxy*Rk}A;GnD3gY0px;i#S6lVtAoMOQ+T9UkSu*qAx z3c8R*1Dgi6sO$`8$!`Z0amQ6LN- ztGZ9w64kt{i+m`8LlNYsLIXt$-{XOWAHW&LN%^rKXr0Gy5X!u&k%h8Cy8IsVU!kBQCp|6Y0N<-UtNcszPnGUg+_< zR_8%U{MZ&=MJ%6oKInq5GgRLur{`d)7cY)tNUDc|ndCr0;@^QFDiLg^XKc91)EYHP3@OpIX~=dc1>6PS&h#01D4@)Qxh5x9ZZ@dlBZ zrpVqTDTyhfqsYIdsZOI1Q$3>71f4C;*<%q0VtP(FiW22$YKeJ7epapVBWw2(zF=3Zor|By&$ERH<=SR1{V7Q Kc$>fyc;{dD_1Q@P literal 0 HcmV?d00001 diff --git a/build/classes/xenon/events/CustomTab$1.class b/build/classes/xenon/events/CustomTab$1.class new file mode 100644 index 0000000000000000000000000000000000000000..8c3b6ee23229c15ef3ddd076193c53e6cbd0e45a GIT binary patch literal 3613 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 K?hd|zcFJFzev9iy~?c=3JC9@8S;b zmMO}PN$Xm0aL>Vg25%!tq-sV&YpEHAo`*?jUN98vi@OY^W_lnQDt?&Aw^`hgYDaV; z@=W+?AfjENLTmqYmds&D7&HDynWPDqeVG`|o0&FgOd+d;YD9-&L>r;ZP8bsqYZ2+O z2zt^mH2p*x9urxh#0SH*RDG#wVw*T%4-^$~*B5|^r8M{d3huXZ6;y|kPG&NEY ziMyR?Ze6w>T15)ER*Y=4vGG-VLGNnjWt6e*cA}cpliZpy({}0-=Y|Y09DaN4= zcr%UTG@*)hCFz}YL)zEsi+-xQyp#2Mq2b55n-5M&eNSb{j?g`uqGDL9|2??X`U6P^ zhw>ncsNk=1Xp6Fnd0e6Y+KvLKoT$(|Mi!@)(OOl-S0KO@Auv0w|{^98Nds; z(~fO8t(K8EwqvvdV>qL>;~LJ!(S}jAnNZ8C>g=^RrCc26a9(XE)pDT&uj8VId>jc} zQp-i9zO2+&lyo(QH#AJeF^y|+yotAz^tL*FN5i`s3<163%7vU$Gi z^Yf;kX{fUToh8%r4ZA44GnR9chKbyqv0!8Z-?TD0p3$Z~ZQ~E(x=UzHNE6Pf$h0l z(st~OT%d`U8MCUsYs^^H3x;2uRffZ+ZTcq!hEnTVK0Vps6@lo8Q{oGCx$u;YF}4IRdIZ;3EP(Lh-G-5+(FV4sIDgKlgs-TfK*9;c z^G@Ivw(~-mu9VX^<%qzEo4hz?H*h=GIPD4e<4Y&duS7X%iQkgs* zJ^~#JIIQC)Zjm9o4;(G;R%{L(LUv9T=48>=P}Ol8?`e2n#|QXO$4B^B$0zudyjzEM z$wLCWnnuVg&dO3?NjGykoT-a}ZP)12(`2>U#({NWv*j}6ct~*8ky@X*TbnYh86pNM zOMf-#megQ#q{aa`7Bjs`+amKrZcY=iqPheuHn(vh(( zClf+>!oF(wl6~r2?UQOVhs`r@*K$n=^rf0OI^tLs`@%~qt7atTOG{Q9mp)I+%W7MT zmNb|r?n!^8fM{x3MQCby?LrdJc>M%&a)#GnYIN|)8*7bI-gm?IX`6A}>jvvMRxdYX zQSCH)ttm*2SlQ;dbu0FxVz{1c)Uo-0A}JUnMu|ADIc)@;=7enH_XyC+e-0AYsG1rG z?4;a+U0gXpKq8?=FMM(i!!vL?(zM*iorMTL!2a~UMTqqNMYN=s5J{(hK+7_s0*h!( zKSbNq60}9c(qa+q--l85bM0nUU;v%0Wq@_;VaDgF>173si32#ur;=1|!OtNau4NWq zLJO;ZR7({X_!?UJJ~~!X=k`%-z0d2lrrIFz6~3*>oyz0b}fDv zCm$j)r8G;}I2299`l9#I{SA`JSvf7Erv+DQE}I0DI+=;4}#x&{+OqMseuMf|fo9Vbec ziBo~tSVZSGj^GY|GJJ+1e2!t<#c_OxSMWPV@CU!;|D=b)IL+7v`W>OI>cXQs+Wq(i zFR~B3nXrVTc!|Aunddq+HTz?9_w2cM^Zmz{ZvgIK*@lBFHm+i-8`p5%MmMG{WNoA{V4KfzD;6Rs2XGnVs1Y=vWC#QlK}lw0u#m6lA#V z6?}Tq`Jm|eJ6@>Fd(+tw?ZH~@UGil}y4|vVfI52~u9Yfr<64tsgWG|?XbWabh=Bb%sD?%POc@ymTE&^) z^A0@+z38)W)4>96S-9=6!FL^uV}jMsPwmzEi3NZs2=#n&Gs5YF`clgx4me8o5Mso z9=FUwYw*TK%b}yAaLH?Oj04 znvevbe}vGZj5MXkXekmVxSB#Q={1EiUy*v7n>|M7CsnBQO ZewWJNA|?r&z$F4EC`}KoO;7XJ^%J2EIo1FG literal 0 HcmV?d00001 diff --git a/build/classes/xenon/events/LimitArmorStands$1.class b/build/classes/xenon/events/LimitArmorStands$1.class new file mode 100644 index 0000000000000000000000000000000000000000..2d74dadae9a9908c4a8986264b3f5215642e25d9 GIT binary patch literal 1799 zcmah~-*XdH6#j1W<0iXHQ(_kg{Q#L?~$^D@*?A5FWgSKGX!p+sq zMnlkctZ-l0j%|n?VS5duU~O4m*4=X4WzV#$jWd_7P&T(|Q*r`W-Y&z*g5z!&<>uz5 zrOj0bWwDm77U)`e?a_qASX+V)|8Wl=`cv+BlzCtTBW zT!xqK1pCqvH%QvIF${G9dmA|NpB$-Mb$LY?js}>v`7y*dgtsi*9YJ*T^hA(P+e{4& z`gO3<&sUT#WRm=zl~=GD9y#@QTNq;2)4Gp!Idt?OCtfofC2^m)(sQ{@&&BpPgB^U` zv^R{!@;y~7Pw zJ>4x<7fvFG-|&m#v?Hk5rQ+h!+VV=aG|w;^l>T|qjt8RU{kNN6Une1`zw`O*%1wq; zFhmeST$Js)x!Z9VPQMT-KT=UwY&kmu7m=VZq5SKke|mMGD@!YbW=3=5>@Q$H`^SSc zMtx%vI<2)f0LO5Gc0{e?%)X>x8rdHHioO;?3@wBi3g=pgFno`1Xc1-j9lUtHg&0F= zaz7IeWg>b+4?n`%q#l`?jfOHj6>TBTFdIw7_A~KNM$r{L{s=Rvn66CCswuSvh2aU* zpD?<|na&54A2FCxpFnHjNFOAipJ7j7j}QLXi_rMPfSSk(Q^I4=C+(d?M&;`v8AY b!Vo4XQ6J9Y9L-^z$0U^oDAb|^%|Ps5>D;v( literal 0 HcmV?d00001 diff --git a/build/classes/xenon/events/LimitArmorStands.class b/build/classes/xenon/events/LimitArmorStands.class new file mode 100644 index 0000000000000000000000000000000000000000..5858b1ec9f269fa1efb61f08dcc99a0ceef302b1 GIT binary patch literal 621 zcmaKpT~FIE6oy}?EorliezUK#4vmYJ3oHb8AkbE6(onQbYQ?lmH?@js;vgqM{4H(( zfy58sMSC;h}=Ii!~1p+8$ovb%_QxT2^}F;;oB! z4E|TGr5QvbO=Zfka-g)z4jBr){s}{IkW3^)HBef9%j2;$BQcIhX#`0qq7z}1?SG5K z>{Jn>8(d1AXf7|L&QczzSY@9~oS0!I^d#M9C`DFd@P2l z=2GP5j*E_ub-ee{#RrDjaAZor(X%KVZC~KHp52&KB@uzL|N?@ADpJ{<`_w4FHeh ziv-d*l)wOV1V6^-h~5fvveY!*=Y9F>BafDKo6w6VA-AQ7Y9LXP{Q$?f|%C5_oUdt&=3p9uI^NN=7 zIrJmuc@6NI<8@B?oi*I!j%!W$;jg;&X;f&)TY6#IGE1H@;TvHt8**p#Sv^zsOe>Qk zhhnv^K4F&0OP2IW<5nt7fuyC|Q<+}Ju?$@$yRPVXjMmhx5tY6`Djcu^(K8(-C|niQ zsz@QRIw!#g-W?AY-LdQ4A$K0 z?52tO5s!ck>P5f)eixY%XZ+rrmay1(>_&m~aGB0$j8U^>vRis=+wuIo3F5Y}^&l<3 z*oW9Pmf_M%V#F!C1>>OU_gz&t?NxYbxCdJ$Obs)z>0X0_qQt8jT$Cg{4Q0$qOlvp` zw!(%`!>x2fQ;1YaP{TaVX?P9iBwp9>2F^1f4R7Ktnpj&V4R7Ne4e#QDK-gHNzAD6v z8s5W##QPdPz=s+>!p9mu!KWHN!{@Bk-Djra&~L4w{28O*5z|o20c@&PhHbEqcHPFi z>r8Qi!ouMmVe_u$sf=?%d_uUzIaX7K7tAUrzqPHZoMCgUWD`YujR}7eD$odQu2!lr zDBlnYt=C@>fx8jI)~Q-p{tn$z4P*5d-4v=p zh$A3r;3&7oZ3PVDQgCcfH*JEDYQ011e(WmNW$V&)sn{accf>0Xi9Ji$AkdLaCBH@Abu^6aNyQgZ$%Ry6;VK%l zGA$R;l-1JFw6=te0!v8M;2ShXecSDdz3DRI7m~}Dmv5wN7qR*4`d3m$cH32tA+2ZtP)fSuWVUlVK*!OP${PoU^;mIaT%7f4~0$;3}E|i&zmT;94H< z<2uI&0s~md<3p4eys;k(oG|tife~X@1;&hB6PPe^W!w^|;C2q5 z8tpqAcLk=6XC3!)sB&xw%wQ#lO^(k5X3ggo$L9j`=5w2)CUDtE-skv&;{n6a4L5N0 zO@{u$BEf-j*iZ~3RX0$ZEq_Nv_vMa9%y>1dOYebfNr`mgH?T^f-tas=>{c+ zTo_b>G)vUNR#aEFT_Z7U{L7E!fwb@zmMnaUha8VAe1)$Wrc(`dpaLD+tATd!dY*Em z7jt}L;ahyia5fXOsdQ6C+hMrNFq!ez_N9MZc`cNB*L%7pb-l@Ox+kaHigoChn^GVD zSL)eNaV#B0CHL;6;yu-oe5HD(M|E2UjnLm#@xJ^q;P~Fc4_M-$F6>~5TE6Fco`pIZ z3=?T$J@kD_itT&k;!qZL;ZS5#dHdO*I|<7hZd?x|5}7(Ca_h)37;C9%^QVpl)KWV4 zICO)C)HJGgTRQt#?|4L-Yeva17eTk$^214ocz3J`U^aPRE`7W{7g)p3q zlw*pq={*L36tPN}DH?U~tW>Fqo!eYUIg*Tyj9W2GxkRK2A` z>gYmG;YTTL!J{y$6La(yErOv)Z(ko-y4$qAO~@w8$PN~tf&H4emuVeJ$aCZdtTX^u z@D3q{caM^pkACB0ym*Md7wBhriGfGYNbCiM`q9O5VsjaGm{^fv^Tb*i_5`sfGwcYl zqZxLL*zpWILF}oNeU8cJm@1B+KExX@F-?v$hd5gtKbPPc!fz({e1c~Q&n5Umg69ce zOz@=yUnaaj_*MJXFiNeO#T0dZ2^X+Nulqw>M1V{9iJteLv4CG_BEQi@4k_YKn#JE( a#y`~Xe{qEkQIk8ZXS~z;_eix5SN{iai^H%0 literal 0 HcmV?d00001 diff --git a/build/classes/xenon/misc/Common.class b/build/classes/xenon/misc/Common.class new file mode 100644 index 0000000000000000000000000000000000000000..c098b23449beec0c54bba91ccf4a1323602b2316 GIT binary patch literal 628 zcmaJ<%TB^T6g|VMP^!GdCyI(D;DT=4VO&V!sy-47`+}1?P^PA|#Lv=|;=&K`ql~vL zDn#Qf?)08H=iW1S`u_3y2H+TnDioAdte~95D%R3i&te0c3bqtf7*Z!f3h$I5UT<_6 z5^d*}Gvo{*`K3SVaregT*@P4gr*GO_(-lEJ0~6kz7&DZN2QD3{kHomIx1G_*ku8Rd z#l36Ww}fP<)EkE5T6)hP4uz-Rhp--<5>@RuzT4;LBIuNjDl`Y?#MF>RM!~j*9aI(U zYS_a*Lo)2Apr#>*1BSw{{tWp*uiK`y^sC;0_dTM`SvU)wL@qnrop6_-yy!B5$=#0hINXS^xk5 literal 0 HcmV?d00001 diff --git a/build/classes/xenon/misc/GetElapsedTime.class b/build/classes/xenon/misc/GetElapsedTime.class new file mode 100644 index 0000000000000000000000000000000000000000..cc397a4bf726751f3f58fe8e502158275662767e GIT binary patch literal 1198 zcmZ`%T~E_s6nYCD)T>CSI4Jz`?Oc3O~-XuDsJeQ!cBq0|J}pB>(w{SPy+yPNVqo(E1~kWW1N`alv4QRawB z)PlPI+!u(?@o}C~iJdwMwDooX4#FTBz#$CN!^@(^xMBJ}?xOFQoGBn-C5>bO{jQ}L zN~}{xssPosG(#(3z_s+Ep?g+_^3_by&^#+k8JQ{1%27t9;#mdC$V_^ckxQq(L0?H2 znOz*Ht|X0Ytow~ztQDgWYt=9!y^G8zmehwl + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + Must select one file in the IDE or set profile.class + This target only works when run from inside the NetBeans IDE. + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + Must select some files in the IDE or set test.includes + + + + + Must select one file in the IDE or set run.class + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties new file mode 100644 index 0000000..c0c68cd --- /dev/null +++ b/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=32f2a6aa +build.xml.script.CRC32=9a81a35d +build.xml.stylesheet.CRC32=f85dc8f2@1.96.0.48 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=32f2a6aa +nbproject/build-impl.xml.script.CRC32=28eb4367 +nbproject/build-impl.xml.stylesheet.CRC32=f89f7d21@1.96.0.48 diff --git a/nbproject/private/private.properties b/nbproject/private/private.properties new file mode 100644 index 0000000..de745fc --- /dev/null +++ b/nbproject/private/private.properties @@ -0,0 +1,2 @@ +compile.on.save=true +user.properties.file=C:\\Users\\hanna\\AppData\\Roaming\\NetBeans\\12.1\\build.properties diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml new file mode 100644 index 0000000..db7ec95 --- /dev/null +++ b/nbproject/private/private.xml @@ -0,0 +1,27 @@ + + + + + + file:/C:/Users/hanna/Documents/NetBeansProjects/hnhx/src/xenon/commands/Help.java + file:/C:/Users/hanna/Documents/NetBeansProjects/hnhx/src/xenon/events/BoatflyPatch.java + file:/C:/Users/hanna/Documents/NetBeansProjects/hnhx/src/xenon/events/ElytraflyPatch.java + file:/C:/Users/hanna/Documents/NetBeansProjects/hnhx/src/xenon/events/CustomChat.java + file:/C:/Users/hanna/Documents/NetBeansProjects/hnhx/src/xenon/events/AntiIllegals.java + file:/C:/Users/hanna/Documents/NetBeansProjects/hnhx/src/xenon/main.java + file:/C:/Users/hanna/Documents/NetBeansProjects/hnhx/src/xenon/events/CustomTab.java + file:/C:/Users/hanna/Documents/NetBeansProjects/hnhx/src/xenon/commands/Stats.java + file:/C:/Users/hanna/Documents/NetBeansProjects/hnhx/src/xenon/misc/GetElapsedTime.java + file:/C:/Users/hanna/Documents/NetBeansProjects/hnhx/src/xenon/commands/Kill.java + file:/C:/Users/hanna/Documents/NetBeansProjects/hnhx/src/xenon/commands/Discord.java + file:/C:/Users/hanna/Documents/NetBeansProjects/hnhx/src/xenon/events/LimitArmorStands.java + file:/C:/Users/hanna/Documents/NetBeansProjects/hnhx/src/xenon/events/AntiSpam.java + file:/C:/Users/hanna/Documents/NetBeansProjects/hnhx/src/xenon/misc/Common.java + file:/C:/Users/hanna/Documents/NetBeansProjects/hnhx/src/xenon/events/AntiNetherRoof.java + file:/C:/Users/hanna/Documents/NetBeansProjects/hnhx/src/xenon/events/RandomRespawn.java + file:/C:/Users/hanna/Documents/NetBeansProjects/hnhx/src/xenon/commands/Joindate.java + file:/C:/Users/hanna/Documents/NetBeansProjects/hnhx/src/plugin.yml + file:/C:/Users/hanna/Documents/NetBeansProjects/hnhx/src/xenon/events/CustomMessages.java + + + diff --git a/nbproject/project.properties b/nbproject/project.properties new file mode 100644 index 0000000..44143ed --- /dev/null +++ b/nbproject/project.properties @@ -0,0 +1,99 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processor.options= +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.modulepath=\ + ${run.modulepath} +debug.test.classpath=\ + ${run.test.classpath} +debug.test.modulepath=\ + ${run.test.modulepath} +# Files in build.classes.dir which should be excluded from distribution jar +dist.archive.excludes= +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/xenon.jar +dist.javadoc.dir=${dist.dir}/javadoc +dist.jlink.dir=${dist.dir}/jlink +dist.jlink.output=${dist.jlink.dir}/xenon +excludes= +file.reference.spigot-1.16.5.jar=api\\spigot-1.16.5.jar +file.reference.spigot1122.jar=C:\\Users\\hanna\\Downloads\\spigot1122.jar +includes=** +jar.compress=false +javac.classpath=\ + ${file.reference.spigot1122.jar}:\ + ${file.reference.spigot-1.16.5.jar} +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.external.vm=true +javac.modulepath= +javac.processormodulepath= +javac.processorpath=\ + ${javac.classpath} +javac.source=1.8 +javac.target=1.8 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.modulepath=\ + ${javac.modulepath} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.html5=false +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +# The jlink additional root modules to resolve +jlink.additionalmodules= +# The jlink additional command line parameters +jlink.additionalparam= +jlink.launcher=true +jlink.launcher.name=xenon +main.class=hnhx.Hnhx +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project. +# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. +# To set system properties for unit tests define test-sys-prop.name=value: +run.jvmargs= +run.modulepath=\ + ${javac.modulepath} +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +run.test.modulepath=\ + ${javac.test.modulepath} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/nbproject/project.xml b/nbproject/project.xml new file mode 100644 index 0000000..476a3a4 --- /dev/null +++ b/nbproject/project.xml @@ -0,0 +1,15 @@ + + + org.netbeans.modules.java.j2seproject + + + xenon + + + + + + + + + diff --git a/src/plugin.yml b/src/plugin.yml new file mode 100644 index 0000000..04af7e2 --- /dev/null +++ b/src/plugin.yml @@ -0,0 +1,14 @@ +main: xenon.main +name: xenon +version: 1.0 +api-version: 1.16 +description: The main plugin of Xenon. +commands: + kill: + aliases: suicide + help: + discord: + aliases: d + stats: + joindate: + aliases: jd \ No newline at end of file diff --git a/src/xenon/commands/Discord.java b/src/xenon/commands/Discord.java new file mode 100644 index 0000000..38ddcb5 --- /dev/null +++ b/src/xenon/commands/Discord.java @@ -0,0 +1,22 @@ +package xenon.commands; + + +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.Command; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; + +/** + * + * @author hanna + */ +public class Discord implements Listener, CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String labe, String[] args) { + Player p = (Player) sender; + p.sendMessage("§bClick on the link to join: §dhttps://discord.gg/gHn8aqTR5j"); + return true; + } +} diff --git a/src/xenon/commands/Help.java b/src/xenon/commands/Help.java new file mode 100644 index 0000000..05e15ca --- /dev/null +++ b/src/xenon/commands/Help.java @@ -0,0 +1,26 @@ +package xenon.commands; + +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.Command; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; + +/** + * + * @author hanna + */ +public class Help implements Listener, CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String labe, String[] args) { + Player p = (Player) sender; + p.sendMessage("§d/kill §bKills you\n" + + "§d/stats §bServer information\n" + + "§d/discord §bLink to the discord server\n" + + "§d/tps §bTPS from the last 1m, 5m, 15m\n" + + "§d/help §bThis command\n" + + "§d/joindate (player) §bJoindate of a player"); + return true; + } +} diff --git a/src/xenon/commands/Joindate.java b/src/xenon/commands/Joindate.java new file mode 100644 index 0000000..70839a9 --- /dev/null +++ b/src/xenon/commands/Joindate.java @@ -0,0 +1,41 @@ +package xenon.commands; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.Command; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; + +/** + * + * @author hanna + */ +public class Joindate implements Listener, CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String labe, String[] args) { + Player p = (Player) sender; + OfflinePlayer targetPlayer = Bukkit.getOfflinePlayer(p.getName()); + if (args.length != 0 ) { + String target = args[0]; + targetPlayer = Bukkit.getOfflinePlayer(target); + } + + long joinTime = targetPlayer.getFirstPlayed(); + if (joinTime == 0) { + p.sendMessage("§cThat user never played here!"); + return false; + } + Date joinDate = new Date(joinTime); + DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); + String joinDateFormatted = String.format("§d%s §bjoin date: §d%s", targetPlayer.getName(), df.format(joinDate)); + p.sendMessage(joinDateFormatted); + + return true; + } +} diff --git a/src/xenon/commands/Kill.java b/src/xenon/commands/Kill.java new file mode 100644 index 0000000..dc0db3a --- /dev/null +++ b/src/xenon/commands/Kill.java @@ -0,0 +1,21 @@ +package xenon.commands; + +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.Command; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; + +/** + * + * @author hanna + */ +public class Kill implements Listener, CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String labe, String[] args) { + Player p = (Player) sender; + p.setHealth(0); + return true; + } +} diff --git a/src/xenon/commands/Stats.java b/src/xenon/commands/Stats.java new file mode 100644 index 0000000..52f3395 --- /dev/null +++ b/src/xenon/commands/Stats.java @@ -0,0 +1,92 @@ +package xenon.commands; + +import xenon.misc.GetElapsedTime; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.attribute.BasicFileAttributes; +import java.nio.file.attribute.FileTime; +import java.text.CharacterIterator; +import java.text.StringCharacterIterator; +import org.bukkit.Bukkit; +import org.bukkit.Chunk; +import org.bukkit.World; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.Command; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; + +/** + * + * @author hanna + */ +public class Stats implements Listener, CommandExecutor { + + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String labe, String[] args) { + Player p = (Player) sender; + int allPlayers = Bukkit.getOfflinePlayers().length; + long maxRam = Runtime.getRuntime().maxMemory() / 1024 / 1024; + long usedRam = Runtime.getRuntime().freeMemory() / 1024 / 1024; + long size = 0; + for (World world : Bukkit.getWorlds()) { + String worldName = world.getName(); + File worldFile = new File(worldName); + size+= getDirectorySizeLegacy(worldFile); + + } + + File owFile = new File(Bukkit.getWorlds().get(0).getName()); + long creationTime = 0; + try { + BasicFileAttributes attrs = Files.readAttributes(owFile.toPath(), BasicFileAttributes.class); + FileTime time = attrs.creationTime(); + creationTime = time.toMillis(); + } catch (IOException e) { + e.printStackTrace(); + } + + String serverAge = GetElapsedTime.get(creationTime).replace(" -", ", "); + + String readableSize = humanReadableByteCountBin(size); + + p.sendMessage(String.format("§bCurrent RAM usage: §d%s MB §b/ §d%s MB\n" + + "§bCurrent server size: §d%s\n" + + "§bThe server is %s §bold.\n" + + "§bThere are §d%s §bindividual players who joined at least once.",usedRam,maxRam, readableSize, serverAge, allPlayers)); + return true; + } + + + public static long getDirectorySizeLegacy(File dir) { + long length = 0; + File[] files = dir.listFiles(); + if (files != null) { + for (File file : files) { + if (file.isFile()) + length += file.length(); + else + length += getDirectorySizeLegacy(file); + } + } + return length; + } + + public static String humanReadableByteCountBin(long bytes) { + long absB = bytes == Long.MIN_VALUE ? Long.MAX_VALUE : Math.abs(bytes); + if (absB < 1024) { + return bytes + " B"; + } + long value = absB; + CharacterIterator ci = new StringCharacterIterator("KMGTPE"); + for (int i = 40; i >= 0 && absB > 0xfffccccccccccccL >> i; i -= 10) { + value >>= 10; + ci.next(); + } + value *= Long.signum(bytes); + return String.format("%.1f %cB", value / 1024.0, ci.current()); +} + +} diff --git a/src/xenon/events/AntiIllegals.java b/src/xenon/events/AntiIllegals.java new file mode 100644 index 0000000..83c004c --- /dev/null +++ b/src/xenon/events/AntiIllegals.java @@ -0,0 +1,74 @@ +package xenon.events; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityPickupItemEvent; +import org.bukkit.event.inventory.InventoryOpenEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; +import xenon.misc.Common; + +/** + * + * @author hanna + */ +public class AntiIllegals implements Listener { + @EventHandler + public void PlayerPickupItemEvent​(EntityPickupItemEvent e) { + if (e.getEntity().getType() == EntityType.PLAYER) { + UUID uuid = e.getEntity().getUniqueId(); + Player p = Bukkit.getPlayer(uuid); + new BukkitRunnable(){ + @Override + public void run(){ + Inventory inv = p.getInventory(); + revert(inv); + } + }.runTaskLater(Common.getPlugin(), 1); + } + } + + @EventHandler + public void onInventoryOpenEvent(InventoryOpenEvent e){ + Inventory inv = e.getInventory(); + revert(inv); + } + + static List illegals = Arrays.asList(Material.BEDROCK, Material.END_PORTAL_FRAME, Material.SPAWNER); + + public void revert(Inventory inv) { + for(ItemStack item : inv.getContents()) { + if (item != null) { + + // remove illegal items + if (illegals.contains(item.getType())) { + inv.remove(item); + continue; + } + + // revert illegal enchantments + if (item.getEnchantments() != null) { + for(Map.Entry enchantment : item.getEnchantments().entrySet()) { + Enchantment enchantmentType = enchantment.getKey(); + int enchantmentLevel = enchantment.getValue(); + int enchantmentMaxLevel = enchantmentType.getMaxLevel(); + if (enchantmentLevel > enchantmentMaxLevel) { + item.removeEnchantment(enchantmentType); + item.addEnchantment(enchantmentType, enchantmentMaxLevel); + } + } + } + } + } + } +} diff --git a/src/xenon/events/AntiNetherRoof.java b/src/xenon/events/AntiNetherRoof.java new file mode 100644 index 0000000..828b55d --- /dev/null +++ b/src/xenon/events/AntiNetherRoof.java @@ -0,0 +1,52 @@ +package xenon.events; + +import java.util.ArrayList; +import java.util.List; +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.scheduler.BukkitRunnable; +import xenon.misc.Common; + +/** + * + * @author hanna + */ +public class AntiNetherRoof implements Listener { + @EventHandler + public void onMove(PlayerMoveEvent event) { + if (!playersToDamage.contains(event.getPlayer())) { + World nether = Bukkit.getServer().getWorlds().get(1); + if (event.getPlayer().getWorld() == nether) { + if (event.getPlayer().getLocation().getY() >= 128 || 0 >= event.getPlayer().getLocation().getY()) { + playersToDamage.add(event.getPlayer()); + netherRoofDamage(event.getPlayer()); + } + } + } + } + + + protected List playersToDamage = new ArrayList(); + public void netherRoofDamage(Player p) { + new BukkitRunnable(){ + int netherDamage = 2; + @Override + public void run(){ + World nether = Bukkit.getServer().getWorlds().get(1); + if (p.getWorld() == nether) { + if (p.getLocation().getY() >= 128 || 0 >= p.getLocation().getY()) { + p.damage(netherDamage); + netherDamage *= 1.5; + } else { + playersToDamage.remove(p); + this.cancel(); + } + } + } + }.runTaskTimer(Common.getPlugin(), 0, 20); + } +} diff --git a/src/xenon/events/AntiSpam.java b/src/xenon/events/AntiSpam.java new file mode 100644 index 0000000..45c2db6 --- /dev/null +++ b/src/xenon/events/AntiSpam.java @@ -0,0 +1,84 @@ +package xenon.events; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; + +/** + * + * @author hanna + */ +public class AntiSpam implements Listener { + HashMap> playerMessages = new HashMap>(); + @EventHandler + public void onChat(AsyncPlayerChatEvent event) { + + String UUID = event.getPlayer().getUniqueId().toString(); + + String newMessage = event.getMessage(); + List messages = new ArrayList(); + messages = playerMessages.get(UUID); + List newMessageWords = Arrays.asList(newMessage.split(" ")); + + if (messages == null) { + messages = new ArrayList(); + messages.add(newMessage); + playerMessages.put(UUID, messages); + } else { + if (newMessage.length() > 6 && newMessageWords.size() > 2) { + for (String oldMessage : messages) { + + if (oldMessage.toLowerCase().equals(newMessage.toLowerCase())) { + event.getPlayer().sendMessage("§cYour message has been detected as spam!"); + event.setCancelled(true); + break; + } + + List oldMessageWords = Arrays.asList(oldMessage.split(" ")); + + List oldMessageWordsLower = new ArrayList(); + for (String msg : oldMessageWords) { + oldMessageWordsLower.add(msg.toLowerCase()); + } + + List newMessageWordsLower = new ArrayList(); + for (String msg : newMessageWords) { + newMessageWordsLower.add(msg.toLowerCase()); + } + + + if (3 > oldMessageWords.size() - newMessageWords.size()) { + + ArrayList duplicates = new ArrayList(oldMessageWordsLower); + duplicates.retainAll(newMessageWordsLower); + + if (duplicates.size() >= newMessageWords.size() - 1) { + event.getPlayer().sendMessage("§cYour message has been detected as spam!"); + event.setCancelled(true); + break; + } + + } + } + + } else if (newMessage.toLowerCase().equals(messages.get(messages.size() - 1).toLowerCase())) { + event.getPlayer().sendMessage("§cYour message has been detected as spam!"); + event.setCancelled(true); + } + + if (!event.isCancelled()) { + if (25 > messages.size()) { + messages.add(newMessage); + } else { + messages.remove(0); + messages.add(newMessage); + } + playerMessages.put(UUID, messages); + } + } + } +} diff --git a/src/xenon/events/BoatflyPatch.java b/src/xenon/events/BoatflyPatch.java new file mode 100644 index 0000000..df17f43 --- /dev/null +++ b/src/xenon/events/BoatflyPatch.java @@ -0,0 +1,29 @@ +package xenon.events; + +import org.bukkit.Material; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.entity.Vehicle; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; + +/** + * + * @author hanna + */ +public class BoatflyPatch implements Listener { + @EventHandler + public void onMove(PlayerMoveEvent event) { + Player p = event.getPlayer(); + if (p.isInsideVehicle()) { + if(p.getVehicle().getType() == EntityType.BOAT){ + Vehicle v = (Vehicle) p.getVehicle(); + if (v.getLocation().getBlock().getRelative(BlockFace.DOWN).getType() == Material.AIR) { + v.eject(); + } + } + } + } +} diff --git a/src/xenon/events/CustomChat.java b/src/xenon/events/CustomChat.java new file mode 100644 index 0000000..b7c1b29 --- /dev/null +++ b/src/xenon/events/CustomChat.java @@ -0,0 +1,59 @@ +package xenon.events; + +import java.util.HashMap; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; + +/** + * + * @author hanna + */ +public class CustomChat implements Listener { + @EventHandler + public void onChat(AsyncPlayerChatEvent event) { + event.setFormat("§d%s§b: §f%s"); + + String message = event.getMessage(); + + if (message.charAt(0) == '$') event.setMessage(lgbtColors(message)); + + if (message.charAt(0) == '>') event.setMessage("§a" + message); + } + + public static String lgbtColors(String textToConvert) { + if (3 > textToConvert.length()) return textToConvert; + + HashMap colors = new HashMap(); + colors.put('g',new String[]{"§c", "§6", "§e", "§a", "§3", "§d"}); + colors.put('t',new String[]{"§b", "§d", "§f", "§d", "§b"}); + colors.put('b',new String[]{"§d", "§5", "§3"}); + colors.put('p',new String[]{"§d", "§e", "§b"}); + colors.put('n',new String[]{"§e", "§f", "§5", "§0"}); + colors.put('l',new String[]{"§c", "§e", "§f", "§d", "§5"}); + + String[] chosenColors = colors.get(Character.toLowerCase(textToConvert.charAt(1))); + if (chosenColors == null) return textToConvert; + + String convertedText = ""; + byte colorCount = 0; + for (int i = 2; i < textToConvert.length(); i++) { + char c = textToConvert.charAt(i); + if (c == ' ') { + convertedText += c; + continue; + } + + convertedText += chosenColors[colorCount] + c; + + if (colorCount >= chosenColors.length - 1) { + colorCount = 0; + } else { + colorCount++; + } + + } + + return convertedText; + } +} diff --git a/src/xenon/events/CustomMessages.java b/src/xenon/events/CustomMessages.java new file mode 100644 index 0000000..bce3235 --- /dev/null +++ b/src/xenon/events/CustomMessages.java @@ -0,0 +1,26 @@ +package xenon.events; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent​; +import org.bukkit.event.player.PlayerJoinEvent; + +/** + * + * @author hanna + */ +public class CustomMessages implements Listener { + @EventHandler + public void PlayerDeathEvent​(PlayerDeathEvent​ event) { + String pName = event.getEntity().getName(); + String dMessage = event.getDeathMessage().replace(pName + " ", ""); + event.setDeathMessage(String.format("§d%s §b%s",pName, dMessage)); + } + + @EventHandler + public void PlayerJoinEvent(PlayerJoinEvent e) { + e.setJoinMessage(String.format("§d%s §bjoined the server %s", e.getPlayer().getName(), (e.getPlayer().hasPlayedBefore() ? "" : "§dfor the first time"))); + } + + +} diff --git a/src/xenon/events/CustomTab.java b/src/xenon/events/CustomTab.java new file mode 100644 index 0000000..8f78ea1 --- /dev/null +++ b/src/xenon/events/CustomTab.java @@ -0,0 +1,78 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package xenon.events; + +import java.lang.reflect.Field; +import net.minecraft.server.v1_16_R3.ChatComponentText; +import net.minecraft.server.v1_16_R3.MinecraftServer; +import net.minecraft.server.v1_16_R3.PacketPlayOutPlayerListHeaderFooter; +import org.bukkit.Bukkit; +import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; +import xenon.misc.Common; +import xenon.misc.GetElapsedTime; + +/** + * + * @author hanna + */ +public class CustomTab { + public static void tab() { + long startTime = System.currentTimeMillis(); + + PacketPlayOutPlayerListHeaderFooter packet = new PacketPlayOutPlayerListHeaderFooter(); + new BukkitRunnable() { + @Override + public void run() { + try { + Field header = packet.getClass().getDeclaredField("header"); + header.setAccessible(true); + + Field footer = packet.getClass().getDeclaredField("footer"); + footer.setAccessible(true); + + + // PLAYERS + int onlinePlayers = Bukkit.getOnlinePlayers().size(); + int maxPlayers = Bukkit.getMaxPlayers(); + + + // TPS + double tps = MinecraftServer.getServer().recentTps[0]; + double fixedTps = (tps > 20 ? 20 : tps); + + // Uptime + String uptime = "§bUptime: " + GetElapsedTime.get(startTime); + + for (Player p : Bukkit.getOnlinePlayers()) { + String name = p.getName(); + + int ping = ((CraftPlayer) p).getHandle().ping; + + String headerMessage = String.format("§b§l§ka§r §d§lXenon §r§b§l§ka\n§d%s §b/ §d%s §bplayers\n", onlinePlayers, maxPlayers); + Object headerObj = new ChatComponentText(headerMessage); + + String footerMessage = String.format("\n§bTPS: §d%.2f §b- Ping: §d%s\n%s\n§bDiscord: §d/discord\n\n§cElytra fly hacks are limited but not disabled.\n§cThis might change depending on the server's performance",fixedTps,ping,uptime); + Object footerObj = new ChatComponentText(footerMessage); + + header.set(packet, headerObj); + footer.set(packet, footerObj); + + + ((CraftPlayer) p).getHandle().playerConnection.sendPacket(packet); + } + + + } catch (Exception e) { + e.printStackTrace(); + } + + } + + }.runTaskTimer(Common.getPlugin(), 0, 20); + } +} diff --git a/src/xenon/events/ElytraflyPatch.java b/src/xenon/events/ElytraflyPatch.java new file mode 100644 index 0000000..6c7274a --- /dev/null +++ b/src/xenon/events/ElytraflyPatch.java @@ -0,0 +1,75 @@ +package xenon.events; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.scheduler.BukkitRunnable; +import xenon.misc.Common; + +/** + * + * @author hanna + */ +public class ElytraflyPatch implements Listener { + + @EventHandler + public void PlayerJoinEvent(PlayerJoinEvent e) { + e.getPlayer().setGliding(false); + elytraPatch(e.getPlayer()); + } + + public void elytraPatch(Player p) { + new BukkitRunnable(){ + + Location prevLocation = p.getLocation(); + protected List distancesFlown = new ArrayList(); + Location glideStarted = null; + + @Override + public void run(){ + + if (!p.isOnline()) { + this.cancel(); + } + + Location curLocation = p.getLocation(); + double curDistanceFlown = curLocation.distanceSquared(prevLocation); + + if (p.isGliding() && !p.isInWater()) { + if (glideStarted == null) glideStarted = curLocation; + + if (distancesFlown.size() == 10) { + + HashSet fDistanceFlown = new HashSet(distancesFlown); + if (8 >= fDistanceFlown.size() ) { + p.teleport(glideStarted); + distancesFlown.clear(); + p.setGliding(false); + //p.sendMessage("§cElytra hacks are not allowed!"); + //p.kickPlayer("§b§l[§d§lXENON§b§l]\n\n§bKick reason: §dElytra related"); + } + + + glideStarted = curLocation; + } + if (distancesFlown.size() == 20) { + distancesFlown.clear(); + } else { + distancesFlown.add(Double.parseDouble(String.format("%.6g%n", curDistanceFlown))); + } + + } else { + glideStarted = null; + } + prevLocation = curLocation; + + } + }.runTaskTimer(Common.getPlugin(), 0, 3); + } + +} diff --git a/src/xenon/events/LimitArmorStands.java b/src/xenon/events/LimitArmorStands.java new file mode 100644 index 0000000..c6e2b09 --- /dev/null +++ b/src/xenon/events/LimitArmorStands.java @@ -0,0 +1,37 @@ +package xenon.events; + +import org.bukkit.Bukkit; +import org.bukkit.Chunk; +import org.bukkit.EntityEffect; +import org.bukkit.World; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.scheduler.BukkitRunnable; +import xenon.misc.Common; + +/** + * + * @author hanna + */ +public class LimitArmorStands { + public static void limit() { + new BukkitRunnable() { + @Override + public void run() { + for (World world: Bukkit.getServer().getWorlds()) + for (Chunk chunk : world.getLoadedChunks()) { + int armorStandCount = 0; + for (Entity entity : chunk.getEntities()) { + if (entity.getType() == EntityType.ARMOR_STAND) { + armorStandCount++; + if (armorStandCount > 10) { + entity.playEffect(EntityEffect.DEATH); + entity.remove(); + } + } + } + } + + }}.runTaskTimer(Common.getPlugin(), 0, 20); + } +} diff --git a/src/xenon/events/RandomRespawn.java b/src/xenon/events/RandomRespawn.java new file mode 100644 index 0000000..3607a1c --- /dev/null +++ b/src/xenon/events/RandomRespawn.java @@ -0,0 +1,50 @@ +package xenon.events; + +import java.util.Arrays; +import java.util.List; +import java.util.Random; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerRespawnEvent; + +/** + * + * @author hanna + */ +public class RandomRespawn implements Listener { + + @EventHandler + public void onRespawn(PlayerRespawnEvent event) { + Player p = event.getPlayer(); + if (p.getBedSpawnLocation() == null) { + World overWorld = Bukkit.getServer().getWorlds().get(0); + List blacklistedBlocks = Arrays.asList(Material.AIR, Material.VOID_AIR); + int radius = 1001; + + Boolean safeRespawn = false; + Location potentialSpawn = null; + Random r = new Random(); + do { + int x = r.nextInt(radius); + int z = r.nextInt(radius); + + for (int y = overWorld.getMaxHeight(); y>0; y--) { + potentialSpawn = new Location(overWorld, x,y,z); + Block currentBlock = potentialSpawn.getBlock(); + if (!blacklistedBlocks.contains(currentBlock.getType())) { + safeRespawn = true; + event.setRespawnLocation(potentialSpawn); + break; + } + + } + } while (!safeRespawn); + } + } +} diff --git a/src/xenon/main.java b/src/xenon/main.java new file mode 100644 index 0000000..20942d1 --- /dev/null +++ b/src/xenon/main.java @@ -0,0 +1,51 @@ +package xenon; + + + +import xenon.commands.Discord; +import xenon.commands.Help; +import xenon.commands.Stats; +import xenon.commands.Joindate; +import xenon.commands.Kill; +import org.bukkit.event.Listener; +import org.bukkit.plugin.java.JavaPlugin; +import xenon.events.AntiIllegals; +import xenon.events.AntiNetherRoof; +import xenon.events.AntiSpam; +import xenon.events.BoatflyPatch; +import xenon.events.CustomChat; +import xenon.events.CustomMessages; +import xenon.events.CustomTab; +import xenon.events.ElytraflyPatch; +import xenon.events.LimitArmorStands; +import xenon.events.RandomRespawn; + +/** + * + * @author hanna + */ + + public class main extends JavaPlugin implements Listener { + + @Override + public void onEnable() { + getServer().getPluginManager().registerEvents(new AntiIllegals(), this); + getServer().getPluginManager().registerEvents(new AntiNetherRoof(), this); + getServer().getPluginManager().registerEvents(new AntiSpam(), this); + getServer().getPluginManager().registerEvents(new BoatflyPatch(), this); + getServer().getPluginManager().registerEvents(new CustomChat(), this); + getServer().getPluginManager().registerEvents(new CustomMessages(), this); + getServer().getPluginManager().registerEvents(new ElytraflyPatch(), this); + getServer().getPluginManager().registerEvents(new RandomRespawn(), this); + + LimitArmorStands.limit(); + CustomTab.tab(); + + this.getCommand("kill").setExecutor(new Kill()); + this.getCommand("help").setExecutor(new Help()); + this.getCommand("discord").setExecutor(new Discord()); + this.getCommand("stats").setExecutor(new Stats()); + this.getCommand("joindate").setExecutor(new Joindate()); + + } +} \ No newline at end of file diff --git a/src/xenon/misc/Common.java b/src/xenon/misc/Common.java new file mode 100644 index 0000000..376ac3e --- /dev/null +++ b/src/xenon/misc/Common.java @@ -0,0 +1,14 @@ +package xenon.misc; + +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; + +/** + * + * @author hanna + */ +public class Common { + public static Plugin getPlugin() { + return Bukkit.getServer().getPluginManager().getPlugin("xenon"); + } +} diff --git a/src/xenon/misc/GetElapsedTime.java b/src/xenon/misc/GetElapsedTime.java new file mode 100644 index 0000000..178fdfa --- /dev/null +++ b/src/xenon/misc/GetElapsedTime.java @@ -0,0 +1,42 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package xenon.misc; + +/** + * + * @author hanna + */ +public class GetElapsedTime { + + public static String get(long timeToConvert) { + // UPTIME + long different = System.currentTimeMillis() - timeToConvert; + + long secondsInMilli = 1000; + long minutesInMilli = secondsInMilli * 60; + long hoursInMilli = minutesInMilli * 60; + long daysInMilli = hoursInMilli * 24; + long weeksInMilli = daysInMilli * 7; + + long elapsedWeeks = different / weeksInMilli; + different = different % weeksInMilli; + + long elapsedDays = different / daysInMilli; + different = different % daysInMilli; + + long elapsedHours = different / hoursInMilli; + different = different % hoursInMilli; + + long elapsedMinutes = different / minutesInMilli; + different = different % minutesInMilli; + + long elapsedSeconds = different / secondsInMilli; + + return String.format("§d%d w§b - §d%d d§b - §d%d h§b - §d%d m§b - §d%d s", elapsedWeeks,elapsedDays,elapsedHours,elapsedMinutes,elapsedSeconds); + + } + +}