From f56b77039b502543089f3c3ff924e34d8b6e42f0 Mon Sep 17 00:00:00 2001 From: admin Date: Thu, 10 Oct 2024 09:14:21 -0400 Subject: [PATCH 01/19] Update structure project --- .github/workflows/{gradle.yml => build.yml} | 34 +++++----- .gitignore | 0 bastion/README.md | 5 ++ bastion/bastion.png | Bin 0 -> 19296 bytes bastion/build.gradle | 19 ++++++ .../main/java/com/otfhee/bastion/Bastion.java | 15 +++++ bastion/src/main/resources/paper-plugin.yml | 4 ++ build.gradle | 63 ++++-------------- gradle.properties | 1 + gradle/wrapper/gradle-wrapper.jar | Bin gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 0 gradlew.bat | 0 paper/build.gradle | 31 +++++++++ .../src}/main/java/com/otfhee/Plugin.java | 1 - .../java/com/otfhee/commands/CoinCommand.java | 0 .../com/otfhee/commands/DiscordCommand.java | 0 .../java/com/otfhee/commands/DoCommand.java | 0 .../otfhee/commands/GlobalModeCommand.java | 0 .../java/com/otfhee/commands/ItemCommand.java | 0 .../java/com/otfhee/commands/MeCommand.java | 0 .../java/com/otfhee/commands/NOTDCommand.java | 0 .../com/otfhee/commands/NicknameCommand.java | 0 .../com/otfhee/commands/ParticleCommand.java | 0 .../java/com/otfhee/commands/PingCommand.java | 0 .../com/otfhee/commands/PrefixCommand.java | 0 .../com/otfhee/commands/PremiumCommand.java | 0 .../commands/PrivateMessagesCommand.java | 0 .../com/otfhee/commands/RulesCommand.java | 0 .../java/com/otfhee/commands/SiteCommand.java | 0 .../com/otfhee/commands/StuffCommand.java | 0 .../com/otfhee/commands/TelegramCommand.java | 0 .../java/com/otfhee/commands/TryCommand.java | 0 .../otfhee/configurations/PlayersConfig.java | 0 .../java/com/otfhee/handlers/ChatHandler.java | 0 .../java/com/otfhee/handlers/ChatType.java | 0 .../com/otfhee/handlers/ColorHandler.java | 0 .../java/com/otfhee/handlers/ColorType.java | 0 .../otfhee/handlers/DisplayNameHandler.java | 0 .../java/com/otfhee/handlers/MessageType.java | 0 .../com/otfhee/handlers/ParticleHandler.java | 0 .../com/otfhee/handlers/ParticleType.java | 0 .../com/otfhee/handlers/PrefixHandler.java | 0 .../java/com/otfhee/handlers/PrefixType.java | 0 .../com/otfhee/handlers/PremiumHandler.java | 0 .../java/com/otfhee/handlers/RateType.java | 0 .../listeners/AntiGreefingListener.java | 0 .../otfhee/listeners/AsyncChatListener.java | 0 .../com/otfhee/listeners/MoveListener.java | 0 .../listeners/PlayerHeadDropListener.java | 0 .../listeners/PlayerJoinLeaveListener.java | 0 .../com/otfhee/schedulers/AutoRestart.java | 0 .../com/otfhee/schedulers/CheckPremium.java | 0 .../otfhee/schedulers/CheckStuffStatus.java | 0 .../java/com/otfhee/schedulers/TabList.java | 0 paper/src/main/resources/paper-plugin.yml | 4 ++ settings.gradle | 9 ++- src/main/resources/config.yml | 1 - src/main/resources/players.yml | 0 src/main/resources/plugin.yml | 5 -- velocity/build.gradle | 18 +++++ .../main/java/com/otfhee/velocity/Main.java | 4 ++ 62 files changed, 140 insertions(+), 76 deletions(-) rename .github/workflows/{gradle.yml => build.yml} (64%) mode change 100644 => 100755 .gitignore create mode 100644 bastion/README.md create mode 100644 bastion/bastion.png create mode 100644 bastion/build.gradle create mode 100644 bastion/src/main/java/com/otfhee/bastion/Bastion.java create mode 100644 bastion/src/main/resources/paper-plugin.yml mode change 100644 => 100755 build.gradle mode change 100644 => 100755 gradle.properties mode change 100644 => 100755 gradle/wrapper/gradle-wrapper.jar mode change 100644 => 100755 gradle/wrapper/gradle-wrapper.properties mode change 100644 => 100755 gradlew mode change 100644 => 100755 gradlew.bat create mode 100644 paper/build.gradle rename {src => paper/src}/main/java/com/otfhee/Plugin.java (99%) rename {src => paper/src}/main/java/com/otfhee/commands/CoinCommand.java (100%) rename {src => paper/src}/main/java/com/otfhee/commands/DiscordCommand.java (100%) rename {src => paper/src}/main/java/com/otfhee/commands/DoCommand.java (100%) rename {src => paper/src}/main/java/com/otfhee/commands/GlobalModeCommand.java (100%) rename {src => paper/src}/main/java/com/otfhee/commands/ItemCommand.java (100%) rename {src => paper/src}/main/java/com/otfhee/commands/MeCommand.java (100%) rename {src => paper/src}/main/java/com/otfhee/commands/NOTDCommand.java (100%) rename {src => paper/src}/main/java/com/otfhee/commands/NicknameCommand.java (100%) rename {src => paper/src}/main/java/com/otfhee/commands/ParticleCommand.java (100%) rename {src => paper/src}/main/java/com/otfhee/commands/PingCommand.java (100%) rename {src => paper/src}/main/java/com/otfhee/commands/PrefixCommand.java (100%) rename {src => paper/src}/main/java/com/otfhee/commands/PremiumCommand.java (100%) rename {src => paper/src}/main/java/com/otfhee/commands/PrivateMessagesCommand.java (100%) rename {src => paper/src}/main/java/com/otfhee/commands/RulesCommand.java (100%) rename {src => paper/src}/main/java/com/otfhee/commands/SiteCommand.java (100%) rename {src => paper/src}/main/java/com/otfhee/commands/StuffCommand.java (100%) rename {src => paper/src}/main/java/com/otfhee/commands/TelegramCommand.java (100%) rename {src => paper/src}/main/java/com/otfhee/commands/TryCommand.java (100%) rename {src => paper/src}/main/java/com/otfhee/configurations/PlayersConfig.java (100%) rename {src => paper/src}/main/java/com/otfhee/handlers/ChatHandler.java (100%) rename {src => paper/src}/main/java/com/otfhee/handlers/ChatType.java (100%) rename {src => paper/src}/main/java/com/otfhee/handlers/ColorHandler.java (100%) rename {src => paper/src}/main/java/com/otfhee/handlers/ColorType.java (100%) rename {src => paper/src}/main/java/com/otfhee/handlers/DisplayNameHandler.java (100%) rename {src => paper/src}/main/java/com/otfhee/handlers/MessageType.java (100%) rename {src => paper/src}/main/java/com/otfhee/handlers/ParticleHandler.java (100%) rename {src => paper/src}/main/java/com/otfhee/handlers/ParticleType.java (100%) rename {src => paper/src}/main/java/com/otfhee/handlers/PrefixHandler.java (100%) rename {src => paper/src}/main/java/com/otfhee/handlers/PrefixType.java (100%) rename {src => paper/src}/main/java/com/otfhee/handlers/PremiumHandler.java (100%) rename {src => paper/src}/main/java/com/otfhee/handlers/RateType.java (100%) rename {src => paper/src}/main/java/com/otfhee/listeners/AntiGreefingListener.java (100%) rename {src => paper/src}/main/java/com/otfhee/listeners/AsyncChatListener.java (100%) rename {src => paper/src}/main/java/com/otfhee/listeners/MoveListener.java (100%) rename {src => paper/src}/main/java/com/otfhee/listeners/PlayerHeadDropListener.java (100%) rename {src => paper/src}/main/java/com/otfhee/listeners/PlayerJoinLeaveListener.java (100%) rename {src => paper/src}/main/java/com/otfhee/schedulers/AutoRestart.java (100%) rename {src => paper/src}/main/java/com/otfhee/schedulers/CheckPremium.java (100%) rename {src => paper/src}/main/java/com/otfhee/schedulers/CheckStuffStatus.java (100%) rename {src => paper/src}/main/java/com/otfhee/schedulers/TabList.java (100%) create mode 100644 paper/src/main/resources/paper-plugin.yml mode change 100644 => 100755 settings.gradle delete mode 100644 src/main/resources/config.yml delete mode 100644 src/main/resources/players.yml delete mode 100644 src/main/resources/plugin.yml create mode 100644 velocity/build.gradle create mode 100644 velocity/src/main/java/com/otfhee/velocity/Main.java diff --git a/.github/workflows/gradle.yml b/.github/workflows/build.yml similarity index 64% rename from .github/workflows/gradle.yml rename to .github/workflows/build.yml index fb6c44d..daf85c5 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/build.yml @@ -21,22 +21,22 @@ jobs: contents: read steps: - - uses: actions/checkout@v4 - - name: Set up JDK 21 - uses: actions/setup-java@v4 - with: - java-version: '21' - distribution: 'temurin' - - # Configure Gradle for optimal use in GitHub Actions, including caching of downloaded dependencies. - # See: https://github.com/gradle/actions/blob/main/setup-gradle/README.md - - name: Setup Gradle - uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 - - - name: Make gradlew executable - run: chmod +x ./gradlew - - name: Build with Gradle Wrapper - run: ./gradlew build + - uses: actions/checkout@v4 + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + java-version: '21' + distribution: 'temurin' + + # Configure Gradle for optimal use in GitHub Actions, including caching of downloaded dependencies. + # See: https://github.com/gradle/actions/blob/main/setup-gradle/README.md + - name: Setup Gradle + uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 + + - name: Make gradlew executable + run: chmod +x ./gradlew + - name: Build with Gradle Wrapper + run: ./gradlew build # NOTE: The Gradle Wrapper is the default and recommended way to run Gradle (https://docs.gradle.org/current/userguide/gradle_wrapper.html). # If your project does not have the Gradle Wrapper configured, you can use the following configuration to run Gradle with a specified version. @@ -47,4 +47,4 @@ jobs: # gradle-version: '8.9' # # - name: Build with Gradle 8.9 - # run: gradle build + # run: gradle build \ No newline at end of file diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/bastion/README.md b/bastion/README.md new file mode 100644 index 0000000..ade6867 --- /dev/null +++ b/bastion/README.md @@ -0,0 +1,5 @@ +
+ +

+

The best Minecraft AntiCheat.

+
\ No newline at end of file diff --git a/bastion/bastion.png b/bastion/bastion.png new file mode 100644 index 0000000000000000000000000000000000000000..6f75bf4e702a1564d62be682d356330cac076752 GIT binary patch literal 19296 zcmce-1z23mvM4;bTd=_`I0J*bYX}a(ZE%7Nu0ew(SO^KOAtb@wU4n!l2_D=vxa(W& zz0bbqzWUaXjtV@P zJS=_zd|!F>Hip41o-~&n2VnF4-gLraeCFqo`Ttv9IyuH0Sy?Hs|Znj+9!otE_P#!KG9tZ#darbrhfcZe2-5LHdf}FLxrJKEr zhdtbx_F+Vr1>Dm^oF16!pENkR{5`C*`(JzlIL74zbK&CVgg(&p2cVVZ-*7ITZjOH- zx3c82cC>b~cJ^=wV7dQ>b+Lncz}@ZO|7PgFoBtC6fVZluf8+R--K=3Aa5o(|-0>g6qwx?ga&yzN=-E44!M)vCABgy?hqWBc z!&;pFL6RU)AqbC<4i8j>hew2)pB>680)_qwstUKVxAFa-K!tU<1w^30OZY#50&;8x z^ML)Az*d$bHgGp57_bQTPB2?*E*EE8dfLC2Rzw!=2zLVz1GD4(V-~8aB2S#%Jz&n3 z)=%Wb=>ZZr?d`2ZU{?IR*1|kC5J4duUWkwl9~5F?BM5`QZ1{z3cm=oxYG>dS5B>ktJS(^*Fvfpi<>lcM7KT|{Lb&-YEg?_=K5K}ufPghbK)?!SW5Ex#;O4dZ z$7t$q_JH!k9RGRLhgn$xBU>NG+d??5R1^&3WAO8Q|C|VqfWSYu8T?b5kRZ>4b@)T!M3n5^ z0lD-2%id^PyZ-gf(Vq4X9TS0B{z--9gM?ZGRR8(d{$H%+e~)W__V>242Ke>A5Zph( z+~GDJ-Y_?7XxM(yw(;F3n423 zL2hAdZhmV(4*%WU0gV$B;Su_WCjI}K`(J}w+QFP{t%1FWi~fIu8YsVwu#F`Y!XwBn z1QE7)&;ubJ;RpG(tG~9Xztx`B15W!NM(E#i&C1%%{-31apRxQs1=|0E`2I_o z`|sJl|M#oJ_24M{X$rXhXDjjNZ@E8NsqnBkf9$0q|H>Xf|C>?>Y_1}JCI2sMyAYo> zR2a(54dLeH6^2;w^4UOycwm+gUSXIpKQENW%EA&buYb-4{=aM6AB5-+HvE(S^p8h? zQ}*!nZ+8&*@wY>1?F?wH8{jUo<&FIWfuv%d$Vuz?Wc;4<&LBFyl{}bqY?$}oz|<4Q zt7AD3 zmKMnIwWW}BOX|#ujkm4W!f@|PMQmQdV^n9e^ULoqFuN)_(CNB=usWK6=)#l`!s+P3 zf;->f%YZb%k7Uq6n6fhH2vRU5bUF|VHU=Fs=m7wf1AQEZ4P!$>Kidl$vvZ?5kH67geU|eM8B+K>+tTbT4YK0D1K06faKz-DULVFVUH2SRWUa0 zzsUvcohP*In!^wXW&&b*`v+r;-C90Z>{f)?ou zdRcL)twS_TzZ+=~dGXEk(-hxH=BNS3M@^298PEkUbkrfNx zVS?G>18UO6Byip)(|m2-Z;nSf&(1Ke2{TrNDKV8)wyK`q*9M%;#JAR;Kw3J!bPCZ4 zDd(D-7m7&yfKuj%c-vw96#U)!A#y?C;-nSBEaVM^hG6P!^*yCfo7K(`VZ0e<>Dq5h ztkl)vCA$*=#g*OKOO_i)$Ol`qo*0~KsQ1%}kEP0#B;jM{9pXC-m(n0IaFQ zz}GYDSMR9+d!;o|TZ~w`R zJ5~S4f`KRkcU?!#_hf>KnR>yWXJ4(zGdx_05nGu2ONJtJ!-!^Sg60;9``FOY1iykB zQx>fvV4-2n$UDPFtjyTL1ZE$;~`}a@mg(t z!JaRb=#3k?a*ef6Qn@`ELE8n68^^vXPhmM@q6jamnJixRx;?Q=A8C16@{g3k zf^W6KroAN@iI?r7e5AhuHNd|@?gLH}du#VauaOMA!q> z0=DMAWsFoZ;K(^{l|wCeeBPu(w+^YE&g)Yw*pN*cnry?w=B>I&M-wyx18*er@}D23 zYLaa&d$ogl-7ypoIxHm>w+{7pW~UBEu!$0$@mCks?ui|Ci(XezZ&Ho;O*c~0yK`V| zqH6unO?a&~==P4f4TsyEi+=5Fn0vpqs+My&O9T9R_4rsX(R9XjxnI^mzDR}XtS5V( z+-O{GH%1e$I;lj?VOrVv(udH^n?~W+RX|GP0Y~U3az~S_SxvCo&mB?q`HBbmf65Pe zlH=RiZFutQ@#@|anZ2y+cCKx{^%o9kB(wMMuus_2jeHFspv@S>o=$3I`y!W9qSwRX zBZ5M^D45a~Pfa|d4==GE-ov!MUo|;yI=sHO3eHSe_v3^wAyW=Drk!jn_GVv+U2lIY z^9;vG2(^1h6@(7(W2Nuu`;^*ke4Du%(uAr;N0Ssv4RG304HfeQe9m?G@ThSDS%dwJ zQffasw&!rz`cD-;5~t4bt|EeDU)(1H@$|pr=#7$@t%)MUzU>%h*6s-%b_d~Rv}HGT z$|ao`O1aw;@+Awmu~Wdb}zS~RqpT8 zke>xxw{CH`s?tM#)N(E|$ywIp)i?9vF!m|%Pl zb8ONp!{;b^clrGoF%$0K7qlzG^}I4`iRWAaG$?3y(I02x=$0l%mFk~a?i>~O=XM^z zX(*eHPfeI<%8E%_*j1u#wopS}k1oi5-P-S97Q@=|-tQ@n%@$H-`E|?NrKK7@Fp)WH zv=l;@ncvvCYBSx-E9?JBdiTcBO5y;Qc){MOh307TR)2Rn73S($H8YXPoaJ+Fe&$^OOc#aB1H-ONS;~K$XLYZY;xJl$ zWun(q@n_|8qhtYtN@ub?$;|AtUy96GVqUKrJ1gZOvi>>JE*8QQcUR{r=Ty_B6)XeL z7h5e1>81<5M~7*j;_NioHRf5cf4@Qnx$MN>g+SoV<}+GMY638yn#TT>2XQ!@&&67x z8rzdOOXB?M>CfbN-4{;zdbGkt8}% zaNMiTH!+;dwI{D8T{mbJDxVPuV00Zd>VE!?cIVbw-sO(a3mys?R(jo%ieK?5X+2=&Y|4C#BJcCpmQUN{b()ftL zB=b{f3i2P-(k12XE?TAsvEWj0TyHU0m7fSZB?B#8< z%ffa8cq}fbHlHw!X>al%YW^tvk&Mt@pwyxcEtCX33gIRXe!-8TA#5gDSA*R*XF2bg z$K%GK@jGmq13UY2{##~tCdAmE?K35q8GoFO@zdAvrE701nOyVMo7DDvZHtFZmJPZ-8D7WmNI^ z)!R;5DU(F2l6s3@PTbE9e-Hd<(|r8P|4P$z2D7CD-S+biW8{TDUH1akv6f})A-~_t zLv}g?)5+I7s_bkOzcfat5MCyPz7=B0Cr5vcCi6CU5qVEf=@Dt@I%*bv9XBpf5Mb%qj^aRTA*A7eJYDk@0!R0!%j^w0a$~9|y4t$`&ufeWX zH||Ild`aw97LL>r-W+LnTMnXX90Vef)&|Bbg&o1VXx@6Zx!QwnmKvodLbvR_znZRH zYZ}S&$vG*XJ~!0Rm=3Njy?e5dj34cKjzn*ZkigquM!;L2l=ZFus%8^4I1MXUnB8LV zdZ;Oht4~Y-uZ#FtE3UP5$Ev2ky9YB<@C%i6>L=okKvR+u=8;Llr#xa6j~SNO+ZKLK zM|OTwSbaa9S6)eg@*an!z`i4D-u#Cj`X%bV2CW}1{(D#Po0|`gCgYwZ*6mSb;v5Q^ zu`&Jj35T-z6)n9-D2Lzxi3SVPqvW>Ff?$9MjO1ts*Zhwp z$xokaYWz?_c+$PHjH1#H`mlk>?cRWY5?k&0tkaKtP*lA@fc8bBs%_?M-#VZz+69koSJoj23hV zKbcWFIkU&sMIFMkG(0Qkjsn-hhO)bU!6KeYX*}MFKRP-ldOY6i{ToN~t-q%+> z1~D~ojp$Zs$W8NXiB77}ig?{$SNhwg+!NY-nqns(a)hYPa)X zM@RWjkh=~&%(>Orfh&-kG*Fv|L-eCOrb0w; zN9o}(mKsal3vNP&RH*UW1Q)i?)y{b%!ue?=;NKqQ9#L(idxj!d-jGZb5SaSM%Fkyw zL#w*Wj;4%5YkC&VNxT)@@xcyD-t2E&*zpsX+BO0bt$7e3`74?E9ii8Zb)^MXoh}1~ z4Kz2uyDZf)a4NXd^fQJ^+P!6OOAOLf>xBv`>~zIQ24ACrz^Y6SORM6{2w+%rG|gW% zWf7(a}v$iZYg=LVm1UM1*&OH;C6oD8a~Ng{^O31nxnwhySolTHrEjWAA5yRW|TmIoeU zgN!E|zf@vO%a8YQ7E3!DP`xfn&lQXrjdhi4C76wgV08Na=`>zR>2W$3MZW^?Y_TX&`zx;}(JN zbHCLwGn7d|3y?^xPrWwQ#5(fFR5ZZ;(gg2&O*~BssMXdJO(pfl`87)elGBnomNEx< z-`|_c60<>*wI1Kx&tks4GJ44+6k?RmD3oAS!RVNF8~Z!)b?)Bb#^YYjzDhN2LgohO z3y;xd!C_Ke_>u!vt>@{F4<+=LU{p=Iz$nbauA_#2GvQAZ+&Q@=6gWU#`2tq(No z^N+C(F`Z?limjSF-(tyvG>YDZK3x^488x?*dHmTsqo7B*hU}@?Ox)wHgT0xb-dI$_ z>_w5v1=YI3VQ&suo=F8{9SCoEV+EEvslJ7QNeT2JeC2*F`jPC6HM+%7`1D`SULTN0 z#2})_6x9L~VeW^+9nrt0G?xF(@op+=(gGCYzg4zmtfk^muQD^7e2G1JK$f8L1k z78}@0-VOkp`@TbgbO|oUK&b1z+C1RD25vKWW&;I|(%bC6vMi6o;OCbo#VPezGH00Xk* zuomq!6dUJ>B^Uv@E?h0wy#0VCV z%*SBskhJK|jgO@yH)2mith%6l?M?EVD6h0~%eN%Hg}rg`BX2mRxrAabQn6jWk7T5X z$lBu!;24l>Rwx?nGJmuComz%6vLCcrbJJ^}i$tp4??^JNSP4rZCl$!ifHvDtj{L$Q zwG~~kkHHt#XmT02J%$l6h2`Vwm*u20Oam0-2f^n*)y$iB=NFN)>&l{&C9c0cC@0^? z@ApnXcomtO9!s^`9)&52LJM7>H00@(^nt6 zp!E7aB(FQ{IvCe6=vGE?Ks~NDq5bA(7_^5_Y^)O!V@PEY99`|X;p7|qbWITiS(DBU zpUBv%?IJ!U5$uip9xJ4g1FB)x_b0EV!h|9kDRcA4yT1?A>ar%%Z9!F{FsWU=v<^9m z_qK}_tOJ_(pVEiTerb86(R4(kCmc^JB>i*XHvX*#7%_O>eAOft<|7wRfK*~E8#M@4 zs2|L^0H0PGsLCI~HkUuH-=;h7Y=3UiK(AoT$J`{H`mXhx{>{6e^p{YT=y;Yz(Vj|< z%A=xU16;aQg=YqxUC-%%`bf5EF#zj#a=Hn$L$Qrb>;ie{1oFJrP)&~y(N}M8lw()B zMiypXp0~8jn^)VghP|mkAAEXtKw~=_>!Bopt!Jxtt+II$P7jze{B&~z=Y2xDQC+OS zzolG0LPgFIWXy!SRkyar#9-rqsM^&ML=<4*JOiq9KO5(}@yt4(P=P&@g^G zGxh;4a_EPU99Ajw$BTrZj<1MO7y5*CNxArX@cuGOA>|_&cynhO)p^nLM8EeMwMK*O z@k0Cihy>W;fxzMc9Ap_^QpCL=HC=NLS(5B^Cx7E1iZ4kTm5vhDizPWgpZHk=(XgX< zw4GOD@mWdG zq??=bfrHk&sHCVoGflj`_F20-R>;%H23r%WBS2xD-`v-0L5j9umFTkhG9A~+hMEfz z^9Uh>cIYn4R7QHVI3}bab$Uoa)5v2aGmYezqi2Xt#5cXfH?d&WxAMS7nEWDaKjm{e z7WuEn5`(yAfY_q_nMO?ef@!21RwSW=_`}I%hMPtT5UKjzNefl^icy-((NFjS0p0ODuF%$k=^th4=1nX z^FrEM-_x?>2>@+7eD=}p81a0S;)J&d|mYB>q?$J^8>&in3GS)VB0qvWF@CQ*jek&_H=@ zL*hD8uq|?55Ilk6Dq;wlw{F z@3e^*M0WadluXCL9n15*O?e|d$u2`vGF7Flso&hAyt&3TuUy>L zNH#;z6~~lg(%++Yn^-_S5jdu?C93p4U`uyC`gY0MoHspZlF2Qk63ss)eh)RDCtr*V zLb}t!nXSQbiLITzRcoz-*-N{yjYBeeg;F}i5mxJZ3(BLKJjbs>3) z5q<)yy4hj}Y4H9Fj=P#uh}7Ma!!idv^5`%Uukm(XC4uP1xVNg{K!>#q$JULA(jm3Y z-TdrDT&Ev%?RdDagXWe;m(510vAq!0N-b$DiI~1$>ehN4D42vV5wi;lWCZZ%HG3NoRHdkq2 zvKOSQfQm2a@EcW{cTUanxg#y@Iaad+EO@@)&4_6hDO6sXwY()y_7xS!vsO$Be9opOLs$D3wRGHjGUS$BLK0F1KXBS zew~Hrd&wnBdXhD1!T7#uQJhAtK8@2T6cj}@EhDX!+fFnkE%%9X@E)(F8 zTr)tY1?V4Y!dcHD!Qo||_-5foP6RKz7fa?J__7c?`fjXPgny za}^K)gF-*%vHBu|u#Bf6L-|_!_!}Z;q1Fw$bX_q4v;9urhd)#HabhQ0$~*&*Xk%#vDkHjM1{>&ZezJJ@NYE7}zy8?)yC`c4!{q1h4-LjW9Llif3_rFj(!Q z>91cK2zYSUQfu{y>kx#jq}-}&{7+Uw513WF7Bk%dr@gCBr3JW>D z4k1lKXz^V(=2`YK-y#9}!bJ)Zoc5=BWBd%%my@gym9rqSfTL{KWY@qLsc8b*y=B)p z0~AK*3bb%9n)9I-V!7?GmX$}|lk)p3i?#TUbP^0qNUdRFJeP5Dx*!NvA&NLFEkddH z!xg&b%$a7sJFRm>qnDqR{5pS9b2R)EH;T+%p0(kPHQ3L;J}%WqArS+JnO^LrT~2Vm zit2zOf=_0ZzscUVo70Sp_Bi#8>7eRlAR0pI3$C}@5U>Od_pZ)zn9_ryHT2*Hb#hi@ z5qq3NVuTDKg%MuZ*jskmzE6F=bxjcK4^`eH35eP6uzge&1Xb%D(s+Aq+!}ui;V{dw z8j2Df_AdS-j`6EKQl-67FxWq+qYV$bWOp4_ClxiY`Uj*@1c9_f^9nPcY9=3Jd`d4r z`NjN<)Rj|hsT?&Jb#v^1<~(74mr&{xq)RHKMI%krPqWaz!bVsw?vpr3ELmP!hyao= z1?RnY9hNfK3*b>sf(bzcios%48X043tM4X$P+IfU=E%3l$0110<6cDm0vri*gB(sY z4dKJgTdZC->fWLYYH)x^BwQ)>9t}_>)I#4$oMEY75LK;x!HB1`>i?Rx3Zg5ITaCdQsbP9HS+Bact|BRwWSJI z)h+EBc=xW}lGFR6>@!g8!}Ilk-UUIS7=g4rmG7F>R2R3#i(|NV8!+Te2c!rT3GI10 zL`&yY=~`I5qZ<7_6Dh~Q^1)>hUvor?;sWZ61Bm%GZ*ZI+(L#G=`*_#Qbrwi!nI}OY zvw~_m0_KyWo;aeC7(z$oceO>4uF{^L9HO_kLJ~zgY43k={sgr?m6d0n-s7EP*9fpf z0bx&^g~Ly0)G=VI`_O28qe1G$@oQFmxD^<|54keVn&0JktHMy6gnmX^Z}fA-IV(|2 zzZH4Y*1Tv=_~-QK_eGWN@tL5E;tTKRe29&7<~bDLO~hZ%>nog3dqESSGop59h%;Hp zSyN0msN<Zq{Vuu1%?s%fPjJ&c+J&XSq($sJ?Oj0JJtj-}qD7@!?r)?kl%C&>e&_ln zBv@}f!G+Imsx%@Z6zxvQ6?1eDc#}Z)O%xY*678%ivpYcte3Oqntswa_GcOU9YfQv4 zl0CtthS1;m3*1T8uB$Sy_y_1}KWZRiO&|?hyR(l*=Z(mwOaSA7Xn3>WKc@w4NY|^eYhP!z`{k%cLQLXkpz# zFvbFOD$mxV@R{I84!%lqPD|Q|YQ72Sy<;#4UQFsq z#kd1CZgTNU7-`?>Iin```Ta%aLr9Yu$-bZM9pDbE%FQ61@Ey_Eg3Ygf(HD(dN>}2_ zg3u2RfpeX}m+_^kd@YA0*^gE~=4K5eEbN4k`6i>>A;PTUsGF#l@&3pMfp@D4XE5;N zavIDoXdhQuZ%)#LfQOPYarsg2vPs#^2cOBeNOQCr*~2w=7e1)d@}y+tFQFc;y2onr z<_08AbGMtj#25VvyEETsKnfoXc=HVaAAl28G~`ZTNwEJpDV7>aCFgYH65xSmV^Nja z?*{8KL;bR*1ouI-elpxkFXy%_@8>)f@U?=(WwV$#FtJz%NqgNGh`b~*UPH0Z&Y!z#75UV$Sb`X(5!&6P+xGH=C&I7P3Cx8b!C*+*ZT&5fs!OvHPZp$sP=E;@mIbGE2(Wi-@SSaL0DwA@{w49*|J!c_(b!oPE|I9#(>UtMc zYPFaWSYQ+{f{6Yfx%q7QAKvcQYvs0&Z`)wU3-t-|T(WUD)oSU_PW(LSk~)6o%t$MN z`HWE}@%MATWRtL^n6M~nGcLjT03+Z8#I|i{{{vNVoMHJfMoks4#%xYpBZdemF*h6a zmtJ%h3i0F5D-oN}WkL0pu(ZWW`b%P*%@3(8aRtx1i9Z!Lpv9D6dm-Rl0zslVnD@ZN zlq#50EnX6GGFx6!MDy95y;z?hAqJD+^ABH?C~rtXq0pde*9t(yjYZQ8UWaohlvU*8 z*to%<=mj}wemYxT`R^yOJXX)fc9I-<>e4(@1 zuoSEtIa?_*R(I6u!*sU#-8sjk`@PNbMzlACb-NI4+pS@m`2`p?rQ%L|huB&i=m^+U zQuJ6sD+7{-{8J$16Y}FRbTF#VEE;v{wz_^YCY^Eb^kcUbvY~SDmGROk7IC3+n0j52 zy-(gQ8#d`s#;?VdtqBGXHNZU{BGrLuh+5nTMj3{MQ4xjVcX!hPj^x&iTDp50z#N~`^C{KOqI)GPy zdcFJJ6wTNNeslbSq4)Mh|9c?o?mhXP#=CbvDNbTnBFiDxEvhCZrv37^ordQto(w3Z zMfb)*`N^Jh&TtHA_i>x(-p13?T~2J$!8E^#;QW%8p+a z7afwUHAkmHibL5P-phA?q(J;u25K@x3~T}UShD6!J2YIE1blOwObRXJa4sXvC1nQT zr)kBol6h6}Z%)3dA4&I6$tE{Vd8WZwKNjSF4jNj2X5s25CN@WD-dX_u#%bW~T>7IA zWkE_1I)YL?4pP+%@gqRfinqOzmHH{RGdn;6c&y*5+NGKfe1U*&w!{!(tlq$&g)m$O5crrXs&(VL;1F1?pg#N3^;=vy?{szg#2P( z$=;!w2#fLOG;C#=sTctEQy^y$=-%uu;*aKfVu2AW{CJ^yk+l6olaoofbu2a_qhiD0 za&Of|f~%yun{6Ge-g6eFGfU-HlgT9@(il`k@ zE<_Pt5-~Mnw?`qa^v;hNRDt3SP&uqWCgAz|b_v|c-HT-&OtxLO2!h3Rrya~y%PZM- z^*f|`|A$zb0}F_AAAB#CPo7c%%Led@H{o_&7F0|hYD%N^io${Lrlg}Jix81wZ8Md* zwGDT%55mO{$=#q9nP3XzfCIeQ9`zNB*OF0Fm(xjH-_CYLuvhXz71q_F8ytrkfLeo< zM8bx%a~oj}Tyx5t0q-iYMjq}a|wu~d+{)@$U$>6fj6k)Xl zZ-{?`4t~7^oLwV53-K7NHj3dYO0l_2S3`&x}3}qS5f1ZKl;>3E6V^?VNaVDAc~gJM=4j6z_%K zCvy`^BlUHkjcptSvHOY7DU#x-+6*tvhxFwQT-*>QBr!Oq5m%|ul!p*i!=>Pmoc9+b zh1<04)1(>=2ol<$1@v}N^aBipP|M&&J6dQbH|kUMFwJ4e+Wpq?Y*2a^`(v!pN$PSt zlSivim{0GA>JKw^ZDhIu)6O7tUsqk zqt5Zn+FP}K!PTFa1iJ4wQA3&o+QZKWjjD-3U{odj8Yn5+O`>~&{ z3m+soYxVS6GFe{R_F^3?lIVT=P} zV>Ulqr%Gv=E;eEq>_;2cxX9hlAHD6Y#fSlopGeLKxih=fS z43U7Vp7I|2Oj~n-L`UOC`FFmMjbI?Xx=8_!=(p;OL3S2>(v+4j^D&kmp_oAE-pu*( z?r3z~I~GAI7jZrC8fW%!=3c*4$=5Yy%SVPVTE43$sQ9=IXOt?EiUbGNRYuNAz!zPBs!2B>h&o_ z%%_fHl<`pyh6r=_HZ?f(1Kb7dyLO6>aS+;8C)zw~0x@8to9)EP?+qTlqZ!eK&6_d_ zx}9>if6H!(icz(3dbPwtdFFI9d3#|ra8@>?BK}1~rMO7+gJ2F&5;Jq2)s;o)J2E}P zHZ5m}EkX;&b8!|O(MJa}3Bj{8K?Oy47Sr+PMxUfEKO`;T+_cO&ux1SLuz=5hVIxa@R@rs^anw~#L$|YXVn+;SNvm}jG z=QQMz(%qS&ADjgn=6@6%v|83rGKwg=5_8$zpC!rex&<)_UB7~XhI68)E;ekruT3MT zkS=XBz;Sfqtc8XJ8Xn^U-hSRE*eaQulXy7sQln$9EJ>ddkT2qpaD?7Aw^#DrM5KhY z)LyvAN(dHNZKwxdiJ8~$ua}Yn3B$VEi)S3Zvr9=w+31+E)L1_)o*HLn8V>9jzI0~7 z2V~vvDpJFA=Jl_2HM#JM4s*WF-qFEFYmfYYK0~Y4b1ms$Zwj6`O5Y(tGR7|j?gJ2o zt+=Pm9Xd~Z{*3i=@A~xY{5mp18@|3njEOo=U8Lnb6N2V5v$X@?r+$=qOK6_Mxp zUDs3)-Y#`iwwJ5L14rF4J};m^g&4>r=9&`$2U?JniEX67)$N!TqD~eH?hP)BC;) zrX%Q;Q`{%135-n4#lTa&J^7S-{z($NQNY&YcA*b)*r~fa75lMQ%)~-&!%B z;};@Qd?AUY;|Ks#L+L|bpuNqLtzzGqL29}}O^oeHzh|;B$SH#31GE!8<6rV{Mlm+Y z0HU$@%lkNl12WRXgllk*Pf8}7f;#K%`@tVx8q?x>Eq%(unpaxGmK(Z2PB*(`eXFOV z(rAh%5Az{>Ybld{+dNm~k5(P=`l?pg!nmplsL>wG?1L1^n))I=j85@`fnx*>FhV-Y zX}_37QK{;5bO8h|SAEgOb@g;K;76_k#@~L!&8HK~=x+DemrceFM;@69+K)PIC3hhO zq{T4lzSlNPp8vrM_2-GFRA{UHR6ytnF<}|6HupLrnr)>;`2j=F7ZD}+Gw<{DiUI%W z4;;{Q(o*87T!hz>XwSKj=3-~b!`fG~ad@y730%lDw}kbtcO>b(q(?vQc)6T>*FX;P z+Zai@{fsqXO{zO=3uZDbZqo*8YE1VyQ&RC?rM^l~Qh(hE1TW0N?ZX3990NbgDOndk zk(lfskpy*khU^@d4pXLXZu0iTMOsse9H_k@d>FxHOfy0A`D*k_dyEAHM=0Cg$;ebpA}CcQjO0FTLhIFi$&vS zXv95hyCD2&uc`Yq2U`7RW8v!L8n}1??_)1()82L9#YRe6BMBOzh|#YT!okq&NJ%G; z9jkZoX=rL6{Q6{f=4}F9>A;MBH;TD~u*Lyvjt){lNuG)R;XZ}1JC}{)RHWzdz0pl{ zq9#!UiO$?quFut4X4z`e_;9hqmZ4+8b$x@7w4gZhtVRjeFnZ$H%ICO_@ezGQC4C^ z5xNKS9avcR7iBNo3gN#^`M+c?_J|Ya=&+dcrQ#EkfCvXHR(={h)MZ_Kp?$0v3GCSN z5C!)bY}YP}w5RpXfN8BuqRm@u?7>_cEa7qDwDoQmJc3T#Y{#dZXI3RO5i}5l=e`H3 zRvT{|78=kb#kI>zKYsEZx6_+^q)_&IWec^$8M$uoiHv>@-ug#5OKC$6AUDa)*iC~i z%Vi2O-uYE2WeXAH_;e+f(|~-!=SsmP+~8Is{nYbi$j&6Lszgk+XZCUu+I{$9H^$zH z9Mj9rk#DaH)5HSr&gX(koE?Lzi))FKu)k`mJtqb#HdSJ=Lz{{S*FX1I0H|b;nz@7g zIEb)UQdUSkk!Jbow;glpQn5O=9i2V5YL%td9?!o4OXSgkGtiNH?g+ix4zPjhdJcbW z9uiDhiZ8`*ZQ^JA`F~v5iKxwr3Vj`Miiz^Ff5?-1*zUlup$VuE8Y_S)#bPNM%h4tc ztA^G^vMACJ8CsD86HC03z@nB(}hjzb(v}?wMVl78i-yXcOYyS{g zN5@fvF0F0vFHeyRt*&^mgrf1r^TztqLbpJjd?Yx+h;fFT2ose93;D{AmaQAFVkxBF zN$nARXh1?15eghnuU@36L@Qc;tH$_Ze9d^ly}l*Qh~FlM3dDOE{^)zY27-A=w>6yM zg&&;_eEta*yAo1(uAI(9U4fc0r%}=~jer5bZQb!?h)9*~BH8;85DWMKKn4Kug;=?r zjTpV`iwfYwq7!LxV-3|?kIXaQ^JTjRDIkW+*dr#xxBF6Pf>MUN9V08QZb&*qz9|hb zNekX#I@c}N=P1fp;kn3}^~NOryB1rO;>_;*&wuY4jgAXi9d5if+xVy(0t=q**IwNJ z9rFHI`wb;w=+uE!7}}*&uK7p)_8F^HLvQg|_|>8UFJF8U#~mYK z3nUUzut^Un@1F=q|EP~jA9z4+o9Ne#7Lfc^&umd*A2AW&gDbLZDrbp z2n&5H=;{!e?QK~lgG-cH!gmswvZ+%+B9ajHHnwA6nPz~iG=ir%xJE5C=pbOTeXtN> z?9?Hx#?jp3te6NA)PM%p-neA`fI(Xz#>sV@8-`frnMRBX1?z}Ee}Pe54iQ5MB@~t` zEu#j$cgCDn6C}oHfWN7z*=L$PQFZ?|#GtpwT57Lm|9sy-LhM7`Mfzr$HY+g{tO~du z*r0lcEe>Fpq!SPW^>gRCXccvvy!>Ic*w`@0ID50uNJ;CB=UrSAmuHfKXrFBz?3rPfx&vvmjHu(EdpwV3_!eN4xAQP2+ca ze18I2L7+l6JQb+sGM$m)abuW2nJ#^fQ{{(wnxmh8$tLb;Y?|M`J_}{-zV517RN(h5Sa|sa6F8ukz6mE42oe2fOiYtewh zf+IR!`}QkEVfFy~TU0!zOitNnm-A^W(A7+XaK~3O7cM#FIG2vkziSL{H3|{J3yGFS zu@*_EgYAoO>0td&$Z;*(fO{nEX8{{Y8_AQOsf4rv%c)=YvBkgrIYhyhnRtwikz_DN zvGbjIv563s{oxY&+40qSe?W~V~RXH7pcH`R|BxMkAI7~t<4ukoJ~dRIjmQ5JW@DGg72~rVP}l9eNQEc z6=wZ$vD71faOxqOQ^q{`h;kcssQIfn>6q~{;s|+_jE)*8#SI7nMYY#Iw{n~hdDE>$ zj=ACk&@cro{rdX*$zd^%QaevsBXv1{?|a9m3)%%5?K54(sl3bOZh@G!#c9#mvsFa< z&giIxmG!0NjLE&^Yh*rT5(GF(CIRRPyvJ``hvf$r-YJoV(;MIyLhi1(zJoJaF@bK53**P?Q^w7(L3Vh zaJnv#@@F@nNC7%v0$4P^;>zvi(baNXgXQqU>9}VeZfE%{s&q60x9q~s_Ci!zI)pCk zep-alb-BpG#1N|iLXbWB~y)I-9I$IZ!wy*v?yE-jDMtc8R)^ee(-(9ey(UU ze?qac&w8+ ztc&65BZkSMO{d0hEzIl#Cac*hEM9@#{8U;wY@+|MHW!oqRmt!9@87BYHSyfNgC(2y zXDmv5@os+e(f&Q1*8hK8I~(eG0=U<*bHyrYYZ3nc5AWt$E-iftoaQw?{+Frv@P)JL z{J@ssk9XVJGaXDevT!*k38sJ6QZ}>ueBQP>YVPd|A3V6;cRp@iI62yI&fWG8FVxEu zfqSb@hj?=+EG)g-o_Ym?&*yWzn_0dx-G-y zl$0sbc4X1KefdAtf6D($I~MDmzVFS$XE7<)#4W2u5}(EDKQ{kqoYBFvQS6nP@M_D+ z(Sl#!#_#=`82*02{IK%3Yd`niP1%~QdFSu04;O%&r~fRnx*g^%!@HHI^Qz7)(fI2H zAN05H`D8!4epQIZD$%Zs>x`K-rd+-8=am1)>21*(9G$uWrzhNSS-I@!)2aM@c7H$K z*1x+~EoZ~)yZztSJ9|t@RdW= 10 || JavaVersion.current().isJava10Compatible()) { - options.release.set(targetJavaVersion) + tasks.withType(JavaCompile).configureEach { + options.encoding = 'UTF-8' } - options.encoding = 'UTF-8' -} -processResources { - def props = [version: version] - inputs.properties props - filteringCharset 'UTF-8' - filesMatching('plugin.yml') { - expand props + repositories { + mavenCentral() } -} +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties old mode 100644 new mode 100755 index e69de29..af82e00 --- a/gradle.properties +++ b/gradle.properties @@ -0,0 +1 @@ +org.gradle.parallel=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar old mode 100644 new mode 100755 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties old mode 100644 new mode 100755 index 1af9e09..df97d72 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/gradlew.bat b/gradlew.bat old mode 100644 new mode 100755 diff --git a/paper/build.gradle b/paper/build.gradle new file mode 100644 index 0000000..ef4bffb --- /dev/null +++ b/paper/build.gradle @@ -0,0 +1,31 @@ +plugins { + id 'java-library' + id 'io.papermc.paperweight.userdev' version '1.7.2' + id 'xyz.jpenilla.run-paper' version '2.3.0' +} + +repositories { + maven { url 'https://repo.papermc.io/repository/maven-public/' } + maven { url 'https://nexus.scarsz.me/content/groups/public/' } + maven { url = 'https://repo.extendedclip.com/content/repositories/placeholderapi/' } + maven { url = 'https://repo.codemc.org/repository/maven-public/' } + mavenCentral() +} + +processResources { + filesMatching('paper-plugin.yml') { + expand 'version': project.ext.version + } +} + +dependencies { + paperweight.paperDevBundle('1.21.1-R0.1-SNAPSHOT') + + compileOnly 'dev.jorel:commandapi-bukkit-core:9.4.1' + + compileOnly 'net.luckperms:api:5.4' + + implementation 'org.jetbrains.exposed:exposed-core:0.53.0' + + compileOnly 'me.clip:placeholderapi:2.11.6' +} \ No newline at end of file diff --git a/src/main/java/com/otfhee/Plugin.java b/paper/src/main/java/com/otfhee/Plugin.java similarity index 99% rename from src/main/java/com/otfhee/Plugin.java rename to paper/src/main/java/com/otfhee/Plugin.java index e67daf5..0f1a4ca 100644 --- a/src/main/java/com/otfhee/Plugin.java +++ b/paper/src/main/java/com/otfhee/Plugin.java @@ -10,7 +10,6 @@ import org.bukkit.plugin.java.JavaPlugin; import java.text.DecimalFormat; -import java.text.ParseException; public class Plugin extends JavaPlugin { private static final MiniMessage miniMessage = MiniMessage.miniMessage(); diff --git a/src/main/java/com/otfhee/commands/CoinCommand.java b/paper/src/main/java/com/otfhee/commands/CoinCommand.java similarity index 100% rename from src/main/java/com/otfhee/commands/CoinCommand.java rename to paper/src/main/java/com/otfhee/commands/CoinCommand.java diff --git a/src/main/java/com/otfhee/commands/DiscordCommand.java b/paper/src/main/java/com/otfhee/commands/DiscordCommand.java similarity index 100% rename from src/main/java/com/otfhee/commands/DiscordCommand.java rename to paper/src/main/java/com/otfhee/commands/DiscordCommand.java diff --git a/src/main/java/com/otfhee/commands/DoCommand.java b/paper/src/main/java/com/otfhee/commands/DoCommand.java similarity index 100% rename from src/main/java/com/otfhee/commands/DoCommand.java rename to paper/src/main/java/com/otfhee/commands/DoCommand.java diff --git a/src/main/java/com/otfhee/commands/GlobalModeCommand.java b/paper/src/main/java/com/otfhee/commands/GlobalModeCommand.java similarity index 100% rename from src/main/java/com/otfhee/commands/GlobalModeCommand.java rename to paper/src/main/java/com/otfhee/commands/GlobalModeCommand.java diff --git a/src/main/java/com/otfhee/commands/ItemCommand.java b/paper/src/main/java/com/otfhee/commands/ItemCommand.java similarity index 100% rename from src/main/java/com/otfhee/commands/ItemCommand.java rename to paper/src/main/java/com/otfhee/commands/ItemCommand.java diff --git a/src/main/java/com/otfhee/commands/MeCommand.java b/paper/src/main/java/com/otfhee/commands/MeCommand.java similarity index 100% rename from src/main/java/com/otfhee/commands/MeCommand.java rename to paper/src/main/java/com/otfhee/commands/MeCommand.java diff --git a/src/main/java/com/otfhee/commands/NOTDCommand.java b/paper/src/main/java/com/otfhee/commands/NOTDCommand.java similarity index 100% rename from src/main/java/com/otfhee/commands/NOTDCommand.java rename to paper/src/main/java/com/otfhee/commands/NOTDCommand.java diff --git a/src/main/java/com/otfhee/commands/NicknameCommand.java b/paper/src/main/java/com/otfhee/commands/NicknameCommand.java similarity index 100% rename from src/main/java/com/otfhee/commands/NicknameCommand.java rename to paper/src/main/java/com/otfhee/commands/NicknameCommand.java diff --git a/src/main/java/com/otfhee/commands/ParticleCommand.java b/paper/src/main/java/com/otfhee/commands/ParticleCommand.java similarity index 100% rename from src/main/java/com/otfhee/commands/ParticleCommand.java rename to paper/src/main/java/com/otfhee/commands/ParticleCommand.java diff --git a/src/main/java/com/otfhee/commands/PingCommand.java b/paper/src/main/java/com/otfhee/commands/PingCommand.java similarity index 100% rename from src/main/java/com/otfhee/commands/PingCommand.java rename to paper/src/main/java/com/otfhee/commands/PingCommand.java diff --git a/src/main/java/com/otfhee/commands/PrefixCommand.java b/paper/src/main/java/com/otfhee/commands/PrefixCommand.java similarity index 100% rename from src/main/java/com/otfhee/commands/PrefixCommand.java rename to paper/src/main/java/com/otfhee/commands/PrefixCommand.java diff --git a/src/main/java/com/otfhee/commands/PremiumCommand.java b/paper/src/main/java/com/otfhee/commands/PremiumCommand.java similarity index 100% rename from src/main/java/com/otfhee/commands/PremiumCommand.java rename to paper/src/main/java/com/otfhee/commands/PremiumCommand.java diff --git a/src/main/java/com/otfhee/commands/PrivateMessagesCommand.java b/paper/src/main/java/com/otfhee/commands/PrivateMessagesCommand.java similarity index 100% rename from src/main/java/com/otfhee/commands/PrivateMessagesCommand.java rename to paper/src/main/java/com/otfhee/commands/PrivateMessagesCommand.java diff --git a/src/main/java/com/otfhee/commands/RulesCommand.java b/paper/src/main/java/com/otfhee/commands/RulesCommand.java similarity index 100% rename from src/main/java/com/otfhee/commands/RulesCommand.java rename to paper/src/main/java/com/otfhee/commands/RulesCommand.java diff --git a/src/main/java/com/otfhee/commands/SiteCommand.java b/paper/src/main/java/com/otfhee/commands/SiteCommand.java similarity index 100% rename from src/main/java/com/otfhee/commands/SiteCommand.java rename to paper/src/main/java/com/otfhee/commands/SiteCommand.java diff --git a/src/main/java/com/otfhee/commands/StuffCommand.java b/paper/src/main/java/com/otfhee/commands/StuffCommand.java similarity index 100% rename from src/main/java/com/otfhee/commands/StuffCommand.java rename to paper/src/main/java/com/otfhee/commands/StuffCommand.java diff --git a/src/main/java/com/otfhee/commands/TelegramCommand.java b/paper/src/main/java/com/otfhee/commands/TelegramCommand.java similarity index 100% rename from src/main/java/com/otfhee/commands/TelegramCommand.java rename to paper/src/main/java/com/otfhee/commands/TelegramCommand.java diff --git a/src/main/java/com/otfhee/commands/TryCommand.java b/paper/src/main/java/com/otfhee/commands/TryCommand.java similarity index 100% rename from src/main/java/com/otfhee/commands/TryCommand.java rename to paper/src/main/java/com/otfhee/commands/TryCommand.java diff --git a/src/main/java/com/otfhee/configurations/PlayersConfig.java b/paper/src/main/java/com/otfhee/configurations/PlayersConfig.java similarity index 100% rename from src/main/java/com/otfhee/configurations/PlayersConfig.java rename to paper/src/main/java/com/otfhee/configurations/PlayersConfig.java diff --git a/src/main/java/com/otfhee/handlers/ChatHandler.java b/paper/src/main/java/com/otfhee/handlers/ChatHandler.java similarity index 100% rename from src/main/java/com/otfhee/handlers/ChatHandler.java rename to paper/src/main/java/com/otfhee/handlers/ChatHandler.java diff --git a/src/main/java/com/otfhee/handlers/ChatType.java b/paper/src/main/java/com/otfhee/handlers/ChatType.java similarity index 100% rename from src/main/java/com/otfhee/handlers/ChatType.java rename to paper/src/main/java/com/otfhee/handlers/ChatType.java diff --git a/src/main/java/com/otfhee/handlers/ColorHandler.java b/paper/src/main/java/com/otfhee/handlers/ColorHandler.java similarity index 100% rename from src/main/java/com/otfhee/handlers/ColorHandler.java rename to paper/src/main/java/com/otfhee/handlers/ColorHandler.java diff --git a/src/main/java/com/otfhee/handlers/ColorType.java b/paper/src/main/java/com/otfhee/handlers/ColorType.java similarity index 100% rename from src/main/java/com/otfhee/handlers/ColorType.java rename to paper/src/main/java/com/otfhee/handlers/ColorType.java diff --git a/src/main/java/com/otfhee/handlers/DisplayNameHandler.java b/paper/src/main/java/com/otfhee/handlers/DisplayNameHandler.java similarity index 100% rename from src/main/java/com/otfhee/handlers/DisplayNameHandler.java rename to paper/src/main/java/com/otfhee/handlers/DisplayNameHandler.java diff --git a/src/main/java/com/otfhee/handlers/MessageType.java b/paper/src/main/java/com/otfhee/handlers/MessageType.java similarity index 100% rename from src/main/java/com/otfhee/handlers/MessageType.java rename to paper/src/main/java/com/otfhee/handlers/MessageType.java diff --git a/src/main/java/com/otfhee/handlers/ParticleHandler.java b/paper/src/main/java/com/otfhee/handlers/ParticleHandler.java similarity index 100% rename from src/main/java/com/otfhee/handlers/ParticleHandler.java rename to paper/src/main/java/com/otfhee/handlers/ParticleHandler.java diff --git a/src/main/java/com/otfhee/handlers/ParticleType.java b/paper/src/main/java/com/otfhee/handlers/ParticleType.java similarity index 100% rename from src/main/java/com/otfhee/handlers/ParticleType.java rename to paper/src/main/java/com/otfhee/handlers/ParticleType.java diff --git a/src/main/java/com/otfhee/handlers/PrefixHandler.java b/paper/src/main/java/com/otfhee/handlers/PrefixHandler.java similarity index 100% rename from src/main/java/com/otfhee/handlers/PrefixHandler.java rename to paper/src/main/java/com/otfhee/handlers/PrefixHandler.java diff --git a/src/main/java/com/otfhee/handlers/PrefixType.java b/paper/src/main/java/com/otfhee/handlers/PrefixType.java similarity index 100% rename from src/main/java/com/otfhee/handlers/PrefixType.java rename to paper/src/main/java/com/otfhee/handlers/PrefixType.java diff --git a/src/main/java/com/otfhee/handlers/PremiumHandler.java b/paper/src/main/java/com/otfhee/handlers/PremiumHandler.java similarity index 100% rename from src/main/java/com/otfhee/handlers/PremiumHandler.java rename to paper/src/main/java/com/otfhee/handlers/PremiumHandler.java diff --git a/src/main/java/com/otfhee/handlers/RateType.java b/paper/src/main/java/com/otfhee/handlers/RateType.java similarity index 100% rename from src/main/java/com/otfhee/handlers/RateType.java rename to paper/src/main/java/com/otfhee/handlers/RateType.java diff --git a/src/main/java/com/otfhee/listeners/AntiGreefingListener.java b/paper/src/main/java/com/otfhee/listeners/AntiGreefingListener.java similarity index 100% rename from src/main/java/com/otfhee/listeners/AntiGreefingListener.java rename to paper/src/main/java/com/otfhee/listeners/AntiGreefingListener.java diff --git a/src/main/java/com/otfhee/listeners/AsyncChatListener.java b/paper/src/main/java/com/otfhee/listeners/AsyncChatListener.java similarity index 100% rename from src/main/java/com/otfhee/listeners/AsyncChatListener.java rename to paper/src/main/java/com/otfhee/listeners/AsyncChatListener.java diff --git a/src/main/java/com/otfhee/listeners/MoveListener.java b/paper/src/main/java/com/otfhee/listeners/MoveListener.java similarity index 100% rename from src/main/java/com/otfhee/listeners/MoveListener.java rename to paper/src/main/java/com/otfhee/listeners/MoveListener.java diff --git a/src/main/java/com/otfhee/listeners/PlayerHeadDropListener.java b/paper/src/main/java/com/otfhee/listeners/PlayerHeadDropListener.java similarity index 100% rename from src/main/java/com/otfhee/listeners/PlayerHeadDropListener.java rename to paper/src/main/java/com/otfhee/listeners/PlayerHeadDropListener.java diff --git a/src/main/java/com/otfhee/listeners/PlayerJoinLeaveListener.java b/paper/src/main/java/com/otfhee/listeners/PlayerJoinLeaveListener.java similarity index 100% rename from src/main/java/com/otfhee/listeners/PlayerJoinLeaveListener.java rename to paper/src/main/java/com/otfhee/listeners/PlayerJoinLeaveListener.java diff --git a/src/main/java/com/otfhee/schedulers/AutoRestart.java b/paper/src/main/java/com/otfhee/schedulers/AutoRestart.java similarity index 100% rename from src/main/java/com/otfhee/schedulers/AutoRestart.java rename to paper/src/main/java/com/otfhee/schedulers/AutoRestart.java diff --git a/src/main/java/com/otfhee/schedulers/CheckPremium.java b/paper/src/main/java/com/otfhee/schedulers/CheckPremium.java similarity index 100% rename from src/main/java/com/otfhee/schedulers/CheckPremium.java rename to paper/src/main/java/com/otfhee/schedulers/CheckPremium.java diff --git a/src/main/java/com/otfhee/schedulers/CheckStuffStatus.java b/paper/src/main/java/com/otfhee/schedulers/CheckStuffStatus.java similarity index 100% rename from src/main/java/com/otfhee/schedulers/CheckStuffStatus.java rename to paper/src/main/java/com/otfhee/schedulers/CheckStuffStatus.java diff --git a/src/main/java/com/otfhee/schedulers/TabList.java b/paper/src/main/java/com/otfhee/schedulers/TabList.java similarity index 100% rename from src/main/java/com/otfhee/schedulers/TabList.java rename to paper/src/main/java/com/otfhee/schedulers/TabList.java diff --git a/paper/src/main/resources/paper-plugin.yml b/paper/src/main/resources/paper-plugin.yml new file mode 100644 index 0000000..12f2fdb --- /dev/null +++ b/paper/src/main/resources/paper-plugin.yml @@ -0,0 +1,4 @@ +name: "OTFHEE" +version: "${version}" +main: "com.otfhee.paper.Plugin" +api-version: "1.21.1" \ No newline at end of file diff --git a/settings.gradle b/settings.gradle old mode 100644 new mode 100755 index 276a210..b35941f --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,8 @@ -rootProject.name = 'OTFHEE' +rootProject.name = "OTFHEE" + +include( + "paper", + "velocity", + 'bastion' +) + diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml deleted file mode 100644 index bae8b72..0000000 --- a/src/main/resources/config.yml +++ /dev/null @@ -1 +0,0 @@ -notd: '' \ No newline at end of file diff --git a/src/main/resources/players.yml b/src/main/resources/players.yml deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml deleted file mode 100644 index c9c8215..0000000 --- a/src/main/resources/plugin.yml +++ /dev/null @@ -1,5 +0,0 @@ -name: OTFHEE -version: '${version}' -main: com.otfhee.Plugin -api-version: '1.21' -depend: [CommandAPI] \ No newline at end of file diff --git a/velocity/build.gradle b/velocity/build.gradle new file mode 100644 index 0000000..6b2e16d --- /dev/null +++ b/velocity/build.gradle @@ -0,0 +1,18 @@ +plugins { + id 'java-library' +} + +repositories { + maven { url 'https://repo.papermc.io/repository/maven-public/' } + maven { + setName("elytrium-repo") + setUrl("https://maven.elytrium.net/repo/") + } +} + +dependencies { + compileOnly 'com.velocitypowered:velocity-api:3.3.0-SNAPSHOT' + annotationProcessor 'com.velocitypowered:velocity-api:3.3.0-SNAPSHOT' + + compileOnly("net.elytrium.limboapi:api:1.1.25") +} \ No newline at end of file diff --git a/velocity/src/main/java/com/otfhee/velocity/Main.java b/velocity/src/main/java/com/otfhee/velocity/Main.java new file mode 100644 index 0000000..d968266 --- /dev/null +++ b/velocity/src/main/java/com/otfhee/velocity/Main.java @@ -0,0 +1,4 @@ +package com.otfhee.velocity; + +public class Main { +} From d3781ec830b79353f54fd909bd70f93ac4ede4d7 Mon Sep 17 00:00:00 2001 From: dangor Date: Thu, 16 Jan 2025 19:30:59 +0500 Subject: [PATCH 02/19] Update Structure Add MongoDB Add Log Messenger --- .gitignore | 0 api/build.gradle | 16 ++ bastion/build.gradle | 4 +- .../otfhee/{ => paper}/bastion/Bastion.java | 2 +- build.gradle | 5 + core/build.gradle | 13 ++ core/src/main/java/com/otfhee/core/Core.java | 12 ++ .../com/otfhee/core/messaging/Message.java | 9 + .../otfhee/core/messaging/MessageTypes.java | 14 +- .../com/otfhee/core/messaging/Messenger.java | 14 ++ .../otfhee/core/messaging/SystemMessages.java | 70 +++++++ gradle.properties | 0 gradle/wrapper/gradle-wrapper.jar | Bin gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 0 gradlew.bat | 0 paper/build.gradle | 31 ++- paper/src/main/java/com/otfhee/Plugin.java | 97 --------- .../java/com/otfhee/commands/CoinCommand.java | 36 ---- .../com/otfhee/commands/DiscordCommand.java | 17 -- .../java/com/otfhee/commands/DoCommand.java | 28 --- .../otfhee/commands/GlobalModeCommand.java | 25 --- .../java/com/otfhee/commands/ItemCommand.java | 37 ---- .../java/com/otfhee/commands/MeCommand.java | 30 --- .../com/otfhee/commands/NicknameCommand.java | 55 ----- .../com/otfhee/commands/ParticleCommand.java | 33 --- .../java/com/otfhee/commands/PingCommand.java | 19 -- .../com/otfhee/commands/PrefixCommand.java | 31 --- .../com/otfhee/commands/PremiumCommand.java | 74 ------- .../com/otfhee/commands/RulesCommand.java | 16 -- .../java/com/otfhee/commands/SiteCommand.java | 16 -- .../com/otfhee/commands/StuffCommand.java | 25 --- .../com/otfhee/commands/TelegramCommand.java | 17 -- .../java/com/otfhee/commands/TryCommand.java | 39 ---- .../otfhee/configurations/PlayersConfig.java | 192 ------------------ .../java/com/otfhee/handlers/ChatHandler.java | 131 ------------ .../otfhee/handlers/DisplayNameHandler.java | 21 -- .../com/otfhee/handlers/ParticleHandler.java | 22 -- .../com/otfhee/handlers/PrefixHandler.java | 11 - .../otfhee/listeners/AsyncChatListener.java | 37 ---- .../com/otfhee/listeners/MoveListener.java | 16 -- .../listeners/PlayerJoinLeaveListener.java | 68 ------- .../main/java/com/otfhee/paper/Plugin.java | 137 +++++++++++++ .../otfhee/paper/commands/CoinCommand.java | 22 ++ .../otfhee/paper/commands/DiscordCommand.java | 17 ++ .../com/otfhee/paper/commands/DoCommand.java | 17 ++ .../paper/commands/GlobalModeCommand.java | 41 ++++ .../otfhee/paper/commands/ItemCommand.java | 47 +++++ .../com/otfhee/paper/commands/MeCommand.java | 24 +++ .../{ => paper}/commands/NOTDCommand.java | 10 +- .../paper/commands/NicknameCommand.java | 74 +++++++ .../paper/commands/ParticleCommand.java | 44 ++++ .../otfhee/paper/commands/PingCommand.java | 17 ++ .../otfhee/paper/commands/PrefixCommand.java | 42 ++++ .../otfhee/paper/commands/PremiumCommand.java | 88 ++++++++ .../commands/PrivateMessagesCommand.java | 21 +- .../otfhee/paper/commands/RulesCommand.java | 16 ++ .../otfhee/paper/commands/SiteCommand.java | 16 ++ .../otfhee/paper/commands/StaffCommand.java | 41 ++++ .../paper/commands/TelegramCommand.java | 17 ++ .../com/otfhee/paper/commands/TryCommand.java | 27 +++ .../otfhee/paper/database/CreatePlayer.java | 4 + .../otfhee/paper/database/DatabaseItem.java | 7 + .../paper/database/PlayerFirstJoin.java | 10 + .../otfhee/paper/database/PlayerLastJoin.java | 10 + .../otfhee/paper/database/PlayerNotFound.java | 7 + .../paper/database/impl/CreatePlayerImpl.java | 49 +++++ .../database/impl/PlayerFirstJoinImpl.java | 71 +++++++ .../database/impl/PlayerLastJoinImpl.java | 71 +++++++ .../paper/database/meta/PlayerMeta.java | 14 ++ .../paper/database/meta/PlayerPacks.java | 12 ++ .../database/meta/PlayerPermissions.java | 12 ++ .../paper/database/meta/PremiumDate.java | 11 + .../paper/database/meta/impl/DaysImpl.java | 71 +++++++ .../paper/database/meta/impl/FirstWarn.java | 101 +++++++++ .../database/meta/impl/PlayerMetaImpl.java | 67 ++++++ .../database/meta/impl/PlayerPacksImpl.java | 97 +++++++++ .../meta/impl/PlayerPermissionsImpl.java | 97 +++++++++ .../database/meta/impl/PremiumDateImpl.java | 71 +++++++ .../paper/database/meta/impl/SecondWarn.java | 101 +++++++++ .../paper/database/meta/impl/ThirdWarn.java | 101 +++++++++ .../paper/database/meta/warns/Days.java | 9 + .../paper/database/meta/warns/Warn.java | 9 + .../paper/database/settings/DisplayColor.java | 11 + .../paper/database/settings/GlobalMode.java | 11 + .../database/settings/PlayerParticle.java | 11 + .../paper/database/settings/PlayerPrefix.java | 11 + .../database/settings/PlayerSettings.java | 9 + .../paper/database/settings/PlayerStatus.java | 11 + .../settings/impl/DisplayColorImpl.java | 70 +++++++ .../settings/impl/GlobalModeImpl.java | 72 +++++++ .../settings/impl/PlayerParticleImpl.java | 70 +++++++ .../settings/impl/PlayerPrefixImpl.java | 69 +++++++ .../settings/impl/PlayerSettingsImpl.java | 48 +++++ .../settings/impl/PlayerStatusImpl.java | 69 +++++++ .../otfhee/paper/handlers/ChatHandler.java | 145 +++++++++++++ .../otfhee/{ => paper}/handlers/ChatType.java | 2 +- .../{ => paper}/handlers/ColorHandler.java | 3 +- .../{ => paper}/handlers/ColorType.java | 2 +- .../paper/handlers/ParticleHandler.java | 10 + .../{ => paper}/handlers/ParticleType.java | 2 +- .../{ => paper}/handlers/PrefixType.java | 2 +- .../{ => paper}/handlers/PremiumHandler.java | 2 +- .../otfhee/{ => paper}/handlers/RateType.java | 2 +- .../listeners/AntiGreefingListener.java | 15 +- .../paper/listeners/AsyncChatListener.java | 43 ++++ .../otfhee/paper/listeners/MoveListener.java | 24 +++ .../listeners/PlayerHeadDropListener.java | 2 +- .../listeners/PlayerJoinLeaveListener.java | 46 +++++ .../otfhee/paper/schedulers/AutoRestart.java | 70 +++++++ .../otfhee/paper/schedulers/CheckPremium.java | 27 +++ .../{ => paper}/schedulers/TabList.java | 14 +- .../otfhee/paper/telemetry/PingTelemetry.java | 21 ++ .../otfhee/paper/telemetry/TPSTelemetry.java | 29 +++ .../com/otfhee/schedulers/AutoRestart.java | 120 ----------- .../com/otfhee/schedulers/CheckPremium.java | 36 ---- .../otfhee/schedulers/CheckStuffStatus.java | 42 ---- paper/src/main/resources/config.yml | 5 + .../resources/language/english.properties | 0 .../resources/language/russian.properties | 0 paper/src/main/resources/paper-plugin.yml | 9 +- settings.gradle | 12 +- .../java/com/otfhee/paper/velocity/Main.java | 4 + .../main/java/com/otfhee/velocity/Main.java | 4 - 124 files changed, 2816 insertions(+), 1344 deletions(-) mode change 100755 => 100644 .gitignore create mode 100644 api/build.gradle rename bastion/src/main/java/com/otfhee/{ => paper}/bastion/Bastion.java (84%) mode change 100755 => 100644 build.gradle create mode 100644 core/build.gradle create mode 100644 core/src/main/java/com/otfhee/core/Core.java create mode 100644 core/src/main/java/com/otfhee/core/messaging/Message.java rename paper/src/main/java/com/otfhee/handlers/MessageType.java => core/src/main/java/com/otfhee/core/messaging/MessageTypes.java (56%) create mode 100644 core/src/main/java/com/otfhee/core/messaging/Messenger.java create mode 100644 core/src/main/java/com/otfhee/core/messaging/SystemMessages.java mode change 100755 => 100644 gradle.properties mode change 100755 => 100644 gradle/wrapper/gradle-wrapper.jar mode change 100755 => 100644 gradle/wrapper/gradle-wrapper.properties mode change 100755 => 100644 gradlew mode change 100755 => 100644 gradlew.bat delete mode 100644 paper/src/main/java/com/otfhee/Plugin.java delete mode 100644 paper/src/main/java/com/otfhee/commands/CoinCommand.java delete mode 100644 paper/src/main/java/com/otfhee/commands/DiscordCommand.java delete mode 100644 paper/src/main/java/com/otfhee/commands/DoCommand.java delete mode 100644 paper/src/main/java/com/otfhee/commands/GlobalModeCommand.java delete mode 100644 paper/src/main/java/com/otfhee/commands/ItemCommand.java delete mode 100644 paper/src/main/java/com/otfhee/commands/MeCommand.java delete mode 100644 paper/src/main/java/com/otfhee/commands/NicknameCommand.java delete mode 100644 paper/src/main/java/com/otfhee/commands/ParticleCommand.java delete mode 100644 paper/src/main/java/com/otfhee/commands/PingCommand.java delete mode 100644 paper/src/main/java/com/otfhee/commands/PrefixCommand.java delete mode 100644 paper/src/main/java/com/otfhee/commands/PremiumCommand.java delete mode 100644 paper/src/main/java/com/otfhee/commands/RulesCommand.java delete mode 100644 paper/src/main/java/com/otfhee/commands/SiteCommand.java delete mode 100644 paper/src/main/java/com/otfhee/commands/StuffCommand.java delete mode 100644 paper/src/main/java/com/otfhee/commands/TelegramCommand.java delete mode 100644 paper/src/main/java/com/otfhee/commands/TryCommand.java delete mode 100644 paper/src/main/java/com/otfhee/configurations/PlayersConfig.java delete mode 100644 paper/src/main/java/com/otfhee/handlers/ChatHandler.java delete mode 100644 paper/src/main/java/com/otfhee/handlers/DisplayNameHandler.java delete mode 100644 paper/src/main/java/com/otfhee/handlers/ParticleHandler.java delete mode 100644 paper/src/main/java/com/otfhee/handlers/PrefixHandler.java delete mode 100644 paper/src/main/java/com/otfhee/listeners/AsyncChatListener.java delete mode 100644 paper/src/main/java/com/otfhee/listeners/MoveListener.java delete mode 100644 paper/src/main/java/com/otfhee/listeners/PlayerJoinLeaveListener.java create mode 100644 paper/src/main/java/com/otfhee/paper/Plugin.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/CoinCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/DiscordCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/DoCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/GlobalModeCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/ItemCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/MeCommand.java rename paper/src/main/java/com/otfhee/{ => paper}/commands/NOTDCommand.java (77%) create mode 100644 paper/src/main/java/com/otfhee/paper/commands/NicknameCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/ParticleCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/PingCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/PrefixCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/PremiumCommand.java rename paper/src/main/java/com/otfhee/{ => paper}/commands/PrivateMessagesCommand.java (77%) create mode 100644 paper/src/main/java/com/otfhee/paper/commands/RulesCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/SiteCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/StaffCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/TelegramCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/TryCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/CreatePlayer.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/DatabaseItem.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/PlayerFirstJoin.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/PlayerLastJoin.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/PlayerNotFound.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/impl/CreatePlayerImpl.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/impl/PlayerFirstJoinImpl.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/impl/PlayerLastJoinImpl.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/meta/PlayerMeta.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/meta/PlayerPacks.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/meta/PlayerPermissions.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/meta/PremiumDate.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/meta/impl/DaysImpl.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/meta/impl/FirstWarn.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerMetaImpl.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerPacksImpl.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerPermissionsImpl.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/meta/impl/PremiumDateImpl.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/meta/impl/SecondWarn.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/meta/impl/ThirdWarn.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/meta/warns/Days.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/meta/warns/Warn.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/settings/DisplayColor.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/settings/GlobalMode.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/settings/PlayerParticle.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/settings/PlayerPrefix.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/settings/PlayerSettings.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/settings/PlayerStatus.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/settings/impl/DisplayColorImpl.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/settings/impl/GlobalModeImpl.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerParticleImpl.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerPrefixImpl.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerSettingsImpl.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerStatusImpl.java create mode 100644 paper/src/main/java/com/otfhee/paper/handlers/ChatHandler.java rename paper/src/main/java/com/otfhee/{ => paper}/handlers/ChatType.java (63%) rename paper/src/main/java/com/otfhee/{ => paper}/handlers/ColorHandler.java (93%) rename paper/src/main/java/com/otfhee/{ => paper}/handlers/ColorType.java (94%) create mode 100644 paper/src/main/java/com/otfhee/paper/handlers/ParticleHandler.java rename paper/src/main/java/com/otfhee/{ => paper}/handlers/ParticleType.java (70%) rename paper/src/main/java/com/otfhee/{ => paper}/handlers/PrefixType.java (94%) rename paper/src/main/java/com/otfhee/{ => paper}/handlers/PremiumHandler.java (89%) rename paper/src/main/java/com/otfhee/{ => paper}/handlers/RateType.java (86%) rename paper/src/main/java/com/otfhee/{ => paper}/listeners/AntiGreefingListener.java (64%) create mode 100644 paper/src/main/java/com/otfhee/paper/listeners/AsyncChatListener.java create mode 100644 paper/src/main/java/com/otfhee/paper/listeners/MoveListener.java rename paper/src/main/java/com/otfhee/{ => paper}/listeners/PlayerHeadDropListener.java (97%) create mode 100644 paper/src/main/java/com/otfhee/paper/listeners/PlayerJoinLeaveListener.java create mode 100644 paper/src/main/java/com/otfhee/paper/schedulers/AutoRestart.java create mode 100644 paper/src/main/java/com/otfhee/paper/schedulers/CheckPremium.java rename paper/src/main/java/com/otfhee/{ => paper}/schedulers/TabList.java (77%) create mode 100644 paper/src/main/java/com/otfhee/paper/telemetry/PingTelemetry.java create mode 100644 paper/src/main/java/com/otfhee/paper/telemetry/TPSTelemetry.java delete mode 100644 paper/src/main/java/com/otfhee/schedulers/AutoRestart.java delete mode 100644 paper/src/main/java/com/otfhee/schedulers/CheckPremium.java delete mode 100644 paper/src/main/java/com/otfhee/schedulers/CheckStuffStatus.java create mode 100644 paper/src/main/resources/config.yml create mode 100644 paper/src/main/resources/language/english.properties create mode 100644 paper/src/main/resources/language/russian.properties mode change 100755 => 100644 settings.gradle create mode 100644 velocity/src/main/java/com/otfhee/paper/velocity/Main.java delete mode 100644 velocity/src/main/java/com/otfhee/velocity/Main.java diff --git a/.gitignore b/.gitignore old mode 100755 new mode 100644 diff --git a/api/build.gradle b/api/build.gradle new file mode 100644 index 0000000..15c9952 --- /dev/null +++ b/api/build.gradle @@ -0,0 +1,16 @@ +plugins { + id 'java-library' +} + +repositories { + mavenCentral() +} + +dependencies { + testImplementation platform('org.junit:junit-bom:5.10.0') + testImplementation 'org.junit.jupiter:junit-jupiter' +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/bastion/build.gradle b/bastion/build.gradle index b458474..2666265 100644 --- a/bastion/build.gradle +++ b/bastion/build.gradle @@ -1,6 +1,6 @@ plugins { id 'java-library' - id 'io.papermc.paperweight.userdev' version '1.7.2' + id 'io.papermc.paperweight.userdev' id 'xyz.jpenilla.run-paper' version '2.3.0' } @@ -15,5 +15,5 @@ processResources { } dependencies { - paperweight.paperDevBundle('1.21.1-R0.1-SNAPSHOT') + paperweight.paperDevBundle('1.21.4-R0.1-SNAPSHOT') } \ No newline at end of file diff --git a/bastion/src/main/java/com/otfhee/bastion/Bastion.java b/bastion/src/main/java/com/otfhee/paper/bastion/Bastion.java similarity index 84% rename from bastion/src/main/java/com/otfhee/bastion/Bastion.java rename to bastion/src/main/java/com/otfhee/paper/bastion/Bastion.java index 718c10f..04d1489 100644 --- a/bastion/src/main/java/com/otfhee/bastion/Bastion.java +++ b/bastion/src/main/java/com/otfhee/paper/bastion/Bastion.java @@ -1,4 +1,4 @@ -package com.otfhee.bastion; +package com.otfhee.paper.bastion; import org.bukkit.plugin.java.JavaPlugin; diff --git a/build.gradle b/build.gradle old mode 100755 new mode 100644 index 7cb5da5..9fd04f6 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,8 @@ +plugins { + id 'com.github.johnrengelman.shadow' version '8.1.1' + id 'io.papermc.paperweight.userdev' version '2.0.0-beta.11' apply false +} + subprojects { apply plugin: 'java' apply plugin: 'maven-publish' diff --git a/core/build.gradle b/core/build.gradle new file mode 100644 index 0000000..62c6fc5 --- /dev/null +++ b/core/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'java-library' +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'net.kyori:adventure-api:4.17.0' + implementation 'net.kyori:adventure-text-minimessage:4.17.0' + implementation 'org.mongodb:mongodb-driver-sync:5.2.1' +} \ No newline at end of file diff --git a/core/src/main/java/com/otfhee/core/Core.java b/core/src/main/java/com/otfhee/core/Core.java new file mode 100644 index 0000000..d952fcb --- /dev/null +++ b/core/src/main/java/com/otfhee/core/Core.java @@ -0,0 +1,12 @@ +package com.otfhee.core; + +import com.otfhee.core.messaging.Messenger; +import com.otfhee.core.messaging.SystemMessages; +import net.kyori.adventure.audience.Audience; +import org.jetbrains.annotations.NotNull; + +public final class Core { + public static @NotNull Messenger getMessenger(Audience audience) { + return new SystemMessages(audience); + } +} diff --git a/core/src/main/java/com/otfhee/core/messaging/Message.java b/core/src/main/java/com/otfhee/core/messaging/Message.java new file mode 100644 index 0000000..b32fca3 --- /dev/null +++ b/core/src/main/java/com/otfhee/core/messaging/Message.java @@ -0,0 +1,9 @@ +package com.otfhee.core.messaging; + +import net.kyori.adventure.text.Component; +import org.jetbrains.annotations.NotNull; + +public interface Message { + @NotNull Component message(MessageTypes type, String message); + @NotNull Component message(MessageTypes type, Component message); +} diff --git a/paper/src/main/java/com/otfhee/handlers/MessageType.java b/core/src/main/java/com/otfhee/core/messaging/MessageTypes.java similarity index 56% rename from paper/src/main/java/com/otfhee/handlers/MessageType.java rename to core/src/main/java/com/otfhee/core/messaging/MessageTypes.java index 33af54f..4a158c4 100644 --- a/paper/src/main/java/com/otfhee/handlers/MessageType.java +++ b/core/src/main/java/com/otfhee/core/messaging/MessageTypes.java @@ -1,14 +1,18 @@ -package com.otfhee.handlers; +package com.otfhee.core.messaging; -public enum MessageType { +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; + +public enum MessageTypes { INFO("[i]"), SUCCESS("[]"), WARNING("[]"), ERROR("[]"); private final String type; + private final MiniMessage miniMessage = MiniMessage.miniMessage(); - MessageType(String type) { + MessageTypes(String type) { this.type = type; } @@ -16,4 +20,8 @@ public enum MessageType { public String toString() { return type; } + + public Component toComponent() { + return miniMessage.deserialize(type); + } } diff --git a/core/src/main/java/com/otfhee/core/messaging/Messenger.java b/core/src/main/java/com/otfhee/core/messaging/Messenger.java new file mode 100644 index 0000000..8880859 --- /dev/null +++ b/core/src/main/java/com/otfhee/core/messaging/Messenger.java @@ -0,0 +1,14 @@ +package com.otfhee.core.messaging; + +import net.kyori.adventure.text.Component; + +public interface Messenger extends Message { + void info(String message); + void info(Component message); + void warning(String message); + void warning(Component message); + void error(String message); + void error(Component message); + void success(String message); + void success(Component message); +} diff --git a/core/src/main/java/com/otfhee/core/messaging/SystemMessages.java b/core/src/main/java/com/otfhee/core/messaging/SystemMessages.java new file mode 100644 index 0000000..0accbf9 --- /dev/null +++ b/core/src/main/java/com/otfhee/core/messaging/SystemMessages.java @@ -0,0 +1,70 @@ +package com.otfhee.core.messaging; + +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.audience.ForwardingAudience; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.jetbrains.annotations.NotNull; + +public class SystemMessages implements Messenger { + private final Audience audience; + private final MiniMessage miniMessage = MiniMessage.miniMessage(); + + public SystemMessages(Audience audience) { + this.audience = audience; + } + + @Override + public void info(String message) { + audience.sendMessage(this.message(MessageTypes.INFO, message)); + } + + @Override + public void info(Component message) { + audience.sendMessage(this.message(MessageTypes.INFO, message)); + } + + @Override + public void warning(String message) { + audience.sendMessage(this.message(MessageTypes.WARNING, message)); + } + + @Override + public void warning(Component message) { + audience.sendMessage(this.message(MessageTypes.WARNING, message)); + } + + @Override + public void error(String message) { + audience.sendMessage(this.message(MessageTypes.ERROR, message)); + } + + @Override + public void error(Component message) { + audience.sendMessage(this.message(MessageTypes.ERROR, message)); + } + + @Override + public void success(String message) { + audience.sendMessage(this.message(MessageTypes.SUCCESS, message)); + } + + @Override + public void success(Component message) { + audience.sendMessage(this.message(MessageTypes.SUCCESS, message)); + } + + @Override + public @NotNull Component message(MessageTypes type, Component message) { + return Component.text() + .append(type.toComponent()) + .append(Component.text(" ")) + .append(message) + .build(); + } + + @Override + public @NotNull Component message(MessageTypes type, String message) { + return miniMessage.deserialize(type.toString() + " " + message); + } +} diff --git a/gradle.properties b/gradle.properties old mode 100755 new mode 100644 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar old mode 100755 new mode 100644 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties old mode 100755 new mode 100644 index df97d72..cea7a79 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew old mode 100755 new mode 100644 diff --git a/gradlew.bat b/gradlew.bat old mode 100755 new mode 100644 diff --git a/paper/build.gradle b/paper/build.gradle index ef4bffb..60d6fe3 100644 --- a/paper/build.gradle +++ b/paper/build.gradle @@ -1,7 +1,8 @@ plugins { id 'java-library' - id 'io.papermc.paperweight.userdev' version '1.7.2' + id 'io.papermc.paperweight.userdev' id 'xyz.jpenilla.run-paper' version '2.3.0' + id "com.github.johnrengelman.shadow" version "8.1.1" } repositories { @@ -19,13 +20,33 @@ processResources { } dependencies { - paperweight.paperDevBundle('1.21.1-R0.1-SNAPSHOT') + implementation project(':core') + implementation project(":api") - compileOnly 'dev.jorel:commandapi-bukkit-core:9.4.1' + implementation 'org.mongodb:mongodb-driver-reactivestreams:5.2.1' + implementation 'org.mongodb:mongodb-driver-core:5.2.1' + implementation 'org.mongodb:bson:5.2.1' + implementation platform('io.projectreactor:reactor-bom:2024.0.1') + implementation 'io.projectreactor:reactor-core' - compileOnly 'net.luckperms:api:5.4' + paperweight.paperDevBundle('1.21.4-R0.1-SNAPSHOT') - implementation 'org.jetbrains.exposed:exposed-core:0.53.0' + compileOnly 'dev.jorel:commandapi-bukkit-core:9.5.2' compileOnly 'me.clip:placeholderapi:2.11.6' +} + +shadowJar { + archiveFileName = "OTFHEE-Paper-${project.ext.version}.jar" + + dependencies { + include(dependency('com.otfhee:.*')) + include(dependency('org.mongodb:.*')) + include(dependency('org.reactivestreams:.*')) + include(dependency('io.projectreactor:.*')) + } +} + +artifacts { + archives shadowJar } \ No newline at end of file diff --git a/paper/src/main/java/com/otfhee/Plugin.java b/paper/src/main/java/com/otfhee/Plugin.java deleted file mode 100644 index 0f1a4ca..0000000 --- a/paper/src/main/java/com/otfhee/Plugin.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.otfhee; - -import com.otfhee.commands.*; -import com.otfhee.configurations.PlayersConfig; -import com.otfhee.listeners.*; -import com.otfhee.schedulers.*; -import dev.jorel.commandapi.CommandAPI; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.minimessage.MiniMessage; -import org.bukkit.plugin.java.JavaPlugin; - -import java.text.DecimalFormat; - -public class Plugin extends JavaPlugin { - private static final MiniMessage miniMessage = MiniMessage.miniMessage(); - - @Override - public void onEnable() { - PlayersConfig.load(); - this.saveDefaultConfig(); - CommandAPI.onEnable(); - PrivateMessagesCommand.onCommand(); - GlobalModeCommand.onCommand(); - CoinCommand.onCommand(); - TryCommand.onCommand(); - DoCommand.onCommand(); - MeCommand.onCommand(); - PingCommand.onCommand(); - RulesCommand.onCommand(); - DiscordCommand.onCommand(); - NOTDCommand.onCommand(); - TelegramCommand.onCommand(); - PrefixCommand.onCommand(); - SiteCommand.onCommand(); - NicknameCommand.onCommand(); - ItemCommand.onCommand(); - ParticleCommand.onCommand(); - PremiumCommand.onCommand(); - StuffCommand.onCommand(); - getServer().getPluginManager().registerEvents(new PlayerJoinLeaveListener(), this); - getServer().getPluginManager().registerEvents(new AsyncChatListener(), this); - getServer().getPluginManager().registerEvents(new MoveListener(), this); - getServer().getPluginManager().registerEvents(new PlayerHeadDropListener(), this); - getServer().getPluginManager().registerEvents(new AntiGreefingListener(), this); - getServer().getScheduler().scheduleSyncRepeatingTask(this, new TabList(), 0L, 20L); - getServer().getScheduler().scheduleSyncRepeatingTask(this, new AutoRestart(), 0L, 20L); - getServer().getScheduler().scheduleSyncRepeatingTask(this, new CheckPremium(), 0L, 20L); - getServer().getScheduler().scheduleSyncRepeatingTask(this, new CheckStuffStatus(), 0L, 20L); - } - - @Override - public void onDisable() { - CommandAPI.onDisable(); - PlayersConfig.save(); - this.saveConfig(); - } - - public static Component getTPS() { - DecimalFormat df = new DecimalFormat("#.#"); - double[] tps = getInstance().getServer().getTPS(); - double finalTPS = Double.parseDouble(df.format(tps[0])); - if (finalTPS <= 20) { - if (finalTPS <= 18) { - if (finalTPS <= 10) { - return getMiniMessage().deserialize("" + finalTPS); - } - return getMiniMessage().deserialize("" + finalTPS); - } - return getMiniMessage().deserialize("" + finalTPS); - } - if (finalTPS > 20) { - return getMiniMessage().deserialize("" + 20.0D + "*"); - } - return getMiniMessage().deserialize("" + finalTPS); - } - - public static Component getPing(int ping) { - if (ping >= 0) { - if (ping >= 200) { - if (ping >= 300) { - return getMiniMessage().deserialize("" + ping + "мс"); - } - return getMiniMessage().deserialize("" + ping + "мс"); - } - return getMiniMessage().deserialize("" + ping + "мс"); - } - return getMiniMessage().deserialize("" + ping + "мс"); - } - - public static Plugin getInstance() { - return getPlugin(Plugin.class); - } - - public static MiniMessage getMiniMessage() { - return miniMessage; - } -} diff --git a/paper/src/main/java/com/otfhee/commands/CoinCommand.java b/paper/src/main/java/com/otfhee/commands/CoinCommand.java deleted file mode 100644 index 75834f0..0000000 --- a/paper/src/main/java/com/otfhee/commands/CoinCommand.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.otfhee.commands; - -import com.otfhee.Plugin; -import com.otfhee.handlers.DisplayNameHandler; -import com.otfhee.handlers.MessageType; -import dev.jorel.commandapi.CommandAPICommand; -import net.kyori.adventure.text.Component; -import org.bukkit.entity.Player; - -import java.util.Random; - -public class CoinCommand { - public static void onCommand() { - new CommandAPICommand("coin") - .executesPlayer((sender, args) -> { - Random random = new Random(); - int choice = random.nextInt(2); - for (Player player : Plugin.getInstance().getServer().getOnlinePlayers()) { - if (choice == 1) { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize(MessageType.INFO + " ")) - .append(DisplayNameHandler.displayName(sender)) - .append(Plugin.getMiniMessage().deserialize(" кинул монетку и выпал: ОРЁЛ")) - .build()); - } else { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize(MessageType.INFO + " ")) - .append(DisplayNameHandler.displayName(sender)) - .append(Plugin.getMiniMessage().deserialize(" кинул монетку и выпала: РЕШКА")) - .build()); - } - } - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/commands/DiscordCommand.java b/paper/src/main/java/com/otfhee/commands/DiscordCommand.java deleted file mode 100644 index 16a5736..0000000 --- a/paper/src/main/java/com/otfhee/commands/DiscordCommand.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.otfhee.commands; - -import com.otfhee.Plugin; -import com.otfhee.handlers.MessageType; -import dev.jorel.commandapi.CommandAPICommand; - -public class DiscordCommand { - public static void onCommand() { - new CommandAPICommand("discord") - .withAliases("ds") - .executesPlayer((sender, args) -> { - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.INFO - + " Ссылка на Discord-сервер тык")); - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/commands/DoCommand.java b/paper/src/main/java/com/otfhee/commands/DoCommand.java deleted file mode 100644 index f22e584..0000000 --- a/paper/src/main/java/com/otfhee/commands/DoCommand.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.otfhee.commands; - -import com.otfhee.Plugin; -import com.otfhee.handlers.DisplayNameHandler; -import com.otfhee.handlers.MessageType; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.arguments.GreedyStringArgument; -import net.kyori.adventure.text.Component; -import org.bukkit.entity.Player; - -public class DoCommand { - public static void onCommand() { - new CommandAPICommand("do") - .withArguments(new GreedyStringArgument("действие")) - .executesPlayer((sender, args) -> { - String action = (String) args.get("действие"); - for (Player player : Plugin.getInstance().getServer().getOnlinePlayers()) { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize(MessageType.INFO + " ")) - .append(Plugin.getMiniMessage().deserialize("*")) - .append(DisplayNameHandler.displayName(sender)) - .append(Plugin.getMiniMessage().deserialize(" " + action + "*")) - .build()); - } - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/commands/GlobalModeCommand.java b/paper/src/main/java/com/otfhee/commands/GlobalModeCommand.java deleted file mode 100644 index 0a6435a..0000000 --- a/paper/src/main/java/com/otfhee/commands/GlobalModeCommand.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.otfhee.commands; - -import com.otfhee.Plugin; -import com.otfhee.configurations.PlayersConfig; -import com.otfhee.handlers.MessageType; -import dev.jorel.commandapi.CommandAPICommand; - -public class GlobalModeCommand { - public static void onCommand() { - new CommandAPICommand("global") - .withAliases("g") - .executesPlayer((sender, args) -> { - if (PlayersConfig.getGlobalMode(sender.getUniqueId().toString())) { - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.SUCCESS - + " Режим глобального чата: ВЫКЛЮЧЕН")); - PlayersConfig.setGlobalMode(sender.getUniqueId().toString(), false); - } else { - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.SUCCESS - + " Режим глобального чата: ВКЛЮЧЕН")); - PlayersConfig.setGlobalMode(sender.getUniqueId().toString(), true); - } - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/commands/ItemCommand.java b/paper/src/main/java/com/otfhee/commands/ItemCommand.java deleted file mode 100644 index d7547d6..0000000 --- a/paper/src/main/java/com/otfhee/commands/ItemCommand.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.otfhee.commands; - -import com.otfhee.Plugin; -import com.otfhee.configurations.PlayersConfig; -import com.otfhee.handlers.MessageType; -import com.otfhee.handlers.PremiumHandler; -import dev.jorel.commandapi.CommandAPI; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.arguments.GreedyStringArgument; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -public class ItemCommand { - public static void onCommand() { - CommandAPI.unregister("item", true); - new CommandAPICommand("item") - .withArguments(new GreedyStringArgument("название")) - .executesPlayer((sender, args) -> { - String name = (String) args.get("название"); - if (PlayersConfig.getPremiumStatus(sender.getUniqueId().toString())) { - if (sender.getLevel() >= 5) { - ItemStack item = sender.getInventory().getItemInMainHand(); - ItemMeta itemMeta = item.getItemMeta(); - itemMeta.displayName(Plugin.getMiniMessage().deserialize("" + name)); - item.setItemMeta(itemMeta); - sender.setLevel(sender.getLevel() - 5); - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.SUCCESS + " Название предмета успешно изменено!")); - } else { - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.ERROR + " Недостаточно опыта для изменения названия предмета!")); - } - } else { - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.ERROR + " У вас нет подписки " + PremiumHandler.onHandler() + "!")); - } - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/commands/MeCommand.java b/paper/src/main/java/com/otfhee/commands/MeCommand.java deleted file mode 100644 index 7d48645..0000000 --- a/paper/src/main/java/com/otfhee/commands/MeCommand.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.otfhee.commands; - -import com.otfhee.Plugin; -import com.otfhee.handlers.DisplayNameHandler; -import com.otfhee.handlers.MessageType; -import dev.jorel.commandapi.CommandAPI; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.arguments.GreedyStringArgument; -import net.kyori.adventure.text.Component; -import org.bukkit.entity.Player; - -public class MeCommand { - public static void onCommand() { - CommandAPI.unregister("me", true); - - new CommandAPICommand("me") - .withArguments(new GreedyStringArgument("действие")) - .executesPlayer((sender, args) -> { - String action = (String) args.get("действие"); - for (Player player : Plugin.getInstance().getServer().getOnlinePlayers()) { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize(MessageType.INFO + " ")) - .append(DisplayNameHandler.displayName(sender)) - .append(Plugin.getMiniMessage().deserialize(" " + action + "*")) - .build()); - } - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/commands/NicknameCommand.java b/paper/src/main/java/com/otfhee/commands/NicknameCommand.java deleted file mode 100644 index fccca92..0000000 --- a/paper/src/main/java/com/otfhee/commands/NicknameCommand.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.otfhee.commands; - -import com.otfhee.Plugin; -import com.otfhee.configurations.PlayersConfig; -import com.otfhee.handlers.ColorHandler; -import com.otfhee.handlers.ColorType; -import com.otfhee.handlers.MessageType; -import com.otfhee.handlers.PremiumHandler; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.arguments.ListArgumentBuilder; - -import java.util.List; - -public class NicknameCommand { - public static void onCommand() { - new CommandAPICommand("nickname") - .withAliases("nick") - .withSubcommand(new CommandAPICommand("color") - .withArguments(new ListArgumentBuilder("цвет") - .withList(List.of(ColorType.values())) - .withMapper(material -> material.name().toLowerCase()) - .buildGreedy()) - .executesPlayer((sender, args) -> { - List color = (List) args.get("цвет"); - if (PlayersConfig.getPremiumStatus(sender.getUniqueId().toString())) { - PlayersConfig.setPremiumNickname(sender.getUniqueId().toString(), ColorHandler.colorAdventureBuilder(color.stream().findAny().get())); - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.SUCCESS + " Цвет никнейма успешно изменён!")); - } else { - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.ERROR + " У вас нет подписки " + PremiumHandler.onHandler() + "!")); - } - }) - ) - .withSubcommand(new CommandAPICommand("gradient") - .withArguments(new ListArgumentBuilder("первый цвет") - .withList(List.of(ColorType.values())) - .withMapper(material -> material.name().toLowerCase()) - .buildText()) - .withArguments(new ListArgumentBuilder("второй цвет") - .withList(List.of(ColorType.values())) - .withMapper(material -> material.name().toLowerCase()) - .buildText()) - .executesPlayer((sender, args) -> { - List first_color = (List) args.get("первый цвет"); - List second_color = (List) args.get("второй цвет"); - if (PlayersConfig.getPremiumStatus(sender.getUniqueId().toString())) { - PlayersConfig.setPremiumNickname(sender.getUniqueId().toString(), ColorHandler.gradientAdventureBuilder(first_color.stream().findAny().get(), second_color.stream().findAny().get())); - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.SUCCESS + " Цвет никнейма успешно изменён!")); - } else { - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.ERROR + " У вас нет подписки " + PremiumHandler.onHandler() + "!")); - } - }) - ) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/commands/ParticleCommand.java b/paper/src/main/java/com/otfhee/commands/ParticleCommand.java deleted file mode 100644 index 0ab0678..0000000 --- a/paper/src/main/java/com/otfhee/commands/ParticleCommand.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.otfhee.commands; - -import com.otfhee.Plugin; -import com.otfhee.configurations.PlayersConfig; -import com.otfhee.handlers.ParticleType; -import com.otfhee.handlers.MessageType; -import com.otfhee.handlers.PremiumHandler; -import dev.jorel.commandapi.CommandAPI; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.arguments.ListArgumentBuilder; - -import java.util.List; - -public class ParticleCommand { - public static void onCommand() { - CommandAPI.unregister("particle", true); - new CommandAPICommand("particle") - .withArguments(new ListArgumentBuilder("частицы") - .withList(List.of(ParticleType.values())) - .withMapper(material -> material.name().toLowerCase()) - .buildGreedy()) - .executesPlayer((sender, args) -> { - List particle = (List) args.get("частицы"); - if (PlayersConfig.getPremiumStatus(sender.getUniqueId().toString())) { - PlayersConfig.setPremiumParticle(sender.getUniqueId().toString(), particle.stream().findAny().get()); - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.SUCCESS + " Частицы при ходьбе успешно изменены!")); - } else { - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.ERROR + " У вас нет подписки " + PremiumHandler.onHandler() + "!")); - } - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/commands/PingCommand.java b/paper/src/main/java/com/otfhee/commands/PingCommand.java deleted file mode 100644 index d945508..0000000 --- a/paper/src/main/java/com/otfhee/commands/PingCommand.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.otfhee.commands; - -import com.otfhee.Plugin; -import com.otfhee.handlers.MessageType; -import dev.jorel.commandapi.CommandAPICommand; -import net.kyori.adventure.text.Component; - -public class PingCommand { - public static void onCommand() { - new CommandAPICommand("ping") - .executesPlayer((sender, args) -> { - sender.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize(MessageType.INFO + " Ваш пинг: ")) - .append(Plugin.getPing(sender.getPing())) - .build()); - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/commands/PrefixCommand.java b/paper/src/main/java/com/otfhee/commands/PrefixCommand.java deleted file mode 100644 index 45d37a2..0000000 --- a/paper/src/main/java/com/otfhee/commands/PrefixCommand.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.otfhee.commands; - -import com.otfhee.Plugin; -import com.otfhee.configurations.PlayersConfig; -import com.otfhee.handlers.MessageType; -import com.otfhee.handlers.PrefixType; -import com.otfhee.handlers.PremiumHandler; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.arguments.ListArgumentBuilder; - -import java.util.List; - -public class PrefixCommand { - public static void onCommand() { - new CommandAPICommand("prefix") - .withArguments(new ListArgumentBuilder("префикс") - .withList(List.of(PrefixType.values())) - .withMapper(material -> material.name().toLowerCase()) - .buildGreedy()) - .executesPlayer((sender, args) -> { - List prefix = (List) args.get("префикс"); - if (PlayersConfig.getPremiumStatus(sender.getUniqueId().toString())) { - PlayersConfig.setPremiumPrefix(sender.getUniqueId().toString(), prefix.stream().findAny().get()); - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.SUCCESS + " Префикс успешно изменён!")); - } else { - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.ERROR + " У вас нет подписки " + PremiumHandler.onHandler() + "!")); - } - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/commands/PremiumCommand.java b/paper/src/main/java/com/otfhee/commands/PremiumCommand.java deleted file mode 100644 index 5ff9fda..0000000 --- a/paper/src/main/java/com/otfhee/commands/PremiumCommand.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.otfhee.commands; - -import com.otfhee.Plugin; -import com.otfhee.configurations.PlayersConfig; -import com.otfhee.handlers.MessageType; -import com.otfhee.handlers.PremiumHandler; -import com.otfhee.handlers.RateType; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.arguments.ListArgumentBuilder; -import dev.jorel.commandapi.arguments.OfflinePlayerArgument; -import org.bukkit.OfflinePlayer; - -import java.util.Date; -import java.util.List; - -public class PremiumCommand { - public static void onCommand() { - new CommandAPICommand("premium") - .withSubcommand(new CommandAPICommand("give") - .withPermission("otfhee.commands.premium.give") - .withArguments(new OfflinePlayerArgument("игрок")) - .withArguments(new ListArgumentBuilder("тариф") - .withList(List.of(RateType.values())) - .withMapper(material -> material.name().toLowerCase()) - .buildGreedy()) - .executes((sender, args) -> { - List rate = (List) args.get("тариф"); - OfflinePlayer player = (OfflinePlayer) args.get("игрок"); - Date date = new Date(); - String uuid = player.getUniqueId().toString(); - int finalRate = rate.get(rate.indexOf(rate.stream().findAny().get())).toInt(); - if (PlayersConfig.getPremiumStatus(uuid)) { - Date d = PlayersConfig.getPremiumDate(uuid); - d.setMonth(d.getMonth() + finalRate); - PlayersConfig.setPremiumDate(uuid, d); - } else { - date.setMonth(date.getMonth() + finalRate); - PlayersConfig.setDefaultBuyPremiumSettings(date, uuid); - } - }) - ) - .withSubcommand(new CommandAPICommand("revoke") - .withPermission("otfhee.commands.premium.revoke") - .withArguments(new OfflinePlayerArgument("игрок")) - .executes((sender, args) -> { - OfflinePlayer player = (OfflinePlayer) args.get("игрок"); - String uuid = player.getUniqueId().toString(); - if (PlayersConfig.getPremiumStatus(uuid)) { - PlayersConfig.setDefaultPremiumDate(player.getUniqueId().toString()); - PlayersConfig.setDefaultPremiumStatus(player.getUniqueId().toString()); - PlayersConfig.setDefaultPremiumPrefix(player.getUniqueId().toString()); - PlayersConfig.setDefaultPremiumNickname(player.getUniqueId().toString()); - PlayersConfig.setDefaultPremiumParticle(player.getUniqueId().toString()); - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.SUCCESS + " " + PremiumHandler.onHandler() + " успешно удалён у игрока!")); - } - }) - ) - .withSubcommand(new CommandAPICommand("date") - .executesPlayer((sender, args) -> { - if (PlayersConfig.getPremiumStatus(sender.getUniqueId().toString())) { - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.INFO + " Подписка " + PremiumHandler.onHandler() + " будет активна до: " + PlayersConfig.getPremiumDate(sender.getUniqueId().toString()))); - } else { - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.ERROR + " У вас не найдена подписка " + PremiumHandler.onHandler() + "!")); - } - }) - ) - .withSubcommand(new CommandAPICommand("buy") - .executesPlayer((sender, args) -> { - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.INFO + " Подписку " + PremiumHandler.onHandler() + " можно приобрести здесь")); - }) - ) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/commands/RulesCommand.java b/paper/src/main/java/com/otfhee/commands/RulesCommand.java deleted file mode 100644 index 2eb53c4..0000000 --- a/paper/src/main/java/com/otfhee/commands/RulesCommand.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.otfhee.commands; - -import com.otfhee.Plugin; -import com.otfhee.handlers.MessageType; -import dev.jorel.commandapi.CommandAPICommand; - -public class RulesCommand { - public static void onCommand() { - new CommandAPICommand("rules") - .executesPlayer((sender, args) -> { - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.INFO - + " Ссылка на правила сервера тык")); - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/commands/SiteCommand.java b/paper/src/main/java/com/otfhee/commands/SiteCommand.java deleted file mode 100644 index 74995df..0000000 --- a/paper/src/main/java/com/otfhee/commands/SiteCommand.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.otfhee.commands; - -import com.otfhee.Plugin; -import com.otfhee.handlers.MessageType; -import dev.jorel.commandapi.CommandAPICommand; - -public class SiteCommand { - public static void onCommand() { - new CommandAPICommand("site") - .executesPlayer((sender, args) -> { - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.INFO - + " Ссылка на сайт сервера тык")); - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/commands/StuffCommand.java b/paper/src/main/java/com/otfhee/commands/StuffCommand.java deleted file mode 100644 index 42c0275..0000000 --- a/paper/src/main/java/com/otfhee/commands/StuffCommand.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.otfhee.commands; - -import com.otfhee.Plugin; -import com.otfhee.configurations.PlayersConfig; -import com.otfhee.handlers.MessageType; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.arguments.BooleanArgument; -import dev.jorel.commandapi.arguments.OfflinePlayerArgument; -import org.bukkit.OfflinePlayer; - -public class StuffCommand { - public static void onCommand() { - new CommandAPICommand("stuff") - .withArguments(new OfflinePlayerArgument("игрок")) - .withArguments(new BooleanArgument("значение")) - .withPermission("otfhee.commands.stuff") - .executes((sender, args) -> { - OfflinePlayer player = (OfflinePlayer) args.get("игрок"); - boolean value = (boolean) args.get("значение"); - PlayersConfig.setStuffStatus(player.getUniqueId().toString(), value); - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.SUCCESS + " Успешное изменение значения!")); - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/commands/TelegramCommand.java b/paper/src/main/java/com/otfhee/commands/TelegramCommand.java deleted file mode 100644 index 2125575..0000000 --- a/paper/src/main/java/com/otfhee/commands/TelegramCommand.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.otfhee.commands; - -import com.otfhee.Plugin; -import com.otfhee.handlers.MessageType; -import dev.jorel.commandapi.CommandAPICommand; - -public class TelegramCommand { - public static void onCommand() { - new CommandAPICommand("telegram") - .withAliases("tg") - .executesPlayer((sender, args) -> { - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.INFO - + " Ссылка на Telegram канал тык")); - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/commands/TryCommand.java b/paper/src/main/java/com/otfhee/commands/TryCommand.java deleted file mode 100644 index 38b10b3..0000000 --- a/paper/src/main/java/com/otfhee/commands/TryCommand.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.otfhee.commands; - -import com.otfhee.Plugin; -import com.otfhee.handlers.DisplayNameHandler; -import com.otfhee.handlers.MessageType; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.arguments.GreedyStringArgument; -import net.kyori.adventure.text.Component; -import org.bukkit.entity.Player; - -import java.util.Random; - -public class TryCommand { - public static void onCommand() { - new CommandAPICommand("try") - .withArguments(new GreedyStringArgument("действие")) - .executesPlayer((sender, args) -> { - String action = (String) args.get("действие"); - Random random = new Random(); - int choice = random.nextInt(2); - for (Player player : Plugin.getInstance().getServer().getOnlinePlayers()) { - if (choice == 1) { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize(MessageType.INFO + " ")) - .append(DisplayNameHandler.displayName(sender)) - .append(Plugin.getMiniMessage().deserialize(" " + action + ": УСПЕШНО")) - .build()); - } else { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize(MessageType.INFO + " ")) - .append(DisplayNameHandler.displayName(sender)) - .append(Plugin.getMiniMessage().deserialize(" " + action + ": НЕ УСПЕШНО")) - .build()); - } - } - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/configurations/PlayersConfig.java b/paper/src/main/java/com/otfhee/configurations/PlayersConfig.java deleted file mode 100644 index 0001482..0000000 --- a/paper/src/main/java/com/otfhee/configurations/PlayersConfig.java +++ /dev/null @@ -1,192 +0,0 @@ -package com.otfhee.configurations; - -import com.otfhee.Plugin; -import com.otfhee.handlers.ColorHandler; -import com.otfhee.handlers.ColorType; -import com.otfhee.handlers.ParticleType; -import com.otfhee.handlers.PrefixType; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; - -import java.io.File; -import java.util.Date; - -public class PlayersConfig { - private static File file; - private static YamlConfiguration config; - - public static void load() { - file = new File(Plugin.getInstance().getDataFolder(), "players.yml"); - - if (!file.exists()) { Plugin.getInstance().saveResource("players.yml", false); } - - config = new YamlConfiguration(); - - try { config.options().parseComments(true); } catch (Throwable ignored) {} - - try { config.load(file); } catch (Exception ex) { ex.printStackTrace(); } - } - - public static void loadDefault(String UUID) { - setBoolean("players." + UUID + ".global-mode", false); - setBoolean("players." + UUID + ".premium-status", false); - set("players." + UUID + ".premium-date", null); - setString("players." + UUID + ".premium-prefix", null); - setString("players." + UUID + ".premium-nickname", null); - setString("players." + UUID + ".premium-particle", null); - setBoolean("players." + UUID + ".stuff-status", false); - } - - public static void save() { - try { - config.save(file); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - public static void set(String path, Object value) { - config.set(path, value); - save(); - } - - public static void setString(String path, String value) { - config.set(path, value); - save(); - } - - public static void setInt(String path, int value) { - config.set(path, value); - save(); - } - - public static void setDouble(String path, double value) { - config.set(path, value); - save(); - } - - public static void setBoolean(String path, boolean value) { - config.set(path, value); - save(); - } - - public static YamlConfiguration getConfig() { - return config; - } - - public static boolean getUUIDPlayer(String UUID) { - return config.contains("players." + UUID); - } - - public static ConfigurationSection getPlayer(String uuid) { - return config.getConfigurationSection(uuid); - } - - public static boolean getGlobalMode(String UUID) { - return config.getBoolean("players." + UUID + ".global-mode"); - } - - public static boolean getExistGlobalMode(String UUID) { - return config.contains("players." + UUID + ".global-mode"); - } - - public static void setGlobalMode(String UUID, boolean value) { - setBoolean("players." + UUID + ".global-mode", value); - } - - public static boolean getPremiumStatus(String UUID) { - return config.getBoolean("players." + UUID + ".premium-status"); - } - - public static boolean getExistPremiumStatus(String UUID) { - return config.contains("players." + UUID + ".premium-status"); - } - - public static void setPremiumStatus(String UUID, boolean value) { - setBoolean("players." + UUID + ".premium-status", value); - } - - public static void setDefaultPremiumStatus(String UUID) { - setBoolean("players." + UUID + ".premium-status", false); - } - - public static Date getPremiumDate(String UUID) { - return (Date) config.get("players." + UUID + ".premium-date"); - } - - public static void setPremiumDate(String UUID, Date date) { - set("players." + UUID + ".premium-date", date); - } - - public static void setDefaultPremiumDate(String UUID) { - set("players." + UUID + ".premium-date", null); - } - - public static String getPremiumPrefix(String UUID) { - return config.getString("players." + UUID + ".premium-prefix"); - } - - public static void setDefaultPremiumPrefix(String UUID) { - setString("players." + UUID + ".premium-prefix", null); - } - - public static void setPremiumPrefix(String UUID, PrefixType prefix) { - setString("players." + UUID + ".premium-prefix", prefix.name()); - } - - public static boolean getExistPremiumPrefix(String UUID) { - return config.contains("players." + UUID + ".premium-prefix"); - } - - public static String getPremiumNickname(String UUID) { - return config.getString("players." + UUID + ".premium-nickname"); - } - - public static void setDefaultPremiumNickname(String UUID) { - setString("players." + UUID + ".premium-nickname", null); - } - - public static void setPremiumNickname(String UUID, String color){ - set("players." + UUID + ".premium-nickname", color); - } - - public static boolean getExistPremiumNickname(String UUID) { - return config.contains("players." + UUID + ".premium-nickname"); - } - - public static String getPremiumParticle(String UUID) { - return config.getString("players." + UUID + ".premium-particle"); - } - - public static void setDefaultPremiumParticle(String UUID) { - setString("players." + UUID + ".premium-particle", null); - } - - public static void setPremiumParticle(String UUID, ParticleType type){ - set("players." + UUID + ".premium-particle", type.name()); - } - - public static boolean getExistPremiumParticle(String UUID) { - return config.contains("players." + UUID + ".premium-particle"); - } - - public static void setDefaultBuyPremiumSettings(Date date, String UUID) { - PlayersConfig.setPremiumDate(UUID, date); - PlayersConfig.setPremiumStatus(UUID, true); - PlayersConfig.setPremiumPrefix(UUID, PrefixType.STAR); - PlayersConfig.setPremiumNickname(UUID, ColorHandler.colorAdventureBuilder(ColorType.DEFAULT)); - PlayersConfig.setPremiumParticle(UUID, ParticleType.DEFAULT); - } - - public static boolean getStuffStatus(String UUID) { - return config.getBoolean("players." + UUID + ".stuff-status"); - } - - public static void setStuffStatus(String UUID, boolean value){ - setBoolean("players." + UUID + ".stuff-status", value); - } - - public static boolean getExistStuffStatus(String UUID) { - return config.contains("players." + UUID + ".stuff-status"); - } -} diff --git a/paper/src/main/java/com/otfhee/handlers/ChatHandler.java b/paper/src/main/java/com/otfhee/handlers/ChatHandler.java deleted file mode 100644 index 840f932..0000000 --- a/paper/src/main/java/com/otfhee/handlers/ChatHandler.java +++ /dev/null @@ -1,131 +0,0 @@ -package com.otfhee.handlers; - -import com.otfhee.Plugin; -import com.otfhee.configurations.PlayersConfig; -import net.kyori.adventure.audience.Audience; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.minimessage.MiniMessage; -import net.kyori.adventure.text.minimessage.tag.Tag; -import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; -import net.kyori.adventure.text.minimessage.tag.standard.StandardTags; -import org.bukkit.entity.Player; - -import java.text.DecimalFormat; - -public class ChatHandler { - private static final DecimalFormat df = new DecimalFormat("#.#"); - public static void onChat(ChatType type, String message, Player player, Audience audience) { - Component coordination = Component.text(Double.parseDouble(df.format(player.getX())) - + " " + Double.parseDouble(df.format(player.getY())) + " " + Double.parseDouble(df.format(player.getZ()))); - TagResolver coordinationTag = TagResolver.resolver("coordination", Tag.inserting(coordination)); - TagResolver coordinationsTag = TagResolver.resolver("coordinations", Tag.inserting(coordination)); - TagResolver coordsTag = TagResolver.resolver("coords", Tag.inserting(coordination)); - TagResolver coordTag = TagResolver.resolver("coord", Tag.inserting(coordination)); - TagResolver cordTag = TagResolver.resolver("cord", Tag.inserting(coordination)); - TagResolver cordsTag = TagResolver.resolver("cords", Tag.inserting(coordination)); - MiniMessage miniMessage = MiniMessage.builder() - .tags( - TagResolver.builder() - .resolver(coordinationTag) - .resolver(coordinationsTag) - .resolver(coordsTag) - .resolver(coordTag) - .resolver(cordTag) - .resolver(cordsTag) - .build()) - .build(); - MiniMessage premiumMiniMessage = MiniMessage.builder() - .tags( - TagResolver.builder() - .resolver(StandardTags.clickEvent()) - .resolver(StandardTags.hoverEvent()) - .resolver(StandardTags.reset()) - .resolver(StandardTags.rainbow()) - .resolver(StandardTags.gradient()) - .resolver(StandardTags.decorations()) - .resolver(StandardTags.color()) - .resolver(coordinationTag) - .resolver(coordinationsTag) - .resolver(coordsTag) - .resolver(coordTag) - .resolver(cordTag) - .resolver(cordsTag) - .build()) - .build(); - if (ChatType.GLOBAL.equals(type)) { - if (!PlayersConfig.getGlobalMode(player.getUniqueId().toString())) { - message = message.substring(1); - } - if (PlayersConfig.getGlobalMode(player.getUniqueId().toString()) && message.startsWith("!")) { - message = message.substring(1); - } - if (message.startsWith(" ")) { - message = message.substring(1); - } - if (PlayersConfig.getPremiumStatus(player.getUniqueId().toString())) { - audience.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize("[G] ")) - .append(DisplayNameHandler.displayName(player)) - .append(Component.text(": ")) - .append(premiumMiniMessage.deserialize(message)) - .build()); - } else { - audience.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize("[G] ")) - .append(DisplayNameHandler.displayName(player)) - .append(Component.text(": ")) - .append(miniMessage.deserialize(message)) - .build()); - } - } - if (ChatType.LOCAL.equals(type)) { - if (PlayersConfig.getPremiumStatus(player.getUniqueId().toString())) { - audience.sendMessage(Component.text() - .append(DisplayNameHandler.displayName(player)) - .append(Component.text(": ")) - .append(premiumMiniMessage.deserialize(message)) - .build()); - } else { - audience.sendMessage(Component.text() - .append(DisplayNameHandler.displayName(player)) - .append(Component.text(": ")) - .append(miniMessage.deserialize(message)) - .build()); - } - } - if (ChatType.PRIVATE.equals(type)) { - Player p = (Player) audience; - if (PlayersConfig.getPremiumStatus(player.getUniqueId().toString())) { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize("✉ [")) - .append(DisplayNameHandler.displayName(p)) - .append(Plugin.getMiniMessage().deserialize("")) - .append(Plugin.getMiniMessage().deserialize(" Вы]")) - .append(premiumMiniMessage.deserialize(" " + message)) - .build()); - audience.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize("✉ [")) - .append(DisplayNameHandler.displayName(player)) - .append(Plugin.getMiniMessage().deserialize("")) - .append(Plugin.getMiniMessage().deserialize(" Вы]")) - .append(premiumMiniMessage.deserialize(" " + message)) - .build()); - } else { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize("✉ [")) - .append(DisplayNameHandler.displayName(p)) - .append(Plugin.getMiniMessage().deserialize("")) - .append(Plugin.getMiniMessage().deserialize(" Вы]")) - .append(miniMessage.deserialize(" " + message)) - .build()); - audience.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize("✉ [")) - .append(DisplayNameHandler.displayName(player)) - .append(Plugin.getMiniMessage().deserialize("")) - .append(Plugin.getMiniMessage().deserialize(" Вы]")) - .append(miniMessage.deserialize(" " + message)) - .build()); - } - } - } -} diff --git a/paper/src/main/java/com/otfhee/handlers/DisplayNameHandler.java b/paper/src/main/java/com/otfhee/handlers/DisplayNameHandler.java deleted file mode 100644 index 0cd1c9b..0000000 --- a/paper/src/main/java/com/otfhee/handlers/DisplayNameHandler.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.otfhee.handlers; - -import com.otfhee.Plugin; -import com.otfhee.configurations.PlayersConfig; -import net.kyori.adventure.text.Component; -import org.bukkit.entity.Player; - -public class DisplayNameHandler { - public static Component displayName(Player player) { - String click = "Нажмите, чтобы написать в лс'>"; - if (!PlayersConfig.getPremiumStatus(player.getUniqueId().toString())) { - return Plugin.getMiniMessage().deserialize(click + player.getName()); - } else { - if (PlayersConfig.getPremiumPrefix(player.getUniqueId().toString()).equals(PrefixType.DEFAULT.name())) { - return Plugin.getMiniMessage().deserialize(click + PlayersConfig.getPremiumNickname(player.getUniqueId().toString()) + player.getName()); - } - return Plugin.getMiniMessage().deserialize(click + PrefixHandler.onPrefix(PrefixType.valueOf(PlayersConfig.getPremiumPrefix(player.getUniqueId().toString()))) - + " " + PlayersConfig.getPremiumNickname(player.getUniqueId().toString()) + player.getName()); - } - } -} diff --git a/paper/src/main/java/com/otfhee/handlers/ParticleHandler.java b/paper/src/main/java/com/otfhee/handlers/ParticleHandler.java deleted file mode 100644 index a5927eb..0000000 --- a/paper/src/main/java/com/otfhee/handlers/ParticleHandler.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.otfhee.handlers; - -import com.otfhee.configurations.PlayersConfig; -import org.bukkit.Particle; -import org.bukkit.entity.Player; - -public class ParticleHandler { - public static void onHandler(Player player) { - String uuid = player.getUniqueId().toString(); - if (!PlayersConfig.getPremiumParticle(uuid).equals(ParticleType.DEFAULT.name())) { - if (PlayersConfig.getPremiumParticle(uuid).equals(ParticleType.NOTE.name())) { - player.spawnParticle(Particle.NOTE, player.getLocation().set(player.getX(), player.getY(), player.getZ()), 10); - } - if (PlayersConfig.getPremiumParticle(uuid).equals(ParticleType.HEART.name())) { - player.spawnParticle(Particle.HEART, player.getLocation().set(player.getX(), player.getY(), player.getZ()), 10); - } - if (PlayersConfig.getPremiumParticle(uuid).equals(ParticleType.CHERRY_LEAVES.name())) { - player.spawnParticle(Particle.CHERRY_LEAVES, player.getLocation().set(player.getX(), player.getY() + 1, player.getZ()), 10); - } - } - } -} diff --git a/paper/src/main/java/com/otfhee/handlers/PrefixHandler.java b/paper/src/main/java/com/otfhee/handlers/PrefixHandler.java deleted file mode 100644 index 374e981..0000000 --- a/paper/src/main/java/com/otfhee/handlers/PrefixHandler.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.otfhee.handlers; - -import java.util.List; - -public class PrefixHandler { - public static String onPrefix(PrefixType type) { - List prefix = List.of(PrefixType.values()); - int get = prefix.indexOf(type); - return prefix.get(get).toString(); - } -} diff --git a/paper/src/main/java/com/otfhee/listeners/AsyncChatListener.java b/paper/src/main/java/com/otfhee/listeners/AsyncChatListener.java deleted file mode 100644 index 687827a..0000000 --- a/paper/src/main/java/com/otfhee/listeners/AsyncChatListener.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.otfhee.listeners; - -import com.otfhee.configurations.PlayersConfig; -import com.otfhee.handlers.ChatHandler; -import com.otfhee.handlers.ChatType; -import io.papermc.paper.event.player.AsyncChatEvent; -import net.kyori.adventure.text.TextComponent; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; - -public class AsyncChatListener implements Listener { - @EventHandler - public void onChat(AsyncChatEvent event) { - Player sender = event.getPlayer(); - TextComponent message = (TextComponent) event.message(); - if (message.content().startsWith("!") && !message.content().equals("!") || PlayersConfig.getGlobalMode(sender.getUniqueId().toString())) { - for (Player player : sender.getServer().getOnlinePlayers()) { - ChatHandler.onChat(ChatType.GLOBAL, message.content(), sender, player); - } - // Исходный логгинг, без MiniMessage и префикса - Bukkit.getLogger().info("[G] " + sender.getName() + ": " + message.content()); - } else { - for (Player player : sender.getServer().getOnlinePlayers()) { - if (player.getWorld().equals(sender.getWorld())) { - if (player.getLocation().distance(sender.getLocation()) <= 100) { - ChatHandler.onChat(ChatType.LOCAL, message.content(), sender, player); - } - } - } - // Исходный логгинг, без MiniMessage и префикса - Bukkit.getLogger().info(sender.getName() + ": " + message.content()); - } - event.setCancelled(true); - } -} diff --git a/paper/src/main/java/com/otfhee/listeners/MoveListener.java b/paper/src/main/java/com/otfhee/listeners/MoveListener.java deleted file mode 100644 index ec6c45c..0000000 --- a/paper/src/main/java/com/otfhee/listeners/MoveListener.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.otfhee.listeners; - -import com.otfhee.configurations.PlayersConfig; -import com.otfhee.handlers.ParticleHandler; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerMoveEvent; - -public class MoveListener implements Listener { - @EventHandler - public void onEvent(PlayerMoveEvent event) { - if (PlayersConfig.getPremiumStatus(event.getPlayer().getUniqueId().toString())) { - ParticleHandler.onHandler(event.getPlayer()); - } - } -} diff --git a/paper/src/main/java/com/otfhee/listeners/PlayerJoinLeaveListener.java b/paper/src/main/java/com/otfhee/listeners/PlayerJoinLeaveListener.java deleted file mode 100644 index 842e45f..0000000 --- a/paper/src/main/java/com/otfhee/listeners/PlayerJoinLeaveListener.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.otfhee.listeners; - -import com.otfhee.Plugin; -import com.otfhee.configurations.PlayersConfig; -import com.otfhee.handlers.DisplayNameHandler; -import com.otfhee.handlers.MessageType; -import com.otfhee.handlers.PremiumHandler; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.scoreboard.Criteria; -import org.bukkit.scoreboard.DisplaySlot; -import org.bukkit.scoreboard.Objective; -import org.bukkit.scoreboard.Scoreboard; - -import java.util.Date; - -public class PlayerJoinLeaveListener implements Listener { - @EventHandler - public void onJoin(PlayerJoinEvent event) { - Player player = event.getPlayer(); - String uuid = player.getUniqueId().toString(); - - if (!player.hasPlayedBefore()) { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize(MessageType.INFO - + " Добро пожаловать на OTFHEE, " + player.getName() + "!")) - .append(Plugin.getMiniMessage().deserialize("Ссылка на правила сервера тык")) - .append(Plugin.getMiniMessage().deserialize("Ссылка на Discord-сервер тык")) - .append(Plugin.getMiniMessage().deserialize("Ссылка на Telegram канал тык")) - .append(Plugin.getMiniMessage().deserialize("Ссылка на приобретение " + PremiumHandler.onHandler() + " тык")) - .build()); - } - if (!PlayersConfig.getUUIDPlayer(uuid)) { - PlayersConfig.loadDefault(uuid); - PlayersConfig.load(); - } - if (!PlayersConfig.getExistPremiumStatus(uuid)) { - PlayersConfig.setDefaultPremiumStatus(uuid); - PlayersConfig.load(); - } - if (!PlayersConfig.getExistGlobalMode(uuid)) { - PlayersConfig.setGlobalMode(uuid, false); - PlayersConfig.load(); - } - if (!PlayersConfig.getExistStuffStatus(uuid)) { - PlayersConfig.setStuffStatus(uuid, false); - PlayersConfig.load(); - } - event.joinMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize("[+] ")) - .append(DisplayNameHandler.displayName(player)) - .build()); - } - @EventHandler - public void onLeave(PlayerQuitEvent event) { - Player player = event.getPlayer(); - - event.quitMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize("[-] ")) - .append(DisplayNameHandler.displayName(player)) - .build()); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/Plugin.java b/paper/src/main/java/com/otfhee/paper/Plugin.java new file mode 100644 index 0000000..c1dfc91 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/Plugin.java @@ -0,0 +1,137 @@ +package com.otfhee.paper; + +import com.mongodb.ConnectionString; +import com.mongodb.MongoClientSettings; +import com.mongodb.ServerApi; +import com.mongodb.ServerApiVersion; +import com.mongodb.reactivestreams.client.MongoClient; +import com.mongodb.reactivestreams.client.MongoClients; +import com.mongodb.reactivestreams.client.MongoCollection; +import com.mongodb.reactivestreams.client.MongoDatabase; +import com.otfhee.core.Core; +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.commands.*; +import com.otfhee.paper.database.CreatePlayer; +import com.otfhee.paper.database.impl.CreatePlayerImpl; +import com.otfhee.paper.database.meta.PlayerMeta; +import com.otfhee.paper.database.meta.impl.PlayerMetaImpl; +import com.otfhee.paper.database.settings.PlayerSettings; +import com.otfhee.paper.database.settings.impl.PlayerSettingsImpl; +import com.otfhee.paper.listeners.AntiGreefingListener; +import com.otfhee.paper.listeners.MoveListener; +import com.otfhee.paper.listeners.PlayerHeadDropListener; +import com.otfhee.paper.listeners.PlayerJoinLeaveListener; +import com.otfhee.paper.schedulers.AutoRestart; +import com.otfhee.paper.schedulers.CheckPremium; +import com.otfhee.paper.schedulers.TabList; +import dev.jorel.commandapi.CommandAPI; +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bson.Document; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.jetbrains.annotations.NotNull; + +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +public final class Plugin extends JavaPlugin { + private static final MiniMessage miniMessage = MiniMessage.miniMessage(); + private static final Messenger messenger = Core.getMessenger(Bukkit.getServer()); + + private MongoDatabase database; + private MongoCollection playersCollection; + + @Override + public void onEnable() { + // MongoDB + ServerApi serverApi = ServerApi.builder() + .version(ServerApiVersion.V1) + .build(); + + MongoClientSettings settings = MongoClientSettings.builder() + .applyConnectionString(new ConnectionString(Objects.requireNonNull(getConfig().getString("mongodb.url")))) + .serverApi(serverApi) + .applyToConnectionPoolSettings(builder -> builder + .maxSize(100) + .minSize(10) + .maxWaitTime(5000, TimeUnit.MILLISECONDS)) + .build(); + + MongoClient mongoClient = MongoClients.create(settings); + database = mongoClient.getDatabase(Objects.requireNonNull(getConfig().getString("mongodb.database"))); + playersCollection = database.getCollection(Objects.requireNonNull(getConfig().getString("mongodb.players-collection"))); + + this.saveDefaultConfig(); + CommandAPI.onEnable(); + PrivateMessagesCommand.onCommand(); + GlobalModeCommand.onCommand(); + CoinCommand.onCommand(); + TryCommand.onCommand(); + DoCommand.onCommand(); + MeCommand.onCommand(); + PingCommand.onCommand(); + RulesCommand.onCommand(); + DiscordCommand.onCommand(); + NOTDCommand.onCommand(); + TelegramCommand.onCommand(); + PrefixCommand.onCommand(); + SiteCommand.onCommand(); + NicknameCommand.onCommand(); + ItemCommand.onCommand(); + ParticleCommand.onCommand(); + PremiumCommand.onCommand(); + StaffCommand.onCommand(); + getServer().getPluginManager().registerEvents(new PlayerJoinLeaveListener(), this); + getServer().getPluginManager().registerEvents(new PlayerHeadDropListener(), this); + getServer().getPluginManager().registerEvents(new AntiGreefingListener(), this); + getServer().getPluginManager().registerEvents(new MoveListener(), this); + getServer().getGlobalRegionScheduler().runAtFixedRate(this, scheduledTask -> new AutoRestart().run(), 1L, 20L); + getServer().getGlobalRegionScheduler().runAtFixedRate(this, scheduledTask -> new CheckPremium().run(), 1L, 20L); + getServer().getGlobalRegionScheduler().runAtFixedRate(this, scheduledTask -> new TabList().run(), 1L, 20L); + } + + @Override + public void onDisable() { + getServer().getGlobalRegionScheduler().cancelTasks(this); + CommandAPI.onDisable(); + this.saveConfig(); + } + + public static @NotNull Plugin getInstance() { + return getPlugin(Plugin.class); + } + + public static MiniMessage getMiniMessage() { + return miniMessage; + } + + public static Messenger getMessenger() { + return messenger; + } + + public static @NotNull Messenger getAudienceMessenger(Audience audience) { + return Core.getMessenger(audience); + } + + public MongoDatabase getDatabase() { + return database; + } + + public MongoCollection getPlayersCollection() { + return playersCollection; + } + + public @NotNull CreatePlayer createPlayer(Player player) { + return new CreatePlayerImpl(playersCollection, player); + } + + public @NotNull PlayerSettings getPlayerSettings(Player player) { + return new PlayerSettingsImpl(playersCollection, player); + } + + public @NotNull PlayerMeta getPlayerMeta(Player player) { + return new PlayerMetaImpl(playersCollection, player); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/CoinCommand.java b/paper/src/main/java/com/otfhee/paper/commands/CoinCommand.java new file mode 100644 index 0000000..0d36a6a --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/CoinCommand.java @@ -0,0 +1,22 @@ +package com.otfhee.paper.commands; + +import com.otfhee.paper.Plugin; +import dev.jorel.commandapi.CommandAPICommand; + +import java.util.Random; + +public class CoinCommand { + public static void onCommand() { + new CommandAPICommand("coin") + .executesPlayer((sender, args) -> { + Random random = new Random(); + int choice = random.nextInt(2); + if (choice == 1) { + Plugin.getMessenger().info("кинул монетку и выпал: ОРЁЛ"); + } else { + Plugin.getMessenger().info("кинул монетку и выпала: РЕШКА"); + } + }) + .register(); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/DiscordCommand.java b/paper/src/main/java/com/otfhee/paper/commands/DiscordCommand.java new file mode 100644 index 0000000..7912243 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/DiscordCommand.java @@ -0,0 +1,17 @@ +package com.otfhee.paper.commands; + +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.Plugin; +import dev.jorel.commandapi.CommandAPICommand; + +public class DiscordCommand { + public static void onCommand() { + new CommandAPICommand("discord") + .withAliases("ds") + .executesPlayer((sender, args) -> { + Messenger messenger = Plugin.getAudienceMessenger(sender); + messenger.info("Ссылка на Discord-сервер тык"); + }) + .register(); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/DoCommand.java b/paper/src/main/java/com/otfhee/paper/commands/DoCommand.java new file mode 100644 index 0000000..d08a9ef --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/DoCommand.java @@ -0,0 +1,17 @@ +package com.otfhee.paper.commands; + +import com.otfhee.paper.Plugin; +import dev.jorel.commandapi.CommandAPICommand; +import dev.jorel.commandapi.arguments.GreedyStringArgument; + +public class DoCommand { + public static void onCommand() { + new CommandAPICommand("do") + .withArguments(new GreedyStringArgument("действие")) + .executesPlayer((sender, args) -> { + String action = (String) args.get("действие"); + Plugin.getMessenger().info("*" + sender + " " + action + "*"); + }) + .register(); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/GlobalModeCommand.java b/paper/src/main/java/com/otfhee/paper/commands/GlobalModeCommand.java new file mode 100644 index 0000000..9459bc1 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/GlobalModeCommand.java @@ -0,0 +1,41 @@ +package com.otfhee.paper.commands; + +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.Plugin; +import com.otfhee.paper.database.settings.GlobalMode; +import com.otfhee.paper.database.settings.impl.GlobalModeImpl; +import dev.jorel.commandapi.CommandAPICommand; +import reactor.core.publisher.Mono; + +public class GlobalModeCommand { + public static void onCommand() { + new CommandAPICommand("global") + .withAliases("g") + .executesPlayer((sender, args) -> { + Plugin plugin = Plugin.getInstance(); + Messenger messenger = Plugin.getAudienceMessenger(sender); + GlobalMode globalMode = new GlobalModeImpl(plugin.getPlayersCollection(), sender); + Mono value = globalMode.getGlobalMode(); + + value.subscribe(x -> { + boolean mode = x != null && x; + if (mode) { + messenger.success("Режим глобального чата: ВЫКЛЮЧЕН"); + globalMode.setGlobalMode(false) + .subscribe( + null, + error -> System.out.println("Error: " + error) + ); + } else { + messenger.success("Режим глобального чата: ВКЛЮЧЕН"); + globalMode.setGlobalMode(true) + .subscribe( + null, + error -> System.out.println("Error: " + error) + ); + } + }); + }) + .register(); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/ItemCommand.java b/paper/src/main/java/com/otfhee/paper/commands/ItemCommand.java new file mode 100644 index 0000000..e004a0b --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/ItemCommand.java @@ -0,0 +1,47 @@ +package com.otfhee.paper.commands; + +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.Plugin; +import com.otfhee.paper.database.meta.PremiumDate; +import com.otfhee.paper.handlers.PremiumHandler; +import dev.jorel.commandapi.CommandAPI; +import dev.jorel.commandapi.CommandAPICommand; +import dev.jorel.commandapi.arguments.GreedyStringArgument; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.Date; + +@Deprecated +public class ItemCommand { + public static void onCommand() { + CommandAPI.unregister("item", true); + new CommandAPICommand("item") + .withArguments(new GreedyStringArgument("название")) + .executesPlayer((sender, args) -> { + String name = (String) args.get("название"); + Messenger messenger = Plugin.getAudienceMessenger(sender); + Plugin plugin = Plugin.getInstance(); + PremiumDate date = plugin.getPlayerMeta(sender).getPremiumDate(); + Date now = new Date(); + + date.getDate().subscribe(value -> { + if (now.before(value)) { + if (sender.getLevel() >= 5) { + ItemStack item = sender.getInventory().getItemInMainHand(); + ItemMeta itemMeta = item.getItemMeta(); + itemMeta.displayName(Plugin.getMiniMessage().deserialize("" + name)); + item.setItemMeta(itemMeta); + sender.setLevel(sender.getLevel() - 5); + messenger.success("Название предмета успешно изменено!"); + } else { + messenger.error("Недостаточно опыта для изменения названия предмета!"); + } + } else { + messenger.error("У вас нет подписки " + PremiumHandler.onHandler() + "!"); + } + }); + }) + .register(); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/MeCommand.java b/paper/src/main/java/com/otfhee/paper/commands/MeCommand.java new file mode 100644 index 0000000..998619b --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/MeCommand.java @@ -0,0 +1,24 @@ +package com.otfhee.paper.commands; + +import com.otfhee.paper.Plugin; +import dev.jorel.commandapi.CommandAPI; +import dev.jorel.commandapi.CommandAPICommand; +import dev.jorel.commandapi.arguments.GreedyStringArgument; +import net.kyori.adventure.text.Component; + +public class MeCommand { + public static void onCommand() { + CommandAPI.unregister("me", true); + + new CommandAPICommand("me") + .withArguments(new GreedyStringArgument("действие")) + .executesPlayer((sender, args) -> { + String action = (String) args.get("действие"); + Plugin.getMessenger().info(Component.text() + .append(sender.displayName()) + .append(Component.text(" " + action + "*")) + .build()); + }) + .register(); + } +} diff --git a/paper/src/main/java/com/otfhee/commands/NOTDCommand.java b/paper/src/main/java/com/otfhee/paper/commands/NOTDCommand.java similarity index 77% rename from paper/src/main/java/com/otfhee/commands/NOTDCommand.java rename to paper/src/main/java/com/otfhee/paper/commands/NOTDCommand.java index dfa6063..303ee00 100644 --- a/paper/src/main/java/com/otfhee/commands/NOTDCommand.java +++ b/paper/src/main/java/com/otfhee/paper/commands/NOTDCommand.java @@ -1,10 +1,11 @@ -package com.otfhee.commands; +package com.otfhee.paper.commands; -import com.otfhee.Plugin; -import com.otfhee.handlers.MessageType; +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.Plugin; import dev.jorel.commandapi.CommandAPICommand; import dev.jorel.commandapi.arguments.GreedyStringArgument; +@Deprecated public class NOTDCommand { public static void onCommand() { // News Of The Day @@ -13,6 +14,7 @@ public static void onCommand() { .withPermission("otfhee.commands.notd") .executes((sender, args) -> { String news = (String) args.get("новость"); + Messenger messenger = Plugin.getAudienceMessenger(sender); if (news.equals("null")) { Plugin.getInstance().getConfig().set("notd", ""); Plugin.getInstance().saveConfig(); @@ -22,7 +24,7 @@ public static void onCommand() { Plugin.getInstance().saveConfig(); Plugin.getInstance().reloadConfig(); } - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.SUCCESS + " Новость успешно изменена!")); + messenger.success("Новость успешно изменена!"); }) .register(); } diff --git a/paper/src/main/java/com/otfhee/paper/commands/NicknameCommand.java b/paper/src/main/java/com/otfhee/paper/commands/NicknameCommand.java new file mode 100644 index 0000000..6857fe3 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/NicknameCommand.java @@ -0,0 +1,74 @@ +package com.otfhee.paper.commands; + +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.Plugin; +import com.otfhee.paper.database.meta.PremiumDate; +import com.otfhee.paper.database.settings.DisplayColor; +import com.otfhee.paper.handlers.ColorHandler; +import com.otfhee.paper.handlers.ColorType; +import com.otfhee.paper.handlers.PremiumHandler; +import dev.jorel.commandapi.CommandAPICommand; +import dev.jorel.commandapi.arguments.ListArgumentBuilder; + +import java.util.Date; +import java.util.List; + +@Deprecated +public class NicknameCommand { + public static void onCommand() { + new CommandAPICommand("nickname") + .withAliases("nick") + .withSubcommand(new CommandAPICommand("color") + .withArguments(new ListArgumentBuilder("цвет") + .withList(List.of(ColorType.values())) + .withMapper(material -> material.name().toLowerCase()) + .buildGreedy()) + .executesPlayer((sender, args) -> { + Messenger messenger = Plugin.getAudienceMessenger(sender); + Plugin plugin = Plugin.getInstance(); + PremiumDate date = plugin.getPlayerMeta(sender).getPremiumDate(); + DisplayColor displayColor = plugin.getPlayerSettings(sender).getDisplayColor(); + Date now = new Date(); + List color = (List) args.get("цвет"); + + date.getDate().subscribe(value -> { + if (now.before(value)) { + displayColor.setColor(ColorHandler.colorAdventureBuilder(color.stream().findAny().get())); + messenger.success("Цвет никнейма успешно изменён!"); + } else { + messenger.error("У вас нет подписки " + PremiumHandler.onHandler() + "!"); + } + }); + }) + ) + .withSubcommand(new CommandAPICommand("gradient") + .withArguments(new ListArgumentBuilder("первый цвет") + .withList(List.of(ColorType.values())) + .withMapper(material -> material.name().toLowerCase()) + .buildText()) + .withArguments(new ListArgumentBuilder("второй цвет") + .withList(List.of(ColorType.values())) + .withMapper(material -> material.name().toLowerCase()) + .buildText()) + .executesPlayer((sender, args) -> { + Messenger messenger = Plugin.getAudienceMessenger(sender); + Plugin plugin = Plugin.getInstance(); + PremiumDate date = plugin.getPlayerMeta(sender).getPremiumDate(); + DisplayColor displayColor = plugin.getPlayerSettings(sender).getDisplayColor(); + Date now = new Date(); + List first_color = (List) args.get("первый цвет"); + List second_color = (List) args.get("второй цвет"); + + date.getDate().subscribe(value -> { + if (now.before(value)) { + displayColor.setColor(ColorHandler.gradientAdventureBuilder(first_color.stream().findAny().get(), second_color.stream().findAny().get())); + messenger.success("Цвет никнейма успешно изменён!"); + } else { + messenger.error("У вас нет подписки " + PremiumHandler.onHandler() + "!"); + } + }); + }) + ) + .register(); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/ParticleCommand.java b/paper/src/main/java/com/otfhee/paper/commands/ParticleCommand.java new file mode 100644 index 0000000..5a73d7d --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/ParticleCommand.java @@ -0,0 +1,44 @@ +package com.otfhee.paper.commands; + +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.Plugin; +import com.otfhee.paper.database.meta.PremiumDate; +import com.otfhee.paper.database.settings.PlayerParticle; +import com.otfhee.paper.handlers.ParticleType; +import com.otfhee.paper.handlers.PremiumHandler; +import dev.jorel.commandapi.CommandAPI; +import dev.jorel.commandapi.CommandAPICommand; +import dev.jorel.commandapi.arguments.ListArgumentBuilder; + +import java.util.Date; +import java.util.List; + +@Deprecated +public class ParticleCommand { + public static void onCommand() { + CommandAPI.unregister("particle", true); + new CommandAPICommand("particle") + .withArguments(new ListArgumentBuilder("частицы") + .withList(List.of(ParticleType.values())) + .withMapper(material -> material.name().toLowerCase()) + .buildGreedy()) + .executesPlayer((sender, args) -> { + Messenger messenger = Plugin.getAudienceMessenger(sender); + Plugin plugin = Plugin.getInstance(); + PremiumDate date = plugin.getPlayerMeta(sender).getPremiumDate(); + PlayerParticle playerParticle = plugin.getPlayerSettings(sender).getPlayerParticle(); + Date now = new Date(); + + List particle = (List) args.get("частицы"); + date.getDate().subscribe(value -> { + if (now.before(value)) { + playerParticle.setParticle(particle.stream().findAny().get().toString()); + messenger.success("Частицы при ходьбе успешно изменены!"); + } else { + messenger.error("У вас нет подписки " + PremiumHandler.onHandler() + "!"); + } + }); + }) + .register(); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/PingCommand.java b/paper/src/main/java/com/otfhee/paper/commands/PingCommand.java new file mode 100644 index 0000000..978505d --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/PingCommand.java @@ -0,0 +1,17 @@ +package com.otfhee.paper.commands; + +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.Plugin; +import com.otfhee.paper.telemetry.PingTelemetry; +import dev.jorel.commandapi.CommandAPICommand; + +public class PingCommand { + public static void onCommand() { + new CommandAPICommand("ping") + .executesPlayer((sender, args) -> { + Messenger messenger = Plugin.getAudienceMessenger(sender); + messenger.info("Ваш пинг: " + PingTelemetry.getPing(sender.getPing())); + }) + .register(); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/PrefixCommand.java b/paper/src/main/java/com/otfhee/paper/commands/PrefixCommand.java new file mode 100644 index 0000000..335d32e --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/PrefixCommand.java @@ -0,0 +1,42 @@ +package com.otfhee.paper.commands; + +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.Plugin; +import com.otfhee.paper.database.meta.PremiumDate; +import com.otfhee.paper.database.settings.PlayerPrefix; +import com.otfhee.paper.handlers.PrefixType; +import com.otfhee.paper.handlers.PremiumHandler; +import dev.jorel.commandapi.CommandAPICommand; +import dev.jorel.commandapi.arguments.ListArgumentBuilder; + +import java.util.Date; +import java.util.List; + +@Deprecated +public class PrefixCommand { + public static void onCommand() { + new CommandAPICommand("prefix") + .withArguments(new ListArgumentBuilder("префикс") + .withList(List.of(PrefixType.values())) + .withMapper(material -> material.name().toLowerCase()) + .buildGreedy()) + .executesPlayer((sender, args) -> { + Messenger messenger = Plugin.getAudienceMessenger(sender); + Plugin plugin = Plugin.getInstance(); + PremiumDate date = plugin.getPlayerMeta(sender).getPremiumDate(); + PlayerPrefix playerPrefix = plugin.getPlayerSettings(sender).getPlayerPrefix(); + Date now = new Date(); + List prefix = (List) args.get("префикс"); + + date.getDate().subscribe(value -> { + if (now.before(value)) { + playerPrefix.setPrefix(prefix.stream().findAny().get().toString()); + messenger.success("Префикс успешно изменён!"); + } else { + messenger.error("У вас нет подписки " + PremiumHandler.onHandler() + "!"); + } + }); + }) + .register(); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/PremiumCommand.java b/paper/src/main/java/com/otfhee/paper/commands/PremiumCommand.java new file mode 100644 index 0000000..400651e --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/PremiumCommand.java @@ -0,0 +1,88 @@ +package com.otfhee.paper.commands; + +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.Plugin; +import com.otfhee.paper.database.meta.PremiumDate; +import com.otfhee.paper.handlers.PremiumHandler; +import com.otfhee.paper.handlers.RateType; +import dev.jorel.commandapi.CommandAPICommand; +import dev.jorel.commandapi.arguments.ListArgumentBuilder; +import dev.jorel.commandapi.arguments.OfflinePlayerArgument; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; + +import java.util.Date; +import java.util.List; + +@Deprecated +public class PremiumCommand { + public static void onCommand() { + new CommandAPICommand("premium") + .withSubcommand(new CommandAPICommand("give") + .withPermission("otfhee.commands.premium.give") + .withArguments(new OfflinePlayerArgument("игрок")) + .withArguments(new ListArgumentBuilder("тариф") + .withList(List.of(RateType.values())) + .withMapper(material -> material.name().toLowerCase()) + .buildGreedy()) + .executes((sender, args) -> { + List rate = (List) args.get("тариф"); + OfflinePlayer player = (OfflinePlayer) args.get("игрок"); + Date now = new Date(); + Messenger messenger = Plugin.getAudienceMessenger(sender); + Plugin plugin = Plugin.getInstance(); + PremiumDate date = plugin.getPlayerMeta((Player) player).getPremiumDate(); + int finalRate = rate.get(rate.indexOf(rate.stream().findAny().get())).toInt(); + + date.getDate().subscribe(value -> { + if (value != null) { + value.setMonth(value.getMonth() + finalRate); + value.setDate(value.getDate()); + messenger.success("Успешная выдача Premium-подписки!"); + } else { + now.setMonth(now.getMonth() + finalRate); + value.setDate(now.getDate()); + messenger.success("Успешная выдача Premium-подписки!"); + } + }); + }) + ) + .withSubcommand(new CommandAPICommand("revoke") + .withPermission("otfhee.commands.premium.revoke") + .withArguments(new OfflinePlayerArgument("игрок")) + .executes((sender, args) -> { + OfflinePlayer player = (OfflinePlayer) args.get("игрок"); + Messenger messenger = Plugin.getAudienceMessenger(sender); + Plugin plugin = Plugin.getInstance(); + PremiumDate date = plugin.getPlayerMeta((Player) player).getPremiumDate(); + date.getDate().subscribe(value -> { + if (value.toString() != null) { + date.insertDefault(); + messenger.success(PremiumHandler.onHandler() + " успешно удалён у игрока!"); + } + }); + }) + ) + .withSubcommand(new CommandAPICommand("date") + .executesPlayer((sender, args) -> { + Messenger messenger = Plugin.getAudienceMessenger(sender); + Plugin plugin = Plugin.getInstance(); + PremiumDate date = plugin.getPlayerMeta(sender).getPremiumDate(); + date.getDate().subscribe(value -> { + if (value != null) { + messenger.info("Подписка " + PremiumHandler.onHandler() + " будет активна до: " + value); + } else { + messenger.error("У вас не найдена подписка " + PremiumHandler.onHandler() + "!"); + } + }); + }) + ) + .withSubcommand(new CommandAPICommand("buy") + .executesPlayer((sender, args) -> { + Messenger messenger = Plugin.getAudienceMessenger(sender); + messenger.info("Подписку " + PremiumHandler.onHandler() + " можно приобрести здесь"); + }) + ) + .register(); + } +} diff --git a/paper/src/main/java/com/otfhee/commands/PrivateMessagesCommand.java b/paper/src/main/java/com/otfhee/paper/commands/PrivateMessagesCommand.java similarity index 77% rename from paper/src/main/java/com/otfhee/commands/PrivateMessagesCommand.java rename to paper/src/main/java/com/otfhee/paper/commands/PrivateMessagesCommand.java index 9b3aeae..a5b73e7 100644 --- a/paper/src/main/java/com/otfhee/commands/PrivateMessagesCommand.java +++ b/paper/src/main/java/com/otfhee/paper/commands/PrivateMessagesCommand.java @@ -1,9 +1,9 @@ -package com.otfhee.commands; +package com.otfhee.paper.commands; -import com.otfhee.Plugin; -import com.otfhee.handlers.ChatHandler; -import com.otfhee.handlers.ChatType; -import com.otfhee.handlers.MessageType; +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.Plugin; +import com.otfhee.paper.handlers.ChatHandler; +import com.otfhee.paper.handlers.ChatType; import dev.jorel.commandapi.CommandAPI; import dev.jorel.commandapi.CommandAPICommand; import dev.jorel.commandapi.arguments.GreedyStringArgument; @@ -27,8 +27,8 @@ public static void onCommand() { .executesPlayer((sender, args) -> { Player player = (Player) args.get("игрок"); String message = (String) args.get("сообщение"); - reply.put(player, (Player) sender); - ChatHandler.onChat(ChatType.PRIVATE, message, (Player) sender, player); + reply.put(player, sender); + ChatHandler.onChat(ChatType.PRIVATE, message, sender, player); }) .register(); new CommandAPICommand("reply") @@ -37,12 +37,13 @@ public static void onCommand() { .executesPlayer((sender, args) -> { Player receiver = reply.get(sender); String message = (String) args.get("сообщение"); + Messenger messenger = Plugin.getAudienceMessenger(sender); if (receiver == null || !receiver.isOnline()) { - sender.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.ERROR + " Вам некому ответить!")); + messenger.error("Вам некому ответить!"); reply.clear(); } else { - reply.put(receiver, (Player) sender); - ChatHandler.onChat(ChatType.PRIVATE, message, (Player) sender, receiver); + reply.put(receiver, sender); + ChatHandler.onChat(ChatType.PRIVATE, message, sender, receiver); } }) .register(); diff --git a/paper/src/main/java/com/otfhee/paper/commands/RulesCommand.java b/paper/src/main/java/com/otfhee/paper/commands/RulesCommand.java new file mode 100644 index 0000000..7a9fa92 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/RulesCommand.java @@ -0,0 +1,16 @@ +package com.otfhee.paper.commands; + +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.Plugin; +import dev.jorel.commandapi.CommandAPICommand; + +public class RulesCommand { + public static void onCommand() { + new CommandAPICommand("rules") + .executesPlayer((sender, args) -> { + Messenger messenger = Plugin.getAudienceMessenger(sender); + messenger.info("Ссылка на правила сервера тык"); + }) + .register(); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/SiteCommand.java b/paper/src/main/java/com/otfhee/paper/commands/SiteCommand.java new file mode 100644 index 0000000..09943b5 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/SiteCommand.java @@ -0,0 +1,16 @@ +package com.otfhee.paper.commands; + +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.Plugin; +import dev.jorel.commandapi.CommandAPICommand; + +public class SiteCommand { + public static void onCommand() { + new CommandAPICommand("site") + .executesPlayer((sender, args) -> { + Messenger messenger = Plugin.getAudienceMessenger(sender); + messenger.info("Ссылка на сайт сервера тык"); + }) + .register(); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/StaffCommand.java b/paper/src/main/java/com/otfhee/paper/commands/StaffCommand.java new file mode 100644 index 0000000..fe936db --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/StaffCommand.java @@ -0,0 +1,41 @@ +package com.otfhee.paper.commands; + +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.Plugin; +import com.otfhee.paper.database.meta.PlayerPermissions; +import dev.jorel.commandapi.CommandAPICommand; +import dev.jorel.commandapi.arguments.BooleanArgument; +import dev.jorel.commandapi.arguments.OfflinePlayerArgument; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; + +@Deprecated +public class StaffCommand { + public static void onCommand() { + new CommandAPICommand("staff") + .withArguments(new OfflinePlayerArgument("игрок")) + .withArguments(new BooleanArgument("значение")) + .withPermission("otfhee.commands.staff") + .executes((sender, args) -> { + OfflinePlayer player = (OfflinePlayer) args.get("игрок"); + boolean value = (boolean) args.get("значение"); + Messenger messenger = Plugin.getAudienceMessenger(sender); + Plugin plugin = Plugin.getInstance(); + PlayerPermissions permissions = plugin.getPlayerMeta((Player) player).getPlayerPermissions(); + permissions.getPermissions().subscribe(x -> { + if (value) { + if (!x.contains("staff")) { + permissions.addPermission("staff").subscribe(); + messenger.info("Успешное изменение значения!"); + } + } else { + if (x.contains("staff")) { + permissions.deletePermission("staff").subscribe(); + messenger.info("Успешное изменение значения!"); + } + } + }); + }) + .register(); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/TelegramCommand.java b/paper/src/main/java/com/otfhee/paper/commands/TelegramCommand.java new file mode 100644 index 0000000..2b81617 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/TelegramCommand.java @@ -0,0 +1,17 @@ +package com.otfhee.paper.commands; + +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.Plugin; +import dev.jorel.commandapi.CommandAPICommand; + +public class TelegramCommand { + public static void onCommand() { + new CommandAPICommand("telegram") + .withAliases("tg") + .executesPlayer((sender, args) -> { + Messenger messenger = Plugin.getAudienceMessenger(sender); + messenger.info("Ссылка на Telegram канал тык"); + }) + .register(); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/TryCommand.java b/paper/src/main/java/com/otfhee/paper/commands/TryCommand.java new file mode 100644 index 0000000..b24004c --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/TryCommand.java @@ -0,0 +1,27 @@ +package com.otfhee.paper.commands; + +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.Plugin; +import dev.jorel.commandapi.CommandAPICommand; +import dev.jorel.commandapi.arguments.GreedyStringArgument; + +import java.util.Random; + +public class TryCommand { + public static void onCommand() { + new CommandAPICommand("try") + .withArguments(new GreedyStringArgument("действие")) + .executesPlayer((sender, args) -> { + String action = (String) args.get("действие"); + Random random = new Random(); + int choice = random.nextInt(2); + Messenger messenger = Plugin.getAudienceMessenger(sender); + if (choice == 1) { + messenger.info(sender.displayName() + " " + action + ": УСПЕШНО"); + } else { + messenger.info(sender.displayName() + " " + action + ": НЕ УСПЕШНО"); + } + }) + .register(); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/CreatePlayer.java b/paper/src/main/java/com/otfhee/paper/database/CreatePlayer.java new file mode 100644 index 0000000..4fb6965 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/CreatePlayer.java @@ -0,0 +1,4 @@ +package com.otfhee.paper.database; + +public interface CreatePlayer extends DatabaseItem { +} diff --git a/paper/src/main/java/com/otfhee/paper/database/DatabaseItem.java b/paper/src/main/java/com/otfhee/paper/database/DatabaseItem.java new file mode 100644 index 0000000..dea1c81 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/DatabaseItem.java @@ -0,0 +1,7 @@ +package com.otfhee.paper.database; + +import reactor.core.publisher.Mono; + +public interface DatabaseItem { + Mono insertDefault(); +} diff --git a/paper/src/main/java/com/otfhee/paper/database/PlayerFirstJoin.java b/paper/src/main/java/com/otfhee/paper/database/PlayerFirstJoin.java new file mode 100644 index 0000000..6a550f6 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/PlayerFirstJoin.java @@ -0,0 +1,10 @@ +package com.otfhee.paper.database; + +import reactor.core.publisher.Mono; + +import java.util.Date; + +public interface PlayerFirstJoin extends DatabaseItem { + Mono getDate(); + Mono setDate(Date date); +} diff --git a/paper/src/main/java/com/otfhee/paper/database/PlayerLastJoin.java b/paper/src/main/java/com/otfhee/paper/database/PlayerLastJoin.java new file mode 100644 index 0000000..2deec50 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/PlayerLastJoin.java @@ -0,0 +1,10 @@ +package com.otfhee.paper.database; + +import reactor.core.publisher.Mono; + +import java.util.Date; + +public interface PlayerLastJoin extends DatabaseItem { + Mono getDate(); + Mono setDate(Date date); +} diff --git a/paper/src/main/java/com/otfhee/paper/database/PlayerNotFound.java b/paper/src/main/java/com/otfhee/paper/database/PlayerNotFound.java new file mode 100644 index 0000000..a328a00 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/PlayerNotFound.java @@ -0,0 +1,7 @@ +package com.otfhee.paper.database; + +public class PlayerNotFound extends RuntimeException { + public PlayerNotFound(Exception message) { + super("Player not found in database: " + message); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/impl/CreatePlayerImpl.java b/paper/src/main/java/com/otfhee/paper/database/impl/CreatePlayerImpl.java new file mode 100644 index 0000000..4e2aaf4 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/impl/CreatePlayerImpl.java @@ -0,0 +1,49 @@ +package com.otfhee.paper.database.impl; + +import com.mongodb.reactivestreams.client.MongoCollection; +import com.otfhee.paper.database.CreatePlayer; +import org.bson.Document; +import org.bukkit.entity.Player; +import reactor.core.publisher.Mono; + +import java.util.Date; +import java.util.List; + +public class CreatePlayerImpl implements CreatePlayer { + private final String uuid; + private final MongoCollection collection; + + public CreatePlayerImpl(MongoCollection collection, Player player) { + this.uuid = player.getUniqueId().toString(); + this.collection = collection; + } + + @Override + public Mono insertDefault() { + return Mono.defer(() -> { + Document objects = new Document(); + Date date = new Date(); + + objects.append("_id", uuid); + objects.append("first-join", date); + objects.append("last-join", date); + objects.append("settings", new Document("global-mode", false) + .append("display-color", "DEFAULT") + .append("particle", "DEFAULT") + .append("prefix", "DEFAULT") + .append("status", "ONLINE")); + objects.append("meta", new Document("premium-date", null) + .append("permissions", List.of("default")) + .append("packs", List.of("default")) + .append("warns", new Document("days", 0) + .append("first", new Document("days", 0) + .append("reason", null)) + .append("second", new Document("days", 0) + .append("reason", null)) + .append("third", new Document("days", 0) + .append("reason", null)))); + + return Mono.from(collection.insertOne(objects)).then(); + }); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/impl/PlayerFirstJoinImpl.java b/paper/src/main/java/com/otfhee/paper/database/impl/PlayerFirstJoinImpl.java new file mode 100644 index 0000000..7121ec5 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/impl/PlayerFirstJoinImpl.java @@ -0,0 +1,71 @@ +package com.otfhee.paper.database.impl; + +import com.mongodb.client.model.Filters; +import com.mongodb.reactivestreams.client.FindPublisher; +import com.mongodb.reactivestreams.client.MongoCollection; +import com.otfhee.paper.database.PlayerFirstJoin; +import com.otfhee.paper.database.PlayerNotFound; +import org.bson.Document; +import org.bson.conversions.Bson; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import reactor.core.publisher.Mono; + +import java.util.Date; + +public class PlayerFirstJoinImpl implements PlayerFirstJoin { + private final Date date = new Date(); + + private final MongoCollection collection; + private final FindPublisher found; + private final Mono DEFAULT = Mono.just(date); + private final String KEY = "first-join"; + private final String uuid; + + public PlayerFirstJoinImpl(@NotNull MongoCollection collection, @NotNull Player player) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = collection + .find(Filters.eq("_id", uuid)); + } + + @Override + public Mono getDate() { + try { + return Mono.from(found) + .flatMap(x -> Mono.just(x.getDate(KEY))); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + } + + @Override + public Mono setDate(Date date) { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document(KEY, date); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } + + @Override + public Mono insertDefault() { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document(KEY, DEFAULT); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/impl/PlayerLastJoinImpl.java b/paper/src/main/java/com/otfhee/paper/database/impl/PlayerLastJoinImpl.java new file mode 100644 index 0000000..d2f188c --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/impl/PlayerLastJoinImpl.java @@ -0,0 +1,71 @@ +package com.otfhee.paper.database.impl; + +import com.mongodb.client.model.Filters; +import com.mongodb.reactivestreams.client.FindPublisher; +import com.mongodb.reactivestreams.client.MongoCollection; +import com.otfhee.paper.database.PlayerLastJoin; +import com.otfhee.paper.database.PlayerNotFound; +import org.bson.Document; +import org.bson.conversions.Bson; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import reactor.core.publisher.Mono; + +import java.util.Date; + +public class PlayerLastJoinImpl implements PlayerLastJoin { + private final Date date = new Date(); + + private final MongoCollection collection; + private final FindPublisher found; + private final Mono DEFAULT = Mono.just(date); + private final String KEY = "last-join"; + private final String uuid; + + public PlayerLastJoinImpl(@NotNull MongoCollection collection, @NotNull Player player) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = collection + .find(Filters.eq("_id", uuid)); + } + + @Override + public Mono getDate() { + try { + return Mono.from(found) + .flatMap(x -> Mono.just(x.getDate(KEY))); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + } + + @Override + public Mono setDate(Date date) { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document(KEY, date); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } + + @Override + public Mono insertDefault() { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document(KEY, DEFAULT); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/PlayerMeta.java b/paper/src/main/java/com/otfhee/paper/database/meta/PlayerMeta.java new file mode 100644 index 0000000..b44f3ab --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/meta/PlayerMeta.java @@ -0,0 +1,14 @@ +package com.otfhee.paper.database.meta; + +import com.otfhee.paper.database.meta.warns.Days; +import com.otfhee.paper.database.meta.warns.Warn; + +public interface PlayerMeta { + PremiumDate getPremiumDate(); + PlayerPermissions getPlayerPermissions(); + PlayerPacks getPlayerPacks(); + Days getDays(); + Warn getFirstWarn(); + Warn getSecondWarn(); + Warn getThirdWarn(); +} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/PlayerPacks.java b/paper/src/main/java/com/otfhee/paper/database/meta/PlayerPacks.java new file mode 100644 index 0000000..90310b2 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/meta/PlayerPacks.java @@ -0,0 +1,12 @@ +package com.otfhee.paper.database.meta; + +import com.otfhee.paper.database.DatabaseItem; +import reactor.core.publisher.Mono; + +import java.util.List; + +public interface PlayerPacks extends DatabaseItem { + Mono> getPacks(); + Mono addPack(String pack); + Mono deletePack(String pack); +} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/PlayerPermissions.java b/paper/src/main/java/com/otfhee/paper/database/meta/PlayerPermissions.java new file mode 100644 index 0000000..f8b29fe --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/meta/PlayerPermissions.java @@ -0,0 +1,12 @@ +package com.otfhee.paper.database.meta; + +import com.otfhee.paper.database.DatabaseItem; +import reactor.core.publisher.Mono; + +import java.util.List; + +public interface PlayerPermissions extends DatabaseItem { + Mono> getPermissions(); + Mono addPermission(String permission); + Mono deletePermission(String permission); +} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/PremiumDate.java b/paper/src/main/java/com/otfhee/paper/database/meta/PremiumDate.java new file mode 100644 index 0000000..7c460d2 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/meta/PremiumDate.java @@ -0,0 +1,11 @@ +package com.otfhee.paper.database.meta; + +import com.otfhee.paper.database.DatabaseItem; +import reactor.core.publisher.Mono; + +import java.util.Date; + +public interface PremiumDate extends DatabaseItem { + Mono getDate(); + Mono setDate(Date date); +} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/impl/DaysImpl.java b/paper/src/main/java/com/otfhee/paper/database/meta/impl/DaysImpl.java new file mode 100644 index 0000000..7b6e82c --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/meta/impl/DaysImpl.java @@ -0,0 +1,71 @@ +package com.otfhee.paper.database.meta.impl; + +import com.mongodb.client.model.Filters; +import com.mongodb.reactivestreams.client.FindPublisher; +import com.mongodb.reactivestreams.client.MongoCollection; +import com.otfhee.paper.database.PlayerNotFound; +import com.otfhee.paper.database.meta.warns.Days; +import org.bson.Document; +import org.bson.conversions.Bson; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import reactor.core.publisher.Mono; + +public class DaysImpl implements Days { + private final MongoCollection collection; + private final FindPublisher found; + private final Mono DEFAULT = Mono.just(0); + private final String KEY = "days"; + private final String uuid; + + public DaysImpl(@NotNull MongoCollection collection, @NotNull Player player) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = collection + .find(Filters.eq("_id", uuid)); + } + + @Override + public Mono getDays() { + try { + return Mono.from(found) + .flatMap(x -> { + Document meta = (Document) x.get("meta"); + Document warns = (Document) meta.get("warns"); + return Mono.just(warns.getInteger(KEY)); + }); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + } + + @Override + public Mono setDays(int days) { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("meta.warns." + KEY, days); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } + + @Override + public Mono insertDefault() { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("meta.warns." + KEY, DEFAULT); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/impl/FirstWarn.java b/paper/src/main/java/com/otfhee/paper/database/meta/impl/FirstWarn.java new file mode 100644 index 0000000..879490d --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/meta/impl/FirstWarn.java @@ -0,0 +1,101 @@ +package com.otfhee.paper.database.meta.impl; + +import com.mongodb.client.model.Filters; +import com.mongodb.reactivestreams.client.FindPublisher; +import com.mongodb.reactivestreams.client.MongoCollection; +import com.otfhee.paper.database.PlayerNotFound; +import com.otfhee.paper.database.meta.warns.Warn; +import org.bson.Document; +import org.bson.conversions.Bson; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import reactor.core.publisher.Mono; + +public class FirstWarn implements Warn { + private final MongoCollection collection; + private final FindPublisher found; + private final String uuid; + + public FirstWarn(@NotNull MongoCollection collection, @NotNull Player player) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = collection + .find(Filters.eq("_id", uuid)); + } + + @Override + public Mono getReason() { + try { + return Mono.from(found) + .flatMap(x -> { + Document meta = (Document) x.get("meta"); + Document warns = (Document) meta.get("warns"); + Document first = (Document) warns.get("first"); + return Mono.just(first.getString("reason")); + }); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + } + + @Override + public Mono setReason(String reason) { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("meta.warns.first.reason", reason); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } + + @Override + public Mono getDays() { + try { + return Mono.from(found) + .flatMap(x -> { + Document meta = (Document) x.get("meta"); + Document warns = (Document) meta.get("warns"); + Document first = (Document) warns.get("first"); + return Mono.just(first.getInteger("days")); + }); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + } + + @Override + public Mono setDays(int days) { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("meta.warns.first.days", days); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } + + @Override + public Mono insertDefault() { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("meta.warns.first.days", 0) + .append("meta.warns.first.reason", ""); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerMetaImpl.java b/paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerMetaImpl.java new file mode 100644 index 0000000..7bcd18a --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerMetaImpl.java @@ -0,0 +1,67 @@ +package com.otfhee.paper.database.meta.impl; + +import com.mongodb.reactivestreams.client.MongoCollection; +import com.otfhee.paper.database.meta.PlayerMeta; +import com.otfhee.paper.database.meta.PlayerPacks; +import com.otfhee.paper.database.meta.PlayerPermissions; +import com.otfhee.paper.database.meta.PremiumDate; +import com.otfhee.paper.database.meta.warns.Days; +import com.otfhee.paper.database.meta.warns.Warn; +import org.bson.Document; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +public class PlayerMetaImpl implements PlayerMeta { + private final PremiumDate premiumDate; + private final PlayerPermissions playerPermissions; + private final PlayerPacks playerPacks; + private final Days days; + private final Warn firstWarn; + private final Warn secondWarn; + private final Warn thirdWarn; + + public PlayerMetaImpl(@NotNull MongoCollection collection, @NotNull Player player) { + this.premiumDate = new PremiumDateImpl(collection, player); + this.playerPermissions = new PlayerPermissionsImpl(collection, player); + this.playerPacks = new PlayerPacksImpl(collection, player); + this.days = new DaysImpl(collection, player); + this.firstWarn = new FirstWarn(collection, player); + this.secondWarn = new SecondWarn(collection, player); + this.thirdWarn = new ThirdWarn(collection, player); + } + + @Override + public PremiumDate getPremiumDate() { + return premiumDate; + } + + @Override + public PlayerPermissions getPlayerPermissions() { + return playerPermissions; + } + + @Override + public PlayerPacks getPlayerPacks() { + return playerPacks; + } + + @Override + public Days getDays() { + return days; + } + + @Override + public Warn getFirstWarn() { + return firstWarn; + } + + @Override + public Warn getSecondWarn() { + return secondWarn; + } + + @Override + public Warn getThirdWarn() { + return thirdWarn; + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerPacksImpl.java b/paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerPacksImpl.java new file mode 100644 index 0000000..09ab487 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerPacksImpl.java @@ -0,0 +1,97 @@ +package com.otfhee.paper.database.meta.impl; + +import com.mongodb.client.model.Filters; +import com.mongodb.reactivestreams.client.FindPublisher; +import com.mongodb.reactivestreams.client.MongoCollection; +import com.otfhee.paper.database.PlayerNotFound; +import com.otfhee.paper.database.meta.PlayerPacks; +import org.bson.Document; +import org.bson.conversions.Bson; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import reactor.core.publisher.Mono; + +import java.util.List; + +public class PlayerPacksImpl implements PlayerPacks { + private final MongoCollection collection; + private final FindPublisher found; + private final Mono> DEFAULT = Mono.just(List.of("default")); + private final String KEY = "packs"; + private final String uuid; + + public PlayerPacksImpl(@NotNull MongoCollection collection, @NotNull Player player) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = collection + .find(Filters.eq("_id", uuid)); + } + + @Override + public Mono> getPacks() { + try { + return Mono.from(found) + .flatMap(x -> { + Document meta = (Document) x.get("meta"); + return Mono.just(meta.getList(KEY, String.class)); + }); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + } + + @Override + public Mono addPack(String pack) { + return Mono.defer(() -> { + try { + return getPacks() + .flatMap(packs -> { + packs.add(pack); + + Bson updatedValue = new Document("meta." + KEY, packs); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + }); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } + + @Override + public Mono deletePack(String pack) { + return Mono.defer(() -> { + try { + return getPacks() + .flatMap(packs -> { + packs.remove(pack); + + Bson updatedValue = new Document("meta." + KEY, packs); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + }); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } + + @Override + public Mono insertDefault() { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("meta." + KEY, DEFAULT); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerPermissionsImpl.java b/paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerPermissionsImpl.java new file mode 100644 index 0000000..e9457a1 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerPermissionsImpl.java @@ -0,0 +1,97 @@ +package com.otfhee.paper.database.meta.impl; + +import com.mongodb.client.model.Filters; +import com.mongodb.reactivestreams.client.FindPublisher; +import com.mongodb.reactivestreams.client.MongoCollection; +import com.otfhee.paper.database.PlayerNotFound; +import com.otfhee.paper.database.meta.PlayerPermissions; +import org.bson.Document; +import org.bson.conversions.Bson; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import reactor.core.publisher.Mono; + +import java.util.List; + +public class PlayerPermissionsImpl implements PlayerPermissions { + private final MongoCollection collection; + private final FindPublisher found; + private final Mono> DEFAULT = Mono.just(List.of("default")); + private final String KEY = "permissions"; + private final String uuid; + + public PlayerPermissionsImpl(@NotNull MongoCollection collection, @NotNull Player player) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = collection + .find(Filters.eq("_id", uuid)); + } + + @Override + public Mono> getPermissions() { + try { + return Mono.from(found) + .flatMap(x -> { + Document meta = (Document) x.get("meta"); + return Mono.just(meta.getList(KEY, String.class)); + }); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + } + + @Override + public Mono addPermission(String permission) { + return Mono.defer(() -> { + try { + return getPermissions() + .flatMap(permissions -> { + permissions.add(permission); + + Bson updatedValue = new Document("meta." + KEY, permissions); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + }); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } + + @Override + public Mono deletePermission(String permission) { + return Mono.defer(() -> { + try { + return getPermissions() + .flatMap(permissions -> { + permissions.remove(permission); + + Bson updatedValue = new Document("meta." + KEY, permissions); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + }); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } + + @Override + public Mono insertDefault() { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("meta." + KEY, DEFAULT); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/impl/PremiumDateImpl.java b/paper/src/main/java/com/otfhee/paper/database/meta/impl/PremiumDateImpl.java new file mode 100644 index 0000000..9459c85 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/meta/impl/PremiumDateImpl.java @@ -0,0 +1,71 @@ +package com.otfhee.paper.database.meta.impl; + +import com.mongodb.client.model.Filters; +import com.mongodb.reactivestreams.client.FindPublisher; +import com.mongodb.reactivestreams.client.MongoCollection; +import com.otfhee.paper.database.PlayerNotFound; +import com.otfhee.paper.database.meta.PremiumDate; +import org.bson.Document; +import org.bson.conversions.Bson; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import reactor.core.publisher.Mono; + +import java.util.Date; + +public class PremiumDateImpl implements PremiumDate { + private final MongoCollection collection; + private final FindPublisher found; + private final String KEY = "premium-date"; + private final String uuid; + + public PremiumDateImpl(@NotNull MongoCollection collection, @NotNull Player player) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = collection + .find(Filters.eq("_id", uuid)); + } + + @Override + public Mono getDate() { + try { + return Mono.from(found) + .flatMap(x -> { + Document settings = (Document) x.get("meta"); + return Mono.just(settings.getDate(KEY)); + }); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + } + + @Override + public Mono setDate(Date date) { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("meta." + KEY, date); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } + + @Override + public Mono insertDefault() { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("meta." + KEY, null); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/impl/SecondWarn.java b/paper/src/main/java/com/otfhee/paper/database/meta/impl/SecondWarn.java new file mode 100644 index 0000000..21295ff --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/meta/impl/SecondWarn.java @@ -0,0 +1,101 @@ +package com.otfhee.paper.database.meta.impl; + +import com.mongodb.client.model.Filters; +import com.mongodb.reactivestreams.client.FindPublisher; +import com.mongodb.reactivestreams.client.MongoCollection; +import com.otfhee.paper.database.PlayerNotFound; +import com.otfhee.paper.database.meta.warns.Warn; +import org.bson.Document; +import org.bson.conversions.Bson; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import reactor.core.publisher.Mono; + +public class SecondWarn implements Warn { + private final MongoCollection collection; + private final FindPublisher found; + private final String uuid; + + public SecondWarn(@NotNull MongoCollection collection, @NotNull Player player) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = collection + .find(Filters.eq("_id", uuid)); + } + + @Override + public Mono getReason() { + try { + return Mono.from(found) + .flatMap(x -> { + Document meta = (Document) x.get("meta"); + Document warns = (Document) meta.get("warns"); + Document second = (Document) warns.get("second"); + return Mono.just(second.getString("reason")); + }); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + } + + @Override + public Mono setReason(String reason) { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("meta.warns.second.reason", reason); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } + + @Override + public Mono getDays() { + try { + return Mono.from(found) + .flatMap(x -> { + Document meta = (Document) x.get("meta"); + Document warns = (Document) meta.get("warns"); + Document second = (Document) warns.get("second"); + return Mono.just(second.getInteger("days")); + }); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + } + + @Override + public Mono setDays(int days) { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("meta.warns.second.days", days); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } + + @Override + public Mono insertDefault() { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("meta.warns.second.days", 0) + .append("meta.warns.second.reason", ""); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/impl/ThirdWarn.java b/paper/src/main/java/com/otfhee/paper/database/meta/impl/ThirdWarn.java new file mode 100644 index 0000000..348743b --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/meta/impl/ThirdWarn.java @@ -0,0 +1,101 @@ +package com.otfhee.paper.database.meta.impl; + +import com.mongodb.client.model.Filters; +import com.mongodb.reactivestreams.client.FindPublisher; +import com.mongodb.reactivestreams.client.MongoCollection; +import com.otfhee.paper.database.PlayerNotFound; +import com.otfhee.paper.database.meta.warns.Warn; +import org.bson.Document; +import org.bson.conversions.Bson; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import reactor.core.publisher.Mono; + +public class ThirdWarn implements Warn { + private final MongoCollection collection; + private final FindPublisher found; + private final String uuid; + + public ThirdWarn(@NotNull MongoCollection collection, @NotNull Player player) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = collection + .find(Filters.eq("_id", uuid)); + } + + @Override + public Mono getReason() { + try { + return Mono.from(found) + .flatMap(x -> { + Document meta = (Document) x.get("meta"); + Document warns = (Document) meta.get("warns"); + Document third = (Document) warns.get("third"); + return Mono.just(third.getString("reason")); + }); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + } + + @Override + public Mono setReason(String reason) { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("meta.warns.third.reason", reason); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } + + @Override + public Mono getDays() { + try { + return Mono.from(found) + .flatMap(x -> { + Document meta = (Document) x.get("meta"); + Document warns = (Document) meta.get("warns"); + Document third = (Document) warns.get("third"); + return Mono.just(third.getInteger("days")); + }); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + } + + @Override + public Mono setDays(int days) { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("meta.warns.third.days", days); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } + + @Override + public Mono insertDefault() { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("meta.warns.third.days", 0) + .append("meta.warns.third.reason", ""); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/warns/Days.java b/paper/src/main/java/com/otfhee/paper/database/meta/warns/Days.java new file mode 100644 index 0000000..80b66df --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/meta/warns/Days.java @@ -0,0 +1,9 @@ +package com.otfhee.paper.database.meta.warns; + +import com.otfhee.paper.database.DatabaseItem; +import reactor.core.publisher.Mono; + +public interface Days extends DatabaseItem { + Mono getDays(); + Mono setDays(int days); +} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/warns/Warn.java b/paper/src/main/java/com/otfhee/paper/database/meta/warns/Warn.java new file mode 100644 index 0000000..419515e --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/meta/warns/Warn.java @@ -0,0 +1,9 @@ +package com.otfhee.paper.database.meta.warns; + +import com.otfhee.paper.database.DatabaseItem; +import reactor.core.publisher.Mono; + +public interface Warn extends DatabaseItem, Days { + Mono getReason(); + Mono setReason(String reason); +} diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/DisplayColor.java b/paper/src/main/java/com/otfhee/paper/database/settings/DisplayColor.java new file mode 100644 index 0000000..bd8e2b4 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/settings/DisplayColor.java @@ -0,0 +1,11 @@ +package com.otfhee.paper.database.settings; + +import com.otfhee.paper.database.DatabaseItem; +import reactor.core.publisher.Mono; + +public interface DisplayColor extends DatabaseItem { + default Mono getColor() { + return Mono.just(""); + }; + Mono setColor(String color); +} diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/GlobalMode.java b/paper/src/main/java/com/otfhee/paper/database/settings/GlobalMode.java new file mode 100644 index 0000000..eb33d5a --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/settings/GlobalMode.java @@ -0,0 +1,11 @@ +package com.otfhee.paper.database.settings; + +import com.otfhee.paper.database.DatabaseItem; +import reactor.core.publisher.Mono; + +public interface GlobalMode extends DatabaseItem { + default Mono getGlobalMode() { + return Mono.just(false); + }; + Mono setGlobalMode(boolean value); +} diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/PlayerParticle.java b/paper/src/main/java/com/otfhee/paper/database/settings/PlayerParticle.java new file mode 100644 index 0000000..1874f3e --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/settings/PlayerParticle.java @@ -0,0 +1,11 @@ +package com.otfhee.paper.database.settings; + +import com.otfhee.paper.database.DatabaseItem; +import reactor.core.publisher.Mono; + +public interface PlayerParticle extends DatabaseItem { + default Mono getParticle() { + return Mono.just("DEFAULT"); + }; + Mono setParticle(String particle); +} diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/PlayerPrefix.java b/paper/src/main/java/com/otfhee/paper/database/settings/PlayerPrefix.java new file mode 100644 index 0000000..8c49355 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/settings/PlayerPrefix.java @@ -0,0 +1,11 @@ +package com.otfhee.paper.database.settings; + +import com.otfhee.paper.database.DatabaseItem; +import reactor.core.publisher.Mono; + +public interface PlayerPrefix extends DatabaseItem { + default Mono getPrefix() { + return Mono.just("DEFAULT"); + }; + Mono setPrefix(String prefix); +} diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/PlayerSettings.java b/paper/src/main/java/com/otfhee/paper/database/settings/PlayerSettings.java new file mode 100644 index 0000000..2839130 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/settings/PlayerSettings.java @@ -0,0 +1,9 @@ +package com.otfhee.paper.database.settings; + +public interface PlayerSettings { + GlobalMode getGlobalMode(); + DisplayColor getDisplayColor(); + PlayerParticle getPlayerParticle(); + PlayerPrefix getPlayerPrefix(); + PlayerStatus getPlayerStatus(); +} diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/PlayerStatus.java b/paper/src/main/java/com/otfhee/paper/database/settings/PlayerStatus.java new file mode 100644 index 0000000..9be3ad9 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/settings/PlayerStatus.java @@ -0,0 +1,11 @@ +package com.otfhee.paper.database.settings; + +import com.otfhee.paper.database.DatabaseItem; +import reactor.core.publisher.Mono; + +public interface PlayerStatus extends DatabaseItem { + default Mono getStatus() { + return Mono.just("ONLINE"); + }; + Mono setStatus(String status); +} diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/impl/DisplayColorImpl.java b/paper/src/main/java/com/otfhee/paper/database/settings/impl/DisplayColorImpl.java new file mode 100644 index 0000000..aa3b96c --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/settings/impl/DisplayColorImpl.java @@ -0,0 +1,70 @@ +package com.otfhee.paper.database.settings.impl; + +import com.mongodb.client.model.Filters; +import com.mongodb.reactivestreams.client.FindPublisher; +import com.mongodb.reactivestreams.client.MongoCollection; +import com.otfhee.paper.database.PlayerNotFound; +import com.otfhee.paper.database.settings.DisplayColor; +import org.bson.Document; +import org.bson.conversions.Bson; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import reactor.core.publisher.Mono; + +public class DisplayColorImpl implements DisplayColor { + private final MongoCollection collection; + private final FindPublisher found; + private final Mono DEFAULT = Mono.just(""); + private final String KEY = "display-color"; + private final String uuid; + + public DisplayColorImpl(@NotNull MongoCollection collection, @NotNull Player player) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = collection + .find(Filters.eq("_id", uuid)); + } + + @Override + public Mono getColor() { + try { + return Mono.from(found) + .flatMap(x -> { + Document settings = (Document) x.get("settings"); + return Mono.just(settings.getString(KEY)); + }); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + } + + @Override + public Mono setColor(String color) { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("settings." + KEY, color); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } + + @Override + public Mono insertDefault() { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("settings." + KEY, DEFAULT); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/impl/GlobalModeImpl.java b/paper/src/main/java/com/otfhee/paper/database/settings/impl/GlobalModeImpl.java new file mode 100644 index 0000000..978c52a --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/settings/impl/GlobalModeImpl.java @@ -0,0 +1,72 @@ +package com.otfhee.paper.database.settings.impl; + +import com.mongodb.client.model.Filters; +import com.mongodb.reactivestreams.client.FindPublisher; +import com.mongodb.reactivestreams.client.MongoCollection; +import com.otfhee.paper.database.PlayerNotFound; +import com.otfhee.paper.database.settings.GlobalMode; +import org.bson.Document; +import org.bson.conversions.Bson; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import reactor.core.publisher.Mono; + +public class GlobalModeImpl implements GlobalMode { + private final MongoCollection collection; + private final FindPublisher found; + private final Mono DEFAULT = Mono.just(false); + private final String KEY = "global-mode"; + private final String uuid; + + public GlobalModeImpl(MongoCollection collection, @NotNull Player player) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = collection + .find(Filters.eq("_id", uuid)); + } + + @Override + public Mono getGlobalMode() { + return Mono.from(found) + .flatMap(x -> { + try { + Document settings = (Document) x.get("settings"); + return Mono.just(settings.getBoolean(KEY)); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } + + @Override + public Mono setGlobalMode(boolean value) { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("settings." + KEY, value); + Bson updateOperation = new Document("$set", updatedValue); + + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } + + @Override + public Mono insertDefault() { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("settings." + KEY, DEFAULT); + Bson updateOperation = new Document("$set", updatedValue); + + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerParticleImpl.java b/paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerParticleImpl.java new file mode 100644 index 0000000..e9d4590 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerParticleImpl.java @@ -0,0 +1,70 @@ +package com.otfhee.paper.database.settings.impl; + +import com.mongodb.client.model.Filters; +import com.mongodb.reactivestreams.client.FindPublisher; +import com.mongodb.reactivestreams.client.MongoCollection; +import com.otfhee.paper.database.PlayerNotFound; +import com.otfhee.paper.database.settings.PlayerParticle; +import org.bson.Document; +import org.bson.conversions.Bson; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import reactor.core.publisher.Mono; + +public class PlayerParticleImpl implements PlayerParticle { + private final MongoCollection collection; + private final FindPublisher found; + private final Mono DEFAULT = Mono.just("DEFAULT"); + private final String KEY = "particle"; + private final String uuid; + + public PlayerParticleImpl(@NotNull MongoCollection collection, @NotNull Player player) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = collection + .find(Filters.eq("_id", uuid)); + } + + @Override + public Mono getParticle() { + try { + return Mono.from(found) + .flatMap(x -> { + Document settings = (Document) x.get("settings"); + return Mono.just(settings.getString(KEY)); + }); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + } + + @Override + public Mono setParticle(String particle) { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("settings." + KEY, particle); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } + + @Override + public Mono insertDefault() { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("settings." + KEY, DEFAULT); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerPrefixImpl.java b/paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerPrefixImpl.java new file mode 100644 index 0000000..f8e04a6 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerPrefixImpl.java @@ -0,0 +1,69 @@ +package com.otfhee.paper.database.settings.impl; + +import com.mongodb.client.model.Filters; +import com.mongodb.reactivestreams.client.FindPublisher; +import com.mongodb.reactivestreams.client.MongoCollection; +import com.otfhee.paper.database.PlayerNotFound; +import com.otfhee.paper.database.settings.PlayerPrefix; +import org.bson.Document; +import org.bson.conversions.Bson; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import reactor.core.publisher.Mono; + +public class PlayerPrefixImpl implements PlayerPrefix { + private final MongoCollection collection; + private final FindPublisher found; + private final Mono DEFAULT = Mono.just("DEFAULT"); + private final String KEY = "prefix"; + private final String uuid; + + public PlayerPrefixImpl(@NotNull MongoCollection collection, @NotNull Player player) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = collection + .find(Filters.eq("_id", uuid)); + } + + @Override + public Mono getPrefix() { + try { + return Mono.from(found) + .flatMap(x -> { + Document settings = (Document) x.get("settings"); + return Mono.just(settings.getString(KEY)); + }); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + } + + @Override + public Mono setPrefix(String prefix) { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("settings." + KEY, prefix); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } + + @Override + public Mono insertDefault() { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("settings." + KEY, DEFAULT); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerSettingsImpl.java b/paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerSettingsImpl.java new file mode 100644 index 0000000..9cd3792 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerSettingsImpl.java @@ -0,0 +1,48 @@ +package com.otfhee.paper.database.settings.impl; + +import com.mongodb.reactivestreams.client.MongoCollection; +import com.otfhee.paper.database.settings.*; +import org.bson.Document; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +public class PlayerSettingsImpl implements PlayerSettings{ + private final DisplayColor displayColor; + private final GlobalMode globalMode; + private final PlayerParticle playerParticle; + private final PlayerPrefix playerPrefix; + private final PlayerStatus playerStatus; + + public PlayerSettingsImpl(@NotNull MongoCollection collection, @NotNull Player player) { + this.displayColor = new DisplayColorImpl(collection, player); + this.globalMode = new GlobalModeImpl(collection, player); + this.playerParticle = new PlayerParticleImpl(collection, player); + this.playerPrefix = new PlayerPrefixImpl(collection, player); + this.playerStatus = new PlayerStatusImpl(collection, player); + } + + @Override + public GlobalMode getGlobalMode() { + return globalMode; + } + + @Override + public DisplayColor getDisplayColor() { + return displayColor; + } + + @Override + public PlayerParticle getPlayerParticle() { + return playerParticle; + } + + @Override + public PlayerPrefix getPlayerPrefix() { + return playerPrefix; + } + + @Override + public PlayerStatus getPlayerStatus() { + return playerStatus; + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerStatusImpl.java b/paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerStatusImpl.java new file mode 100644 index 0000000..7981ea6 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerStatusImpl.java @@ -0,0 +1,69 @@ +package com.otfhee.paper.database.settings.impl; + +import com.mongodb.client.model.Filters; +import com.mongodb.reactivestreams.client.FindPublisher; +import com.mongodb.reactivestreams.client.MongoCollection; +import com.otfhee.paper.database.PlayerNotFound; +import com.otfhee.paper.database.settings.PlayerStatus; +import org.bson.Document; +import org.bson.conversions.Bson; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import reactor.core.publisher.Mono; + +public class PlayerStatusImpl implements PlayerStatus { + private final MongoCollection collection; + private final FindPublisher found; + private final Mono DEFAULT = Mono.just("ONLINE"); + private final String KEY = "status"; + private final String uuid; + + public PlayerStatusImpl(@NotNull MongoCollection collection, @NotNull Player player) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = collection + .find(Filters.eq("_id", uuid)); + } + + @Override + public Mono getStatus() { + try { + return Mono.from(found) + .flatMap(x -> { + Document settings = (Document) x.get("settings"); + return Mono.just(settings.getString(KEY)); + }); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + } + + @Override + public Mono setStatus(String status) { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("settings." + KEY, status); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } + + @Override + public Mono insertDefault() { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("settings." + KEY, DEFAULT); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne((Bson) found, updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new PlayerNotFound(e)); + } + }); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/handlers/ChatHandler.java b/paper/src/main/java/com/otfhee/paper/handlers/ChatHandler.java new file mode 100644 index 0000000..a5eb2ea --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/handlers/ChatHandler.java @@ -0,0 +1,145 @@ +package com.otfhee.paper.handlers; + +import com.otfhee.paper.Plugin; +import com.otfhee.paper.database.meta.PremiumDate; +import com.otfhee.paper.database.settings.GlobalMode; +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.minimessage.tag.Tag; +import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; +import net.kyori.adventure.text.minimessage.tag.standard.StandardTags; +import org.bukkit.entity.Player; + +import java.text.DecimalFormat; +import java.util.Date; + +public class ChatHandler { + private static final DecimalFormat df = new DecimalFormat("#.#"); + public static void onChat(ChatType type, final String message, Player player, Audience audience) { + Plugin plugin = Plugin.getInstance(); + PremiumDate date = plugin.getPlayerMeta(player).getPremiumDate(); + Date now = new Date(); + GlobalMode globalMode = plugin.getPlayerSettings(player).getGlobalMode(); + + Component coordination = Component.text(Double.parseDouble(df.format(player.getX())) + + " " + Double.parseDouble(df.format(player.getY())) + " " + Double.parseDouble(df.format(player.getZ()))); + TagResolver coordinationTag = TagResolver.resolver("coordination", Tag.inserting(coordination)); + TagResolver coordinationsTag = TagResolver.resolver("coordinations", Tag.inserting(coordination)); + TagResolver coordsTag = TagResolver.resolver("coords", Tag.inserting(coordination)); + TagResolver coordTag = TagResolver.resolver("coord", Tag.inserting(coordination)); + TagResolver cordTag = TagResolver.resolver("cord", Tag.inserting(coordination)); + TagResolver cordsTag = TagResolver.resolver("cords", Tag.inserting(coordination)); + MiniMessage miniMessage = MiniMessage.builder() + .tags( + TagResolver.builder() + .resolver(coordinationTag) + .resolver(coordinationsTag) + .resolver(coordsTag) + .resolver(coordTag) + .resolver(cordTag) + .resolver(cordsTag) + .build()) + .build(); + MiniMessage premiumMiniMessage = MiniMessage.builder() + .tags( + TagResolver.builder() + .resolver(StandardTags.clickEvent()) + .resolver(StandardTags.hoverEvent()) + .resolver(StandardTags.reset()) + .resolver(StandardTags.rainbow()) + .resolver(StandardTags.gradient()) + .resolver(StandardTags.decorations()) + .resolver(StandardTags.color()) + .resolver(coordinationTag) + .resolver(coordinationsTag) + .resolver(coordsTag) + .resolver(coordTag) + .resolver(cordTag) + .resolver(cordsTag) + .build()) + .build(); + if (ChatType.GLOBAL.equals(type)) { + globalMode.getGlobalMode().subscribe(mode -> { + String msg = message; + if (msg.startsWith(" ")) { + msg = message.substring(1); + } + if (!mode) { + msg = message.substring(1); + } + if (mode && message.startsWith("!")) { + msg = message.substring(1); + } + if (mode) { + audience.sendMessage(Component.text() + .append(Plugin.getMiniMessage().deserialize("[G] ")) + .append(player.displayName()) + .append(Component.text(": ")) + .append(premiumMiniMessage.deserialize(msg)) + .build()); + } else { + audience.sendMessage(Component.text() + .append(Plugin.getMiniMessage().deserialize("[G] ")) + .append(player.displayName()) + .append(Component.text(": ")) + .append(miniMessage.deserialize(msg)) + .build()); + } + }); + } + if (ChatType.LOCAL.equals(type)) { + date.getDate().subscribe(value -> { + if (now.before(value)) { + audience.sendMessage(Component.text() + .append(player.displayName()) + .append(Component.text(": ")) + .append(premiumMiniMessage.deserialize(message)) + .build()); + } else { + audience.sendMessage(Component.text() + .append(player.displayName()) + .append(Component.text(": ")) + .append(miniMessage.deserialize(message)) + .build()); + } + }); + } + if (ChatType.PRIVATE.equals(type)) { + Player p = (Player) audience; + date.getDate().subscribe(value -> { + if (now.before(value)) { + player.sendMessage(Component.text() + .append(Plugin.getMiniMessage().deserialize("✉ [")) + .append(p.displayName()) + .append(Plugin.getMiniMessage().deserialize("")) + .append(Plugin.getMiniMessage().deserialize(" Вы]")) + .append(premiumMiniMessage.deserialize(" " + message)) + .build()); + audience.sendMessage(Component.text() + .append(Plugin.getMiniMessage().deserialize("✉ [")) + .append(player.displayName()) + .append(Plugin.getMiniMessage().deserialize("")) + .append(Plugin.getMiniMessage().deserialize(" Вы]")) + .append(premiumMiniMessage.deserialize(" " + message)) + .build()); + } else { + player.sendMessage(Component.text() + .append(Plugin.getMiniMessage().deserialize("✉ [")) + .append(p.displayName()) + .append(Plugin.getMiniMessage().deserialize("")) + .append(Plugin.getMiniMessage().deserialize(" Вы]")) + .append(miniMessage.deserialize(" " + message)) + .build()); + audience.sendMessage(Component.text() + .append(Plugin.getMiniMessage().deserialize("✉ [")) + .append(player.displayName()) + .append(Plugin.getMiniMessage().deserialize("")) + .append(Plugin.getMiniMessage().deserialize(" Вы]")) + .append(miniMessage.deserialize(" " + message)) + .build()); + } + }); + } + } +} diff --git a/paper/src/main/java/com/otfhee/handlers/ChatType.java b/paper/src/main/java/com/otfhee/paper/handlers/ChatType.java similarity index 63% rename from paper/src/main/java/com/otfhee/handlers/ChatType.java rename to paper/src/main/java/com/otfhee/paper/handlers/ChatType.java index 262d515..85a5f25 100644 --- a/paper/src/main/java/com/otfhee/handlers/ChatType.java +++ b/paper/src/main/java/com/otfhee/paper/handlers/ChatType.java @@ -1,4 +1,4 @@ -package com.otfhee.handlers; +package com.otfhee.paper.handlers; public enum ChatType { GLOBAL, diff --git a/paper/src/main/java/com/otfhee/handlers/ColorHandler.java b/paper/src/main/java/com/otfhee/paper/handlers/ColorHandler.java similarity index 93% rename from paper/src/main/java/com/otfhee/handlers/ColorHandler.java rename to paper/src/main/java/com/otfhee/paper/handlers/ColorHandler.java index f010b3e..f812613 100644 --- a/paper/src/main/java/com/otfhee/handlers/ColorHandler.java +++ b/paper/src/main/java/com/otfhee/paper/handlers/ColorHandler.java @@ -1,7 +1,8 @@ -package com.otfhee.handlers; +package com.otfhee.paper.handlers; import java.util.List; +@Deprecated public class ColorHandler { public static String colorAdventureBuilder(ColorType type) { List color = List.of(ColorType.values()); diff --git a/paper/src/main/java/com/otfhee/handlers/ColorType.java b/paper/src/main/java/com/otfhee/paper/handlers/ColorType.java similarity index 94% rename from paper/src/main/java/com/otfhee/handlers/ColorType.java rename to paper/src/main/java/com/otfhee/paper/handlers/ColorType.java index 3390ac6..88b34f6 100644 --- a/paper/src/main/java/com/otfhee/handlers/ColorType.java +++ b/paper/src/main/java/com/otfhee/paper/handlers/ColorType.java @@ -1,4 +1,4 @@ -package com.otfhee.handlers; +package com.otfhee.paper.handlers; public enum ColorType { DARK_RED("dark_red"), diff --git a/paper/src/main/java/com/otfhee/paper/handlers/ParticleHandler.java b/paper/src/main/java/com/otfhee/paper/handlers/ParticleHandler.java new file mode 100644 index 0000000..920040c --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/handlers/ParticleHandler.java @@ -0,0 +1,10 @@ +package com.otfhee.paper.handlers; + +import org.bukkit.entity.Player; + +@Deprecated +public class ParticleHandler { + public static void onHandler(Player player) { + // Deprecated + } +} diff --git a/paper/src/main/java/com/otfhee/handlers/ParticleType.java b/paper/src/main/java/com/otfhee/paper/handlers/ParticleType.java similarity index 70% rename from paper/src/main/java/com/otfhee/handlers/ParticleType.java rename to paper/src/main/java/com/otfhee/paper/handlers/ParticleType.java index 17a350c..b3355cc 100644 --- a/paper/src/main/java/com/otfhee/handlers/ParticleType.java +++ b/paper/src/main/java/com/otfhee/paper/handlers/ParticleType.java @@ -1,4 +1,4 @@ -package com.otfhee.handlers; +package com.otfhee.paper.handlers; public enum ParticleType { NOTE, diff --git a/paper/src/main/java/com/otfhee/handlers/PrefixType.java b/paper/src/main/java/com/otfhee/paper/handlers/PrefixType.java similarity index 94% rename from paper/src/main/java/com/otfhee/handlers/PrefixType.java rename to paper/src/main/java/com/otfhee/paper/handlers/PrefixType.java index 745480d..68869a0 100644 --- a/paper/src/main/java/com/otfhee/handlers/PrefixType.java +++ b/paper/src/main/java/com/otfhee/paper/handlers/PrefixType.java @@ -1,4 +1,4 @@ -package com.otfhee.handlers; +package com.otfhee.paper.handlers; public enum PrefixType { HEART_EXCLAMATION(""), diff --git a/paper/src/main/java/com/otfhee/handlers/PremiumHandler.java b/paper/src/main/java/com/otfhee/paper/handlers/PremiumHandler.java similarity index 89% rename from paper/src/main/java/com/otfhee/handlers/PremiumHandler.java rename to paper/src/main/java/com/otfhee/paper/handlers/PremiumHandler.java index c98f92e..2fb69ec 100644 --- a/paper/src/main/java/com/otfhee/handlers/PremiumHandler.java +++ b/paper/src/main/java/com/otfhee/paper/handlers/PremiumHandler.java @@ -1,4 +1,4 @@ -package com.otfhee.handlers; +package com.otfhee.paper.handlers; public class PremiumHandler { public static String onHandler() { diff --git a/paper/src/main/java/com/otfhee/handlers/RateType.java b/paper/src/main/java/com/otfhee/paper/handlers/RateType.java similarity index 86% rename from paper/src/main/java/com/otfhee/handlers/RateType.java rename to paper/src/main/java/com/otfhee/paper/handlers/RateType.java index 8ae8e2b..93d1efa 100644 --- a/paper/src/main/java/com/otfhee/handlers/RateType.java +++ b/paper/src/main/java/com/otfhee/paper/handlers/RateType.java @@ -1,4 +1,4 @@ -package com.otfhee.handlers; +package com.otfhee.paper.handlers; public enum RateType { MONTHLY(1), diff --git a/paper/src/main/java/com/otfhee/listeners/AntiGreefingListener.java b/paper/src/main/java/com/otfhee/paper/listeners/AntiGreefingListener.java similarity index 64% rename from paper/src/main/java/com/otfhee/listeners/AntiGreefingListener.java rename to paper/src/main/java/com/otfhee/paper/listeners/AntiGreefingListener.java index 91f4088..83bb05f 100644 --- a/paper/src/main/java/com/otfhee/listeners/AntiGreefingListener.java +++ b/paper/src/main/java/com/otfhee/paper/listeners/AntiGreefingListener.java @@ -1,7 +1,7 @@ -package com.otfhee.listeners; +package com.otfhee.paper.listeners; -import com.otfhee.Plugin; -import com.otfhee.handlers.MessageType; +import com.otfhee.core.messaging.MessageTypes; +import com.otfhee.paper.Plugin; import org.bukkit.Material; import org.bukkit.Statistic; import org.bukkit.entity.Player; @@ -9,17 +9,18 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.BlockPlaceEvent; +@Deprecated public class AntiGreefingListener implements Listener { @EventHandler public void onGreefing(BlockPlaceEvent event) { Player player = event.getPlayer(); int time = player.getStatistic(Statistic.PLAY_ONE_MINUTE) / 20; - if (time <= 86400) { - if (time <= 3600) { - eventCancelled(event, player, MessageType.ERROR + " Этот блок запрещёно ставить новичкам, поиграйте на сервере больше 1 часа!"); + if (time <= 172800) { + if (time <= 86400) { + eventCancelled(event, player, MessageTypes.ERROR + " Этот блок запрещёно ставить новичкам, поиграйте на сервере больше 24 часов!"); } else if ((player.getLocation().getX() <= 1000 && player.getLocation().getZ() <= 1000) && (player.getLocation().getX() <= -1000 && player.getLocation().getZ() <= -1000)) { - eventCancelled(event, player, MessageType.ERROR + " Этот блок запрещёно ставить новичкам на спавне, поиграйте на сервере больше 24-х часов!"); + eventCancelled(event, player, MessageTypes.ERROR + " Этот блок запрещёно ставить новичкам на спавне, поиграйте на сервере больше 48-х часов!"); } } } diff --git a/paper/src/main/java/com/otfhee/paper/listeners/AsyncChatListener.java b/paper/src/main/java/com/otfhee/paper/listeners/AsyncChatListener.java new file mode 100644 index 0000000..799cb65 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/listeners/AsyncChatListener.java @@ -0,0 +1,43 @@ +package com.otfhee.paper.listeners; + +import com.otfhee.paper.Plugin; +import com.otfhee.paper.database.settings.GlobalMode; +import com.otfhee.paper.database.settings.impl.GlobalModeImpl; +import com.otfhee.paper.handlers.ChatHandler; +import com.otfhee.paper.handlers.ChatType; +import io.papermc.paper.event.player.AsyncChatEvent; +import net.kyori.adventure.text.TextComponent; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +public class AsyncChatListener implements Listener { + @EventHandler + public void onChat(AsyncChatEvent event) { + Player sender = event.getPlayer(); + Plugin plugin = Plugin.getInstance(); + TextComponent message = (TextComponent) event.message(); + GlobalMode globalMode = new GlobalModeImpl(plugin.getPlayersCollection(), sender); + globalMode.getGlobalMode().subscribe(mode -> { + if (message.content().startsWith("!") && !message.content().equals("!") || mode) { + for (Player player : sender.getServer().getOnlinePlayers()) { + ChatHandler.onChat(ChatType.GLOBAL, message.content(), sender, player); + } + // Исходный логгинг, без MiniMessage и префикса + Bukkit.getLogger().info("[G] " + sender.getName() + ": " + message.content()); + } else { + for (Player player : sender.getServer().getOnlinePlayers()) { + if (player.getWorld().equals(sender.getWorld())) { + if (player.getLocation().distance(sender.getLocation()) <= 100) { + ChatHandler.onChat(ChatType.LOCAL, message.content(), sender, player); + } + } + } + // Исходный логгинг, без MiniMessage и префикса + Bukkit.getLogger().info(sender.getName() + ": " + message.content()); + } + }); + event.setCancelled(true); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/listeners/MoveListener.java b/paper/src/main/java/com/otfhee/paper/listeners/MoveListener.java new file mode 100644 index 0000000..1aaa11f --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/listeners/MoveListener.java @@ -0,0 +1,24 @@ +package com.otfhee.paper.listeners; + +import com.otfhee.paper.Plugin; +import com.otfhee.paper.database.meta.PremiumDate; +import com.otfhee.paper.database.meta.impl.PremiumDateImpl; +import com.otfhee.paper.handlers.ParticleHandler; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; + +public class MoveListener implements Listener { + @EventHandler + public void onEvent(PlayerMoveEvent event) { + Player player = event.getPlayer(); + Plugin plugin = Plugin.getInstance(); + PremiumDate date = new PremiumDateImpl(plugin.getPlayersCollection(), player); + date.getDate().subscribe(value -> { + if (value != null) { + ParticleHandler.onHandler(event.getPlayer()); + } + }); + } +} diff --git a/paper/src/main/java/com/otfhee/listeners/PlayerHeadDropListener.java b/paper/src/main/java/com/otfhee/paper/listeners/PlayerHeadDropListener.java similarity index 97% rename from paper/src/main/java/com/otfhee/listeners/PlayerHeadDropListener.java rename to paper/src/main/java/com/otfhee/paper/listeners/PlayerHeadDropListener.java index 5298b40..fbd1db1 100644 --- a/paper/src/main/java/com/otfhee/listeners/PlayerHeadDropListener.java +++ b/paper/src/main/java/com/otfhee/paper/listeners/PlayerHeadDropListener.java @@ -1,4 +1,4 @@ -package com.otfhee.listeners; +package com.otfhee.paper.listeners; import org.bukkit.Material; import org.bukkit.entity.Creeper; diff --git a/paper/src/main/java/com/otfhee/paper/listeners/PlayerJoinLeaveListener.java b/paper/src/main/java/com/otfhee/paper/listeners/PlayerJoinLeaveListener.java new file mode 100644 index 0000000..14c9c93 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/listeners/PlayerJoinLeaveListener.java @@ -0,0 +1,46 @@ +package com.otfhee.paper.listeners; + +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.Plugin; +import com.otfhee.paper.handlers.PremiumHandler; +import net.kyori.adventure.text.Component; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +public class PlayerJoinLeaveListener implements Listener { + @EventHandler + public void onJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + Plugin plugin = Plugin.getInstance(); + + if (!player.hasPlayedBefore()) { + Messenger messenger = Plugin.getAudienceMessenger(player); + messenger.info(Component.text() + .append(Component.text(" Добро пожаловать на OTFHEE, " + player.getName() + "!")) + .append(Component.text("Ссылка на правила сервера тык")) + .append(Component.text("Ссылка на Discord-сервер тык")) + .append(Component.text("Ссылка на Telegram канал тык")) + .append(Component.text("Ссылка на приобретение " + PremiumHandler.onHandler() + " тык")) + .build()); + plugin.createPlayer(player); + } + + event.joinMessage(Component.text() + .append(Plugin.getMiniMessage().deserialize("[+] ")) + .append(player.displayName()) + .build()); + } + @EventHandler + public void onLeave(PlayerQuitEvent event) { + Player player = event.getPlayer(); + + event.quitMessage(Component.text() + .append(Plugin.getMiniMessage().deserialize("[-] ")) + .append(player.displayName()) + .build()); + } + +} diff --git a/paper/src/main/java/com/otfhee/paper/schedulers/AutoRestart.java b/paper/src/main/java/com/otfhee/paper/schedulers/AutoRestart.java new file mode 100644 index 0000000..b6ee255 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/schedulers/AutoRestart.java @@ -0,0 +1,70 @@ +package com.otfhee.paper.schedulers; + +import com.otfhee.paper.Plugin; +import org.bukkit.Bukkit; + +import java.text.SimpleDateFormat; +import java.util.Date; + +@Deprecated +public class AutoRestart implements Runnable { + @Override + public void run() { + long currentTime = System.currentTimeMillis(); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss"); + Date date = new Date(currentTime); + String time = simpleDateFormat.format(date); + + if (time.equals("23:30:00")) { + Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 30 минут!"); + Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 30 минут!"); + } + if (time.equals("23:45:00")) { + Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 15 минут!"); + Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 15 минут!"); + } + if (time.equals("23:50:00")) { + Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 10 минут!"); + Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 10 минут!"); + } + if (time.equals("23:55:00")) { + Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 5 минут!"); + Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 5 минут!"); + } + if (time.equals("23:59:00")) { + Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 1 минуту!"); + Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 1 минуту!"); + } + if (time.equals("23:59:30")) { + Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 30 секунд!"); + Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 30 секунд!"); + } + if (time.equals("23:59:45")) { + Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 15 секунд!"); + Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 15 секунд!"); + } + if (time.equals("23:59:55")) { + Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 5 секунд!"); + Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 5 секунд!"); + } + if (time.equals("23:59:56")) { + Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 4 секунд!"); + Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 4 секунды!"); + } + if (time.equals("23:59:57")) { + Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 3 секунд!"); + Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 3 секунды!"); + } + if (time.equals("23:59:58")) { + Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 2 секунды!"); + Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 2 секунды!"); + } + if (time.equals("23:59:59")) { + Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 1 секунду!"); + Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 1 секунду!"); + } + if (time.equals("00:00:00")) { + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "stop"); + } + } +} diff --git a/paper/src/main/java/com/otfhee/paper/schedulers/CheckPremium.java b/paper/src/main/java/com/otfhee/paper/schedulers/CheckPremium.java new file mode 100644 index 0000000..ede72b0 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/schedulers/CheckPremium.java @@ -0,0 +1,27 @@ +package com.otfhee.paper.schedulers; + +import com.otfhee.paper.Plugin; +import com.otfhee.paper.database.meta.PremiumDate; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.util.Date; + +@Deprecated +public class CheckPremium implements Runnable { + @Override + public void run() { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + Date now = new Date(); + Plugin plugin = Plugin.getInstance(); + PremiumDate date = plugin.getPlayerMeta(player).getPremiumDate(); + date.getDate().subscribe(value -> { + if (value != null) { + if (now.after(value)) { + date.insertDefault(); + } + } + }); + } + } +} diff --git a/paper/src/main/java/com/otfhee/schedulers/TabList.java b/paper/src/main/java/com/otfhee/paper/schedulers/TabList.java similarity index 77% rename from paper/src/main/java/com/otfhee/schedulers/TabList.java rename to paper/src/main/java/com/otfhee/paper/schedulers/TabList.java index 271e806..a3e56db 100644 --- a/paper/src/main/java/com/otfhee/schedulers/TabList.java +++ b/paper/src/main/java/com/otfhee/paper/schedulers/TabList.java @@ -1,18 +1,20 @@ -package com.otfhee.schedulers; +package com.otfhee.paper.schedulers; -import com.otfhee.Plugin; -import com.otfhee.handlers.DisplayNameHandler; +import com.otfhee.paper.Plugin; +import com.otfhee.paper.telemetry.PingTelemetry; +import com.otfhee.paper.telemetry.TPSTelemetry; import net.kyori.adventure.text.Component; import org.bukkit.entity.Player; import java.util.Objects; public class TabList implements Runnable { + @Override public void run() { for (Player player : Plugin.getInstance().getServer().getOnlinePlayers()) { final Component header = Component.text() .append(Plugin.getMiniMessage().deserialize(" TPS: ")) - .append(Plugin.getTPS()) + .append(TPSTelemetry.getTPS()) .append(Plugin.getMiniMessage().deserialize(" | OTFHEE | Онлайн: " + Plugin.getInstance().getServer().getOnlinePlayers().size() + " ")) .append(Plugin.getMiniMessage().deserialize("")) .build(); @@ -23,8 +25,8 @@ public void run() { .build(); player.sendPlayerListHeaderAndFooter(header, footer); player.playerListName(Component.text() - .append(DisplayNameHandler.displayName(player)) - .append(Component.text(" "), Plugin.getPing(player.getPing())) + .append(player.displayName()) + .append(Component.text(" "), PingTelemetry.getPing(player.getPing())) .build()); } } diff --git a/paper/src/main/java/com/otfhee/paper/telemetry/PingTelemetry.java b/paper/src/main/java/com/otfhee/paper/telemetry/PingTelemetry.java new file mode 100644 index 0000000..b047407 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/telemetry/PingTelemetry.java @@ -0,0 +1,21 @@ +package com.otfhee.paper.telemetry; + +import com.otfhee.paper.Plugin; +import net.kyori.adventure.text.Component; +import org.jetbrains.annotations.NotNull; + +@Deprecated +public class PingTelemetry { + public static @NotNull Component getPing(int ping) { + if (ping >= 0) { + if (ping >= 200) { + if (ping >= 300) { + return Plugin.getMiniMessage().deserialize("" + ping + "мс"); + } + return Plugin.getMiniMessage().deserialize("" + ping + "мс"); + } + return Plugin.getMiniMessage().deserialize("" + ping + "мс"); + } + return Plugin.getMiniMessage().deserialize("" + ping + "мс"); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/telemetry/TPSTelemetry.java b/paper/src/main/java/com/otfhee/paper/telemetry/TPSTelemetry.java new file mode 100644 index 0000000..d27f5d1 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/telemetry/TPSTelemetry.java @@ -0,0 +1,29 @@ +package com.otfhee.paper.telemetry; + +import com.otfhee.paper.Plugin; +import net.kyori.adventure.text.Component; +import org.jetbrains.annotations.NotNull; + +import java.text.DecimalFormat; + +@Deprecated +public class TPSTelemetry { + public static @NotNull Component getTPS() { + DecimalFormat df = new DecimalFormat("#.#"); + double[] tps = Plugin.getInstance().getServer().getTPS(); + double finalTPS = Double.parseDouble(df.format(tps[0])); + if (finalTPS <= 20) { + if (finalTPS <= 18) { + if (finalTPS <= 10) { + return Plugin.getMiniMessage().deserialize("" + finalTPS); + } + return Plugin.getMiniMessage().deserialize("" + finalTPS); + } + return Plugin.getMiniMessage().deserialize("" + finalTPS); + } + if (finalTPS > 20) { + return Plugin.getMiniMessage().deserialize("" + 20.0D + "*"); + } + return Plugin.getMiniMessage().deserialize("" + finalTPS); + } +} diff --git a/paper/src/main/java/com/otfhee/schedulers/AutoRestart.java b/paper/src/main/java/com/otfhee/schedulers/AutoRestart.java deleted file mode 100644 index ac4ce53..0000000 --- a/paper/src/main/java/com/otfhee/schedulers/AutoRestart.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.otfhee.schedulers; - -import com.otfhee.Plugin; -import com.otfhee.handlers.MessageType; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import java.text.SimpleDateFormat; -import java.util.Date; - -public class AutoRestart implements Runnable { - @Override - public void run() { - long currentTime = System.currentTimeMillis(); - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss"); - Date date = new Date(currentTime); - String time = simpleDateFormat.format(date); - - if (time.equals("23:30:00")) { - for (Player player : Plugin.getInstance().getServer().getOnlinePlayers()) { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize(MessageType.WARNING + " Перезагрузка сервера произойдёт через 30 минут!")) - .build()); - } - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 30 минут!"); - } - if (time.equals("23:45:00")) { - for (Player player : Plugin.getInstance().getServer().getOnlinePlayers()) { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize(MessageType.WARNING + " Перезагрузка сервера произойдёт через 15 минут!")) - .build()); - } - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 15 минут!"); - } - if (time.equals("23:50:00")) { - for (Player player : Plugin.getInstance().getServer().getOnlinePlayers()) { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize(MessageType.WARNING + " Перезагрузка сервера произойдёт через 10 минут!")) - .build()); - } - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 10 минут!"); - } - if (time.equals("23:55:00")) { - for (Player player : Plugin.getInstance().getServer().getOnlinePlayers()) { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize(MessageType.WARNING + " Перезагрузка сервера произойдёт через 5 минут!")) - .build()); - } - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 5 минут!"); - } - if (time.equals("23:59:00")) { - for (Player player : Plugin.getInstance().getServer().getOnlinePlayers()) { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize(MessageType.WARNING + " Перезагрузка сервера произойдёт через 1 минуту!")) - .build()); - } - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 1 минуту!"); - } - if (time.equals("23:59:30")) { - for (Player player : Plugin.getInstance().getServer().getOnlinePlayers()) { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize(MessageType.WARNING + " Перезагрузка сервера произойдёт через 30 секунд!")) - .build()); - } - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 30 секунд!"); - } - if (time.equals("23:59:45")) { - for (Player player : Plugin.getInstance().getServer().getOnlinePlayers()) { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize(MessageType.WARNING + " Перезагрузка сервера произойдёт через 15 секунд!")) - .build()); - } - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 15 секунд!"); - } - if (time.equals("23:59:55")) { - for (Player player : Plugin.getInstance().getServer().getOnlinePlayers()) { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize(MessageType.WARNING + " Перезагрузка сервера произойдёт через 5 секунд!")) - .build()); - } - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 5 секунд!"); - } - if (time.equals("23:59:56")) { - for (Player player : Plugin.getInstance().getServer().getOnlinePlayers()) { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize(MessageType.WARNING + " Перезагрузка сервера произойдёт через 4 секунд!")) - .build()); - } - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 4 секунды!"); - } - if (time.equals("23:59:57")) { - for (Player player : Plugin.getInstance().getServer().getOnlinePlayers()) { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize(MessageType.WARNING + " Перезагрузка сервера произойдёт через 3 секунд!")) - .build()); - } - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 3 секунды!"); - } - if (time.equals("23:59:58")) { - for (Player player : Plugin.getInstance().getServer().getOnlinePlayers()) { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize(MessageType.WARNING + " Перезагрузка сервера произойдёт через 2 секунд!")) - .build()); - } - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 2 секунды!"); - } - if (time.equals("23:59:59")) { - for (Player player : Plugin.getInstance().getServer().getOnlinePlayers()) { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize(MessageType.WARNING + " Перезагрузка сервера произойдёт через 1 секунд!")) - .build()); - } - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 1 секунду!"); - } - if (time.equals("00:00:00")) { - Bukkit.getServer().spigot().restart(); - } - } -} diff --git a/paper/src/main/java/com/otfhee/schedulers/CheckPremium.java b/paper/src/main/java/com/otfhee/schedulers/CheckPremium.java deleted file mode 100644 index fa9ca5a..0000000 --- a/paper/src/main/java/com/otfhee/schedulers/CheckPremium.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.otfhee.schedulers; - -import com.otfhee.Plugin; -import com.otfhee.configurations.PlayersConfig; -import com.otfhee.handlers.*; -import org.bukkit.entity.Player; - -import java.util.Date; - -public class CheckPremium implements Runnable { - public void run() { - for (Player player : Plugin.getInstance().getServer().getOnlinePlayers()) { - if (PlayersConfig.getPremiumStatus(player.getUniqueId().toString())) { - Date date = new Date(); - Date datePremium = PlayersConfig.getPremiumDate(player.getUniqueId().toString()); - if (date.after(datePremium)) { - PlayersConfig.setDefaultPremiumDate(player.getUniqueId().toString()); - PlayersConfig.setDefaultPremiumStatus(player.getUniqueId().toString()); - PlayersConfig.setDefaultPremiumPrefix(player.getUniqueId().toString()); - PlayersConfig.setDefaultPremiumNickname(player.getUniqueId().toString()); - PlayersConfig.setDefaultPremiumParticle(player.getUniqueId().toString()); - player.sendMessage(Plugin.getMiniMessage().deserialize(MessageType.INFO + " Срок действия подписки " + PremiumHandler.onHandler() + " истёк!")); - } - if (!PlayersConfig.getExistPremiumPrefix(player.getUniqueId().toString())) { - PlayersConfig.setPremiumPrefix(player.getUniqueId().toString(), PrefixType.STAR); - } - if (!PlayersConfig.getExistPremiumNickname(player.getUniqueId().toString())) { - PlayersConfig.setPremiumNickname(player.getUniqueId().toString(), ColorHandler.colorAdventureBuilder(ColorType.DEFAULT)); - } - if (!PlayersConfig.getExistPremiumParticle(player.getUniqueId().toString())) { - PlayersConfig.setPremiumParticle(player.getUniqueId().toString(), ParticleType.DEFAULT); - } - } - } - } -} diff --git a/paper/src/main/java/com/otfhee/schedulers/CheckStuffStatus.java b/paper/src/main/java/com/otfhee/schedulers/CheckStuffStatus.java deleted file mode 100644 index 9d4b92a..0000000 --- a/paper/src/main/java/com/otfhee/schedulers/CheckStuffStatus.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.otfhee.schedulers; - -import com.otfhee.Plugin; -import com.otfhee.configurations.PlayersConfig; -import org.bukkit.entity.Player; - -public class CheckStuffStatus implements Runnable { - public void run() { - for (Player player : Plugin.getInstance().getServer().getOnlinePlayers()) { - if (PlayersConfig.getStuffStatus(player.getUniqueId().toString()) && !player.hasPermission("minecraft.command.ban") - && !player.hasPermission("minecraft.command.pardon")) { - player.addAttachment(Plugin.getInstance(), "minecraft.command.ban", true); - player.addAttachment(Plugin.getInstance(), "minecraft.command.pardon", true); - } - if (!PlayersConfig.getStuffStatus(player.getUniqueId().toString()) && player.hasPermission("minecraft.command.ban") - && player.hasPermission("minecraft.command.pardon")) { - player.addAttachment(Plugin.getInstance(), "minecraft.command.ban", false); - player.addAttachment(Plugin.getInstance(), "minecraft.command.pardon", false); - } - if (PlayersConfig.getPremiumStatus(player.getUniqueId().toString()) - && !PlayersConfig.getStuffStatus(player.getUniqueId().toString()) - && !player.hasPermission("coreprotect.inspect")) { - player.addAttachment(Plugin.getInstance(), "coreprotect.inspect", true); - } - if (!PlayersConfig.getPremiumStatus(player.getUniqueId().toString()) - && PlayersConfig.getStuffStatus(player.getUniqueId().toString()) - && !player.hasPermission("coreprotect.inspect")) { - player.addAttachment(Plugin.getInstance(), "coreprotect.inspect", true); - } - if (PlayersConfig.getPremiumStatus(player.getUniqueId().toString()) - && PlayersConfig.getStuffStatus(player.getUniqueId().toString()) - && !player.hasPermission("coreprotect.inspect")) { - player.addAttachment(Plugin.getInstance(), "coreprotect.inspect", true); - } - if (!PlayersConfig.getPremiumStatus(player.getUniqueId().toString()) - && !PlayersConfig.getStuffStatus(player.getUniqueId().toString()) - && player.hasPermission("coreprotect.inspect")) { - player.addAttachment(Plugin.getInstance(), "coreprotect.inspect", false); - } - } - } -} diff --git a/paper/src/main/resources/config.yml b/paper/src/main/resources/config.yml new file mode 100644 index 0000000..d45ecac --- /dev/null +++ b/paper/src/main/resources/config.yml @@ -0,0 +1,5 @@ +mongodb: + url: '' + database: 'general' + players-collection: 'players' +notd: '' \ No newline at end of file diff --git a/paper/src/main/resources/language/english.properties b/paper/src/main/resources/language/english.properties new file mode 100644 index 0000000..e69de29 diff --git a/paper/src/main/resources/language/russian.properties b/paper/src/main/resources/language/russian.properties new file mode 100644 index 0000000..e69de29 diff --git a/paper/src/main/resources/paper-plugin.yml b/paper/src/main/resources/paper-plugin.yml index 12f2fdb..3c0fe87 100644 --- a/paper/src/main/resources/paper-plugin.yml +++ b/paper/src/main/resources/paper-plugin.yml @@ -1,4 +1,11 @@ name: "OTFHEE" version: "${version}" main: "com.otfhee.paper.Plugin" -api-version: "1.21.1" \ No newline at end of file +api-version: "1.21.4" +dependencies: + server: + CommandAPI: + load: BEFORE + required: true + join-classpath: true +folia-supported: true \ No newline at end of file diff --git a/settings.gradle b/settings.gradle old mode 100755 new mode 100644 index b35941f..418c7c5 --- a/settings.gradle +++ b/settings.gradle @@ -1,8 +1,18 @@ +pluginManagement { + plugins { + id 'org.jetbrains.kotlin.jvm' version '2.0.20' + } +} +plugins { + id 'org.gradle.toolchains.foojay-resolver-convention' version '0.9.0' +} rootProject.name = "OTFHEE" include( "paper", "velocity", - 'bastion' + 'bastion', + 'core', + 'api' ) diff --git a/velocity/src/main/java/com/otfhee/paper/velocity/Main.java b/velocity/src/main/java/com/otfhee/paper/velocity/Main.java new file mode 100644 index 0000000..39ae3b9 --- /dev/null +++ b/velocity/src/main/java/com/otfhee/paper/velocity/Main.java @@ -0,0 +1,4 @@ +package com.otfhee.paper.velocity; + +public class Main { +} diff --git a/velocity/src/main/java/com/otfhee/velocity/Main.java b/velocity/src/main/java/com/otfhee/velocity/Main.java deleted file mode 100644 index d968266..0000000 --- a/velocity/src/main/java/com/otfhee/velocity/Main.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.otfhee.velocity; - -public class Main { -} From 0e1a01cc5e79b9df567acfa10690caf7e74ab152 Mon Sep 17 00:00:00 2001 From: dangor Date: Fri, 17 Jan 2025 20:41:09 +0500 Subject: [PATCH 03/19] Rewrite Commands Structure --- .../main/java/com/otfhee/paper/Plugin.java | 41 ++++++++--------- .../otfhee/paper/commands/CoinCommand.java | 22 --------- .../com/otfhee/paper/commands/Command.java | 8 ++++ .../otfhee/paper/commands/CommandLoader.java | 46 +++++++++++++++++++ .../otfhee/paper/commands/DiscordCommand.java | 17 ------- .../com/otfhee/paper/commands/Loader.java | 5 ++ .../otfhee/paper/commands/PingCommand.java | 17 ------- .../otfhee/paper/commands/RulesCommand.java | 16 ------- .../otfhee/paper/commands/SiteCommand.java | 16 ------- .../paper/commands/TelegramCommand.java | 17 ------- .../com/otfhee/paper/commands/TryCommand.java | 27 ----------- .../paper/commands/action/CoinCommand.java | 34 ++++++++++++++ .../commands/{ => action}/DoCommand.java | 18 ++++++-- .../commands/{ => action}/MeCommand.java | 18 ++++++-- .../paper/commands/action/TryCommand.java | 39 ++++++++++++++++ .../paper/commands/action/random/Coin.java | 5 ++ .../paper/commands/action/random/Try.java | 5 ++ .../{ => chat}/GlobalModeCommand.java | 32 +++++++------ .../PrivateMessagesCommands.java} | 21 +++++++-- .../{ => deprecated}/ItemCommand.java | 2 +- .../{ => deprecated}/NOTDCommand.java | 2 +- .../{ => deprecated}/NicknameCommand.java | 2 +- .../{ => deprecated}/ParticleCommand.java | 2 +- .../{ => deprecated}/PrefixCommand.java | 2 +- .../{ => deprecated}/PremiumCommand.java | 2 +- .../{ => deprecated}/StaffCommand.java | 2 +- .../paper/commands/social/DiscordCommand.java | 30 ++++++++++++ .../paper/commands/social/RulesCommand.java | 29 ++++++++++++ .../paper/commands/social/SiteCommand.java | 29 ++++++++++++ .../commands/social/TelegramCommand.java | 30 ++++++++++++ .../paper/commands/utils/PingCommand.java | 29 ++++++++++++ .../paper/database/impl/CreatePlayerImpl.java | 4 +- 32 files changed, 382 insertions(+), 187 deletions(-) delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/CoinCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/Command.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/CommandLoader.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/DiscordCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/Loader.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/PingCommand.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/RulesCommand.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/SiteCommand.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/TelegramCommand.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/TryCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/action/CoinCommand.java rename paper/src/main/java/com/otfhee/paper/commands/{ => action}/DoCommand.java (51%) rename paper/src/main/java/com/otfhee/paper/commands/{ => action}/MeCommand.java (61%) create mode 100644 paper/src/main/java/com/otfhee/paper/commands/action/TryCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/action/random/Coin.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/action/random/Try.java rename paper/src/main/java/com/otfhee/paper/commands/{ => chat}/GlobalModeCommand.java (62%) rename paper/src/main/java/com/otfhee/paper/commands/{PrivateMessagesCommand.java => chat/PrivateMessagesCommands.java} (76%) rename paper/src/main/java/com/otfhee/paper/commands/{ => deprecated}/ItemCommand.java (97%) rename paper/src/main/java/com/otfhee/paper/commands/{ => deprecated}/NOTDCommand.java (96%) rename paper/src/main/java/com/otfhee/paper/commands/{ => deprecated}/NicknameCommand.java (98%) rename paper/src/main/java/com/otfhee/paper/commands/{ => deprecated}/ParticleCommand.java (97%) rename paper/src/main/java/com/otfhee/paper/commands/{ => deprecated}/PrefixCommand.java (97%) rename paper/src/main/java/com/otfhee/paper/commands/{ => deprecated}/PremiumCommand.java (99%) rename paper/src/main/java/com/otfhee/paper/commands/{ => deprecated}/StaffCommand.java (97%) create mode 100644 paper/src/main/java/com/otfhee/paper/commands/social/DiscordCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/social/RulesCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/social/SiteCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/social/TelegramCommand.java create mode 100644 paper/src/main/java/com/otfhee/paper/commands/utils/PingCommand.java diff --git a/paper/src/main/java/com/otfhee/paper/Plugin.java b/paper/src/main/java/com/otfhee/paper/Plugin.java index c1dfc91..93ca20b 100644 --- a/paper/src/main/java/com/otfhee/paper/Plugin.java +++ b/paper/src/main/java/com/otfhee/paper/Plugin.java @@ -10,8 +10,20 @@ import com.mongodb.reactivestreams.client.MongoDatabase; import com.otfhee.core.Core; import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.commands.*; -import com.otfhee.paper.database.CreatePlayer; +import com.otfhee.paper.commands.CommandLoader; +import com.otfhee.paper.commands.Loader; +import com.otfhee.paper.commands.action.DoCommand; +import com.otfhee.paper.commands.action.MeCommand; +import com.otfhee.paper.commands.action.TryCommand; +import com.otfhee.paper.commands.deprecated.*; +import com.otfhee.paper.commands.chat.GlobalModeCommand; +import com.otfhee.paper.commands.chat.PrivateMessagesCommands; +import com.otfhee.paper.commands.social.DiscordCommand; +import com.otfhee.paper.commands.social.RulesCommand; +import com.otfhee.paper.commands.social.SiteCommand; +import com.otfhee.paper.commands.social.TelegramCommand; +import com.otfhee.paper.commands.utils.PingCommand; +import com.otfhee.paper.database.DatabaseItem; import com.otfhee.paper.database.impl.CreatePlayerImpl; import com.otfhee.paper.database.meta.PlayerMeta; import com.otfhee.paper.database.meta.impl.PlayerMetaImpl; @@ -39,6 +51,7 @@ public final class Plugin extends JavaPlugin { private static final MiniMessage miniMessage = MiniMessage.miniMessage(); private static final Messenger messenger = Core.getMessenger(Bukkit.getServer()); + private static final Loader commands = new CommandLoader(); private MongoDatabase database; private MongoCollection playersCollection; @@ -64,25 +77,9 @@ public void onEnable() { playersCollection = database.getCollection(Objects.requireNonNull(getConfig().getString("mongodb.players-collection"))); this.saveDefaultConfig(); - CommandAPI.onEnable(); - PrivateMessagesCommand.onCommand(); - GlobalModeCommand.onCommand(); - CoinCommand.onCommand(); - TryCommand.onCommand(); - DoCommand.onCommand(); - MeCommand.onCommand(); - PingCommand.onCommand(); - RulesCommand.onCommand(); - DiscordCommand.onCommand(); - NOTDCommand.onCommand(); - TelegramCommand.onCommand(); - PrefixCommand.onCommand(); - SiteCommand.onCommand(); - NicknameCommand.onCommand(); - ItemCommand.onCommand(); - ParticleCommand.onCommand(); - PremiumCommand.onCommand(); - StaffCommand.onCommand(); + + commands.load(); + getServer().getPluginManager().registerEvents(new PlayerJoinLeaveListener(), this); getServer().getPluginManager().registerEvents(new PlayerHeadDropListener(), this); getServer().getPluginManager().registerEvents(new AntiGreefingListener(), this); @@ -123,7 +120,7 @@ public MongoCollection getPlayersCollection() { return playersCollection; } - public @NotNull CreatePlayer createPlayer(Player player) { + public @NotNull DatabaseItem createPlayer(Player player) { return new CreatePlayerImpl(playersCollection, player); } diff --git a/paper/src/main/java/com/otfhee/paper/commands/CoinCommand.java b/paper/src/main/java/com/otfhee/paper/commands/CoinCommand.java deleted file mode 100644 index 0d36a6a..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/CoinCommand.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.otfhee.paper.commands; - -import com.otfhee.paper.Plugin; -import dev.jorel.commandapi.CommandAPICommand; - -import java.util.Random; - -public class CoinCommand { - public static void onCommand() { - new CommandAPICommand("coin") - .executesPlayer((sender, args) -> { - Random random = new Random(); - int choice = random.nextInt(2); - if (choice == 1) { - Plugin.getMessenger().info("кинул монетку и выпал: ОРЁЛ"); - } else { - Plugin.getMessenger().info("кинул монетку и выпала: РЕШКА"); - } - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/Command.java b/paper/src/main/java/com/otfhee/paper/commands/Command.java new file mode 100644 index 0000000..1964640 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/Command.java @@ -0,0 +1,8 @@ +package com.otfhee.paper.commands; + +import org.bukkit.permissions.Permission; + +public interface Command { + void onCommand(); + Permission getPermission(); +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/CommandLoader.java b/paper/src/main/java/com/otfhee/paper/commands/CommandLoader.java new file mode 100644 index 0000000..4a38603 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/CommandLoader.java @@ -0,0 +1,46 @@ +package com.otfhee.paper.commands; + +import com.otfhee.paper.Plugin; +import com.otfhee.paper.commands.action.CoinCommand; +import com.otfhee.paper.commands.action.DoCommand; +import com.otfhee.paper.commands.action.MeCommand; +import com.otfhee.paper.commands.action.TryCommand; +import com.otfhee.paper.commands.chat.GlobalModeCommand; +import com.otfhee.paper.commands.chat.PrivateMessagesCommands; +import com.otfhee.paper.commands.social.DiscordCommand; +import com.otfhee.paper.commands.social.RulesCommand; +import com.otfhee.paper.commands.social.SiteCommand; +import com.otfhee.paper.commands.social.TelegramCommand; +import com.otfhee.paper.commands.utils.PingCommand; +import dev.jorel.commandapi.CommandAPI; + +public class CommandLoader implements Loader { + private final Command coin = new CoinCommand(); + private final Command doCommand = new DoCommand(); + private final Command me = new MeCommand(); + private final Command tryCommand = new TryCommand(); + private final Command globalMode = new GlobalModeCommand(); + private final Command privateMessages = new PrivateMessagesCommands(); + private final Command discord = new DiscordCommand(); + private final Command rules = new RulesCommand(); + private final Command site = new SiteCommand(); + private final Command telegram = new TelegramCommand(); + private final Command ping = new PingCommand(); + + @Override + public void load() { + Plugin.getInstance().getLogger().info("Loading commands..."); + CommandAPI.onEnable(); + coin.onCommand(); + doCommand.onCommand(); + me.onCommand(); + tryCommand.onCommand(); + globalMode.onCommand(); + privateMessages.onCommand(); + discord.onCommand(); + rules.onCommand(); + site.onCommand(); + telegram.onCommand(); + ping.onCommand(); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/DiscordCommand.java b/paper/src/main/java/com/otfhee/paper/commands/DiscordCommand.java deleted file mode 100644 index 7912243..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/DiscordCommand.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.otfhee.paper.commands; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.Plugin; -import dev.jorel.commandapi.CommandAPICommand; - -public class DiscordCommand { - public static void onCommand() { - new CommandAPICommand("discord") - .withAliases("ds") - .executesPlayer((sender, args) -> { - Messenger messenger = Plugin.getAudienceMessenger(sender); - messenger.info("Ссылка на Discord-сервер тык"); - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/Loader.java b/paper/src/main/java/com/otfhee/paper/commands/Loader.java new file mode 100644 index 0000000..3f649ee --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/Loader.java @@ -0,0 +1,5 @@ +package com.otfhee.paper.commands; + +public interface Loader { + void load(); +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/PingCommand.java b/paper/src/main/java/com/otfhee/paper/commands/PingCommand.java deleted file mode 100644 index 978505d..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/PingCommand.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.otfhee.paper.commands; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.Plugin; -import com.otfhee.paper.telemetry.PingTelemetry; -import dev.jorel.commandapi.CommandAPICommand; - -public class PingCommand { - public static void onCommand() { - new CommandAPICommand("ping") - .executesPlayer((sender, args) -> { - Messenger messenger = Plugin.getAudienceMessenger(sender); - messenger.info("Ваш пинг: " + PingTelemetry.getPing(sender.getPing())); - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/RulesCommand.java b/paper/src/main/java/com/otfhee/paper/commands/RulesCommand.java deleted file mode 100644 index 7a9fa92..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/RulesCommand.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.otfhee.paper.commands; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.Plugin; -import dev.jorel.commandapi.CommandAPICommand; - -public class RulesCommand { - public static void onCommand() { - new CommandAPICommand("rules") - .executesPlayer((sender, args) -> { - Messenger messenger = Plugin.getAudienceMessenger(sender); - messenger.info("Ссылка на правила сервера тык"); - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/SiteCommand.java b/paper/src/main/java/com/otfhee/paper/commands/SiteCommand.java deleted file mode 100644 index 09943b5..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/SiteCommand.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.otfhee.paper.commands; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.Plugin; -import dev.jorel.commandapi.CommandAPICommand; - -public class SiteCommand { - public static void onCommand() { - new CommandAPICommand("site") - .executesPlayer((sender, args) -> { - Messenger messenger = Plugin.getAudienceMessenger(sender); - messenger.info("Ссылка на сайт сервера тык"); - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/TelegramCommand.java b/paper/src/main/java/com/otfhee/paper/commands/TelegramCommand.java deleted file mode 100644 index 2b81617..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/TelegramCommand.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.otfhee.paper.commands; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.Plugin; -import dev.jorel.commandapi.CommandAPICommand; - -public class TelegramCommand { - public static void onCommand() { - new CommandAPICommand("telegram") - .withAliases("tg") - .executesPlayer((sender, args) -> { - Messenger messenger = Plugin.getAudienceMessenger(sender); - messenger.info("Ссылка на Telegram канал тык"); - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/TryCommand.java b/paper/src/main/java/com/otfhee/paper/commands/TryCommand.java deleted file mode 100644 index b24004c..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/TryCommand.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.otfhee.paper.commands; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.Plugin; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.arguments.GreedyStringArgument; - -import java.util.Random; - -public class TryCommand { - public static void onCommand() { - new CommandAPICommand("try") - .withArguments(new GreedyStringArgument("действие")) - .executesPlayer((sender, args) -> { - String action = (String) args.get("действие"); - Random random = new Random(); - int choice = random.nextInt(2); - Messenger messenger = Plugin.getAudienceMessenger(sender); - if (choice == 1) { - messenger.info(sender.displayName() + " " + action + ": УСПЕШНО"); - } else { - messenger.info(sender.displayName() + " " + action + ": НЕ УСПЕШНО"); - } - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/action/CoinCommand.java b/paper/src/main/java/com/otfhee/paper/commands/action/CoinCommand.java new file mode 100644 index 0000000..91c2671 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/action/CoinCommand.java @@ -0,0 +1,34 @@ +package com.otfhee.paper.commands.action; + +import com.otfhee.paper.Plugin; +import com.otfhee.paper.commands.Command; +import com.otfhee.paper.commands.action.random.Coin; +import dev.jorel.commandapi.CommandAPICommand; +import org.bukkit.permissions.Permission; + +import java.util.Random; + +public class CoinCommand implements Command { + private final String permission = "otfhee.default.coin"; + + @Override + public void onCommand() { + new CommandAPICommand("coin") + .withPermission(permission) + .executesPlayer((sender, args) -> { + Coin heads = () -> Plugin.getMessenger().info("кинул монетку и выпал: ОРЁЛ"); + Coin tails = () -> Plugin.getMessenger().info("кинул монетку и выпала: РЕШКА"); + + Coin[] coins = {heads, tails}; + int i = new Random().nextInt(coins.length); + coins[i].random(); + }) + .register(); + Plugin.getInstance().getLogger().info("CoinCommand successfully started."); + } + + @Override + public Permission getPermission() { + return new Permission(permission); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/DoCommand.java b/paper/src/main/java/com/otfhee/paper/commands/action/DoCommand.java similarity index 51% rename from paper/src/main/java/com/otfhee/paper/commands/DoCommand.java rename to paper/src/main/java/com/otfhee/paper/commands/action/DoCommand.java index d08a9ef..22dd7c0 100644 --- a/paper/src/main/java/com/otfhee/paper/commands/DoCommand.java +++ b/paper/src/main/java/com/otfhee/paper/commands/action/DoCommand.java @@ -1,17 +1,29 @@ -package com.otfhee.paper.commands; +package com.otfhee.paper.commands.action; import com.otfhee.paper.Plugin; +import com.otfhee.paper.commands.Command; import dev.jorel.commandapi.CommandAPICommand; import dev.jorel.commandapi.arguments.GreedyStringArgument; +import org.bukkit.permissions.Permission; -public class DoCommand { - public static void onCommand() { +public class DoCommand implements Command { + private final String permission = "otfhee.default.do"; + + @Override + public void onCommand() { new CommandAPICommand("do") + .withPermission(permission) .withArguments(new GreedyStringArgument("действие")) .executesPlayer((sender, args) -> { String action = (String) args.get("действие"); Plugin.getMessenger().info("*" + sender + " " + action + "*"); }) .register(); + Plugin.getInstance().getLogger().info("DoCommand successfully started."); + } + + @Override + public Permission getPermission() { + return new Permission(permission); } } diff --git a/paper/src/main/java/com/otfhee/paper/commands/MeCommand.java b/paper/src/main/java/com/otfhee/paper/commands/action/MeCommand.java similarity index 61% rename from paper/src/main/java/com/otfhee/paper/commands/MeCommand.java rename to paper/src/main/java/com/otfhee/paper/commands/action/MeCommand.java index 998619b..e378c75 100644 --- a/paper/src/main/java/com/otfhee/paper/commands/MeCommand.java +++ b/paper/src/main/java/com/otfhee/paper/commands/action/MeCommand.java @@ -1,16 +1,22 @@ -package com.otfhee.paper.commands; +package com.otfhee.paper.commands.action; import com.otfhee.paper.Plugin; +import com.otfhee.paper.commands.Command; import dev.jorel.commandapi.CommandAPI; import dev.jorel.commandapi.CommandAPICommand; import dev.jorel.commandapi.arguments.GreedyStringArgument; import net.kyori.adventure.text.Component; +import org.bukkit.permissions.Permission; -public class MeCommand { - public static void onCommand() { +public class MeCommand implements Command { + private final String permission = "otfhee.default.me"; + + @Override + public void onCommand() { CommandAPI.unregister("me", true); new CommandAPICommand("me") + .withPermission(permission) .withArguments(new GreedyStringArgument("действие")) .executesPlayer((sender, args) -> { String action = (String) args.get("действие"); @@ -20,5 +26,11 @@ public static void onCommand() { .build()); }) .register(); + Plugin.getInstance().getLogger().info("MeCommand successfully started."); + } + + @Override + public Permission getPermission() { + return new Permission(permission); } } diff --git a/paper/src/main/java/com/otfhee/paper/commands/action/TryCommand.java b/paper/src/main/java/com/otfhee/paper/commands/action/TryCommand.java new file mode 100644 index 0000000..7247256 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/action/TryCommand.java @@ -0,0 +1,39 @@ +package com.otfhee.paper.commands.action; + +import com.otfhee.paper.Plugin; +import com.otfhee.paper.commands.Command; +import com.otfhee.paper.commands.action.random.Try; +import dev.jorel.commandapi.CommandAPICommand; +import dev.jorel.commandapi.arguments.GreedyStringArgument; +import org.bukkit.permissions.Permission; + +import java.util.Random; + +public class TryCommand implements Command { + private final String permission = "otfhee.default.try"; + + @Override + public void onCommand() { + new CommandAPICommand("try") + .withPermission(permission) + .withArguments(new GreedyStringArgument("действие")) + .executesPlayer((sender, args) -> { + String action = (String) args.get("действие"); + Try success = () -> Plugin.getMessenger().info(sender.displayName() + " " + + action + ": УСПЕШНО"); + Try fail = () -> Plugin.getMessenger().info(sender.displayName() + " " + + action + ": НЕ УСПЕШНО"); + + Try[] arr = {success, fail}; + int i = new Random().nextInt(arr.length); + arr[i].random(); + }) + .register(); + Plugin.getInstance().getLogger().info("TryCommand successfully started."); + } + + @Override + public Permission getPermission() { + return new Permission(permission); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/action/random/Coin.java b/paper/src/main/java/com/otfhee/paper/commands/action/random/Coin.java new file mode 100644 index 0000000..6c8850d --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/action/random/Coin.java @@ -0,0 +1,5 @@ +package com.otfhee.paper.commands.action.random; + +public interface Coin { + void random(); +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/action/random/Try.java b/paper/src/main/java/com/otfhee/paper/commands/action/random/Try.java new file mode 100644 index 0000000..6cde013 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/action/random/Try.java @@ -0,0 +1,5 @@ +package com.otfhee.paper.commands.action.random; + +public interface Try { + void random(); +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/GlobalModeCommand.java b/paper/src/main/java/com/otfhee/paper/commands/chat/GlobalModeCommand.java similarity index 62% rename from paper/src/main/java/com/otfhee/paper/commands/GlobalModeCommand.java rename to paper/src/main/java/com/otfhee/paper/commands/chat/GlobalModeCommand.java index 9459bc1..3ecad91 100644 --- a/paper/src/main/java/com/otfhee/paper/commands/GlobalModeCommand.java +++ b/paper/src/main/java/com/otfhee/paper/commands/chat/GlobalModeCommand.java @@ -1,15 +1,21 @@ -package com.otfhee.paper.commands; +package com.otfhee.paper.commands.chat; import com.otfhee.core.messaging.Messenger; import com.otfhee.paper.Plugin; +import com.otfhee.paper.commands.Command; import com.otfhee.paper.database.settings.GlobalMode; import com.otfhee.paper.database.settings.impl.GlobalModeImpl; import dev.jorel.commandapi.CommandAPICommand; +import org.bukkit.permissions.Permission; import reactor.core.publisher.Mono; -public class GlobalModeCommand { - public static void onCommand() { +public class GlobalModeCommand implements Command { + private final String permission = "otfhee.default.global"; + + @Override + public void onCommand() { new CommandAPICommand("global") + .withPermission(permission) .withAliases("g") .executesPlayer((sender, args) -> { Plugin plugin = Plugin.getInstance(); @@ -21,21 +27,19 @@ public static void onCommand() { boolean mode = x != null && x; if (mode) { messenger.success("Режим глобального чата: ВЫКЛЮЧЕН"); - globalMode.setGlobalMode(false) - .subscribe( - null, - error -> System.out.println("Error: " + error) - ); + globalMode.setGlobalMode(false).subscribe(); } else { messenger.success("Режим глобального чата: ВКЛЮЧЕН"); - globalMode.setGlobalMode(true) - .subscribe( - null, - error -> System.out.println("Error: " + error) - ); + globalMode.setGlobalMode(true).subscribe(); } - }); + }); }) .register(); + Plugin.getInstance().getLogger().info("GlobalModeCommand successfully started."); + } + + @Override + public Permission getPermission() { + return new Permission(permission); } } diff --git a/paper/src/main/java/com/otfhee/paper/commands/PrivateMessagesCommand.java b/paper/src/main/java/com/otfhee/paper/commands/chat/PrivateMessagesCommands.java similarity index 76% rename from paper/src/main/java/com/otfhee/paper/commands/PrivateMessagesCommand.java rename to paper/src/main/java/com/otfhee/paper/commands/chat/PrivateMessagesCommands.java index a5b73e7..86bb09f 100644 --- a/paper/src/main/java/com/otfhee/paper/commands/PrivateMessagesCommand.java +++ b/paper/src/main/java/com/otfhee/paper/commands/chat/PrivateMessagesCommands.java @@ -1,7 +1,8 @@ -package com.otfhee.paper.commands; +package com.otfhee.paper.commands.chat; import com.otfhee.core.messaging.Messenger; import com.otfhee.paper.Plugin; +import com.otfhee.paper.commands.Command; import com.otfhee.paper.handlers.ChatHandler; import com.otfhee.paper.handlers.ChatType; import dev.jorel.commandapi.CommandAPI; @@ -9,18 +10,22 @@ import dev.jorel.commandapi.arguments.GreedyStringArgument; import dev.jorel.commandapi.arguments.PlayerArgument; import org.bukkit.entity.Player; +import org.bukkit.permissions.Permission; import java.util.HashMap; -public class PrivateMessagesCommand { - private static final HashMap reply = new HashMap(); +public class PrivateMessagesCommands implements Command { + private final String permission = "otfhee.default.pm"; + private static final HashMap reply = new HashMap<>(); - public static void onCommand() { + @Override + public void onCommand() { CommandAPI.unregister("msg", true); CommandAPI.unregister("tell", true); CommandAPI.unregister("w", true); new CommandAPICommand("message") + .withPermission(permission) .withArguments(new PlayerArgument("игрок")) .withArguments(new GreedyStringArgument("сообщение")) .withAliases("msg", "tell", "w") @@ -31,7 +36,9 @@ public static void onCommand() { ChatHandler.onChat(ChatType.PRIVATE, message, sender, player); }) .register(); + Plugin.getInstance().getLogger().info("MessageCommand successfully started."); new CommandAPICommand("reply") + .withPermission(permission) .withArguments(new GreedyStringArgument("сообщение")) .withAliases("r") .executesPlayer((sender, args) -> { @@ -47,5 +54,11 @@ public static void onCommand() { } }) .register(); + Plugin.getInstance().getLogger().info("ReplyCommand successfully started."); + } + + @Override + public Permission getPermission() { + return new Permission(permission); } } diff --git a/paper/src/main/java/com/otfhee/paper/commands/ItemCommand.java b/paper/src/main/java/com/otfhee/paper/commands/deprecated/ItemCommand.java similarity index 97% rename from paper/src/main/java/com/otfhee/paper/commands/ItemCommand.java rename to paper/src/main/java/com/otfhee/paper/commands/deprecated/ItemCommand.java index e004a0b..a0e48e8 100644 --- a/paper/src/main/java/com/otfhee/paper/commands/ItemCommand.java +++ b/paper/src/main/java/com/otfhee/paper/commands/deprecated/ItemCommand.java @@ -1,4 +1,4 @@ -package com.otfhee.paper.commands; +package com.otfhee.paper.commands.deprecated; import com.otfhee.core.messaging.Messenger; import com.otfhee.paper.Plugin; diff --git a/paper/src/main/java/com/otfhee/paper/commands/NOTDCommand.java b/paper/src/main/java/com/otfhee/paper/commands/deprecated/NOTDCommand.java similarity index 96% rename from paper/src/main/java/com/otfhee/paper/commands/NOTDCommand.java rename to paper/src/main/java/com/otfhee/paper/commands/deprecated/NOTDCommand.java index 303ee00..bb6c6b3 100644 --- a/paper/src/main/java/com/otfhee/paper/commands/NOTDCommand.java +++ b/paper/src/main/java/com/otfhee/paper/commands/deprecated/NOTDCommand.java @@ -1,4 +1,4 @@ -package com.otfhee.paper.commands; +package com.otfhee.paper.commands.deprecated; import com.otfhee.core.messaging.Messenger; import com.otfhee.paper.Plugin; diff --git a/paper/src/main/java/com/otfhee/paper/commands/NicknameCommand.java b/paper/src/main/java/com/otfhee/paper/commands/deprecated/NicknameCommand.java similarity index 98% rename from paper/src/main/java/com/otfhee/paper/commands/NicknameCommand.java rename to paper/src/main/java/com/otfhee/paper/commands/deprecated/NicknameCommand.java index 6857fe3..cced530 100644 --- a/paper/src/main/java/com/otfhee/paper/commands/NicknameCommand.java +++ b/paper/src/main/java/com/otfhee/paper/commands/deprecated/NicknameCommand.java @@ -1,4 +1,4 @@ -package com.otfhee.paper.commands; +package com.otfhee.paper.commands.deprecated; import com.otfhee.core.messaging.Messenger; import com.otfhee.paper.Plugin; diff --git a/paper/src/main/java/com/otfhee/paper/commands/ParticleCommand.java b/paper/src/main/java/com/otfhee/paper/commands/deprecated/ParticleCommand.java similarity index 97% rename from paper/src/main/java/com/otfhee/paper/commands/ParticleCommand.java rename to paper/src/main/java/com/otfhee/paper/commands/deprecated/ParticleCommand.java index 5a73d7d..e392b63 100644 --- a/paper/src/main/java/com/otfhee/paper/commands/ParticleCommand.java +++ b/paper/src/main/java/com/otfhee/paper/commands/deprecated/ParticleCommand.java @@ -1,4 +1,4 @@ -package com.otfhee.paper.commands; +package com.otfhee.paper.commands.deprecated; import com.otfhee.core.messaging.Messenger; import com.otfhee.paper.Plugin; diff --git a/paper/src/main/java/com/otfhee/paper/commands/PrefixCommand.java b/paper/src/main/java/com/otfhee/paper/commands/deprecated/PrefixCommand.java similarity index 97% rename from paper/src/main/java/com/otfhee/paper/commands/PrefixCommand.java rename to paper/src/main/java/com/otfhee/paper/commands/deprecated/PrefixCommand.java index 335d32e..17424f0 100644 --- a/paper/src/main/java/com/otfhee/paper/commands/PrefixCommand.java +++ b/paper/src/main/java/com/otfhee/paper/commands/deprecated/PrefixCommand.java @@ -1,4 +1,4 @@ -package com.otfhee.paper.commands; +package com.otfhee.paper.commands.deprecated; import com.otfhee.core.messaging.Messenger; import com.otfhee.paper.Plugin; diff --git a/paper/src/main/java/com/otfhee/paper/commands/PremiumCommand.java b/paper/src/main/java/com/otfhee/paper/commands/deprecated/PremiumCommand.java similarity index 99% rename from paper/src/main/java/com/otfhee/paper/commands/PremiumCommand.java rename to paper/src/main/java/com/otfhee/paper/commands/deprecated/PremiumCommand.java index 400651e..e11cd6e 100644 --- a/paper/src/main/java/com/otfhee/paper/commands/PremiumCommand.java +++ b/paper/src/main/java/com/otfhee/paper/commands/deprecated/PremiumCommand.java @@ -1,4 +1,4 @@ -package com.otfhee.paper.commands; +package com.otfhee.paper.commands.deprecated; import com.otfhee.core.messaging.Messenger; import com.otfhee.paper.Plugin; diff --git a/paper/src/main/java/com/otfhee/paper/commands/StaffCommand.java b/paper/src/main/java/com/otfhee/paper/commands/deprecated/StaffCommand.java similarity index 97% rename from paper/src/main/java/com/otfhee/paper/commands/StaffCommand.java rename to paper/src/main/java/com/otfhee/paper/commands/deprecated/StaffCommand.java index fe936db..e9398c9 100644 --- a/paper/src/main/java/com/otfhee/paper/commands/StaffCommand.java +++ b/paper/src/main/java/com/otfhee/paper/commands/deprecated/StaffCommand.java @@ -1,4 +1,4 @@ -package com.otfhee.paper.commands; +package com.otfhee.paper.commands.deprecated; import com.otfhee.core.messaging.Messenger; import com.otfhee.paper.Plugin; diff --git a/paper/src/main/java/com/otfhee/paper/commands/social/DiscordCommand.java b/paper/src/main/java/com/otfhee/paper/commands/social/DiscordCommand.java new file mode 100644 index 0000000..9e992de --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/social/DiscordCommand.java @@ -0,0 +1,30 @@ +package com.otfhee.paper.commands.social; + +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.Plugin; +import com.otfhee.paper.commands.Command; +import dev.jorel.commandapi.CommandAPICommand; +import org.bukkit.permissions.Permission; + +public class DiscordCommand implements Command { + private final String permission = "otfhee.default.discord"; + + @Override + public void onCommand() { + new CommandAPICommand("discord") + .withPermission(permission) + .withAliases("ds") + .executesPlayer((sender, args) -> { + Messenger messenger = Plugin.getAudienceMessenger(sender); + messenger.info("Ссылка на Discord-сервер " + + "тык"); + }) + .register(); + Plugin.getInstance().getLogger().info("DiscordCommand successfully started."); + } + + @Override + public Permission getPermission() { + return new Permission(permission); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/social/RulesCommand.java b/paper/src/main/java/com/otfhee/paper/commands/social/RulesCommand.java new file mode 100644 index 0000000..ec7b904 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/social/RulesCommand.java @@ -0,0 +1,29 @@ +package com.otfhee.paper.commands.social; + +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.Plugin; +import com.otfhee.paper.commands.Command; +import dev.jorel.commandapi.CommandAPICommand; +import org.bukkit.permissions.Permission; + +public class RulesCommand implements Command { + private final String permission = "otfhee.default.rules"; + + @Override + public void onCommand() { + new CommandAPICommand("rules") + .withPermission(permission) + .executesPlayer((sender, args) -> { + Messenger messenger = Plugin.getAudienceMessenger(sender); + messenger.info("Ссылка на правила сервера " + + "тык"); + }) + .register(); + Plugin.getInstance().getLogger().info("RulesCommand successfully started."); + } + + @Override + public Permission getPermission() { + return new Permission(permission); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/social/SiteCommand.java b/paper/src/main/java/com/otfhee/paper/commands/social/SiteCommand.java new file mode 100644 index 0000000..7ebca5e --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/social/SiteCommand.java @@ -0,0 +1,29 @@ +package com.otfhee.paper.commands.social; + +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.Plugin; +import com.otfhee.paper.commands.Command; +import dev.jorel.commandapi.CommandAPICommand; +import org.bukkit.permissions.Permission; + +public class SiteCommand implements Command { + private final String permission = "otfhee.default.site"; + + @Override + public void onCommand() { + new CommandAPICommand("site") + .withPermission(permission) + .executesPlayer((sender, args) -> { + Messenger messenger = Plugin.getAudienceMessenger(sender); + messenger.info("Ссылка на сайт сервера " + + "тык"); + }) + .register(); + Plugin.getInstance().getLogger().info("SiteCommand successfully started."); + } + + @Override + public Permission getPermission() { + return new Permission(permission); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/social/TelegramCommand.java b/paper/src/main/java/com/otfhee/paper/commands/social/TelegramCommand.java new file mode 100644 index 0000000..ccc9795 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/social/TelegramCommand.java @@ -0,0 +1,30 @@ +package com.otfhee.paper.commands.social; + +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.Plugin; +import com.otfhee.paper.commands.Command; +import dev.jorel.commandapi.CommandAPICommand; +import org.bukkit.permissions.Permission; + +public class TelegramCommand implements Command { + private final String permission = "otfhee.default.telegram"; + + @Override + public void onCommand() { + new CommandAPICommand("telegram") + .withPermission(permission) + .withAliases("tg") + .executesPlayer((sender, args) -> { + Messenger messenger = Plugin.getAudienceMessenger(sender); + messenger.info("Ссылка на Telegram канал " + + "тык"); + }) + .register(); + Plugin.getInstance().getLogger().info("TelegramCommand successfully started."); + } + + @Override + public Permission getPermission() { + return new Permission(permission); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/commands/utils/PingCommand.java b/paper/src/main/java/com/otfhee/paper/commands/utils/PingCommand.java new file mode 100644 index 0000000..1da0344 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/commands/utils/PingCommand.java @@ -0,0 +1,29 @@ +package com.otfhee.paper.commands.utils; + +import com.otfhee.core.messaging.Messenger; +import com.otfhee.paper.Plugin; +import com.otfhee.paper.commands.Command; +import com.otfhee.paper.telemetry.PingTelemetry; +import dev.jorel.commandapi.CommandAPICommand; +import org.bukkit.permissions.Permission; + +public class PingCommand implements Command { + private final String permission = "otfhee.default.ping"; + + @Override + public void onCommand() { + new CommandAPICommand("ping") + .withPermission(permission) + .executesPlayer((sender, args) -> { + Messenger messenger = Plugin.getAudienceMessenger(sender); + messenger.info("Ваш пинг: " + PingTelemetry.getPing(sender.getPing())); + }) + .register(); + Plugin.getInstance().getLogger().info("PingCommand successfully started."); + } + + @Override + public Permission getPermission() { + return new Permission(permission); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/impl/CreatePlayerImpl.java b/paper/src/main/java/com/otfhee/paper/database/impl/CreatePlayerImpl.java index 4e2aaf4..22190af 100644 --- a/paper/src/main/java/com/otfhee/paper/database/impl/CreatePlayerImpl.java +++ b/paper/src/main/java/com/otfhee/paper/database/impl/CreatePlayerImpl.java @@ -1,7 +1,7 @@ package com.otfhee.paper.database.impl; import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.CreatePlayer; +import com.otfhee.paper.database.DatabaseItem; import org.bson.Document; import org.bukkit.entity.Player; import reactor.core.publisher.Mono; @@ -9,7 +9,7 @@ import java.util.Date; import java.util.List; -public class CreatePlayerImpl implements CreatePlayer { +public class CreatePlayerImpl implements DatabaseItem { private final String uuid; private final MongoCollection collection; From 555fa476ccc06911a5649be535a77002e568666d Mon Sep 17 00:00:00 2001 From: dangor Date: Fri, 17 Jan 2025 21:48:01 +0500 Subject: [PATCH 04/19] Update PlayerJoinLeaveListener.java --- .../otfhee/paper/commands/CommandLoader.java | 36 +++++++++---------- .../otfhee/paper/database/CreatePlayer.java | 4 --- .../listeners/PlayerJoinLeaveListener.java | 2 +- 3 files changed, 19 insertions(+), 23 deletions(-) delete mode 100644 paper/src/main/java/com/otfhee/paper/database/CreatePlayer.java diff --git a/paper/src/main/java/com/otfhee/paper/commands/CommandLoader.java b/paper/src/main/java/com/otfhee/paper/commands/CommandLoader.java index 4a38603..b03ad7b 100644 --- a/paper/src/main/java/com/otfhee/paper/commands/CommandLoader.java +++ b/paper/src/main/java/com/otfhee/paper/commands/CommandLoader.java @@ -15,32 +15,32 @@ import dev.jorel.commandapi.CommandAPI; public class CommandLoader implements Loader { - private final Command coin = new CoinCommand(); + private final Command coinCommand = new CoinCommand(); private final Command doCommand = new DoCommand(); - private final Command me = new MeCommand(); + private final Command meCommand = new MeCommand(); private final Command tryCommand = new TryCommand(); - private final Command globalMode = new GlobalModeCommand(); - private final Command privateMessages = new PrivateMessagesCommands(); - private final Command discord = new DiscordCommand(); - private final Command rules = new RulesCommand(); - private final Command site = new SiteCommand(); - private final Command telegram = new TelegramCommand(); - private final Command ping = new PingCommand(); + private final Command globalModeCommand = new GlobalModeCommand(); + private final Command privateMessagesCommands = new PrivateMessagesCommands(); + private final Command discordCommand = new DiscordCommand(); + private final Command rulesCommand = new RulesCommand(); + private final Command siteCommand = new SiteCommand(); + private final Command telegramCommand = new TelegramCommand(); + private final Command pingCommand = new PingCommand(); @Override public void load() { Plugin.getInstance().getLogger().info("Loading commands..."); CommandAPI.onEnable(); - coin.onCommand(); + coinCommand.onCommand(); doCommand.onCommand(); - me.onCommand(); + meCommand.onCommand(); tryCommand.onCommand(); - globalMode.onCommand(); - privateMessages.onCommand(); - discord.onCommand(); - rules.onCommand(); - site.onCommand(); - telegram.onCommand(); - ping.onCommand(); + globalModeCommand.onCommand(); + privateMessagesCommands.onCommand(); + discordCommand.onCommand(); + rulesCommand.onCommand(); + siteCommand.onCommand(); + telegramCommand.onCommand(); + pingCommand.onCommand(); } } diff --git a/paper/src/main/java/com/otfhee/paper/database/CreatePlayer.java b/paper/src/main/java/com/otfhee/paper/database/CreatePlayer.java deleted file mode 100644 index 4fb6965..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/CreatePlayer.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.otfhee.paper.database; - -public interface CreatePlayer extends DatabaseItem { -} diff --git a/paper/src/main/java/com/otfhee/paper/listeners/PlayerJoinLeaveListener.java b/paper/src/main/java/com/otfhee/paper/listeners/PlayerJoinLeaveListener.java index 14c9c93..34ed92e 100644 --- a/paper/src/main/java/com/otfhee/paper/listeners/PlayerJoinLeaveListener.java +++ b/paper/src/main/java/com/otfhee/paper/listeners/PlayerJoinLeaveListener.java @@ -25,7 +25,7 @@ public void onJoin(PlayerJoinEvent event) { .append(Component.text("Ссылка на Telegram канал тык")) .append(Component.text("Ссылка на приобретение " + PremiumHandler.onHandler() + " тык")) .build()); - plugin.createPlayer(player); + plugin.createPlayer(player).insertDefault().subscribe(); } event.joinMessage(Component.text() From 6b98777cb3f93d8872bf5a0b4f10388f78014fd9 Mon Sep 17 00:00:00 2001 From: dangor Date: Sat, 18 Jan 2025 01:30:56 +0500 Subject: [PATCH 05/19] Add Permissions system --- .../main/java/com/otfhee/paper/Plugin.java | 26 ++++-------- .../paper/permissions/DefaultPermission.java | 41 +++++++++++++++++++ .../otfhee/paper/permissions/Permission.java | 41 +++++++++++++++++++ 3 files changed, 89 insertions(+), 19 deletions(-) create mode 100644 paper/src/main/java/com/otfhee/paper/permissions/DefaultPermission.java create mode 100644 paper/src/main/java/com/otfhee/paper/permissions/Permission.java diff --git a/paper/src/main/java/com/otfhee/paper/Plugin.java b/paper/src/main/java/com/otfhee/paper/Plugin.java index 93ca20b..5c04df8 100644 --- a/paper/src/main/java/com/otfhee/paper/Plugin.java +++ b/paper/src/main/java/com/otfhee/paper/Plugin.java @@ -12,27 +12,15 @@ import com.otfhee.core.messaging.Messenger; import com.otfhee.paper.commands.CommandLoader; import com.otfhee.paper.commands.Loader; -import com.otfhee.paper.commands.action.DoCommand; -import com.otfhee.paper.commands.action.MeCommand; -import com.otfhee.paper.commands.action.TryCommand; -import com.otfhee.paper.commands.deprecated.*; -import com.otfhee.paper.commands.chat.GlobalModeCommand; -import com.otfhee.paper.commands.chat.PrivateMessagesCommands; -import com.otfhee.paper.commands.social.DiscordCommand; -import com.otfhee.paper.commands.social.RulesCommand; -import com.otfhee.paper.commands.social.SiteCommand; -import com.otfhee.paper.commands.social.TelegramCommand; -import com.otfhee.paper.commands.utils.PingCommand; import com.otfhee.paper.database.DatabaseItem; import com.otfhee.paper.database.impl.CreatePlayerImpl; import com.otfhee.paper.database.meta.PlayerMeta; import com.otfhee.paper.database.meta.impl.PlayerMetaImpl; import com.otfhee.paper.database.settings.PlayerSettings; import com.otfhee.paper.database.settings.impl.PlayerSettingsImpl; -import com.otfhee.paper.listeners.AntiGreefingListener; -import com.otfhee.paper.listeners.MoveListener; -import com.otfhee.paper.listeners.PlayerHeadDropListener; -import com.otfhee.paper.listeners.PlayerJoinLeaveListener; +import com.otfhee.paper.listeners.*; +import com.otfhee.paper.permissions.DefaultPermission; +import com.otfhee.paper.permissions.Permission; import com.otfhee.paper.schedulers.AutoRestart; import com.otfhee.paper.schedulers.CheckPremium; import com.otfhee.paper.schedulers.TabList; @@ -52,6 +40,7 @@ public final class Plugin extends JavaPlugin { private static final MiniMessage miniMessage = MiniMessage.miniMessage(); private static final Messenger messenger = Core.getMessenger(Bukkit.getServer()); private static final Loader commands = new CommandLoader(); + private static final Permission defaultPermission = new DefaultPermission(); private MongoDatabase database; private MongoCollection playersCollection; @@ -80,12 +69,11 @@ public void onEnable() { commands.load(); + defaultPermission.execute(this); + getServer().getPluginManager().registerEvents(new PlayerJoinLeaveListener(), this); getServer().getPluginManager().registerEvents(new PlayerHeadDropListener(), this); - getServer().getPluginManager().registerEvents(new AntiGreefingListener(), this); - getServer().getPluginManager().registerEvents(new MoveListener(), this); - getServer().getGlobalRegionScheduler().runAtFixedRate(this, scheduledTask -> new AutoRestart().run(), 1L, 20L); - getServer().getGlobalRegionScheduler().runAtFixedRate(this, scheduledTask -> new CheckPremium().run(), 1L, 20L); + getServer().getPluginManager().registerEvents(new AsyncChatListener(), this); getServer().getGlobalRegionScheduler().runAtFixedRate(this, scheduledTask -> new TabList().run(), 1L, 20L); } diff --git a/paper/src/main/java/com/otfhee/paper/permissions/DefaultPermission.java b/paper/src/main/java/com/otfhee/paper/permissions/DefaultPermission.java new file mode 100644 index 0000000..76e6b10 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/permissions/DefaultPermission.java @@ -0,0 +1,41 @@ +package com.otfhee.paper.permissions; + +import com.otfhee.paper.commands.action.CoinCommand; +import com.otfhee.paper.commands.action.DoCommand; +import com.otfhee.paper.commands.action.MeCommand; +import com.otfhee.paper.commands.action.TryCommand; +import com.otfhee.paper.commands.chat.GlobalModeCommand; +import com.otfhee.paper.commands.chat.PrivateMessagesCommands; +import com.otfhee.paper.commands.social.DiscordCommand; +import com.otfhee.paper.commands.social.RulesCommand; +import com.otfhee.paper.commands.social.SiteCommand; +import com.otfhee.paper.commands.social.TelegramCommand; +import com.otfhee.paper.commands.utils.PingCommand; + +import java.util.List; + +public class DefaultPermission extends Permission { + private final org.bukkit.permissions.Permission coinPermission = new CoinCommand().getPermission(); + private final org.bukkit.permissions.Permission doPermission = new DoCommand().getPermission(); + private final org.bukkit.permissions.Permission mePermission = new MeCommand().getPermission(); + private final org.bukkit.permissions.Permission tryPermission = new TryCommand().getPermission(); + private final org.bukkit.permissions.Permission globalModePermission = new GlobalModeCommand().getPermission(); + private final org.bukkit.permissions.Permission privateMessagesPermission = new PrivateMessagesCommands().getPermission(); + private final org.bukkit.permissions.Permission discordPermission = new DiscordCommand().getPermission(); + private final org.bukkit.permissions.Permission rulesPermission = new RulesCommand().getPermission(); + private final org.bukkit.permissions.Permission sitePermission = new SiteCommand().getPermission(); + private final org.bukkit.permissions.Permission telegramPermission = new TelegramCommand().getPermission(); + private final org.bukkit.permissions.Permission pingPermission = new PingCommand().getPermission(); + + @Override + public List getPermissions() { + return List.of(coinPermission, doPermission, mePermission, tryPermission, globalModePermission, + privateMessagesPermission, discordPermission, rulesPermission, sitePermission, telegramPermission, + pingPermission); + } + + @Override + public String getGroup() { + return "default"; + } +} diff --git a/paper/src/main/java/com/otfhee/paper/permissions/Permission.java b/paper/src/main/java/com/otfhee/paper/permissions/Permission.java new file mode 100644 index 0000000..f8054fb --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/permissions/Permission.java @@ -0,0 +1,41 @@ +package com.otfhee.paper.permissions; + +import com.otfhee.paper.Plugin; +import com.otfhee.paper.database.meta.impl.PlayerPermissionsImpl; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import reactor.core.publisher.Mono; + +import java.util.List; + +public abstract class Permission implements Runnable { + @Override + public void run() { + Plugin plugin = Plugin.getInstance(); + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + Mono> permissions = new PlayerPermissionsImpl(plugin.getPlayersCollection(), player).getPermissions(); + + permissions.subscribe(perm -> { + if (perm.contains(getGroup())) { + for (org.bukkit.permissions.Permission permission : getPermissions()) { + player.addAttachment(plugin, permission.getName(), true); + player.updateCommands(); + } + } else { + for (org.bukkit.permissions.Permission permission : getPermissions()) { + player.addAttachment(plugin, permission.getName(), false); + player.updateCommands(); + } + } + }); + } + } + + public void execute(@NotNull Plugin plugin) { + plugin.getServer().getGlobalRegionScheduler().runAtFixedRate(plugin, scheduledTask -> run(), 1L, 20L); + } + + abstract List getPermissions(); + abstract String getGroup(); +} From 08b796f66e8e18e55e99e82db99555ef6bf30d62 Mon Sep 17 00:00:00 2001 From: dangor Date: Tue, 21 Jan 2025 11:33:28 +0500 Subject: [PATCH 06/19] Update Database Structure --- .../main/java/com/otfhee/paper/Plugin.java | 33 +--- .../paper/database/PlayerFirstJoin.java | 10 -- .../otfhee/paper/database/PlayerLastJoin.java | 10 -- .../otfhee/paper/database/PlayerNotFound.java | 7 - .../paper/database/impl/CreatePlayerImpl.java | 49 ------ .../paper/database/meta/PlayerMeta.java | 14 -- .../paper/database/meta/PlayerPacks.java | 12 -- .../database/meta/PlayerPermissions.java | 12 -- .../paper/database/meta/PremiumDate.java | 11 -- .../paper/database/meta/impl/DaysImpl.java | 71 -------- .../database/meta/impl/PlayerMetaImpl.java | 67 ------- .../paper/database/meta/warns/Days.java | 9 - .../database/settings/PlayerParticle.java | 11 -- .../paper/database/settings/PlayerPrefix.java | 11 -- .../database/settings/PlayerSettings.java | 9 - .../paper/database/settings/PlayerStatus.java | 11 -- .../settings/impl/PlayerSettingsImpl.java | 48 ----- .../com/otfhee/paper/database/user/User.java | 164 ++++++++++++++++++ .../paper/database/user/UserNotFound.java | 7 + .../{meta/impl => user/meta}/FirstWarn.java | 24 ++- .../{meta/impl => user/meta}/SecondWarn.java | 24 ++- .../{meta/impl => user/meta}/ThirdWarn.java | 24 ++- .../paper/database/user/meta/UserMeta.java | 11 ++ .../meta/UserPacks.java} | 30 ++-- .../meta/UserPermissions.java} | 30 ++-- .../meta/UserPremiumDate.java} | 27 ++- .../{meta/warns => user/meta}/Warn.java | 6 +- .../paper/database/user/meta/Warns.java | 97 +++++++++++ .../settings/UserDisplayColor.java} | 25 ++- .../settings/UserGlobalMode.java} | 25 ++- .../settings/UserParticle.java} | 25 ++- .../settings/UserPrefix.java} | 25 ++- .../database/user/settings/UserSettings.java | 9 + .../settings/UserStatus.java} | 25 ++- .../stats/UserFirstJoin.java} | 25 ++- .../stats/UserLastJoin.java} | 25 ++- .../paper/database/user/stats/UserStats.java | 6 + 37 files changed, 451 insertions(+), 578 deletions(-) delete mode 100644 paper/src/main/java/com/otfhee/paper/database/PlayerFirstJoin.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/PlayerLastJoin.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/PlayerNotFound.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/impl/CreatePlayerImpl.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/meta/PlayerMeta.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/meta/PlayerPacks.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/meta/PlayerPermissions.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/meta/PremiumDate.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/meta/impl/DaysImpl.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerMetaImpl.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/meta/warns/Days.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/settings/PlayerParticle.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/settings/PlayerPrefix.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/settings/PlayerSettings.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/settings/PlayerStatus.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerSettingsImpl.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/user/User.java create mode 100644 paper/src/main/java/com/otfhee/paper/database/user/UserNotFound.java rename paper/src/main/java/com/otfhee/paper/database/{meta/impl => user/meta}/FirstWarn.java (83%) rename paper/src/main/java/com/otfhee/paper/database/{meta/impl => user/meta}/SecondWarn.java (83%) rename paper/src/main/java/com/otfhee/paper/database/{meta/impl => user/meta}/ThirdWarn.java (83%) create mode 100644 paper/src/main/java/com/otfhee/paper/database/user/meta/UserMeta.java rename paper/src/main/java/com/otfhee/paper/database/{meta/impl/PlayerPacksImpl.java => user/meta/UserPacks.java} (77%) rename paper/src/main/java/com/otfhee/paper/database/{meta/impl/PlayerPermissionsImpl.java => user/meta/UserPermissions.java} (77%) rename paper/src/main/java/com/otfhee/paper/database/{meta/impl/PremiumDateImpl.java => user/meta/UserPremiumDate.java} (72%) rename paper/src/main/java/com/otfhee/paper/database/{meta/warns => user/meta}/Warn.java (50%) create mode 100644 paper/src/main/java/com/otfhee/paper/database/user/meta/Warns.java rename paper/src/main/java/com/otfhee/paper/database/{settings/impl/DisplayColorImpl.java => user/settings/UserDisplayColor.java} (73%) rename paper/src/main/java/com/otfhee/paper/database/{settings/impl/GlobalModeImpl.java => user/settings/UserGlobalMode.java} (74%) rename paper/src/main/java/com/otfhee/paper/database/{settings/impl/PlayerParticleImpl.java => user/settings/UserParticle.java} (73%) rename paper/src/main/java/com/otfhee/paper/database/{settings/impl/PlayerPrefixImpl.java => user/settings/UserPrefix.java} (73%) create mode 100644 paper/src/main/java/com/otfhee/paper/database/user/settings/UserSettings.java rename paper/src/main/java/com/otfhee/paper/database/{settings/impl/PlayerStatusImpl.java => user/settings/UserStatus.java} (73%) rename paper/src/main/java/com/otfhee/paper/database/{impl/PlayerFirstJoinImpl.java => user/stats/UserFirstJoin.java} (72%) rename paper/src/main/java/com/otfhee/paper/database/{impl/PlayerLastJoinImpl.java => user/stats/UserLastJoin.java} (72%) create mode 100644 paper/src/main/java/com/otfhee/paper/database/user/stats/UserStats.java diff --git a/paper/src/main/java/com/otfhee/paper/Plugin.java b/paper/src/main/java/com/otfhee/paper/Plugin.java index 5c04df8..2a7e97c 100644 --- a/paper/src/main/java/com/otfhee/paper/Plugin.java +++ b/paper/src/main/java/com/otfhee/paper/Plugin.java @@ -11,25 +11,15 @@ import com.otfhee.core.Core; import com.otfhee.core.messaging.Messenger; import com.otfhee.paper.commands.CommandLoader; -import com.otfhee.paper.commands.Loader; -import com.otfhee.paper.database.DatabaseItem; -import com.otfhee.paper.database.impl.CreatePlayerImpl; -import com.otfhee.paper.database.meta.PlayerMeta; -import com.otfhee.paper.database.meta.impl.PlayerMetaImpl; -import com.otfhee.paper.database.settings.PlayerSettings; -import com.otfhee.paper.database.settings.impl.PlayerSettingsImpl; +import com.otfhee.paper.meta.permissions.PermissionsLoader; +import com.otfhee.paper.utils.Loader; import com.otfhee.paper.listeners.*; -import com.otfhee.paper.permissions.DefaultPermission; -import com.otfhee.paper.permissions.Permission; -import com.otfhee.paper.schedulers.AutoRestart; -import com.otfhee.paper.schedulers.CheckPremium; import com.otfhee.paper.schedulers.TabList; import dev.jorel.commandapi.CommandAPI; import net.kyori.adventure.audience.Audience; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bson.Document; import org.bukkit.Bukkit; -import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; @@ -39,8 +29,8 @@ public final class Plugin extends JavaPlugin { private static final MiniMessage miniMessage = MiniMessage.miniMessage(); private static final Messenger messenger = Core.getMessenger(Bukkit.getServer()); - private static final Loader commands = new CommandLoader(); - private static final Permission defaultPermission = new DefaultPermission(); + private final Loader commands = new CommandLoader(); + private final Loader permissions = new PermissionsLoader(this); private MongoDatabase database; private MongoCollection playersCollection; @@ -68,8 +58,7 @@ public void onEnable() { this.saveDefaultConfig(); commands.load(); - - defaultPermission.execute(this); + permissions.load(); getServer().getPluginManager().registerEvents(new PlayerJoinLeaveListener(), this); getServer().getPluginManager().registerEvents(new PlayerHeadDropListener(), this); @@ -107,16 +96,4 @@ public MongoDatabase getDatabase() { public MongoCollection getPlayersCollection() { return playersCollection; } - - public @NotNull DatabaseItem createPlayer(Player player) { - return new CreatePlayerImpl(playersCollection, player); - } - - public @NotNull PlayerSettings getPlayerSettings(Player player) { - return new PlayerSettingsImpl(playersCollection, player); - } - - public @NotNull PlayerMeta getPlayerMeta(Player player) { - return new PlayerMetaImpl(playersCollection, player); - } } diff --git a/paper/src/main/java/com/otfhee/paper/database/PlayerFirstJoin.java b/paper/src/main/java/com/otfhee/paper/database/PlayerFirstJoin.java deleted file mode 100644 index 6a550f6..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/PlayerFirstJoin.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.otfhee.paper.database; - -import reactor.core.publisher.Mono; - -import java.util.Date; - -public interface PlayerFirstJoin extends DatabaseItem { - Mono getDate(); - Mono setDate(Date date); -} diff --git a/paper/src/main/java/com/otfhee/paper/database/PlayerLastJoin.java b/paper/src/main/java/com/otfhee/paper/database/PlayerLastJoin.java deleted file mode 100644 index 2deec50..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/PlayerLastJoin.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.otfhee.paper.database; - -import reactor.core.publisher.Mono; - -import java.util.Date; - -public interface PlayerLastJoin extends DatabaseItem { - Mono getDate(); - Mono setDate(Date date); -} diff --git a/paper/src/main/java/com/otfhee/paper/database/PlayerNotFound.java b/paper/src/main/java/com/otfhee/paper/database/PlayerNotFound.java deleted file mode 100644 index a328a00..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/PlayerNotFound.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.otfhee.paper.database; - -public class PlayerNotFound extends RuntimeException { - public PlayerNotFound(Exception message) { - super("Player not found in database: " + message); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/impl/CreatePlayerImpl.java b/paper/src/main/java/com/otfhee/paper/database/impl/CreatePlayerImpl.java deleted file mode 100644 index 22190af..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/impl/CreatePlayerImpl.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.otfhee.paper.database.impl; - -import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.DatabaseItem; -import org.bson.Document; -import org.bukkit.entity.Player; -import reactor.core.publisher.Mono; - -import java.util.Date; -import java.util.List; - -public class CreatePlayerImpl implements DatabaseItem { - private final String uuid; - private final MongoCollection collection; - - public CreatePlayerImpl(MongoCollection collection, Player player) { - this.uuid = player.getUniqueId().toString(); - this.collection = collection; - } - - @Override - public Mono insertDefault() { - return Mono.defer(() -> { - Document objects = new Document(); - Date date = new Date(); - - objects.append("_id", uuid); - objects.append("first-join", date); - objects.append("last-join", date); - objects.append("settings", new Document("global-mode", false) - .append("display-color", "DEFAULT") - .append("particle", "DEFAULT") - .append("prefix", "DEFAULT") - .append("status", "ONLINE")); - objects.append("meta", new Document("premium-date", null) - .append("permissions", List.of("default")) - .append("packs", List.of("default")) - .append("warns", new Document("days", 0) - .append("first", new Document("days", 0) - .append("reason", null)) - .append("second", new Document("days", 0) - .append("reason", null)) - .append("third", new Document("days", 0) - .append("reason", null)))); - - return Mono.from(collection.insertOne(objects)).then(); - }); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/PlayerMeta.java b/paper/src/main/java/com/otfhee/paper/database/meta/PlayerMeta.java deleted file mode 100644 index b44f3ab..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/meta/PlayerMeta.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.otfhee.paper.database.meta; - -import com.otfhee.paper.database.meta.warns.Days; -import com.otfhee.paper.database.meta.warns.Warn; - -public interface PlayerMeta { - PremiumDate getPremiumDate(); - PlayerPermissions getPlayerPermissions(); - PlayerPacks getPlayerPacks(); - Days getDays(); - Warn getFirstWarn(); - Warn getSecondWarn(); - Warn getThirdWarn(); -} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/PlayerPacks.java b/paper/src/main/java/com/otfhee/paper/database/meta/PlayerPacks.java deleted file mode 100644 index 90310b2..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/meta/PlayerPacks.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.otfhee.paper.database.meta; - -import com.otfhee.paper.database.DatabaseItem; -import reactor.core.publisher.Mono; - -import java.util.List; - -public interface PlayerPacks extends DatabaseItem { - Mono> getPacks(); - Mono addPack(String pack); - Mono deletePack(String pack); -} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/PlayerPermissions.java b/paper/src/main/java/com/otfhee/paper/database/meta/PlayerPermissions.java deleted file mode 100644 index f8b29fe..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/meta/PlayerPermissions.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.otfhee.paper.database.meta; - -import com.otfhee.paper.database.DatabaseItem; -import reactor.core.publisher.Mono; - -import java.util.List; - -public interface PlayerPermissions extends DatabaseItem { - Mono> getPermissions(); - Mono addPermission(String permission); - Mono deletePermission(String permission); -} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/PremiumDate.java b/paper/src/main/java/com/otfhee/paper/database/meta/PremiumDate.java deleted file mode 100644 index 7c460d2..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/meta/PremiumDate.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.otfhee.paper.database.meta; - -import com.otfhee.paper.database.DatabaseItem; -import reactor.core.publisher.Mono; - -import java.util.Date; - -public interface PremiumDate extends DatabaseItem { - Mono getDate(); - Mono setDate(Date date); -} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/impl/DaysImpl.java b/paper/src/main/java/com/otfhee/paper/database/meta/impl/DaysImpl.java deleted file mode 100644 index 7b6e82c..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/meta/impl/DaysImpl.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.otfhee.paper.database.meta.impl; - -import com.mongodb.client.model.Filters; -import com.mongodb.reactivestreams.client.FindPublisher; -import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.PlayerNotFound; -import com.otfhee.paper.database.meta.warns.Days; -import org.bson.Document; -import org.bson.conversions.Bson; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import reactor.core.publisher.Mono; - -public class DaysImpl implements Days { - private final MongoCollection collection; - private final FindPublisher found; - private final Mono DEFAULT = Mono.just(0); - private final String KEY = "days"; - private final String uuid; - - public DaysImpl(@NotNull MongoCollection collection, @NotNull Player player) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = collection - .find(Filters.eq("_id", uuid)); - } - - @Override - public Mono getDays() { - try { - return Mono.from(found) - .flatMap(x -> { - Document meta = (Document) x.get("meta"); - Document warns = (Document) meta.get("warns"); - return Mono.just(warns.getInteger(KEY)); - }); - } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); - } - } - - @Override - public Mono setDays(int days) { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("meta.warns." + KEY, days); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); - } - }); - } - - @Override - public Mono insertDefault() { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("meta.warns." + KEY, DEFAULT); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); - } - }); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerMetaImpl.java b/paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerMetaImpl.java deleted file mode 100644 index 7bcd18a..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerMetaImpl.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.otfhee.paper.database.meta.impl; - -import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.meta.PlayerMeta; -import com.otfhee.paper.database.meta.PlayerPacks; -import com.otfhee.paper.database.meta.PlayerPermissions; -import com.otfhee.paper.database.meta.PremiumDate; -import com.otfhee.paper.database.meta.warns.Days; -import com.otfhee.paper.database.meta.warns.Warn; -import org.bson.Document; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class PlayerMetaImpl implements PlayerMeta { - private final PremiumDate premiumDate; - private final PlayerPermissions playerPermissions; - private final PlayerPacks playerPacks; - private final Days days; - private final Warn firstWarn; - private final Warn secondWarn; - private final Warn thirdWarn; - - public PlayerMetaImpl(@NotNull MongoCollection collection, @NotNull Player player) { - this.premiumDate = new PremiumDateImpl(collection, player); - this.playerPermissions = new PlayerPermissionsImpl(collection, player); - this.playerPacks = new PlayerPacksImpl(collection, player); - this.days = new DaysImpl(collection, player); - this.firstWarn = new FirstWarn(collection, player); - this.secondWarn = new SecondWarn(collection, player); - this.thirdWarn = new ThirdWarn(collection, player); - } - - @Override - public PremiumDate getPremiumDate() { - return premiumDate; - } - - @Override - public PlayerPermissions getPlayerPermissions() { - return playerPermissions; - } - - @Override - public PlayerPacks getPlayerPacks() { - return playerPacks; - } - - @Override - public Days getDays() { - return days; - } - - @Override - public Warn getFirstWarn() { - return firstWarn; - } - - @Override - public Warn getSecondWarn() { - return secondWarn; - } - - @Override - public Warn getThirdWarn() { - return thirdWarn; - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/warns/Days.java b/paper/src/main/java/com/otfhee/paper/database/meta/warns/Days.java deleted file mode 100644 index 80b66df..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/meta/warns/Days.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.otfhee.paper.database.meta.warns; - -import com.otfhee.paper.database.DatabaseItem; -import reactor.core.publisher.Mono; - -public interface Days extends DatabaseItem { - Mono getDays(); - Mono setDays(int days); -} diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/PlayerParticle.java b/paper/src/main/java/com/otfhee/paper/database/settings/PlayerParticle.java deleted file mode 100644 index 1874f3e..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/settings/PlayerParticle.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.otfhee.paper.database.settings; - -import com.otfhee.paper.database.DatabaseItem; -import reactor.core.publisher.Mono; - -public interface PlayerParticle extends DatabaseItem { - default Mono getParticle() { - return Mono.just("DEFAULT"); - }; - Mono setParticle(String particle); -} diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/PlayerPrefix.java b/paper/src/main/java/com/otfhee/paper/database/settings/PlayerPrefix.java deleted file mode 100644 index 8c49355..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/settings/PlayerPrefix.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.otfhee.paper.database.settings; - -import com.otfhee.paper.database.DatabaseItem; -import reactor.core.publisher.Mono; - -public interface PlayerPrefix extends DatabaseItem { - default Mono getPrefix() { - return Mono.just("DEFAULT"); - }; - Mono setPrefix(String prefix); -} diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/PlayerSettings.java b/paper/src/main/java/com/otfhee/paper/database/settings/PlayerSettings.java deleted file mode 100644 index 2839130..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/settings/PlayerSettings.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.otfhee.paper.database.settings; - -public interface PlayerSettings { - GlobalMode getGlobalMode(); - DisplayColor getDisplayColor(); - PlayerParticle getPlayerParticle(); - PlayerPrefix getPlayerPrefix(); - PlayerStatus getPlayerStatus(); -} diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/PlayerStatus.java b/paper/src/main/java/com/otfhee/paper/database/settings/PlayerStatus.java deleted file mode 100644 index 9be3ad9..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/settings/PlayerStatus.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.otfhee.paper.database.settings; - -import com.otfhee.paper.database.DatabaseItem; -import reactor.core.publisher.Mono; - -public interface PlayerStatus extends DatabaseItem { - default Mono getStatus() { - return Mono.just("ONLINE"); - }; - Mono setStatus(String status); -} diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerSettingsImpl.java b/paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerSettingsImpl.java deleted file mode 100644 index 9cd3792..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerSettingsImpl.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.otfhee.paper.database.settings.impl; - -import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.settings.*; -import org.bson.Document; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class PlayerSettingsImpl implements PlayerSettings{ - private final DisplayColor displayColor; - private final GlobalMode globalMode; - private final PlayerParticle playerParticle; - private final PlayerPrefix playerPrefix; - private final PlayerStatus playerStatus; - - public PlayerSettingsImpl(@NotNull MongoCollection collection, @NotNull Player player) { - this.displayColor = new DisplayColorImpl(collection, player); - this.globalMode = new GlobalModeImpl(collection, player); - this.playerParticle = new PlayerParticleImpl(collection, player); - this.playerPrefix = new PlayerPrefixImpl(collection, player); - this.playerStatus = new PlayerStatusImpl(collection, player); - } - - @Override - public GlobalMode getGlobalMode() { - return globalMode; - } - - @Override - public DisplayColor getDisplayColor() { - return displayColor; - } - - @Override - public PlayerParticle getPlayerParticle() { - return playerParticle; - } - - @Override - public PlayerPrefix getPlayerPrefix() { - return playerPrefix; - } - - @Override - public PlayerStatus getPlayerStatus() { - return playerStatus; - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/User.java b/paper/src/main/java/com/otfhee/paper/database/user/User.java new file mode 100644 index 0000000..1537076 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/user/User.java @@ -0,0 +1,164 @@ +package com.otfhee.paper.database.user; + +import com.mongodb.client.model.Filters; +import com.mongodb.reactivestreams.client.FindPublisher; +import com.mongodb.reactivestreams.client.MongoCollection; +import com.otfhee.paper.Plugin; +import com.otfhee.paper.database.user.meta.*; +import com.otfhee.paper.database.user.settings.*; +import com.otfhee.paper.database.user.stats.UserFirstJoin; +import com.otfhee.paper.database.user.stats.UserLastJoin; +import com.otfhee.paper.database.user.stats.UserStats; +import org.bson.Document; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import reactor.core.publisher.Mono; + +import java.util.Date; +import java.util.List; + +public class User implements UserStats, UserSettings, UserMeta { + private final MongoCollection collection; + private final String uuid; + private final FindPublisher found; + private final UserFirstJoin userFirstJoin; + private final UserLastJoin userLastJoin; + private final UserDisplayColor userDisplayColor; + private final UserGlobalMode userGlobalMode; + private final UserParticle userParticle; + private final UserPrefix userPrefix; + private final UserStatus userStatus; + private final UserPacks userPacks; + private final UserPermissions userPermissions; + private final UserPremiumDate userPremiumDate; + private final Warns warns; + private final FirstWarn firstWarn; + private final SecondWarn secondWarn; + private final ThirdWarn thirdWarn; + + public User(@NotNull OfflinePlayer player) { + this.uuid = player.getUniqueId().toString(); + this.collection = Plugin.getInstance().getPlayersCollection(); + this.found = collection.find(Filters.eq("_id", uuid)); + this.userFirstJoin = new UserFirstJoin(collection, (Player) player, found); + this.userLastJoin = new UserLastJoin(collection, (Player) player, found); + this.userDisplayColor = new UserDisplayColor(collection, (Player) player, found); + this.userGlobalMode = new UserGlobalMode(collection, (Player) player, found); + this.userParticle = new UserParticle(collection, (Player) player, found); + this.userPrefix = new UserPrefix(collection, (Player) player, found); + this.userStatus = new UserStatus(collection, (Player) player, found); + this.userPacks = new UserPacks(collection, (Player) player, found); + this.userPermissions = new UserPermissions(collection, (Player) player, found); + this.userPremiumDate = new UserPremiumDate(collection, (Player) player, found); + this.warns = new Warns(collection, (Player) player, found); + this.firstWarn = new FirstWarn(collection, (Player) player, found); + this.secondWarn = new SecondWarn(collection, (Player) player, found); + this.thirdWarn = new ThirdWarn(collection, (Player) player, found); + } + + public Mono create() { + return Mono.defer(() -> { + Document objects = new Document(); + Date date = new Date(); + + objects.append("_id", uuid); + objects.append("first-join", date); + objects.append("last-join", date); + objects.append("settings", new Document("global-mode", false) + .append("display-color", "DEFAULT") + .append("particle", "DEFAULT") + .append("prefix", "DEFAULT") + .append("status", "ONLINE")); + objects.append("meta", new Document("premium-date", "") + .append("permissions", List.of("default")) + .append("packs", List.of("default")) + .append("warns", new Document("days", 0) + .append("reason", "") + .append("first", new Document("days", 0) + .append("reason", "")) + .append("second", new Document("days", 0) + .append("reason", "")) + .append("third", new Document("days", 0) + .append("reason", "")))); + + return Mono.from(collection.insertOne(objects)).then(); + }); + } + + public Mono exist() { + return Mono.from(found) + .flatMap(x -> Mono.just(true)) + .defaultIfEmpty(false); + } + + @Override + public UserFirstJoin getUserFirstJoin() { + return userFirstJoin; + } + + @Override + public UserLastJoin getUserLastJoin() { + return userLastJoin; + } + + @Override + public UserGlobalMode getUserGlobalMode() { + return userGlobalMode; + } + + @Override + public UserDisplayColor getUserDisplayColor() { + return userDisplayColor; + } + + @Override + public UserParticle getUserParticle() { + return userParticle; + } + + @Override + public UserPrefix getUserPrefix() { + return userPrefix; + } + + @Override + public UserStatus getUserStatus() { + return userStatus; + } + + @Override + public UserPremiumDate getUserPremiumDate() { + return userPremiumDate; + } + + @Override + public UserPermissions getUserPermissions() { + return userPermissions; + } + + @Override + public UserPacks getUserPacks() { + return userPacks; + } + + @Override + public Warn getWarns() { + return warns; + } + + @Override + public Warn getFirstWarn() { + return firstWarn; + } + + @Override + public Warn getSecondWarn() { + return secondWarn; + } + + @Override + public Warn getThirdWarn() { + return thirdWarn; + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/UserNotFound.java b/paper/src/main/java/com/otfhee/paper/database/user/UserNotFound.java new file mode 100644 index 0000000..f23cdde --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/user/UserNotFound.java @@ -0,0 +1,7 @@ +package com.otfhee.paper.database.user; + +public class UserNotFound extends RuntimeException { + public UserNotFound(Exception message) { + super("User not found in database: " + message); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/impl/FirstWarn.java b/paper/src/main/java/com/otfhee/paper/database/user/meta/FirstWarn.java similarity index 83% rename from paper/src/main/java/com/otfhee/paper/database/meta/impl/FirstWarn.java rename to paper/src/main/java/com/otfhee/paper/database/user/meta/FirstWarn.java index 879490d..7c76316 100644 --- a/paper/src/main/java/com/otfhee/paper/database/meta/impl/FirstWarn.java +++ b/paper/src/main/java/com/otfhee/paper/database/user/meta/FirstWarn.java @@ -1,10 +1,9 @@ -package com.otfhee.paper.database.meta.impl; +package com.otfhee.paper.database.user.meta; import com.mongodb.client.model.Filters; import com.mongodb.reactivestreams.client.FindPublisher; import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.PlayerNotFound; -import com.otfhee.paper.database.meta.warns.Warn; +import com.otfhee.paper.database.user.UserNotFound; import org.bson.Document; import org.bson.conversions.Bson; import org.bukkit.entity.Player; @@ -16,11 +15,10 @@ public class FirstWarn implements Warn { private final FindPublisher found; private final String uuid; - public FirstWarn(@NotNull MongoCollection collection, @NotNull Player player) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = collection - .find(Filters.eq("_id", uuid)); + public FirstWarn(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = found; } @Override @@ -34,7 +32,7 @@ public Mono getReason() { return Mono.just(first.getString("reason")); }); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } } @@ -48,7 +46,7 @@ public Mono setReason(String reason) { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } @@ -64,7 +62,7 @@ public Mono getDays() { return Mono.just(first.getInteger("days")); }); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } } @@ -78,7 +76,7 @@ public Mono setDays(int days) { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } @@ -94,7 +92,7 @@ public Mono insertDefault() { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/impl/SecondWarn.java b/paper/src/main/java/com/otfhee/paper/database/user/meta/SecondWarn.java similarity index 83% rename from paper/src/main/java/com/otfhee/paper/database/meta/impl/SecondWarn.java rename to paper/src/main/java/com/otfhee/paper/database/user/meta/SecondWarn.java index 21295ff..179dc6e 100644 --- a/paper/src/main/java/com/otfhee/paper/database/meta/impl/SecondWarn.java +++ b/paper/src/main/java/com/otfhee/paper/database/user/meta/SecondWarn.java @@ -1,10 +1,9 @@ -package com.otfhee.paper.database.meta.impl; +package com.otfhee.paper.database.user.meta; import com.mongodb.client.model.Filters; import com.mongodb.reactivestreams.client.FindPublisher; import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.PlayerNotFound; -import com.otfhee.paper.database.meta.warns.Warn; +import com.otfhee.paper.database.user.UserNotFound; import org.bson.Document; import org.bson.conversions.Bson; import org.bukkit.entity.Player; @@ -16,11 +15,10 @@ public class SecondWarn implements Warn { private final FindPublisher found; private final String uuid; - public SecondWarn(@NotNull MongoCollection collection, @NotNull Player player) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = collection - .find(Filters.eq("_id", uuid)); + public SecondWarn(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = found; } @Override @@ -34,7 +32,7 @@ public Mono getReason() { return Mono.just(second.getString("reason")); }); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } } @@ -48,7 +46,7 @@ public Mono setReason(String reason) { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } @@ -64,7 +62,7 @@ public Mono getDays() { return Mono.just(second.getInteger("days")); }); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } } @@ -78,7 +76,7 @@ public Mono setDays(int days) { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } @@ -94,7 +92,7 @@ public Mono insertDefault() { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/impl/ThirdWarn.java b/paper/src/main/java/com/otfhee/paper/database/user/meta/ThirdWarn.java similarity index 83% rename from paper/src/main/java/com/otfhee/paper/database/meta/impl/ThirdWarn.java rename to paper/src/main/java/com/otfhee/paper/database/user/meta/ThirdWarn.java index 348743b..e2c81e4 100644 --- a/paper/src/main/java/com/otfhee/paper/database/meta/impl/ThirdWarn.java +++ b/paper/src/main/java/com/otfhee/paper/database/user/meta/ThirdWarn.java @@ -1,10 +1,9 @@ -package com.otfhee.paper.database.meta.impl; +package com.otfhee.paper.database.user.meta; import com.mongodb.client.model.Filters; import com.mongodb.reactivestreams.client.FindPublisher; import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.PlayerNotFound; -import com.otfhee.paper.database.meta.warns.Warn; +import com.otfhee.paper.database.user.UserNotFound; import org.bson.Document; import org.bson.conversions.Bson; import org.bukkit.entity.Player; @@ -16,11 +15,10 @@ public class ThirdWarn implements Warn { private final FindPublisher found; private final String uuid; - public ThirdWarn(@NotNull MongoCollection collection, @NotNull Player player) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = collection - .find(Filters.eq("_id", uuid)); + public ThirdWarn(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = found; } @Override @@ -34,7 +32,7 @@ public Mono getReason() { return Mono.just(third.getString("reason")); }); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } } @@ -48,7 +46,7 @@ public Mono setReason(String reason) { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } @@ -64,7 +62,7 @@ public Mono getDays() { return Mono.just(third.getInteger("days")); }); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } } @@ -78,7 +76,7 @@ public Mono setDays(int days) { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } @@ -94,7 +92,7 @@ public Mono insertDefault() { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } diff --git a/paper/src/main/java/com/otfhee/paper/database/user/meta/UserMeta.java b/paper/src/main/java/com/otfhee/paper/database/user/meta/UserMeta.java new file mode 100644 index 0000000..ae87706 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/user/meta/UserMeta.java @@ -0,0 +1,11 @@ +package com.otfhee.paper.database.user.meta; + +public interface UserMeta { + UserPremiumDate getUserPremiumDate(); + UserPermissions getUserPermissions(); + UserPacks getUserPacks(); + Warn getWarns(); + Warn getFirstWarn(); + Warn getSecondWarn(); + Warn getThirdWarn(); +} diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerPacksImpl.java b/paper/src/main/java/com/otfhee/paper/database/user/meta/UserPacks.java similarity index 77% rename from paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerPacksImpl.java rename to paper/src/main/java/com/otfhee/paper/database/user/meta/UserPacks.java index 09ab487..265d280 100644 --- a/paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerPacksImpl.java +++ b/paper/src/main/java/com/otfhee/paper/database/user/meta/UserPacks.java @@ -1,10 +1,10 @@ -package com.otfhee.paper.database.meta.impl; +package com.otfhee.paper.database.user.meta; import com.mongodb.client.model.Filters; import com.mongodb.reactivestreams.client.FindPublisher; import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.PlayerNotFound; -import com.otfhee.paper.database.meta.PlayerPacks; +import com.otfhee.paper.database.DatabaseItem; +import com.otfhee.paper.database.user.UserNotFound; import org.bson.Document; import org.bson.conversions.Bson; import org.bukkit.entity.Player; @@ -13,21 +13,19 @@ import java.util.List; -public class PlayerPacksImpl implements PlayerPacks { +public class UserPacks implements DatabaseItem { private final MongoCollection collection; private final FindPublisher found; private final Mono> DEFAULT = Mono.just(List.of("default")); private final String KEY = "packs"; private final String uuid; - public PlayerPacksImpl(@NotNull MongoCollection collection, @NotNull Player player) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = collection - .find(Filters.eq("_id", uuid)); + public UserPacks(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = found; } - @Override public Mono> getPacks() { try { return Mono.from(found) @@ -36,11 +34,10 @@ public Mono> getPacks() { return Mono.just(meta.getList(KEY, String.class)); }); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } } - @Override public Mono addPack(String pack) { return Mono.defer(() -> { try { @@ -55,13 +52,12 @@ public Mono addPack(String pack) { .then(); }); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } - @Override - public Mono deletePack(String pack) { + public Mono removePack(String pack) { return Mono.defer(() -> { try { return getPacks() @@ -75,7 +71,7 @@ public Mono deletePack(String pack) { .then(); }); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } @@ -90,7 +86,7 @@ public Mono insertDefault() { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerPermissionsImpl.java b/paper/src/main/java/com/otfhee/paper/database/user/meta/UserPermissions.java similarity index 77% rename from paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerPermissionsImpl.java rename to paper/src/main/java/com/otfhee/paper/database/user/meta/UserPermissions.java index e9457a1..0a4b0e0 100644 --- a/paper/src/main/java/com/otfhee/paper/database/meta/impl/PlayerPermissionsImpl.java +++ b/paper/src/main/java/com/otfhee/paper/database/user/meta/UserPermissions.java @@ -1,10 +1,10 @@ -package com.otfhee.paper.database.meta.impl; +package com.otfhee.paper.database.user.meta; import com.mongodb.client.model.Filters; import com.mongodb.reactivestreams.client.FindPublisher; import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.PlayerNotFound; -import com.otfhee.paper.database.meta.PlayerPermissions; +import com.otfhee.paper.database.DatabaseItem; +import com.otfhee.paper.database.user.UserNotFound; import org.bson.Document; import org.bson.conversions.Bson; import org.bukkit.entity.Player; @@ -13,21 +13,19 @@ import java.util.List; -public class PlayerPermissionsImpl implements PlayerPermissions { +public class UserPermissions implements DatabaseItem { private final MongoCollection collection; private final FindPublisher found; private final Mono> DEFAULT = Mono.just(List.of("default")); private final String KEY = "permissions"; private final String uuid; - public PlayerPermissionsImpl(@NotNull MongoCollection collection, @NotNull Player player) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = collection - .find(Filters.eq("_id", uuid)); + public UserPermissions(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = found; } - @Override public Mono> getPermissions() { try { return Mono.from(found) @@ -36,11 +34,10 @@ public Mono> getPermissions() { return Mono.just(meta.getList(KEY, String.class)); }); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } } - @Override public Mono addPermission(String permission) { return Mono.defer(() -> { try { @@ -55,13 +52,12 @@ public Mono addPermission(String permission) { .then(); }); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } - @Override - public Mono deletePermission(String permission) { + public Mono removePermission(String permission) { return Mono.defer(() -> { try { return getPermissions() @@ -75,7 +71,7 @@ public Mono deletePermission(String permission) { .then(); }); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } @@ -90,7 +86,7 @@ public Mono insertDefault() { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/impl/PremiumDateImpl.java b/paper/src/main/java/com/otfhee/paper/database/user/meta/UserPremiumDate.java similarity index 72% rename from paper/src/main/java/com/otfhee/paper/database/meta/impl/PremiumDateImpl.java rename to paper/src/main/java/com/otfhee/paper/database/user/meta/UserPremiumDate.java index 9459c85..69cd74e 100644 --- a/paper/src/main/java/com/otfhee/paper/database/meta/impl/PremiumDateImpl.java +++ b/paper/src/main/java/com/otfhee/paper/database/user/meta/UserPremiumDate.java @@ -1,10 +1,10 @@ -package com.otfhee.paper.database.meta.impl; +package com.otfhee.paper.database.user.meta; import com.mongodb.client.model.Filters; import com.mongodb.reactivestreams.client.FindPublisher; import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.PlayerNotFound; -import com.otfhee.paper.database.meta.PremiumDate; +import com.otfhee.paper.database.DatabaseItem; +import com.otfhee.paper.database.user.UserNotFound; import org.bson.Document; import org.bson.conversions.Bson; import org.bukkit.entity.Player; @@ -13,20 +13,18 @@ import java.util.Date; -public class PremiumDateImpl implements PremiumDate { +public class UserPremiumDate implements DatabaseItem { private final MongoCollection collection; private final FindPublisher found; private final String KEY = "premium-date"; private final String uuid; - public PremiumDateImpl(@NotNull MongoCollection collection, @NotNull Player player) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = collection - .find(Filters.eq("_id", uuid)); + public UserPremiumDate(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = found; } - @Override public Mono getDate() { try { return Mono.from(found) @@ -35,11 +33,10 @@ public Mono getDate() { return Mono.just(settings.getDate(KEY)); }); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } } - @Override public Mono setDate(Date date) { return Mono.defer(() -> { try { @@ -49,7 +46,7 @@ public Mono setDate(Date date) { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } @@ -58,13 +55,13 @@ public Mono setDate(Date date) { public Mono insertDefault() { return Mono.defer(() -> { try { - Bson updatedValue = new Document("meta." + KEY, null); + Bson updatedValue = new Document("meta." + KEY, ""); Bson updateOperation = new Document("$set", updatedValue); return Mono.from(collection.updateOne(Filters.eq("_id", uuid), updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } diff --git a/paper/src/main/java/com/otfhee/paper/database/meta/warns/Warn.java b/paper/src/main/java/com/otfhee/paper/database/user/meta/Warn.java similarity index 50% rename from paper/src/main/java/com/otfhee/paper/database/meta/warns/Warn.java rename to paper/src/main/java/com/otfhee/paper/database/user/meta/Warn.java index 419515e..f650315 100644 --- a/paper/src/main/java/com/otfhee/paper/database/meta/warns/Warn.java +++ b/paper/src/main/java/com/otfhee/paper/database/user/meta/Warn.java @@ -1,9 +1,11 @@ -package com.otfhee.paper.database.meta.warns; +package com.otfhee.paper.database.user.meta; import com.otfhee.paper.database.DatabaseItem; import reactor.core.publisher.Mono; -public interface Warn extends DatabaseItem, Days { +public interface Warn extends DatabaseItem { + Mono getDays(); + Mono setDays(int days); Mono getReason(); Mono setReason(String reason); } diff --git a/paper/src/main/java/com/otfhee/paper/database/user/meta/Warns.java b/paper/src/main/java/com/otfhee/paper/database/user/meta/Warns.java new file mode 100644 index 0000000..c6757d2 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/user/meta/Warns.java @@ -0,0 +1,97 @@ +package com.otfhee.paper.database.user.meta; + +import com.mongodb.client.model.Filters; +import com.mongodb.reactivestreams.client.FindPublisher; +import com.mongodb.reactivestreams.client.MongoCollection; +import com.otfhee.paper.database.user.UserNotFound; +import org.bson.Document; +import org.bson.conversions.Bson; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import reactor.core.publisher.Mono; + +public class Warns implements Warn { + private final MongoCollection collection; + private final FindPublisher found; + private final String uuid; + + public Warns(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = found; + } + + @Override + public Mono getDays() { + try { + return Mono.from(found) + .flatMap(x -> { + Document meta = (Document) x.get("meta"); + Document warns = (Document) meta.get("warns"); + return Mono.just(warns.getInteger("days")); + }); + } catch (Exception e) { + return Mono.error(new UserNotFound(e)); + } + } + + @Override + public Mono setDays(int days) { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("meta.warns.days", days); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new UserNotFound(e)); + } + }); + } + + @Override + public Mono getReason() { + try { + return Mono.from(found) + .flatMap(x -> { + Document meta = (Document) x.get("meta"); + Document warns = (Document) meta.get("warns"); + return Mono.just(warns.getString("reason")); + }); + } catch (Exception e) { + return Mono.error(new UserNotFound(e)); + } + } + + @Override + public Mono setReason(String reason) { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("meta.warns.reason", reason); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new UserNotFound(e)); + } + }); + } + + @Override + public Mono insertDefault() { + return Mono.defer(() -> { + try { + Bson updatedValue = new Document("meta.warns.days", 0) + .append("meta.warns.reason", ""); + Bson updateOperation = new Document("$set", updatedValue); + return Mono.from(collection.updateOne(Filters.eq("_id", uuid), + updateOperation)) + .then(); + } catch (Exception e) { + return Mono.error(new UserNotFound(e)); + } + }); + } +} diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/impl/DisplayColorImpl.java b/paper/src/main/java/com/otfhee/paper/database/user/settings/UserDisplayColor.java similarity index 73% rename from paper/src/main/java/com/otfhee/paper/database/settings/impl/DisplayColorImpl.java rename to paper/src/main/java/com/otfhee/paper/database/user/settings/UserDisplayColor.java index aa3b96c..729e7e9 100644 --- a/paper/src/main/java/com/otfhee/paper/database/settings/impl/DisplayColorImpl.java +++ b/paper/src/main/java/com/otfhee/paper/database/user/settings/UserDisplayColor.java @@ -1,31 +1,29 @@ -package com.otfhee.paper.database.settings.impl; +package com.otfhee.paper.database.user.settings; import com.mongodb.client.model.Filters; import com.mongodb.reactivestreams.client.FindPublisher; import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.PlayerNotFound; -import com.otfhee.paper.database.settings.DisplayColor; +import com.otfhee.paper.database.DatabaseItem; +import com.otfhee.paper.database.user.UserNotFound; import org.bson.Document; import org.bson.conversions.Bson; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import reactor.core.publisher.Mono; -public class DisplayColorImpl implements DisplayColor { +public class UserDisplayColor implements DatabaseItem { private final MongoCollection collection; private final FindPublisher found; private final Mono DEFAULT = Mono.just(""); private final String KEY = "display-color"; private final String uuid; - public DisplayColorImpl(@NotNull MongoCollection collection, @NotNull Player player) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = collection - .find(Filters.eq("_id", uuid)); + public UserDisplayColor(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = found; } - @Override public Mono getColor() { try { return Mono.from(found) @@ -34,11 +32,10 @@ public Mono getColor() { return Mono.just(settings.getString(KEY)); }); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } } - @Override public Mono setColor(String color) { return Mono.defer(() -> { try { @@ -48,7 +45,7 @@ public Mono setColor(String color) { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } @@ -63,7 +60,7 @@ public Mono insertDefault() { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/impl/GlobalModeImpl.java b/paper/src/main/java/com/otfhee/paper/database/user/settings/UserGlobalMode.java similarity index 74% rename from paper/src/main/java/com/otfhee/paper/database/settings/impl/GlobalModeImpl.java rename to paper/src/main/java/com/otfhee/paper/database/user/settings/UserGlobalMode.java index 978c52a..9946fc9 100644 --- a/paper/src/main/java/com/otfhee/paper/database/settings/impl/GlobalModeImpl.java +++ b/paper/src/main/java/com/otfhee/paper/database/user/settings/UserGlobalMode.java @@ -1,31 +1,29 @@ -package com.otfhee.paper.database.settings.impl; +package com.otfhee.paper.database.user.settings; import com.mongodb.client.model.Filters; import com.mongodb.reactivestreams.client.FindPublisher; import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.PlayerNotFound; -import com.otfhee.paper.database.settings.GlobalMode; +import com.otfhee.paper.database.DatabaseItem; +import com.otfhee.paper.database.user.UserNotFound; import org.bson.Document; import org.bson.conversions.Bson; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import reactor.core.publisher.Mono; -public class GlobalModeImpl implements GlobalMode { +public class UserGlobalMode implements DatabaseItem { private final MongoCollection collection; private final FindPublisher found; private final Mono DEFAULT = Mono.just(false); private final String KEY = "global-mode"; private final String uuid; - public GlobalModeImpl(MongoCollection collection, @NotNull Player player) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = collection - .find(Filters.eq("_id", uuid)); + public UserGlobalMode(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = found; } - @Override public Mono getGlobalMode() { return Mono.from(found) .flatMap(x -> { @@ -33,12 +31,11 @@ public Mono getGlobalMode() { Document settings = (Document) x.get("settings"); return Mono.just(settings.getBoolean(KEY)); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } - @Override public Mono setGlobalMode(boolean value) { return Mono.defer(() -> { try { @@ -49,7 +46,7 @@ public Mono setGlobalMode(boolean value) { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } @@ -65,7 +62,7 @@ public Mono insertDefault() { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerParticleImpl.java b/paper/src/main/java/com/otfhee/paper/database/user/settings/UserParticle.java similarity index 73% rename from paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerParticleImpl.java rename to paper/src/main/java/com/otfhee/paper/database/user/settings/UserParticle.java index e9d4590..f4fff61 100644 --- a/paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerParticleImpl.java +++ b/paper/src/main/java/com/otfhee/paper/database/user/settings/UserParticle.java @@ -1,31 +1,29 @@ -package com.otfhee.paper.database.settings.impl; +package com.otfhee.paper.database.user.settings; import com.mongodb.client.model.Filters; import com.mongodb.reactivestreams.client.FindPublisher; import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.PlayerNotFound; -import com.otfhee.paper.database.settings.PlayerParticle; +import com.otfhee.paper.database.DatabaseItem; +import com.otfhee.paper.database.user.UserNotFound; import org.bson.Document; import org.bson.conversions.Bson; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import reactor.core.publisher.Mono; -public class PlayerParticleImpl implements PlayerParticle { +public class UserParticle implements DatabaseItem { private final MongoCollection collection; private final FindPublisher found; private final Mono DEFAULT = Mono.just("DEFAULT"); private final String KEY = "particle"; private final String uuid; - public PlayerParticleImpl(@NotNull MongoCollection collection, @NotNull Player player) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = collection - .find(Filters.eq("_id", uuid)); + public UserParticle(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = found; } - @Override public Mono getParticle() { try { return Mono.from(found) @@ -34,11 +32,10 @@ public Mono getParticle() { return Mono.just(settings.getString(KEY)); }); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } } - @Override public Mono setParticle(String particle) { return Mono.defer(() -> { try { @@ -48,7 +45,7 @@ public Mono setParticle(String particle) { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } @@ -63,7 +60,7 @@ public Mono insertDefault() { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerPrefixImpl.java b/paper/src/main/java/com/otfhee/paper/database/user/settings/UserPrefix.java similarity index 73% rename from paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerPrefixImpl.java rename to paper/src/main/java/com/otfhee/paper/database/user/settings/UserPrefix.java index f8e04a6..ef24cf5 100644 --- a/paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerPrefixImpl.java +++ b/paper/src/main/java/com/otfhee/paper/database/user/settings/UserPrefix.java @@ -1,31 +1,29 @@ -package com.otfhee.paper.database.settings.impl; +package com.otfhee.paper.database.user.settings; import com.mongodb.client.model.Filters; import com.mongodb.reactivestreams.client.FindPublisher; import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.PlayerNotFound; -import com.otfhee.paper.database.settings.PlayerPrefix; +import com.otfhee.paper.database.DatabaseItem; +import com.otfhee.paper.database.user.UserNotFound; import org.bson.Document; import org.bson.conversions.Bson; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import reactor.core.publisher.Mono; -public class PlayerPrefixImpl implements PlayerPrefix { +public class UserPrefix implements DatabaseItem { private final MongoCollection collection; private final FindPublisher found; private final Mono DEFAULT = Mono.just("DEFAULT"); private final String KEY = "prefix"; private final String uuid; - public PlayerPrefixImpl(@NotNull MongoCollection collection, @NotNull Player player) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = collection - .find(Filters.eq("_id", uuid)); + public UserPrefix(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = found; } - @Override public Mono getPrefix() { try { return Mono.from(found) @@ -34,11 +32,10 @@ public Mono getPrefix() { return Mono.just(settings.getString(KEY)); }); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } } - @Override public Mono setPrefix(String prefix) { return Mono.defer(() -> { try { @@ -48,7 +45,7 @@ public Mono setPrefix(String prefix) { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } @@ -62,7 +59,7 @@ public Mono insertDefault() { return Mono.from(collection.updateOne(Filters.eq("_id", uuid), updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } diff --git a/paper/src/main/java/com/otfhee/paper/database/user/settings/UserSettings.java b/paper/src/main/java/com/otfhee/paper/database/user/settings/UserSettings.java new file mode 100644 index 0000000..ca6d551 --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/user/settings/UserSettings.java @@ -0,0 +1,9 @@ +package com.otfhee.paper.database.user.settings; + +public interface UserSettings { + UserGlobalMode getUserGlobalMode(); + UserDisplayColor getUserDisplayColor(); + UserParticle getUserParticle(); + UserPrefix getUserPrefix(); + UserStatus getUserStatus(); +} diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerStatusImpl.java b/paper/src/main/java/com/otfhee/paper/database/user/settings/UserStatus.java similarity index 73% rename from paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerStatusImpl.java rename to paper/src/main/java/com/otfhee/paper/database/user/settings/UserStatus.java index 7981ea6..aa6e1b8 100644 --- a/paper/src/main/java/com/otfhee/paper/database/settings/impl/PlayerStatusImpl.java +++ b/paper/src/main/java/com/otfhee/paper/database/user/settings/UserStatus.java @@ -1,31 +1,29 @@ -package com.otfhee.paper.database.settings.impl; +package com.otfhee.paper.database.user.settings; import com.mongodb.client.model.Filters; import com.mongodb.reactivestreams.client.FindPublisher; import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.PlayerNotFound; -import com.otfhee.paper.database.settings.PlayerStatus; +import com.otfhee.paper.database.DatabaseItem; +import com.otfhee.paper.database.user.UserNotFound; import org.bson.Document; import org.bson.conversions.Bson; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import reactor.core.publisher.Mono; -public class PlayerStatusImpl implements PlayerStatus { +public class UserStatus implements DatabaseItem { private final MongoCollection collection; private final FindPublisher found; private final Mono DEFAULT = Mono.just("ONLINE"); private final String KEY = "status"; private final String uuid; - public PlayerStatusImpl(@NotNull MongoCollection collection, @NotNull Player player) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = collection - .find(Filters.eq("_id", uuid)); + public UserStatus(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = found; } - @Override public Mono getStatus() { try { return Mono.from(found) @@ -34,11 +32,10 @@ public Mono getStatus() { return Mono.just(settings.getString(KEY)); }); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } } - @Override public Mono setStatus(String status) { return Mono.defer(() -> { try { @@ -48,7 +45,7 @@ public Mono setStatus(String status) { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } @@ -62,7 +59,7 @@ public Mono insertDefault() { return Mono.from(collection.updateOne((Bson) found, updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } diff --git a/paper/src/main/java/com/otfhee/paper/database/impl/PlayerFirstJoinImpl.java b/paper/src/main/java/com/otfhee/paper/database/user/stats/UserFirstJoin.java similarity index 72% rename from paper/src/main/java/com/otfhee/paper/database/impl/PlayerFirstJoinImpl.java rename to paper/src/main/java/com/otfhee/paper/database/user/stats/UserFirstJoin.java index 7121ec5..1e2bf5c 100644 --- a/paper/src/main/java/com/otfhee/paper/database/impl/PlayerFirstJoinImpl.java +++ b/paper/src/main/java/com/otfhee/paper/database/user/stats/UserFirstJoin.java @@ -1,10 +1,10 @@ -package com.otfhee.paper.database.impl; +package com.otfhee.paper.database.user.stats; import com.mongodb.client.model.Filters; import com.mongodb.reactivestreams.client.FindPublisher; import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.PlayerFirstJoin; -import com.otfhee.paper.database.PlayerNotFound; +import com.otfhee.paper.database.DatabaseItem; +import com.otfhee.paper.database.user.UserNotFound; import org.bson.Document; import org.bson.conversions.Bson; import org.bukkit.entity.Player; @@ -13,7 +13,7 @@ import java.util.Date; -public class PlayerFirstJoinImpl implements PlayerFirstJoin { +public class UserFirstJoin implements DatabaseItem { private final Date date = new Date(); private final MongoCollection collection; @@ -22,24 +22,21 @@ public class PlayerFirstJoinImpl implements PlayerFirstJoin { private final String KEY = "first-join"; private final String uuid; - public PlayerFirstJoinImpl(@NotNull MongoCollection collection, @NotNull Player player) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = collection - .find(Filters.eq("_id", uuid)); + public UserFirstJoin(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = found; } - @Override public Mono getDate() { try { return Mono.from(found) .flatMap(x -> Mono.just(x.getDate(KEY))); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } } - @Override public Mono setDate(Date date) { return Mono.defer(() -> { try { @@ -49,7 +46,7 @@ public Mono setDate(Date date) { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } @@ -64,7 +61,7 @@ public Mono insertDefault() { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } diff --git a/paper/src/main/java/com/otfhee/paper/database/impl/PlayerLastJoinImpl.java b/paper/src/main/java/com/otfhee/paper/database/user/stats/UserLastJoin.java similarity index 72% rename from paper/src/main/java/com/otfhee/paper/database/impl/PlayerLastJoinImpl.java rename to paper/src/main/java/com/otfhee/paper/database/user/stats/UserLastJoin.java index d2f188c..a98a3e6 100644 --- a/paper/src/main/java/com/otfhee/paper/database/impl/PlayerLastJoinImpl.java +++ b/paper/src/main/java/com/otfhee/paper/database/user/stats/UserLastJoin.java @@ -1,10 +1,10 @@ -package com.otfhee.paper.database.impl; +package com.otfhee.paper.database.user.stats; import com.mongodb.client.model.Filters; import com.mongodb.reactivestreams.client.FindPublisher; import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.PlayerLastJoin; -import com.otfhee.paper.database.PlayerNotFound; +import com.otfhee.paper.database.DatabaseItem; +import com.otfhee.paper.database.user.UserNotFound; import org.bson.Document; import org.bson.conversions.Bson; import org.bukkit.entity.Player; @@ -13,7 +13,7 @@ import java.util.Date; -public class PlayerLastJoinImpl implements PlayerLastJoin { +public class UserLastJoin implements DatabaseItem { private final Date date = new Date(); private final MongoCollection collection; @@ -22,24 +22,21 @@ public class PlayerLastJoinImpl implements PlayerLastJoin { private final String KEY = "last-join"; private final String uuid; - public PlayerLastJoinImpl(@NotNull MongoCollection collection, @NotNull Player player) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = collection - .find(Filters.eq("_id", uuid)); + public UserLastJoin(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { + this.collection = collection; + this.uuid = player.getUniqueId().toString(); + this.found = found; } - @Override public Mono getDate() { try { return Mono.from(found) .flatMap(x -> Mono.just(x.getDate(KEY))); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } } - @Override public Mono setDate(Date date) { return Mono.defer(() -> { try { @@ -49,7 +46,7 @@ public Mono setDate(Date date) { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } @@ -64,7 +61,7 @@ public Mono insertDefault() { updateOperation)) .then(); } catch (Exception e) { - return Mono.error(new PlayerNotFound(e)); + return Mono.error(new UserNotFound(e)); } }); } diff --git a/paper/src/main/java/com/otfhee/paper/database/user/stats/UserStats.java b/paper/src/main/java/com/otfhee/paper/database/user/stats/UserStats.java new file mode 100644 index 0000000..9d6552c --- /dev/null +++ b/paper/src/main/java/com/otfhee/paper/database/user/stats/UserStats.java @@ -0,0 +1,6 @@ +package com.otfhee.paper.database.user.stats; + +public interface UserStats { + UserFirstJoin getUserFirstJoin(); + UserLastJoin getUserLastJoin(); +} From 3633940df22ef43a8c9045f59e7fb827a1349e8c Mon Sep 17 00:00:00 2001 From: dangor Date: Tue, 21 Jan 2025 11:34:11 +0500 Subject: [PATCH 07/19] Update Database Structure --- .../otfhee/paper/database/settings/DisplayColor.java | 11 ----------- .../otfhee/paper/database/settings/GlobalMode.java | 11 ----------- 2 files changed, 22 deletions(-) delete mode 100644 paper/src/main/java/com/otfhee/paper/database/settings/DisplayColor.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/settings/GlobalMode.java diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/DisplayColor.java b/paper/src/main/java/com/otfhee/paper/database/settings/DisplayColor.java deleted file mode 100644 index bd8e2b4..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/settings/DisplayColor.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.otfhee.paper.database.settings; - -import com.otfhee.paper.database.DatabaseItem; -import reactor.core.publisher.Mono; - -public interface DisplayColor extends DatabaseItem { - default Mono getColor() { - return Mono.just(""); - }; - Mono setColor(String color); -} diff --git a/paper/src/main/java/com/otfhee/paper/database/settings/GlobalMode.java b/paper/src/main/java/com/otfhee/paper/database/settings/GlobalMode.java deleted file mode 100644 index eb33d5a..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/settings/GlobalMode.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.otfhee.paper.database.settings; - -import com.otfhee.paper.database.DatabaseItem; -import reactor.core.publisher.Mono; - -public interface GlobalMode extends DatabaseItem { - default Mono getGlobalMode() { - return Mono.just(false); - }; - Mono setGlobalMode(boolean value); -} From cf2fc7a8c1f37a1c3c35e8621a0da6ad0c474d0a Mon Sep 17 00:00:00 2001 From: dangor Date: Sun, 23 Feb 2025 17:42:02 +0500 Subject: [PATCH 08/19] Migrate to Kotlin and more updates --- build.gradle | 1 + core/build.gradle | 13 -- core/src/main/java/com/otfhee/core/Core.java | 12 -- .../com/otfhee/core/messaging/Message.java | 9 - .../otfhee/core/messaging/MessageTypes.java | 27 --- .../com/otfhee/core/messaging/Messenger.java | 14 -- .../otfhee/core/messaging/SystemMessages.java | 70 -------- paper/build.gradle | 36 ++-- .../main/java/com/otfhee/paper/Plugin.java | 99 ----------- .../com/otfhee/paper/commands/Command.java | 8 - .../otfhee/paper/commands/CommandLoader.java | 46 ----- .../com/otfhee/paper/commands/Loader.java | 5 - .../paper/commands/action/CoinCommand.java | 34 ---- .../paper/commands/action/DoCommand.java | 29 ---- .../paper/commands/action/MeCommand.java | 36 ---- .../paper/commands/action/TryCommand.java | 39 ----- .../paper/commands/action/random/Coin.java | 5 - .../paper/commands/action/random/Try.java | 5 - .../commands/chat/GlobalModeCommand.java | 45 ----- .../chat/PrivateMessagesCommands.java | 64 ------- .../commands/deprecated/ItemCommand.java | 47 ----- .../commands/deprecated/NOTDCommand.java | 31 ---- .../commands/deprecated/NicknameCommand.java | 74 -------- .../commands/deprecated/ParticleCommand.java | 44 ----- .../commands/deprecated/PrefixCommand.java | 42 ----- .../commands/deprecated/PremiumCommand.java | 88 ---------- .../commands/deprecated/StaffCommand.java | 41 ----- .../paper/commands/social/DiscordCommand.java | 30 ---- .../paper/commands/social/RulesCommand.java | 29 ---- .../paper/commands/social/SiteCommand.java | 29 ---- .../commands/social/TelegramCommand.java | 30 ---- .../paper/commands/utils/PingCommand.java | 29 ---- .../otfhee/paper/database/DatabaseItem.java | 7 - .../com/otfhee/paper/database/user/User.java | 164 ------------------ .../paper/database/user/UserNotFound.java | 7 - .../paper/database/user/meta/FirstWarn.java | 99 ----------- .../paper/database/user/meta/SecondWarn.java | 99 ----------- .../paper/database/user/meta/ThirdWarn.java | 99 ----------- .../paper/database/user/meta/UserMeta.java | 11 -- .../paper/database/user/meta/UserPacks.java | 93 ---------- .../database/user/meta/UserPermissions.java | 93 ---------- .../database/user/meta/UserPremiumDate.java | 68 -------- .../otfhee/paper/database/user/meta/Warn.java | 11 -- .../paper/database/user/meta/Warns.java | 97 ----------- .../user/settings/UserDisplayColor.java | 67 ------- .../user/settings/UserGlobalMode.java | 69 -------- .../database/user/settings/UserParticle.java | 67 ------- .../database/user/settings/UserPrefix.java | 66 ------- .../database/user/settings/UserSettings.java | 9 - .../database/user/settings/UserStatus.java | 66 ------- .../database/user/stats/UserFirstJoin.java | 68 -------- .../database/user/stats/UserLastJoin.java | 68 -------- .../paper/database/user/stats/UserStats.java | 6 - .../otfhee/paper/handlers/ChatHandler.java | 145 ---------------- .../com/otfhee/paper/handlers/ChatType.java | 7 - .../otfhee/paper/handlers/ColorHandler.java | 19 -- .../com/otfhee/paper/handlers/ColorType.java | 31 ---- .../paper/handlers/ParticleHandler.java | 10 -- .../otfhee/paper/handlers/ParticleType.java | 8 - .../com/otfhee/paper/handlers/PrefixType.java | 29 ---- .../otfhee/paper/handlers/PremiumHandler.java | 7 - .../com/otfhee/paper/handlers/RateType.java | 18 -- .../paper/listeners/AntiGreefingListener.java | 38 ---- .../paper/listeners/AsyncChatListener.java | 43 ----- .../otfhee/paper/listeners/MoveListener.java | 24 --- .../listeners/PlayerHeadDropListener.java | 35 ---- .../listeners/PlayerJoinLeaveListener.java | 46 ----- .../paper/permissions/DefaultPermission.java | 41 ----- .../otfhee/paper/permissions/Permission.java | 41 ----- .../otfhee/paper/schedulers/AutoRestart.java | 70 -------- .../otfhee/paper/schedulers/CheckPremium.java | 27 --- .../com/otfhee/paper/schedulers/TabList.java | 33 ---- .../otfhee/paper/telemetry/PingTelemetry.java | 21 --- .../otfhee/paper/telemetry/TPSTelemetry.java | 29 ---- .../main/kotlin/com/otfhee/paper/Plugin.kt | 131 ++++++++++++++ .../com/otfhee/paper/commands/GuildCommand.kt | 16 ++ .../paper/commands/action/CoinCommand.kt | 37 ++++ .../otfhee/paper/commands/action/DoCommand.kt | 23 +++ .../otfhee/paper/commands/action/MeCommand.kt | 25 +++ .../paper/commands/action/TryCommand.kt | 48 +++++ .../paper/commands/chat/GlobalModeCommand.kt | 30 ++++ .../commands/chat/PrivateMessagesCommand.kt | 92 ++++++++++ .../paper/commands/display/DisplayColor.kt | 71 ++++++++ .../paper/commands/display/DisplayCommand.kt | 15 ++ .../paper/commands/display/DisplayPrefix.kt | 91 ++++++++++ .../paper/commands/security/BanCommand.kt | 117 +++++++++++++ .../paper/commands/security/UnbanCommand.kt | 58 +++++++ .../paper/commands/social/DiscordCommand.kt | 18 ++ .../paper/commands/social/RulesCommand.kt | 17 ++ .../paper/commands/social/SiteCommand.kt | 17 ++ .../paper/commands/social/TelegramCommand.kt | 18 ++ .../paper/commands/util/LanguageCommand.kt | 33 ++++ .../otfhee/paper/commands/util/PingCommand.kt | 25 +++ .../paper/commands/util/StatusCommand.kt | 48 +++++ .../com/otfhee/paper/database/ban/Ban.kt | 62 +++++++ .../com/otfhee/paper/database/ban/BanInfo.kt | 24 +++ .../com/otfhee/paper/database/ban/Bans.kt | 11 ++ .../com/otfhee/paper/database/user/User.kt | 50 ++++++ .../otfhee/paper/database/user/UserStatus.kt | 7 + .../com/otfhee/paper/database/user/Users.kt | 14 ++ .../com/otfhee/paper/display/Display.kt | 5 + .../com/otfhee/paper/display/DisplayName.kt | 36 ++++ .../com/otfhee/paper/display/DisplayStatus.kt | 22 +++ .../com/otfhee/paper/display/DisplayWorld.kt | 17 ++ .../paper/listeners/AntiGriefListener.kt | 87 ++++++++++ .../otfhee/paper/listeners/AnvilListener.kt | 34 ++++ .../com/otfhee/paper/listeners/BanListener.kt | 25 +++ .../otfhee/paper/listeners/ChatListener.kt | 120 +++++++++++++ .../otfhee/paper/listeners/LoginListener.kt | 56 ++++++ .../otfhee/paper/listeners/StatusListener.kt | 80 +++++++++ .../com/otfhee/paper/messenger/MessageType.kt | 8 + .../com/otfhee/paper/messenger/Messenger.kt | 80 +++++++++ .../otfhee/paper/schedulers/AutoRestart.kt | 48 +++++ .../schedulers/PlayerHeadDropListener.kt | 53 ++++++ .../com/otfhee/paper/schedulers/PlayerList.kt | 42 +++++ .../otfhee/paper/telemetry/PingTelemetry.kt | 35 ++++ .../otfhee/paper/telemetry/TPSTelemetry.kt | 18 ++ .../com/otfhee/paper/telemetry/Telemetry.kt | 5 + .../kotlin/com/otfhee/paper/utils/AfkUtil.kt | 39 +++++ .../kotlin/com/otfhee/paper/utils/BanUtil.kt | 139 +++++++++++++++ .../com/otfhee/paper/utils/LanguageUtil.kt | 140 +++++++++++++++ .../kotlin/com/otfhee/paper/utils/TimeUnit.kt | 7 + paper/src/main/resources/config.yml | 51 +++++- .../resources/language/english.properties | 0 .../resources/language/russian.properties | 0 .../resources/languages/english.properties | 48 +++++ .../resources/languages/russian.properties | 48 +++++ paper/src/main/resources/paper-plugin.yml | 4 + 128 files changed, 2365 insertions(+), 3147 deletions(-) delete mode 100644 core/build.gradle delete mode 100644 core/src/main/java/com/otfhee/core/Core.java delete mode 100644 core/src/main/java/com/otfhee/core/messaging/Message.java delete mode 100644 core/src/main/java/com/otfhee/core/messaging/MessageTypes.java delete mode 100644 core/src/main/java/com/otfhee/core/messaging/Messenger.java delete mode 100644 core/src/main/java/com/otfhee/core/messaging/SystemMessages.java delete mode 100644 paper/src/main/java/com/otfhee/paper/Plugin.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/Command.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/CommandLoader.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/Loader.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/action/CoinCommand.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/action/DoCommand.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/action/MeCommand.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/action/TryCommand.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/action/random/Coin.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/action/random/Try.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/chat/GlobalModeCommand.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/chat/PrivateMessagesCommands.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/deprecated/ItemCommand.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/deprecated/NOTDCommand.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/deprecated/NicknameCommand.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/deprecated/ParticleCommand.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/deprecated/PrefixCommand.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/deprecated/PremiumCommand.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/deprecated/StaffCommand.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/social/DiscordCommand.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/social/RulesCommand.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/social/SiteCommand.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/social/TelegramCommand.java delete mode 100644 paper/src/main/java/com/otfhee/paper/commands/utils/PingCommand.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/DatabaseItem.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/user/User.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/user/UserNotFound.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/user/meta/FirstWarn.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/user/meta/SecondWarn.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/user/meta/ThirdWarn.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/user/meta/UserMeta.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/user/meta/UserPacks.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/user/meta/UserPermissions.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/user/meta/UserPremiumDate.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/user/meta/Warn.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/user/meta/Warns.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/user/settings/UserDisplayColor.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/user/settings/UserGlobalMode.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/user/settings/UserParticle.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/user/settings/UserPrefix.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/user/settings/UserSettings.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/user/settings/UserStatus.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/user/stats/UserFirstJoin.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/user/stats/UserLastJoin.java delete mode 100644 paper/src/main/java/com/otfhee/paper/database/user/stats/UserStats.java delete mode 100644 paper/src/main/java/com/otfhee/paper/handlers/ChatHandler.java delete mode 100644 paper/src/main/java/com/otfhee/paper/handlers/ChatType.java delete mode 100644 paper/src/main/java/com/otfhee/paper/handlers/ColorHandler.java delete mode 100644 paper/src/main/java/com/otfhee/paper/handlers/ColorType.java delete mode 100644 paper/src/main/java/com/otfhee/paper/handlers/ParticleHandler.java delete mode 100644 paper/src/main/java/com/otfhee/paper/handlers/ParticleType.java delete mode 100644 paper/src/main/java/com/otfhee/paper/handlers/PrefixType.java delete mode 100644 paper/src/main/java/com/otfhee/paper/handlers/PremiumHandler.java delete mode 100644 paper/src/main/java/com/otfhee/paper/handlers/RateType.java delete mode 100644 paper/src/main/java/com/otfhee/paper/listeners/AntiGreefingListener.java delete mode 100644 paper/src/main/java/com/otfhee/paper/listeners/AsyncChatListener.java delete mode 100644 paper/src/main/java/com/otfhee/paper/listeners/MoveListener.java delete mode 100644 paper/src/main/java/com/otfhee/paper/listeners/PlayerHeadDropListener.java delete mode 100644 paper/src/main/java/com/otfhee/paper/listeners/PlayerJoinLeaveListener.java delete mode 100644 paper/src/main/java/com/otfhee/paper/permissions/DefaultPermission.java delete mode 100644 paper/src/main/java/com/otfhee/paper/permissions/Permission.java delete mode 100644 paper/src/main/java/com/otfhee/paper/schedulers/AutoRestart.java delete mode 100644 paper/src/main/java/com/otfhee/paper/schedulers/CheckPremium.java delete mode 100644 paper/src/main/java/com/otfhee/paper/schedulers/TabList.java delete mode 100644 paper/src/main/java/com/otfhee/paper/telemetry/PingTelemetry.java delete mode 100644 paper/src/main/java/com/otfhee/paper/telemetry/TPSTelemetry.java create mode 100644 paper/src/main/kotlin/com/otfhee/paper/Plugin.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/commands/GuildCommand.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/commands/action/CoinCommand.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/commands/action/DoCommand.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/commands/action/MeCommand.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/commands/action/TryCommand.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/commands/chat/GlobalModeCommand.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/commands/chat/PrivateMessagesCommand.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/commands/display/DisplayColor.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/commands/display/DisplayCommand.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/commands/display/DisplayPrefix.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/commands/security/BanCommand.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/commands/security/UnbanCommand.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/commands/social/DiscordCommand.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/commands/social/RulesCommand.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/commands/social/SiteCommand.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/commands/social/TelegramCommand.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/commands/util/LanguageCommand.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/commands/util/PingCommand.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/commands/util/StatusCommand.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/database/ban/Ban.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/database/ban/BanInfo.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/database/ban/Bans.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/database/user/User.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/database/user/UserStatus.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/database/user/Users.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/display/Display.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/display/DisplayName.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/display/DisplayStatus.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/display/DisplayWorld.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/listeners/AntiGriefListener.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/listeners/AnvilListener.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/listeners/BanListener.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/listeners/ChatListener.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/listeners/LoginListener.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/listeners/StatusListener.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/messenger/MessageType.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/messenger/Messenger.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/schedulers/AutoRestart.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/schedulers/PlayerHeadDropListener.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/schedulers/PlayerList.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/telemetry/PingTelemetry.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/telemetry/TPSTelemetry.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/telemetry/Telemetry.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/utils/AfkUtil.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/utils/BanUtil.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/utils/LanguageUtil.kt create mode 100644 paper/src/main/kotlin/com/otfhee/paper/utils/TimeUnit.kt delete mode 100644 paper/src/main/resources/language/english.properties delete mode 100644 paper/src/main/resources/language/russian.properties create mode 100644 paper/src/main/resources/languages/english.properties create mode 100644 paper/src/main/resources/languages/russian.properties diff --git a/build.gradle b/build.gradle index 9fd04f6..d9b2636 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,7 @@ plugins { id 'com.github.johnrengelman.shadow' version '8.1.1' id 'io.papermc.paperweight.userdev' version '2.0.0-beta.11' apply false + id 'org.jetbrains.kotlin.jvm' version '2.1.10' apply false } subprojects { diff --git a/core/build.gradle b/core/build.gradle deleted file mode 100644 index 62c6fc5..0000000 --- a/core/build.gradle +++ /dev/null @@ -1,13 +0,0 @@ -plugins { - id 'java-library' -} - -repositories { - mavenCentral() -} - -dependencies { - implementation 'net.kyori:adventure-api:4.17.0' - implementation 'net.kyori:adventure-text-minimessage:4.17.0' - implementation 'org.mongodb:mongodb-driver-sync:5.2.1' -} \ No newline at end of file diff --git a/core/src/main/java/com/otfhee/core/Core.java b/core/src/main/java/com/otfhee/core/Core.java deleted file mode 100644 index d952fcb..0000000 --- a/core/src/main/java/com/otfhee/core/Core.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.otfhee.core; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.core.messaging.SystemMessages; -import net.kyori.adventure.audience.Audience; -import org.jetbrains.annotations.NotNull; - -public final class Core { - public static @NotNull Messenger getMessenger(Audience audience) { - return new SystemMessages(audience); - } -} diff --git a/core/src/main/java/com/otfhee/core/messaging/Message.java b/core/src/main/java/com/otfhee/core/messaging/Message.java deleted file mode 100644 index b32fca3..0000000 --- a/core/src/main/java/com/otfhee/core/messaging/Message.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.otfhee.core.messaging; - -import net.kyori.adventure.text.Component; -import org.jetbrains.annotations.NotNull; - -public interface Message { - @NotNull Component message(MessageTypes type, String message); - @NotNull Component message(MessageTypes type, Component message); -} diff --git a/core/src/main/java/com/otfhee/core/messaging/MessageTypes.java b/core/src/main/java/com/otfhee/core/messaging/MessageTypes.java deleted file mode 100644 index 4a158c4..0000000 --- a/core/src/main/java/com/otfhee/core/messaging/MessageTypes.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.otfhee.core.messaging; - -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.minimessage.MiniMessage; - -public enum MessageTypes { - INFO("[i]"), - SUCCESS("[]"), - WARNING("[]"), - ERROR("[]"); - - private final String type; - private final MiniMessage miniMessage = MiniMessage.miniMessage(); - - MessageTypes(String type) { - this.type = type; - } - - @Override - public String toString() { - return type; - } - - public Component toComponent() { - return miniMessage.deserialize(type); - } -} diff --git a/core/src/main/java/com/otfhee/core/messaging/Messenger.java b/core/src/main/java/com/otfhee/core/messaging/Messenger.java deleted file mode 100644 index 8880859..0000000 --- a/core/src/main/java/com/otfhee/core/messaging/Messenger.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.otfhee.core.messaging; - -import net.kyori.adventure.text.Component; - -public interface Messenger extends Message { - void info(String message); - void info(Component message); - void warning(String message); - void warning(Component message); - void error(String message); - void error(Component message); - void success(String message); - void success(Component message); -} diff --git a/core/src/main/java/com/otfhee/core/messaging/SystemMessages.java b/core/src/main/java/com/otfhee/core/messaging/SystemMessages.java deleted file mode 100644 index 0accbf9..0000000 --- a/core/src/main/java/com/otfhee/core/messaging/SystemMessages.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.otfhee.core.messaging; - -import net.kyori.adventure.audience.Audience; -import net.kyori.adventure.audience.ForwardingAudience; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.minimessage.MiniMessage; -import org.jetbrains.annotations.NotNull; - -public class SystemMessages implements Messenger { - private final Audience audience; - private final MiniMessage miniMessage = MiniMessage.miniMessage(); - - public SystemMessages(Audience audience) { - this.audience = audience; - } - - @Override - public void info(String message) { - audience.sendMessage(this.message(MessageTypes.INFO, message)); - } - - @Override - public void info(Component message) { - audience.sendMessage(this.message(MessageTypes.INFO, message)); - } - - @Override - public void warning(String message) { - audience.sendMessage(this.message(MessageTypes.WARNING, message)); - } - - @Override - public void warning(Component message) { - audience.sendMessage(this.message(MessageTypes.WARNING, message)); - } - - @Override - public void error(String message) { - audience.sendMessage(this.message(MessageTypes.ERROR, message)); - } - - @Override - public void error(Component message) { - audience.sendMessage(this.message(MessageTypes.ERROR, message)); - } - - @Override - public void success(String message) { - audience.sendMessage(this.message(MessageTypes.SUCCESS, message)); - } - - @Override - public void success(Component message) { - audience.sendMessage(this.message(MessageTypes.SUCCESS, message)); - } - - @Override - public @NotNull Component message(MessageTypes type, Component message) { - return Component.text() - .append(type.toComponent()) - .append(Component.text(" ")) - .append(message) - .build(); - } - - @Override - public @NotNull Component message(MessageTypes type, String message) { - return miniMessage.deserialize(type.toString() + " " + message); - } -} diff --git a/paper/build.gradle b/paper/build.gradle index 60d6fe3..52b9cd7 100644 --- a/paper/build.gradle +++ b/paper/build.gradle @@ -3,6 +3,7 @@ plugins { id 'io.papermc.paperweight.userdev' id 'xyz.jpenilla.run-paper' version '2.3.0' id "com.github.johnrengelman.shadow" version "8.1.1" + id 'org.jetbrains.kotlin.jvm' version '2.1.10' } repositories { @@ -20,33 +21,44 @@ processResources { } dependencies { - implementation project(':core') implementation project(":api") - implementation 'org.mongodb:mongodb-driver-reactivestreams:5.2.1' - implementation 'org.mongodb:mongodb-driver-core:5.2.1' - implementation 'org.mongodb:bson:5.2.1' - implementation platform('io.projectreactor:reactor-bom:2024.0.1') - implementation 'io.projectreactor:reactor-core' + implementation 'org.jetbrains.exposed:exposed-core:0.59.0' + implementation 'org.jetbrains.exposed:exposed-dao:0.59.0' + implementation 'org.jetbrains.exposed:exposed-jdbc:0.59.0' + implementation 'org.jetbrains.exposed:exposed-kotlin-datetime:0.59.0' - paperweight.paperDevBundle('1.21.4-R0.1-SNAPSHOT') + implementation 'org.mariadb.jdbc:mariadb-java-client:3.5.2' - compileOnly 'dev.jorel:commandapi-bukkit-core:9.5.2' + implementation 'org.jetbrains.kotlinx:kotlinx-datetime:0.5.0' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.1' - compileOnly 'me.clip:placeholderapi:2.11.6' + paperweight.foliaDevBundle('1.21.4-R0.1-SNAPSHOT') + + compileOnly 'dev.jorel:commandapi-bukkit-core:9.7.0' + compileOnly 'net.luckperms:api:5.4' + + implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' } + shadowJar { archiveFileName = "OTFHEE-Paper-${project.ext.version}.jar" + mergeServiceFiles() + dependencies { include(dependency('com.otfhee:.*')) - include(dependency('org.mongodb:.*')) - include(dependency('org.reactivestreams:.*')) - include(dependency('io.projectreactor:.*')) + include(dependency('org.jetbrains.exposed:.*')) + include(dependency('org.jetbrains.kotlin:.*')) + include(dependency('org.mariadb.jdbc:mariadb-java-client')) + include(dependency('org.jetbrains.kotlinx:kotlinx-datetime-jvm:.*')) } } artifacts { archives shadowJar +} +kotlin { + jvmToolchain(21) } \ No newline at end of file diff --git a/paper/src/main/java/com/otfhee/paper/Plugin.java b/paper/src/main/java/com/otfhee/paper/Plugin.java deleted file mode 100644 index 2a7e97c..0000000 --- a/paper/src/main/java/com/otfhee/paper/Plugin.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.otfhee.paper; - -import com.mongodb.ConnectionString; -import com.mongodb.MongoClientSettings; -import com.mongodb.ServerApi; -import com.mongodb.ServerApiVersion; -import com.mongodb.reactivestreams.client.MongoClient; -import com.mongodb.reactivestreams.client.MongoClients; -import com.mongodb.reactivestreams.client.MongoCollection; -import com.mongodb.reactivestreams.client.MongoDatabase; -import com.otfhee.core.Core; -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.commands.CommandLoader; -import com.otfhee.paper.meta.permissions.PermissionsLoader; -import com.otfhee.paper.utils.Loader; -import com.otfhee.paper.listeners.*; -import com.otfhee.paper.schedulers.TabList; -import dev.jorel.commandapi.CommandAPI; -import net.kyori.adventure.audience.Audience; -import net.kyori.adventure.text.minimessage.MiniMessage; -import org.bson.Document; -import org.bukkit.Bukkit; -import org.bukkit.plugin.java.JavaPlugin; -import org.jetbrains.annotations.NotNull; - -import java.util.Objects; -import java.util.concurrent.TimeUnit; - -public final class Plugin extends JavaPlugin { - private static final MiniMessage miniMessage = MiniMessage.miniMessage(); - private static final Messenger messenger = Core.getMessenger(Bukkit.getServer()); - private final Loader commands = new CommandLoader(); - private final Loader permissions = new PermissionsLoader(this); - - private MongoDatabase database; - private MongoCollection playersCollection; - - @Override - public void onEnable() { - // MongoDB - ServerApi serverApi = ServerApi.builder() - .version(ServerApiVersion.V1) - .build(); - - MongoClientSettings settings = MongoClientSettings.builder() - .applyConnectionString(new ConnectionString(Objects.requireNonNull(getConfig().getString("mongodb.url")))) - .serverApi(serverApi) - .applyToConnectionPoolSettings(builder -> builder - .maxSize(100) - .minSize(10) - .maxWaitTime(5000, TimeUnit.MILLISECONDS)) - .build(); - - MongoClient mongoClient = MongoClients.create(settings); - database = mongoClient.getDatabase(Objects.requireNonNull(getConfig().getString("mongodb.database"))); - playersCollection = database.getCollection(Objects.requireNonNull(getConfig().getString("mongodb.players-collection"))); - - this.saveDefaultConfig(); - - commands.load(); - permissions.load(); - - getServer().getPluginManager().registerEvents(new PlayerJoinLeaveListener(), this); - getServer().getPluginManager().registerEvents(new PlayerHeadDropListener(), this); - getServer().getPluginManager().registerEvents(new AsyncChatListener(), this); - getServer().getGlobalRegionScheduler().runAtFixedRate(this, scheduledTask -> new TabList().run(), 1L, 20L); - } - - @Override - public void onDisable() { - getServer().getGlobalRegionScheduler().cancelTasks(this); - CommandAPI.onDisable(); - this.saveConfig(); - } - - public static @NotNull Plugin getInstance() { - return getPlugin(Plugin.class); - } - - public static MiniMessage getMiniMessage() { - return miniMessage; - } - - public static Messenger getMessenger() { - return messenger; - } - - public static @NotNull Messenger getAudienceMessenger(Audience audience) { - return Core.getMessenger(audience); - } - - public MongoDatabase getDatabase() { - return database; - } - - public MongoCollection getPlayersCollection() { - return playersCollection; - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/Command.java b/paper/src/main/java/com/otfhee/paper/commands/Command.java deleted file mode 100644 index 1964640..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/Command.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.otfhee.paper.commands; - -import org.bukkit.permissions.Permission; - -public interface Command { - void onCommand(); - Permission getPermission(); -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/CommandLoader.java b/paper/src/main/java/com/otfhee/paper/commands/CommandLoader.java deleted file mode 100644 index b03ad7b..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/CommandLoader.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.otfhee.paper.commands; - -import com.otfhee.paper.Plugin; -import com.otfhee.paper.commands.action.CoinCommand; -import com.otfhee.paper.commands.action.DoCommand; -import com.otfhee.paper.commands.action.MeCommand; -import com.otfhee.paper.commands.action.TryCommand; -import com.otfhee.paper.commands.chat.GlobalModeCommand; -import com.otfhee.paper.commands.chat.PrivateMessagesCommands; -import com.otfhee.paper.commands.social.DiscordCommand; -import com.otfhee.paper.commands.social.RulesCommand; -import com.otfhee.paper.commands.social.SiteCommand; -import com.otfhee.paper.commands.social.TelegramCommand; -import com.otfhee.paper.commands.utils.PingCommand; -import dev.jorel.commandapi.CommandAPI; - -public class CommandLoader implements Loader { - private final Command coinCommand = new CoinCommand(); - private final Command doCommand = new DoCommand(); - private final Command meCommand = new MeCommand(); - private final Command tryCommand = new TryCommand(); - private final Command globalModeCommand = new GlobalModeCommand(); - private final Command privateMessagesCommands = new PrivateMessagesCommands(); - private final Command discordCommand = new DiscordCommand(); - private final Command rulesCommand = new RulesCommand(); - private final Command siteCommand = new SiteCommand(); - private final Command telegramCommand = new TelegramCommand(); - private final Command pingCommand = new PingCommand(); - - @Override - public void load() { - Plugin.getInstance().getLogger().info("Loading commands..."); - CommandAPI.onEnable(); - coinCommand.onCommand(); - doCommand.onCommand(); - meCommand.onCommand(); - tryCommand.onCommand(); - globalModeCommand.onCommand(); - privateMessagesCommands.onCommand(); - discordCommand.onCommand(); - rulesCommand.onCommand(); - siteCommand.onCommand(); - telegramCommand.onCommand(); - pingCommand.onCommand(); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/Loader.java b/paper/src/main/java/com/otfhee/paper/commands/Loader.java deleted file mode 100644 index 3f649ee..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/Loader.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.otfhee.paper.commands; - -public interface Loader { - void load(); -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/action/CoinCommand.java b/paper/src/main/java/com/otfhee/paper/commands/action/CoinCommand.java deleted file mode 100644 index 91c2671..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/action/CoinCommand.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.otfhee.paper.commands.action; - -import com.otfhee.paper.Plugin; -import com.otfhee.paper.commands.Command; -import com.otfhee.paper.commands.action.random.Coin; -import dev.jorel.commandapi.CommandAPICommand; -import org.bukkit.permissions.Permission; - -import java.util.Random; - -public class CoinCommand implements Command { - private final String permission = "otfhee.default.coin"; - - @Override - public void onCommand() { - new CommandAPICommand("coin") - .withPermission(permission) - .executesPlayer((sender, args) -> { - Coin heads = () -> Plugin.getMessenger().info("кинул монетку и выпал: ОРЁЛ"); - Coin tails = () -> Plugin.getMessenger().info("кинул монетку и выпала: РЕШКА"); - - Coin[] coins = {heads, tails}; - int i = new Random().nextInt(coins.length); - coins[i].random(); - }) - .register(); - Plugin.getInstance().getLogger().info("CoinCommand successfully started."); - } - - @Override - public Permission getPermission() { - return new Permission(permission); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/action/DoCommand.java b/paper/src/main/java/com/otfhee/paper/commands/action/DoCommand.java deleted file mode 100644 index 22dd7c0..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/action/DoCommand.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.otfhee.paper.commands.action; - -import com.otfhee.paper.Plugin; -import com.otfhee.paper.commands.Command; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.arguments.GreedyStringArgument; -import org.bukkit.permissions.Permission; - -public class DoCommand implements Command { - private final String permission = "otfhee.default.do"; - - @Override - public void onCommand() { - new CommandAPICommand("do") - .withPermission(permission) - .withArguments(new GreedyStringArgument("действие")) - .executesPlayer((sender, args) -> { - String action = (String) args.get("действие"); - Plugin.getMessenger().info("*" + sender + " " + action + "*"); - }) - .register(); - Plugin.getInstance().getLogger().info("DoCommand successfully started."); - } - - @Override - public Permission getPermission() { - return new Permission(permission); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/action/MeCommand.java b/paper/src/main/java/com/otfhee/paper/commands/action/MeCommand.java deleted file mode 100644 index e378c75..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/action/MeCommand.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.otfhee.paper.commands.action; - -import com.otfhee.paper.Plugin; -import com.otfhee.paper.commands.Command; -import dev.jorel.commandapi.CommandAPI; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.arguments.GreedyStringArgument; -import net.kyori.adventure.text.Component; -import org.bukkit.permissions.Permission; - -public class MeCommand implements Command { - private final String permission = "otfhee.default.me"; - - @Override - public void onCommand() { - CommandAPI.unregister("me", true); - - new CommandAPICommand("me") - .withPermission(permission) - .withArguments(new GreedyStringArgument("действие")) - .executesPlayer((sender, args) -> { - String action = (String) args.get("действие"); - Plugin.getMessenger().info(Component.text() - .append(sender.displayName()) - .append(Component.text(" " + action + "*")) - .build()); - }) - .register(); - Plugin.getInstance().getLogger().info("MeCommand successfully started."); - } - - @Override - public Permission getPermission() { - return new Permission(permission); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/action/TryCommand.java b/paper/src/main/java/com/otfhee/paper/commands/action/TryCommand.java deleted file mode 100644 index 7247256..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/action/TryCommand.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.otfhee.paper.commands.action; - -import com.otfhee.paper.Plugin; -import com.otfhee.paper.commands.Command; -import com.otfhee.paper.commands.action.random.Try; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.arguments.GreedyStringArgument; -import org.bukkit.permissions.Permission; - -import java.util.Random; - -public class TryCommand implements Command { - private final String permission = "otfhee.default.try"; - - @Override - public void onCommand() { - new CommandAPICommand("try") - .withPermission(permission) - .withArguments(new GreedyStringArgument("действие")) - .executesPlayer((sender, args) -> { - String action = (String) args.get("действие"); - Try success = () -> Plugin.getMessenger().info(sender.displayName() + " " - + action + ": УСПЕШНО"); - Try fail = () -> Plugin.getMessenger().info(sender.displayName() + " " - + action + ": НЕ УСПЕШНО"); - - Try[] arr = {success, fail}; - int i = new Random().nextInt(arr.length); - arr[i].random(); - }) - .register(); - Plugin.getInstance().getLogger().info("TryCommand successfully started."); - } - - @Override - public Permission getPermission() { - return new Permission(permission); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/action/random/Coin.java b/paper/src/main/java/com/otfhee/paper/commands/action/random/Coin.java deleted file mode 100644 index 6c8850d..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/action/random/Coin.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.otfhee.paper.commands.action.random; - -public interface Coin { - void random(); -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/action/random/Try.java b/paper/src/main/java/com/otfhee/paper/commands/action/random/Try.java deleted file mode 100644 index 6cde013..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/action/random/Try.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.otfhee.paper.commands.action.random; - -public interface Try { - void random(); -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/chat/GlobalModeCommand.java b/paper/src/main/java/com/otfhee/paper/commands/chat/GlobalModeCommand.java deleted file mode 100644 index 3ecad91..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/chat/GlobalModeCommand.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.otfhee.paper.commands.chat; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.Plugin; -import com.otfhee.paper.commands.Command; -import com.otfhee.paper.database.settings.GlobalMode; -import com.otfhee.paper.database.settings.impl.GlobalModeImpl; -import dev.jorel.commandapi.CommandAPICommand; -import org.bukkit.permissions.Permission; -import reactor.core.publisher.Mono; - -public class GlobalModeCommand implements Command { - private final String permission = "otfhee.default.global"; - - @Override - public void onCommand() { - new CommandAPICommand("global") - .withPermission(permission) - .withAliases("g") - .executesPlayer((sender, args) -> { - Plugin plugin = Plugin.getInstance(); - Messenger messenger = Plugin.getAudienceMessenger(sender); - GlobalMode globalMode = new GlobalModeImpl(plugin.getPlayersCollection(), sender); - Mono value = globalMode.getGlobalMode(); - - value.subscribe(x -> { - boolean mode = x != null && x; - if (mode) { - messenger.success("Режим глобального чата: ВЫКЛЮЧЕН"); - globalMode.setGlobalMode(false).subscribe(); - } else { - messenger.success("Режим глобального чата: ВКЛЮЧЕН"); - globalMode.setGlobalMode(true).subscribe(); - } - }); - }) - .register(); - Plugin.getInstance().getLogger().info("GlobalModeCommand successfully started."); - } - - @Override - public Permission getPermission() { - return new Permission(permission); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/chat/PrivateMessagesCommands.java b/paper/src/main/java/com/otfhee/paper/commands/chat/PrivateMessagesCommands.java deleted file mode 100644 index 86bb09f..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/chat/PrivateMessagesCommands.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.otfhee.paper.commands.chat; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.Plugin; -import com.otfhee.paper.commands.Command; -import com.otfhee.paper.handlers.ChatHandler; -import com.otfhee.paper.handlers.ChatType; -import dev.jorel.commandapi.CommandAPI; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.arguments.GreedyStringArgument; -import dev.jorel.commandapi.arguments.PlayerArgument; -import org.bukkit.entity.Player; -import org.bukkit.permissions.Permission; - -import java.util.HashMap; - -public class PrivateMessagesCommands implements Command { - private final String permission = "otfhee.default.pm"; - private static final HashMap reply = new HashMap<>(); - - @Override - public void onCommand() { - CommandAPI.unregister("msg", true); - CommandAPI.unregister("tell", true); - CommandAPI.unregister("w", true); - - new CommandAPICommand("message") - .withPermission(permission) - .withArguments(new PlayerArgument("игрок")) - .withArguments(new GreedyStringArgument("сообщение")) - .withAliases("msg", "tell", "w") - .executesPlayer((sender, args) -> { - Player player = (Player) args.get("игрок"); - String message = (String) args.get("сообщение"); - reply.put(player, sender); - ChatHandler.onChat(ChatType.PRIVATE, message, sender, player); - }) - .register(); - Plugin.getInstance().getLogger().info("MessageCommand successfully started."); - new CommandAPICommand("reply") - .withPermission(permission) - .withArguments(new GreedyStringArgument("сообщение")) - .withAliases("r") - .executesPlayer((sender, args) -> { - Player receiver = reply.get(sender); - String message = (String) args.get("сообщение"); - Messenger messenger = Plugin.getAudienceMessenger(sender); - if (receiver == null || !receiver.isOnline()) { - messenger.error("Вам некому ответить!"); - reply.clear(); - } else { - reply.put(receiver, sender); - ChatHandler.onChat(ChatType.PRIVATE, message, sender, receiver); - } - }) - .register(); - Plugin.getInstance().getLogger().info("ReplyCommand successfully started."); - } - - @Override - public Permission getPermission() { - return new Permission(permission); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/deprecated/ItemCommand.java b/paper/src/main/java/com/otfhee/paper/commands/deprecated/ItemCommand.java deleted file mode 100644 index a0e48e8..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/deprecated/ItemCommand.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.otfhee.paper.commands.deprecated; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.Plugin; -import com.otfhee.paper.database.meta.PremiumDate; -import com.otfhee.paper.handlers.PremiumHandler; -import dev.jorel.commandapi.CommandAPI; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.arguments.GreedyStringArgument; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -import java.util.Date; - -@Deprecated -public class ItemCommand { - public static void onCommand() { - CommandAPI.unregister("item", true); - new CommandAPICommand("item") - .withArguments(new GreedyStringArgument("название")) - .executesPlayer((sender, args) -> { - String name = (String) args.get("название"); - Messenger messenger = Plugin.getAudienceMessenger(sender); - Plugin plugin = Plugin.getInstance(); - PremiumDate date = plugin.getPlayerMeta(sender).getPremiumDate(); - Date now = new Date(); - - date.getDate().subscribe(value -> { - if (now.before(value)) { - if (sender.getLevel() >= 5) { - ItemStack item = sender.getInventory().getItemInMainHand(); - ItemMeta itemMeta = item.getItemMeta(); - itemMeta.displayName(Plugin.getMiniMessage().deserialize("" + name)); - item.setItemMeta(itemMeta); - sender.setLevel(sender.getLevel() - 5); - messenger.success("Название предмета успешно изменено!"); - } else { - messenger.error("Недостаточно опыта для изменения названия предмета!"); - } - } else { - messenger.error("У вас нет подписки " + PremiumHandler.onHandler() + "!"); - } - }); - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/deprecated/NOTDCommand.java b/paper/src/main/java/com/otfhee/paper/commands/deprecated/NOTDCommand.java deleted file mode 100644 index bb6c6b3..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/deprecated/NOTDCommand.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.otfhee.paper.commands.deprecated; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.Plugin; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.arguments.GreedyStringArgument; - -@Deprecated -public class NOTDCommand { - public static void onCommand() { - // News Of The Day - new CommandAPICommand("notd") - .withArguments(new GreedyStringArgument("новость")) - .withPermission("otfhee.commands.notd") - .executes((sender, args) -> { - String news = (String) args.get("новость"); - Messenger messenger = Plugin.getAudienceMessenger(sender); - if (news.equals("null")) { - Plugin.getInstance().getConfig().set("notd", ""); - Plugin.getInstance().saveConfig(); - Plugin.getInstance().reloadConfig(); - } else { - Plugin.getInstance().getConfig().set("notd", news); - Plugin.getInstance().saveConfig(); - Plugin.getInstance().reloadConfig(); - } - messenger.success("Новость успешно изменена!"); - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/deprecated/NicknameCommand.java b/paper/src/main/java/com/otfhee/paper/commands/deprecated/NicknameCommand.java deleted file mode 100644 index cced530..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/deprecated/NicknameCommand.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.otfhee.paper.commands.deprecated; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.Plugin; -import com.otfhee.paper.database.meta.PremiumDate; -import com.otfhee.paper.database.settings.DisplayColor; -import com.otfhee.paper.handlers.ColorHandler; -import com.otfhee.paper.handlers.ColorType; -import com.otfhee.paper.handlers.PremiumHandler; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.arguments.ListArgumentBuilder; - -import java.util.Date; -import java.util.List; - -@Deprecated -public class NicknameCommand { - public static void onCommand() { - new CommandAPICommand("nickname") - .withAliases("nick") - .withSubcommand(new CommandAPICommand("color") - .withArguments(new ListArgumentBuilder("цвет") - .withList(List.of(ColorType.values())) - .withMapper(material -> material.name().toLowerCase()) - .buildGreedy()) - .executesPlayer((sender, args) -> { - Messenger messenger = Plugin.getAudienceMessenger(sender); - Plugin plugin = Plugin.getInstance(); - PremiumDate date = plugin.getPlayerMeta(sender).getPremiumDate(); - DisplayColor displayColor = plugin.getPlayerSettings(sender).getDisplayColor(); - Date now = new Date(); - List color = (List) args.get("цвет"); - - date.getDate().subscribe(value -> { - if (now.before(value)) { - displayColor.setColor(ColorHandler.colorAdventureBuilder(color.stream().findAny().get())); - messenger.success("Цвет никнейма успешно изменён!"); - } else { - messenger.error("У вас нет подписки " + PremiumHandler.onHandler() + "!"); - } - }); - }) - ) - .withSubcommand(new CommandAPICommand("gradient") - .withArguments(new ListArgumentBuilder("первый цвет") - .withList(List.of(ColorType.values())) - .withMapper(material -> material.name().toLowerCase()) - .buildText()) - .withArguments(new ListArgumentBuilder("второй цвет") - .withList(List.of(ColorType.values())) - .withMapper(material -> material.name().toLowerCase()) - .buildText()) - .executesPlayer((sender, args) -> { - Messenger messenger = Plugin.getAudienceMessenger(sender); - Plugin plugin = Plugin.getInstance(); - PremiumDate date = plugin.getPlayerMeta(sender).getPremiumDate(); - DisplayColor displayColor = plugin.getPlayerSettings(sender).getDisplayColor(); - Date now = new Date(); - List first_color = (List) args.get("первый цвет"); - List second_color = (List) args.get("второй цвет"); - - date.getDate().subscribe(value -> { - if (now.before(value)) { - displayColor.setColor(ColorHandler.gradientAdventureBuilder(first_color.stream().findAny().get(), second_color.stream().findAny().get())); - messenger.success("Цвет никнейма успешно изменён!"); - } else { - messenger.error("У вас нет подписки " + PremiumHandler.onHandler() + "!"); - } - }); - }) - ) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/deprecated/ParticleCommand.java b/paper/src/main/java/com/otfhee/paper/commands/deprecated/ParticleCommand.java deleted file mode 100644 index e392b63..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/deprecated/ParticleCommand.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.otfhee.paper.commands.deprecated; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.Plugin; -import com.otfhee.paper.database.meta.PremiumDate; -import com.otfhee.paper.database.settings.PlayerParticle; -import com.otfhee.paper.handlers.ParticleType; -import com.otfhee.paper.handlers.PremiumHandler; -import dev.jorel.commandapi.CommandAPI; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.arguments.ListArgumentBuilder; - -import java.util.Date; -import java.util.List; - -@Deprecated -public class ParticleCommand { - public static void onCommand() { - CommandAPI.unregister("particle", true); - new CommandAPICommand("particle") - .withArguments(new ListArgumentBuilder("частицы") - .withList(List.of(ParticleType.values())) - .withMapper(material -> material.name().toLowerCase()) - .buildGreedy()) - .executesPlayer((sender, args) -> { - Messenger messenger = Plugin.getAudienceMessenger(sender); - Plugin plugin = Plugin.getInstance(); - PremiumDate date = plugin.getPlayerMeta(sender).getPremiumDate(); - PlayerParticle playerParticle = plugin.getPlayerSettings(sender).getPlayerParticle(); - Date now = new Date(); - - List particle = (List) args.get("частицы"); - date.getDate().subscribe(value -> { - if (now.before(value)) { - playerParticle.setParticle(particle.stream().findAny().get().toString()); - messenger.success("Частицы при ходьбе успешно изменены!"); - } else { - messenger.error("У вас нет подписки " + PremiumHandler.onHandler() + "!"); - } - }); - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/deprecated/PrefixCommand.java b/paper/src/main/java/com/otfhee/paper/commands/deprecated/PrefixCommand.java deleted file mode 100644 index 17424f0..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/deprecated/PrefixCommand.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.otfhee.paper.commands.deprecated; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.Plugin; -import com.otfhee.paper.database.meta.PremiumDate; -import com.otfhee.paper.database.settings.PlayerPrefix; -import com.otfhee.paper.handlers.PrefixType; -import com.otfhee.paper.handlers.PremiumHandler; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.arguments.ListArgumentBuilder; - -import java.util.Date; -import java.util.List; - -@Deprecated -public class PrefixCommand { - public static void onCommand() { - new CommandAPICommand("prefix") - .withArguments(new ListArgumentBuilder("префикс") - .withList(List.of(PrefixType.values())) - .withMapper(material -> material.name().toLowerCase()) - .buildGreedy()) - .executesPlayer((sender, args) -> { - Messenger messenger = Plugin.getAudienceMessenger(sender); - Plugin plugin = Plugin.getInstance(); - PremiumDate date = plugin.getPlayerMeta(sender).getPremiumDate(); - PlayerPrefix playerPrefix = plugin.getPlayerSettings(sender).getPlayerPrefix(); - Date now = new Date(); - List prefix = (List) args.get("префикс"); - - date.getDate().subscribe(value -> { - if (now.before(value)) { - playerPrefix.setPrefix(prefix.stream().findAny().get().toString()); - messenger.success("Префикс успешно изменён!"); - } else { - messenger.error("У вас нет подписки " + PremiumHandler.onHandler() + "!"); - } - }); - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/deprecated/PremiumCommand.java b/paper/src/main/java/com/otfhee/paper/commands/deprecated/PremiumCommand.java deleted file mode 100644 index e11cd6e..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/deprecated/PremiumCommand.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.otfhee.paper.commands.deprecated; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.Plugin; -import com.otfhee.paper.database.meta.PremiumDate; -import com.otfhee.paper.handlers.PremiumHandler; -import com.otfhee.paper.handlers.RateType; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.arguments.ListArgumentBuilder; -import dev.jorel.commandapi.arguments.OfflinePlayerArgument; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; - -import java.util.Date; -import java.util.List; - -@Deprecated -public class PremiumCommand { - public static void onCommand() { - new CommandAPICommand("premium") - .withSubcommand(new CommandAPICommand("give") - .withPermission("otfhee.commands.premium.give") - .withArguments(new OfflinePlayerArgument("игрок")) - .withArguments(new ListArgumentBuilder("тариф") - .withList(List.of(RateType.values())) - .withMapper(material -> material.name().toLowerCase()) - .buildGreedy()) - .executes((sender, args) -> { - List rate = (List) args.get("тариф"); - OfflinePlayer player = (OfflinePlayer) args.get("игрок"); - Date now = new Date(); - Messenger messenger = Plugin.getAudienceMessenger(sender); - Plugin plugin = Plugin.getInstance(); - PremiumDate date = plugin.getPlayerMeta((Player) player).getPremiumDate(); - int finalRate = rate.get(rate.indexOf(rate.stream().findAny().get())).toInt(); - - date.getDate().subscribe(value -> { - if (value != null) { - value.setMonth(value.getMonth() + finalRate); - value.setDate(value.getDate()); - messenger.success("Успешная выдача Premium-подписки!"); - } else { - now.setMonth(now.getMonth() + finalRate); - value.setDate(now.getDate()); - messenger.success("Успешная выдача Premium-подписки!"); - } - }); - }) - ) - .withSubcommand(new CommandAPICommand("revoke") - .withPermission("otfhee.commands.premium.revoke") - .withArguments(new OfflinePlayerArgument("игрок")) - .executes((sender, args) -> { - OfflinePlayer player = (OfflinePlayer) args.get("игрок"); - Messenger messenger = Plugin.getAudienceMessenger(sender); - Plugin plugin = Plugin.getInstance(); - PremiumDate date = plugin.getPlayerMeta((Player) player).getPremiumDate(); - date.getDate().subscribe(value -> { - if (value.toString() != null) { - date.insertDefault(); - messenger.success(PremiumHandler.onHandler() + " успешно удалён у игрока!"); - } - }); - }) - ) - .withSubcommand(new CommandAPICommand("date") - .executesPlayer((sender, args) -> { - Messenger messenger = Plugin.getAudienceMessenger(sender); - Plugin plugin = Plugin.getInstance(); - PremiumDate date = plugin.getPlayerMeta(sender).getPremiumDate(); - date.getDate().subscribe(value -> { - if (value != null) { - messenger.info("Подписка " + PremiumHandler.onHandler() + " будет активна до: " + value); - } else { - messenger.error("У вас не найдена подписка " + PremiumHandler.onHandler() + "!"); - } - }); - }) - ) - .withSubcommand(new CommandAPICommand("buy") - .executesPlayer((sender, args) -> { - Messenger messenger = Plugin.getAudienceMessenger(sender); - messenger.info("Подписку " + PremiumHandler.onHandler() + " можно приобрести здесь"); - }) - ) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/deprecated/StaffCommand.java b/paper/src/main/java/com/otfhee/paper/commands/deprecated/StaffCommand.java deleted file mode 100644 index e9398c9..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/deprecated/StaffCommand.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.otfhee.paper.commands.deprecated; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.Plugin; -import com.otfhee.paper.database.meta.PlayerPermissions; -import dev.jorel.commandapi.CommandAPICommand; -import dev.jorel.commandapi.arguments.BooleanArgument; -import dev.jorel.commandapi.arguments.OfflinePlayerArgument; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; - -@Deprecated -public class StaffCommand { - public static void onCommand() { - new CommandAPICommand("staff") - .withArguments(new OfflinePlayerArgument("игрок")) - .withArguments(new BooleanArgument("значение")) - .withPermission("otfhee.commands.staff") - .executes((sender, args) -> { - OfflinePlayer player = (OfflinePlayer) args.get("игрок"); - boolean value = (boolean) args.get("значение"); - Messenger messenger = Plugin.getAudienceMessenger(sender); - Plugin plugin = Plugin.getInstance(); - PlayerPermissions permissions = plugin.getPlayerMeta((Player) player).getPlayerPermissions(); - permissions.getPermissions().subscribe(x -> { - if (value) { - if (!x.contains("staff")) { - permissions.addPermission("staff").subscribe(); - messenger.info("Успешное изменение значения!"); - } - } else { - if (x.contains("staff")) { - permissions.deletePermission("staff").subscribe(); - messenger.info("Успешное изменение значения!"); - } - } - }); - }) - .register(); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/social/DiscordCommand.java b/paper/src/main/java/com/otfhee/paper/commands/social/DiscordCommand.java deleted file mode 100644 index 9e992de..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/social/DiscordCommand.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.otfhee.paper.commands.social; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.Plugin; -import com.otfhee.paper.commands.Command; -import dev.jorel.commandapi.CommandAPICommand; -import org.bukkit.permissions.Permission; - -public class DiscordCommand implements Command { - private final String permission = "otfhee.default.discord"; - - @Override - public void onCommand() { - new CommandAPICommand("discord") - .withPermission(permission) - .withAliases("ds") - .executesPlayer((sender, args) -> { - Messenger messenger = Plugin.getAudienceMessenger(sender); - messenger.info("Ссылка на Discord-сервер " + - "тык"); - }) - .register(); - Plugin.getInstance().getLogger().info("DiscordCommand successfully started."); - } - - @Override - public Permission getPermission() { - return new Permission(permission); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/social/RulesCommand.java b/paper/src/main/java/com/otfhee/paper/commands/social/RulesCommand.java deleted file mode 100644 index ec7b904..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/social/RulesCommand.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.otfhee.paper.commands.social; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.Plugin; -import com.otfhee.paper.commands.Command; -import dev.jorel.commandapi.CommandAPICommand; -import org.bukkit.permissions.Permission; - -public class RulesCommand implements Command { - private final String permission = "otfhee.default.rules"; - - @Override - public void onCommand() { - new CommandAPICommand("rules") - .withPermission(permission) - .executesPlayer((sender, args) -> { - Messenger messenger = Plugin.getAudienceMessenger(sender); - messenger.info("Ссылка на правила сервера " + - "тык"); - }) - .register(); - Plugin.getInstance().getLogger().info("RulesCommand successfully started."); - } - - @Override - public Permission getPermission() { - return new Permission(permission); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/social/SiteCommand.java b/paper/src/main/java/com/otfhee/paper/commands/social/SiteCommand.java deleted file mode 100644 index 7ebca5e..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/social/SiteCommand.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.otfhee.paper.commands.social; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.Plugin; -import com.otfhee.paper.commands.Command; -import dev.jorel.commandapi.CommandAPICommand; -import org.bukkit.permissions.Permission; - -public class SiteCommand implements Command { - private final String permission = "otfhee.default.site"; - - @Override - public void onCommand() { - new CommandAPICommand("site") - .withPermission(permission) - .executesPlayer((sender, args) -> { - Messenger messenger = Plugin.getAudienceMessenger(sender); - messenger.info("Ссылка на сайт сервера " + - "тык"); - }) - .register(); - Plugin.getInstance().getLogger().info("SiteCommand successfully started."); - } - - @Override - public Permission getPermission() { - return new Permission(permission); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/social/TelegramCommand.java b/paper/src/main/java/com/otfhee/paper/commands/social/TelegramCommand.java deleted file mode 100644 index ccc9795..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/social/TelegramCommand.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.otfhee.paper.commands.social; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.Plugin; -import com.otfhee.paper.commands.Command; -import dev.jorel.commandapi.CommandAPICommand; -import org.bukkit.permissions.Permission; - -public class TelegramCommand implements Command { - private final String permission = "otfhee.default.telegram"; - - @Override - public void onCommand() { - new CommandAPICommand("telegram") - .withPermission(permission) - .withAliases("tg") - .executesPlayer((sender, args) -> { - Messenger messenger = Plugin.getAudienceMessenger(sender); - messenger.info("Ссылка на Telegram канал " + - "тык"); - }) - .register(); - Plugin.getInstance().getLogger().info("TelegramCommand successfully started."); - } - - @Override - public Permission getPermission() { - return new Permission(permission); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/commands/utils/PingCommand.java b/paper/src/main/java/com/otfhee/paper/commands/utils/PingCommand.java deleted file mode 100644 index 1da0344..0000000 --- a/paper/src/main/java/com/otfhee/paper/commands/utils/PingCommand.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.otfhee.paper.commands.utils; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.Plugin; -import com.otfhee.paper.commands.Command; -import com.otfhee.paper.telemetry.PingTelemetry; -import dev.jorel.commandapi.CommandAPICommand; -import org.bukkit.permissions.Permission; - -public class PingCommand implements Command { - private final String permission = "otfhee.default.ping"; - - @Override - public void onCommand() { - new CommandAPICommand("ping") - .withPermission(permission) - .executesPlayer((sender, args) -> { - Messenger messenger = Plugin.getAudienceMessenger(sender); - messenger.info("Ваш пинг: " + PingTelemetry.getPing(sender.getPing())); - }) - .register(); - Plugin.getInstance().getLogger().info("PingCommand successfully started."); - } - - @Override - public Permission getPermission() { - return new Permission(permission); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/DatabaseItem.java b/paper/src/main/java/com/otfhee/paper/database/DatabaseItem.java deleted file mode 100644 index dea1c81..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/DatabaseItem.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.otfhee.paper.database; - -import reactor.core.publisher.Mono; - -public interface DatabaseItem { - Mono insertDefault(); -} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/User.java b/paper/src/main/java/com/otfhee/paper/database/user/User.java deleted file mode 100644 index 1537076..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/user/User.java +++ /dev/null @@ -1,164 +0,0 @@ -package com.otfhee.paper.database.user; - -import com.mongodb.client.model.Filters; -import com.mongodb.reactivestreams.client.FindPublisher; -import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.Plugin; -import com.otfhee.paper.database.user.meta.*; -import com.otfhee.paper.database.user.settings.*; -import com.otfhee.paper.database.user.stats.UserFirstJoin; -import com.otfhee.paper.database.user.stats.UserLastJoin; -import com.otfhee.paper.database.user.stats.UserStats; -import org.bson.Document; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import reactor.core.publisher.Mono; - -import java.util.Date; -import java.util.List; - -public class User implements UserStats, UserSettings, UserMeta { - private final MongoCollection collection; - private final String uuid; - private final FindPublisher found; - private final UserFirstJoin userFirstJoin; - private final UserLastJoin userLastJoin; - private final UserDisplayColor userDisplayColor; - private final UserGlobalMode userGlobalMode; - private final UserParticle userParticle; - private final UserPrefix userPrefix; - private final UserStatus userStatus; - private final UserPacks userPacks; - private final UserPermissions userPermissions; - private final UserPremiumDate userPremiumDate; - private final Warns warns; - private final FirstWarn firstWarn; - private final SecondWarn secondWarn; - private final ThirdWarn thirdWarn; - - public User(@NotNull OfflinePlayer player) { - this.uuid = player.getUniqueId().toString(); - this.collection = Plugin.getInstance().getPlayersCollection(); - this.found = collection.find(Filters.eq("_id", uuid)); - this.userFirstJoin = new UserFirstJoin(collection, (Player) player, found); - this.userLastJoin = new UserLastJoin(collection, (Player) player, found); - this.userDisplayColor = new UserDisplayColor(collection, (Player) player, found); - this.userGlobalMode = new UserGlobalMode(collection, (Player) player, found); - this.userParticle = new UserParticle(collection, (Player) player, found); - this.userPrefix = new UserPrefix(collection, (Player) player, found); - this.userStatus = new UserStatus(collection, (Player) player, found); - this.userPacks = new UserPacks(collection, (Player) player, found); - this.userPermissions = new UserPermissions(collection, (Player) player, found); - this.userPremiumDate = new UserPremiumDate(collection, (Player) player, found); - this.warns = new Warns(collection, (Player) player, found); - this.firstWarn = new FirstWarn(collection, (Player) player, found); - this.secondWarn = new SecondWarn(collection, (Player) player, found); - this.thirdWarn = new ThirdWarn(collection, (Player) player, found); - } - - public Mono create() { - return Mono.defer(() -> { - Document objects = new Document(); - Date date = new Date(); - - objects.append("_id", uuid); - objects.append("first-join", date); - objects.append("last-join", date); - objects.append("settings", new Document("global-mode", false) - .append("display-color", "DEFAULT") - .append("particle", "DEFAULT") - .append("prefix", "DEFAULT") - .append("status", "ONLINE")); - objects.append("meta", new Document("premium-date", "") - .append("permissions", List.of("default")) - .append("packs", List.of("default")) - .append("warns", new Document("days", 0) - .append("reason", "") - .append("first", new Document("days", 0) - .append("reason", "")) - .append("second", new Document("days", 0) - .append("reason", "")) - .append("third", new Document("days", 0) - .append("reason", "")))); - - return Mono.from(collection.insertOne(objects)).then(); - }); - } - - public Mono exist() { - return Mono.from(found) - .flatMap(x -> Mono.just(true)) - .defaultIfEmpty(false); - } - - @Override - public UserFirstJoin getUserFirstJoin() { - return userFirstJoin; - } - - @Override - public UserLastJoin getUserLastJoin() { - return userLastJoin; - } - - @Override - public UserGlobalMode getUserGlobalMode() { - return userGlobalMode; - } - - @Override - public UserDisplayColor getUserDisplayColor() { - return userDisplayColor; - } - - @Override - public UserParticle getUserParticle() { - return userParticle; - } - - @Override - public UserPrefix getUserPrefix() { - return userPrefix; - } - - @Override - public UserStatus getUserStatus() { - return userStatus; - } - - @Override - public UserPremiumDate getUserPremiumDate() { - return userPremiumDate; - } - - @Override - public UserPermissions getUserPermissions() { - return userPermissions; - } - - @Override - public UserPacks getUserPacks() { - return userPacks; - } - - @Override - public Warn getWarns() { - return warns; - } - - @Override - public Warn getFirstWarn() { - return firstWarn; - } - - @Override - public Warn getSecondWarn() { - return secondWarn; - } - - @Override - public Warn getThirdWarn() { - return thirdWarn; - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/UserNotFound.java b/paper/src/main/java/com/otfhee/paper/database/user/UserNotFound.java deleted file mode 100644 index f23cdde..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/user/UserNotFound.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.otfhee.paper.database.user; - -public class UserNotFound extends RuntimeException { - public UserNotFound(Exception message) { - super("User not found in database: " + message); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/meta/FirstWarn.java b/paper/src/main/java/com/otfhee/paper/database/user/meta/FirstWarn.java deleted file mode 100644 index 7c76316..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/user/meta/FirstWarn.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.otfhee.paper.database.user.meta; - -import com.mongodb.client.model.Filters; -import com.mongodb.reactivestreams.client.FindPublisher; -import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.user.UserNotFound; -import org.bson.Document; -import org.bson.conversions.Bson; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import reactor.core.publisher.Mono; - -public class FirstWarn implements Warn { - private final MongoCollection collection; - private final FindPublisher found; - private final String uuid; - - public FirstWarn(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = found; - } - - @Override - public Mono getReason() { - try { - return Mono.from(found) - .flatMap(x -> { - Document meta = (Document) x.get("meta"); - Document warns = (Document) meta.get("warns"); - Document first = (Document) warns.get("first"); - return Mono.just(first.getString("reason")); - }); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - } - - @Override - public Mono setReason(String reason) { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("meta.warns.first.reason", reason); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } - - @Override - public Mono getDays() { - try { - return Mono.from(found) - .flatMap(x -> { - Document meta = (Document) x.get("meta"); - Document warns = (Document) meta.get("warns"); - Document first = (Document) warns.get("first"); - return Mono.just(first.getInteger("days")); - }); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - } - - @Override - public Mono setDays(int days) { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("meta.warns.first.days", days); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } - - @Override - public Mono insertDefault() { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("meta.warns.first.days", 0) - .append("meta.warns.first.reason", ""); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/meta/SecondWarn.java b/paper/src/main/java/com/otfhee/paper/database/user/meta/SecondWarn.java deleted file mode 100644 index 179dc6e..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/user/meta/SecondWarn.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.otfhee.paper.database.user.meta; - -import com.mongodb.client.model.Filters; -import com.mongodb.reactivestreams.client.FindPublisher; -import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.user.UserNotFound; -import org.bson.Document; -import org.bson.conversions.Bson; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import reactor.core.publisher.Mono; - -public class SecondWarn implements Warn { - private final MongoCollection collection; - private final FindPublisher found; - private final String uuid; - - public SecondWarn(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = found; - } - - @Override - public Mono getReason() { - try { - return Mono.from(found) - .flatMap(x -> { - Document meta = (Document) x.get("meta"); - Document warns = (Document) meta.get("warns"); - Document second = (Document) warns.get("second"); - return Mono.just(second.getString("reason")); - }); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - } - - @Override - public Mono setReason(String reason) { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("meta.warns.second.reason", reason); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } - - @Override - public Mono getDays() { - try { - return Mono.from(found) - .flatMap(x -> { - Document meta = (Document) x.get("meta"); - Document warns = (Document) meta.get("warns"); - Document second = (Document) warns.get("second"); - return Mono.just(second.getInteger("days")); - }); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - } - - @Override - public Mono setDays(int days) { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("meta.warns.second.days", days); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } - - @Override - public Mono insertDefault() { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("meta.warns.second.days", 0) - .append("meta.warns.second.reason", ""); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/meta/ThirdWarn.java b/paper/src/main/java/com/otfhee/paper/database/user/meta/ThirdWarn.java deleted file mode 100644 index e2c81e4..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/user/meta/ThirdWarn.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.otfhee.paper.database.user.meta; - -import com.mongodb.client.model.Filters; -import com.mongodb.reactivestreams.client.FindPublisher; -import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.user.UserNotFound; -import org.bson.Document; -import org.bson.conversions.Bson; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import reactor.core.publisher.Mono; - -public class ThirdWarn implements Warn { - private final MongoCollection collection; - private final FindPublisher found; - private final String uuid; - - public ThirdWarn(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = found; - } - - @Override - public Mono getReason() { - try { - return Mono.from(found) - .flatMap(x -> { - Document meta = (Document) x.get("meta"); - Document warns = (Document) meta.get("warns"); - Document third = (Document) warns.get("third"); - return Mono.just(third.getString("reason")); - }); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - } - - @Override - public Mono setReason(String reason) { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("meta.warns.third.reason", reason); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } - - @Override - public Mono getDays() { - try { - return Mono.from(found) - .flatMap(x -> { - Document meta = (Document) x.get("meta"); - Document warns = (Document) meta.get("warns"); - Document third = (Document) warns.get("third"); - return Mono.just(third.getInteger("days")); - }); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - } - - @Override - public Mono setDays(int days) { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("meta.warns.third.days", days); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } - - @Override - public Mono insertDefault() { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("meta.warns.third.days", 0) - .append("meta.warns.third.reason", ""); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/meta/UserMeta.java b/paper/src/main/java/com/otfhee/paper/database/user/meta/UserMeta.java deleted file mode 100644 index ae87706..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/user/meta/UserMeta.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.otfhee.paper.database.user.meta; - -public interface UserMeta { - UserPremiumDate getUserPremiumDate(); - UserPermissions getUserPermissions(); - UserPacks getUserPacks(); - Warn getWarns(); - Warn getFirstWarn(); - Warn getSecondWarn(); - Warn getThirdWarn(); -} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/meta/UserPacks.java b/paper/src/main/java/com/otfhee/paper/database/user/meta/UserPacks.java deleted file mode 100644 index 265d280..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/user/meta/UserPacks.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.otfhee.paper.database.user.meta; - -import com.mongodb.client.model.Filters; -import com.mongodb.reactivestreams.client.FindPublisher; -import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.DatabaseItem; -import com.otfhee.paper.database.user.UserNotFound; -import org.bson.Document; -import org.bson.conversions.Bson; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import reactor.core.publisher.Mono; - -import java.util.List; - -public class UserPacks implements DatabaseItem { - private final MongoCollection collection; - private final FindPublisher found; - private final Mono> DEFAULT = Mono.just(List.of("default")); - private final String KEY = "packs"; - private final String uuid; - - public UserPacks(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = found; - } - - public Mono> getPacks() { - try { - return Mono.from(found) - .flatMap(x -> { - Document meta = (Document) x.get("meta"); - return Mono.just(meta.getList(KEY, String.class)); - }); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - } - - public Mono addPack(String pack) { - return Mono.defer(() -> { - try { - return getPacks() - .flatMap(packs -> { - packs.add(pack); - - Bson updatedValue = new Document("meta." + KEY, packs); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - }); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } - - public Mono removePack(String pack) { - return Mono.defer(() -> { - try { - return getPacks() - .flatMap(packs -> { - packs.remove(pack); - - Bson updatedValue = new Document("meta." + KEY, packs); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - }); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } - - @Override - public Mono insertDefault() { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("meta." + KEY, DEFAULT); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/meta/UserPermissions.java b/paper/src/main/java/com/otfhee/paper/database/user/meta/UserPermissions.java deleted file mode 100644 index 0a4b0e0..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/user/meta/UserPermissions.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.otfhee.paper.database.user.meta; - -import com.mongodb.client.model.Filters; -import com.mongodb.reactivestreams.client.FindPublisher; -import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.DatabaseItem; -import com.otfhee.paper.database.user.UserNotFound; -import org.bson.Document; -import org.bson.conversions.Bson; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import reactor.core.publisher.Mono; - -import java.util.List; - -public class UserPermissions implements DatabaseItem { - private final MongoCollection collection; - private final FindPublisher found; - private final Mono> DEFAULT = Mono.just(List.of("default")); - private final String KEY = "permissions"; - private final String uuid; - - public UserPermissions(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = found; - } - - public Mono> getPermissions() { - try { - return Mono.from(found) - .flatMap(x -> { - Document meta = (Document) x.get("meta"); - return Mono.just(meta.getList(KEY, String.class)); - }); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - } - - public Mono addPermission(String permission) { - return Mono.defer(() -> { - try { - return getPermissions() - .flatMap(permissions -> { - permissions.add(permission); - - Bson updatedValue = new Document("meta." + KEY, permissions); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - }); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } - - public Mono removePermission(String permission) { - return Mono.defer(() -> { - try { - return getPermissions() - .flatMap(permissions -> { - permissions.remove(permission); - - Bson updatedValue = new Document("meta." + KEY, permissions); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - }); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } - - @Override - public Mono insertDefault() { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("meta." + KEY, DEFAULT); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/meta/UserPremiumDate.java b/paper/src/main/java/com/otfhee/paper/database/user/meta/UserPremiumDate.java deleted file mode 100644 index 69cd74e..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/user/meta/UserPremiumDate.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.otfhee.paper.database.user.meta; - -import com.mongodb.client.model.Filters; -import com.mongodb.reactivestreams.client.FindPublisher; -import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.DatabaseItem; -import com.otfhee.paper.database.user.UserNotFound; -import org.bson.Document; -import org.bson.conversions.Bson; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import reactor.core.publisher.Mono; - -import java.util.Date; - -public class UserPremiumDate implements DatabaseItem { - private final MongoCollection collection; - private final FindPublisher found; - private final String KEY = "premium-date"; - private final String uuid; - - public UserPremiumDate(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = found; - } - - public Mono getDate() { - try { - return Mono.from(found) - .flatMap(x -> { - Document settings = (Document) x.get("meta"); - return Mono.just(settings.getDate(KEY)); - }); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - } - - public Mono setDate(Date date) { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("meta." + KEY, date); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } - - @Override - public Mono insertDefault() { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("meta." + KEY, ""); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/meta/Warn.java b/paper/src/main/java/com/otfhee/paper/database/user/meta/Warn.java deleted file mode 100644 index f650315..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/user/meta/Warn.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.otfhee.paper.database.user.meta; - -import com.otfhee.paper.database.DatabaseItem; -import reactor.core.publisher.Mono; - -public interface Warn extends DatabaseItem { - Mono getDays(); - Mono setDays(int days); - Mono getReason(); - Mono setReason(String reason); -} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/meta/Warns.java b/paper/src/main/java/com/otfhee/paper/database/user/meta/Warns.java deleted file mode 100644 index c6757d2..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/user/meta/Warns.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.otfhee.paper.database.user.meta; - -import com.mongodb.client.model.Filters; -import com.mongodb.reactivestreams.client.FindPublisher; -import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.user.UserNotFound; -import org.bson.Document; -import org.bson.conversions.Bson; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import reactor.core.publisher.Mono; - -public class Warns implements Warn { - private final MongoCollection collection; - private final FindPublisher found; - private final String uuid; - - public Warns(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = found; - } - - @Override - public Mono getDays() { - try { - return Mono.from(found) - .flatMap(x -> { - Document meta = (Document) x.get("meta"); - Document warns = (Document) meta.get("warns"); - return Mono.just(warns.getInteger("days")); - }); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - } - - @Override - public Mono setDays(int days) { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("meta.warns.days", days); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } - - @Override - public Mono getReason() { - try { - return Mono.from(found) - .flatMap(x -> { - Document meta = (Document) x.get("meta"); - Document warns = (Document) meta.get("warns"); - return Mono.just(warns.getString("reason")); - }); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - } - - @Override - public Mono setReason(String reason) { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("meta.warns.reason", reason); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } - - @Override - public Mono insertDefault() { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("meta.warns.days", 0) - .append("meta.warns.reason", ""); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/settings/UserDisplayColor.java b/paper/src/main/java/com/otfhee/paper/database/user/settings/UserDisplayColor.java deleted file mode 100644 index 729e7e9..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/user/settings/UserDisplayColor.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.otfhee.paper.database.user.settings; - -import com.mongodb.client.model.Filters; -import com.mongodb.reactivestreams.client.FindPublisher; -import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.DatabaseItem; -import com.otfhee.paper.database.user.UserNotFound; -import org.bson.Document; -import org.bson.conversions.Bson; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import reactor.core.publisher.Mono; - -public class UserDisplayColor implements DatabaseItem { - private final MongoCollection collection; - private final FindPublisher found; - private final Mono DEFAULT = Mono.just(""); - private final String KEY = "display-color"; - private final String uuid; - - public UserDisplayColor(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = found; - } - - public Mono getColor() { - try { - return Mono.from(found) - .flatMap(x -> { - Document settings = (Document) x.get("settings"); - return Mono.just(settings.getString(KEY)); - }); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - } - - public Mono setColor(String color) { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("settings." + KEY, color); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } - - @Override - public Mono insertDefault() { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("settings." + KEY, DEFAULT); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/settings/UserGlobalMode.java b/paper/src/main/java/com/otfhee/paper/database/user/settings/UserGlobalMode.java deleted file mode 100644 index 9946fc9..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/user/settings/UserGlobalMode.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.otfhee.paper.database.user.settings; - -import com.mongodb.client.model.Filters; -import com.mongodb.reactivestreams.client.FindPublisher; -import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.DatabaseItem; -import com.otfhee.paper.database.user.UserNotFound; -import org.bson.Document; -import org.bson.conversions.Bson; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import reactor.core.publisher.Mono; - -public class UserGlobalMode implements DatabaseItem { - private final MongoCollection collection; - private final FindPublisher found; - private final Mono DEFAULT = Mono.just(false); - private final String KEY = "global-mode"; - private final String uuid; - - public UserGlobalMode(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = found; - } - - public Mono getGlobalMode() { - return Mono.from(found) - .flatMap(x -> { - try { - Document settings = (Document) x.get("settings"); - return Mono.just(settings.getBoolean(KEY)); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } - - public Mono setGlobalMode(boolean value) { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("settings." + KEY, value); - Bson updateOperation = new Document("$set", updatedValue); - - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } - - @Override - public Mono insertDefault() { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("settings." + KEY, DEFAULT); - Bson updateOperation = new Document("$set", updatedValue); - - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/settings/UserParticle.java b/paper/src/main/java/com/otfhee/paper/database/user/settings/UserParticle.java deleted file mode 100644 index f4fff61..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/user/settings/UserParticle.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.otfhee.paper.database.user.settings; - -import com.mongodb.client.model.Filters; -import com.mongodb.reactivestreams.client.FindPublisher; -import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.DatabaseItem; -import com.otfhee.paper.database.user.UserNotFound; -import org.bson.Document; -import org.bson.conversions.Bson; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import reactor.core.publisher.Mono; - -public class UserParticle implements DatabaseItem { - private final MongoCollection collection; - private final FindPublisher found; - private final Mono DEFAULT = Mono.just("DEFAULT"); - private final String KEY = "particle"; - private final String uuid; - - public UserParticle(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = found; - } - - public Mono getParticle() { - try { - return Mono.from(found) - .flatMap(x -> { - Document settings = (Document) x.get("settings"); - return Mono.just(settings.getString(KEY)); - }); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - } - - public Mono setParticle(String particle) { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("settings." + KEY, particle); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } - - @Override - public Mono insertDefault() { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("settings." + KEY, DEFAULT); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/settings/UserPrefix.java b/paper/src/main/java/com/otfhee/paper/database/user/settings/UserPrefix.java deleted file mode 100644 index ef24cf5..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/user/settings/UserPrefix.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.otfhee.paper.database.user.settings; - -import com.mongodb.client.model.Filters; -import com.mongodb.reactivestreams.client.FindPublisher; -import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.DatabaseItem; -import com.otfhee.paper.database.user.UserNotFound; -import org.bson.Document; -import org.bson.conversions.Bson; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import reactor.core.publisher.Mono; - -public class UserPrefix implements DatabaseItem { - private final MongoCollection collection; - private final FindPublisher found; - private final Mono DEFAULT = Mono.just("DEFAULT"); - private final String KEY = "prefix"; - private final String uuid; - - public UserPrefix(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = found; - } - - public Mono getPrefix() { - try { - return Mono.from(found) - .flatMap(x -> { - Document settings = (Document) x.get("settings"); - return Mono.just(settings.getString(KEY)); - }); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - } - - public Mono setPrefix(String prefix) { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("settings." + KEY, prefix); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } - - @Override - public Mono insertDefault() { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("settings." + KEY, DEFAULT); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/settings/UserSettings.java b/paper/src/main/java/com/otfhee/paper/database/user/settings/UserSettings.java deleted file mode 100644 index ca6d551..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/user/settings/UserSettings.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.otfhee.paper.database.user.settings; - -public interface UserSettings { - UserGlobalMode getUserGlobalMode(); - UserDisplayColor getUserDisplayColor(); - UserParticle getUserParticle(); - UserPrefix getUserPrefix(); - UserStatus getUserStatus(); -} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/settings/UserStatus.java b/paper/src/main/java/com/otfhee/paper/database/user/settings/UserStatus.java deleted file mode 100644 index aa6e1b8..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/user/settings/UserStatus.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.otfhee.paper.database.user.settings; - -import com.mongodb.client.model.Filters; -import com.mongodb.reactivestreams.client.FindPublisher; -import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.DatabaseItem; -import com.otfhee.paper.database.user.UserNotFound; -import org.bson.Document; -import org.bson.conversions.Bson; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import reactor.core.publisher.Mono; - -public class UserStatus implements DatabaseItem { - private final MongoCollection collection; - private final FindPublisher found; - private final Mono DEFAULT = Mono.just("ONLINE"); - private final String KEY = "status"; - private final String uuid; - - public UserStatus(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = found; - } - - public Mono getStatus() { - try { - return Mono.from(found) - .flatMap(x -> { - Document settings = (Document) x.get("settings"); - return Mono.just(settings.getString(KEY)); - }); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - } - - public Mono setStatus(String status) { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("settings." + KEY, status); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } - - @Override - public Mono insertDefault() { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document("settings." + KEY, DEFAULT); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne((Bson) found, updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/stats/UserFirstJoin.java b/paper/src/main/java/com/otfhee/paper/database/user/stats/UserFirstJoin.java deleted file mode 100644 index 1e2bf5c..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/user/stats/UserFirstJoin.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.otfhee.paper.database.user.stats; - -import com.mongodb.client.model.Filters; -import com.mongodb.reactivestreams.client.FindPublisher; -import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.DatabaseItem; -import com.otfhee.paper.database.user.UserNotFound; -import org.bson.Document; -import org.bson.conversions.Bson; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import reactor.core.publisher.Mono; - -import java.util.Date; - -public class UserFirstJoin implements DatabaseItem { - private final Date date = new Date(); - - private final MongoCollection collection; - private final FindPublisher found; - private final Mono DEFAULT = Mono.just(date); - private final String KEY = "first-join"; - private final String uuid; - - public UserFirstJoin(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = found; - } - - public Mono getDate() { - try { - return Mono.from(found) - .flatMap(x -> Mono.just(x.getDate(KEY))); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - } - - public Mono setDate(Date date) { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document(KEY, date); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } - - @Override - public Mono insertDefault() { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document(KEY, DEFAULT); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/stats/UserLastJoin.java b/paper/src/main/java/com/otfhee/paper/database/user/stats/UserLastJoin.java deleted file mode 100644 index a98a3e6..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/user/stats/UserLastJoin.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.otfhee.paper.database.user.stats; - -import com.mongodb.client.model.Filters; -import com.mongodb.reactivestreams.client.FindPublisher; -import com.mongodb.reactivestreams.client.MongoCollection; -import com.otfhee.paper.database.DatabaseItem; -import com.otfhee.paper.database.user.UserNotFound; -import org.bson.Document; -import org.bson.conversions.Bson; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import reactor.core.publisher.Mono; - -import java.util.Date; - -public class UserLastJoin implements DatabaseItem { - private final Date date = new Date(); - - private final MongoCollection collection; - private final FindPublisher found; - private final Mono DEFAULT = Mono.just(date); - private final String KEY = "last-join"; - private final String uuid; - - public UserLastJoin(@NotNull MongoCollection collection, @NotNull Player player, @NotNull FindPublisher found) { - this.collection = collection; - this.uuid = player.getUniqueId().toString(); - this.found = found; - } - - public Mono getDate() { - try { - return Mono.from(found) - .flatMap(x -> Mono.just(x.getDate(KEY))); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - } - - public Mono setDate(Date date) { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document(KEY, date); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } - - @Override - public Mono insertDefault() { - return Mono.defer(() -> { - try { - Bson updatedValue = new Document(KEY, DEFAULT); - Bson updateOperation = new Document("$set", updatedValue); - return Mono.from(collection.updateOne(Filters.eq("_id", uuid), - updateOperation)) - .then(); - } catch (Exception e) { - return Mono.error(new UserNotFound(e)); - } - }); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/database/user/stats/UserStats.java b/paper/src/main/java/com/otfhee/paper/database/user/stats/UserStats.java deleted file mode 100644 index 9d6552c..0000000 --- a/paper/src/main/java/com/otfhee/paper/database/user/stats/UserStats.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.otfhee.paper.database.user.stats; - -public interface UserStats { - UserFirstJoin getUserFirstJoin(); - UserLastJoin getUserLastJoin(); -} diff --git a/paper/src/main/java/com/otfhee/paper/handlers/ChatHandler.java b/paper/src/main/java/com/otfhee/paper/handlers/ChatHandler.java deleted file mode 100644 index a5eb2ea..0000000 --- a/paper/src/main/java/com/otfhee/paper/handlers/ChatHandler.java +++ /dev/null @@ -1,145 +0,0 @@ -package com.otfhee.paper.handlers; - -import com.otfhee.paper.Plugin; -import com.otfhee.paper.database.meta.PremiumDate; -import com.otfhee.paper.database.settings.GlobalMode; -import net.kyori.adventure.audience.Audience; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.minimessage.MiniMessage; -import net.kyori.adventure.text.minimessage.tag.Tag; -import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; -import net.kyori.adventure.text.minimessage.tag.standard.StandardTags; -import org.bukkit.entity.Player; - -import java.text.DecimalFormat; -import java.util.Date; - -public class ChatHandler { - private static final DecimalFormat df = new DecimalFormat("#.#"); - public static void onChat(ChatType type, final String message, Player player, Audience audience) { - Plugin plugin = Plugin.getInstance(); - PremiumDate date = plugin.getPlayerMeta(player).getPremiumDate(); - Date now = new Date(); - GlobalMode globalMode = plugin.getPlayerSettings(player).getGlobalMode(); - - Component coordination = Component.text(Double.parseDouble(df.format(player.getX())) - + " " + Double.parseDouble(df.format(player.getY())) + " " + Double.parseDouble(df.format(player.getZ()))); - TagResolver coordinationTag = TagResolver.resolver("coordination", Tag.inserting(coordination)); - TagResolver coordinationsTag = TagResolver.resolver("coordinations", Tag.inserting(coordination)); - TagResolver coordsTag = TagResolver.resolver("coords", Tag.inserting(coordination)); - TagResolver coordTag = TagResolver.resolver("coord", Tag.inserting(coordination)); - TagResolver cordTag = TagResolver.resolver("cord", Tag.inserting(coordination)); - TagResolver cordsTag = TagResolver.resolver("cords", Tag.inserting(coordination)); - MiniMessage miniMessage = MiniMessage.builder() - .tags( - TagResolver.builder() - .resolver(coordinationTag) - .resolver(coordinationsTag) - .resolver(coordsTag) - .resolver(coordTag) - .resolver(cordTag) - .resolver(cordsTag) - .build()) - .build(); - MiniMessage premiumMiniMessage = MiniMessage.builder() - .tags( - TagResolver.builder() - .resolver(StandardTags.clickEvent()) - .resolver(StandardTags.hoverEvent()) - .resolver(StandardTags.reset()) - .resolver(StandardTags.rainbow()) - .resolver(StandardTags.gradient()) - .resolver(StandardTags.decorations()) - .resolver(StandardTags.color()) - .resolver(coordinationTag) - .resolver(coordinationsTag) - .resolver(coordsTag) - .resolver(coordTag) - .resolver(cordTag) - .resolver(cordsTag) - .build()) - .build(); - if (ChatType.GLOBAL.equals(type)) { - globalMode.getGlobalMode().subscribe(mode -> { - String msg = message; - if (msg.startsWith(" ")) { - msg = message.substring(1); - } - if (!mode) { - msg = message.substring(1); - } - if (mode && message.startsWith("!")) { - msg = message.substring(1); - } - if (mode) { - audience.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize("[G] ")) - .append(player.displayName()) - .append(Component.text(": ")) - .append(premiumMiniMessage.deserialize(msg)) - .build()); - } else { - audience.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize("[G] ")) - .append(player.displayName()) - .append(Component.text(": ")) - .append(miniMessage.deserialize(msg)) - .build()); - } - }); - } - if (ChatType.LOCAL.equals(type)) { - date.getDate().subscribe(value -> { - if (now.before(value)) { - audience.sendMessage(Component.text() - .append(player.displayName()) - .append(Component.text(": ")) - .append(premiumMiniMessage.deserialize(message)) - .build()); - } else { - audience.sendMessage(Component.text() - .append(player.displayName()) - .append(Component.text(": ")) - .append(miniMessage.deserialize(message)) - .build()); - } - }); - } - if (ChatType.PRIVATE.equals(type)) { - Player p = (Player) audience; - date.getDate().subscribe(value -> { - if (now.before(value)) { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize("✉ [")) - .append(p.displayName()) - .append(Plugin.getMiniMessage().deserialize("")) - .append(Plugin.getMiniMessage().deserialize(" Вы]")) - .append(premiumMiniMessage.deserialize(" " + message)) - .build()); - audience.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize("✉ [")) - .append(player.displayName()) - .append(Plugin.getMiniMessage().deserialize("")) - .append(Plugin.getMiniMessage().deserialize(" Вы]")) - .append(premiumMiniMessage.deserialize(" " + message)) - .build()); - } else { - player.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize("✉ [")) - .append(p.displayName()) - .append(Plugin.getMiniMessage().deserialize("")) - .append(Plugin.getMiniMessage().deserialize(" Вы]")) - .append(miniMessage.deserialize(" " + message)) - .build()); - audience.sendMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize("✉ [")) - .append(player.displayName()) - .append(Plugin.getMiniMessage().deserialize("")) - .append(Plugin.getMiniMessage().deserialize(" Вы]")) - .append(miniMessage.deserialize(" " + message)) - .build()); - } - }); - } - } -} diff --git a/paper/src/main/java/com/otfhee/paper/handlers/ChatType.java b/paper/src/main/java/com/otfhee/paper/handlers/ChatType.java deleted file mode 100644 index 85a5f25..0000000 --- a/paper/src/main/java/com/otfhee/paper/handlers/ChatType.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.otfhee.paper.handlers; - -public enum ChatType { - GLOBAL, - LOCAL, - PRIVATE; -} diff --git a/paper/src/main/java/com/otfhee/paper/handlers/ColorHandler.java b/paper/src/main/java/com/otfhee/paper/handlers/ColorHandler.java deleted file mode 100644 index f812613..0000000 --- a/paper/src/main/java/com/otfhee/paper/handlers/ColorHandler.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.otfhee.paper.handlers; - -import java.util.List; - -@Deprecated -public class ColorHandler { - public static String colorAdventureBuilder(ColorType type) { - List color = List.of(ColorType.values()); - int get = color.indexOf(type); - return "<" + color.get(get).toString() + ">"; - } - - public static String gradientAdventureBuilder(ColorType first_type, ColorType second_type) { - List color = List.of(ColorType.values()); - int first_get = color.indexOf(first_type); - int second_get = color.indexOf(second_type); - return "<" + "gradient" + ":" + color.get(first_get).toString() + ":" + color.get(second_get).toString() + ">"; - } -} diff --git a/paper/src/main/java/com/otfhee/paper/handlers/ColorType.java b/paper/src/main/java/com/otfhee/paper/handlers/ColorType.java deleted file mode 100644 index 88b34f6..0000000 --- a/paper/src/main/java/com/otfhee/paper/handlers/ColorType.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.otfhee.paper.handlers; - -public enum ColorType { - DARK_RED("dark_red"), - RED("red"), - GOLD("gold"), - YELLOW("yellow"), - DARK_GREEN("dark_green"), - GREEN("green"), - AQUA("aqua"), - DARK_AQUA("dark_aqua"), - DARK_BLUE("dark_blue"), - BLUE("blue"), - LIGHT_PURPLE("light_purple"), - DARK_PURPLE("dark_purple"), - GRAY("gray"), - DARK_GRAY("dark_gray"), - BLACK("black"), - DEFAULT("white"); - - private final String type; - - ColorType(String type) { - this.type = type; - } - - @Override - public String toString() { - return type; - } -} diff --git a/paper/src/main/java/com/otfhee/paper/handlers/ParticleHandler.java b/paper/src/main/java/com/otfhee/paper/handlers/ParticleHandler.java deleted file mode 100644 index 920040c..0000000 --- a/paper/src/main/java/com/otfhee/paper/handlers/ParticleHandler.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.otfhee.paper.handlers; - -import org.bukkit.entity.Player; - -@Deprecated -public class ParticleHandler { - public static void onHandler(Player player) { - // Deprecated - } -} diff --git a/paper/src/main/java/com/otfhee/paper/handlers/ParticleType.java b/paper/src/main/java/com/otfhee/paper/handlers/ParticleType.java deleted file mode 100644 index b3355cc..0000000 --- a/paper/src/main/java/com/otfhee/paper/handlers/ParticleType.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.otfhee.paper.handlers; - -public enum ParticleType { - NOTE, - HEART, - CHERRY_LEAVES, - DEFAULT; -} diff --git a/paper/src/main/java/com/otfhee/paper/handlers/PrefixType.java b/paper/src/main/java/com/otfhee/paper/handlers/PrefixType.java deleted file mode 100644 index 68869a0..0000000 --- a/paper/src/main/java/com/otfhee/paper/handlers/PrefixType.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.otfhee.paper.handlers; - -public enum PrefixType { - HEART_EXCLAMATION(""), - HEART(""), - AIRPLANE(""), - SUN(""), - SNOWFLAKE(""), - MOON(""), - NOTES(""), - NOTE(""), - SKULL(""), - COMET(""), - STAR(""), - PENCIL(""), - DEFAULT(""); - - - private final String type; - - PrefixType(String type) { - this.type = type; - } - - @Override - public String toString() { - return type; - } -} diff --git a/paper/src/main/java/com/otfhee/paper/handlers/PremiumHandler.java b/paper/src/main/java/com/otfhee/paper/handlers/PremiumHandler.java deleted file mode 100644 index 2fb69ec..0000000 --- a/paper/src/main/java/com/otfhee/paper/handlers/PremiumHandler.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.otfhee.paper.handlers; - -public class PremiumHandler { - public static String onHandler() { - return "Нажмите, чтобы приобрести'>OTFHEE Premium"; - } -} diff --git a/paper/src/main/java/com/otfhee/paper/handlers/RateType.java b/paper/src/main/java/com/otfhee/paper/handlers/RateType.java deleted file mode 100644 index 93d1efa..0000000 --- a/paper/src/main/java/com/otfhee/paper/handlers/RateType.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.otfhee.paper.handlers; - -public enum RateType { - MONTHLY(1), - QUARTERLY(3), - HALF_YEAR(6), - YEAR(12); - - private final int type; - - RateType(int type) { - this.type = type; - } - - public int toInt() { - return type; - } -} diff --git a/paper/src/main/java/com/otfhee/paper/listeners/AntiGreefingListener.java b/paper/src/main/java/com/otfhee/paper/listeners/AntiGreefingListener.java deleted file mode 100644 index 83bb05f..0000000 --- a/paper/src/main/java/com/otfhee/paper/listeners/AntiGreefingListener.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.otfhee.paper.listeners; - -import com.otfhee.core.messaging.MessageTypes; -import com.otfhee.paper.Plugin; -import org.bukkit.Material; -import org.bukkit.Statistic; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockPlaceEvent; - -@Deprecated -public class AntiGreefingListener implements Listener { - @EventHandler - public void onGreefing(BlockPlaceEvent event) { - Player player = event.getPlayer(); - int time = player.getStatistic(Statistic.PLAY_ONE_MINUTE) / 20; - if (time <= 172800) { - if (time <= 86400) { - eventCancelled(event, player, MessageTypes.ERROR + " Этот блок запрещёно ставить новичкам, поиграйте на сервере больше 24 часов!"); - } else if ((player.getLocation().getX() <= 1000 && player.getLocation().getZ() <= 1000) - && (player.getLocation().getX() <= -1000 && player.getLocation().getZ() <= -1000)) { - eventCancelled(event, player, MessageTypes.ERROR + " Этот блок запрещёно ставить новичкам на спавне, поиграйте на сервере больше 48-х часов!"); - } - } - } - - private void eventCancelled(BlockPlaceEvent event, Player player, String error) { - if (event.getBlock().getType().equals(Material.FIRE)) { - event.setCancelled(true); - player.sendMessage(Plugin.getMiniMessage().deserialize(error)); - } - if (event.getBlock().getType().equals(Material.TNT)) { - event.setCancelled(true); - player.sendMessage(Plugin.getMiniMessage().deserialize(error)); - } - } -} diff --git a/paper/src/main/java/com/otfhee/paper/listeners/AsyncChatListener.java b/paper/src/main/java/com/otfhee/paper/listeners/AsyncChatListener.java deleted file mode 100644 index 799cb65..0000000 --- a/paper/src/main/java/com/otfhee/paper/listeners/AsyncChatListener.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.otfhee.paper.listeners; - -import com.otfhee.paper.Plugin; -import com.otfhee.paper.database.settings.GlobalMode; -import com.otfhee.paper.database.settings.impl.GlobalModeImpl; -import com.otfhee.paper.handlers.ChatHandler; -import com.otfhee.paper.handlers.ChatType; -import io.papermc.paper.event.player.AsyncChatEvent; -import net.kyori.adventure.text.TextComponent; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; - -public class AsyncChatListener implements Listener { - @EventHandler - public void onChat(AsyncChatEvent event) { - Player sender = event.getPlayer(); - Plugin plugin = Plugin.getInstance(); - TextComponent message = (TextComponent) event.message(); - GlobalMode globalMode = new GlobalModeImpl(plugin.getPlayersCollection(), sender); - globalMode.getGlobalMode().subscribe(mode -> { - if (message.content().startsWith("!") && !message.content().equals("!") || mode) { - for (Player player : sender.getServer().getOnlinePlayers()) { - ChatHandler.onChat(ChatType.GLOBAL, message.content(), sender, player); - } - // Исходный логгинг, без MiniMessage и префикса - Bukkit.getLogger().info("[G] " + sender.getName() + ": " + message.content()); - } else { - for (Player player : sender.getServer().getOnlinePlayers()) { - if (player.getWorld().equals(sender.getWorld())) { - if (player.getLocation().distance(sender.getLocation()) <= 100) { - ChatHandler.onChat(ChatType.LOCAL, message.content(), sender, player); - } - } - } - // Исходный логгинг, без MiniMessage и префикса - Bukkit.getLogger().info(sender.getName() + ": " + message.content()); - } - }); - event.setCancelled(true); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/listeners/MoveListener.java b/paper/src/main/java/com/otfhee/paper/listeners/MoveListener.java deleted file mode 100644 index 1aaa11f..0000000 --- a/paper/src/main/java/com/otfhee/paper/listeners/MoveListener.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.otfhee.paper.listeners; - -import com.otfhee.paper.Plugin; -import com.otfhee.paper.database.meta.PremiumDate; -import com.otfhee.paper.database.meta.impl.PremiumDateImpl; -import com.otfhee.paper.handlers.ParticleHandler; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerMoveEvent; - -public class MoveListener implements Listener { - @EventHandler - public void onEvent(PlayerMoveEvent event) { - Player player = event.getPlayer(); - Plugin plugin = Plugin.getInstance(); - PremiumDate date = new PremiumDateImpl(plugin.getPlayersCollection(), player); - date.getDate().subscribe(value -> { - if (value != null) { - ParticleHandler.onHandler(event.getPlayer()); - } - }); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/listeners/PlayerHeadDropListener.java b/paper/src/main/java/com/otfhee/paper/listeners/PlayerHeadDropListener.java deleted file mode 100644 index fbd1db1..0000000 --- a/paper/src/main/java/com/otfhee/paper/listeners/PlayerHeadDropListener.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.otfhee.paper.listeners; - -import org.bukkit.Material; -import org.bukkit.entity.Creeper; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; - -public class PlayerHeadDropListener implements Listener { - @EventHandler(priority = EventPriority.MONITOR) - public void onEntityDeath(final EntityDamageByEntityEvent event) { - Entity entity = event.getEntity(); - if (entity instanceof Player player) { - if (event.getDamager() instanceof Creeper) { - if(player.getHealth() - event.getFinalDamage() <= 0 && player.getInventory().getItemInMainHand().getType() - != Material.TOTEM_OF_UNDYING && player.getInventory().getItemInOffHand().getType() - != Material.TOTEM_OF_UNDYING) { - Creeper creeper = (Creeper) event.getDamager(); - if (creeper.isPowered()) { - ItemStack playerHead = new ItemStack(Material.PLAYER_HEAD,1); - SkullMeta playerHeadMeta = (SkullMeta) playerHead.getItemMeta(); - playerHeadMeta.setOwningPlayer(player.getPlayer()); - playerHead.setItemMeta(playerHeadMeta); - entity.getWorld().dropItemNaturally(entity.getLocation(), playerHead); - } - } - } - } - } -} diff --git a/paper/src/main/java/com/otfhee/paper/listeners/PlayerJoinLeaveListener.java b/paper/src/main/java/com/otfhee/paper/listeners/PlayerJoinLeaveListener.java deleted file mode 100644 index 34ed92e..0000000 --- a/paper/src/main/java/com/otfhee/paper/listeners/PlayerJoinLeaveListener.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.otfhee.paper.listeners; - -import com.otfhee.core.messaging.Messenger; -import com.otfhee.paper.Plugin; -import com.otfhee.paper.handlers.PremiumHandler; -import net.kyori.adventure.text.Component; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -public class PlayerJoinLeaveListener implements Listener { - @EventHandler - public void onJoin(PlayerJoinEvent event) { - Player player = event.getPlayer(); - Plugin plugin = Plugin.getInstance(); - - if (!player.hasPlayedBefore()) { - Messenger messenger = Plugin.getAudienceMessenger(player); - messenger.info(Component.text() - .append(Component.text(" Добро пожаловать на OTFHEE, " + player.getName() + "!")) - .append(Component.text("Ссылка на правила сервера тык")) - .append(Component.text("Ссылка на Discord-сервер тык")) - .append(Component.text("Ссылка на Telegram канал тык")) - .append(Component.text("Ссылка на приобретение " + PremiumHandler.onHandler() + " тык")) - .build()); - plugin.createPlayer(player).insertDefault().subscribe(); - } - - event.joinMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize("[+] ")) - .append(player.displayName()) - .build()); - } - @EventHandler - public void onLeave(PlayerQuitEvent event) { - Player player = event.getPlayer(); - - event.quitMessage(Component.text() - .append(Plugin.getMiniMessage().deserialize("[-] ")) - .append(player.displayName()) - .build()); - } - -} diff --git a/paper/src/main/java/com/otfhee/paper/permissions/DefaultPermission.java b/paper/src/main/java/com/otfhee/paper/permissions/DefaultPermission.java deleted file mode 100644 index 76e6b10..0000000 --- a/paper/src/main/java/com/otfhee/paper/permissions/DefaultPermission.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.otfhee.paper.permissions; - -import com.otfhee.paper.commands.action.CoinCommand; -import com.otfhee.paper.commands.action.DoCommand; -import com.otfhee.paper.commands.action.MeCommand; -import com.otfhee.paper.commands.action.TryCommand; -import com.otfhee.paper.commands.chat.GlobalModeCommand; -import com.otfhee.paper.commands.chat.PrivateMessagesCommands; -import com.otfhee.paper.commands.social.DiscordCommand; -import com.otfhee.paper.commands.social.RulesCommand; -import com.otfhee.paper.commands.social.SiteCommand; -import com.otfhee.paper.commands.social.TelegramCommand; -import com.otfhee.paper.commands.utils.PingCommand; - -import java.util.List; - -public class DefaultPermission extends Permission { - private final org.bukkit.permissions.Permission coinPermission = new CoinCommand().getPermission(); - private final org.bukkit.permissions.Permission doPermission = new DoCommand().getPermission(); - private final org.bukkit.permissions.Permission mePermission = new MeCommand().getPermission(); - private final org.bukkit.permissions.Permission tryPermission = new TryCommand().getPermission(); - private final org.bukkit.permissions.Permission globalModePermission = new GlobalModeCommand().getPermission(); - private final org.bukkit.permissions.Permission privateMessagesPermission = new PrivateMessagesCommands().getPermission(); - private final org.bukkit.permissions.Permission discordPermission = new DiscordCommand().getPermission(); - private final org.bukkit.permissions.Permission rulesPermission = new RulesCommand().getPermission(); - private final org.bukkit.permissions.Permission sitePermission = new SiteCommand().getPermission(); - private final org.bukkit.permissions.Permission telegramPermission = new TelegramCommand().getPermission(); - private final org.bukkit.permissions.Permission pingPermission = new PingCommand().getPermission(); - - @Override - public List getPermissions() { - return List.of(coinPermission, doPermission, mePermission, tryPermission, globalModePermission, - privateMessagesPermission, discordPermission, rulesPermission, sitePermission, telegramPermission, - pingPermission); - } - - @Override - public String getGroup() { - return "default"; - } -} diff --git a/paper/src/main/java/com/otfhee/paper/permissions/Permission.java b/paper/src/main/java/com/otfhee/paper/permissions/Permission.java deleted file mode 100644 index f8054fb..0000000 --- a/paper/src/main/java/com/otfhee/paper/permissions/Permission.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.otfhee.paper.permissions; - -import com.otfhee.paper.Plugin; -import com.otfhee.paper.database.meta.impl.PlayerPermissionsImpl; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import reactor.core.publisher.Mono; - -import java.util.List; - -public abstract class Permission implements Runnable { - @Override - public void run() { - Plugin plugin = Plugin.getInstance(); - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - Mono> permissions = new PlayerPermissionsImpl(plugin.getPlayersCollection(), player).getPermissions(); - - permissions.subscribe(perm -> { - if (perm.contains(getGroup())) { - for (org.bukkit.permissions.Permission permission : getPermissions()) { - player.addAttachment(plugin, permission.getName(), true); - player.updateCommands(); - } - } else { - for (org.bukkit.permissions.Permission permission : getPermissions()) { - player.addAttachment(plugin, permission.getName(), false); - player.updateCommands(); - } - } - }); - } - } - - public void execute(@NotNull Plugin plugin) { - plugin.getServer().getGlobalRegionScheduler().runAtFixedRate(plugin, scheduledTask -> run(), 1L, 20L); - } - - abstract List getPermissions(); - abstract String getGroup(); -} diff --git a/paper/src/main/java/com/otfhee/paper/schedulers/AutoRestart.java b/paper/src/main/java/com/otfhee/paper/schedulers/AutoRestart.java deleted file mode 100644 index b6ee255..0000000 --- a/paper/src/main/java/com/otfhee/paper/schedulers/AutoRestart.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.otfhee.paper.schedulers; - -import com.otfhee.paper.Plugin; -import org.bukkit.Bukkit; - -import java.text.SimpleDateFormat; -import java.util.Date; - -@Deprecated -public class AutoRestart implements Runnable { - @Override - public void run() { - long currentTime = System.currentTimeMillis(); - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss"); - Date date = new Date(currentTime); - String time = simpleDateFormat.format(date); - - if (time.equals("23:30:00")) { - Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 30 минут!"); - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 30 минут!"); - } - if (time.equals("23:45:00")) { - Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 15 минут!"); - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 15 минут!"); - } - if (time.equals("23:50:00")) { - Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 10 минут!"); - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 10 минут!"); - } - if (time.equals("23:55:00")) { - Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 5 минут!"); - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 5 минут!"); - } - if (time.equals("23:59:00")) { - Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 1 минуту!"); - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 1 минуту!"); - } - if (time.equals("23:59:30")) { - Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 30 секунд!"); - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 30 секунд!"); - } - if (time.equals("23:59:45")) { - Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 15 секунд!"); - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 15 секунд!"); - } - if (time.equals("23:59:55")) { - Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 5 секунд!"); - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 5 секунд!"); - } - if (time.equals("23:59:56")) { - Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 4 секунд!"); - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 4 секунды!"); - } - if (time.equals("23:59:57")) { - Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 3 секунд!"); - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 3 секунды!"); - } - if (time.equals("23:59:58")) { - Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 2 секунды!"); - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 2 секунды!"); - } - if (time.equals("23:59:59")) { - Plugin.getMessenger().warning("Перезагрузка сервера произойдёт через 1 секунду!"); - Bukkit.getLogger().info("[⚠] Перезагрузка сервера произойдёт через 1 секунду!"); - } - if (time.equals("00:00:00")) { - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "stop"); - } - } -} diff --git a/paper/src/main/java/com/otfhee/paper/schedulers/CheckPremium.java b/paper/src/main/java/com/otfhee/paper/schedulers/CheckPremium.java deleted file mode 100644 index ede72b0..0000000 --- a/paper/src/main/java/com/otfhee/paper/schedulers/CheckPremium.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.otfhee.paper.schedulers; - -import com.otfhee.paper.Plugin; -import com.otfhee.paper.database.meta.PremiumDate; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import java.util.Date; - -@Deprecated -public class CheckPremium implements Runnable { - @Override - public void run() { - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - Date now = new Date(); - Plugin plugin = Plugin.getInstance(); - PremiumDate date = plugin.getPlayerMeta(player).getPremiumDate(); - date.getDate().subscribe(value -> { - if (value != null) { - if (now.after(value)) { - date.insertDefault(); - } - } - }); - } - } -} diff --git a/paper/src/main/java/com/otfhee/paper/schedulers/TabList.java b/paper/src/main/java/com/otfhee/paper/schedulers/TabList.java deleted file mode 100644 index a3e56db..0000000 --- a/paper/src/main/java/com/otfhee/paper/schedulers/TabList.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.otfhee.paper.schedulers; - -import com.otfhee.paper.Plugin; -import com.otfhee.paper.telemetry.PingTelemetry; -import com.otfhee.paper.telemetry.TPSTelemetry; -import net.kyori.adventure.text.Component; -import org.bukkit.entity.Player; - -import java.util.Objects; - -public class TabList implements Runnable { - @Override - public void run() { - for (Player player : Plugin.getInstance().getServer().getOnlinePlayers()) { - final Component header = Component.text() - .append(Plugin.getMiniMessage().deserialize(" TPS: ")) - .append(TPSTelemetry.getTPS()) - .append(Plugin.getMiniMessage().deserialize(" | OTFHEE | Онлайн: " + Plugin.getInstance().getServer().getOnlinePlayers().size() + " ")) - .append(Plugin.getMiniMessage().deserialize("")) - .build(); - final Component footer = Component.text() - .append(Plugin.getMiniMessage().deserialize("")) - .append(Plugin.getMiniMessage().deserialize(Objects.requireNonNull(Plugin.getInstance().getConfig().getString("notd")))) - .append(Plugin.getMiniMessage().deserialize("")) - .build(); - player.sendPlayerListHeaderAndFooter(header, footer); - player.playerListName(Component.text() - .append(player.displayName()) - .append(Component.text(" "), PingTelemetry.getPing(player.getPing())) - .build()); - } - } -} diff --git a/paper/src/main/java/com/otfhee/paper/telemetry/PingTelemetry.java b/paper/src/main/java/com/otfhee/paper/telemetry/PingTelemetry.java deleted file mode 100644 index b047407..0000000 --- a/paper/src/main/java/com/otfhee/paper/telemetry/PingTelemetry.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.otfhee.paper.telemetry; - -import com.otfhee.paper.Plugin; -import net.kyori.adventure.text.Component; -import org.jetbrains.annotations.NotNull; - -@Deprecated -public class PingTelemetry { - public static @NotNull Component getPing(int ping) { - if (ping >= 0) { - if (ping >= 200) { - if (ping >= 300) { - return Plugin.getMiniMessage().deserialize("" + ping + "мс"); - } - return Plugin.getMiniMessage().deserialize("" + ping + "мс"); - } - return Plugin.getMiniMessage().deserialize("" + ping + "мс"); - } - return Plugin.getMiniMessage().deserialize("" + ping + "мс"); - } -} diff --git a/paper/src/main/java/com/otfhee/paper/telemetry/TPSTelemetry.java b/paper/src/main/java/com/otfhee/paper/telemetry/TPSTelemetry.java deleted file mode 100644 index d27f5d1..0000000 --- a/paper/src/main/java/com/otfhee/paper/telemetry/TPSTelemetry.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.otfhee.paper.telemetry; - -import com.otfhee.paper.Plugin; -import net.kyori.adventure.text.Component; -import org.jetbrains.annotations.NotNull; - -import java.text.DecimalFormat; - -@Deprecated -public class TPSTelemetry { - public static @NotNull Component getTPS() { - DecimalFormat df = new DecimalFormat("#.#"); - double[] tps = Plugin.getInstance().getServer().getTPS(); - double finalTPS = Double.parseDouble(df.format(tps[0])); - if (finalTPS <= 20) { - if (finalTPS <= 18) { - if (finalTPS <= 10) { - return Plugin.getMiniMessage().deserialize("" + finalTPS); - } - return Plugin.getMiniMessage().deserialize("" + finalTPS); - } - return Plugin.getMiniMessage().deserialize("" + finalTPS); - } - if (finalTPS > 20) { - return Plugin.getMiniMessage().deserialize("" + 20.0D + "*"); - } - return Plugin.getMiniMessage().deserialize("" + finalTPS); - } -} diff --git a/paper/src/main/kotlin/com/otfhee/paper/Plugin.kt b/paper/src/main/kotlin/com/otfhee/paper/Plugin.kt new file mode 100644 index 0000000..8bbf580 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/Plugin.kt @@ -0,0 +1,131 @@ +package com.otfhee.paper + +import com.otfhee.paper.commands.GuildCommand +import com.otfhee.paper.commands.action.CoinCommand +import com.otfhee.paper.commands.action.DoCommand +import com.otfhee.paper.commands.action.MeCommand +import com.otfhee.paper.commands.action.TryCommand +import com.otfhee.paper.commands.util.LanguageCommand +import com.otfhee.paper.commands.util.StatusCommand +import com.otfhee.paper.commands.display.DisplayColor +import com.otfhee.paper.commands.security.BanCommand +import com.otfhee.paper.commands.display.DisplayCommand +import com.otfhee.paper.commands.security.UnbanCommand +import com.otfhee.paper.commands.chat.GlobalModeCommand +import com.otfhee.paper.commands.chat.PrivateMessagesCommand +import com.otfhee.paper.commands.social.DiscordCommand +import com.otfhee.paper.commands.social.RulesCommand +import com.otfhee.paper.commands.social.SiteCommand +import com.otfhee.paper.commands.social.TelegramCommand +import com.otfhee.paper.commands.util.PingCommand +import com.otfhee.paper.database.ban.Bans +import com.otfhee.paper.database.user.Users +import com.otfhee.paper.listeners.* +import com.otfhee.paper.schedulers.PlayerHeadDropListener +import com.otfhee.paper.schedulers.PlayerList +import com.otfhee.paper.schedulers.AutoRestart +import dev.jorel.commandapi.CommandAPI +import net.luckperms.api.LuckPerms +import org.bukkit.Bukkit +import org.bukkit.plugin.RegisteredServiceProvider +import org.bukkit.plugin.java.JavaPlugin +import org.jetbrains.exposed.sql.Database +import org.jetbrains.exposed.sql.SchemaUtils +import org.jetbrains.exposed.sql.transactions.transaction +import java.io.File + + +class Plugin : JavaPlugin() { + private var provider: RegisteredServiceProvider? = Bukkit.getServicesManager().getRegistration(LuckPerms::class.java) + private var lastModified: Long = 0 + private lateinit var configFile: File + + override fun onEnable() { + super.onEnable() + saveDefaultConfig() + connectDB() + CommandAPI.onEnable() + DisplayColor() + DisplayCommand() + StatusCommand() + LanguageCommand() + BanCommand() + UnbanCommand() + GuildCommand() + PrivateMessagesCommand() + CoinCommand() + GlobalModeCommand() + DoCommand() + MeCommand() + TryCommand() + DiscordCommand() + RulesCommand() + SiteCommand() + TelegramCommand() + PingCommand() + + configFile = File(dataFolder, "config.yml") + lastModified = configFile.lastModified() + + server.pluginManager.registerEvents(AntiGriefListener(), this) + server.pluginManager.registerEvents(LoginListener(), this) + server.pluginManager.registerEvents(PlayerHeadDropListener(), this) + server.pluginManager.registerEvents(ChatListener(), this) + server.pluginManager.registerEvents(StatusListener(), this) + server.pluginManager.registerEvents(BanListener(), this) + server.pluginManager.registerEvents(AnvilListener(), this) + server.globalRegionScheduler.runAtFixedRate(this, { AutoRestart().run() }, 1L, 20L) + server.globalRegionScheduler.runAtFixedRate(this, { PlayerList().run() }, 1L, 20L) + server.globalRegionScheduler.runAtFixedRate(this, { StatusListener().run() }, 1L, 20L) + server.globalRegionScheduler.runAtFixedRate(this, { checkConfigChanges() }, 20L * 5, 20L * 5) + } + + override fun onDisable() { + super.onDisable() + CommandAPI.onDisable() + } + + private fun connectDB() { + when(val url: String? = config.getString("database.url")) { + null -> { + logger.warning("URL database is empty!") + server.pluginManager.disablePlugin(this) + } + else -> { + Database.connect( + "$url?createDatabaseIfNotExist=true", + driver = "org.mariadb.jdbc.Driver", + user = config.getString("database.user").toString(), + password = config.getString("database.password").toString(), + setupConnection = { connection -> + connection.autoCommit = false + } + ) + logger.warning("Database connected!") + } + } + + transaction { + SchemaUtils.create( + Users, + Bans + ) + } + } + + private fun checkConfigChanges() { + val currentModified = configFile.lastModified() + + if (currentModified > lastModified) { + server.globalRegionScheduler.run(this) { _ -> + reloadConfig() + logger.info("Configuration has been reloaded!") + } + lastModified = currentModified + } + } + + fun luckPerms(): LuckPerms { + return provider!!.provider + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/commands/GuildCommand.kt b/paper/src/main/kotlin/com/otfhee/paper/commands/GuildCommand.kt new file mode 100644 index 0000000..806d591 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/commands/GuildCommand.kt @@ -0,0 +1,16 @@ +package com.otfhee.paper.commands + +import com.otfhee.paper.messenger.Messenger +import dev.jorel.commandapi.CommandAPICommand +import dev.jorel.commandapi.executors.PlayerCommandExecutor + +class GuildCommand { + init { + CommandAPICommand("guild") + .executesPlayer(PlayerCommandExecutor {sender, _ -> + val messenger = Messenger() + messenger.error("Эта команда не доступна в данный момент!", sender) + }) + .register() + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/commands/action/CoinCommand.kt b/paper/src/main/kotlin/com/otfhee/paper/commands/action/CoinCommand.kt new file mode 100644 index 0000000..0234d6c --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/commands/action/CoinCommand.kt @@ -0,0 +1,37 @@ +package com.otfhee.paper.commands.action + +import com.otfhee.paper.Plugin +import com.otfhee.paper.display.DisplayName +import com.otfhee.paper.messenger.Messenger +import com.otfhee.paper.utils.LanguageUtil +import dev.jorel.commandapi.CommandAPICommand +import dev.jorel.commandapi.executors.PlayerCommandExecutor +import kotlin.random.Random + +class CoinCommand { + init { + CommandAPICommand("coin") + .withPermission("otfhee.commands.default.coin") + .executesPlayer(PlayerCommandExecutor { sender, _ -> + val languageUtil = LanguageUtil() + val messenger = Messenger() + val displayName = DisplayName(sender).get() + val plugin = Plugin() + + val heads = { + plugin.server.onlinePlayers.forEach { player -> + messenger.info("$displayName ${languageUtil.getMessage(player, "commands.coin.heads")}", player) + } + } + val tails = { + plugin.server.onlinePlayers.forEach { player -> + messenger.info("$displayName ${languageUtil.getMessage(player, "commands.coin.tails")}", player) + } + } + val coins = arrayOf(heads, tails) + val randomIndex = Random.nextInt(coins.size) + coins[randomIndex].invoke() + }) + .register() + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/commands/action/DoCommand.kt b/paper/src/main/kotlin/com/otfhee/paper/commands/action/DoCommand.kt new file mode 100644 index 0000000..a59f033 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/commands/action/DoCommand.kt @@ -0,0 +1,23 @@ +package com.otfhee.paper.commands.action + +import com.otfhee.paper.display.DisplayName +import com.otfhee.paper.messenger.Messenger +import dev.jorel.commandapi.CommandAPICommand +import dev.jorel.commandapi.arguments.GreedyStringArgument +import dev.jorel.commandapi.executors.PlayerCommandExecutor + +class DoCommand { + init { + CommandAPICommand("do") + .withArguments(GreedyStringArgument("action")) + .withPermission("otfhee.commands.default.do") + .executesPlayer(PlayerCommandExecutor { sender, args -> + val action = args.get("action") as String + val messenger = Messenger() + val displayName = DisplayName(sender).get() + + messenger.info("*$displayName $action *") + }) + .register() + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/commands/action/MeCommand.kt b/paper/src/main/kotlin/com/otfhee/paper/commands/action/MeCommand.kt new file mode 100644 index 0000000..7553a26 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/commands/action/MeCommand.kt @@ -0,0 +1,25 @@ +package com.otfhee.paper.commands.action + +import com.otfhee.paper.display.DisplayName +import com.otfhee.paper.messenger.Messenger +import dev.jorel.commandapi.CommandAPI +import dev.jorel.commandapi.CommandAPICommand +import dev.jorel.commandapi.arguments.GreedyStringArgument +import dev.jorel.commandapi.executors.PlayerCommandExecutor + +class MeCommand { + init { + CommandAPI.unregister("me") + CommandAPICommand("me") + .withArguments(GreedyStringArgument("action")) + .withPermission("otfhee.commands.default.me") + .executesPlayer(PlayerCommandExecutor { sender, args -> + val action = args.get("action") as String + val messenger = Messenger() + val displayName = DisplayName(sender).get() + + messenger.info("$displayName $action *") + }) + .register() + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/commands/action/TryCommand.kt b/paper/src/main/kotlin/com/otfhee/paper/commands/action/TryCommand.kt new file mode 100644 index 0000000..24ce158 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/commands/action/TryCommand.kt @@ -0,0 +1,48 @@ +package com.otfhee.paper.commands.action + +import com.otfhee.paper.Plugin +import com.otfhee.paper.display.DisplayName +import com.otfhee.paper.messenger.Messenger +import com.otfhee.paper.utils.LanguageUtil +import dev.jorel.commandapi.CommandAPICommand +import dev.jorel.commandapi.arguments.GreedyStringArgument +import dev.jorel.commandapi.executors.PlayerCommandExecutor +import kotlin.random.Random + +class TryCommand { + init { + CommandAPICommand("try") + .withPermission("otfhee.commands.default.try") + .withArguments(GreedyStringArgument("action")) + .executesPlayer(PlayerCommandExecutor { sender, args -> + val plugin = Plugin() + val languageUtil = LanguageUtil() + val messenger = Messenger() + val displayName = DisplayName(sender).get() + val action = args.get("action") as String + + val success = { + plugin.server.onlinePlayers.forEach { player -> + messenger.info( + "$displayName ${ + languageUtil.getMessage(player, "commands.try.success") + .replace("", action) + }", player) + } + } + val fail = { + plugin.server.onlinePlayers.forEach { player -> + messenger.info( + "$displayName ${ + languageUtil.getMessage(player, "commands.try.fail") + .replace("", action) + }", player) + } + } + val arr = arrayOf(success, fail) + val randomIndex = Random.nextInt(arr.size) + arr[randomIndex].invoke() + }) + .register() + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/commands/chat/GlobalModeCommand.kt b/paper/src/main/kotlin/com/otfhee/paper/commands/chat/GlobalModeCommand.kt new file mode 100644 index 0000000..13d2e5d --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/commands/chat/GlobalModeCommand.kt @@ -0,0 +1,30 @@ +package com.otfhee.paper.commands.chat + +import com.otfhee.paper.database.user.User +import com.otfhee.paper.utils.LanguageUtil +import dev.jorel.commandapi.CommandAPICommand +import dev.jorel.commandapi.executors.PlayerCommandExecutor +import org.jetbrains.exposed.sql.transactions.transaction + +class GlobalModeCommand { + init { + CommandAPICommand("global") + .withAliases("g") + .withPermission("otfhee.commands.default.global") + .executesPlayer(PlayerCommandExecutor { sender, _ -> + val languageUtil = LanguageUtil() + + transaction { + val user = User[sender.uniqueId] + if (user.globalMode) { + user.globalMode = false + languageUtil.success("commands.global-mode.false", sender) + } else { + user.globalMode = true + languageUtil.success("commands.global-mode.true", sender) + } + } + }) + .register() + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/commands/chat/PrivateMessagesCommand.kt b/paper/src/main/kotlin/com/otfhee/paper/commands/chat/PrivateMessagesCommand.kt new file mode 100644 index 0000000..6e634f7 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/commands/chat/PrivateMessagesCommand.kt @@ -0,0 +1,92 @@ +package com.otfhee.paper.commands.chat + +import com.otfhee.paper.Plugin +import com.otfhee.paper.display.DisplayName +import com.otfhee.paper.listeners.ChatListener +import com.otfhee.paper.utils.LanguageUtil +import dev.jorel.commandapi.CommandAPI +import dev.jorel.commandapi.CommandAPICommand +import dev.jorel.commandapi.arguments.GreedyStringArgument +import dev.jorel.commandapi.arguments.PlayerArgument +import dev.jorel.commandapi.executors.PlayerCommandExecutor +import net.kyori.adventure.text.Component +import net.kyori.adventure.text.minimessage.MiniMessage +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer +import org.bukkit.Bukkit +import org.bukkit.entity.Player +import java.util.* +import kotlin.collections.HashMap + +class PrivateMessagesCommand { + private val plainSerializer = PlainTextComponentSerializer.plainText() + private val lastMessengers = HashMap() + private val miniMessage = MiniMessage.miniMessage() + private val plugin = Plugin() + private val languageUtil = LanguageUtil() + + init { + CommandAPI.unregister("msg") + CommandAPI.unregister("tell") + CommandAPI.unregister("w") + + CommandAPICommand("message") + .withPermission("otfhee.commands.default.pm") + .withAliases("tell", "msg", "w") + .withArguments(PlayerArgument("player")) + .withArguments(GreedyStringArgument("message")) + .executesPlayer(PlayerCommandExecutor{ player, args -> + val recipient = args.get("player") as Player + val message = args.get("message") as String + + sendPrivateMessage(player, recipient, miniMessage.deserialize(message)) + lastMessengers[recipient.uniqueId] = player.uniqueId + }) + .register() + + CommandAPICommand("reply") + .withAliases("r") + .withPermission("otfhee.commands.default.reply") + .withArguments(GreedyStringArgument("message")) + .executesPlayer(PlayerCommandExecutor{ player, args -> + val message = args.get("message") as String + val lastMessengerId = lastMessengers[player.uniqueId] + + if (lastMessengerId == null) { + languageUtil.error("commands.private-messages.reply-error", player) + return@PlayerCommandExecutor + } + + val recipient = Bukkit.getPlayer(lastMessengerId) + if (recipient == null || !recipient.isOnline) { + languageUtil.error("util.player-not-online", player) + return@PlayerCommandExecutor + } + + sendPrivateMessage(player, recipient, miniMessage.deserialize(message)) + lastMessengers[recipient.uniqueId] = player.uniqueId + }) + .register() + } + + private fun sendPrivateMessage(sender: Player, recipient: Player, message: Component) { + val messageText = plainSerializer.serialize(message) + val format = plugin.config.getString("chat.style.private-format") + ?: ": " + + val processedMessage = ChatListener().processUrls(messageText, sender) + + val finalMessage = format + .replace("", DisplayName(sender).get()) + .replace("", DisplayName(recipient).get()) + .replace("", processedMessage) + + val component = miniMessage.deserialize(finalMessage) + + sender.sendMessage(component) + recipient.sendMessage(component) + } + + fun cleanupPlayerData(player: Player) { + lastMessengers.remove(player.uniqueId) + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/commands/display/DisplayColor.kt b/paper/src/main/kotlin/com/otfhee/paper/commands/display/DisplayColor.kt new file mode 100644 index 0000000..95f9fb5 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/commands/display/DisplayColor.kt @@ -0,0 +1,71 @@ +package com.otfhee.paper.commands.display + +import com.otfhee.paper.database.user.User +import com.otfhee.paper.utils.LanguageUtil +import dev.jorel.commandapi.CommandAPICommand +import dev.jorel.commandapi.arguments.GreedyStringArgument +import dev.jorel.commandapi.executors.PlayerCommandExecutor +import net.kyori.adventure.text.format.NamedTextColor +import net.kyori.adventure.text.minimessage.MiniMessage +import org.jetbrains.exposed.sql.transactions.transaction + +class DisplayColor { + private val namedColors = NamedTextColor.NAMES.keys().joinToString("|") + private val hexColor = "#[0-9A-Fa-f]{6}" + private val anyColor = "$hexColor|$namedColors" + + fun register(): CommandAPICommand { + return CommandAPICommand("color") + .withArguments(GreedyStringArgument("color")) + .executesPlayer(PlayerCommandExecutor { player, args -> + val rawInput = args.get("color") as String + val languageUtil = LanguageUtil() + + if (rawInput.length > 255) { + languageUtil.error("commands.display.color.limit", player) + return@PlayerCommandExecutor + } + + val fullTag = if (!isValidFormat(rawInput)) { + languageUtil.error("commands.display.color.format", player) + return@PlayerCommandExecutor + } else { + "<${rawInput}>" + } + + try { + MiniMessage.miniMessage().deserialize(fullTag) + } catch (e: Exception) { + languageUtil.error("commands.display.color.format", player) + return@PlayerCommandExecutor + } + + try { + transaction { + val user = User[player.uniqueId] + user.displayColor = fullTag + } + languageUtil.success("commands.display.color.success", player) + } catch (e: Exception) { + languageUtil.error("commands.display.color.error", player) + e.printStackTrace() + } + }) + } + + private fun isValidFormat(input: String): Boolean { + if (input.startsWith("color:")) { + val content = input.substringAfter("color:") + return content.matches(Regex(hexColor)) || content.matches(Regex(namedColors)) + } + + if (input.startsWith("gradient:")) { + val content = input.substringAfter("gradient:") + val colors = content.split(":") + return colors.size >= 2 && + colors.all { it.matches(Regex(anyColor)) } + } + + return false + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/commands/display/DisplayCommand.kt b/paper/src/main/kotlin/com/otfhee/paper/commands/display/DisplayCommand.kt new file mode 100644 index 0000000..94c5ae0 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/commands/display/DisplayCommand.kt @@ -0,0 +1,15 @@ +package com.otfhee.paper.commands.display + +import dev.jorel.commandapi.CommandAPICommand + +class DisplayCommand { + init { + CommandAPICommand("display") + .withPermission("otfhee.commands.premium.display") + .withSubcommands( + DisplayColor().register(), + DisplayPrefix().register() + ) + .register() + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/commands/display/DisplayPrefix.kt b/paper/src/main/kotlin/com/otfhee/paper/commands/display/DisplayPrefix.kt new file mode 100644 index 0000000..9ecd87d --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/commands/display/DisplayPrefix.kt @@ -0,0 +1,91 @@ +package com.otfhee.paper.commands.display + +import com.otfhee.paper.Plugin +import com.otfhee.paper.messenger.Messenger +import com.otfhee.paper.utils.LanguageUtil +import dev.jorel.commandapi.CommandAPICommand +import dev.jorel.commandapi.arguments.Argument +import dev.jorel.commandapi.arguments.ArgumentSuggestions +import dev.jorel.commandapi.arguments.GreedyStringArgument +import dev.jorel.commandapi.executors.PlayerCommandExecutor +import net.luckperms.api.model.user.User +import net.luckperms.api.node.types.PrefixNode +import org.bukkit.entity.Player +import java.util.* + +class DisplayPrefix { + private val plugin = Plugin() + private val luckPerms = plugin.luckPerms() + + fun register(): CommandAPICommand { + return CommandAPICommand("prefix") + .withArguments(prefixArgument()) + .executesPlayer(PlayerCommandExecutor { player, args -> + val prefix = args.get("prefix") as String + setPrefix(player, prefix) + }) + } + + private fun prefixArgument(): Argument? { + return GreedyStringArgument("prefix") + .replaceSuggestions(ArgumentSuggestions.strings { info -> + val player = info.sender as? Player ?: return@strings emptyArray() + getAvailablePrefixes(player).toTypedArray() + }) + } + + private fun getAvailablePrefixes(player: Player): List { + val user = luckPerms.userManager.getUser(player.uniqueId) ?: return emptyList() + + return user.getInheritedGroups(user.queryOptions) + .flatMap { group -> + group.nodes + .filterIsInstance() + .map { it.metaValue } + } + .distinct() + } + + private fun setPrefix(player: Player, newPrefix: String) { + val user = luckPerms.userManager.getUser(player.uniqueId) ?: return + val languageUtil = LanguageUtil() + val messenger = Messenger() + + if (!isValidPrefix(user, newPrefix)) { + languageUtil.error("commands.display.prefix.permission", player) + return + } + + val metaNode = luckPerms.nodeBuilderRegistry + .forPrefix() + .prefix(newPrefix) + .priority(100) + .build() + + user.data().clear { node -> + node.key.startsWith("prefix.") + } + + user.data().add(metaNode) + + luckPerms.userManager.saveUser(user) + + messenger.success(languageUtil.getMessage(player, "commands.display.prefix.success") + .replace("", newPrefix), player) + } + + private fun isValidPrefix(user: User, prefix: String): Boolean { + return getAvailablePrefixes(user.uniqueId).contains(prefix) + } + + private fun getAvailablePrefixes(uuid: UUID): List { + val user = luckPerms.userManager.getUser(uuid) ?: return emptyList() + return user.getInheritedGroups(user.queryOptions) + .flatMap { group -> + group.nodes + .filterIsInstance() + .map { it.metaValue } + } + .distinct() + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/commands/security/BanCommand.kt b/paper/src/main/kotlin/com/otfhee/paper/commands/security/BanCommand.kt new file mode 100644 index 0000000..3ed2507 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/commands/security/BanCommand.kt @@ -0,0 +1,117 @@ +package com.otfhee.paper.commands.security + +import com.otfhee.paper.Plugin +import com.otfhee.paper.messenger.Messenger +import com.otfhee.paper.utils.BanUtil +import com.otfhee.paper.utils.LanguageUtil +import dev.jorel.commandapi.CommandAPI +import dev.jorel.commandapi.CommandAPICommand +import dev.jorel.commandapi.arguments.ArgumentSuggestions +import dev.jorel.commandapi.arguments.GreedyStringArgument +import dev.jorel.commandapi.arguments.OfflinePlayerArgument +import dev.jorel.commandapi.arguments.StringArgument +import dev.jorel.commandapi.executors.CommandExecutor +import org.bukkit.Bukkit +import org.bukkit.OfflinePlayer +import org.bukkit.entity.Player +import java.util.regex.Pattern + +class BanCommand { + private val banUtil = BanUtil() + private val durationPattern = Pattern.compile("(\\d+)([dhms])") + private val plugin = Plugin() + + init { + CommandAPI.unregister("ban") + CommandAPICommand("ban") + .withPermission("otfhee.commands.staff.ban") + .withArguments(OfflinePlayerArgument("player")) + .withArguments( + StringArgument("duration") + .replaceSuggestions(ArgumentSuggestions.strings("5s", "10m", "12h", "1d", "7d", "30d", "permanent")) + ) + .withArguments(GreedyStringArgument("reason")) + .executes(CommandExecutor { sender, args -> + val target = args.get("player") as OfflinePlayer + val durationArg = args.get("duration") as String + val reason = args.get("reason") as String + val languageUtil = LanguageUtil() + val messenger = Messenger() + + if (target.isOnline && target.player?.hasPermission("otfhee.commands.ban.bypass") == true) { + if (sender !is Player) + messenger.error("This player cannot be banned.", sender) + else + languageUtil.error("commands.ban.cannot-ban", sender) + return@CommandExecutor + } + + val duration = if (durationArg.equals("permanent", ignoreCase = true)) { + null + } else { + parseDuration(durationArg) + } + + val adminUUID = if (sender is Player) sender.uniqueId else Bukkit.getOfflinePlayer("CONSOLE").uniqueId + + val success = banUtil.banPlayer( + playerUUID = target.uniqueId, + reason = reason, + adminUUID = adminUUID, + durationMillis = duration + ) + + if (success) { + val banInfo = banUtil.getBanInfo(target.uniqueId) + if (banInfo != null) { + plugin.server.onlinePlayers.forEach { player -> + if (player.hasPermission("otfhee.util.ban.message")) { + banUtil.banMessage(banInfo, player) + } + } + + if (target.isOnline && target.player != null) { + banUtil.kickBannedPlayer(target.player!!, reason, banInfo.expireDate) + } + } else { + if (sender !is Player) + messenger.error("Player has been successfully banned, but no information about the ban could be obtained.", sender) + else + languageUtil.error("commands.ban.success", sender) + } + } else { + if (sender !is Player) + messenger.error("Failed to ban a player. He may have already been banned.", sender) + else + languageUtil.error("commands.ban.fail", sender) + } + }) + .register() + } + + private fun parseDuration(input: String): Long? { + try { + val matcher = durationPattern.matcher(input) + var totalMillis: Long = 0 + + while (matcher.find()) { + val amount = matcher.group(1).toLong() + val unit = matcher.group(2) + + val millis = when (unit) { + "s" -> amount * 1000 + "m" -> amount * 60 * 1000 + "h" -> amount * 60 * 60 * 1000 + "d" -> amount * 24 * 60 * 60 * 1000 + else -> 0 + } + + totalMillis += millis + } + + return if (totalMillis == 0L) null else totalMillis + } catch (e: Exception) { + return null + } + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/commands/security/UnbanCommand.kt b/paper/src/main/kotlin/com/otfhee/paper/commands/security/UnbanCommand.kt new file mode 100644 index 0000000..3a6fa92 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/commands/security/UnbanCommand.kt @@ -0,0 +1,58 @@ +package com.otfhee.paper.commands.security + +import com.otfhee.paper.Plugin +import com.otfhee.paper.messenger.Messenger +import com.otfhee.paper.utils.BanUtil +import com.otfhee.paper.utils.LanguageUtil +import dev.jorel.commandapi.CommandAPI +import dev.jorel.commandapi.CommandAPICommand +import dev.jorel.commandapi.arguments.OfflinePlayerArgument +import dev.jorel.commandapi.executors.CommandExecutor +import org.bukkit.OfflinePlayer +import org.bukkit.entity.Player + +class UnbanCommand { + private val plugin = Plugin() + private val banUtil = BanUtil() + + init { + CommandAPI.unregister("pardon") + CommandAPICommand("unban") + .withPermission("otfhee.commands.staff.unban") + .withArguments(OfflinePlayerArgument("player")) + .executes(CommandExecutor { sender, args -> + val target = args.get("player") as OfflinePlayer + val playerName = target.name ?: "Unknown" + val banInfo = banUtil.getBanInfo(target.uniqueId) + val languageUtil = LanguageUtil() + val messenger = Messenger() + + if (banInfo == null) { + if (sender !is Player) + messenger.error("The player is not banned!", sender) + else + languageUtil.error("commands.unban.player-not-banned", sender) + return@CommandExecutor + } + + val success = banUtil.unbanPlayer(target.uniqueId) + + if (success) { + val adminName = if (sender is Player) sender.name else "CONSOLE" + plugin.server.onlinePlayers.forEach { player -> + messenger.info( + languageUtil.getMessage(player, "util.unban.message") + .replace("", playerName) + .replace("", adminName), player + ) + } + } else { + if (sender !is Player) + messenger.error("There was an error when the ban was lifted!", sender) + else + languageUtil.error("commands.unban.error", sender) + } + }) + .register() + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/commands/social/DiscordCommand.kt b/paper/src/main/kotlin/com/otfhee/paper/commands/social/DiscordCommand.kt new file mode 100644 index 0000000..3c8d554 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/commands/social/DiscordCommand.kt @@ -0,0 +1,18 @@ +package com.otfhee.paper.commands.social + +import com.otfhee.paper.utils.LanguageUtil +import dev.jorel.commandapi.CommandAPICommand +import dev.jorel.commandapi.executors.PlayerCommandExecutor + +class DiscordCommand { + init { + CommandAPICommand("discord") + .withAliases("ds") + .withPermission("otfhee.commands.default.discord") + .executesPlayer(PlayerCommandExecutor { sender, _ -> + val languageUtil = LanguageUtil() + languageUtil.info("commands.discord", sender) + }) + .register() + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/commands/social/RulesCommand.kt b/paper/src/main/kotlin/com/otfhee/paper/commands/social/RulesCommand.kt new file mode 100644 index 0000000..636463e --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/commands/social/RulesCommand.kt @@ -0,0 +1,17 @@ +package com.otfhee.paper.commands.social + +import com.otfhee.paper.utils.LanguageUtil +import dev.jorel.commandapi.CommandAPICommand +import dev.jorel.commandapi.executors.PlayerCommandExecutor + +class RulesCommand { + init { + CommandAPICommand("rules") + .withPermission("otfhee.commands.default.rules") + .executesPlayer(PlayerCommandExecutor { sender, _ -> + val languageUtil = LanguageUtil() + languageUtil.info("commands.rules", sender) + }) + .register() + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/commands/social/SiteCommand.kt b/paper/src/main/kotlin/com/otfhee/paper/commands/social/SiteCommand.kt new file mode 100644 index 0000000..91f3516 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/commands/social/SiteCommand.kt @@ -0,0 +1,17 @@ +package com.otfhee.paper.commands.social + +import com.otfhee.paper.utils.LanguageUtil +import dev.jorel.commandapi.CommandAPICommand +import dev.jorel.commandapi.executors.PlayerCommandExecutor + +class SiteCommand { + init { + CommandAPICommand("site") + .withPermission("otfhee.commands.default.site") + .executesPlayer(PlayerCommandExecutor { sender, _ -> + val languageUtil = LanguageUtil() + languageUtil.info("commands.site", sender) + }) + .register() + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/commands/social/TelegramCommand.kt b/paper/src/main/kotlin/com/otfhee/paper/commands/social/TelegramCommand.kt new file mode 100644 index 0000000..03b94e6 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/commands/social/TelegramCommand.kt @@ -0,0 +1,18 @@ +package com.otfhee.paper.commands.social + +import com.otfhee.paper.utils.LanguageUtil +import dev.jorel.commandapi.CommandAPICommand +import dev.jorel.commandapi.executors.PlayerCommandExecutor + +class TelegramCommand { + init { + CommandAPICommand("telegram") + .withAliases("tg") + .withPermission("otfhee.commands.default.telegram") + .executesPlayer(PlayerCommandExecutor { sender, _ -> + val languageUtil = LanguageUtil() + languageUtil.info("commands.telegram", sender) + }) + .register() + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/commands/util/LanguageCommand.kt b/paper/src/main/kotlin/com/otfhee/paper/commands/util/LanguageCommand.kt new file mode 100644 index 0000000..d631ef4 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/commands/util/LanguageCommand.kt @@ -0,0 +1,33 @@ +package com.otfhee.paper.commands.util + +import com.otfhee.paper.database.user.User +import com.otfhee.paper.utils.LanguageUtil +import dev.jorel.commandapi.CommandAPICommand +import dev.jorel.commandapi.arguments.ListArgumentBuilder +import dev.jorel.commandapi.executors.PlayerCommandExecutor +import org.jetbrains.exposed.sql.transactions.transaction + +class LanguageCommand { + private val languageUtil = LanguageUtil() + + init { + CommandAPICommand("language") + .withAliases("lang") + .withPermission("otfhee.commands.default.language") + .withArguments( + ListArgumentBuilder("language") + .withList(languageUtil.getAvailableLanguages()) + .withMapper { language -> language.lowercase() } + .buildGreedy() + ) + .executesPlayer(PlayerCommandExecutor { sender, args -> + val language = args["language"] as List<*> + transaction { + val user = User[sender.uniqueId] + user.lang = language.stream().findAny().get().toString() + languageUtil.info("commands.lang.success", sender) + } + }) + .register() + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/commands/util/PingCommand.kt b/paper/src/main/kotlin/com/otfhee/paper/commands/util/PingCommand.kt new file mode 100644 index 0000000..f87e6ab --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/commands/util/PingCommand.kt @@ -0,0 +1,25 @@ +package com.otfhee.paper.commands.util + +import com.otfhee.paper.messenger.Messenger +import com.otfhee.paper.telemetry.PingTelemetry +import com.otfhee.paper.utils.LanguageUtil +import dev.jorel.commandapi.CommandAPICommand +import dev.jorel.commandapi.executors.PlayerCommandExecutor + +class PingCommand { + init { + CommandAPICommand("ping") + .withPermission("otfhee.commands.default.ping") + .executesPlayer(PlayerCommandExecutor { sender, _ -> + val languageUtil = LanguageUtil() + val messenger = Messenger() + val ping = PingTelemetry(sender) + + messenger.info( + languageUtil.getMessage(sender, "commands.ping") + .replace("", ping.get()), sender + ) + }) + .register() + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/commands/util/StatusCommand.kt b/paper/src/main/kotlin/com/otfhee/paper/commands/util/StatusCommand.kt new file mode 100644 index 0000000..4e01fda --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/commands/util/StatusCommand.kt @@ -0,0 +1,48 @@ +package com.otfhee.paper.commands.util + +import com.otfhee.paper.database.user.User +import com.otfhee.paper.database.user.UserStatus +import com.otfhee.paper.messenger.Messenger +import com.otfhee.paper.utils.LanguageUtil +import dev.jorel.commandapi.CommandAPICommand +import dev.jorel.commandapi.executors.PlayerCommandExecutor +import org.bukkit.entity.Player +import org.jetbrains.exposed.sql.transactions.transaction + +class StatusCommand { + init { + CommandAPICommand("status") + .withPermission("otfhee.commands.default.status") + .withSubcommand( + CommandAPICommand("afk") + .executesPlayer(PlayerCommandExecutor { player, _ -> + setStatus(player, UserStatus.AFK) + }) + ) + .withSubcommand( + CommandAPICommand("dnd") + .executesPlayer(PlayerCommandExecutor { player, _ -> + setStatus(player, UserStatus.DO_NOT_DISTURB) + }) + ) + .withSubcommand( + CommandAPICommand("online") + .executesPlayer(PlayerCommandExecutor { player, _ -> + setStatus(player, UserStatus.ONLINE) + }) + ) + .register() + } + + private fun setStatus(player: Player, status: UserStatus) { + transaction { + val user = User[player.uniqueId] + user.status = status.name + } + val languageUtil = LanguageUtil() + + Messenger.getInstance().success( + languageUtil.getMessage(player, "commands.status.success") + .replace("", status.name), player) + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/database/ban/Ban.kt b/paper/src/main/kotlin/com/otfhee/paper/database/ban/Ban.kt new file mode 100644 index 0000000..0c1660e --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/database/ban/Ban.kt @@ -0,0 +1,62 @@ +package com.otfhee.paper.database.ban + +import kotlinx.datetime.Clock +import kotlinx.datetime.LocalDateTime +import kotlinx.datetime.TimeZone +import kotlinx.datetime.toLocalDateTime +import org.jetbrains.exposed.dao.UUIDEntity +import org.jetbrains.exposed.dao.UUIDEntityClass +import org.jetbrains.exposed.dao.id.EntityID +import org.jetbrains.exposed.sql.transactions.transaction +import java.util.* + +class Ban(id: EntityID) : UUIDEntity(id) { + companion object : UUIDEntityClass(Bans) { + fun isActive(uuid: UUID): Boolean { + return transaction { + val ban = Ban.findById(uuid) ?: return@transaction false + + val expire = ban.expireDate + val now = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()) + + if (expire != null && expire < now) { + ban.delete() + return@transaction false + } + + return@transaction true + } + } + + fun create( + playerUUID: UUID, + reason: String, + adminUUID: UUID, + expireDate: LocalDateTime? = null + ): Ban? { + return transaction { + val existingBan = Ban.findById(playerUUID) + if (existingBan != null) { + val now = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()) + if (existingBan.expireDate == null || existingBan.expireDate!! > now) { + return@transaction null + } + + existingBan.delete() + } + + Ban.new(playerUUID) { + this.reason = reason + this.adminUUID = adminUUID + this.banDate = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()) + this.expireDate = expireDate + } + } + } + } + + var reason by Bans.reason + var adminUUID by Bans.adminUUID + var banDate by Bans.banDate + var expireDate by Bans.expireDate +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/database/ban/BanInfo.kt b/paper/src/main/kotlin/com/otfhee/paper/database/ban/BanInfo.kt new file mode 100644 index 0000000..3e5dbae --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/database/ban/BanInfo.kt @@ -0,0 +1,24 @@ +package com.otfhee.paper.database.ban + +import kotlinx.datetime.LocalDateTime +import java.util.* + +data class BanInfo( + val uuid: UUID, + val reason: String, + val adminUUID: UUID, + val banDate: LocalDateTime, + val expireDate: LocalDateTime? +) { + companion object { + fun fromBan(ban: Ban): BanInfo { + return BanInfo( + uuid = ban.id.value, + reason = ban.reason, + adminUUID = ban.adminUUID, + banDate = ban.banDate, + expireDate = ban.expireDate + ) + } + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/database/ban/Bans.kt b/paper/src/main/kotlin/com/otfhee/paper/database/ban/Bans.kt new file mode 100644 index 0000000..f460f87 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/database/ban/Bans.kt @@ -0,0 +1,11 @@ +package com.otfhee.paper.database.ban + +import org.jetbrains.exposed.dao.id.UUIDTable +import org.jetbrains.exposed.sql.kotlin.datetime.datetime + +object Bans : UUIDTable("bans") { + val reason = text("reason") + val adminUUID = uuid("admin-uuid") + val banDate = datetime("ban-date") + val expireDate = datetime("expire-date").nullable() +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/database/user/User.kt b/paper/src/main/kotlin/com/otfhee/paper/database/user/User.kt new file mode 100644 index 0000000..4c0b427 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/database/user/User.kt @@ -0,0 +1,50 @@ +package com.otfhee.paper.database.user + +import kotlinx.datetime.LocalDateTime +import org.jetbrains.exposed.dao.UUIDEntity +import org.jetbrains.exposed.dao.UUIDEntityClass +import org.jetbrains.exposed.dao.id.EntityID +import org.jetbrains.exposed.sql.transactions.transaction +import java.util.* + +class User(id: EntityID) : UUIDEntity(id) { + var firstJoin by Users.firstJoin + var lastJoin by Users.lastJoin + var globalMode by Users.globalMode + var displayColor by Users.displayColor + var particle by Users.particle + var status by Users.status + var lang by Users.lang + + companion object : UUIDEntityClass(Users) { + fun isExist(uuid: UUID): Boolean { + return transaction { + User.findById(uuid) != null + } + } + + fun create(uuid: UUID) { + val calendar = Calendar.getInstance() + val date = LocalDateTime( + calendar.get(Calendar.YEAR), + calendar.get(Calendar.MONTH) + 1, + calendar.get(Calendar.DAY_OF_MONTH), + calendar.get(Calendar.HOUR_OF_DAY), + calendar.get(Calendar.MINUTE), + calendar.get(Calendar.SECOND) + ) + + transaction { + User.new(uuid) { + firstJoin = date + lastJoin = date + globalMode = false + displayColor = "" + particle = "DEFAULT" + status = "ONLINE" + lang = "russian" + } + } + } + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/database/user/UserStatus.kt b/paper/src/main/kotlin/com/otfhee/paper/database/user/UserStatus.kt new file mode 100644 index 0000000..8e1150d --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/database/user/UserStatus.kt @@ -0,0 +1,7 @@ +package com.otfhee.paper.database.user + +enum class UserStatus { + ONLINE, + AFK, + DO_NOT_DISTURB +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/database/user/Users.kt b/paper/src/main/kotlin/com/otfhee/paper/database/user/Users.kt new file mode 100644 index 0000000..a33d397 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/database/user/Users.kt @@ -0,0 +1,14 @@ +package com.otfhee.paper.database.user + +import org.jetbrains.exposed.dao.id.UUIDTable +import org.jetbrains.exposed.sql.kotlin.datetime.datetime + +object Users : UUIDTable("users") { + val firstJoin = datetime("first-join") + val lastJoin = datetime("last-join") + val globalMode = bool("global-mode") + val displayColor = varchar("display-color", 255) + val particle = varchar("particle", 255) + val status = varchar("status", 255) + val lang = varchar("lang", 255) +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/display/Display.kt b/paper/src/main/kotlin/com/otfhee/paper/display/Display.kt new file mode 100644 index 0000000..86811b7 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/display/Display.kt @@ -0,0 +1,5 @@ +package com.otfhee.paper.display + +interface Display { + fun get(): String +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/display/DisplayName.kt b/paper/src/main/kotlin/com/otfhee/paper/display/DisplayName.kt new file mode 100644 index 0000000..9d8553e --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/display/DisplayName.kt @@ -0,0 +1,36 @@ +package com.otfhee.paper.display + +import com.otfhee.paper.Plugin +import com.otfhee.paper.database.user.User +import com.otfhee.paper.utils.LanguageUtil +import net.luckperms.api.LuckPerms +import org.bukkit.entity.Player +import org.jetbrains.exposed.sql.transactions.transaction + +class DisplayName(val player: Player) : Display { + private val plugin: Plugin = Plugin() + private val displayName = plugin.config.getString("display-name") ?: "" + + override fun get(): String { + val luckPerms: LuckPerms = plugin.luckPerms() + val user = luckPerms.userManager.getUser(player.uniqueId)!! + val db: User = transaction { + User[player.uniqueId] + } + val default = "" + val languageUtil = LanguageUtil() + val displayColor = if (player.hasPermission("otfhee.premium.display.color")) + db.displayColor + else + "" + + val display = displayName + .replace("", user.cachedData.metaData.prefix ?: default) + .replace("", displayColor) + .replace("", "${languageUtil.getMessage(player, "chat.private-messages.display-name")}'>" + + "${player.name}") + + return display + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/display/DisplayStatus.kt b/paper/src/main/kotlin/com/otfhee/paper/display/DisplayStatus.kt new file mode 100644 index 0000000..4626218 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/display/DisplayStatus.kt @@ -0,0 +1,22 @@ +package com.otfhee.paper.display + +import com.otfhee.paper.Plugin +import com.otfhee.paper.database.user.User +import org.bukkit.entity.Player +import org.jetbrains.exposed.sql.transactions.transaction + +class DisplayStatus(val player: Player) : Display { + override fun get(): String { + val plugin = Plugin() + val user = transaction { + User[player.uniqueId] + } + + return when(user.status.lowercase()) { + "online" -> plugin.config.getString("icons.online").toString() + "afk" -> plugin.config.getString("icons.afk").toString() + "do_not_disturb" -> plugin.config.getString("icons.do_not_disturb").toString() + else -> "?" + } + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/display/DisplayWorld.kt b/paper/src/main/kotlin/com/otfhee/paper/display/DisplayWorld.kt new file mode 100644 index 0000000..a6a62c8 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/display/DisplayWorld.kt @@ -0,0 +1,17 @@ +package com.otfhee.paper.display + +import com.otfhee.paper.Plugin +import org.bukkit.entity.Player + +class DisplayWorld(val player: Player) : Display { + override fun get(): String { + val plugin = Plugin() + + return when(player.world.name) { + "world" -> plugin.config.getString("icons.world").toString() + "world_nether" -> plugin.config.getString("icons.world_nether").toString() + "world_the_end" -> plugin.config.getString("icons.world_the_end").toString() + else -> "?" + } + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/listeners/AntiGriefListener.kt b/paper/src/main/kotlin/com/otfhee/paper/listeners/AntiGriefListener.kt new file mode 100644 index 0000000..47254a2 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/listeners/AntiGriefListener.kt @@ -0,0 +1,87 @@ +package com.otfhee.paper.listeners + +import com.otfhee.paper.Plugin +import com.otfhee.paper.utils.LanguageUtil +import com.otfhee.paper.utils.TimeUnit +import net.kyori.adventure.text.Component +import net.kyori.adventure.text.format.NamedTextColor +import net.kyori.adventure.text.minimessage.MiniMessage +import org.bukkit.Location +import org.bukkit.Material +import org.bukkit.Statistic +import org.bukkit.entity.Player +import org.bukkit.event.EventHandler +import org.bukkit.event.EventPriority +import org.bukkit.event.Listener +import org.bukkit.event.block.BlockPlaceEvent + +class AntiGriefListener : Listener { + private val plugin: Plugin = Plugin() + private val languageUtil: LanguageUtil = LanguageUtil() + + private val spawnProtectionRadius: Int = plugin.config.getInt("spawn-protection-radius", 1500) + + private val restrictedBlocks: Set = plugin.config.getStringList("restricted-blocks") + .mapNotNull { blockName -> + try { + Material.valueOf(blockName.uppercase()) + } catch (e: IllegalArgumentException) { + plugin.logger.warning("Incorrect material in the configuration: $blockName") + null + } + }.toSet().ifEmpty { + setOf( + Material.TNT, + Material.FIRE, + Material.LAVA, + Material.LAVA_BUCKET, + Material.FLINT_AND_STEEL, + Material.END_CRYSTAL, + Material.RESPAWN_ANCHOR, + Material.WITHER_SKELETON_SKULL + ) + } + + @EventHandler(priority = EventPriority.HIGH) + fun onBlockPlace(event: BlockPlaceEvent) { + val player = event.player + val block = event.block + + if (isInSpawnProtection(block.location) && restrictedBlocks.contains(block.type)) { + val playTime = getPlayerPlaytime(player) + + if (playTime < 24 && !player.hasPermission("otfhee.staff.anti-grief.spawn")) { + event.isCancelled = true + val remainingTime = 24 - playTime + val miniMessage: MiniMessage = MiniMessage.miniMessage() + val message = languageUtil.getMessage(player, "anti-grief.spawn-protection") + .replace("\n$url'>$displayUrl") + lastEnd = matcher.end() + } + + if (lastEnd < message.length) { + builder.append(message.substring(lastEnd)) + } + + return if (builder.isEmpty()) message else builder.toString() + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/listeners/LoginListener.kt b/paper/src/main/kotlin/com/otfhee/paper/listeners/LoginListener.kt new file mode 100644 index 0000000..feefd67 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/listeners/LoginListener.kt @@ -0,0 +1,56 @@ +package com.otfhee.paper.listeners + +import com.otfhee.paper.display.DisplayName +import com.otfhee.paper.Plugin +import com.otfhee.paper.commands.chat.PrivateMessagesCommand +import com.otfhee.paper.database.user.User +import com.otfhee.paper.messenger.Messenger +import net.kyori.adventure.text.minimessage.MiniMessage +import org.bukkit.event.EventHandler +import org.bukkit.event.Listener +import org.bukkit.event.player.PlayerJoinEvent +import org.bukkit.event.player.PlayerQuitEvent +import java.util.* + +class LoginListener : Listener { + private val plugin: Plugin = Plugin() + + private val joinMessage: String = plugin.config.getString("login.join-message", "[+] ").toString() + private val leaveMessage: String = plugin.config.getString("login.leave-message", "[-] ").toString() + private val firstJoinMessage: String = plugin.config.getStringList("login.first-join-message").joinToString("") + + @EventHandler + fun onJoin(event: PlayerJoinEvent) { + val player = event.player + val uuid: UUID = player.uniqueId + val miniMessage: MiniMessage = MiniMessage.miniMessage() + val messenger = Messenger() + + if (!player.hasPlayedBefore()) { + messenger.info(miniMessage.deserialize(firstJoinMessage + .replace("", player.name))) + if (!User.isExist(uuid)) { + User.create(uuid) + } + } + + if (!User.isExist(uuid)) { + User.create(uuid) + } + + val displayName = DisplayName(player).get() + + event.joinMessage(miniMessage.deserialize(joinMessage + .replace("", displayName))) + } + + @EventHandler + fun onLeave(event: PlayerQuitEvent) { + val player = event.player + val miniMessage: MiniMessage = MiniMessage.miniMessage() + val displayName = DisplayName(player).get() + event.quitMessage(miniMessage.deserialize(leaveMessage + .replace("", displayName))) + PrivateMessagesCommand().cleanupPlayerData(player) + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/listeners/StatusListener.kt b/paper/src/main/kotlin/com/otfhee/paper/listeners/StatusListener.kt new file mode 100644 index 0000000..27971df --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/listeners/StatusListener.kt @@ -0,0 +1,80 @@ +package com.otfhee.paper.listeners + +import com.otfhee.paper.Plugin +import com.otfhee.paper.database.user.User +import com.otfhee.paper.database.user.UserStatus +import com.otfhee.paper.utils.AfkUtil +import org.bukkit.entity.Player +import org.bukkit.event.EventHandler +import org.bukkit.event.Listener +import org.bukkit.event.player.* +import org.jetbrains.exposed.sql.transactions.transaction + +class StatusListener : Runnable, Listener { + private val plugin = Plugin() + private val afkUtil = AfkUtil.getInstance(plugin) + + override fun run() { + plugin.server.onlinePlayers.forEach { player -> + transaction { + val user = User[player.uniqueId] + val newValue = afkUtil.decrementTimer(player.uniqueId) + + if (user.status == UserStatus.ONLINE.name && newValue <= 0L) { + user.status = UserStatus.AFK.name + } + } + } + } + + @EventHandler + fun onPlayerJoin(event: PlayerJoinEvent) { + afkUtil.initPlayer(event.player.uniqueId) + } + + @EventHandler + fun onPlayerQuit(event: PlayerQuitEvent) { + afkUtil.removePlayer(event.player.uniqueId) + } + + @EventHandler + fun onPlayerMove(event: PlayerMoveEvent) { + if (event.from.x == event.to.x && + event.from.y == event.to.y && + event.from.z == event.to.z) { + return + } + + if (event.player.isGliding || + event.player.isSwimming || + event.player.isInWater || + event.player.isInLava) { + return + } + + val player = event.player + afkUtil.resetTimer(player.uniqueId) + updatePlayerStatus(player) + } + + @EventHandler + fun onPlayerInteract(event: PlayerInteractEvent) { + afkUtil.resetTimer(event.player.uniqueId) + updatePlayerStatus(event.player) + } + + @EventHandler + fun onPlayerInteractEntity(event: PlayerInteractEntityEvent) { + afkUtil.resetTimer(event.player.uniqueId) + updatePlayerStatus(event.player) + } + + private fun updatePlayerStatus(player: Player) { + transaction { + val user = User[player.uniqueId] + if (user.status == UserStatus.AFK.name) { + user.status = UserStatus.ONLINE.name + } + } + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/messenger/MessageType.kt b/paper/src/main/kotlin/com/otfhee/paper/messenger/MessageType.kt new file mode 100644 index 0000000..215af76 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/messenger/MessageType.kt @@ -0,0 +1,8 @@ +package com.otfhee.paper.messenger + +enum class MessageType(val configPath: String) { + INFO("info"), + WARN("warn"), + ERROR("error"), + SUCCESS("success") +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/messenger/Messenger.kt b/paper/src/main/kotlin/com/otfhee/paper/messenger/Messenger.kt new file mode 100644 index 0000000..b896978 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/messenger/Messenger.kt @@ -0,0 +1,80 @@ +package com.otfhee.paper.messenger + +import com.otfhee.paper.Plugin +import net.kyori.adventure.audience.Audience +import net.kyori.adventure.text.Component +import net.kyori.adventure.text.minimessage.MiniMessage +import org.bukkit.Bukkit + +class Messenger { + private val styles: MutableMap = mutableMapOf() + private val miniMessage: MiniMessage = MiniMessage.miniMessage() + private val plugin: Plugin = Plugin() + + init { + loadStyles() + } + + private fun loadStyles() { + MessageType.entries.forEach { type -> + val style = plugin.config.getString("chat.style.messenger.${type.configPath}") + styles[type] = style ?: type.toString() + } + } + + private fun send(type: MessageType, message: String, audience: Audience? = null) { + val prefix = styles[type] ?: type.toString() + val formattedMessage = "$prefix $message" + val component = miniMessage.deserialize(formattedMessage) + + when (audience) { + null -> Bukkit.getServer().sendMessage(component) + else -> audience.sendMessage(component) + } + } + + private fun send(type: MessageType, message: Component, audience: Audience? = null) { + val prefix = styles[type] ?: type.toString() + val component = Component.text() + .append(miniMessage.deserialize(prefix)) + .appendSpace() + .append(message) + .build() + + when (audience) { + null -> Bukkit.getServer().sendMessage(component) + else -> audience.sendMessage(component) + } + } + + fun info(message: String) = send(MessageType.INFO, message) + fun warn(message: String) = send(MessageType.WARN, message) + fun error(message: String) = send(MessageType.ERROR, message) + fun success(message: String) = send(MessageType.SUCCESS, message) + + fun info(message: String, audience: Audience) = send(MessageType.INFO, message, audience) + fun warn(message: String, audience: Audience) = send(MessageType.WARN, message, audience) + fun error(message: String, audience: Audience) = send(MessageType.ERROR, message, audience) + fun success(message: String, audience: Audience) = send(MessageType.SUCCESS, message, audience) + + fun info(message: Component) = send(MessageType.INFO, message) + fun warn(message: Component) = send(MessageType.WARN, message) + fun error(message: Component) = send(MessageType.ERROR, message) + fun success(message: Component) = send(MessageType.SUCCESS, message) + + fun info(message: Component, audience: Audience) = send(MessageType.INFO, message, audience) + fun warn(message: Component, audience: Audience) = send(MessageType.WARN, message, audience) + fun error(message: Component, audience: Audience) = send(MessageType.ERROR, message, audience) + fun success(message: Component, audience: Audience) = send(MessageType.SUCCESS, message, audience) + + companion object { + @Volatile + private var instance: Messenger? = null + + fun getInstance(): Messenger { + return instance ?: synchronized(this) { + instance ?: Messenger().also { instance = it } + } + } + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/schedulers/AutoRestart.kt b/paper/src/main/kotlin/com/otfhee/paper/schedulers/AutoRestart.kt new file mode 100644 index 0000000..2996315 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/schedulers/AutoRestart.kt @@ -0,0 +1,48 @@ +package com.otfhee.paper.schedulers + +import com.otfhee.paper.Plugin +import com.otfhee.paper.messenger.Messenger +import kotlinx.datetime.Clock +import kotlinx.datetime.TimeZone +import kotlinx.datetime.toLocalDateTime +import java.util.concurrent.TimeUnit + +class AutoRestart : Runnable { + private val plugin = Plugin() + + override fun run() { + val now = Clock.System.now() + .toLocalDateTime(TimeZone.currentSystemDefault()) + val time = "${now.hour.toString().padStart(2, '0')}:${now.minute.toString().padStart(2, '0')}:${now.second.toString().padStart(2, '0')}" + + when (time) { + "23:30:00" -> sendRestartMessage(30, TimeUnit.MINUTES) + "23:45:00" -> sendRestartMessage(15, TimeUnit.MINUTES) + "23:50:00" -> sendRestartMessage(10, TimeUnit.MINUTES) + "23:55:00" -> sendRestartMessage(5, TimeUnit.MINUTES) + "23:59:00" -> sendRestartMessage(1, TimeUnit.MINUTES) + "23:59:30" -> sendRestartMessage(30, TimeUnit.SECONDS) + "23:59:45" -> sendRestartMessage(15, TimeUnit.SECONDS) + "23:59:55" -> sendRestartMessage(5, TimeUnit.SECONDS) + "23:59:56" -> sendRestartMessage(4, TimeUnit.SECONDS) + "23:59:57" -> sendRestartMessage(3, TimeUnit.SECONDS) + "23:59:58" -> sendRestartMessage(2, TimeUnit.SECONDS) + "23:59:59" -> sendRestartMessage(1, TimeUnit.SECONDS) + "00:00:00" -> plugin.server.shutdown() + } + } + + private fun sendRestartMessage(value: Long, unit: TimeUnit) { + val messenger = Messenger() + val timeString = when { + unit == TimeUnit.MINUTES && value == 1L -> "минуту" + unit == TimeUnit.MINUTES -> "минут" + unit == TimeUnit.SECONDS && value == 1L -> "секунду" + unit == TimeUnit.SECONDS && value in 2..4 -> "секунды" + unit == TimeUnit.SECONDS -> "секунд" + else -> throw IllegalArgumentException("Unsupported time unit") + } + + messenger.warn("Перезагрузка сервера произойдёт через $value $timeString!") + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/schedulers/PlayerHeadDropListener.kt b/paper/src/main/kotlin/com/otfhee/paper/schedulers/PlayerHeadDropListener.kt new file mode 100644 index 0000000..0c048b9 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/schedulers/PlayerHeadDropListener.kt @@ -0,0 +1,53 @@ +package com.otfhee.paper.schedulers + +import com.otfhee.paper.Plugin +import org.bukkit.Material +import org.bukkit.entity.Creeper +import org.bukkit.entity.Player +import org.bukkit.event.EventHandler +import org.bukkit.event.EventPriority +import org.bukkit.event.Listener +import org.bukkit.event.entity.EntityDamageByEntityEvent +import org.bukkit.inventory.ItemStack +import org.bukkit.inventory.meta.SkullMeta + +class PlayerHeadDropListener : Listener { + @EventHandler(priority = EventPriority.MONITOR) + fun onEntityDeath(event: EntityDamageByEntityEvent) { + val plugin = Plugin() + + if (!plugin.config.getBoolean("head-drops")) return + + val entity = event.entity + val damager = event.damager + + when { + entity !is Player -> return + damager !is Creeper -> return + !damager.isPowered -> return + !isLethalDamage(entity, event.finalDamage) -> return + hasTotemOfUndying(entity) -> return + else -> dropPlayerHead(entity) + } + } + + private fun isLethalDamage(player: Player, damage: Double): Boolean { + return player.health - damage <= 0 + } + + private fun hasTotemOfUndying(player: Player): Boolean { + return player.inventory.run { + itemInMainHand.type == Material.TOTEM_OF_UNDYING || + itemInOffHand.type == Material.TOTEM_OF_UNDYING + } + } + + private fun dropPlayerHead(player: Player) { + val playerHead = ItemStack(Material.PLAYER_HEAD, 1).apply { + itemMeta = (itemMeta as SkullMeta).apply { + owningPlayer = player + } + } + player.world.dropItemNaturally(player.location, playerHead) + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/schedulers/PlayerList.kt b/paper/src/main/kotlin/com/otfhee/paper/schedulers/PlayerList.kt new file mode 100644 index 0000000..05b8a7f --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/schedulers/PlayerList.kt @@ -0,0 +1,42 @@ +package com.otfhee.paper.schedulers + +import com.otfhee.paper.display.DisplayName +import com.otfhee.paper.Plugin +import com.otfhee.paper.display.DisplayStatus +import com.otfhee.paper.display.DisplayWorld +import com.otfhee.paper.telemetry.PingTelemetry +import com.otfhee.paper.telemetry.TPSTelemetry +import net.kyori.adventure.text.minimessage.MiniMessage + +class PlayerList : Runnable { + override fun run() { + val plugin = Plugin() + + plugin.server.onlinePlayers.forEach { player -> + val miniMessage: MiniMessage = MiniMessage.miniMessage() + val displayName = DisplayName(player) + val displayWorld = DisplayWorld(player) + val tps = TPSTelemetry() + val ping = PingTelemetry(player) + val status = DisplayStatus(player) + val headerConfig = plugin.config.getStringList("tab.header") + val footerConfig = plugin.config.getStringList("tab.footer") + val displayPlayer = plugin.config.getString("tab.player") + ?.replace("", displayName.get()) + ?.replace("", status.get()) + ?.replace("", displayWorld.get()) + ?.replace("", ping.get()) ?: " " + val header = miniMessage.deserialize(headerConfig.joinToString("") + .replace("", tps.get()) + .replace("", ping.get()) + .replace("", plugin.server.onlinePlayers.size.toString())) + val footer = miniMessage.deserialize(footerConfig.joinToString("") + .replace("", tps.get()) + .replace("", ping.get()) + .replace("", plugin.server.onlinePlayers.size.toString())) + + player.sendPlayerListHeaderAndFooter(header, footer) + player.playerListName(miniMessage.deserialize(displayPlayer)) + } + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/telemetry/PingTelemetry.kt b/paper/src/main/kotlin/com/otfhee/paper/telemetry/PingTelemetry.kt new file mode 100644 index 0000000..b893388 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/telemetry/PingTelemetry.kt @@ -0,0 +1,35 @@ +package com.otfhee.paper.telemetry + +import com.otfhee.paper.utils.LanguageUtil +import org.bukkit.entity.Player + +class PingTelemetry(private val player: Player) : Telemetry { + private val ping: Int = player.ping + + companion object { + private var animationTick = 1 + private const val ANIMATION_FRAMES = 2 + } + + override fun get(): String { + val languageUtil = LanguageUtil() + val ms: String = languageUtil.getMessage(player, "time.ms") + + return when { + ping >= 300 -> "$ping$ms" + ping >= 200 -> "$ping$ms" + ping > 0 -> "$ping$ms" + else -> getAnimatedDots() + } + } + + private fun getAnimatedDots(): String { + animationTick = if (animationTick >= ANIMATION_FRAMES) 0 else animationTick + 1 + + return when (animationTick) { + 0 -> "(?)" + 1 -> "(?)" + else -> "(?)" + } + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/telemetry/TPSTelemetry.kt b/paper/src/main/kotlin/com/otfhee/paper/telemetry/TPSTelemetry.kt new file mode 100644 index 0000000..c5ebbb3 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/telemetry/TPSTelemetry.kt @@ -0,0 +1,18 @@ +package com.otfhee.paper.telemetry + +import com.otfhee.paper.Plugin + +class TPSTelemetry : Telemetry { + override fun get(): String { + val tps = Plugin().server.tps[0] + val formattedTps = "%.2f".format(tps) + + return when { + tps >= 20.0 -> "20.00*" + tps <= 10.0 -> "$formattedTps" + tps <= 18.0 -> "$formattedTps" + tps < 20.0 -> "$formattedTps" + else -> "$formattedTps" + } + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/telemetry/Telemetry.kt b/paper/src/main/kotlin/com/otfhee/paper/telemetry/Telemetry.kt new file mode 100644 index 0000000..5ddfda4 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/telemetry/Telemetry.kt @@ -0,0 +1,5 @@ +package com.otfhee.paper.telemetry + +interface Telemetry { + fun get(): String +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/utils/AfkUtil.kt b/paper/src/main/kotlin/com/otfhee/paper/utils/AfkUtil.kt new file mode 100644 index 0000000..b65aba4 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/utils/AfkUtil.kt @@ -0,0 +1,39 @@ +package com.otfhee.paper.utils + +import com.otfhee.paper.Plugin +import java.util.UUID + +class AfkUtil private constructor(plugin: Plugin) { + private val afkPlayers = mutableMapOf() + private val afkTimeThreshold = plugin.config.getLong("afk-timeout", 60L * 5L) + + companion object { + private var instance: AfkUtil? = null + + fun getInstance(plugin: Plugin): AfkUtil { + if (instance == null) { + instance = AfkUtil(plugin) + } + return instance!! + } + } + + fun initPlayer(uuid: UUID) { + afkPlayers[uuid] = afkTimeThreshold + } + + fun resetTimer(uuid: UUID) { + afkPlayers[uuid] = afkTimeThreshold + } + + fun decrementTimer(uuid: UUID): Long { + val currentValue = afkPlayers[uuid] ?: afkTimeThreshold + val newValue = currentValue - 1 + afkPlayers[uuid] = newValue + return newValue + } + + fun removePlayer(uuid: UUID) { + afkPlayers.remove(uuid) + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/utils/BanUtil.kt b/paper/src/main/kotlin/com/otfhee/paper/utils/BanUtil.kt new file mode 100644 index 0000000..da5a90f --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/utils/BanUtil.kt @@ -0,0 +1,139 @@ +package com.otfhee.paper.utils + +import com.otfhee.paper.Plugin +import com.otfhee.paper.database.ban.Ban +import com.otfhee.paper.database.ban.BanInfo +import com.otfhee.paper.messenger.Messenger +import net.kyori.adventure.text.Component +import org.bukkit.Bukkit +import org.bukkit.entity.Player +import org.jetbrains.exposed.sql.transactions.transaction +import kotlinx.datetime.LocalDateTime +import kotlinx.datetime.Clock +import kotlinx.datetime.TimeZone +import kotlinx.datetime.toLocalDateTime +import net.kyori.adventure.text.minimessage.MiniMessage +import kotlin.time.Duration.Companion.milliseconds +import java.time.format.DateTimeFormatter +import java.util.UUID + +class BanUtil { + private val dateFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss") + private val plugin = Plugin() + + fun banPlayer( + playerUUID: UUID, + reason: String, + adminUUID: UUID, + durationMillis: Long? = null + ): Boolean { + val expireDate = durationMillis?.let { + val instant = Clock.System.now() + val expireInstant = instant.plus(it.milliseconds) + expireInstant.toLocalDateTime(TimeZone.currentSystemDefault()) + } + + Ban.create( + playerUUID = playerUUID, + reason = reason, + adminUUID = adminUUID, + expireDate = expireDate + ) ?: return false + + return true + } + + fun unbanPlayer(playerUUID: UUID): Boolean { + return transaction { + val ban = Ban.findById(playerUUID) ?: return@transaction false + + ban.delete() + return@transaction true + } + } + + fun isBanned(playerUUID: UUID): Boolean { + return Ban.isActive(playerUUID) + } + + fun getBanInfo(playerUUID: UUID): BanInfo? { + return transaction { + val ban = Ban.findById(playerUUID) ?: return@transaction null + + val now = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()) + val expireDate = ban.expireDate + if (expireDate != null && expireDate < now) { + ban.delete() + return@transaction null + } + + return@transaction BanInfo.fromBan(ban) + } + } + + fun banKickMessage(reason: String, expireDate: LocalDateTime?): Component { + val format = plugin.config.getStringList("ban.format").joinToString("") + val formatPermanent = plugin.config.getStringList("ban.format-permanent").joinToString("") + val miniMessage = MiniMessage.miniMessage() + + return if (expireDate != null) { + + val javaDateTime = java.time.LocalDateTime.of( + expireDate.year, + expireDate.monthNumber, + expireDate.dayOfMonth, + expireDate.hour, + expireDate.minute, + expireDate.second + ) + + miniMessage.deserialize(format + .replace("", reason) + .replace("", javaDateTime.format(dateFormatter))) + } else { + miniMessage.deserialize(formatPermanent + .replace("", reason)) + } + } + + fun kickBannedPlayer(player: Player, reason: String, expireDate: LocalDateTime?) { + player.kick(banKickMessage(reason, expireDate)) + } + + fun banMessage(ban: BanInfo, player: Player) { + val languageUtil = LanguageUtil() + val messenger = Messenger() + val expireInfo = if (ban.expireDate != null) { + + val javaDateTime = java.time.LocalDateTime.of( + ban.expireDate.year, + ban.expireDate.monthNumber, + ban.expireDate.dayOfMonth, + ban.expireDate.hour, + ban.expireDate.minute, + ban.expireDate.second + ) + languageUtil.getMessage(player, "util.ban.expire-info.date") + .replace("", javaDateTime.format(dateFormatter)) + } else { + languageUtil.getMessage(player, "util.ban.expire-info.permanent") + } + val admin = Bukkit.getOfflinePlayer(ban.adminUUID).name ?: "Unknown" + val banned = Bukkit.getOfflinePlayer(ban.uuid).name ?: "Unknown" + val javaBanDateTime = java.time.LocalDateTime.of( + ban.banDate.year, + ban.banDate.monthNumber, + ban.banDate.dayOfMonth, + ban.banDate.hour, + ban.banDate.minute, + ban.banDate.second + ) + + messenger.info(languageUtil.getMessage(player, "util.ban.message") + .replace("", banned) + .replace("", admin) + .replace("", javaBanDateTime.format(dateFormatter)) + .replace("", expireInfo) + .replace("", ban.reason), player) + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/utils/LanguageUtil.kt b/paper/src/main/kotlin/com/otfhee/paper/utils/LanguageUtil.kt new file mode 100644 index 0000000..19778d4 --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/utils/LanguageUtil.kt @@ -0,0 +1,140 @@ +package com.otfhee.paper.utils + +import com.otfhee.paper.Plugin +import com.otfhee.paper.database.user.User +import com.otfhee.paper.messenger.Messenger +import java.io.File +import java.util.Properties +import org.bukkit.entity.Player +import org.jetbrains.exposed.sql.transactions.transaction +import kotlin.io.path.Path +import kotlin.io.path.createDirectories +import kotlin.io.path.exists + +class LanguageUtil { + private val plugin: Plugin = Plugin() + private val languageFiles = mutableMapOf() + private val defaultLanguage = "russian" + + private val languageFolder = Path(plugin.dataFolder.toString(), "languages") + + init { + if (!languageFolder.exists()) { + languageFolder.createDirectories() + createDefaultLanguageFiles() + } + loadLanguages() + } + + private fun createDefaultLanguageFiles() { + listOf("english", "russian").forEach { lang -> + val file = Path(languageFolder.toString(), "$lang.properties").toFile() + if (!file.exists()) { + plugin.saveResource("languages/$lang.properties", false) + } + } + } + + private fun loadLanguages() { + File(languageFolder.toString()).listFiles() + ?.filter { it.extension == "properties" } + ?.forEach { file -> + val language = file.nameWithoutExtension + val properties = Properties().apply { + file.inputStream().use { stream -> + load(stream) + } + } + languageFiles[language] = properties + } + } + + fun getMessage(player: Player, key: String): String { + val user = transaction { User[player.uniqueId] } + val language = user.lang.lowercase() + + val messageInSelectedLanguage = languageFiles[language]?.getProperty(key) + + if (messageInSelectedLanguage == null) { + languageFiles[defaultLanguage]?.getProperty(key)?.let { defaultMessage -> + plugin.logger.warning("Key '$key' not found in $language, using default language") + return defaultMessage + } + } + + return messageInSelectedLanguage ?: "Missing message: $key".also { + plugin.logger.warning("Message key '$key' not found in any language file!") + } + } + + fun getMessage(key: String): String = + languageFiles[defaultLanguage]?.getProperty(key) ?: "Missing message: $key".also { + plugin.logger.warning("Message key '$key' not found in default language file!") + } + + fun isLanguageSupported(language: String): Boolean = + languageFiles.containsKey(language.lowercase()) + + fun getAvailableLanguages(): Set = + languageFiles.keys + + fun getTime(time: Int, unit: TimeUnit, player: Player): String { + return when { + time % 10 == 1 && time % 100 != 11 -> when(unit) { + TimeUnit.HOURS -> getMessage(player, "time.hour") + TimeUnit.MINUTES -> getMessage(player, "time.minutely") + TimeUnit.SECONDS -> getMessage(player, "time.second") + } + time % 10 in 2..4 && time % 100 !in 12..14 -> when(unit) { + TimeUnit.HOURS -> getMessage(player, "time.hrs") + TimeUnit.MINUTES -> getMessage(player, "time.minutes") + TimeUnit.SECONDS -> getMessage(player, "time.secs") + } + else -> when(unit) { + TimeUnit.HOURS -> getMessage(player, "time.hours") + TimeUnit.MINUTES -> getMessage(player, "time.minute") + TimeUnit.SECONDS -> getMessage(player, "time.seconds") + } + } + } + + fun info(key: String) { + plugin.server.onlinePlayers.forEach { player -> + Messenger().info(getMessage(player, key), player) + } + } + + fun warn(key: String) { + plugin.server.onlinePlayers.forEach { player -> + Messenger().warn(getMessage(player, key), player) + } + } + + fun error(key: String) { + plugin.server.onlinePlayers.forEach { player -> + Messenger().error(getMessage(player, key), player) + } + } + + fun success(key: String) { + plugin.server.onlinePlayers.forEach { player -> + Messenger().success(getMessage(player, key), player) + } + } + + fun info(key: String, player: Player) { + Messenger().info(getMessage(player, key), player) + } + + fun warn(key: String, player: Player) { + Messenger().warn(getMessage(player, key), player) + } + + fun error(key: String, player: Player) { + Messenger().error(getMessage(player, key), player) + } + + fun success(key: String, player: Player) { + Messenger().success(getMessage(player, key), player) + } +} \ No newline at end of file diff --git a/paper/src/main/kotlin/com/otfhee/paper/utils/TimeUnit.kt b/paper/src/main/kotlin/com/otfhee/paper/utils/TimeUnit.kt new file mode 100644 index 0000000..6f9d42d --- /dev/null +++ b/paper/src/main/kotlin/com/otfhee/paper/utils/TimeUnit.kt @@ -0,0 +1,7 @@ +package com.otfhee.paper.utils + +enum class TimeUnit { + HOURS, + MINUTES, + SECONDS +} \ No newline at end of file diff --git a/paper/src/main/resources/config.yml b/paper/src/main/resources/config.yml index d45ecac..285fdec 100644 --- a/paper/src/main/resources/config.yml +++ b/paper/src/main/resources/config.yml @@ -1,5 +1,46 @@ -mongodb: - url: '' - database: 'general' - players-collection: 'players' -notd: '' \ No newline at end of file +database: + url: 'jdbc:mariadb://localhost:3306/otfhee' + user: 'root' + password: '' + +icons: + world: 'OVERWORLD' + world_nether: 'NETHER' + world_the_end: 'THE_END' + global: 'G' + mail: 'MAIL' + online: 'ONLINE' + do_not_disturb: 'DO_NOT_DISTURB' + idle: 'AFK' + +tab: + header: + - 'TPS: | EXAMPLE | Online: ' + footer: + - 'Example' + - "Ping: " + player: ' ' + +display-name: '' + +login: + join-message: '[+] ' + leave-message: '[-] ' + first-join-message: + - 'Welcome,' + - '' + +chat: + style: + global-mode: '[G] : ' + local-mode: ': ' + private-format: '[] ' + messenger: + info: '[i]' + success: '[✔]' + error: '[❌]' + warn: '[⚠]' + +head-drops: true + +spawn-protection-radius: 1500 \ No newline at end of file diff --git a/paper/src/main/resources/language/english.properties b/paper/src/main/resources/language/english.properties deleted file mode 100644 index e69de29..0000000 diff --git a/paper/src/main/resources/language/russian.properties b/paper/src/main/resources/language/russian.properties deleted file mode 100644 index e69de29..0000000 diff --git a/paper/src/main/resources/languages/english.properties b/paper/src/main/resources/languages/english.properties new file mode 100644 index 0000000..3efd999 --- /dev/null +++ b/paper/src/main/resources/languages/english.properties @@ -0,0 +1,48 @@ +commands.coin.heads=flipped a coin and got: HEADS +commands.coin.tails=flipped a coin and got: TAILS +commands.global-mode.false=Global chat mode: OFF +commands.global-mode.true=Global chat mode: ON +commands.private-messages.reply-error=You have no one to reply to! +commands.try.success=: SUCCESS +commands.try.fail=: FAIL +commands.ban.fail=Failed to ban player. They might already be banned. +commands.ban.success=Player successfully banned, but failed to get ban information. +commands.ban.cannot-ban=This player cannot be banned. +commands.unban.player-not-banned=Player is not banned! +commands.unban.error=An error occurred while removing the ban! +commands.discord=Discord server link click +commands.rules=Server rules link click +commands.site=Server website link click +commands.telegram=Telegram channel link click +commands.ping=Your ping: +commands.lang.success=Language successfully changed! +commands.display.color.limit=Tag cannot be longer than 255 characters! +commands.display.color.format=Invalid MiniMessage format! +commands.display.color.success=Color successfully set! +commands.display.color.error=Error while saving color! +commands.display.prefix.permission=You don't have access to this prefix! +commands.display.prefix.success=Your prefix successfully changed to: +commands.status.success=Status successfully changed to + +chat.private-messages.display-name=Click to send a PM +chat.link=Click to open link + +anti-grief.spawn-protection=New players can't place these blocks within spawn radius, play for another