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 0000000..8972898 Binary files /dev/null and b/src/main/resources/assets/bde_particles/icon.png differ diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index b663eac..55c92f2 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -3,13 +3,16 @@ "id": "bde_particles", "version": "${version}", "name": "BDE Particle System", - "description": "A server-side particle system ", - "authors": [], + "description": "A highly-customizable server-side particle system ", + "authors": ["Byte Dice"], "contact": {}, - "license": "All-Rights-Reserved", + "license": "CC BY-NC-SA 4.0", "icon": "assets/bde_particles/icon.png", - "environment": "server", + "environment": "*", "entrypoints": { + "client": [ + "com.bytedice.bde_particles.client.Bde_particlesClient" + ], "main": [ "com.bytedice.bde_particles.Bde_particles" ]