From 245e49a0fa207839af28aee9536143456eb4fab2 Mon Sep 17 00:00:00 2001 From: ByteDice Date: Sat, 23 Nov 2024 17:40:12 +0100 Subject: [PATCH] made it client-compatible, added icon, fixed bugs --- .../client/Bde_particlesClient.kt | 56 ++++++++++++++++++ .../bde_particles.client.mixins.json | 11 ++++ .../bytedice/bde_particles/Bde_particles.kt | 15 ++++- .../bde_particles/commands/KillAllEmitters.kt | 3 + .../resources/assets/bde_particles/icon.png | Bin 0 -> 8636 bytes src/main/resources/fabric.mod.json | 11 ++-- 6 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 src/client/kotlin/com/bytedice/bde_particles/client/Bde_particlesClient.kt create mode 100644 src/client/resources/bde_particles.client.mixins.json create mode 100644 src/main/resources/assets/bde_particles/icon.png diff --git a/src/client/kotlin/com/bytedice/bde_particles/client/Bde_particlesClient.kt b/src/client/kotlin/com/bytedice/bde_particles/client/Bde_particlesClient.kt new file mode 100644 index 0000000..847d84b --- /dev/null +++ b/src/client/kotlin/com/bytedice/bde_particles/client/Bde_particlesClient.kt @@ -0,0 +1,56 @@ +package com.bytedice.bde_particles.client + +import com.bytedice.bde_particles.commands.GiveEmitterTool +import com.bytedice.bde_particles.commands.KillAllEmitters +import com.bytedice.bde_particles.commands.ManageEmitters +import com.bytedice.bde_particles.init +import com.bytedice.bde_particles.onRightClick +import com.bytedice.bde_particles.tick +import net.fabricmc.api.ClientModInitializer +import net.fabricmc.api.EnvType +import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents +import net.fabricmc.fabric.api.event.player.UseItemCallback +import net.fabricmc.loader.api.FabricLoader +import net.minecraft.entity.player.PlayerEntity +import net.minecraft.server.world.ServerWorld +import net.minecraft.util.ActionResult +import net.minecraft.util.Hand +import net.minecraft.util.TypedActionResult +import net.minecraft.world.World + +class Bde_particlesClient : ClientModInitializer { + override fun onInitializeClient() { + if (FabricLoader.getInstance().environmentType != EnvType.CLIENT) { + return + } + + println("BPS - Initializing on ${FabricLoader.getInstance().environmentType}") + + ServerLifecycleEvents.SERVER_STARTED.register { _ -> + init() + } + + ServerTickEvents.START_SERVER_TICK.register { server -> + tick(server) + } + + CommandRegistrationCallback.EVENT.register { dispatcher, registryAccess, _ -> + GiveEmitterTool.register(dispatcher, registryAccess) + ManageEmitters .register(dispatcher) + KillAllEmitters.register(dispatcher) + } + + UseItemCallback.EVENT.register(UseItemCallback { player: PlayerEntity, world: World, hand: Hand -> + if (world is ServerWorld) { + onRightClick(player, world, hand) + } + TypedActionResult(ActionResult.PASS, player.getStackInHand(hand)) + }) + + ServerLifecycleEvents.SERVER_STARTED.register(ServerLifecycleEvents.ServerStarted { _ -> + println("BDE_ParticleSys - Progress bar filled :3") + }) + } +} \ No newline at end of file diff --git a/src/client/resources/bde_particles.client.mixins.json b/src/client/resources/bde_particles.client.mixins.json new file mode 100644 index 0000000..2243cf1 --- /dev/null +++ b/src/client/resources/bde_particles.client.mixins.json @@ -0,0 +1,11 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "com.bytedice.bde_particles.mixin.client", + "compatibilityLevel": "JAVA_21", + "client": [ + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/src/main/kotlin/com/bytedice/bde_particles/Bde_particles.kt b/src/main/kotlin/com/bytedice/bde_particles/Bde_particles.kt index 4106b69..eb16a33 100644 --- a/src/main/kotlin/com/bytedice/bde_particles/Bde_particles.kt +++ b/src/main/kotlin/com/bytedice/bde_particles/Bde_particles.kt @@ -5,11 +5,13 @@ import com.bytedice.bde_particles.commands.KillAllEmitters import com.bytedice.bde_particles.commands.ManageEmitters import com.bytedice.bde_particles.items.ParticleEmitterTool import com.bytedice.bde_particles.particleIdRegister.* +import net.fabricmc.api.EnvType import net.fabricmc.api.ModInitializer import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents import net.fabricmc.fabric.api.event.player.UseItemCallback +import net.fabricmc.loader.api.FabricLoader import net.minecraft.entity.EntityType import net.minecraft.entity.decoration.DisplayEntity.BlockDisplayEntity import net.minecraft.entity.player.PlayerEntity @@ -25,9 +27,9 @@ import net.minecraft.world.World import java.util.* +// TODO: make it work client-side too // TODO: finish the particle ticking // TODO: make custom commands to create particles easier (only temporarily saved) - // ONLY FORCE FIELDS LEFT LES GO!!!!!!!! var ALL_PARTICLE_EMITTERS: Array = emptyArray() @@ -36,6 +38,12 @@ val sessionUuid: UUID = UUID.randomUUID() class Bde_particles : ModInitializer { override fun onInitialize() { + if (FabricLoader.getInstance().environmentType != EnvType.SERVER) { + return + } + + println("BPS - Initializing on ${FabricLoader.getInstance().environmentType}") + ServerLifecycleEvents.SERVER_STARTED.register { _ -> init() } @@ -51,7 +59,10 @@ class Bde_particles : ModInitializer { } UseItemCallback.EVENT.register(UseItemCallback { player: PlayerEntity, world: World, hand: Hand -> - onRightClick(player, world as ServerWorld, hand) + if (world is ServerWorld) { + onRightClick(player, world, hand) + } + TypedActionResult(ActionResult.PASS, player.getStackInHand(hand)) }) ServerLifecycleEvents.SERVER_STARTED.register(ServerLifecycleEvents.ServerStarted { _ -> diff --git a/src/main/kotlin/com/bytedice/bde_particles/commands/KillAllEmitters.kt b/src/main/kotlin/com/bytedice/bde_particles/commands/KillAllEmitters.kt index 786833c..f5ce987 100644 --- a/src/main/kotlin/com/bytedice/bde_particles/commands/KillAllEmitters.kt +++ b/src/main/kotlin/com/bytedice/bde_particles/commands/KillAllEmitters.kt @@ -5,7 +5,9 @@ import com.mojang.brigadier.Command import com.mojang.brigadier.CommandDispatcher import net.minecraft.server.command.CommandManager import net.minecraft.server.command.ServerCommandSource +import net.minecraft.text.Style import net.minecraft.text.Text +import java.awt.Color object KillAllEmitters { fun register(dispatcher: CommandDispatcher) { @@ -20,6 +22,7 @@ object KillAllEmitters { } val feedback = Text.literal("BPS - Killed all living Emitters.") + .setStyle(Style.EMPTY.withColor(Color(0, 200, 0).rgb)) context.source.sendFeedback({ feedback }, false) Command.SINGLE_SUCCESS diff --git a/src/main/resources/assets/bde_particles/icon.png b/src/main/resources/assets/bde_particles/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8972898ea0988115f050a548d44e91a2c3c0db0a GIT binary patch literal 8636 zcmV;tAw%AYP)APV9r6?9RDTEVZSNz+zH+mN(~xC$-~f`jPd z*Wf?URd7`h1Vs>WboOhJ63;b4McNx~&cl1}dpLOmfho(#x%Fd^%NL#aWK5f1SkxL{ zXrYrfA_S9$YfsNkB&fMQ@2FGtc0l#2eXr_jNtvzzbxpz}hV2xEWg4bdi?-q|;SM94 zObH(fM;#eZ_)6)z&(Df8KEEq=67g{esGeHp59@!}$T~UUe&I;YDjC1?s4oeb`MFuC z-LiXdi8DzI4V@AzSQHtMnwQL~`v!k}GZe&Q$lGQOM;sZl;*E-0lCGxIwCJWh7HcZ^ z|9QIU;UT|!CQPc#H()G)4J#*{H-%I@~qrbcT)D~PR#r8W~8@?Yu_y6Mk|LO0w&>sMQ;h(y~O#r|1*N*XMKf{fs z2t}@IvKHa!oN}RZ*XAR1`arP&T(&dJO-5Wiuy>kaX(qyXGeeI9&Q3%)Ze%9JBmS0M z%uPiYBtWN^p;QDe+CYu>#(YM~;WPd#^L(w$>nPW$s$Zk?DgUR5>bd7M%9S~eTjw*U zBR)^#MK(sv2Mv-8RgR%&cKVrJe|I%P!ZGWujMw;_<|csxpZ)kC!x!(x_{D!vK~W~G zNnT&%;`y*Y^LOua0$PBE(?5QWT-zowJ2(D0;}xU7{aW20^S;Q&vitZs%~HExpTk(; z`*6+Z38U+N-jj#Vu&4PDW zn-;lH*RCyVIB-S_&_aBXu4x^GNcYG>3jE&hbsgw?I)n+zg+?*(S}vCNmpGYfF~!_; z84J@DEYvz!Dl{ib%yO+Ftf$V9P?!dvy!&BEW1t%$z@{hP>f1u0VyrOT|n?FN$5GWr+CD9%?9Q#nZci2E&MlQW1` z?_g>50O`hnBl`1wasHHXAp}AA_nKdf-II}f6s3KIs|kXkYe*U{4z0n#MrQ4Jz$N%^ zLttI!ChUU;X=^OE6bIA-U4RRqAWFRPt1E}Nb0xvVd=>G;49%y8RIatOhNx0Q+@(9l zB?_{La@GY7){#ukBb%5+G>{-Vm@PIq9z~bA4g(g2-|l3u^94F%v`&L;?ykCh1=BX z0^%tyrd$E~eWZl)Y=ZvH`;w*GwvGa=A?mFoKI55ZwzVsNgITTmZ{aP#T6ri|e!?UBrKd z+AN}&PF1QQt4?FEKtHH336Kk=4C2iOKT?Qm_mIvm@E!`YR7J6Ih;-0H+G`NVXbEwX zmNlQ_%P4k)`3FyQE7Vf_jPikSm;mGgH40x^mmm9uT%=4F@-tb3G%Ir_9tf!w673rQ zEIIko9V-(4L}T&TEkpM+BJh^}jH)5IidzNy|=;4=N2*wCY@cf zapM{-l=CVcZBPK0OsJ>~Mu`xzN2&mFi2q0r7Tz%w~%bp&#b2_cNRP-2EJ0@|;4j4afemVKs;+bX87@o7*p!Jbu zxJ8biS1l9PJpw`H(2kvM0Q`~uQUaquXqX_`ImX>Wf-k&0i`vW-O_gRzcj$cdzfi9& zVftnXFU+3eX1|G};|n}KT1355v9Kn=r9}OR0?Srzav{|6aTn3jO(bh~C}=vsSB z3j`|^h3D#?;py6b+T}y&hq8)1yAzrV3+ATE`0VS~kw@#Epy*0TgI* z@Bm4-&Ln9oM|RWJbIDIwxj%W?G z0BQE(6j6_fkEP-SzVaj^1{HAS7EziQq0rd5M6~x9gNGk86w|8A26FM{DSXhbEY;^b zvIGf4C3raOTag^9sYiY?y1*8$*iG}*%^uD&oSb#={)ap0oE!ruyQpt}if)OZ!g!wc z`smXVdeH>-8#A;dS&*BZ?r#$?wa8-QDYDaTq>Kvb@ix(kAQ!RPEYejP)bja0Qu=;U zn?yQ2he(-Vj||o29x5};5+e$dVcK;Z(%|6p%2Y>DB3Od13t>>}HaOZhao5p;jh? z3n?;6)TWRu-=d}&3OjTIRVf6*B7eGjyUh6L>(@Vr0?%h{hDuq;(K`C|4dMc;OH+Lq zJLq}j4(_@me-8?nWX=`VZN{Lw_>)~ujEk1p>qcdIwq$84FMvE0>YP`NVqbo`)5C+k zB00e#S(_eKt9{I8jOX1po*Y-GecqKPNqUyX==2ie07su^?$1OhZZ${?G4;J9(l6e? zpio9}VgdaJ@6tROo(YJ>7DM61Qw(_RpfN!Eh(gD-SD=pCj$Jv{40(i*nC7*CXR~hM z&+q}on4v}~CwZl@ zSBesV{wXaUs8rhw64Ex001`C=71(hYtPv}y?yc3I39(Be` z|WjpOhCsIcsE~Nbq9B&;v&x7!McLbErGPP>b? zK$dPaNJZHT2#1D0Lj62+k0U@JaVA*zgk#7D?2sgI3vk()Fj#A63RR)N5v^rEc}&mC z-T{SBV!q&Xl(Rn}Uyw#ZDI8MP-Ln|K^FN6Peewz&0`q`~uk^ZFVj;vjr8A&$j)+%>L9bYY#fI|U93ywfGcrlf@d2xIULx7V zd2tAPavyVxJUL2fz5yd7C`F7R1s2Fs6O2#Hd4-&gqTFOrt$u``K3yibQgDS66bf|| zDy%&jpiQY?`Qi-#<$dGSR1TE7 zvdgh_Ji`a5K#(t&h`>%}2wXgthAM@^@ zWOB+WUMVmWF;eEjToD>U%?t~rfrwRv5^FS!P2;rPxJ!)c0e9?>$ocZM?jav=i+ut4 z{gCE1#@AEgeku;h3nK|+B%qv+3qZ-MWH}OIki0J<51n>4k0?CnW96F5Lsba3I-l34 zR#xkovr`59`io7xx^$^01tiKVSdT)Xnl*sV6&b1!ACLV{TKjW+z(uQ_M*vMZNBDez zVF>h^(EM6tiNc`B1zq1~p6*stw0};4g)BX{6k!I1qXKJOe`Y1-8mbp0AkQxxY>7vO z4EJ7K#;<+-7VeT0KR&#``S%j+odg$DSPn+%%MD@BYXya3$1;sQllOTI143P_mXec~ zC654Hlx{QxSNxYjT2jP@1(Tes9OUYB19xY7*g7xahlh*I?vxzKk~EI{u9eOf9ej~m zn6Rc`p;Ks`ccCoxcG^8ykAyf?E8;6(T*lYG^*Sc!$OF_XSXt}iH;c#kz2DzOgDJ5e zZsO`jc^2!$?64BF=ebK(O40Ltz>GCZ-OLT(%)}@a-c#VpXRBQFTmg5NW8AwofyJ2; zD)9`eWEZY)KEcNBD8Yy_&NBP+bNZcvxxHG!FTa%H z*40a*gWC3-q*xFVFrT^I!mqvteCLNLt4(LJO$Y|Uf+r_(LZ8!{Hf{mq)!>j1P$zas zCFNkFzst-J-*|Ny-?)B)ruz+7ms2otHGbc2bgv&PUpEaZ$Pp8C z@EGaVr^eu}v8Q*X+QGwaiRhvFL4qLu8=B{#b1X*)WQCwEWlUFWzjvd8KmX0UxHds1 zinYSv`pXvX2CXIrM{J5tuscMH%Qa<0>C)0N{_Gd)_}#Zt?4F9!r`1TH!zhs_L^hus zC-SEEGkm}zlY`(l22jk>*4EgNyus!KOVDVF+#QLJh^;J{VZ`oC#wJB{n=N&wv$d%j z-hAsGcD{RnE_Y0XbXb7oA<2d7h_6X{TTO0JreD9rp8apXHG!r2Lyq0WV2Tzux5^}t zRy0ikF&Riy_)IWgAakr(ls(->VQ>xCX4de{LKnaHN2h4AT6EwI#hbV1?77BiXcNVV z53tNdb+P5&W}-eollk|9J^rndlR0@-phBZg6wcTcddNa)2R$-BX_eI>nINcf zQezL1wv~~4Ovoswv`BDHeG;VVE8c%)72kNHMvDpE>yQ}+d(W|k0u3Ojb(;Vb50xK> z*0;_nuK#570`(0xDp;(5#HaaQ(n4XHCG6eLk;>u(Km7^f9a32&E^6H~+?l4ZatHIG zN&|ZuIz(iiS68{lr0>^$aT(wK>NQ~F5t757sV7Qd((P{Fr?%NUoMc(8NOE>Si{n`2 z1R`0USrT&u@`n9g5+=+!{?tprXRnIpAN3*)+Z-1CN15%<+aJ&(o_XcucgS>~UPRbB z?&FO+Y+Li8S!IesCwu$kJQ=?vfcg?YTX*hT!o_o>Mvrln+(C$Ax1d68f@gOu79YYdvc{5Ng2hz(?&3p8ua zC1o@!kSA1MBI`C$PLA>I`+YPnTG*^BwH{l19s(tVJ~7}qK0t|(^rVm_!%$AvW!3h> z5BG8Z8exqzch;kC(KJtYPf@IY2hDf_yJTkG-z{VPXo?Ylbwn<2?I+L#ES(OVfJFu1 z&ech7&6~lMwK=pmsC6;Dyrx{8N0|gk*5Uqugn&mA*AZWeYA>UAa)N{dWak9o`9+q~ zRrDI?tQ5H-3INw$$MQlG-|GAr|KZ&V4lh0N8tqZg+6tH_e;JM;AE2JO7B9_v9p@R{ z!+l`qY=AqwDI*v*)<42WM=?I#Dr3J}W=y3;3@TO@hYb@#X%BJSi)^G;88Wv%!i~8Oe)-xi{_~@2XtQh%MVl952~ID54j-_0(i$!x0HIvs zl8uuOes)5DVu$DPK7Q~xp?NJ6NrmE`&N_{jFWNFLPeU!I&rx69+^@V;!dur*QGa}d z{>eP%XJ+WbRd#%?B4%jqZ2lC30r`Qc8z^_0Y>RP62>m{x0J0wE*VsXP?K6xDq{zu2 zWoP?zL4HTUri>0WA@(C?*+N*r3p1N|g^}sK#tIdwx)Dljy_XTWjS=!<%6LQmt`>Xv`n>_ZaJ7RH z>+Z@6H`zBhME3Y2#0$%|^Fx~=dW$kII$m@X-rT3e4>;N3>1~MVK0@drIHsuk^ZA7q?pEspa8h13P`gEq zGok4p?=!OSdGup23+xl|(KtYr3~+Y#7#UmU+3XE!{Y7Jd3$&7y2~)-}7&RC&71ycl z^ywbTrw0ICG+|${-#O(vB5bs0P#rCKSWiYtU|=bUaO2Y>8mo^Ulq2_vT5!Rq1hK#u5zyc7qq-;=VJPB z5A$fZi6@s#jmzvY-eNRFK!&;B z?&IOv4Bn})pqKib0tq90X_8qEe84adP$Fa^$j#boex|Wz5rO1%Vo}VI?GLfauV777 zr_Z!SE>L7%UQ0;Z%^Kd_n-1kQX zk@pHmd7W2n+U3*gKv-PuwnA{{ygdEb5dIDA97zH zXa(`qH2OPFTx?Us0GjoH&C@moQe^jcmJQVCh}&bhnX2Dpgm~dAOqA|9VRL!xZlGQR z!`;Dggg@9>!;`iX|E5S4TVk&DJIA+NGWKi82Xtv=?z_z1SdXim>~cSuG+1QQv&Rae zMjvgmNja(P%Uq?xMn#L!N51X}N0&`bBhDxkC$*gM(KvN7zu#M*#BA*$uAWnyi%Y~l zUVDB(Bo621q;LO(F3&J{Vx7D$(Z-g2(EcYJ1|dD zfj4>GlJzm}0xj+4%42+qAyQT%##chCRLK|6 zHG~Nx`pdPib7qhtJvsh5ImCC?39R*ViwYK~X!4P^%y9E$b$JDqHFk~{uOPblWi+y@ ztPa%~p%t9%(y#a&<^qK_(_lXPz3lC$DZ~AFujehG9{j!=U$^H=7t(9=JjSFw8Y0JRs7-R zGMWQtswHG8(1jgl?=uSLv>WER{Q=rJ6-q{Zs?rZTG*e4#`2PW2L1EFfp63Ya9;+uP zD-mvp9`Dh<)Gp$VuNND&N$`OPRAk_xnF%DyLKvA3s^eG3y{>f$TXR$~_YuXQV>`M4V#V zO~*6)14>1&1q5I%?bgT{94*jldP0C_d`>hA49z0=BfKyxp(Q9$3L(__c;93}D%V)1 zz}0D#i*AHJ`n1BWb=)V-ONuJ7$?v7C4$Is=H`v{_n!s{?j!-At6V*?-#jeZGG5%n4 z5r-EniS=CD+`-b@SY@B33*XZ|!yt%yy2Fa zm`qPrsgP);=E>MJAAN|{>4rrY9oxG_>>hUUUp}6~`Y91V?*W)H)T|LIX){$G_JUQr zQe27Z3xsu#c8PJXkPQ}?RaSwMEKcNS1HC3!85sJ@LP|_g2VLn`%#2cA0!y2M%-hd; zkQg7gM+ep+BTG${xjkMk#SQaB8gqlGVx4DDifJ`*+E}3TX*Jn7Yb&;5_f4G}r@kfvGxf^uB zOOY-QandT{3CrfgHgl3x?Kl2r_#5{Bhv6-}GobnKxfGc;T6uHE6TFbAYR+v&f#>!I zB;@+~IfA=Zy)$eaJI!91*RV}y3!*hB_s`>Nn+cIHmr>n4(7MN3yo06%A*&PeCbczA zR9TWxk3h`zLl@8o)x~W}eE3!eW4cnvaI@0gzW94qftsiio`g3j>{*`A zEKmz@T&;0dw*%b{wtKj3%&RtvA+j`5>^$=%r;AiV2i(zJWn zQPq1rhTtrOm<1~3^^(}zESgX+$y@9u@O+zU4m@GsfhMPMtVpsST11{-1g(VcRfd~D zC_vqBO_pJm>eZ%m7s3Tg0CEBQeZ$f`pQnWS-~Ran>ka$&Q;(nPf@MAz$_LbMbi>RzwSYHaCJHo;otm?V|HbM-}*<3 zL;ui+KWT4||GU3^i~}n4ul_4az?_Fic!OM6pyN;S+vDSJzrXkJB>KOZGewtGjST(( O0000