From c65d15096ad436fa170eea5131b15482e7737fab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Wed, 6 Jul 2022 01:46:20 +0200 Subject: [PATCH] wip --- .gradle/7.4/checksums/checksums.lock | Bin 37 -> 37 bytes .gradle/7.4/checksums/md5-checksums.bin | Bin 19947 -> 19997 bytes .gradle/7.4/checksums/sha1-checksums.bin | Bin 22979 -> 23141 bytes .../dependencies-accessors.lock | Bin 37 -> 37 bytes .../7.4/executionHistory/executionHistory.bin | Bin 133034 -> 162172 bytes .../executionHistory/executionHistory.lock | Bin 37 -> 37 bytes .gradle/7.4/fileHashes/fileHashes.bin | Bin 20797 -> 22047 bytes .gradle/7.4/fileHashes/fileHashes.lock | Bin 37 -> 37 bytes .../7.4/fileHashes/resourceHashesCache.bin | Bin 25773 -> 33015 bytes .../buildOutputCleanup.lock | Bin 37 -> 37 bytes .gradle/workspace-id.txt | Bin 0 -> 28 bytes .gradle/workspace-id.txt.lock | Bin 0 -> 17 bytes .idea/vcs.xml | 6 + .../eu/mhsl/minenet/minestom/pve/Main.class | Bin 9535 -> 10602 bytes .../minenet/minestom/pve/arena/Arena.class | Bin 7648 -> 11909 bytes .../minenet/minestom/pve/arena/ArenaMob.class | Bin 9173 -> 0 bytes .../minestom/pve/arena/mob/ArenaMob.class | Bin 0 -> 12491 bytes .../minestom/pve/arena/mob/MobType.class | Bin 0 -> 2561 bytes .../minestom/pve/arena/mob/Zombie.class | Bin 1243 -> 0 bytes .../mob/creature/Evoker$ActionGoal.class | Bin 0 -> 2567 bytes .../pve/arena/mob/creature/Evoker.class | Bin 0 -> 7253 bytes .../pve/arena/mob/creature/Fang.class | Bin 0 -> 1344 bytes .../pve/arena/mob/creature/Pillager.class | Bin 0 -> 850 bytes .../pve/arena/mob/creature/Spider.class | Bin 0 -> 570 bytes .../minestom/pve/arena/mob/creature/Vex.class | Bin 0 -> 833 bytes .../pve/arena/mob/creature/Zombie.class | Bin 0 -> 3262 bytes .../minenet/minestom/pve/util/Knockback.class | Bin 0 -> 1299 bytes .../minenet/minestom/pve/util/Mapping.class | Bin 0 -> 495 bytes .../compileJava/previous-compilation-data.bin | Bin 34859 -> 36382 bytes .../eu/mhsl/minenet/minestom/pve/Main.java | 25 ++- .../minenet/minestom/pve/arena/Arena.java | 127 +++++++---- .../minenet/minestom/pve/arena/ArenaMob.java | 126 ----------- .../minestom/pve/arena/mob/ArenaMob.java | 198 ++++++++++++++++++ .../minestom/pve/arena/mob/MobType.java | 31 +++ .../minestom/pve/arena/mob/Zombie.java | 19 -- .../pve/arena/mob/creature/Evoker.java | 134 ++++++++++++ .../pve/arena/mob/creature/Pillager.java | 14 ++ .../pve/arena/mob/creature/Spider.java | 22 ++ .../minestom/pve/arena/mob/creature/Vex.java | 19 ++ .../pve/arena/mob/creature/Zombie.java | 56 +++++ .../minenet/minestom/pve/util/Knockback.java | 31 +++ .../minenet/minestom/pve/util/Mapping.java | 12 ++ 42 files changed, 625 insertions(+), 195 deletions(-) create mode 100644 .gradle/workspace-id.txt create mode 100644 .gradle/workspace-id.txt.lock create mode 100644 .idea/vcs.xml delete mode 100644 build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/ArenaMob.class create mode 100644 build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/ArenaMob.class create mode 100644 build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/MobType.class delete mode 100644 build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/Zombie.class create mode 100644 build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Evoker$ActionGoal.class create mode 100644 build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Evoker.class create mode 100644 build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Fang.class create mode 100644 build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Pillager.class create mode 100644 build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Spider.class create mode 100644 build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Vex.class create mode 100644 build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Zombie.class create mode 100644 build/classes/java/main/eu/mhsl/minenet/minestom/pve/util/Knockback.class create mode 100644 build/classes/java/main/eu/mhsl/minenet/minestom/pve/util/Mapping.class delete mode 100644 src/main/java/eu/mhsl/minenet/minestom/pve/arena/ArenaMob.java create mode 100644 src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/ArenaMob.java create mode 100644 src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/MobType.java delete mode 100644 src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/Zombie.java create mode 100644 src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Evoker.java create mode 100644 src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Pillager.java create mode 100644 src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Spider.java create mode 100644 src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Vex.java create mode 100644 src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Zombie.java create mode 100644 src/main/java/eu/mhsl/minenet/minestom/pve/util/Knockback.java create mode 100644 src/main/java/eu/mhsl/minenet/minestom/pve/util/Mapping.java diff --git a/.gradle/7.4/checksums/checksums.lock b/.gradle/7.4/checksums/checksums.lock index 38f938bb8107fda49391949169a2d50d46256299..21451b718e12a3e88efbe0e735258a430437e527 100644 GIT binary patch literal 37 ocmZQBY4$DVTKZr&0|az1Gca7cz4XHw=Sc=?FBq7O%*`1X0N-K@SO5S3 literal 37 ocmZQBY4$DVTKZr&0|YcMGca7c&A#sD{>|EpT^N{+%*`1X0NB$C?f?J) diff --git a/.gradle/7.4/checksums/md5-checksums.bin b/.gradle/7.4/checksums/md5-checksums.bin index 35ecd4e3f72c61a456ce5f066bb0130549083c13..768550117d97e4a07aedd7ae98697d37727c4e7a 100644 GIT binary patch delta 103 zcmaDon{n2875t9@45IWm@0Ac>5#ZRHa?J9w_!o$1M#UfE8x4N&Z+7%(60A1{O6vl#DhP`#yB`?# zl(XX1kE{!;4tD&vn7Nd72?GOTuu`oaovq4CL E5xp)F7ytkO diff --git a/.gradle/7.4/dependencies-accessors/dependencies-accessors.lock b/.gradle/7.4/dependencies-accessors/dependencies-accessors.lock index 2320b0d70ab5881785fb959d288de6be1d4027c5..ac58c2e7330705cc0adf68dd24202007b567522c 100644 GIT binary patch delta 20 ccmY#Yogl`)_TZhny8{cpF)$mMn=>!~09DopJOBUy delta 20 bcmY#Yogl_vutD{cqJFYB1GAC2IRgU#J4XcA diff --git a/.gradle/7.4/executionHistory/executionHistory.bin b/.gradle/7.4/executionHistory/executionHistory.bin index 4178264323289488d7bae04e942ab0257ea760dd..0b54bd69357c889ae26d3fcd002c5cfcee652f63 100644 GIT binary patch delta 4883 zcmeH~do)yg8^>plhN$COQ7VxXPSb>3>YPd)Iu(^m;UF`E#$?QxA(v4opg#*)vUGG+WVRB^ZcG??`J=s z{mVEx`@>twn0f1F;lS_Ed>l^egy=ju6^GN-6rESs;&2A9z&Tzb1BWvVK+a9F*WOoz z7b+Qx;Ww|ybyVW!tTZ^A$fVP_26|k5y@NC_Z#vt>PuGLSanU>I$`*yf-Nfa>M}3y$ zD%bEHg3tC@uJB+{*BEnLnG|ytm3WZi zLlKib7r6ZK30zWwpVkla3d!nZC=ZtFUoQV&${sYpx2V~f<4W;9#Bp6?;=^)xT~u&#b}&`pL2MLh9ge-cMqMxpwK1*dNs^iGfEtpn4O;$g#Jg9V6ELIHhxNgCaN_5)8h`OeJ z8S-@Z?GuMi^uDR1E19#X*8ZLoVIop`ByY2C7hPCMj?yY_;X_x^l%)O==91o-;pNRk z%3dAL%TseGdn8@7e1`(`DDHYE}G zk~>sFtPH%lZO>tdSNt+WKssdy7msKJbr+!*!*g&vBwgs_WP>_0C|+JT*Q9|(t~-#F*VlrWGF~Q^ zRNLGPG>RO9lOpLlh>0?2RF}P2uETDFn8M4w!ORQNjN{}Dr8=C2nN{bp!G8L`Zq;^|3e z(y#)@xx37qYy;l5b!@KRv|$Y&%A6pC1SSN0AZSX4JDC<~d?PwMzL*aKFYfdHXFi+*3s1v`VoX6^b4_WAXfDdt~H{e4G zh%*x(3V;gZ!!N)Y;e&%Hi7(;H;>M=6NTDGrRhg+Z8&<7uydCmLf7AsrSxBzg z{YtNf!3*rw^$XZifSA7DUEAqc*Wwpcz;Zd+c*q(tRjjNruF~W`Ut89?x+)F#9b$_9 z(6!npVOQ`4RYhJF|4cSw3apgw6DC*GTczQM#(lNz!GI(d_SfEM?Z0fFM zStWRqzllg<=!>AkXcuyrqDP`0jm}|kbbWoPZvH+l3|BWFq;wY!n?c9WarskpD1Z&Z zQwzsYZ>Jb0y{(cNSVivrd)P5>r~1G)_EMSN%F#UYYn_8Lu%jFO(A7e}Unjou)|gTz z=grDfk5&v0=;)Yf+&xS_*HQo#qMy5p)62hN=qrY%V92&KQS0@auq6;L&n|ko-n&T* z2`mO4FHoFcLMV>pLE5zLtoLt_c@gReFcbwY{y!M9lfg5E!_O{I^Cf=w-*P@ZJo{*v zfHVz;26{946oY)Ouh)vdI&2mHk`IJUh7cdT9oXD^*7{SU^u~dl_O}mBsvi-;MXEBX znKv_^hgHzj-OT4`HDxpNrLd|5w-&&vA<<2OH&Y9o z0j;>r`SBZ_)+=-Jm>?z9^jvf}BNo+@sKUCO_$y5!NA0|QvyM_vA5u%bjXF-DR@ z)7G&Mcy#@GtOBV$xTWB^io_sWUY*3>fgP5!egbthGxcl6cg-24fgl358n`)-< zX-x@@-|u=s1Ib)erE+ayMl3&i{t@oI_=J+{9}&}$57P3DMH`$RkTOiowsRzIh_*cj dlFbT));;#R-uG)uxrXD(pdXXYfNhVF)t~Uc6A=Ia delta 862 zcmezKiE~vy#{>~sCI&Dl6=h)1>VvT7FJ@rS)&#P3HwK;%pO~O9SyIB0nc>u#&9M?y zn^cViW}Bp#W#kqX6z7$tC7I_W=jP?)m{%H^npPD;OkkKXU4etib-O$VQ=BRz_v8g1 z;swrKjtM_u+WW@z@MO-?8S9@<=Kpw`@&4q6AHrpP^ON+l63Y^q1$b?O@+79;<6h~# zFt=iJmI~v>$$}p>IAIDNP7eGWCLfibo0ORf)e+*(uQBs1gW1FW728kdPJP9=dGf{2 z>a1Wjn{R#dVG>e0d*qsKYMrY?+EV-9GOP<2mjlg|oxCBKb+W=wmd$ZLa~P*Pr!)CZ zo)E%1`M~ckfw@(gd%oXhI-X?2`P_)F=*;AU#}g*+`ePxn!PhWp=KFKKKiXFP&)Ox# zb@u4bn{x~vSWo8qt5(0M?LCn5otv@Wu_!e!5#;3LoW$Z{1_7pXwQ8H+rnY~aZWTLe z#ngv)!P>66GqmL9Co%Ryy#rO8xA?ky?a!@u|Los%pz5m5rH5d}w>g;^1XyqW*>hrI z+|~1JCuSY~dY};~wD|X=`72Gg>sqa0YfM^{y>-&$v;Xv1?}3~$>Awc+v8Uf|%$cnF z-&F4$h-L6jk+Iu1F*6V5vd~Vq2m6#0b=@qh#8-z->pkD{7wCumUXv&MH{>`3)^d<@ z^1>6c(|4CK32^KKi=5}0e!-SWy&l5b#shSQz?DUv95=&t)@Gg++95TE8z{uQPw}Np z#P%!ClNRbkb6@)a6k4r%YR3f^=UK9hGyh&Xer_L7NOSki7S6lwyVxe!3*=U*7666L zuMrDo(#pDhXm=)mXaaIZ4XQgXA*iNp3& zg}2^iY+{t>aQectaM!_40ksXu(}TiF?t?wFdIA#*BLjnx?DTv_#t-twS zN=w^ZE9l&sDMvS4n`7{_7p%xwXEXmXLnh|!tzRcQpHOCg4x}?r7%*RM`8s*d2_ugE mEng4KF_;4m1M$gkPYAHw28wKEJh_IkeHIhr_E}6!0;~YtX?8dO diff --git a/.gradle/7.4/executionHistory/executionHistory.lock b/.gradle/7.4/executionHistory/executionHistory.lock index d15a549e0baff560fd153a0805466322ced36e42..b6b8392985a997f9219734dd6aa51dbb4574ced6 100644 GIT binary patch literal 37 pcmZQ><>nAPJO9Uj1~6dtV`gBuc3U8WaY^@aiB<+?BXe^G1^~r<3B~{b literal 37 pcmZQ><>nAPJO9Uj1~6bc$jrcS?e;vo7?q}1Co>tCjm*s%7y#L$3nTyl diff --git a/.gradle/7.4/fileHashes/fileHashes.bin b/.gradle/7.4/fileHashes/fileHashes.bin index c0746095a5511ff7f3041fc456161dd425d026ef..f26a51a6b64b1b1702315a4bb083f54049f8933f 100644 GIT binary patch delta 2109 zcmZvc2~bl<7{_xE0&1E^QOSXtXi+ejK_w9JfT(!15)xtt5L2`aBBE$5sckJrArY-5 z9t$H1HU+^^DgU-rE%5^T&jp!mSx`fMSO44C#q*%3cx&@&lpStgOHaN}1aG$Kk1u%Nxg02)3-vI6 z(8Lxa&*oIthJ;V>B19TsaCn}tc}Z7O^$nd+T-jsG(0A*P0ahA_g}NdJcyPpsV^5N? zg?eciit_nD$(h3p9=bUoNFdf577ui2AZKR{-$nTFIFa=l_?08}^mbn5WeXNr`Xt(=ts9BV`@syZ43Ymrmm1i+ ziTWsC0yUS1C@S7;^Q-8b4PumDVVWnw?~+D*sN59uIk!#Ta3L zkbWYNhqzuiyIfA?P3#xnK;(;~$VrG>)6W6hut;-W)k_#TUIiwFL^xP7L2!-Nu#CO808Xg1D!6bjiDOFj}Ys z!J+utSRgla4O|;dcF3W6@AX$8TPDONgP>ZrMKc>EuqNYUKjhJg>t4?4NWY;2>Uzzd z+Y&5o_03a8^d&l|SS5u2CAucxFg4xZG%TArdQogQs|zRe{~X2v5?NqRL<_A>7qwp= z+e4zsT{V%KPl>fxL1Yx!9?3GYJKA*Yosy2kwegablW>!xx2HgYg8hwHmbzb1v}0Pq z>+ICPd1>q&L%2s=b0Q?1ST;iQVekC9N9%^%ziDfBA}JY5Ks|<-O)hy5A?MnV4}^SU zd7*^DaF8-%#!sQE&=)9SjNJzb_jr4vl=&oc@P<~kd+Gycx8KA*Bn^t7MI~B%Ou0Q0 zWZv#5$SzlAc}!iAU-IAtzLN~m7-&KbvnQmxsm=va5nTT*1*;FF9~VNxw-*vV*d6%( zv^22p1x~!n&wig(ukyaWuJqW}C=9uq|Kel90lfA z3p-eJjK!M#y$ST_eR29vH_g{q0;V6i*snN(cZx-0jIbS-(jNKD#iXUWJYB!!px^UI zx*k?B!*>9)Adx5m=wpP5RuIKpe@^#eTZXEotw`g9ZzS0aaDe2nc_g9XBN1Cem(5H( z`6RmX^OXFYXbz5O&oT&P`bdP2L^3If=KhXTUtFTMf4lI+Nqq0dh%`uyqT3TlWk)!x zI)7K;b4&LRofpxLMLQ*HI|r>lHYoS(5r1)6otY|VSxTn=T~lmAFE#Xl(K`kQNHkY_ zLYDm4TAGk6(r=z_K7GmDiW95lj*y_NvnQ&SYpk0Nt>(;W+t?d;=aZx8Cy1NanoDAj zY!w(q_w IXh9h9FLZZ$0{{R3 delta 370 zcmbQghH>vA#tkMCjCzwzB@8ClN=Qy#Cm}xhE0Ap~=`ne(FM;u*l8Lwj literal 37 pcmZSXcQ)+$xO-JS0~oOLGBYq-yKP;;^Zj4Kaw`UABXe^G1_0V23dR5c diff --git a/.gradle/7.4/fileHashes/resourceHashesCache.bin b/.gradle/7.4/fileHashes/resourceHashesCache.bin index 846640d6babddab9eda13a684041e5b635370de7..418ab5626214ac2fcf1e25fac491e5dddc70a370 100644 GIT binary patch delta 11846 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 delta 441 zcmW;HJxr599LI6M*saD8$=yMrJ}Irx^0aq_w!A$w4%ml8+{$8_%3$Jvg98G?L(rrn ziODyvZqzuCNQiE@m4pE{*c==faig+e{Krc^xf}j3zx(s9Z~vtC>!j}Qx!C#D|0a04 zbie2SS$$4Jzv5bJ>PFKthVQ0EW6*LmsJRl+&=&U+HNGV@mkG=6u;yG0k65CS57d(( zr%BE3L(92X_B8vRJM4PNUKUf1c1m%Tl7`WckE5E7c%2Rz$Y>TbFF48=erGm_9$7jf zKIT{%`^><&Wqo{=Sl03^tBA6O`9yq5dZ*;WV!dQ&mlSu)n&q-# zyWAvRvD7P@+*S-vrbF7(O-eJGpEF|Jogs+w}ONvHb0?}2yV-KYb5bLa4JxR&?_h})i& diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 002c95df5c88200005fff8259b922dc7616d31e9..b8270674794e083f08766f7f0e6dc187231f13bd 100644 GIT binary patch literal 37 qcmZSnyt!lfy(GB|1~6d1%gn%V?RLZ4d;d!f>+Ul!8=0FkFaQ7vIt?cP literal 37 pcmZSnyt!lfy(GB|1~6ceWM*KvcKc=vzqU!|+}#Y!M&{-W3;^VJ3cmmV diff --git a/.gradle/workspace-id.txt b/.gradle/workspace-id.txt new file mode 100644 index 0000000000000000000000000000000000000000..bb3250803b5957f7d108cc696162c682e6691533 GIT binary patch literal 28 jcmZROGOJ3 + + + + + \ No newline at end of file diff --git a/build/classes/java/main/eu/mhsl/minenet/minestom/pve/Main.class b/build/classes/java/main/eu/mhsl/minenet/minestom/pve/Main.class index 1f1cee8bc9f62e252dfdefc005ef32ac1d2a2947..9d20e33da63eac990fe0e475db5f62b5a6bb2328 100644 GIT binary patch delta 3702 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 delta 3079 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 delta 2294 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 diff --git a/build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/ArenaMob.class b/build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/ArenaMob.class new file mode 100644 index 0000000000000000000000000000000000000000..14c2bfb8e253a74857286214c893ffa854128c9c GIT binary patch literal 12491 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 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/MobType.class b/build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/MobType.class new file mode 100644 index 0000000000000000000000000000000000000000..88b84b6404f686b9de2eca6a374f4010e94134c1 GIT binary patch literal 2561 zcmbVOTUXmg5dIb$3xv4DTuLY;X+nz)1qBk)q&AeBlejULV&WF)O%{t0$P$%hn&wxv zqyiysDRXDz;v>9PV&m zt`*-c>-z^>H$3hbdf6@Ni*9l4w|(9WhNy-{#28{5%Zqc_48z^rybrAb4xKxtaZ z=5n)7GOI$^qCu0;nZok3ny5`fyAuz|d{ODe23_U2gg*6@B?&X0 zW|&Nbtmkc`Qb~mbdEc{~QY!3007(2>8a}~oN^072EPtAzCkz!>W|IYxr9lm!;xiev z@$x0ZwUCdRQw0fz_IjLBs$vMk8bgs~_JZkg!>@W=-*C%Ci;EB+i;$m)!-pt1r9LF8ahxnPp;^J# z3=c2sa>cT3qr|-?XbKju5Oe0h-4o{R3RbRQp5M2&xF?Rhsv$2}Q3g+GiO#!QQ~>Qc znnz33a*=y$M$sn8!UwXFylmSu#B;7`*agG01Z;pEb&N8(h=-CK$W{`R9=T|6vtr89fK5%O7@G4|$&r=8@HBkntAi#BG-j={-cmC!Oup}1 z)bCFmGIp^?fZ{0g0d)6kOs*f}ixYhL_6XA{TKgvI;3}yB z{q(6ZaOOa8W1~#GsA5P3fRi#az<}}wY&~*_NPazf2qnMXcu3W-9y>&9{(XX);NVdJ zu}9?~e)F#hAwCz0&mSZ63K6+|8jWY=R*~Chjq#k^s&cy&i!aM<>j}Pjg$}_=trB`9 bsQ6fF#SOG!l%CSWPeYJ#7yG2!fM5Ot2iU5Ir{#9KeK>uB0moNm!D&`$iI#q@Y@2X$9gTFVQtzDQ>+)wn5^v%0st@ zen3B}>KM~1NTj8*G}m`DGw00Av48yh_8q`J4x(5lT1EFw7 zSX?Rlwr*>Lwx?UVcfe4{%?X$9M6rydgcTW=kYd=J0-0{?t-*)F$-d!Mk0D$ys||*~ z0-Z}JMR5gJC0vtn9XA*F5@NkUZqKytJsf3 Fe*vScVbA~o diff --git a/build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Evoker$ActionGoal.class b/build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Evoker$ActionGoal.class new file mode 100644 index 0000000000000000000000000000000000000000..fe1f5f7516e96e15ab537b6ec3d8c433491a0882 GIT binary patch literal 2567 zcmcIlTT>iG6#klB*ku^55^^)a5Rxpr31hs(3j~83a#=SdW)YRBaacMqFc+N5CR84b zRr=shFn_?8yrfDn`ru*>-iq{x zC+nf*xhf=qeBJZx1@Epa&|h6P8>SIjjx;VtzNrq4DVJS3y3rG#b%V%}L~tZI8-`I#49-*(=mkO0zENFw&^Y!wY4CWjzDic@=10$ zL*}kowrvFhnZig#ad$$;Nt~iV+YG{58+el(22Bo6?x9p!q8)e(Z|Cri zj(0I8a5!db_cCE%X1y*~nV@}z1Vv2i_4#Gq6WY>v&n9wsPsasJ3LM*wq@=oxB>Rlm z3T{frYsiH-1#^_ttVK7zKmzZ-sA|XeK+Xgq-QEKco7FzHTXJ3$1W^lQ%ie+%=&rJz zOh?YV^k>X@o07h&S2yih)3?+*6=uUFRdD6%f9?hZH?Y&g+Ulm4Z~sr!d!t@aGk7y% zQ*`82w_ydAB7q@Jx~><-?TS1cuX_HXu`I)R-?ZGoFq@mkv=>fCwoRPF&)d0S`lcg8 z>F+Ss5iEI;y-?!?VwHAstgl=%S5xL&gGA1|uCf+d^%V|t^OyJzV%cp>T)pey`X2S_23DKJEp6wvdXA8)p zPdy==^{LhlUJcG$Q0B*W70=l^IJR-G6&I;7#Z`m*S&lu$($5gZ)9c6;&#a^KF=ZKC z;=eE6|B^Z;G|ba_9hWIDCVIGnt6b57dL3w6%~T{Rs-8HO3@V)K>0UQu%B0bKfNFfI zWq`vqV1VizFwL(!Lj|=+{%X9AN&Z#X-!mNL;B4_H^lo5Zwe$@6;sy?@No(fO6CCBv zFu&Xr6n;>mVrdCQ<%96^ zG*-h*YWyBCD@9|F7B`_i#E|kq3ZCLXad17}=uAbw;9Luuev?ez<;!~yN3n)c+~0=O z*vh1Vk61AYQbsY#>FgHs_fzJJsgG*uDGrx5F#Ztz&$FJ({)lX*NqG{$*9886z`r4- z54HtR+@gAD8`T|(>S0oyxxi-@A8&D8A{B~jp#ZkTrK(CB_--4aBDI;pC-JFIF&B@w P@Ht0~=kvIQFL3BDZ=8W% literal 0 HcmV?d00001 diff --git a/build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Evoker.class b/build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Evoker.class new file mode 100644 index 0000000000000000000000000000000000000000..8560e900f01a7f8b60b22ee68edc865faf360b91 GIT binary patch literal 7253 zcmb_h33L?Y9shmFl1Y{!ED?bq3P=pe23SB$(d7y`U^NGl5Sl2($?has*vzD}vyt?& zhqafzFKumW?P2d$YBy1;Qd@gidmpcN?QQM-dTLer`(|ddn`EH}s@!j)aoBHKto3-LT{Kc&OF6^o)<{0%fhe zU01ap6jO2}u8IB~OX46Qf zMs$m=P>njN|9XL=MHsW$(~L)Gn!vflXH$~4U4{k~8?aGeu@;L-eRk^!J!+elz(7Ij zG;Qv2N_F;r5LOTpxU?|f5Sfy`Ii$y$Y+H*Smt>`}x2V`EEnQ{~wrJx?KQ>{TRNQ3( z`wFt|hH62@MI!wzEiy!&C9u6Pf3{`~F)cJF%p~)Imj;|?zP)rM1y@kHj-Mqc1kY*7 zq=Fp+YYX5#kkH0uoHSyW6lpgj=O?x{M0*SoXs>A|bd999)a4kx+qUAy&>S}MfT_r9aIJzPDxQO*0+m@W?a=ID zMwaE21g8+RlKl_EHz_sjB}QZa_>9aFck7EwFJo7w@$n7RVvc%Fjit9SukI7d%0s#$hCn$SZB zye}-&JzYJm9Y?#`jvnf4>5FtSe)4x0vtX(08}MQUFH!MQyo`R5PdWN*2hDQL!b#n_ z0YHumhpT&xL|=}Z6ud&kEAgtr$u5IdX0*k z@mhiMjO+pj^7}yMz?5Rcd0k}&jkZXAZv~Ui>s7n~ZzP?#k+d}-@|hq_w@YV)!?6Ohzy#XA(dQ^jp~ z7ojAzcPjXhiVx!>bHv{)`!NDWS(2$Ig9WQ* zUbel|^f475$0wLm=-D0GiT%2kkeP#hb(<_=pHgubP7*gWVCJ2#u1%Ke2<}$#8QFv{ zPL0Os?C$%$8k>R$CR9w~9)U%cK4|I5;YgCfO2&N5whr(q6`#d@G-$#!k2kS_t<4_~ z^o8v3;xYYziqrTUkx#{Zhi+?Z^ydgj561`(kx|X-_$3VcyUz>k%;)PffkxQ>+MK2= zEzSYKYx5{Pt+c;~Ab=i<6mQu0alS`CMZ*SXff~xr#^e3kD1)`B6DFp9S=<@M{IX zQSn>+PGH^KL^FKS2x`V4l7E4layzvtbrj2gvFGL!iP8CcX8Iz!XJ^l#;18VDia0Gd z6I1hguYSUh#}Sa_^Uo^&g1^c#Jyqmu@(MGf{Fd#JZ6`l|`~&|~@Glkr#(xAZ&Zqn7 zu=Hg%`2zKIEu80yA?C+pcv8iG@sx~N+0;7=mcF8cA+wYzs<}<7AVXT)h!nS z9oncPiy~Mqi|uZ+c-XKo24$j%7-R8dT&jjmN0VWgwzD^)cGk6<)==n}ZV#|P8Oe~A zeHrRB?aovpL3V0p;$i!)F`w(!G-RImx&3v~;%9+KFObki24Y%`r~jHQG^3YVau-hd zRXd~dvk3?gKT~8;ss&@TST!@70bnn0PYK537>6|&$g=K0s$u25^lF4`T~zm+C=&|re4=~`#{=A%OI+G1Eb5zJB5o)P1k$M589aq$e6Zpa zs{4XVals@m3^v?LoS4A+H28W`U(i2^&8t@VDk~>&sq?I{FIctRcONeAE3FE5Phe*n zd(vo0V}F*pT2zo=Jw*y4z>V%2ZbKWf6Nj-2{n(8oe0Ck09LCqU%z2ELbH`L6{1hg@ zRn|hGQcRy*YoXLp$jvBo1Ya9$m_TQ+>fj`LCegnX*WGd(6yKfjl}=(HjbX`5siUb% zhd?WTG}%W+_B%wExkx;sz*@0LR8r@Q9kxr(aP3{9AfkwXd&QwMe3N;^A7S`w!yzH$ zcD@2)86eK%-%{QxOfd3>TysO?aeY6DOLHA@8BQZ{8qqXHZ$*Wa!@i5=J<*WHi_*Ap zQD8?JuMXag*PXB(zrl~%Gylc zx6)cypqAGSTu@6NcU@)U6rUSCS0O=BEmoq0%rK>R%$%ZWBs2Y`J6AOTB5v#=- zUVV&*YO$8z=(yrydR4t>5SyHDA+cG6#HD-}q~fZXShry%H!in}%l1@@Mqam<$+qlr O5$634u}kbh_5T2p8i;=Y literal 0 HcmV?d00001 diff --git a/build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Fang.class b/build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Fang.class new file mode 100644 index 0000000000000000000000000000000000000000..6f6847b838656d57512ee16ba34da8b7fbbbdf67 GIT binary patch literal 1344 zcmbVMTTc@~6#foWwk?Z5!3y3GxwSZ&vAk2Bnh??W6hVg5np>$Je zp*-W51CeVTI|p?|uyf_jm$~gX`L*JDiLg-UNiQ2m6fp~N8-uV3LIt9>*Kk`FyAbM4 zC8SoK6g9sh*23E>zd{&z>UfTMPROKsG?^~Pa1p~6Mr@2CL0IY0XjLm|06aVW{gh^wTIUjjsvGF5Qhbp8;-S+QKaxGngeLIshjkgovj;7{d4o zg3CD&o0WZ4HCYSugz2twoz*CDPJ7Bm8W}E|G)7k65$1a+TQ*%L^ryl-^1^@12_G(S zM;3!xMd=+`aha1S_*LnarFKHP&5W2mhf}s%_@4@A36}4b>hitE5a+nrvBx9r*XEVmNmt_&;@2mXI=Y2ox88(2fC{APMGFc*!xRigJ7D=8Rb6% z=m+umF7kexsa5_!h|g%|6X*-9k9_aL9p2-70zisSkh4SFO8Y?CZR&8>Mgfz%*u)nVm`I`(|dpJv#pR3&1*7O2{Gaq2S{RW(ZGWb}BM4r!I+9%680F zaqNscRIO9jJ3L@QajP8!&9|*>!b&hzO{0t=N*>BSD)0%4M=IJ+!&9~igo80FZ8_E| zN(QQ#-8#vDF!R#H#=Rn}txic<@0V~DvmWMr%%etFm>@bI&p3`$M?1DghlEnM_kOdr z+uUgpmM$ckC}>o09XCAO^l=Nf35%Cfw1ubZ^zbtwmwX_!FCJqOy?%KIfAD0rcX7|d zeIF0-knnuU)ebFdH?pj@Oc?5qYzgxzy9~D-ceIJ$>3B~b_#b`#?V;W$Y<>Aen3Ae zx~skPCNXgCoC9~xopZmwKRy9m;GlpEvL*~0YsfJig;Mjt3uUaMfX7nJq~bEvo}TmW zq73F!$&l+m-raPc7>=ElI@%WUD44Kp6k#)Pnebo|`wOo>FHC2W3nfFrgUIDq>Fqvp z$?@C^J$=d0YOHA492%VtV4;F_6IB~E)EQ1!bRH=wbfP5hPrb2J424+gTPb`!VK5rK z=8z%VNYS{C#uQ1#q1Yahz?EtsT%VMh6ODvF6v|8auW0Cr7c-nW|C^)DVD+O!jbzVD zJ&McmPM*a~;E=wWr@aDE6C39m!8Dlj1@HVRb2 zai3$wp*8kI)rPKha?FIZU;9E>^TztUl1COf2YD9-xCF&L6&xnrA<+oJai5irIn*kM z+Uot_)QH-I$+spncAK!VJ|<<^&*34a96WMSM2WC8LUc2ku^gy|wj3MXCAc5=ylQRt zYxDEoewDCtC)Y?#rGObcb};K=4o?Wn_p;Q5s%drSh>(iD5$bnOGKyZlzk|PcvfX(+ zbMV~73%n$3j=9}V%-Z&1RzCkA6ce@s$a>h&Cj6ws1G(ORw0KKj_C*fs1Dp8}9f&rj zJkif?FKBbz((SHfN?z2_U0=(VCB8{!?4d~rTi$>4TOs6|Q7`WBju{YSWrjE3bzfsi zmXQ@{10-Jo3t|@~s*27@d}-qpbPh+{g9}Wb;ptDwrlby{m-NtzXhbtbEKB76slp0g LNhA+MYznK_EamOB literal 0 HcmV?d00001 diff --git a/build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Zombie.class b/build/classes/java/main/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Zombie.class new file mode 100644 index 0000000000000000000000000000000000000000..21ffd27fe7f960e5b2e8ead417f07508d34c206d GIT binary patch literal 3262 zcma)8*;f-+82?=o84|{dNU_vb6cIwO4x*xM+*m?Qn*@}UTDs7ia1DdWOq@)j*nPG8 zzNn`Ued}{MJrVoR<8%L@KGuGB5)!}(P0q>OnY;YH@B4k*{rlfP{{nCtcYJ7qM}b$x zHZ(IFG=!~XbwlKBGppr=RTP#c3|qICwXicJmUDukd2T8;76~)-M;kg3@}mVl1%4H+ zP#H8)(6Wp9j3a9ULarz@ZV7{HSu?4P%D0%AB#EbVL$}W`1Op9<9GI0tA5pObZ48QO z%;fkrgJGl&K#}a+XsdG|EayW5vn^<6Xc5(IrBnL2{ zAgE#xhlsWYU6!&0w+oig=FDtTm$8x;wnM|PJMn9lu2W$uxg=7Obg9E(6&i*JCtblI z61Sk6_^er50g`kKt2l~d3~I9Mj9F>EL))AWBRHYpq>88U3`3tAIt77Dg6Rxj7FO?h zBAvk-8;!&n+|_ybK*)zvIIZA}inBP!u-{FNZi}o&t`(NfGo)T3o?tlOYVd}wp;nAx zT)~8jFeVv#>Vii|!i>#RS12%(1wBL2%y7Zoh>arLBh}ec1??RxLy|t{5mE4*isuof zwEcg5){Zi4bMzul1R4?PL~2~c6s8%rQ?yBCB1YLqQ|^Yjc&9$cRpTfkWvpCOF(U)T zGc`FWefolmS?SOnlhH^#F+Uogn4d|6!%?|*NySTYZD;t>bogQ<93KzQk4+^K(Xe#b z%PL;Ms|-yh#GJ_s_L;EmGMSQt$>9ng&X+(=om0eg*uvfwxt>gLf%1 zoxYXVi(-Ojd79i;r;TpXdNM*zc8VlDz2nsR2rEkWgLomE6jp*KGc?m4HB&q@%c*41 zcV*IRFY0-QlhFp0maTqM-v}|Zm3gmqVTPlwN$L_5wL=87-6?l5o^w=F@Ok6GRl{NE zzF45p%8H0l)bqNulKhGE)Vh5{LTAZl7^ZAsWki*hZm@!FymH|=;KlOc6_H{(om zi)RIu{0(59oJo+qt`=`{Q{>-v2fA%3q zyq;C;FQLD@RKipD(Nn^a+cdL+<0}ZQV)P!KWhfy=GZ$8nST|FJ+C^(Gu41l)*Me=s zB_yS?9!J?e_~^ZduG78PN4KwG^kD-1)F6UXj|Z`YL&)K}0H8os3eSM*mH0m%=qtj-mFZjxFa znj4b*Tz-gzJ%c4Im5_@C|3L9RZX9ZVv(4XJ!do@-Itc+})Hb?I?Zz>5<2c>UPB`Z5 zBkXSS#n<@8F>I)6*bu(OcNN3P>)MtIH{p8{(S#rHBaQ9!HiDmU>s%LID8_KR+4moo C*{UJ{ literal 0 HcmV?d00001 diff --git a/build/classes/java/main/eu/mhsl/minenet/minestom/pve/util/Knockback.class b/build/classes/java/main/eu/mhsl/minenet/minestom/pve/util/Knockback.class new file mode 100644 index 0000000000000000000000000000000000000000..c18d8e10d51efa192b52ea67cf9fc29beb8a8691 GIT binary patch literal 1299 zcmb7D+foxj5IsZ4ZCRFpfP$i+2)O|36~%CQAm+uWlv*i$oGeqxkYtzIodog0Kk&g1 z@Wmfcs}L=%@&o({|HQIqNpZ3A0F~Owc2D;?-KTqh|NZd`zzWvl=wZl-mffrc4ZA5_ z;R+T02g+;O+ihXDlx*0KT+gXjxKlU4&}$-!7(;AXx>Bt&%%w{w(gNYPg>MU2NwsU2 zWLvt`hoO5k|5o6_Y<*c6;MFpi6HTrx3% z%M4e$v7JnzE_V4&*h?{vNe1hv&&OQVVr%dJ6hA)uuw>v0rcGSO3y(1{*1Ln`Sx~Wm-0^Eeo?Cy zYfDGTCPN}nzHqCmM(b7#M^|7lo_j6d5k;xHv<_8Y(Bs4u?PP+!q#k-`Rq2FYP&%VX zVgWYY-yrKYBJ>6%e}cWrenaFl89lg3XDqxhaf{x~gCGjO6W-HT)&Y1+fSP2HlH*zH zD@=W)vblYn+sD|uVNBJ(ikcY2T`F5wFnYj3 z_99ut7uG_0;2!RGYS|!+2;Et^>Fgd6?jg00>=B0%VvL}l&@|@cLG&S}g(d1w%VFUG r@)S+NV!4BEhc*eQu|HAJahb-B$rSAX((ZLlPW_)e(KUG`q*(n2jj0)b literal 0 HcmV?d00001 diff --git a/build/classes/java/main/eu/mhsl/minenet/minestom/pve/util/Mapping.class b/build/classes/java/main/eu/mhsl/minenet/minestom/pve/util/Mapping.class new file mode 100644 index 0000000000000000000000000000000000000000..342ad9b446ba829cd161510685075b0c635b2fe9 GIT binary patch literal 495 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 literal 34859 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 { + playerDeathEvent.setDeathText(null); + playerDeathEvent.setChatMessage(null); + }); + events.addListener(PlayerSpawnEvent.class, playerSpawnEvent -> { playerSpawnEvent.getPlayer().addEffect(new Potion(PotionEffect.BLINDNESS, (byte) 1, 30)); + playerSpawnEvent.getPlayer().refreshCommands(); }); @@ -79,10 +100,6 @@ public class Main { Collection players = MinecraftServer.getConnectionManager().getOnlinePlayers(); if (players.isEmpty()) return; - for(Player p : players) { - p.refreshCommands(); //TODO this is a dumb idea - } - final Runtime runtime = Runtime.getRuntime(); final TickMonitor tickMonitor = lastTick.get(); final long ramUsage = (runtime.totalMemory() - runtime.freeMemory()) / 1024 / 1024; diff --git a/src/main/java/eu/mhsl/minenet/minestom/pve/arena/Arena.java b/src/main/java/eu/mhsl/minenet/minestom/pve/arena/Arena.java index bea3d2a..0574713 100644 --- a/src/main/java/eu/mhsl/minenet/minestom/pve/arena/Arena.java +++ b/src/main/java/eu/mhsl/minenet/minestom/pve/arena/Arena.java @@ -1,46 +1,38 @@ package eu.mhsl.minenet.minestom.pve.arena; import eu.mhsl.minenet.minestom.pve.Lobby; -import eu.mhsl.minenet.minestom.pve.arena.mob.Zombie; +import eu.mhsl.minenet.minestom.pve.arena.mob.ArenaMob; +import eu.mhsl.minenet.minestom.pve.arena.mob.MobType; +import eu.mhsl.minenet.minestom.pve.arena.mob.creature.Vex; import eu.mhsl.minenet.minestom.pve.util.FullbrightDimension; +import eu.mhsl.minenet.minestom.pve.util.Knockback; +import eu.mhsl.minenet.minestom.pve.util.Mapping; import eu.mhsl.minenet.minestom.pve.util.PaneGenerator; +import net.kyori.adventure.sound.Sound; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; import net.minestom.server.MinecraftServer; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Pos; import net.minestom.server.coordinate.Vec; -import net.minestom.server.entity.*; -import net.minestom.server.entity.ai.EntityAIGroup; -import net.minestom.server.entity.ai.EntityAIGroupBuilder; -import net.minestom.server.entity.ai.goal.DoNothingGoal; -import net.minestom.server.entity.ai.goal.FollowTargetGoal; -import net.minestom.server.entity.ai.goal.RandomLookAroundGoal; -import net.minestom.server.entity.ai.goal.RandomStrollGoal; -import net.minestom.server.entity.ai.target.ClosestEntityTarget; +import net.minestom.server.entity.Entity; +import net.minestom.server.entity.LivingEntity; +import net.minestom.server.entity.Player; import net.minestom.server.entity.damage.DamageType; import net.minestom.server.event.entity.EntityAttackEvent; -import net.minestom.server.event.entity.EntityDamageEvent; -import net.minestom.server.event.entity.EntityDeathEvent; import net.minestom.server.event.instance.AddEntityToInstanceEvent; import net.minestom.server.event.instance.RemoveEntityFromInstanceEvent; +import net.minestom.server.instance.Explosion; +import net.minestom.server.instance.Instance; import net.minestom.server.instance.InstanceContainer; import net.minestom.server.instance.block.Block; -import net.minestom.server.item.ItemStack; -import net.minestom.server.item.Material; -import net.minestom.server.potion.Potion; -import net.minestom.server.potion.PotionEffect; +import net.minestom.server.particle.Particle; +import net.minestom.server.particle.ParticleCreator; import net.minestom.server.sound.SoundEvent; import net.minestom.server.timer.Task; import net.minestom.server.timer.TaskSchedule; -import net.minestom.server.world.DimensionType; -import org.jetbrains.annotations.NotNull; -import java.util.List; -import java.util.UUID; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.TimeUnit; -import java.util.function.Predicate; +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; public class Arena extends InstanceContainer { private UUID arenaId; @@ -70,33 +62,43 @@ public class Arena extends InstanceContainer { eventNode().addListener(EntityAttackEvent.class, entityAttackEvent -> { //Player attacks Mob if(!(entityAttackEvent.getEntity() instanceof Player)) return; - sendMessage(Component.text("EntityAttackEvent " + System.currentTimeMillis())); Player attacker = (Player) entityAttackEvent.getEntity(); - LivingEntity target = (LivingEntity) entityAttackEvent.getTarget(); + ArenaMob target = (ArenaMob) entityAttackEvent.getTarget(); - target.damage(DamageType.fromPlayer(attacker), 20); + Collection nearby = getNearbyEntities(entityAttackEvent.getTarget().getPosition(), 3); - double knockbackX = Math.sin(attacker.getPosition().yaw() * (Math.PI / 180)); - double knockbackZ = -Math.cos(attacker.getPosition().yaw() * (Math.PI / 180)); + if(nearby.size() > 1) + target.particle(Particle.SWEEP_ATTACK, target.getPosition(), 0.5f, (int) Mapping.map(nearby.size(), 1, 10, 1, 5)); - entityAttackEvent.getTarget().takeKnockback( - 0.5f, - knockbackX, - knockbackZ - ); - scheduler().scheduleNextTick(() -> { - if(target.isDead()) { - target.takeKnockback( - 1f, - knockbackX, - knockbackZ - ); - } else - target.setVelocity(new Vec(0, 10, 0)); - }); + for(Entity entity : nearby) { + if(!(entity instanceof ArenaMob)) continue; //Only damage ArenaMobs + + ArenaMob secondaryTarget = (ArenaMob) entity; + + + secondaryTarget.damage( + DamageType.fromPlayer(attacker), + (float) Mapping.map(secondaryTarget.getDistance(target), + 3, + 0, + 0, + 5 + ) + ); + + Knockback knb = Knockback.calc(attacker); + knb.apply(secondaryTarget, (float) Mapping.map(secondaryTarget.getDistance(target), 3, 0, 0.1, 0.5)); + + secondaryTarget.particle(Particle.FALLING_OBSIDIAN_TEAR, secondaryTarget.getPosition(), new Vec(knb.x(), 0, knb.z()), 10); + + scheduler().scheduleNextTick(() -> { + if(secondaryTarget.isDead()) knb.apply(secondaryTarget, 1f); + }); + } }); + } public void stop() { @@ -119,9 +121,42 @@ public class Arena extends InstanceContainer { isRunning = true; this.spawner = scheduler().scheduleTask(() -> { - if(this.getEntities().size() > 100) return; - new Zombie().setInstance(this, new Pos(0, 5, 0)); - }, TaskSchedule.seconds(1), TaskSchedule.seconds(1)); + + try { + spawnMob((ArenaMob) MobType.getRandom().instance()); + } catch (Exception e) { + throw new RuntimeException(e); + } + + }, TaskSchedule.seconds(3), TaskSchedule.seconds(2)); + } + + public void spawnMob(ArenaMob mob) { + this.spawnMob(mob, new Pos(0, 5, 0), 10); + } + public void spawnMob(ArenaMob mob, Pos pos, int area) { + if(getEntities().size() >= 150) return; + + if(getEntities().stream().filter(entity -> mob.getClass().isInstance(entity)).count() > 10) return; + + Random rnd = new Random(); + mob.setInstance(this, pos.add(rnd.nextInt(-area, area), 0, rnd.nextInt(-area, area))); + + } + + public void explosiveDamage(Pos pos, float offset, int damage, int range) { + sendGroupedPacket(ParticleCreator.createParticlePacket( + Particle.EXPLOSION, pos.x(), pos.y(), pos.z(), + offset, offset, offset, 5 + )); + playSound( + Sound.sound(SoundEvent.ENTITY_GENERIC_EXPLODE, Sound.Source.NEUTRAL, 0.5f, 1), + pos.x(), pos.y(), pos.z() + ); + for (Entity entity : getNearbyEntities(pos, range)) { + if (entity instanceof LivingEntity livingEntity) + livingEntity.damage(DamageType.GRAVITY, (float) Mapping.map(damage, entity.getDistance(pos), 0, 0, damage)); + } } diff --git a/src/main/java/eu/mhsl/minenet/minestom/pve/arena/ArenaMob.java b/src/main/java/eu/mhsl/minenet/minestom/pve/arena/ArenaMob.java deleted file mode 100644 index 9e19d41..0000000 --- a/src/main/java/eu/mhsl/minenet/minestom/pve/arena/ArenaMob.java +++ /dev/null @@ -1,126 +0,0 @@ -package eu.mhsl.minenet.minestom.pve.arena; - -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; -import net.minestom.server.MinecraftServer; -import net.minestom.server.coordinate.Pos; -import net.minestom.server.entity.EntityCreature; -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.LivingEntity; -import net.minestom.server.entity.Player; -import net.minestom.server.entity.ai.EntityAIGroupBuilder; -import net.minestom.server.entity.ai.goal.MeleeAttackGoal; -import net.minestom.server.entity.ai.goal.RandomLookAroundGoal; -import net.minestom.server.entity.ai.goal.RandomStrollGoal; -import net.minestom.server.entity.ai.target.ClosestEntityTarget; -import net.minestom.server.entity.damage.DamageType; -import net.minestom.server.event.entity.EntityAttackEvent; -import net.minestom.server.event.entity.EntityDamageEvent; -import net.minestom.server.event.entity.EntityDeathEvent; -import net.minestom.server.event.entity.EntitySpawnEvent; -import net.minestom.server.item.ItemStack; -import net.minestom.server.item.Material; -import net.minestom.server.particle.Particle; -import net.minestom.server.particle.ParticleCreator; -import net.minestom.server.potion.Potion; -import net.minestom.server.potion.PotionEffect; -import net.minestom.server.sound.SoundEvent; -import net.minestom.server.timer.TaskSchedule; -import net.minestom.server.utils.time.TimeUnit; -import org.jetbrains.annotations.NotNull; - -import java.util.List; - -public class ArenaMob extends EntityCreature { - public ArenaMob(@NotNull EntityType entityType) { - super(entityType); - - setCustomName(generateHealthBar(getMaxHealth(), getHealth())); - setCustomNameVisible(true); - setRemovalAnimationDelay(3500); - - addAIGroup( - new EntityAIGroupBuilder() - .addGoalSelector(new MeleeAttackGoal(this, 1.2, 20, TimeUnit.SERVER_TICK)) - .addTargetSelector(new ClosestEntityTarget(this, 32, Player.class)) - .addGoalSelector(new RandomLookAroundGoal(this, 30)) - .addGoalSelector(new RandomStrollGoal(this, 5)) - .build() - ); - - eventNode().addListener(EntitySpawnEvent.class, entitySpawnEvent -> { - Pos position = entitySpawnEvent.getEntity().getPosition(); - if(entitySpawnEvent.getEntity() == this) ParticleCreator.createParticlePacket(Particle.FIREWORK, - position.x(), - position.y(), - position.z(), - (float) position.sub(1).x(), - (float) position.sub(1).y(), - (float) position.sub(1).z(), - 10); - }); - - eventNode().addListener(EntityAttackEvent.class, entityAttackEvent -> { - //Mob attacks Player - if(entityAttackEvent.getEntity() instanceof Player) return; - - instance.sendMessage(Component.text("EntityAttackEvent " + System.currentTimeMillis())); - entityAttackEvent.getTarget().takeKnockback( - 0.2f, - Math.sin(entityAttackEvent.getEntity().getPosition().yaw() * (Math.PI / 180)), - -Math.cos(entityAttackEvent.getEntity().getPosition().yaw() * (Math.PI / 180)) - ); - - ((LivingEntity) entityAttackEvent.getTarget()).damage(DamageType.fromEntity(entityAttackEvent.getEntity()), 1); - - ((EntityCreature) entityAttackEvent.getEntity()).swingMainHand(); - - }); - - - eventNode().addListener(EntityDamageEvent.class, entityDamageEvent -> { - instance.sendMessage(Component.text("EntityDamageEvent " + System.currentTimeMillis())); - - entityDamageEvent.setSound(SoundEvent.BLOCK_AMETHYST_BLOCK_STEP); - - setCustomName(generateHealthBar(getMaxHealth(), getHealth())); - lookAt(new Pos(0,0,0)); - }); - - eventNode().addListener(EntityDeathEvent.class, entityDeathEvent -> { - instance.sendMessage(Component.text("EntityDeathEvent " + System.currentTimeMillis())); - - setCustomNameVisible(false); - setCustomName(null); - - scheduler().scheduleTask(() -> { - teleport(getPosition().sub(0, 0.1, 0)); - }, TaskSchedule.seconds(3), TaskSchedule.stop()); - - - }); - } - - - - private static final int BLOCK_LENGTH = 6; - - private static final List CHARACTERS = List.of( - "", "▏", "▎", "▍", - "▌", "▋", "▊", "▉" - ); - private static final String FULL_BLOCK_CHAR = "█"; - private static @NotNull Component generateHealthBar(float maxHealth, float currentHealth) { - // Converts the health percentage into a number from 0-{blockLength} -- only 0 if the mob's health is 0 - final double charHealth = (currentHealth / maxHealth) * BLOCK_LENGTH; - return Component.text() - .append(Component.text( - FULL_BLOCK_CHAR.repeat((int) Math.floor(charHealth)), - NamedTextColor.DARK_RED - )).append(Component.text(CHARACTERS.get((int) Math.round( - (charHealth - Math.floor(charHealth)) // number from 0-1 - * (CHARACTERS.size() - 1) // indexes start at 0 - )), NamedTextColor.GOLD)) - .build(); - } -} diff --git a/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/ArenaMob.java b/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/ArenaMob.java new file mode 100644 index 0000000..40a5a0f --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/ArenaMob.java @@ -0,0 +1,198 @@ +package eu.mhsl.minenet.minestom.pve.arena.mob; + +import eu.mhsl.minenet.minestom.pve.util.Knockback; +import net.kyori.adventure.sound.Sound; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.minestom.server.coordinate.Pos; +import net.minestom.server.coordinate.Vec; +import net.minestom.server.entity.*; +import net.minestom.server.entity.ai.EntityAIGroupBuilder; +import net.minestom.server.entity.ai.goal.MeleeAttackGoal; +import net.minestom.server.entity.ai.goal.RandomLookAroundGoal; +import net.minestom.server.entity.ai.goal.RandomStrollGoal; +import net.minestom.server.entity.ai.target.ClosestEntityTarget; +import net.minestom.server.entity.damage.DamageType; +import net.minestom.server.entity.metadata.LivingEntityMeta; +import net.minestom.server.event.entity.*; +import net.minestom.server.event.item.PickupExperienceEvent; +import net.minestom.server.instance.Instance; +import net.minestom.server.particle.Particle; +import net.minestom.server.particle.ParticleCreator; +import net.minestom.server.sound.SoundEvent; +import net.minestom.server.timer.TaskSchedule; +import net.minestom.server.utils.time.TimeUnit; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.Random; + +public class ArenaMob extends EntityCreature { + private int damage = 1; + private int experience = 10; + public ArenaMob(@NotNull EntityType entityType) { + super(entityType); + + setCustomName(generateHealthBar(getMaxHealth(), getHealth())); + setCustomNameVisible(true); + setRemovalAnimationDelay(3500); + + aiGroup(); + + eventNode().addListener(EntitySpawnEvent.class, this::onSpawn); + eventNode().addListener(EntityAttackEvent.class, this::onAttack); + eventNode().addListener(EntityDamageEvent.class, this::onDamage); + eventNode().addListener(EntityDeathEvent.class, this::onDeath); + + eventNode().addListener(EntityTickEvent.class, ArenaMob::onTick); + + + eventNode().addListener(PickupExperienceEvent.class, pickupExperienceEvent -> { + pickupExperienceEvent.setCancelled(true); + + Knockback knb = Knockback.calc(pickupExperienceEvent.getPlayer()); + pickupExperienceEvent.getExperienceOrb().setVelocity(new Vec(knb.x(), 0, knb.z())); + }); + } + + + public void particle(Particle particle, Pos pos, Vec offset, int count) { + instance.sendGroupedPacket( + ParticleCreator.createParticlePacket( + particle, + pos.x(), + pos.y(), + pos.z(), + (float) offset.x(), + (float) offset.y(), + (float) offset.z(), + count + ) + ); + } + public void particle(Particle particle, Pos pos, float offset, int count) { + this.particle(particle, pos, new Vec(offset, offset, offset), count); + } + + + protected void aiGroup() { + addAIGroup( + new EntityAIGroupBuilder() + .addGoalSelector(new MeleeAttackGoal(this, 1.2, 20, TimeUnit.SERVER_TICK)) + .addTargetSelector(new ClosestEntityTarget(this, 32, Player.class)) + .addGoalSelector(new RandomLookAroundGoal(this, 30)) + .addGoalSelector(new RandomStrollGoal(this, 5)) + .build() + ); + } + + private static void onTick(@NotNull EntityTickEvent entityTickEvent) { + + } + protected void onSpawn(@NotNull EntitySpawnEvent entitySpawnEvent) { + particle(Particle.POOF, entitySpawnEvent.getEntity().getPosition(), 1, 3); + } + + protected void onAttack(@NotNull EntityAttackEvent entityAttackEvent) { + //Mob attacks Player + if (entityAttackEvent.getEntity() instanceof Player) return; + + ArenaMob attacker = (ArenaMob) entityAttackEvent.getEntity(); + Player target = (Player) entityAttackEvent.getTarget(); + + particle(Particle.LANDING_LAVA, target.getPosition(), 0.5f, 10); + + Knockback.calc(attacker).apply(target, 0.2f); + + target.damage(DamageType.fromEntity(entityAttackEvent.getEntity()), damage); + attacker.swingMainHand(); + + } + + protected void onDamage(@NotNull EntityDamageEvent entityDamageEvent) { + + particle(Particle.DAMAGE_INDICATOR, entityDamageEvent.getEntity().getPosition(), 1, 5); + entityDamageEvent.setSound(SoundEvent.BLOCK_AMETHYST_BLOCK_STEP); + + updateHealthBar(); + lookAt(new Pos(0, 0, 0)); + } + + protected void onDeath(@NotNull EntityDeathEvent entityDeathEvent) { + + particle(Particle.SOUL, entityDeathEvent.getEntity().getPosition(), 0.5f, 3); + + setCustomNameVisible(false); + setCustomName(null); + + Random rnd = new Random(); + short value = 1; + //TODO prevent to many orbs + for(int i = 0; i <= experience; i++) { + ExperienceOrb orb = new ExperienceOrb(value); + orb.setInstance(instance, entityDeathEvent.getEntity().getPosition().add(0, 0.1, 0)); + orb.setVelocity(new Vec(rnd.nextFloat(-5, 5), rnd.nextFloat(1, 3), rnd.nextFloat(-5, 5))); + orb.spawn(); + + orb.setGravity(0, 0); + + instance.scheduler().scheduleTask(() -> { + particle(Particle.LAVA, orb.getPosition(), 0, 1); + orb.remove(); + }, TaskSchedule.millis(rnd.nextInt(1000, 5000)), TaskSchedule.stop()); + } + + scheduler().scheduleTask(() -> { + teleport(getPosition().sub(0, 0.1, 0)); + }, TaskSchedule.seconds(3), TaskSchedule.stop()); + } + + public void updateHealthBar() { + setCustomName(generateHealthBar(getMaxHealth(), getHealth())); + } + + public int getDamage() { + return damage; + } + + public void setDamage(int damage) { + this.damage = damage; + } + + public int getExperience() { + return experience; + } + + public void setExperience(int experience) { + this.experience = experience; + } + + @Override + public void setHealth(float health) { + super.setHealth(health); + updateHealthBar(); + } + + private static final int BLOCK_LENGTH = 6; + + private static final List CHARACTERS = List.of( + "", "▏", "▎", "▍", + "▌", "▋", "▊", "▉" + ); + private static final String FULL_BLOCK_CHAR = "█"; + private static @NotNull Component generateHealthBar(float maxHealth, float currentHealth) { + // Converts the health percentage into a number from 0-{blockLength} -- only 0 if the mob's health is 0 + final double charHealth = (currentHealth / maxHealth) * BLOCK_LENGTH; + return Component.text() + .append(Component.text( + FULL_BLOCK_CHAR.repeat((int) Math.floor(charHealth)), + NamedTextColor.DARK_RED + )).append(Component.text(CHARACTERS.get((int) Math.round( + (charHealth - Math.floor(charHealth)) // number from 0-1 + * (CHARACTERS.size() - 1) // indexes start at 0 + )), NamedTextColor.GOLD)) + .build(); + } + + +} diff --git a/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/MobType.java b/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/MobType.java new file mode 100644 index 0000000..a160200 --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/MobType.java @@ -0,0 +1,31 @@ +package eu.mhsl.minenet.minestom.pve.arena.mob; + +import eu.mhsl.minenet.minestom.pve.arena.mob.creature.Evoker; +import eu.mhsl.minenet.minestom.pve.arena.mob.creature.Pillager; +import eu.mhsl.minenet.minestom.pve.arena.mob.creature.Spider; +import eu.mhsl.minenet.minestom.pve.arena.mob.creature.Zombie; + +import java.lang.reflect.InvocationTargetException; +import java.util.Random; + +public enum MobType { + ZOMBIE(Zombie.class), + PILLAGER(Pillager.class), + EVOKER(Evoker.class), + SPIDER(Spider.class); + + private Class clazz; + + MobType(Class type) { + this.clazz = type; + } + + public Object instance() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { + return this.clazz.getDeclaredConstructor().newInstance(); + } + + public static MobType getRandom() { + int random = new Random().nextInt(values().length); + return values()[random]; + } +} diff --git a/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/Zombie.java b/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/Zombie.java deleted file mode 100644 index 6e8d055..0000000 --- a/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/Zombie.java +++ /dev/null @@ -1,19 +0,0 @@ -package eu.mhsl.minenet.minestom.pve.arena.mob; - -import eu.mhsl.minenet.minestom.pve.arena.ArenaMob; -import net.minestom.server.entity.EntityCreature; -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Player; -import net.minestom.server.item.ItemStack; -import net.minestom.server.item.Material; -import org.jetbrains.annotations.NotNull; - -public class Zombie extends ArenaMob { - public Zombie() { - super(EntityType.ZOMBIE); - - setItemInHand(Player.Hand.MAIN, ItemStack.builder(Material.TNT).build()); - setItemInHand(Player.Hand.OFF, ItemStack.builder(Material.FLINT_AND_STEEL).build()); - - } -} diff --git a/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Evoker.java b/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Evoker.java new file mode 100644 index 0000000..6d2175a --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Evoker.java @@ -0,0 +1,134 @@ +package eu.mhsl.minenet.minestom.pve.arena.mob.creature; + +import eu.mhsl.minenet.minestom.pve.arena.Arena; +import eu.mhsl.minenet.minestom.pve.arena.mob.ArenaMob; +import net.kyori.adventure.sound.Sound; +import net.minestom.server.entity.Entity; +import net.minestom.server.entity.EntityCreature; +import net.minestom.server.entity.EntityType; +import net.minestom.server.entity.Player; +import net.minestom.server.entity.ai.EntityAIGroupBuilder; +import net.minestom.server.entity.ai.GoalSelector; +import net.minestom.server.entity.ai.goal.RangedAttackGoal; +import net.minestom.server.entity.ai.target.ClosestEntityTarget; +import net.minestom.server.entity.metadata.EntityMeta; +import net.minestom.server.entity.metadata.monster.raider.EvokerMeta; +import net.minestom.server.entity.metadata.monster.raider.SpellcasterIllagerMeta; +import net.minestom.server.event.entity.EntityDeathEvent; +import net.minestom.server.event.entity.EntitySpawnEvent; +import net.minestom.server.item.ItemStack; +import net.minestom.server.item.Material; +import net.minestom.server.particle.Particle; +import net.minestom.server.sound.SoundEvent; +import net.minestom.server.tag.Tag; +import net.minestom.server.timer.TaskSchedule; +import net.minestom.server.utils.time.Cooldown; +import net.minestom.server.utils.time.TimeUnit; +import org.jetbrains.annotations.NotNull; + +import java.time.Duration; +import java.util.Random; +import java.util.function.Consumer; + +public class Evoker extends ArenaMob { + public Evoker() { + super(EntityType.EVOKER); + } + + @Override + protected void aiGroup() { + + Random rnd = new Random(); + int range = rnd.nextInt(3, 16); + + addAIGroup( + new EntityAIGroupBuilder() + .addGoalSelector(new ActionGoal(this, Duration.ofSeconds(20), target -> { + lookAt(target); + ((EvokerMeta) getEntityMeta()).setSpell(SpellcasterIllagerMeta.Spell.ATTACK); + + scheduler().scheduleTask(() -> { + + for(int i = 0; i < rnd.nextInt(2, 5); i++) { + ((Arena) instance).spawnMob(new Vex(), position.add(0, 2, 0), 3); + } + + ((EvokerMeta) getEntityMeta()).setSpell(SpellcasterIllagerMeta.Spell.NONE); + }, TaskSchedule.seconds(2), TaskSchedule.stop()); + + })) + .addGoalSelector(new RangedAttackGoal(this, Duration.ofDays(1), range, range, true, 0, 0)) + .addTargetSelector(new ClosestEntityTarget(this, 32, Player.class)) + .build() + ); + } + + @Override + protected void onSpawn(@NotNull EntitySpawnEvent entitySpawnEvent) { + super.onSpawn(entitySpawnEvent); + + setTag(Tag.Boolean("revived"), Math.random() < 0.5); + } + + @Override + protected void onDeath(@NotNull EntityDeathEvent entityDeathEvent) { + if(getTag(Tag.Boolean("revived"))) { + super.onDeath(entityDeathEvent); + return; + } + + particle(Particle.TOTEM_OF_UNDYING, entityDeathEvent.getEntity().getPosition(), 2, 60); + instance.playSound(Sound.sound(SoundEvent.ITEM_TOTEM_USE, Sound.Source.MASTER, 0.5f, 1)); + setTag(Tag.Boolean("revived"), true); + setHealth(getMaxHealth()/2); + updateHealthBar(); + refreshIsDead(false); + } + + private static final class ActionGoal extends GoalSelector { + private final Duration cooldown; + private final Consumer consumer; + private long lastSummon; + private Entity target; + + public ActionGoal(@NotNull EntityCreature entityCreature, @NotNull Duration cooldown, Consumer consumer) { + super(entityCreature); + this.cooldown = cooldown; + this.consumer = consumer; + } + + @Override + public boolean shouldStart() { + Entity target = entityCreature.getTarget(); + if (target == null) target = findTarget(); + if (target == null) return false; + if (Cooldown.hasCooldown(System.currentTimeMillis(), lastSummon, cooldown)) return false; + this.target = target; + return true; + } + + @Override + public void start() { + if (target == null) return; + entityCreature.setTarget(target); + } + + @Override + public void tick(long time) { + if (!Cooldown.hasCooldown(time, lastSummon, cooldown) && entityCreature.getTarget() != null) { + lastSummon = time; + consumer.accept(entityCreature.getTarget()); + } + } + + @Override + public boolean shouldEnd() { + final Entity target = entityCreature.getTarget(); + return target == null || target.isRemoved() || + Cooldown.hasCooldown(System.currentTimeMillis(), lastSummon, cooldown); + } + + @Override + public void end() {} + } +} diff --git a/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Pillager.java b/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Pillager.java new file mode 100644 index 0000000..7a43aef --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Pillager.java @@ -0,0 +1,14 @@ +package eu.mhsl.minenet.minestom.pve.arena.mob.creature; + +import eu.mhsl.minenet.minestom.pve.arena.mob.ArenaMob; +import net.minestom.server.entity.EntityType; +import net.minestom.server.item.ItemStack; +import net.minestom.server.item.Material; + +public class Pillager extends ArenaMob { + public Pillager() { + super(EntityType.PILLAGER); + + setItemInMainHand(ItemStack.of(Material.STONE_AXE)); + } +} diff --git a/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Spider.java b/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Spider.java new file mode 100644 index 0000000..d98d526 --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Spider.java @@ -0,0 +1,22 @@ +package eu.mhsl.minenet.minestom.pve.arena.mob.creature; + +import eu.mhsl.minenet.minestom.pve.arena.mob.ArenaMob; +import net.kyori.adventure.sound.Sound; +import net.minestom.server.entity.EntityType; +import net.minestom.server.entity.metadata.EntityMeta; +import net.minestom.server.entity.metadata.LivingEntityMeta; +import net.minestom.server.entity.metadata.monster.SpiderMeta; +import net.minestom.server.event.entity.EntityDamageEvent; +import net.minestom.server.event.entity.EntityDeathEvent; +import net.minestom.server.event.entity.EntitySpawnEvent; +import net.minestom.server.sound.SoundEvent; +import org.jetbrains.annotations.NotNull; + +public class Spider extends ArenaMob { + public Spider() { + super(EntityType.SPIDER); + setHealth(3); + } + + +} diff --git a/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Vex.java b/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Vex.java new file mode 100644 index 0000000..0587ae3 --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Vex.java @@ -0,0 +1,19 @@ +package eu.mhsl.minenet.minestom.pve.arena.mob.creature; + +import eu.mhsl.minenet.minestom.pve.arena.mob.ArenaMob; +import net.minestom.server.entity.EntityType; +import net.minestom.server.entity.Player; +import net.minestom.server.entity.ai.EntityAIGroupBuilder; +import net.minestom.server.entity.ai.target.ClosestEntityTarget; +import net.minestom.server.item.ItemStack; +import net.minestom.server.item.Material; +import org.jetbrains.annotations.NotNull; + +public class Vex extends ArenaMob { + public Vex() { + super(EntityType.VEX); + + setItemInMainHand(ItemStack.of(Material.GOLDEN_SWORD)); + } + +} diff --git a/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Zombie.java b/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Zombie.java new file mode 100644 index 0000000..772c71f --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minestom/pve/arena/mob/creature/Zombie.java @@ -0,0 +1,56 @@ +package eu.mhsl.minenet.minestom.pve.arena.mob.creature; + +import eu.mhsl.minenet.minestom.pve.arena.Arena; +import eu.mhsl.minenet.minestom.pve.arena.mob.ArenaMob; +import net.kyori.adventure.sound.Sound; +import net.minestom.server.coordinate.Point; +import net.minestom.server.coordinate.Pos; +import net.minestom.server.entity.Entity; +import net.minestom.server.entity.EntityType; +import net.minestom.server.entity.LivingEntity; +import net.minestom.server.entity.Player; +import net.minestom.server.entity.damage.DamageType; +import net.minestom.server.event.entity.EntityDeathEvent; +import net.minestom.server.event.entity.EntitySpawnEvent; +import net.minestom.server.instance.Explosion; +import net.minestom.server.instance.Instance; +import net.minestom.server.item.ItemStack; +import net.minestom.server.item.Material; +import net.minestom.server.particle.Particle; +import net.minestom.server.particle.ParticleCreator; +import net.minestom.server.sound.SoundEvent; +import net.minestom.server.tag.Tag; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class Zombie extends ArenaMob { + public Zombie() { + super(EntityType.ZOMBIE); + } + + @Override + protected void onSpawn(@NotNull EntitySpawnEvent entitySpawnEvent) { + super.onSpawn(entitySpawnEvent); + + setTag(Tag.Boolean("exploder"), Math.random() < 0.1); + if(getTag(Tag.Boolean("exploder"))) { + setItemInHand(Player.Hand.MAIN, ItemStack.builder(Material.TNT).build()); + setItemInHand(Player.Hand.OFF, ItemStack.builder(Material.FLINT_AND_STEEL).build()); + } + + if(Math.random() < 0.1) { + setItemInMainHand(ItemStack.of(Material.EXPERIENCE_BOTTLE)); + setExperience(50); + } + } + + @Override + protected void onDeath(@NotNull EntityDeathEvent entityDeathEvent) { + super.onDeath(entityDeathEvent); + if(getTag(Tag.Boolean("exploder"))) { + Pos pos = entityDeathEvent.getEntity().getPosition(); + ((Arena) instance).explosiveDamage(pos, 5, 10, 3); + } + } +} diff --git a/src/main/java/eu/mhsl/minenet/minestom/pve/util/Knockback.java b/src/main/java/eu/mhsl/minenet/minestom/pve/util/Knockback.java new file mode 100644 index 0000000..7500d3c --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minestom/pve/util/Knockback.java @@ -0,0 +1,31 @@ +package eu.mhsl.minenet.minestom.pve.util; + +import net.minestom.server.entity.LivingEntity; + +import javax.swing.text.html.parser.Entity; + +public class Knockback { + double x = 0; + double z = 0; + + public static Knockback calc(LivingEntity attacker) { + return new Knockback(attacker); + } + + private Knockback(LivingEntity attacker) { + this.x= Math.sin(attacker.getPosition().yaw() * (Math.PI / 180)); + this.z = -Math.cos(attacker.getPosition().yaw() * (Math.PI / 180)); + } + + public void apply(LivingEntity victim, float strength) { + victim.takeKnockback(strength, x, z); + } + + public double x() { + return x; + } + + public double z() { + return z; + } +} diff --git a/src/main/java/eu/mhsl/minenet/minestom/pve/util/Mapping.java b/src/main/java/eu/mhsl/minenet/minestom/pve/util/Mapping.java new file mode 100644 index 0000000..772d667 --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minestom/pve/util/Mapping.java @@ -0,0 +1,12 @@ +package eu.mhsl.minenet.minestom.pve.util; + +public class Mapping { + public static double map(double input, double in_min, double in_max, double out_min, double out_max) { +// if(input > in_max) in_max = input; +// if(in_min > in_max) in_max = in_min; +// if(out_min > out_max) out_max = out_min; + + return (input - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; + } + +}